<?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>199189</bug_id>
          
          <creation_ts>2019-06-25 04:24:38 -0700</creation_ts>
          <short_desc>WebSockets: add support for sending blob messages when using web sockets platform APIs</short_desc>
          <delta_ts>2019-07-01 01:10:21 -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>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=198568</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=199151</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk, InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ggaren</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1547679</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-06-25 04:24:38 -0700</bug_when>
    <thetext>It&apos;s currently unimplemented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547680</commentid>
    <comment_count>1</comment_count>
      <attachid>372834</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-06-25 04:28:46 -0700</bug_when>
    <thetext>Created attachment 372834
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547707</commentid>
    <comment_count>2</comment_count>
      <attachid>372834</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-06-25 09:45:47 -0700</bug_when>
    <thetext>Comment on attachment 372834
Patch

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

&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:180
&gt; +    m_pendingBlobMessages.append(std::make_unique&lt;BlobLoader&gt;(m_document.get(), blob, [this, protectedThis = makeRef(*this)] {

Whenever we have a pending blob message, we should enqueue all other messages until sending the blob.
Otherwise send(blob);send(arrayBuffer); will end up sending the arrayBuffer first and the blob second.
Since blobs are stored in NetworkProcess, it might be more efficient to do this enqueuing/reading in Network Process as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548000</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-06-26 04:38:55 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #2)
&gt; Comment on attachment 372834 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=372834&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:180
&gt; &gt; +    m_pendingBlobMessages.append(std::make_unique&lt;BlobLoader&gt;(m_document.get(), blob, [this, protectedThis = makeRef(*this)] {
&gt; 
&gt; Whenever we have a pending blob message, we should enqueue all other
&gt; messages until sending the blob.
&gt; Otherwise send(blob);send(arrayBuffer); will end up sending the arrayBuffer
&gt; first and the blob second.

Oops, indeed.

&gt; Since blobs are stored in NetworkProcess, it might be more efficient to do
&gt; this enqueuing/reading in Network Process as well.

hmm, that would be more complicated, I&apos;m afraid, we need to register the blob, send a network request to the network process socket channel, start the network load, and reaply back to unregister the blob. The part of starting the network connection in the network process is what I think it&apos;s more complicated. Should we use NetworkREsourceLoder? or NetworkLoad directly? For now I&apos;m going to leave it in the web process using FileReadLoader, I&apos;m not sure it&apos;s worth the effort of optimizing that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548001</commentid>
    <comment_count>4</comment_count>
      <attachid>372915</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-06-26 04:50:28 -0700</bug_when>
    <thetext>Created attachment 372915
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548365</commentid>
    <comment_count>5</comment_count>
      <attachid>372915</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-06-26 22:45:52 -0700</bug_when>
    <thetext>Comment on attachment 372915
Patch

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

&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:159
&gt; +    const RefPtr&lt;JSC::ArrayBuffer&gt;&amp; result() const { return m_buffer; }

Preexisting issue in WebSocket code so I guess this is fine.
But it does not seem super great to get a JSC::ArrayBuffer.
Maybe we should do some refactoring or use FetchLoader like in FetchBodyOwner.

&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:195
&gt; +    PendingMessage(const String&amp; message, CompletionHandler&lt;void()&gt;&amp;&amp; completionHandler)

String&amp;&amp;

&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:229
&gt; +    CompletionHandler&lt;void()&gt; m_completionHandler;

Since these are completion handlers, we should call them when clearing the pending messages, otherwise there will be debug asserts.
Maybe we should change the implementation so that keeping these completion handlers is not needed.
That would mean slight adjustements to how we compute m_bufferedAmount.

Also this patch is doing multi blob loading in parallel.
While this is better for performance, we might be able to simplify things by keeping the current behavior, which means having a Deque&lt;Variant&lt;String, ArrayBuffer, Blob&gt;&gt; and a bool m_loadingBlob.

&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:236
&gt; +        return send(JSC::ArrayBuffer::create(blob.size(), 1), 0, 0);

If size is greater than zero, we need to +/- m_bufferedAmount

&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:238
&gt; +    m_pendingMessages.append(std::make_unique&lt;PendingMessage&gt;(m_document.get(), blob, [this, protectedThis = makeRef(*this)] {

We might want to check whether the socket is closed there.
A protectedThis is not needed here since m_pendingMessages is owned.

&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:258
&gt; +                    send(*result, 0, result-&gt;byteLength());

We should probably do a sendWithAsyncReply here instead of a send.
That might be needed for m_bufferedAmount and for readability.
Initially I was puzzled of m_sendingPendingBlobMessage check in send(ArrayBuffer) but not send(String)

&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:260
&gt; +                    fail(makeString(&quot;Failed to load Blob: error code = &quot;, errorCode.value()));

I wonder whether something more is needed, like sending an onerror message.
Might be somehow testable with an Internals API to create a &apos;fake&apos; blob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548408</commentid>
    <comment_count>6</comment_count>
      <attachid>372915</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-06-27 02:24:12 -0700</bug_when>
    <thetext>Comment on attachment 372915
Patch

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

&gt;&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:229
&gt;&gt; +    CompletionHandler&lt;void()&gt; m_completionHandler;
&gt; 
&gt; Since these are completion handlers, we should call them when clearing the pending messages, otherwise there will be debug asserts.
&gt; Maybe we should change the implementation so that keeping these completion handlers is not needed.
&gt; That would mean slight adjustements to how we compute m_bufferedAmount.
&gt; 
&gt; Also this patch is doing multi blob loading in parallel.
&gt; While this is better for performance, we might be able to simplify things by keeping the current behavior, which means having a Deque&lt;Variant&lt;String, ArrayBuffer, Blob&gt;&gt; and a bool m_loadingBlob.

There&apos;s a FIXME in current code, so I thought this was a good moment to fix that in the new code path.

// FIXME: Load two or more Blobs simultaneously for better performance.

&gt;&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:236
&gt;&gt; +        return send(JSC::ArrayBuffer::create(blob.size(), 1), 0, 0);
&gt; 
&gt; If size is greater than zero, we need to +/- m_bufferedAmount

Size is always 0, I&apos;m using blob.size() instead of 0 directly to disambiguate from the different ::create() methods. This is calling send() anyway that already takes care of m_bufferedAmount, even though it will do nothing in this case.

&gt;&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:238
&gt;&gt; +    m_pendingMessages.append(std::make_unique&lt;PendingMessage&gt;(m_document.get(), blob, [this, protectedThis = makeRef(*this)] {
&gt; 
&gt; We might want to check whether the socket is closed there.
&gt; A protectedThis is not needed here since m_pendingMessages is owned.

You mean checking it in the completion handler after the blob is loaded?

&gt;&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:258
&gt;&gt; +                    send(*result, 0, result-&gt;byteLength());
&gt; 
&gt; We should probably do a sendWithAsyncReply here instead of a send.
&gt; That might be needed for m_bufferedAmount and for readability.
&gt; Initially I was puzzled of m_sendingPendingBlobMessage check in send(ArrayBuffer) but not send(String)

send() is needed for m_bufferedAmount, using sendWithAsyncReply here would require to define the completion handler here and handle buffered amount, that would duplicate code and make readability here worse for sure. I agree the m_sendingPendingBlobMessage is confusing though.

&gt;&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:260
&gt;&gt; +                    fail(makeString(&quot;Failed to load Blob: error code = &quot;, errorCode.value()));
&gt; 
&gt; I wonder whether something more is needed, like sending an onerror message.
&gt; Might be somehow testable with an Internals API to create a &apos;fake&apos; blob.

Right, this is not correct, old code called WebSocketChannel::fail() which sends an onerror message, but in the new code path it sends Close message to the network process. What we want here is actually didReceiveMessageError(), or make fail() call m_client-&gt;didReceiveMessageError(); before sending the Close message.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548428</commentid>
    <comment_count>7</comment_count>
      <attachid>373016</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-06-27 04:19:54 -0700</bug_when>
    <thetext>Created attachment 373016
Patch

Updated patch. It simplifies the way buffered amount is handled, so that we don&apos;t need to keep completion handlers around when queuing messages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548434</commentid>
    <comment_count>8</comment_count>
      <attachid>373019</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-06-27 04:57:55 -0700</bug_when>
    <thetext>Created attachment 373019
Try to fix apple builds

Just guessing what the problem is...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548463</commentid>
    <comment_count>9</comment_count>
      <attachid>373029</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-06-27 06:42:35 -0700</bug_when>
    <thetext>Created attachment 373029
Try to fix apple builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548470</commentid>
    <comment_count>10</comment_count>
      <attachid>373031</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-06-27 06:51:22 -0700</bug_when>
    <thetext>Created attachment 373031
Try to fix apple builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548756</commentid>
    <comment_count>11</comment_count>
      <attachid>373095</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-06-28 00:55:54 -0700</bug_when>
    <thetext>Created attachment 373095
Try to fix apple builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548896</commentid>
    <comment_count>12</comment_count>
      <attachid>373095</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-06-28 11:35:02 -0700</bug_when>
    <thetext>Comment on attachment 373095
Try to fix apple builds

r=me.

Since we might want the same mechanism for DataChannel, I wonder though whether we should not have a more generic mechanism.
Something like a Queue where we can push String/ArrayBuffer/Blob.
The queue could be query whether empty or not.
It would take a Function callback to notify that a Variant&lt;String, ArrayBuffer&gt; is ready to be sent.

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

&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:253
&gt; +

As per spec, I think we should increase the buffered amount by blob.size() synchronously.
And decrement it when receiving the IPC message.
This does not seem to be like this in the previous implementation though.
It might be nice to have a test for that and check what other browsers are doing.

&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:264
&gt; +                sendMessage(Messages::NetworkSocketChannel::SendData { IPC::DataReference { reinterpret_cast&lt;const uint8_t*&gt;(binaryData.data()), binaryData.size() } }, binaryData.size());

Maybe we should have routines for these sendMessage(text) sendMessage(binary).

&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:277
&gt; +                    fail(makeString(&quot;Failed to load Blob: error code = &quot;, errorCode.value()));

I am not sure this error handling is good enough.
If there is no test coverage for that case, we should file a bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1549154</commentid>
    <comment_count>13</comment_count>
      <attachid>373095</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-07-01 01:07:19 -0700</bug_when>
    <thetext>Comment on attachment 373095
Try to fix apple builds

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

&gt;&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:253
&gt;&gt; +
&gt; 
&gt; As per spec, I think we should increase the buffered amount by blob.size() synchronously.
&gt; And decrement it when receiving the IPC message.
&gt; This does not seem to be like this in the previous implementation though.
&gt; It might be nice to have a test for that and check what other browsers are doing.

I thought about that, but decided to keep the current behaviour. Before the blob is loaded we haven&apos;t buffered any data yet, so I think it makes sense to increase it after the blob loaded.

&gt;&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:264
&gt;&gt; +                sendMessage(Messages::NetworkSocketChannel::SendData { IPC::DataReference { reinterpret_cast&lt;const uint8_t*&gt;(binaryData.data()), binaryData.size() } }, binaryData.size());
&gt; 
&gt; Maybe we should have routines for these sendMessage(text) sendMessage(binary).

Instead of the template or in addition to?

&gt;&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:277
&gt;&gt; +                    fail(makeString(&quot;Failed to load Blob: error code = &quot;, errorCode.value()));
&gt; 
&gt; I am not sure this error handling is good enough.
&gt; If there is no test coverage for that case, we should file a bug.

It&apos;s not easy to work with the tests when most of them are failing and we this code path is not used in the bots. If I add a new test for this, we might need to change the old code too. In any case, we are not generating console messages yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1549155</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-07-01 01:08:44 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #12)
&gt; Comment on attachment 373095 [details]
&gt; Try to fix apple builds
&gt; 
&gt; r=me.
&gt; 
&gt; Since we might want the same mechanism for DataChannel, I wonder though
&gt; whether we should not have a more generic mechanism.
&gt; Something like a Queue where we can push String/ArrayBuffer/Blob.
&gt; The queue could be query whether empty or not.
&gt; It would take a Function callback to notify that a Variant&lt;String,
&gt; ArrayBuffer&gt; is ready to be sent.
&gt; 

What&apos;s DataChannel? I&apos;ll check if we can refactor to share the same code then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1549157</commentid>
    <comment_count>15</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-07-01 01:09:58 -0700</bug_when>
    <thetext>Committed r246964: &lt;https://trac.webkit.org/changeset/246964&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1549158</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-07-01 01:10:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/52445572&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372834</attachid>
            <date>2019-06-25 04:28:46 -0700</date>
            <delta_ts>2019-06-26 04:50:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-websockets-blobs.diff</filename>
            <type>text/plain</type>
            <size>6495</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlNTRlMzI2ZWZjMi4uMDdmZjFmYzgzYTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxOS0wNi0yNSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgV2ViU29ja2V0czogYWRkIHN1cHBvcnQgZm9yIHNlbmRpbmcg
YmxvYiBtZXNzYWdlcyB3aGVuIHVzaW5nIHdlYiBzb2NrZXRzIHBsYXRmb3JtIEFQSXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OTE4OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZTogQWRkIG1pc3NpbmcgaGVhZGVycy4KKwogMjAxOS0wNi0yNCAgV2Vuc29uIEhzaWVoICA8d2Vu
c29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBbVGV4dCBhdXRvc2l6aW5nXSBbaVBhZE9T
XSBSZXZpc2Ugb3VyIGhldXJpc3RpY3MgdG8gZGV0ZXJtaW5lIGlkZW1wb3RlbnQgdGV4dCBhdXRv
c2l6aW5nIGNhbmRpZGF0ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGE4MWQ4MmFiOGRmLi4wMTdj
OTEyOWVmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9T
b3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC01MTUsNyArNTE1LDkgQEAgc2V0KFdlYkNv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIGZpbGVhcGkvQmxvYkxpbmVFbmRpbmdz
LmgKICAgICBmaWxlYXBpL0Jsb2JQcm9wZXJ0eUJhZy5oCiAgICAgZmlsZWFwaS9GaWxlLmgKKyAg
ICBmaWxlYXBpL0ZpbGVFcnJvci5oCiAgICAgZmlsZWFwaS9GaWxlTGlzdC5oCisgICAgZmlsZWFw
aS9GaWxlUmVhZGVyTG9hZGVyLmgKICAgICBmaWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXJDbGllbnQu
aAogCiAgICAgaGlzdG9yeS9CYWNrRm9yd2FyZENsaWVudC5oCkBAIC0xMTY4LDYgKzExNzAsNyBA
QCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vbmV0
d29yay9CbG9iUGFydC5oCiAgICAgcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnkuaAogICAg
IHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5oCisgICAgcGxhdGZvcm0vbmV0d29y
ay9CbG9iUmVzb3VyY2VIYW5kbGUuaAogICAgIHBsYXRmb3JtL25ldHdvcmsvQ2FjaGVWYWxpZGF0
aW9uLmgKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0NlcnRpZmljYXRlSW5mb0Jhc2UuaAogICAgIHBs
YXRmb3JtL25ldHdvcmsvQ29va2llUmVxdWVzdEhlYWRlckZpZWxkUHJveHkuaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRl
eCA0ZThjYjY1Yzk4MS4uMWFhMmEyNzA2MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIw
MTktMDYtMjUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFdlYlNvY2tldHM6IGFkZCBzdXBwb3J0IGZvciBzZW5kaW5nIGJsb2IgbWVzc2FnZXMg
d2hlbiB1c2luZyB3ZWIgc29ja2V0cyBwbGF0Zm9ybSBBUElzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTkxODkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgaGVscGVyIHByaXZhdGUgY2xhc3MgQmxv
YkxvYWRlciB0aGF0IHVzZXMgRmlsZVJlYWRlckxvYWRlciB0byBsb2FkIHRoZSBibG9icy4KKwor
ICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViU29ja2V0Q2hhbm5lbDo6c2VuZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlNvY2tldENoYW5uZWw6OmRpc2Nvbm5lY3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29y
ay9XZWJTb2NrZXRDaGFubmVsLmg6CisKIDIwMTktMDYtMjQgIEJyYWR5IEVpZHNvbiAgPGJlaWRz
b25AYXBwbGUuY29tPgogCiAgICAgICAgIE51bGwgZGVyZWYgaW4gV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hh
bm5lbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFu
bmVsLmNwcAppbmRleCBlM2EyM2E0NGFhNC4uMmJhNzVlZjQ2NWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuY3BwCkBAIC0z
Myw2ICszMyw4IEBACiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVk
ZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0ZpbGVSZWFkZXJMb2FkZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVSZWFk
ZXJMb2FkZXJDbGllbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9XZWJTb2NrZXRDaGFubmVsLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9X
ZWJTb2NrZXRDaGFubmVsQ2xpZW50Lmg+CkBAIC0xMjUsMTAgKzEyNyw3MyBAQCBXZWJTb2NrZXRD
aGFubmVsOjpTZW5kUmVzdWx0IFdlYlNvY2tldENoYW5uZWw6OnNlbmQoY29uc3QgSlNDOjpBcnJh
eUJ1ZmZlciYgYmluYQogICAgIHJldHVybiBTZW5kU3VjY2VzczsKIH0KIAotV2ViU29ja2V0Q2hh
bm5lbDo6U2VuZFJlc3VsdCBXZWJTb2NrZXRDaGFubmVsOjpzZW5kKFdlYkNvcmU6OkJsb2ImKQor
Y2xhc3MgQmxvYkxvYWRlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpGaWxlUmVhZGVyTG9hZGVy
Q2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBCbG9i
TG9hZGVyKFdlYkNvcmU6OkRvY3VtZW50KiBkb2N1bWVudCwgQmxvYiYgYmxvYiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICA6IG1fbG9hZGVy
KHN0ZDo6bWFrZV91bmlxdWU8RmlsZVJlYWRlckxvYWRlcj4oRmlsZVJlYWRlckxvYWRlcjo6UmVh
ZEFzQXJyYXlCdWZmZXIsIHRoaXMpKQorICAgICAgICAsIG1fY29tcGxldGlvbkhhbmRsZXIoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpCisgICAgeworICAgICAgICBtX2xvYWRlci0+c3RhcnQo
ZG9jdW1lbnQsIGJsb2IpOworICAgIH0KKworICAgIH5CbG9iTG9hZGVyKCkKKyAgICB7CisgICAg
ICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKKyAgICB9
CisKKyAgICBib29sIGlzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJuICEhbV9sb2FkZXI7IH0KKyAg
ICBjb25zdCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4mIHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJu
IG1fYnVmZmVyOyB9CisgICAgT3B0aW9uYWw8aW50PiBlcnJvckNvZGUoKSBjb25zdCB7IHJldHVy
biBtX2Vycm9yQ29kZTsgfQorCitwcml2YXRlOgorICAgIHZvaWQgZGlkU3RhcnRMb2FkaW5nKCkg
ZmluYWwgeyB9CisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YSgpIGZpbmFsIHsgfQorCisgICAgdm9p
ZCBkaWRGaW5pc2hMb2FkaW5nKCkgZmluYWwKKyAgICB7CisgICAgICAgIG1fYnVmZmVyID0gbV9s
b2FkZXItPmFycmF5QnVmZmVyUmVzdWx0KCk7CisgICAgICAgIGNvbXBsZXRlKCk7CisgICAgfQor
CisgICAgdm9pZCBkaWRGYWlsKGludCBlcnJvckNvZGUpIGZpbmFsCisgICAgeworICAgICAgICBt
X2Vycm9yQ29kZSA9IGVycm9yQ29kZTsKKyAgICAgICAgY29tcGxldGUoKTsKKyAgICB9CisKKyAg
ICB2b2lkIGNvbXBsZXRlKCkKKyAgICB7CisgICAgICAgIG1fbG9hZGVyID0gbnVsbHB0cjsKKyAg
ICAgICAgbV9jb21wbGV0aW9uSGFuZGxlcigpOworICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpGaWxlUmVhZGVyTG9hZGVyPiBtX2xvYWRlcjsKKyAgICBSZWZQdHI8SlNDOjpB
cnJheUJ1ZmZlcj4gbV9idWZmZXI7CisgICAgT3B0aW9uYWw8aW50PiBtX2Vycm9yQ29kZTsKKyAg
ICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+IG1fY29tcGxldGlvbkhhbmRsZXI7Cit9OworCitX
ZWJTb2NrZXRDaGFubmVsOjpTZW5kUmVzdWx0IFdlYlNvY2tldENoYW5uZWw6OnNlbmQoV2ViQ29y
ZTo6QmxvYiYgYmxvYikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTZW5k
RmFpbDsKKyAgICBtX3BlbmRpbmdCbG9iTWVzc2FnZXMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8
QmxvYkxvYWRlcj4obV9kb2N1bWVudC5nZXQoKSwgYmxvYiwgW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKV0geworICAgICAgICB3aGlsZSAoIW1fcGVuZGluZ0Jsb2JNZXNzYWdl
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGF1dG8mIGxvYWRlciA9IG1fcGVuZGluZ0Jsb2JN
ZXNzYWdlcy5maXJzdCgpOworICAgICAgICAgICAgaWYgKGxvYWRlci0+aXNMb2FkaW5nKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoY29uc3QgYXV0byYgcmVz
dWx0ID0gbG9hZGVyLT5yZXN1bHQoKSkKKyAgICAgICAgICAgICAgICBzZW5kKCpyZXN1bHQsIDAs
IHJlc3VsdC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGF1dG8gZXJyb3JD
b2RlID0gbG9hZGVyLT5lcnJvckNvZGUoKSkKKyAgICAgICAgICAgICAgICBmYWlsKG1ha2VTdHJp
bmcoIkZhaWxlZCB0byBsb2FkIEJsb2I6IGVycm9yIGNvZGUgPSAiLCBlcnJvckNvZGUudmFsdWUo
KSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworCisgICAgICAgICAgICBtX3BlbmRpbmdCbG9iTWVzc2FnZXMucmVtb3ZlRmlyc3QoKTsK
KyAgICAgICAgfQorICAgIH0pKTsKKyAgICByZXR1cm4gU2VuZFN1Y2Nlc3M7CiB9CiAKIHVuc2ln
bmVkIFdlYlNvY2tldENoYW5uZWw6OmJ1ZmZlcmVkQW1vdW50KCkgY29uc3QKQEAgLTE1Nyw2ICsy
MjIsNyBAQCB2b2lkIFdlYlNvY2tldENoYW5uZWw6OmRpc2Nvbm5lY3QoKQogICAgIG1fY2xpZW50
ID0gbnVsbHB0cjsKICAgICBtX2RvY3VtZW50ID0gbnVsbHB0cjsKICAgICBtX3BlbmRpbmdUYXNr
cy5jbGVhcigpOworICAgIG1fcGVuZGluZ0Jsb2JNZXNzYWdlcy5jbGVhcigpOwogCiAgICAgTWVz
c2FnZVNlbmRlcjo6c2VuZChNZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6OkNsb3NlIHsg
MCwgeyB9IH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdv
cmsvV2ViU29ja2V0Q2hhbm5lbC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsv
V2ViU29ja2V0Q2hhbm5lbC5oCmluZGV4IGQ4YTZhYWMyMTEyLi5mOTM4NTAwZjdhYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwu
aApAQCAtNDEsNiArNDEsOCBAQCBjbGFzcyBEYXRhUmVmZXJlbmNlOwogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAorY2xhc3MgQmxvYkxvYWRlcjsKKwogY2xhc3MgV2ViU29ja2V0Q2hhbm5lbCA6IHB1
YmxpYyBJUEM6Ok1lc3NhZ2VTZW5kZXIsIHB1YmxpYyBJUEM6Ok1lc3NhZ2VSZWNlaXZlciwgcHVi
bGljIFdlYkNvcmU6OlRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLCBwdWJsaWMgUmVmQ291bnRl
ZDxXZWJTb2NrZXRDaGFubmVsPiwgcHVibGljIElkZW50aWZpZWQ8V2ViU29ja2V0Q2hhbm5lbD4g
ewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8V2ViU29ja2V0Q2hhbm5lbD4gY3JlYXRlKFdlYkNv
cmU6OkRvY3VtZW50JiwgV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbENsaWVudCYpOwpAQCAtOTIs
NiArOTQsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0Nsb3NpbmcgeyBmYWxzZSB9OwogICAg
IGJvb2wgbV9pc1N1c3BlbmRlZCB7IGZhbHNlIH07CiAgICAgRGVxdWU8RnVuY3Rpb248dm9pZCgp
Pj4gbV9wZW5kaW5nVGFza3M7CisgICAgRGVxdWU8c3RkOjp1bmlxdWVfcHRyPEJsb2JMb2FkZXI+
PiBtX3BlbmRpbmdCbG9iTWVzc2FnZXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372915</attachid>
            <date>2019-06-26 04:50:28 -0700</date>
            <delta_ts>2019-06-27 04:19:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-sockets-blob.diff</filename>
            <type>text/plain</type>
            <size>11604</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlM2M4NmY2Mzg4Zi4uNmZkODJhMDVhMWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxOS0wNi0yNiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgV2ViU29ja2V0czogYWRkIHN1cHBvcnQgZm9yIHNlbmRpbmcg
YmxvYiBtZXNzYWdlcyB3aGVuIHVzaW5nIHdlYiBzb2NrZXRzIHBsYXRmb3JtIEFQSXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OTE4OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZTogQWRkIG1pc3NpbmcgaGVhZGVycy4KKwogMjAxOS0wNi0yNSAgRnVqaWkgSGlyb25vcmkgIDxI
aXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAogICAgICAgICBbV2luQ2Fpcm9dIGluY29ycmVjdCBm
b250IGhlaWdodCBmb3IgJ0dvb2dsZSBTYW5zIERpc3BsYXknIGZvbnQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
CmluZGV4IGE4MWQ4MmFiOGRmLi4wMTdjOTEyOWVmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC01
MTUsNyArNTE1LDkgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAg
IGZpbGVhcGkvQmxvYkxpbmVFbmRpbmdzLmgKICAgICBmaWxlYXBpL0Jsb2JQcm9wZXJ0eUJhZy5o
CiAgICAgZmlsZWFwaS9GaWxlLmgKKyAgICBmaWxlYXBpL0ZpbGVFcnJvci5oCiAgICAgZmlsZWFw
aS9GaWxlTGlzdC5oCisgICAgZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmgKICAgICBmaWxlYXBp
L0ZpbGVSZWFkZXJMb2FkZXJDbGllbnQuaAogCiAgICAgaGlzdG9yeS9CYWNrRm9yd2FyZENsaWVu
dC5oCkBAIC0xMTY4LDYgKzExNzAsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUFERVJTCiAgICAgcGxhdGZvcm0vbmV0d29yay9CbG9iUGFydC5oCiAgICAgcGxhdGZvcm0vbmV0
d29yay9CbG9iUmVnaXN0cnkuaAogICAgIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1w
bC5oCisgICAgcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuaAogICAgIHBsYXRm
b3JtL25ldHdvcmsvQ2FjaGVWYWxpZGF0aW9uLmgKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0NlcnRp
ZmljYXRlSW5mb0Jhc2UuaAogICAgIHBsYXRmb3JtL25ldHdvcmsvQ29va2llUmVxdWVzdEhlYWRl
ckZpZWxkUHJveHkuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA0Y2M4YzIxNThiNS4uNDljOGIzZDgyYTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTktMDYtMjYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8
Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFdlYlNvY2tldHM6IGFkZCBzdXBwb3J0IGZv
ciBzZW5kaW5nIGJsb2IgbWVzc2FnZXMgd2hlbiB1c2luZyB3ZWIgc29ja2V0cyBwbGF0Zm9ybSBB
UElzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTkx
ODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
aGVscGVyIHByaXZhdGUgY2xhc3MgQmxvYkxvYWRlciB0aGF0IHVzZXMgRmlsZVJlYWRlckxvYWRl
ciB0byBsb2FkIHRoZSBibG9icy4gU2luY2UgYmxvYiBsb2FkcyBhcmUKKyAgICAgICAgYXN5bmNo
cm9ub3VzLCB0aGUgbWVzc2FnZXMgYXJlIHF1ZXVlZCB1c2luZyBhbm90aGVyIGhlbHBlciBpbnRl
cm5hbCBjbGFzcyBQZW5kaW5nTWVzc2FnZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29y
ay9XZWJTb2NrZXRDaGFubmVsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0Q2hhbm5l
bDo6c2VuZCk6IFF1ZXVlIHRoZSBtZXNzYWdlIGluIHBlbmRpbmcgcXVldWUgaWYgdGhlcmUgYXJl
IHBlbmRpbmcgbWVzc2FnZXMgaW4gdGhlIHF1ZXVlCisgICAgICAgIGZvciB0ZXh0IGFuZCBiaW5h
cnkgbWVzc2FnZXMuIEZvciBibG9icywgYWx3YXlzIHF1ZXVlIHRoZSBtZXNzYWdlIHVubGVzcyBp
dCdzIGFuIGVtcHR5IGJsb2IgdGhhdCB3ZSBjYW4gaGFuZGxlCisgICAgICAgIGFzIGVtcHR5IGJp
bmFyeSBkYXRhIGRpcmVjdGx5LgorICAgICAgICAoV2ViS2l0OjpQZW5kaW5nTWVzc2FnZTo6UGVu
ZGluZ01lc3NhZ2UpOiBIZWxwZXIgY2xhc3MgdG8gcXVldWUgbWVzc2FnZSByZXF1ZXN0cy4KKyAg
ICAgICAgKFdlYktpdDo6UGVuZGluZ01lc3NhZ2U6OnR5cGUgY29uc3QpOiBUeXBlIG9mIG1lc3Nh
Z2U6IFRleHQsIEJpbmFyeSwgQmxvYi4KKyAgICAgICAgKFdlYktpdDo6UGVuZGluZ01lc3NhZ2U6
OnRleHRNZXNzYWdlIGNvbnN0KTogVGhlIHRleHQgbWVzc2FnZS4KKyAgICAgICAgKFdlYktpdDo6
UGVuZGluZ01lc3NhZ2U6OmJpbmFyeURhdGEgY29uc3QpOiBUaGUgYmluYXJ5IGRhdGEuCisgICAg
ICAgIChXZWJLaXQ6OlBlbmRpbmdNZXNzYWdlOjpibG9iTG9hZGVyIGNvbnN0KTogVGhlIGJsb2Ig
bG9hZGVyLgorICAgICAgICAoV2ViS2l0OjpQZW5kaW5nTWVzc2FnZTo6cmVsZWFzZUNvbXBsZXRp
b25IYW5kbGVyKTogVHJhbnNmZXIgdGhlIGNvbXBsZXRpb24gaGFuZGxlciB0byB0aGUgY2FsbGVy
LgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRDaGFubmVsOjpkaXNjb25uZWN0KTogQ2xlYXIg
dGhlIHBlbmRpbmcgbWVzc2FnZXMgcXVldWUuCisgICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3Jr
L1dlYlNvY2tldENoYW5uZWwuaDoKKwogMjAxOS0wNi0yNSAgSmlld2VuIFRhbiAgPGppZXdlbl90
YW5AYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBhIG5ldyBTUEkgdG8gaW5mb3JtIGNs
aWVudHMgYWJvdXQgQXBwU1NPCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
TmV0d29yay9XZWJTb2NrZXRDaGFubmVsLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9O
ZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuY3BwCmluZGV4IGUzYTIzYTQ0YWE0Li4xN2Q5YzdhNjli
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0
Q2hhbm5lbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29j
a2V0Q2hhbm5lbC5jcHAKQEAgLTMyLDExICszMiwxNSBAQAogI2luY2x1ZGUgIk5ldHdvcmtTb2Nr
ZXRDaGFubmVsTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIK
ICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9CbG9iLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVJlYWRlckxv
YWRlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVJlYWRlckxvYWRlckNsaWVudC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dlYlNv
Y2tldENoYW5uZWwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dlYlNvY2tldENoYW5uZWxDbGllbnQu
aD4KICNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+CisjaW5jbHVkZSA8d3RmL1NldEZvclNjb3Bl
Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC0xMDUsNyArMTA5LDEyIEBAIFdlYlNvY2tl
dENoYW5uZWw6OlNlbmRSZXN1bHQgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZChjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCiAgICAgICAgIGlmIChtX2NsaWVudCkKICAgICAgICAgICAgIG1fY2xpZW50LT5k
aWRVcGRhdGVCdWZmZXJlZEFtb3VudChtX2J1ZmZlcmVkQW1vdW50KTsKICAgICB9OwotICAgIHNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6OlNlbmRTdHJp
bmcgeyBtZXNzYWdlIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKworICAgIGlmICht
X3BlbmRpbmdNZXNzYWdlcy5pc0VtcHR5KCkpCisgICAgICAgIHNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6OlNlbmRTdHJpbmcgeyBtZXNzYWdlIH0sIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBlbHNlCisgICAgICAgIG1fcGVuZGluZ01l
c3NhZ2VzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPFBlbmRpbmdNZXNzYWdlPihtZXNzYWdlLCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworCiAgICAgcmV0dXJuIFNlbmRTdWNjZXNzOwog
fQogCkBAIC0xMjEsMTQgKzEzMCwxNDQgQEAgV2ViU29ja2V0Q2hhbm5lbDo6U2VuZFJlc3VsdCBX
ZWJTb2NrZXRDaGFubmVsOjpzZW5kKGNvbnN0IEpTQzo6QXJyYXlCdWZmZXImIGJpbmEKICAgICAg
ICAgaWYgKG1fY2xpZW50KQogICAgICAgICAgICAgbV9jbGllbnQtPmRpZFVwZGF0ZUJ1ZmZlcmVk
QW1vdW50KG1fYnVmZmVyZWRBbW91bnQpOwogICAgIH07Ci0gICAgc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpOZXR3b3JrU29ja2V0Q2hhbm5lbDo6U2VuZERhdGEgeyBJUEM6OkRhdGFSZWZl
cmVuY2UgeyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYmluYXJ5RGF0YS5kYXRhKCkpICsg
Ynl0ZU9mZnNldCwgYnl0ZUxlbmd0aCB9IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
KworICAgIGlmIChtX3NlbmRpbmdQZW5kaW5nQmxvYk1lc3NhZ2UgfHwgbV9wZW5kaW5nTWVzc2Fn
ZXMuaXNFbXB0eSgpKQorICAgICAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdv
cmtTb2NrZXRDaGFubmVsOjpTZW5kRGF0YSB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHN0YXRpY19j
YXN0PGNvbnN0IHVpbnQ4X3QqPihiaW5hcnlEYXRhLmRhdGEoKSkgKyBieXRlT2Zmc2V0LCBieXRl
TGVuZ3RoIH0gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGVsc2UKKyAgICAg
ICAgbV9wZW5kaW5nTWVzc2FnZXMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8UGVuZGluZ01lc3Nh
Z2U+KGJpbmFyeURhdGEsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKSk7CisKICAgICByZXR1cm4gU2VuZFN1Y2Nlc3M7CiB9CiAKLVdlYlNvY2tldENo
YW5uZWw6OlNlbmRSZXN1bHQgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZChXZWJDb3JlOjpCbG9iJikK
K2NsYXNzIEJsb2JMb2FkZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6RmlsZVJlYWRlckxvYWRl
ckNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgQmxv
YkxvYWRlcihXZWJDb3JlOjpEb2N1bWVudCogZG9jdW1lbnQsIEJsb2ImIGJsb2IsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgOiBtX2xvYWRl
cihzdGQ6Om1ha2VfdW5pcXVlPEZpbGVSZWFkZXJMb2FkZXI+KEZpbGVSZWFkZXJMb2FkZXI6OlJl
YWRBc0FycmF5QnVmZmVyLCB0aGlzKSkKKyAgICAgICAgLCBtX2NvbXBsZXRpb25IYW5kbGVyKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKQorICAgIHsKKyAgICAgICAgbV9sb2FkZXItPnN0YXJ0
KGRvY3VtZW50LCBibG9iKTsKKyAgICB9CisKKyAgICB+QmxvYkxvYWRlcigpCisgICAgeworICAg
ICAgICBpZiAobV9sb2FkZXIpCisgICAgICAgICAgICBtX2xvYWRlci0+Y2FuY2VsKCk7CisgICAg
fQorCisgICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdCB7IHJldHVybiAhIW1fbG9hZGVyOyB9Cisg
ICAgY29uc3QgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+JiByZXN1bHQoKSBjb25zdCB7IHJldHVy
biBtX2J1ZmZlcjsgfQorICAgIE9wdGlvbmFsPGludD4gZXJyb3JDb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9lcnJvckNvZGU7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGRpZFN0YXJ0TG9hZGluZygp
IGZpbmFsIHsgfQorICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoKSBmaW5hbCB7IH0KKworICAgIHZv
aWQgZGlkRmluaXNoTG9hZGluZygpIGZpbmFsCisgICAgeworICAgICAgICBtX2J1ZmZlciA9IG1f
bG9hZGVyLT5hcnJheUJ1ZmZlclJlc3VsdCgpOworICAgICAgICBjb21wbGV0ZSgpOworICAgIH0K
KworICAgIHZvaWQgZGlkRmFpbChpbnQgZXJyb3JDb2RlKSBmaW5hbAorICAgIHsKKyAgICAgICAg
bV9lcnJvckNvZGUgPSBlcnJvckNvZGU7CisgICAgICAgIGNvbXBsZXRlKCk7CisgICAgfQorCisg
ICAgdm9pZCBjb21wbGV0ZSgpCisgICAgeworICAgICAgICBtX2xvYWRlciA9IG51bGxwdHI7Cisg
ICAgICAgIG1fY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6RmlsZVJlYWRlckxvYWRlcj4gbV9sb2FkZXI7CisgICAgUmVmUHRyPEpTQzo6
QXJyYXlCdWZmZXI+IG1fYnVmZmVyOworICAgIE9wdGlvbmFsPGludD4gbV9lcnJvckNvZGU7Cisg
ICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiBtX2NvbXBsZXRpb25IYW5kbGVyOworfTsKKwor
Y2xhc3MgUGVuZGluZ01lc3NhZ2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIGVudW0gY2xhc3MgVHlwZSB7IFRleHQsIEJpbmFyeSwgQmxvYiB9OworCisgICAg
UGVuZGluZ01lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCisgICAgICAgIDogbV90eXBlKFR5cGU6OlRleHQp
CisgICAgICAgICwgbV90ZXh0TWVzc2FnZShtZXNzYWdlKQorICAgICAgICAsIG1fY29tcGxldGlv
bkhhbmRsZXIoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpCisgICAgeworICAgIH0KKworICAg
IFBlbmRpbmdNZXNzYWdlKGNvbnN0IEpTQzo6QXJyYXlCdWZmZXImIGJpbmFyeURhdGEsIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgOiBtX3R5cGUoVHlwZTo6QmluYXJ5
KQorICAgICAgICAsIG1fYmluYXJ5RGF0YShXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShz
dGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYmluYXJ5RGF0YS5kYXRhKCkpICsgYnl0ZU9mZnNl
dCwgYnl0ZUxlbmd0aCkpCisgICAgICAgICwgbV9jb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSkKKyAgICB7CisgICAgfQorCisgICAgUGVuZGluZ01lc3NhZ2UoV2Vi
Q29yZTo6RG9jdW1lbnQqIGRvY3VtZW50LCBCbG9iJiBibG9iLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCisgICAgICAgIDogbV90eXBlKFR5cGU6OkJsb2Ip
CisgICAgICAgICwgbV9ibG9iTG9hZGVyKHN0ZDo6bWFrZV91bmlxdWU8QmxvYkxvYWRlcj4oZG9j
dW1lbnQsIGJsb2IsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSkKKyAgICB7CisgICAgfQor
CisgICAgflBlbmRpbmdNZXNzYWdlKCkgPSBkZWZhdWx0OworCisgICAgVHlwZSB0eXBlKCkgY29u
c3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgY29uc3QgU3RyaW5nJiB0ZXh0TWVzc2FnZSgpIGNv
bnN0IHsgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpUZXh0KTsgcmV0dXJuIG1fdGV4dE1lc3NhZ2U7
IH0KKyAgICBjb25zdCBXZWJDb3JlOjpTaGFyZWRCdWZmZXImIGJpbmFyeURhdGEoKSBjb25zdCB7
IEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6QmluYXJ5KTsgcmV0dXJuICptX2JpbmFyeURhdGE7IH0K
KyAgICBjb25zdCBCbG9iTG9hZGVyJiBibG9iTG9hZGVyKCkgY29uc3QgeyBBU1NFUlQobV90eXBl
ID09IFR5cGU6OkJsb2IpOyByZXR1cm4gKm1fYmxvYkxvYWRlcjsgfQorCisgICAgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiByZWxlYXNlQ29tcGxldGlvbkhhbmRsZXIoKSB7IEFTU0VSVChtX3R5
cGUgIT0gVHlwZTo6QmxvYik7IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fY29tcGxldGlvbkhhbmRs
ZXIsIG51bGxwdHIpOyB9CisKK3ByaXZhdGU6CisgICAgVHlwZSBtX3R5cGU7CisgICAgU3RyaW5n
IG1fdGV4dE1lc3NhZ2U7CisgICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gbV9iaW5h
cnlEYXRhOworICAgIHN0ZDo6dW5pcXVlX3B0cjxCbG9iTG9hZGVyPiBtX2Jsb2JMb2FkZXI7Cisg
ICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiBtX2NvbXBsZXRpb25IYW5kbGVyOworfTsKKwor
V2ViU29ja2V0Q2hhbm5lbDo6U2VuZFJlc3VsdCBXZWJTb2NrZXRDaGFubmVsOjpzZW5kKFdlYkNv
cmU6OkJsb2ImIGJsb2IpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU2Vu
ZEZhaWw7CisgICAgLy8gQXZvaWQgdGhlIEJsb2IgcXVldWUgYW5kIGxvYWRpbmcgZm9yIGVtcHR5
IGJsb2JzLgorICAgIGlmICghYmxvYi5zaXplKCkpCisgICAgICAgIHJldHVybiBzZW5kKEpTQzo6
QXJyYXlCdWZmZXI6OmNyZWF0ZShibG9iLnNpemUoKSwgMSksIDAsIDApOworCisgICAgbV9wZW5k
aW5nTWVzc2FnZXMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8UGVuZGluZ01lc3NhZ2U+KG1fZG9j
dW1lbnQuZ2V0KCksIGJsb2IsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyld
IHsKKyAgICAgICAgd2hpbGUgKCFtX3BlbmRpbmdNZXNzYWdlcy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIGF1dG8mIG1lc3NhZ2UgPSBtX3BlbmRpbmdNZXNzYWdlcy5maXJzdCgpOworCisgICAg
ICAgICAgICBzd2l0Y2ggKG1lc3NhZ2UtPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBQZW5k
aW5nTWVzc2FnZTo6VHlwZTo6VGV4dDoKKyAgICAgICAgICAgICAgICBzZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVsOjpTZW5kU3RyaW5nIHsgbWVzc2FnZS0+
dGV4dE1lc3NhZ2UoKSB9LCBtZXNzYWdlLT5yZWxlYXNlQ29tcGxldGlvbkhhbmRsZXIoKSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFBlbmRpbmdNZXNzYWdlOjpU
eXBlOjpCaW5hcnk6IHsKKyAgICAgICAgICAgICAgICBjb25zdCBhdXRvJiBiaW5hcnlEYXRhID0g
bWVzc2FnZS0+YmluYXJ5RGF0YSgpOworICAgICAgICAgICAgICAgIHNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6OlNlbmREYXRhIHsgSVBDOjpEYXRhUmVm
ZXJlbmNlIHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYmluYXJ5RGF0YS5kYXRh
KCkpLCBiaW5hcnlEYXRhLnNpemUoKSB9IH0sIG1lc3NhZ2UtPnJlbGVhc2VDb21wbGV0aW9uSGFu
ZGxlcigpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNhc2UgUGVuZGluZ01lc3NhZ2U6OlR5cGU6OkJsb2I6IHsKKyAgICAgICAgICAgICAgICBh
dXRvJiBsb2FkZXIgPSBtZXNzYWdlLT5ibG9iTG9hZGVyKCk7CisgICAgICAgICAgICAgICAgaWYg
KGxvYWRlci5pc0xvYWRpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgICAgICAgICAgaWYgKGNvbnN0IGF1dG8mIHJlc3VsdCA9IGxvYWRlci5yZXN1bHQoKSkgewor
ICAgICAgICAgICAgICAgICAgICBTZXRGb3JTY29wZSBjaGFuZ2UobV9zZW5kaW5nUGVuZGluZ0Js
b2JNZXNzYWdlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgc2VuZCgqcmVzdWx0LCAwLCBy
ZXN1bHQtPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhdXRvIGVy
cm9yQ29kZSA9IGxvYWRlci5lcnJvckNvZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgZmFpbCht
YWtlU3RyaW5nKCJGYWlsZWQgdG8gbG9hZCBCbG9iOiBlcnJvciBjb2RlID0gIiwgZXJyb3JDb2Rl
LnZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX3BlbmRpbmdNZXNzYWdlcy5yZW1vdmVG
aXJzdCgpOworICAgICAgICB9CisgICAgfSkpOworICAgIHJldHVybiBTZW5kU3VjY2VzczsKIH0K
IAogdW5zaWduZWQgV2ViU29ja2V0Q2hhbm5lbDo6YnVmZmVyZWRBbW91bnQoKSBjb25zdApAQCAt
MTU3LDYgKzI5Niw3IEBAIHZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6ZGlzY29ubmVjdCgpCiAgICAg
bV9jbGllbnQgPSBudWxscHRyOwogICAgIG1fZG9jdW1lbnQgPSBudWxscHRyOwogICAgIG1fcGVu
ZGluZ1Rhc2tzLmNsZWFyKCk7CisgICAgbV9wZW5kaW5nTWVzc2FnZXMuY2xlYXIoKTsKIAogICAg
IE1lc3NhZ2VTZW5kZXI6OnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVsOjpDbG9z
ZSB7IDAsIHsgfSB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9O
ZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3
b3JrL1dlYlNvY2tldENoYW5uZWwuaAppbmRleCBkOGE2YWFjMjExMi4uYTFjYmJjYzBkMjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5u
ZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFu
bmVsLmgKQEAgLTQxLDYgKzQxLDggQEAgY2xhc3MgRGF0YVJlZmVyZW5jZTsKIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKK2NsYXNzIFBlbmRpbmdNZXNzYWdlOworCiBjbGFzcyBXZWJTb2NrZXRDaGFu
bmVsIDogcHVibGljIElQQzo6TWVzc2FnZVNlbmRlciwgcHVibGljIElQQzo6TWVzc2FnZVJlY2Vp
dmVyLCBwdWJsaWMgV2ViQ29yZTo6VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwsIHB1YmxpYyBS
ZWZDb3VudGVkPFdlYlNvY2tldENoYW5uZWw+LCBwdWJsaWMgSWRlbnRpZmllZDxXZWJTb2NrZXRD
aGFubmVsPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxXZWJTb2NrZXRDaGFubmVsPiBjcmVh
dGUoV2ViQ29yZTo6RG9jdW1lbnQmLCBXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsQ2xpZW50Jik7
CkBAIC05MSw3ICs5Myw5IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fYnVmZmVyZWRBbW91bnQg
eyAwIH07CiAgICAgYm9vbCBtX2lzQ2xvc2luZyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzU3Vz
cGVuZGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc2VuZGluZ1BlbmRpbmdCbG9iTWVzc2FnZSB7
IGZhbHNlIH07CiAgICAgRGVxdWU8RnVuY3Rpb248dm9pZCgpPj4gbV9wZW5kaW5nVGFza3M7Cisg
ICAgRGVxdWU8c3RkOjp1bmlxdWVfcHRyPFBlbmRpbmdNZXNzYWdlPj4gbV9wZW5kaW5nTWVzc2Fn
ZXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373016</attachid>
            <date>2019-06-27 04:19:54 -0700</date>
            <delta_ts>2019-06-27 04:57:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-websockets-blobs.diff</filename>
            <type>text/plain</type>
            <size>14329</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjZjA0MDAyYzNhMy4uMWM5MGQxMzQxYmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxOS0wNi0yNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgV2ViU29ja2V0czogYWRkIHN1cHBvcnQgZm9yIHNlbmRpbmcg
YmxvYiBtZXNzYWdlcyB3aGVuIHVzaW5nIHdlYiBzb2NrZXRzIHBsYXRmb3JtIEFQSXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OTE4OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZTogQWRkIG1pc3NpbmcgaGVhZGVycy4KKwogMjAxOS0wNi0yNyAgQ2FybG9zIEdhcmNpYSBDYW1w
b3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1NPVVBdIFVzZSBsaWJzb3VwIFdl
YlNvY2tldHMgQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIv
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBhODFkODJhYjhkZi4uMDE3YzkxMjll
ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtNTE1LDcgKzUxNSw5IEBAIHNldChXZWJDb3JlX1BS
SVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBmaWxlYXBpL0Jsb2JMaW5lRW5kaW5ncy5oCiAg
ICAgZmlsZWFwaS9CbG9iUHJvcGVydHlCYWcuaAogICAgIGZpbGVhcGkvRmlsZS5oCisgICAgZmls
ZWFwaS9GaWxlRXJyb3IuaAogICAgIGZpbGVhcGkvRmlsZUxpc3QuaAorICAgIGZpbGVhcGkvRmls
ZVJlYWRlckxvYWRlci5oCiAgICAgZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyQ2xpZW50LmgKIAog
ICAgIGhpc3RvcnkvQmFja0ZvcndhcmRDbGllbnQuaApAQCAtMTE2OCw2ICsxMTcwLDcgQEAgc2V0
KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL25ldHdvcmsv
QmxvYlBhcnQuaAogICAgIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmgKICAgICBwbGF0
Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuaAorICAgIHBsYXRmb3JtL25ldHdvcmsvQmxv
YlJlc291cmNlSGFuZGxlLmgKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0NhY2hlVmFsaWRhdGlvbi5o
CiAgICAgcGxhdGZvcm0vbmV0d29yay9DZXJ0aWZpY2F0ZUluZm9CYXNlLmgKICAgICBwbGF0Zm9y
bS9uZXR3b3JrL0Nvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5LmgKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggM2Mz
MTVkNGQwODEuLmIxYTVhZDJkNDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE5LTA2
LTI3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAg
ICBXZWJTb2NrZXRzOiBhZGQgc3VwcG9ydCBmb3Igc2VuZGluZyBibG9iIG1lc3NhZ2VzIHdoZW4g
dXNpbmcgd2ViIHNvY2tldHMgcGxhdGZvcm0gQVBJcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk5MTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGhlbHBlciBwcml2YXRlIGNsYXNzIEJsb2JMb2Fk
ZXIgdGhhdCB1c2VzIEZpbGVSZWFkZXJMb2FkZXIgdG8gbG9hZCB0aGUgYmxvYnMuIFNpbmNlIGJs
b2IgbG9hZHMgYXJlCisgICAgICAgIGFzeW5jaHJvbm91cywgdGhlIG1lc3NhZ2VzIGFyZSBxdWV1
ZWQgdXNpbmcgYW5vdGhlciBoZWxwZXIgaW50ZXJuYWwgY2xhc3MgUGVuZGluZ01lc3NhZ2UuCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlNvY2tldENoYW5uZWw6OmluY3JlYXNlQnVmZmVyZWRBbW91bnQpOiBJ
bmNyZWFzZSB0aGUgYnVmZmVyZWQgYW1vdW50IGNoZWNraW5nIHdlIGRvbid0IG92ZXJsb2Z3Lgor
ICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRDaGFubmVsOjpkZWNyZWFzZUJ1ZmZlcmVkQW1vdW50
KTogRGVjcmVhc2UgdGhlIGJ1ZmZlcmVkIGFtb3VudC4KKyAgICAgICAgKFdlYktpdDo6V2ViU29j
a2V0Q2hhbm5lbDo6c2VuZE1lc3NhZ2UpOiBIZWxwZXIgY2xhc3MgdG8gc2VuZCBtZXNzYWdlIHRv
IHRoZSBuZXR3b3JrIHByb2Nlc3MgYW5kIGRlY3JlYXNlIHRoZQorICAgICAgICBidWZmZXJlZCBh
bW91bnQgd2hlbiBkb25lLgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRDaGFubmVsOjpzZW5k
KTogUXVldWUgdGhlIG1lc3NhZ2UgaW4gcGVuZGluZyBxdWV1ZSBpZiB0aGVyZSBhcmUgcGVuZGlu
ZyBtZXNzYWdlcyBpbiB0aGUgcXVldWUKKyAgICAgICAgZm9yIHRleHQgYW5kIGJpbmFyeSBtZXNz
YWdlcy4gRm9yIGJsb2JzLCBhbHdheXMgcXVldWUgdGhlIG1lc3NhZ2UgdW5sZXNzIGl0J3MgYW4g
ZW1wdHkgYmxvYiB0aGF0IHdlIGNhbiBoYW5kbGUKKyAgICAgICAgYXMgZW1wdHkgYmluYXJ5IGRh
dGEgZGlyZWN0bHkuCisgICAgICAgIChXZWJLaXQ6OlBlbmRpbmdNZXNzYWdlOjpQZW5kaW5nTWVz
c2FnZSk6IEhlbHBlciBjbGFzcyB0byBxdWV1ZSBtZXNzYWdlIHJlcXVlc3RzLgorICAgICAgICAo
V2ViS2l0OjpQZW5kaW5nTWVzc2FnZTo6dHlwZSBjb25zdCk6IFR5cGUgb2YgbWVzc2FnZTogVGV4
dCwgQmluYXJ5LCBCbG9iLgorICAgICAgICAoV2ViS2l0OjpQZW5kaW5nTWVzc2FnZTo6dGV4dE1l
c3NhZ2UgY29uc3QpOiBUaGUgdGV4dCBtZXNzYWdlLgorICAgICAgICAoV2ViS2l0OjpQZW5kaW5n
TWVzc2FnZTo6YmluYXJ5RGF0YSBjb25zdCk6IFRoZSBiaW5hcnkgZGF0YS4KKyAgICAgICAgKFdl
YktpdDo6UGVuZGluZ01lc3NhZ2U6OmJsb2JMb2FkZXIgY29uc3QpOiBUaGUgYmxvYiBsb2FkZXIu
CisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldENoYW5uZWw6OmZhaWwpOiBOb3RpZnkgdGhlIGNs
aWVudCBhYm91dCB0aGUgZXJyb3IgdG8gZW5zdXJlIG9uY2xvc2UgaXMgZW1pdHRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViU29ja2V0Q2hhbm5lbDo6ZGlzY29ubmVjdCk6IENsZWFyIHRoZSBwZW5k
aW5nIG1lc3NhZ2VzIHF1ZXVlLgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJTb2Nr
ZXRDaGFubmVsLmg6CisKIDIwMTktMDYtMjcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtTT1VQXSBXZWJTb2NrZXRzOiBoYW5kbGUgVExTIGNl
cnRpZmljYXRlIGFuZCBlcnJvcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5jcHAKaW5kZXggNzJmN2Q5YzYwZjIuLjBmYmZiOWUz
OTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2Nr
ZXRDaGFubmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJT
b2NrZXRDaGFubmVsLmNwcApAQCAtMzIsMTEgKzMyLDE1IEBACiAjaW5jbHVkZSAiTmV0d29ya1Nv
Y2tldENoYW5uZWxNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5o
IgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Jsb2IuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlUmVhZGVy
TG9hZGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlUmVhZGVyTG9hZGVyQ2xpZW50Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2Vi
U29ja2V0Q2hhbm5lbC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2ViU29ja2V0Q2hhbm5lbENsaWVu
dC5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KKyNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFy
aXRobWV0aWMuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTkyLDQzICs5NiwxOTUgQEAg
V2ViU29ja2V0Q2hhbm5lbDo6Q29ubmVjdFN0YXR1cyBXZWJTb2NrZXRDaGFubmVsOjpjb25uZWN0
KGNvbnN0IFVSTCYgdXJsLCBjb25zdAogICAgIHJldHVybiBDb25uZWN0U3RhdHVzOjpPSzsKIH0K
IAotV2ViU29ja2V0Q2hhbm5lbDo6U2VuZFJlc3VsdCBXZWJTb2NrZXRDaGFubmVsOjpzZW5kKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKK2Jvb2wgV2ViU29ja2V0Q2hhbm5lbDo6aW5jcmVhc2VCdWZm
ZXJlZEFtb3VudChzaXplX3QgYnl0ZUxlbmd0aCkKIHsKLSAgICBhdXRvIGJ5dGVMZW5ndGggPSBt
ZXNzYWdlLnNpemVJbkJ5dGVzKCk7Ci0gICAgbV9idWZmZXJlZEFtb3VudCArPSBieXRlTGVuZ3Ro
OworICAgIGlmICghYnl0ZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBDaGVj
a2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWROZXdCdWZmZXJlZEFtb3VudCA9IG1f
YnVmZmVyZWRBbW91bnQ7CisgICAgY2hlY2tlZE5ld0J1ZmZlcmVkQW1vdW50ICs9IGJ5dGVMZW5n
dGg7CisgICAgaWYgKFVOTElLRUxZKGNoZWNrZWROZXdCdWZmZXJlZEFtb3VudC5oYXNPdmVyZmxv
d2VkKCkpKSB7CisgICAgICAgIGZhaWwoIkZhaWxlZCB0byBzZW5kIFdlYlNvY2tldCBmcmFtZTog
YnVmZmVyIGhhcyBubyBtb3JlIHNwYWNlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBtX2J1ZmZlcmVkQW1vdW50ID0gY2hlY2tlZE5ld0J1ZmZlcmVkQW1vdW50LnVuc2Fm
ZUdldCgpOwogICAgIGlmIChtX2NsaWVudCkKICAgICAgICAgbV9jbGllbnQtPmRpZFVwZGF0ZUJ1
ZmZlcmVkQW1vdW50KG1fYnVmZmVyZWRBbW91bnQpOworICAgIHJldHVybiB0cnVlOworfQogCit2
b2lkIFdlYlNvY2tldENoYW5uZWw6OmRlY3JlYXNlQnVmZmVyZWRBbW91bnQoc2l6ZV90IGJ5dGVM
ZW5ndGgpCit7CisgICAgaWYgKCFieXRlTGVuZ3RoKQorICAgICAgICByZXR1cm47CisKKyAgICBB
U1NFUlQobV9idWZmZXJlZEFtb3VudCA+PSBieXRlTGVuZ3RoKTsKKyAgICBtX2J1ZmZlcmVkQW1v
dW50IC09IGJ5dGVMZW5ndGg7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+
ZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQobV9idWZmZXJlZEFtb3VudCk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZE1lc3NhZ2UoVCYmIG1lc3Nh
Z2UsIHNpemVfdCBieXRlTGVuZ3RoKQorewogICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4g
Y29tcGxldGlvbkhhbmRsZXIgPSBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
LCBieXRlTGVuZ3RoXSB7Ci0gICAgICAgIEFTU0VSVChtX2J1ZmZlcmVkQW1vdW50ID49IGJ5dGVM
ZW5ndGgpOwotICAgICAgICBtX2J1ZmZlcmVkQW1vdW50IC09IGJ5dGVMZW5ndGg7Ci0gICAgICAg
IGlmIChtX2NsaWVudCkKLSAgICAgICAgICAgIG1fY2xpZW50LT5kaWRVcGRhdGVCdWZmZXJlZEFt
b3VudChtX2J1ZmZlcmVkQW1vdW50KTsKKyAgICAgICAgZGVjcmVhc2VCdWZmZXJlZEFtb3VudChi
eXRlTGVuZ3RoKTsKICAgICB9OwotICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0
d29ya1NvY2tldENoYW5uZWw6OlNlbmRTdHJpbmcgeyBtZXNzYWdlIH0sIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKKyAgICBzZW5kV2l0aEFzeW5jUmVwbHkoV1RGTW92ZShtZXNzYWdlKSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCitXZWJTb2NrZXRDaGFubmVsOjpTZW5k
UmVzdWx0IFdlYlNvY2tldENoYW5uZWw6OnNlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorewor
ICAgIGF1dG8gYnl0ZUxlbmd0aCA9IG1lc3NhZ2Uuc2l6ZUluQnl0ZXMoKTsKKyAgICBpZiAoIWlu
Y3JlYXNlQnVmZmVyZWRBbW91bnQoYnl0ZUxlbmd0aCkpCisgICAgICAgIHJldHVybiBTZW5kRmFp
bDsKKworICAgIGlmIChtX3BlbmRpbmdNZXNzYWdlcy5pc0VtcHR5KCkpCisgICAgICAgIHNlbmRN
ZXNzYWdlKE1lc3NhZ2VzOjpOZXR3b3JrU29ja2V0Q2hhbm5lbDo6U2VuZFN0cmluZyB7IG1lc3Nh
Z2UgfSwgYnl0ZUxlbmd0aCk7CisgICAgZWxzZQorICAgICAgICBtX3BlbmRpbmdNZXNzYWdlcy5h
cHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxQZW5kaW5nTWVzc2FnZT4obWVzc2FnZSkpOworCiAgICAg
cmV0dXJuIFNlbmRTdWNjZXNzOwogfQogCiBXZWJTb2NrZXRDaGFubmVsOjpTZW5kUmVzdWx0IFdl
YlNvY2tldENoYW5uZWw6OnNlbmQoY29uc3QgSlNDOjpBcnJheUJ1ZmZlciYgYmluYXJ5RGF0YSwg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKIHsKLSAgICBtX2J1ZmZl
cmVkQW1vdW50ICs9IGJ5dGVMZW5ndGg7Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2Ns
aWVudC0+ZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQobV9idWZmZXJlZEFtb3VudCk7CisgICAgaWYg
KCFpbmNyZWFzZUJ1ZmZlcmVkQW1vdW50KGJ5dGVMZW5ndGgpKQorICAgICAgICByZXR1cm4gU2Vu
ZEZhaWw7CisKKyAgICBpZiAobV9wZW5kaW5nTWVzc2FnZXMuaXNFbXB0eSgpKQorICAgICAgICBz
ZW5kTWVzc2FnZShNZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6OlNlbmREYXRhIHsgSVBD
OjpEYXRhUmVmZXJlbmNlIHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJpbmFyeURhdGEu
ZGF0YSgpKSArIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGggfSB9LCBieXRlTGVuZ3RoKTsKKyAgICBl
bHNlCisgICAgICAgIG1fcGVuZGluZ01lc3NhZ2VzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPFBl
bmRpbmdNZXNzYWdlPihiaW5hcnlEYXRhLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7CiAKLSAg
ICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+IGNvbXBsZXRpb25IYW5kbGVyID0gW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgYnl0ZUxlbmd0aF0gewotICAgICAgICBBU1NF
UlQobV9idWZmZXJlZEFtb3VudCA+PSBieXRlTGVuZ3RoKTsKLSAgICAgICAgbV9idWZmZXJlZEFt
b3VudCAtPSBieXRlTGVuZ3RoOwotICAgICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgICAgICBt
X2NsaWVudC0+ZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQobV9idWZmZXJlZEFtb3VudCk7Ci0gICAg
fTsKLSAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVs
OjpTZW5kRGF0YSB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4
X3QqPihiaW5hcnlEYXRhLmRhdGEoKSkgKyBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoIH0gfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIHJldHVybiBTZW5kU3VjY2VzczsKIH0KIAot
V2ViU29ja2V0Q2hhbm5lbDo6U2VuZFJlc3VsdCBXZWJTb2NrZXRDaGFubmVsOjpzZW5kKFdlYkNv
cmU6OkJsb2ImKQorY2xhc3MgQmxvYkxvYWRlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpGaWxl
UmVhZGVyTG9hZGVyQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBCbG9iTG9hZGVyKFdlYkNvcmU6OkRvY3VtZW50KiBkb2N1bWVudCwgQmxvYiYgYmxv
YiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorICAgICAg
ICA6IG1fbG9hZGVyKHN0ZDo6bWFrZV91bmlxdWU8RmlsZVJlYWRlckxvYWRlcj4oRmlsZVJlYWRl
ckxvYWRlcjo6UmVhZEFzQXJyYXlCdWZmZXIsIHRoaXMpKQorICAgICAgICAsIG1fY29tcGxldGlv
bkhhbmRsZXIoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpCisgICAgeworICAgICAgICBtX2xv
YWRlci0+c3RhcnQoZG9jdW1lbnQsIGJsb2IpOworICAgIH0KKworICAgIH5CbG9iTG9hZGVyKCkK
KyAgICB7CisgICAgICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgICAgIG1fbG9hZGVyLT5jYW5j
ZWwoKTsKKyAgICB9CisKKyAgICBib29sIGlzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJuICEhbV9s
b2FkZXI7IH0KKyAgICBjb25zdCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4mIHJlc3VsdCgpIGNv
bnN0IHsgcmV0dXJuIG1fYnVmZmVyOyB9CisgICAgT3B0aW9uYWw8aW50PiBlcnJvckNvZGUoKSBj
b25zdCB7IHJldHVybiBtX2Vycm9yQ29kZTsgfQorCitwcml2YXRlOgorICAgIHZvaWQgZGlkU3Rh
cnRMb2FkaW5nKCkgZmluYWwgeyB9CisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YSgpIGZpbmFsIHsg
fQorCisgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCkgZmluYWwKKyAgICB7CisgICAgICAgIG1f
YnVmZmVyID0gbV9sb2FkZXItPmFycmF5QnVmZmVyUmVzdWx0KCk7CisgICAgICAgIGNvbXBsZXRl
KCk7CisgICAgfQorCisgICAgdm9pZCBkaWRGYWlsKGludCBlcnJvckNvZGUpIGZpbmFsCisgICAg
eworICAgICAgICBtX2Vycm9yQ29kZSA9IGVycm9yQ29kZTsKKyAgICAgICAgY29tcGxldGUoKTsK
KyAgICB9CisKKyAgICB2b2lkIGNvbXBsZXRlKCkKKyAgICB7CisgICAgICAgIG1fbG9hZGVyID0g
bnVsbHB0cjsKKyAgICAgICAgbV9jb21wbGV0aW9uSGFuZGxlcigpOworICAgIH0KKworICAgIHN0
ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpGaWxlUmVhZGVyTG9hZGVyPiBtX2xvYWRlcjsKKyAgICBS
ZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4gbV9idWZmZXI7CisgICAgT3B0aW9uYWw8aW50PiBtX2Vy
cm9yQ29kZTsKKyAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+IG1fY29tcGxldGlvbkhhbmRs
ZXI7Cit9OworCitjbGFzcyBQZW5kaW5nTWVzc2FnZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBUeXBlIHsgVGV4dCwgQmluYXJ5LCBCbG9i
IH07CisKKyAgICBleHBsaWNpdCBQZW5kaW5nTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
CisgICAgICAgIDogbV90eXBlKFR5cGU6OlRleHQpCisgICAgICAgICwgbV90ZXh0TWVzc2FnZSht
ZXNzYWdlKQorICAgIHsKKyAgICB9CisKKyAgICBQZW5kaW5nTWVzc2FnZShjb25zdCBKU0M6OkFy
cmF5QnVmZmVyJiBiaW5hcnlEYXRhLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRl
TGVuZ3RoKQorICAgICAgICA6IG1fdHlwZShUeXBlOjpCaW5hcnkpCisgICAgICAgICwgbV9iaW5h
cnlEYXRhKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PGNvbnN0IHVp
bnQ4X3QqPihiaW5hcnlEYXRhLmRhdGEoKSkgKyBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSkKKyAg
ICB7CisgICAgfQorCisgICAgUGVuZGluZ01lc3NhZ2UoV2ViQ29yZTo6RG9jdW1lbnQqIGRvY3Vt
ZW50LCBCbG9iJiBibG9iLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCisgICAgICAgIDogbV90eXBlKFR5cGU6OkJsb2IpCisgICAgICAgICwgbV9ibG9iTG9h
ZGVyKHN0ZDo6bWFrZV91bmlxdWU8QmxvYkxvYWRlcj4oZG9jdW1lbnQsIGJsb2IsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKSkKKyAgICB7CisgICAgfQorCisgICAgflBlbmRpbmdNZXNzYWdl
KCkgPSBkZWZhdWx0OworCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
CisgICAgY29uc3QgU3RyaW5nJiB0ZXh0TWVzc2FnZSgpIGNvbnN0IHsgQVNTRVJUKG1fdHlwZSA9
PSBUeXBlOjpUZXh0KTsgcmV0dXJuIG1fdGV4dE1lc3NhZ2U7IH0KKyAgICBjb25zdCBXZWJDb3Jl
OjpTaGFyZWRCdWZmZXImIGJpbmFyeURhdGEoKSBjb25zdCB7IEFTU0VSVChtX3R5cGUgPT0gVHlw
ZTo6QmluYXJ5KTsgcmV0dXJuICptX2JpbmFyeURhdGE7IH0KKyAgICBjb25zdCBCbG9iTG9hZGVy
JiBibG9iTG9hZGVyKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IFR5cGU6OkJsb2IpOyByZXR1
cm4gKm1fYmxvYkxvYWRlcjsgfQorCitwcml2YXRlOgorICAgIFR5cGUgbV90eXBlOworICAgIFN0
cmluZyBtX3RleHRNZXNzYWdlOworICAgIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IG1f
YmluYXJ5RGF0YTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmxvYkxvYWRlcj4gbV9ibG9iTG9hZGVy
OworfTsKKworV2ViU29ja2V0Q2hhbm5lbDo6U2VuZFJlc3VsdCBXZWJTb2NrZXRDaGFubmVsOjpz
ZW5kKFdlYkNvcmU6OkJsb2ImIGJsb2IpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gU2VuZEZhaWw7CisgICAgLy8gQXZvaWQgdGhlIEJsb2IgcXVldWUgYW5kIGxvYWRpbmcg
Zm9yIGVtcHR5IGJsb2JzLgorICAgIGlmICghYmxvYi5zaXplKCkpCisgICAgICAgIHJldHVybiBz
ZW5kKEpTQzo6QXJyYXlCdWZmZXI6OmNyZWF0ZShibG9iLnNpemUoKSwgMSksIDAsIDApOworCisg
ICAgbV9wZW5kaW5nTWVzc2FnZXMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8UGVuZGluZ01lc3Nh
Z2U+KG1fZG9jdW1lbnQuZ2V0KCksIGJsb2IsIFt0aGlzXSB7CisgICAgICAgIHdoaWxlICghbV9w
ZW5kaW5nTWVzc2FnZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBhdXRvJiBtZXNzYWdlID0g
bV9wZW5kaW5nTWVzc2FnZXMuZmlyc3QoKTsKKworICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdl
LT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgUGVuZGluZ01lc3NhZ2U6OlR5cGU6OlRleHQ6
CisgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFu
bmVsOjpTZW5kU3RyaW5nIHsgbWVzc2FnZS0+dGV4dE1lc3NhZ2UoKSB9LCBtZXNzYWdlLT50ZXh0
TWVzc2FnZSgpLnNpemVJbkJ5dGVzKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBQZW5kaW5nTWVzc2FnZTo6VHlwZTo6QmluYXJ5OiB7CisgICAgICAgICAgICAg
ICAgY29uc3QgYXV0byYgYmluYXJ5RGF0YSA9IG1lc3NhZ2UtPmJpbmFyeURhdGEoKTsKKyAgICAg
ICAgICAgICAgICBzZW5kTWVzc2FnZShNZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6OlNl
bmREYXRhIHsgSVBDOjpEYXRhUmVmZXJlbmNlIHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4oYmluYXJ5RGF0YS5kYXRhKCkpLCBiaW5hcnlEYXRhLnNpemUoKSB9IH0sIGJpbmFyeURh
dGEuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNhc2UgUGVuZGluZ01lc3NhZ2U6OlR5cGU6OkJsb2I6IHsKKyAgICAgICAgICAgICAg
ICBhdXRvJiBsb2FkZXIgPSBtZXNzYWdlLT5ibG9iTG9hZGVyKCk7CisgICAgICAgICAgICAgICAg
aWYgKGxvYWRlci5pc0xvYWRpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICAgICAgaWYgKGNvbnN0IGF1dG8mIHJlc3VsdCA9IGxvYWRlci5yZXN1bHQoKSkg
eworICAgICAgICAgICAgICAgICAgICBhdXRvIGJ5dGVMZW5ndGggPSByZXN1bHQtPmJ5dGVMZW5n
dGgoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluY3JlYXNlQnVmZmVyZWRBbW91bnQoYnl0
ZUxlbmd0aCkpCisgICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShNZXNzYWdlczo6
TmV0d29ya1NvY2tldENoYW5uZWw6OlNlbmREYXRhIHsgSVBDOjpEYXRhUmVmZXJlbmNlIHsgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocmVzdWx0LT5kYXRhKCkpLCBieXRlTGVuZ3Ro
IH0gfSwgYnl0ZUxlbmd0aCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhdXRvIGVycm9y
Q29kZSA9IGxvYWRlci5lcnJvckNvZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgZmFpbChtYWtl
U3RyaW5nKCJGYWlsZWQgdG8gbG9hZCBCbG9iOiBlcnJvciBjb2RlID0gIiwgZXJyb3JDb2RlLnZh
bHVlKCkpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX3BlbmRpbmdNZXNzYWdlcy5yZW1vdmVGaXJz
dCgpOworICAgICAgICB9CisgICAgfSkpOworICAgIHJldHVybiBTZW5kU3VjY2VzczsKIH0KIAog
dW5zaWduZWQgV2ViU29ja2V0Q2hhbm5lbDo6YnVmZmVyZWRBbW91bnQoKSBjb25zdApAQCAtMTQ5
LDcgKzMwNSwxMSBAQCB2b2lkIFdlYlNvY2tldENoYW5uZWw6OmNsb3NlKGludCBjb2RlLCBjb25z
dCBTdHJpbmcmIHJlYXNvbikKIAogdm9pZCBXZWJTb2NrZXRDaGFubmVsOjpmYWlsKGNvbnN0IFN0
cmluZyYgcmVhc29uKQogewotICAgIE1lc3NhZ2VTZW5kZXI6OnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtTb2NrZXRDaGFubmVsOjpDbG9zZSB7IDAsIHJlYXNvbiB9KTsKKyAgICBpZiAobV9jbGllbnQp
CisgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlTWVzc2FnZUVycm9yKCk7CisKKyAgICBpZiAo
IW1faXNDbG9zaW5nKQorICAgICAgICBNZXNzYWdlU2VuZGVyOjpzZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrU29ja2V0Q2hhbm5lbDo6Q2xvc2UgeyAwLCByZWFzb24gfSk7CiB9CiAKIHZvaWQgV2ViU29j
a2V0Q2hhbm5lbDo6ZGlzY29ubmVjdCgpCkBAIC0xNTcsNiArMzE3LDcgQEAgdm9pZCBXZWJTb2Nr
ZXRDaGFubmVsOjpkaXNjb25uZWN0KCkKICAgICBtX2NsaWVudCA9IG51bGxwdHI7CiAgICAgbV9k
b2N1bWVudCA9IG51bGxwdHI7CiAgICAgbV9wZW5kaW5nVGFza3MuY2xlYXIoKTsKKyAgICBtX3Bl
bmRpbmdNZXNzYWdlcy5jbGVhcigpOwogCiAgICAgTWVzc2FnZVNlbmRlcjo6c2VuZChNZXNzYWdl
czo6TmV0d29ya1NvY2tldENoYW5uZWw6OkNsb3NlIHsgMCwgeyB9IH0pOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5oCmluZGV4
IDFiNGE1NTI4MzVhLi5lYTk1YjczZGI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuaApAQCAtNDEsNiArNDEsOCBAQCBjbGFz
cyBEYXRhUmVmZXJlbmNlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgUGVuZGluZ01l
c3NhZ2U7CisKIGNsYXNzIFdlYlNvY2tldENoYW5uZWwgOiBwdWJsaWMgSVBDOjpNZXNzYWdlU2Vu
ZGVyLCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIsIHB1YmxpYyBXZWJDb3JlOjpUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbCwgcHVibGljIFJlZkNvdW50ZWQ8V2ViU29ja2V0Q2hhbm5lbD4s
IHB1YmxpYyBJZGVudGlmaWVkPFdlYlNvY2tldENoYW5uZWw+IHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUmVmPFdlYlNvY2tldENoYW5uZWw+IGNyZWF0ZShXZWJDb3JlOjpEb2N1bWVudCYsIFdlYkNv
cmU6OldlYlNvY2tldENoYW5uZWxDbGllbnQmKTsKQEAgLTgzLDYgKzg1LDkgQEAgcHJpdmF0ZToK
ICAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QgZmlu
YWw7CiAgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBmaW5h
bDsKIAorICAgIGJvb2wgaW5jcmVhc2VCdWZmZXJlZEFtb3VudChzaXplX3QpOworICAgIHZvaWQg
ZGVjcmVhc2VCdWZmZXJlZEFtb3VudChzaXplX3QpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHZvaWQgc2VuZE1lc3NhZ2UoVCYmLCBzaXplX3QgYnl0ZUxlbmd0aCk7CiAgICAgdm9pZCBlbnF1
ZXVlVGFzayhGdW5jdGlvbjx2b2lkKCk+JiYpOwogCiAgICAgV2Vha1B0cjxXZWJDb3JlOjpEb2N1
bWVudD4gbV9kb2N1bWVudDsKQEAgLTkyLDYgKzk3LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
aXNDbG9zaW5nIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNTdXNwZW5kZWQgeyBmYWxzZSB9Owog
ICAgIERlcXVlPEZ1bmN0aW9uPHZvaWQoKT4+IG1fcGVuZGluZ1Rhc2tzOworICAgIERlcXVlPHN0
ZDo6dW5pcXVlX3B0cjxQZW5kaW5nTWVzc2FnZT4+IG1fcGVuZGluZ01lc3NhZ2VzOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373019</attachid>
            <date>2019-06-27 04:57:55 -0700</date>
            <delta_ts>2019-06-27 06:42:35 -0700</delta_ts>
            <desc>Try to fix apple builds</desc>
            <filename>wk2-websockets-blobs.diff</filename>
            <type>text/plain</type>
            <size>16030</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjZjA0MDAyYzNhMy4uMWM5MGQxMzQxYmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxOS0wNi0yNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgV2ViU29ja2V0czogYWRkIHN1cHBvcnQgZm9yIHNlbmRpbmcg
YmxvYiBtZXNzYWdlcyB3aGVuIHVzaW5nIHdlYiBzb2NrZXRzIHBsYXRmb3JtIEFQSXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OTE4OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZTogQWRkIG1pc3NpbmcgaGVhZGVycy4KKwogMjAxOS0wNi0yNyAgQ2FybG9zIEdhcmNpYSBDYW1w
b3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1NPVVBdIFVzZSBsaWJzb3VwIFdl
YlNvY2tldHMgQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIv
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBhODFkODJhYjhkZi4uMDE3YzkxMjll
ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtNTE1LDcgKzUxNSw5IEBAIHNldChXZWJDb3JlX1BS
SVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBmaWxlYXBpL0Jsb2JMaW5lRW5kaW5ncy5oCiAg
ICAgZmlsZWFwaS9CbG9iUHJvcGVydHlCYWcuaAogICAgIGZpbGVhcGkvRmlsZS5oCisgICAgZmls
ZWFwaS9GaWxlRXJyb3IuaAogICAgIGZpbGVhcGkvRmlsZUxpc3QuaAorICAgIGZpbGVhcGkvRmls
ZVJlYWRlckxvYWRlci5oCiAgICAgZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyQ2xpZW50LmgKIAog
ICAgIGhpc3RvcnkvQmFja0ZvcndhcmRDbGllbnQuaApAQCAtMTE2OCw2ICsxMTcwLDcgQEAgc2V0
KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL25ldHdvcmsv
QmxvYlBhcnQuaAogICAgIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmgKICAgICBwbGF0
Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuaAorICAgIHBsYXRmb3JtL25ldHdvcmsvQmxv
YlJlc291cmNlSGFuZGxlLmgKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0NhY2hlVmFsaWRhdGlvbi5o
CiAgICAgcGxhdGZvcm0vbmV0d29yay9DZXJ0aWZpY2F0ZUluZm9CYXNlLmgKICAgICBwbGF0Zm9y
bS9uZXR3b3JrL0Nvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5LmgKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhZTQ4MDJlZmE1
Yi4uY2Q0MmI2OWE3MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTg1Nyw3ICs4NTcsNyBAQAogCQkyRTQzNDY1MTBGNTQ2QTgy
MDBCMEYxQkEgLyogV29ya2VyT2JqZWN0UHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNDM0NjNGMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJP
YmplY3RQcm94eS5oICovOyB9OwogCQkyRTQzNDY1MzBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2Vy
UnVuTG9vcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkU0MzQ2NDEwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlclJ1bkxvb3AuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRTQzNDY1NTBGNTQ2QTgyMDBC
MEYxQkEgLyogV29ya2VyVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRTQzNDY0MzBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyVGhyZWFkLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMkU3NTg0
MUUxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNzU4NDFCMTI3NzlBREEwMDYyNjI4QiAv
KiBGaWxlUmVhZGVyTG9hZGVyLmggKi87IH07CisJCTJFNzU4NDFFMTI3NzlBREEwMDYyNjI4QiAv
KiBGaWxlUmVhZGVyTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRTc1ODQxQjEyNzc5QURBMDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07fTsKIAkJMkU3NTg0
MUYxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNzU4NDFDMTI3NzlBREEwMDYy
NjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkU5NEY0M0MxMTkyMDdEQTAwQjdGNzVEIC8qIEpT
RmlsZVJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkU5NEY0M0ExMTkyMDdEQTAwQjdGNzVEIC8qIEpTRmlsZVJlYWRlci5oICovOyB9OwogCQky
RTlCNUQ4RjFCNjZBOTRFMDA4QzZBMjQgLyogV2hlZWxFdmVudERlbHRhRmlsdGVyTWFjLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTlCNUQ4RTFCNjZB
OTRFMDA4QzZBMjQgLyogV2hlZWxFdmVudERlbHRhRmlsdGVyTWFjLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggM2MzMTVkNGQwODEu
LmIxYTVhZDJkNDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE5LTA2LTI3ICBDYXJs
b3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBXZWJTb2Nr
ZXRzOiBhZGQgc3VwcG9ydCBmb3Igc2VuZGluZyBibG9iIG1lc3NhZ2VzIHdoZW4gdXNpbmcgd2Vi
IHNvY2tldHMgcGxhdGZvcm0gQVBJcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk5MTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIGhlbHBlciBwcml2YXRlIGNsYXNzIEJsb2JMb2FkZXIgdGhhdCB1
c2VzIEZpbGVSZWFkZXJMb2FkZXIgdG8gbG9hZCB0aGUgYmxvYnMuIFNpbmNlIGJsb2IgbG9hZHMg
YXJlCisgICAgICAgIGFzeW5jaHJvbm91cywgdGhlIG1lc3NhZ2VzIGFyZSBxdWV1ZWQgdXNpbmcg
YW5vdGhlciBoZWxwZXIgaW50ZXJuYWwgY2xhc3MgUGVuZGluZ01lc3NhZ2UuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlNvY2tldENoYW5uZWw6OmluY3JlYXNlQnVmZmVyZWRBbW91bnQpOiBJbmNyZWFzZSB0
aGUgYnVmZmVyZWQgYW1vdW50IGNoZWNraW5nIHdlIGRvbid0IG92ZXJsb2Z3LgorICAgICAgICAo
V2ViS2l0OjpXZWJTb2NrZXRDaGFubmVsOjpkZWNyZWFzZUJ1ZmZlcmVkQW1vdW50KTogRGVjcmVh
c2UgdGhlIGJ1ZmZlcmVkIGFtb3VudC4KKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0Q2hhbm5l
bDo6c2VuZE1lc3NhZ2UpOiBIZWxwZXIgY2xhc3MgdG8gc2VuZCBtZXNzYWdlIHRvIHRoZSBuZXR3
b3JrIHByb2Nlc3MgYW5kIGRlY3JlYXNlIHRoZQorICAgICAgICBidWZmZXJlZCBhbW91bnQgd2hl
biBkb25lLgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRDaGFubmVsOjpzZW5kKTogUXVldWUg
dGhlIG1lc3NhZ2UgaW4gcGVuZGluZyBxdWV1ZSBpZiB0aGVyZSBhcmUgcGVuZGluZyBtZXNzYWdl
cyBpbiB0aGUgcXVldWUKKyAgICAgICAgZm9yIHRleHQgYW5kIGJpbmFyeSBtZXNzYWdlcy4gRm9y
IGJsb2JzLCBhbHdheXMgcXVldWUgdGhlIG1lc3NhZ2UgdW5sZXNzIGl0J3MgYW4gZW1wdHkgYmxv
YiB0aGF0IHdlIGNhbiBoYW5kbGUKKyAgICAgICAgYXMgZW1wdHkgYmluYXJ5IGRhdGEgZGlyZWN0
bHkuCisgICAgICAgIChXZWJLaXQ6OlBlbmRpbmdNZXNzYWdlOjpQZW5kaW5nTWVzc2FnZSk6IEhl
bHBlciBjbGFzcyB0byBxdWV1ZSBtZXNzYWdlIHJlcXVlc3RzLgorICAgICAgICAoV2ViS2l0OjpQ
ZW5kaW5nTWVzc2FnZTo6dHlwZSBjb25zdCk6IFR5cGUgb2YgbWVzc2FnZTogVGV4dCwgQmluYXJ5
LCBCbG9iLgorICAgICAgICAoV2ViS2l0OjpQZW5kaW5nTWVzc2FnZTo6dGV4dE1lc3NhZ2UgY29u
c3QpOiBUaGUgdGV4dCBtZXNzYWdlLgorICAgICAgICAoV2ViS2l0OjpQZW5kaW5nTWVzc2FnZTo6
YmluYXJ5RGF0YSBjb25zdCk6IFRoZSBiaW5hcnkgZGF0YS4KKyAgICAgICAgKFdlYktpdDo6UGVu
ZGluZ01lc3NhZ2U6OmJsb2JMb2FkZXIgY29uc3QpOiBUaGUgYmxvYiBsb2FkZXIuCisgICAgICAg
IChXZWJLaXQ6OldlYlNvY2tldENoYW5uZWw6OmZhaWwpOiBOb3RpZnkgdGhlIGNsaWVudCBhYm91
dCB0aGUgZXJyb3IgdG8gZW5zdXJlIG9uY2xvc2UgaXMgZW1pdHRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViU29ja2V0Q2hhbm5lbDo6ZGlzY29ubmVjdCk6IENsZWFyIHRoZSBwZW5kaW5nIG1lc3Nh
Z2VzIHF1ZXVlLgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVs
Lmg6CisKIDIwMTktMDYtMjcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFtTT1VQXSBXZWJTb2NrZXRzOiBoYW5kbGUgVExTIGNlcnRpZmljYXRl
IGFuZCBlcnJvcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3Jr
L1dlYlNvY2tldENoYW5uZWwuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsv
V2ViU29ja2V0Q2hhbm5lbC5jcHAKaW5kZXggNzJmN2Q5YzYwZjIuLjBmYmZiOWUzOTVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVs
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFu
bmVsLmNwcApAQCAtMzIsMTEgKzMyLDE1IEBACiAjaW5jbHVkZSAiTmV0d29ya1NvY2tldENoYW5u
ZWxNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1
ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Jsb2IuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlUmVhZGVyTG9hZGVyLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlUmVhZGVyTG9hZGVyQ2xpZW50Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2ViU29ja2V0Q2hh
bm5lbC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2ViU29ja2V0Q2hhbm5lbENsaWVudC5oPgogI2lu
Y2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KKyNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMu
aD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTkyLDQzICs5NiwxOTUgQEAgV2ViU29ja2V0
Q2hhbm5lbDo6Q29ubmVjdFN0YXR1cyBXZWJTb2NrZXRDaGFubmVsOjpjb25uZWN0KGNvbnN0IFVS
TCYgdXJsLCBjb25zdAogICAgIHJldHVybiBDb25uZWN0U3RhdHVzOjpPSzsKIH0KIAotV2ViU29j
a2V0Q2hhbm5lbDo6U2VuZFJlc3VsdCBXZWJTb2NrZXRDaGFubmVsOjpzZW5kKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKK2Jvb2wgV2ViU29ja2V0Q2hhbm5lbDo6aW5jcmVhc2VCdWZmZXJlZEFtb3Vu
dChzaXplX3QgYnl0ZUxlbmd0aCkKIHsKLSAgICBhdXRvIGJ5dGVMZW5ndGggPSBtZXNzYWdlLnNp
emVJbkJ5dGVzKCk7Ci0gICAgbV9idWZmZXJlZEFtb3VudCArPSBieXRlTGVuZ3RoOworICAgIGlm
ICghYnl0ZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBDaGVja2VkPHNpemVf
dCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWROZXdCdWZmZXJlZEFtb3VudCA9IG1fYnVmZmVyZWRB
bW91bnQ7CisgICAgY2hlY2tlZE5ld0J1ZmZlcmVkQW1vdW50ICs9IGJ5dGVMZW5ndGg7CisgICAg
aWYgKFVOTElLRUxZKGNoZWNrZWROZXdCdWZmZXJlZEFtb3VudC5oYXNPdmVyZmxvd2VkKCkpKSB7
CisgICAgICAgIGZhaWwoIkZhaWxlZCB0byBzZW5kIFdlYlNvY2tldCBmcmFtZTogYnVmZmVyIGhh
cyBubyBtb3JlIHNwYWNlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBt
X2J1ZmZlcmVkQW1vdW50ID0gY2hlY2tlZE5ld0J1ZmZlcmVkQW1vdW50LnVuc2FmZUdldCgpOwog
ICAgIGlmIChtX2NsaWVudCkKICAgICAgICAgbV9jbGllbnQtPmRpZFVwZGF0ZUJ1ZmZlcmVkQW1v
dW50KG1fYnVmZmVyZWRBbW91bnQpOworICAgIHJldHVybiB0cnVlOworfQogCit2b2lkIFdlYlNv
Y2tldENoYW5uZWw6OmRlY3JlYXNlQnVmZmVyZWRBbW91bnQoc2l6ZV90IGJ5dGVMZW5ndGgpCit7
CisgICAgaWYgKCFieXRlTGVuZ3RoKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9i
dWZmZXJlZEFtb3VudCA+PSBieXRlTGVuZ3RoKTsKKyAgICBtX2J1ZmZlcmVkQW1vdW50IC09IGJ5
dGVMZW5ndGg7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkVXBkYXRl
QnVmZmVyZWRBbW91bnQobV9idWZmZXJlZEFtb3VudCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZE1lc3NhZ2UoVCYmIG1lc3NhZ2UsIHNpemVf
dCBieXRlTGVuZ3RoKQorewogICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4gY29tcGxldGlv
bkhhbmRsZXIgPSBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBieXRlTGVu
Z3RoXSB7Ci0gICAgICAgIEFTU0VSVChtX2J1ZmZlcmVkQW1vdW50ID49IGJ5dGVMZW5ndGgpOwot
ICAgICAgICBtX2J1ZmZlcmVkQW1vdW50IC09IGJ5dGVMZW5ndGg7Ci0gICAgICAgIGlmIChtX2Ns
aWVudCkKLSAgICAgICAgICAgIG1fY2xpZW50LT5kaWRVcGRhdGVCdWZmZXJlZEFtb3VudChtX2J1
ZmZlcmVkQW1vdW50KTsKKyAgICAgICAgZGVjcmVhc2VCdWZmZXJlZEFtb3VudChieXRlTGVuZ3Ro
KTsKICAgICB9OwotICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1NvY2tl
dENoYW5uZWw6OlNlbmRTdHJpbmcgeyBtZXNzYWdlIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKKyAgICBzZW5kV2l0aEFzeW5jUmVwbHkoV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOworfQorCitXZWJTb2NrZXRDaGFubmVsOjpTZW5kUmVzdWx0IFdl
YlNvY2tldENoYW5uZWw6OnNlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGF1dG8g
Ynl0ZUxlbmd0aCA9IG1lc3NhZ2Uuc2l6ZUluQnl0ZXMoKTsKKyAgICBpZiAoIWluY3JlYXNlQnVm
ZmVyZWRBbW91bnQoYnl0ZUxlbmd0aCkpCisgICAgICAgIHJldHVybiBTZW5kRmFpbDsKKworICAg
IGlmIChtX3BlbmRpbmdNZXNzYWdlcy5pc0VtcHR5KCkpCisgICAgICAgIHNlbmRNZXNzYWdlKE1l
c3NhZ2VzOjpOZXR3b3JrU29ja2V0Q2hhbm5lbDo6U2VuZFN0cmluZyB7IG1lc3NhZ2UgfSwgYnl0
ZUxlbmd0aCk7CisgICAgZWxzZQorICAgICAgICBtX3BlbmRpbmdNZXNzYWdlcy5hcHBlbmQoc3Rk
OjptYWtlX3VuaXF1ZTxQZW5kaW5nTWVzc2FnZT4obWVzc2FnZSkpOworCiAgICAgcmV0dXJuIFNl
bmRTdWNjZXNzOwogfQogCiBXZWJTb2NrZXRDaGFubmVsOjpTZW5kUmVzdWx0IFdlYlNvY2tldENo
YW5uZWw6OnNlbmQoY29uc3QgSlNDOjpBcnJheUJ1ZmZlciYgYmluYXJ5RGF0YSwgdW5zaWduZWQg
Ynl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKIHsKLSAgICBtX2J1ZmZlcmVkQW1vdW50
ICs9IGJ5dGVMZW5ndGg7Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+ZGlk
VXBkYXRlQnVmZmVyZWRBbW91bnQobV9idWZmZXJlZEFtb3VudCk7CisgICAgaWYgKCFpbmNyZWFz
ZUJ1ZmZlcmVkQW1vdW50KGJ5dGVMZW5ndGgpKQorICAgICAgICByZXR1cm4gU2VuZEZhaWw7CisK
KyAgICBpZiAobV9wZW5kaW5nTWVzc2FnZXMuaXNFbXB0eSgpKQorICAgICAgICBzZW5kTWVzc2Fn
ZShNZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6OlNlbmREYXRhIHsgSVBDOjpEYXRhUmVm
ZXJlbmNlIHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJpbmFyeURhdGEuZGF0YSgpKSAr
IGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGggfSB9LCBieXRlTGVuZ3RoKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fcGVuZGluZ01lc3NhZ2VzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPFBlbmRpbmdNZXNz
YWdlPihiaW5hcnlEYXRhLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7CiAKLSAgICBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+IGNvbXBsZXRpb25IYW5kbGVyID0gW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgYnl0ZUxlbmd0aF0gewotICAgICAgICBBU1NFUlQobV9idWZm
ZXJlZEFtb3VudCA+PSBieXRlTGVuZ3RoKTsKLSAgICAgICAgbV9idWZmZXJlZEFtb3VudCAtPSBi
eXRlTGVuZ3RoOwotICAgICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgICAgICBtX2NsaWVudC0+
ZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQobV9idWZmZXJlZEFtb3VudCk7Ci0gICAgfTsKLSAgICBz
ZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVsOjpTZW5kRGF0
YSB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihiaW5h
cnlEYXRhLmRhdGEoKSkgKyBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoIH0gfSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIHJldHVybiBTZW5kU3VjY2VzczsKIH0KIAotV2ViU29ja2V0
Q2hhbm5lbDo6U2VuZFJlc3VsdCBXZWJTb2NrZXRDaGFubmVsOjpzZW5kKFdlYkNvcmU6OkJsb2Im
KQorY2xhc3MgQmxvYkxvYWRlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpGaWxlUmVhZGVyTG9h
ZGVyQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBC
bG9iTG9hZGVyKFdlYkNvcmU6OkRvY3VtZW50KiBkb2N1bWVudCwgQmxvYiYgYmxvYiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICA6IG1fbG9h
ZGVyKHN0ZDo6bWFrZV91bmlxdWU8RmlsZVJlYWRlckxvYWRlcj4oRmlsZVJlYWRlckxvYWRlcjo6
UmVhZEFzQXJyYXlCdWZmZXIsIHRoaXMpKQorICAgICAgICAsIG1fY29tcGxldGlvbkhhbmRsZXIo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpCisgICAgeworICAgICAgICBtX2xvYWRlci0+c3Rh
cnQoZG9jdW1lbnQsIGJsb2IpOworICAgIH0KKworICAgIH5CbG9iTG9hZGVyKCkKKyAgICB7Cisg
ICAgICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKKyAg
ICB9CisKKyAgICBib29sIGlzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJuICEhbV9sb2FkZXI7IH0K
KyAgICBjb25zdCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4mIHJlc3VsdCgpIGNvbnN0IHsgcmV0
dXJuIG1fYnVmZmVyOyB9CisgICAgT3B0aW9uYWw8aW50PiBlcnJvckNvZGUoKSBjb25zdCB7IHJl
dHVybiBtX2Vycm9yQ29kZTsgfQorCitwcml2YXRlOgorICAgIHZvaWQgZGlkU3RhcnRMb2FkaW5n
KCkgZmluYWwgeyB9CisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YSgpIGZpbmFsIHsgfQorCisgICAg
dm9pZCBkaWRGaW5pc2hMb2FkaW5nKCkgZmluYWwKKyAgICB7CisgICAgICAgIG1fYnVmZmVyID0g
bV9sb2FkZXItPmFycmF5QnVmZmVyUmVzdWx0KCk7CisgICAgICAgIGNvbXBsZXRlKCk7CisgICAg
fQorCisgICAgdm9pZCBkaWRGYWlsKGludCBlcnJvckNvZGUpIGZpbmFsCisgICAgeworICAgICAg
ICBtX2Vycm9yQ29kZSA9IGVycm9yQ29kZTsKKyAgICAgICAgY29tcGxldGUoKTsKKyAgICB9CisK
KyAgICB2b2lkIGNvbXBsZXRlKCkKKyAgICB7CisgICAgICAgIG1fbG9hZGVyID0gbnVsbHB0cjsK
KyAgICAgICAgbV9jb21wbGV0aW9uSGFuZGxlcigpOworICAgIH0KKworICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpGaWxlUmVhZGVyTG9hZGVyPiBtX2xvYWRlcjsKKyAgICBSZWZQdHI8SlND
OjpBcnJheUJ1ZmZlcj4gbV9idWZmZXI7CisgICAgT3B0aW9uYWw8aW50PiBtX2Vycm9yQ29kZTsK
KyAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+IG1fY29tcGxldGlvbkhhbmRsZXI7Cit9Owor
CitjbGFzcyBQZW5kaW5nTWVzc2FnZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgZW51bSBjbGFzcyBUeXBlIHsgVGV4dCwgQmluYXJ5LCBCbG9iIH07CisKKyAg
ICBleHBsaWNpdCBQZW5kaW5nTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCisgICAgICAg
IDogbV90eXBlKFR5cGU6OlRleHQpCisgICAgICAgICwgbV90ZXh0TWVzc2FnZShtZXNzYWdlKQor
ICAgIHsKKyAgICB9CisKKyAgICBQZW5kaW5nTWVzc2FnZShjb25zdCBKU0M6OkFycmF5QnVmZmVy
JiBiaW5hcnlEYXRhLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQor
ICAgICAgICA6IG1fdHlwZShUeXBlOjpCaW5hcnkpCisgICAgICAgICwgbV9iaW5hcnlEYXRhKFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihi
aW5hcnlEYXRhLmRhdGEoKSkgKyBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSkKKyAgICB7CisgICAg
fQorCisgICAgUGVuZGluZ01lc3NhZ2UoV2ViQ29yZTo6RG9jdW1lbnQqIGRvY3VtZW50LCBCbG9i
JiBibG9iLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCisg
ICAgICAgIDogbV90eXBlKFR5cGU6OkJsb2IpCisgICAgICAgICwgbV9ibG9iTG9hZGVyKHN0ZDo6
bWFrZV91bmlxdWU8QmxvYkxvYWRlcj4oZG9jdW1lbnQsIGJsb2IsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKSkKKyAgICB7CisgICAgfQorCisgICAgflBlbmRpbmdNZXNzYWdlKCkgPSBkZWZh
dWx0OworCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgY29u
c3QgU3RyaW5nJiB0ZXh0TWVzc2FnZSgpIGNvbnN0IHsgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpU
ZXh0KTsgcmV0dXJuIG1fdGV4dE1lc3NhZ2U7IH0KKyAgICBjb25zdCBXZWJDb3JlOjpTaGFyZWRC
dWZmZXImIGJpbmFyeURhdGEoKSBjb25zdCB7IEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6QmluYXJ5
KTsgcmV0dXJuICptX2JpbmFyeURhdGE7IH0KKyAgICBjb25zdCBCbG9iTG9hZGVyJiBibG9iTG9h
ZGVyKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IFR5cGU6OkJsb2IpOyByZXR1cm4gKm1fYmxv
YkxvYWRlcjsgfQorCitwcml2YXRlOgorICAgIFR5cGUgbV90eXBlOworICAgIFN0cmluZyBtX3Rl
eHRNZXNzYWdlOworICAgIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IG1fYmluYXJ5RGF0
YTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmxvYkxvYWRlcj4gbV9ibG9iTG9hZGVyOworfTsKKwor
V2ViU29ja2V0Q2hhbm5lbDo6U2VuZFJlc3VsdCBXZWJTb2NrZXRDaGFubmVsOjpzZW5kKFdlYkNv
cmU6OkJsb2ImIGJsb2IpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU2Vu
ZEZhaWw7CisgICAgLy8gQXZvaWQgdGhlIEJsb2IgcXVldWUgYW5kIGxvYWRpbmcgZm9yIGVtcHR5
IGJsb2JzLgorICAgIGlmICghYmxvYi5zaXplKCkpCisgICAgICAgIHJldHVybiBzZW5kKEpTQzo6
QXJyYXlCdWZmZXI6OmNyZWF0ZShibG9iLnNpemUoKSwgMSksIDAsIDApOworCisgICAgbV9wZW5k
aW5nTWVzc2FnZXMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8UGVuZGluZ01lc3NhZ2U+KG1fZG9j
dW1lbnQuZ2V0KCksIGJsb2IsIFt0aGlzXSB7CisgICAgICAgIHdoaWxlICghbV9wZW5kaW5nTWVz
c2FnZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBhdXRvJiBtZXNzYWdlID0gbV9wZW5kaW5n
TWVzc2FnZXMuZmlyc3QoKTsKKworICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlLT50eXBlKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgUGVuZGluZ01lc3NhZ2U6OlR5cGU6OlRleHQ6CisgICAgICAg
ICAgICAgICAgc2VuZE1lc3NhZ2UoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVsOjpTZW5k
U3RyaW5nIHsgbWVzc2FnZS0+dGV4dE1lc3NhZ2UoKSB9LCBtZXNzYWdlLT50ZXh0TWVzc2FnZSgp
LnNpemVJbkJ5dGVzKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBQZW5kaW5nTWVzc2FnZTo6VHlwZTo6QmluYXJ5OiB7CisgICAgICAgICAgICAgICAgY29uc3Qg
YXV0byYgYmluYXJ5RGF0YSA9IG1lc3NhZ2UtPmJpbmFyeURhdGEoKTsKKyAgICAgICAgICAgICAg
ICBzZW5kTWVzc2FnZShNZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6OlNlbmREYXRhIHsg
SVBDOjpEYXRhUmVmZXJlbmNlIHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYmlu
YXJ5RGF0YS5kYXRhKCkpLCBiaW5hcnlEYXRhLnNpemUoKSB9IH0sIGJpbmFyeURhdGEuc2l6ZSgp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNh
c2UgUGVuZGluZ01lc3NhZ2U6OlR5cGU6OkJsb2I6IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBs
b2FkZXIgPSBtZXNzYWdlLT5ibG9iTG9hZGVyKCk7CisgICAgICAgICAgICAgICAgaWYgKGxvYWRl
ci5pc0xvYWRpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAg
ICAgICAgaWYgKGNvbnN0IGF1dG8mIHJlc3VsdCA9IGxvYWRlci5yZXN1bHQoKSkgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvIGJ5dGVMZW5ndGggPSByZXN1bHQtPmJ5dGVMZW5ndGgoKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGluY3JlYXNlQnVmZmVyZWRBbW91bnQoYnl0ZUxlbmd0aCkp
CisgICAgICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShNZXNzYWdlczo6TmV0d29ya1Nv
Y2tldENoYW5uZWw6OlNlbmREYXRhIHsgSVBDOjpEYXRhUmVmZXJlbmNlIHsgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90Kj4ocmVzdWx0LT5kYXRhKCkpLCBieXRlTGVuZ3RoIH0gfSwgYnl0
ZUxlbmd0aCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhdXRvIGVycm9yQ29kZSA9IGxv
YWRlci5lcnJvckNvZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgZmFpbChtYWtlU3RyaW5nKCJG
YWlsZWQgdG8gbG9hZCBCbG9iOiBlcnJvciBjb2RlID0gIiwgZXJyb3JDb2RlLnZhbHVlKCkpKTsK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBtX3BlbmRpbmdNZXNzYWdlcy5yZW1vdmVGaXJzdCgpOworICAg
ICAgICB9CisgICAgfSkpOworICAgIHJldHVybiBTZW5kU3VjY2VzczsKIH0KIAogdW5zaWduZWQg
V2ViU29ja2V0Q2hhbm5lbDo6YnVmZmVyZWRBbW91bnQoKSBjb25zdApAQCAtMTQ5LDcgKzMwNSwx
MSBAQCB2b2lkIFdlYlNvY2tldENoYW5uZWw6OmNsb3NlKGludCBjb2RlLCBjb25zdCBTdHJpbmcm
IHJlYXNvbikKIAogdm9pZCBXZWJTb2NrZXRDaGFubmVsOjpmYWlsKGNvbnN0IFN0cmluZyYgcmVh
c29uKQogewotICAgIE1lc3NhZ2VTZW5kZXI6OnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRD
aGFubmVsOjpDbG9zZSB7IDAsIHJlYXNvbiB9KTsKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAg
IG1fY2xpZW50LT5kaWRSZWNlaXZlTWVzc2FnZUVycm9yKCk7CisKKyAgICBpZiAoIW1faXNDbG9z
aW5nKQorICAgICAgICBNZXNzYWdlU2VuZGVyOjpzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrU29ja2V0
Q2hhbm5lbDo6Q2xvc2UgeyAwLCByZWFzb24gfSk7CiB9CiAKIHZvaWQgV2ViU29ja2V0Q2hhbm5l
bDo6ZGlzY29ubmVjdCgpCkBAIC0xNTcsNiArMzE3LDcgQEAgdm9pZCBXZWJTb2NrZXRDaGFubmVs
OjpkaXNjb25uZWN0KCkKICAgICBtX2NsaWVudCA9IG51bGxwdHI7CiAgICAgbV9kb2N1bWVudCA9
IG51bGxwdHI7CiAgICAgbV9wZW5kaW5nVGFza3MuY2xlYXIoKTsKKyAgICBtX3BlbmRpbmdNZXNz
YWdlcy5jbGVhcigpOwogCiAgICAgTWVzc2FnZVNlbmRlcjo6c2VuZChNZXNzYWdlczo6TmV0d29y
a1NvY2tldENoYW5uZWw6OkNsb3NlIHsgMCwgeyB9IH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5oCmluZGV4IDFiNGE1NTI4
MzVhLi5lYTk1YjczZGI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05l
dHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9O
ZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuaApAQCAtNDEsNiArNDEsOCBAQCBjbGFzcyBEYXRhUmVm
ZXJlbmNlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgUGVuZGluZ01lc3NhZ2U7CisK
IGNsYXNzIFdlYlNvY2tldENoYW5uZWwgOiBwdWJsaWMgSVBDOjpNZXNzYWdlU2VuZGVyLCBwdWJs
aWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIsIHB1YmxpYyBXZWJDb3JlOjpUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbCwgcHVibGljIFJlZkNvdW50ZWQ8V2ViU29ja2V0Q2hhbm5lbD4sIHB1YmxpYyBJ
ZGVudGlmaWVkPFdlYlNvY2tldENoYW5uZWw+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFdl
YlNvY2tldENoYW5uZWw+IGNyZWF0ZShXZWJDb3JlOjpEb2N1bWVudCYsIFdlYkNvcmU6OldlYlNv
Y2tldENoYW5uZWxDbGllbnQmKTsKQEAgLTgzLDYgKzg1LDkgQEAgcHJpdmF0ZToKICAgICBJUEM6
OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QgZmluYWw7CiAgICAg
dWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBmaW5hbDsKIAorICAg
IGJvb2wgaW5jcmVhc2VCdWZmZXJlZEFtb3VudChzaXplX3QpOworICAgIHZvaWQgZGVjcmVhc2VC
dWZmZXJlZEFtb3VudChzaXplX3QpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2Vu
ZE1lc3NhZ2UoVCYmLCBzaXplX3QgYnl0ZUxlbmd0aCk7CiAgICAgdm9pZCBlbnF1ZXVlVGFzayhG
dW5jdGlvbjx2b2lkKCk+JiYpOwogCiAgICAgV2Vha1B0cjxXZWJDb3JlOjpEb2N1bWVudD4gbV9k
b2N1bWVudDsKQEAgLTkyLDYgKzk3LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNDbG9zaW5n
IHsgZmFsc2UgfTsKICAgICBib29sIG1faXNTdXNwZW5kZWQgeyBmYWxzZSB9OwogICAgIERlcXVl
PEZ1bmN0aW9uPHZvaWQoKT4+IG1fcGVuZGluZ1Rhc2tzOworICAgIERlcXVlPHN0ZDo6dW5pcXVl
X3B0cjxQZW5kaW5nTWVzc2FnZT4+IG1fcGVuZGluZ01lc3NhZ2VzOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373029</attachid>
            <date>2019-06-27 06:42:35 -0700</date>
            <delta_ts>2019-06-27 06:51:22 -0700</delta_ts>
            <desc>Try to fix apple builds</desc>
            <filename>wk2-websockets-blobs.diff</filename>
            <type>text/plain</type>
            <size>17114</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjZjA0MDAyYzNhMy4uMWM5MGQxMzQxYmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxOS0wNi0yNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgV2ViU29ja2V0czogYWRkIHN1cHBvcnQgZm9yIHNlbmRpbmcg
YmxvYiBtZXNzYWdlcyB3aGVuIHVzaW5nIHdlYiBzb2NrZXRzIHBsYXRmb3JtIEFQSXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OTE4OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZTogQWRkIG1pc3NpbmcgaGVhZGVycy4KKwogMjAxOS0wNi0yNyAgQ2FybG9zIEdhcmNpYSBDYW1w
b3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1NPVVBdIFVzZSBsaWJzb3VwIFdl
YlNvY2tldHMgQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIv
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBhODFkODJhYjhkZi4uMDE3YzkxMjll
ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtNTE1LDcgKzUxNSw5IEBAIHNldChXZWJDb3JlX1BS
SVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBmaWxlYXBpL0Jsb2JMaW5lRW5kaW5ncy5oCiAg
ICAgZmlsZWFwaS9CbG9iUHJvcGVydHlCYWcuaAogICAgIGZpbGVhcGkvRmlsZS5oCisgICAgZmls
ZWFwaS9GaWxlRXJyb3IuaAogICAgIGZpbGVhcGkvRmlsZUxpc3QuaAorICAgIGZpbGVhcGkvRmls
ZVJlYWRlckxvYWRlci5oCiAgICAgZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyQ2xpZW50LmgKIAog
ICAgIGhpc3RvcnkvQmFja0ZvcndhcmRDbGllbnQuaApAQCAtMTE2OCw2ICsxMTcwLDcgQEAgc2V0
KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL25ldHdvcmsv
QmxvYlBhcnQuaAogICAgIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmgKICAgICBwbGF0
Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuaAorICAgIHBsYXRmb3JtL25ldHdvcmsvQmxv
YlJlc291cmNlSGFuZGxlLmgKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0NhY2hlVmFsaWRhdGlvbi5o
CiAgICAgcGxhdGZvcm0vbmV0d29yay9DZXJ0aWZpY2F0ZUluZm9CYXNlLmgKICAgICBwbGF0Zm9y
bS9uZXR3b3JrL0Nvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5LmgKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhZTQ4MDJlZmE1
Yi4uYmYyN2FmMDQ2MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTg1NywxMiArODU3LDEyIEBACiAJCTJFNDM0NjUxMEY1NDZB
ODIwMEIwRjFCQSAvKiBXb3JrZXJPYmplY3RQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU0MzQ2M0YwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtl
ck9iamVjdFByb3h5LmggKi87IH07CiAJCTJFNDM0NjUzMEY1NDZBODIwMEIwRjFCQSAvKiBXb3Jr
ZXJSdW5Mb29wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyRTQzNDY0MTBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyUnVuTG9vcC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJFNDM0NjU1MEY1NDZBODIw
MEIwRjFCQSAvKiBXb3JrZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJFNDM0NjQzMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJUaHJlYWQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyRTc1
ODQxRTEyNzc5QURBMDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU3NTg0MUIxMjc3OUFEQTAwNjI2MjhC
IC8qIEZpbGVSZWFkZXJMb2FkZXIuaCAqLzsgfTsKKwkJMkU3NTg0MUUxMjc3OUFEQTAwNjI2MjhC
IC8qIEZpbGVSZWFkZXJMb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJFNzU4NDFCMTI3NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTt9OwogCQkyRTc1
ODQxRjEyNzc5QURBMDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlckNsaWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU3NTg0MUMxMjc3OUFEQTAw
NjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRTk0RjQzQzExOTIwN0RBMDBCN0Y3NUQgLyog
SlNGaWxlUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRTk0RjQzQTExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmggKi87IH07CiAJ
CTJFOUI1RDhGMUI2NkE5NEUwMDhDNkEyNCAvKiBXaGVlbEV2ZW50RGVsdGFGaWx0ZXJNYWMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOUI1RDhFMUI2
NkE5NEUwMDhDNkEyNCAvKiBXaGVlbEV2ZW50RGVsdGFGaWx0ZXJNYWMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRUE3NjgwNDBGRTcxMjY0MDBB
QjlDOEEgLyogV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUE3NjgwMzBGRTcxMjY0MDBBQjlDOEEgLyogV29y
a2VyU2NyaXB0TG9hZGVyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJMkVCNEJDRDMxMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJj
ZUhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkVCNEJDRDExMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5oICovOyB9Owor
CQkyRUI0QkNEMzEyMUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUI0QkNEMTEyMUYwM0Uz
MDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkVCNzY3NTcxREExOUJERjAwM0UyM0I1IC8qIElu
cHV0RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJFQjc2NzU0MURBMTlCNjcwMDNFMjNCNSAvKiBJbnB1dEV2ZW50LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkVCQkMzRDgxQjY1OTg4MzAwRjUy
NTNEIC8qIFdoZWVsRXZlbnREZWx0YUZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkVCQkMzRDcxQjY1OTg4MzAwRjUyNTNEIC8qIFdoZWVsRXZl
bnREZWx0YUZpbHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTJFQ0RCQUQxMjFEODkwMzQwMEYwMEVDRCAvKiBVbmRvTWFuYWdlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVDREJBQ0UyMUQ4OTAz
NDAwRjAwRUNEIC8qIFVuZG9NYW5hZ2VyLmggKi87IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDNjMzE1ZDRkMDgx
Li5iMWE1YWQyZDQzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxOS0wNi0yNyAgQ2Fy
bG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgV2ViU29j
a2V0czogYWRkIHN1cHBvcnQgZm9yIHNlbmRpbmcgYmxvYiBtZXNzYWdlcyB3aGVuIHVzaW5nIHdl
YiBzb2NrZXRzIHBsYXRmb3JtIEFQSXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE5OTE4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBoZWxwZXIgcHJpdmF0ZSBjbGFzcyBCbG9iTG9hZGVyIHRoYXQg
dXNlcyBGaWxlUmVhZGVyTG9hZGVyIHRvIGxvYWQgdGhlIGJsb2JzLiBTaW5jZSBibG9iIGxvYWRz
IGFyZQorICAgICAgICBhc3luY2hyb25vdXMsIHRoZSBtZXNzYWdlcyBhcmUgcXVldWVkIHVzaW5n
IGFub3RoZXIgaGVscGVyIGludGVybmFsIGNsYXNzIFBlbmRpbmdNZXNzYWdlLgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTb2NrZXRDaGFubmVsOjppbmNyZWFzZUJ1ZmZlcmVkQW1vdW50KTogSW5jcmVhc2Ug
dGhlIGJ1ZmZlcmVkIGFtb3VudCBjaGVja2luZyB3ZSBkb24ndCBvdmVybG9mdy4KKyAgICAgICAg
KFdlYktpdDo6V2ViU29ja2V0Q2hhbm5lbDo6ZGVjcmVhc2VCdWZmZXJlZEFtb3VudCk6IERlY3Jl
YXNlIHRoZSBidWZmZXJlZCBhbW91bnQuCisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldENoYW5u
ZWw6OnNlbmRNZXNzYWdlKTogSGVscGVyIGNsYXNzIHRvIHNlbmQgbWVzc2FnZSB0byB0aGUgbmV0
d29yayBwcm9jZXNzIGFuZCBkZWNyZWFzZSB0aGUKKyAgICAgICAgYnVmZmVyZWQgYW1vdW50IHdo
ZW4gZG9uZS4KKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0Q2hhbm5lbDo6c2VuZCk6IFF1ZXVl
IHRoZSBtZXNzYWdlIGluIHBlbmRpbmcgcXVldWUgaWYgdGhlcmUgYXJlIHBlbmRpbmcgbWVzc2Fn
ZXMgaW4gdGhlIHF1ZXVlCisgICAgICAgIGZvciB0ZXh0IGFuZCBiaW5hcnkgbWVzc2FnZXMuIEZv
ciBibG9icywgYWx3YXlzIHF1ZXVlIHRoZSBtZXNzYWdlIHVubGVzcyBpdCdzIGFuIGVtcHR5IGJs
b2IgdGhhdCB3ZSBjYW4gaGFuZGxlCisgICAgICAgIGFzIGVtcHR5IGJpbmFyeSBkYXRhIGRpcmVj
dGx5LgorICAgICAgICAoV2ViS2l0OjpQZW5kaW5nTWVzc2FnZTo6UGVuZGluZ01lc3NhZ2UpOiBI
ZWxwZXIgY2xhc3MgdG8gcXVldWUgbWVzc2FnZSByZXF1ZXN0cy4KKyAgICAgICAgKFdlYktpdDo6
UGVuZGluZ01lc3NhZ2U6OnR5cGUgY29uc3QpOiBUeXBlIG9mIG1lc3NhZ2U6IFRleHQsIEJpbmFy
eSwgQmxvYi4KKyAgICAgICAgKFdlYktpdDo6UGVuZGluZ01lc3NhZ2U6OnRleHRNZXNzYWdlIGNv
bnN0KTogVGhlIHRleHQgbWVzc2FnZS4KKyAgICAgICAgKFdlYktpdDo6UGVuZGluZ01lc3NhZ2U6
OmJpbmFyeURhdGEgY29uc3QpOiBUaGUgYmluYXJ5IGRhdGEuCisgICAgICAgIChXZWJLaXQ6OlBl
bmRpbmdNZXNzYWdlOjpibG9iTG9hZGVyIGNvbnN0KTogVGhlIGJsb2IgbG9hZGVyLgorICAgICAg
ICAoV2ViS2l0OjpXZWJTb2NrZXRDaGFubmVsOjpmYWlsKTogTm90aWZ5IHRoZSBjbGllbnQgYWJv
dXQgdGhlIGVycm9yIHRvIGVuc3VyZSBvbmNsb3NlIGlzIGVtaXR0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlNvY2tldENoYW5uZWw6OmRpc2Nvbm5lY3QpOiBDbGVhciB0aGUgcGVuZGluZyBtZXNz
YWdlcyBxdWV1ZS4KKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5l
bC5oOgorCiAyMDE5LTA2LTI3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbU09VUF0gV2ViU29ja2V0czogaGFuZGxlIFRMUyBjZXJ0aWZpY2F0
ZSBhbmQgZXJyb3JzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29y
ay9XZWJTb2NrZXRDaGFubmVsLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3Jr
L1dlYlNvY2tldENoYW5uZWwuY3BwCmluZGV4IDcyZjdkOWM2MGYyLi4wZmJmYjllMzk1YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5l
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hh
bm5lbC5jcHAKQEAgLTMyLDExICszMiwxNSBAQAogI2luY2x1ZGUgIk5ldHdvcmtTb2NrZXRDaGFu
bmVsTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNs
dWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9CbG9iLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVJlYWRlckxvYWRlci5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVJlYWRlckxvYWRlckNsaWVudC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dlYlNvY2tldENo
YW5uZWwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dlYlNvY2tldENoYW5uZWxDbGllbnQuaD4KICNp
bmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+CisjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGlj
Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC05Miw0MyArOTYsMTk1IEBAIFdlYlNvY2tl
dENoYW5uZWw6OkNvbm5lY3RTdGF0dXMgV2ViU29ja2V0Q2hhbm5lbDo6Y29ubmVjdChjb25zdCBV
UkwmIHVybCwgY29uc3QKICAgICByZXR1cm4gQ29ubmVjdFN0YXR1czo6T0s7CiB9CiAKLVdlYlNv
Y2tldENoYW5uZWw6OlNlbmRSZXN1bHQgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZChjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCitib29sIFdlYlNvY2tldENoYW5uZWw6OmluY3JlYXNlQnVmZmVyZWRBbW91
bnQoc2l6ZV90IGJ5dGVMZW5ndGgpCiB7Ci0gICAgYXV0byBieXRlTGVuZ3RoID0gbWVzc2FnZS5z
aXplSW5CeXRlcygpOwotICAgIG1fYnVmZmVyZWRBbW91bnQgKz0gYnl0ZUxlbmd0aDsKKyAgICBp
ZiAoIWJ5dGVMZW5ndGgpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgQ2hlY2tlZDxzaXpl
X3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkTmV3QnVmZmVyZWRBbW91bnQgPSBtX2J1ZmZlcmVk
QW1vdW50OworICAgIGNoZWNrZWROZXdCdWZmZXJlZEFtb3VudCArPSBieXRlTGVuZ3RoOworICAg
IGlmIChVTkxJS0VMWShjaGVja2VkTmV3QnVmZmVyZWRBbW91bnQuaGFzT3ZlcmZsb3dlZCgpKSkg
eworICAgICAgICBmYWlsKCJGYWlsZWQgdG8gc2VuZCBXZWJTb2NrZXQgZnJhbWU6IGJ1ZmZlciBo
YXMgbm8gbW9yZSBzcGFjZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
bV9idWZmZXJlZEFtb3VudCA9IGNoZWNrZWROZXdCdWZmZXJlZEFtb3VudC51bnNhZmVHZXQoKTsK
ICAgICBpZiAobV9jbGllbnQpCiAgICAgICAgIG1fY2xpZW50LT5kaWRVcGRhdGVCdWZmZXJlZEFt
b3VudChtX2J1ZmZlcmVkQW1vdW50KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAordm9pZCBXZWJT
b2NrZXRDaGFubmVsOjpkZWNyZWFzZUJ1ZmZlcmVkQW1vdW50KHNpemVfdCBieXRlTGVuZ3RoKQor
eworICAgIGlmICghYnl0ZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1f
YnVmZmVyZWRBbW91bnQgPj0gYnl0ZUxlbmd0aCk7CisgICAgbV9idWZmZXJlZEFtb3VudCAtPSBi
eXRlTGVuZ3RoOworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZFVwZGF0
ZUJ1ZmZlcmVkQW1vdW50KG1fYnVmZmVyZWRBbW91bnQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB2b2lkIFdlYlNvY2tldENoYW5uZWw6OnNlbmRNZXNzYWdlKFQmJiBtZXNzYWdlLCBzaXpl
X3QgYnl0ZUxlbmd0aCkKK3sKICAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+IGNvbXBsZXRp
b25IYW5kbGVyID0gW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgYnl0ZUxl
bmd0aF0gewotICAgICAgICBBU1NFUlQobV9idWZmZXJlZEFtb3VudCA+PSBieXRlTGVuZ3RoKTsK
LSAgICAgICAgbV9idWZmZXJlZEFtb3VudCAtPSBieXRlTGVuZ3RoOwotICAgICAgICBpZiAobV9j
bGllbnQpCi0gICAgICAgICAgICBtX2NsaWVudC0+ZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQobV9i
dWZmZXJlZEFtb3VudCk7CisgICAgICAgIGRlY3JlYXNlQnVmZmVyZWRBbW91bnQoYnl0ZUxlbmd0
aCk7CiAgICAgfTsKLSAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtTb2Nr
ZXRDaGFubmVsOjpTZW5kU3RyaW5nIHsgbWVzc2FnZSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CisgICAgc2VuZFdpdGhBc3luY1JlcGx5KFdURk1vdmUobWVzc2FnZSksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKK30KKworV2ViU29ja2V0Q2hhbm5lbDo6U2VuZFJlc3VsdCBX
ZWJTb2NrZXRDaGFubmVsOjpzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBhdXRv
IGJ5dGVMZW5ndGggPSBtZXNzYWdlLnNpemVJbkJ5dGVzKCk7CisgICAgaWYgKCFpbmNyZWFzZUJ1
ZmZlcmVkQW1vdW50KGJ5dGVMZW5ndGgpKQorICAgICAgICByZXR1cm4gU2VuZEZhaWw7CisKKyAg
ICBpZiAobV9wZW5kaW5nTWVzc2FnZXMuaXNFbXB0eSgpKQorICAgICAgICBzZW5kTWVzc2FnZShN
ZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6OlNlbmRTdHJpbmcgeyBtZXNzYWdlIH0sIGJ5
dGVMZW5ndGgpOworICAgIGVsc2UKKyAgICAgICAgbV9wZW5kaW5nTWVzc2FnZXMuYXBwZW5kKHN0
ZDo6bWFrZV91bmlxdWU8UGVuZGluZ01lc3NhZ2U+KG1lc3NhZ2UpKTsKKwogICAgIHJldHVybiBT
ZW5kU3VjY2VzczsKIH0KIAogV2ViU29ja2V0Q2hhbm5lbDo6U2VuZFJlc3VsdCBXZWJTb2NrZXRD
aGFubmVsOjpzZW5kKGNvbnN0IEpTQzo6QXJyYXlCdWZmZXImIGJpbmFyeURhdGEsIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCiB7Ci0gICAgbV9idWZmZXJlZEFtb3Vu
dCArPSBieXRlTGVuZ3RoOwotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPmRp
ZFVwZGF0ZUJ1ZmZlcmVkQW1vdW50KG1fYnVmZmVyZWRBbW91bnQpOworICAgIGlmICghaW5jcmVh
c2VCdWZmZXJlZEFtb3VudChieXRlTGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIFNlbmRGYWlsOwor
CisgICAgaWYgKG1fcGVuZGluZ01lc3NhZ2VzLmlzRW1wdHkoKSkKKyAgICAgICAgc2VuZE1lc3Nh
Z2UoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVsOjpTZW5kRGF0YSB7IElQQzo6RGF0YVJl
ZmVyZW5jZSB7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihiaW5hcnlEYXRhLmRhdGEoKSkg
KyBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoIH0gfSwgYnl0ZUxlbmd0aCk7CisgICAgZWxzZQorICAg
ICAgICBtX3BlbmRpbmdNZXNzYWdlcy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxQZW5kaW5nTWVz
c2FnZT4oYmluYXJ5RGF0YSwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpOwogCi0gICAgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiBjb21wbGV0aW9uSGFuZGxlciA9IFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyksIGJ5dGVMZW5ndGhdIHsKLSAgICAgICAgQVNTRVJUKG1fYnVm
ZmVyZWRBbW91bnQgPj0gYnl0ZUxlbmd0aCk7Ci0gICAgICAgIG1fYnVmZmVyZWRBbW91bnQgLT0g
Ynl0ZUxlbmd0aDsKLSAgICAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICAgICAgbV9jbGllbnQt
PmRpZFVwZGF0ZUJ1ZmZlcmVkQW1vdW50KG1fYnVmZmVyZWRBbW91bnQpOwotICAgIH07Ci0gICAg
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrU29ja2V0Q2hhbm5lbDo6U2VuZERh
dGEgeyBJUEM6OkRhdGFSZWZlcmVuY2UgeyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYmlu
YXJ5RGF0YS5kYXRhKCkpICsgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCB9IH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICByZXR1cm4gU2VuZFN1Y2Nlc3M7CiB9CiAKLVdlYlNvY2tl
dENoYW5uZWw6OlNlbmRSZXN1bHQgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZChXZWJDb3JlOjpCbG9i
JikKK2NsYXNzIEJsb2JMb2FkZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6RmlsZVJlYWRlckxv
YWRlckNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
QmxvYkxvYWRlcihXZWJDb3JlOjpEb2N1bWVudCogZG9jdW1lbnQsIEJsb2ImIGJsb2IsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgOiBtX2xv
YWRlcihzdGQ6Om1ha2VfdW5pcXVlPEZpbGVSZWFkZXJMb2FkZXI+KEZpbGVSZWFkZXJMb2FkZXI6
OlJlYWRBc0FycmF5QnVmZmVyLCB0aGlzKSkKKyAgICAgICAgLCBtX2NvbXBsZXRpb25IYW5kbGVy
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKQorICAgIHsKKyAgICAgICAgbV9sb2FkZXItPnN0
YXJ0KGRvY3VtZW50LCBibG9iKTsKKyAgICB9CisKKyAgICB+QmxvYkxvYWRlcigpCisgICAgewor
ICAgICAgICBpZiAobV9sb2FkZXIpCisgICAgICAgICAgICBtX2xvYWRlci0+Y2FuY2VsKCk7Cisg
ICAgfQorCisgICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdCB7IHJldHVybiAhIW1fbG9hZGVyOyB9
CisgICAgY29uc3QgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+JiByZXN1bHQoKSBjb25zdCB7IHJl
dHVybiBtX2J1ZmZlcjsgfQorICAgIE9wdGlvbmFsPGludD4gZXJyb3JDb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9lcnJvckNvZGU7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGRpZFN0YXJ0TG9hZGlu
ZygpIGZpbmFsIHsgfQorICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoKSBmaW5hbCB7IH0KKworICAg
IHZvaWQgZGlkRmluaXNoTG9hZGluZygpIGZpbmFsCisgICAgeworICAgICAgICBtX2J1ZmZlciA9
IG1fbG9hZGVyLT5hcnJheUJ1ZmZlclJlc3VsdCgpOworICAgICAgICBjb21wbGV0ZSgpOworICAg
IH0KKworICAgIHZvaWQgZGlkRmFpbChpbnQgZXJyb3JDb2RlKSBmaW5hbAorICAgIHsKKyAgICAg
ICAgbV9lcnJvckNvZGUgPSBlcnJvckNvZGU7CisgICAgICAgIGNvbXBsZXRlKCk7CisgICAgfQor
CisgICAgdm9pZCBjb21wbGV0ZSgpCisgICAgeworICAgICAgICBtX2xvYWRlciA9IG51bGxwdHI7
CisgICAgICAgIG1fY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6RmlsZVJlYWRlckxvYWRlcj4gbV9sb2FkZXI7CisgICAgUmVmUHRyPEpT
Qzo6QXJyYXlCdWZmZXI+IG1fYnVmZmVyOworICAgIE9wdGlvbmFsPGludD4gbV9lcnJvckNvZGU7
CisgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiBtX2NvbXBsZXRpb25IYW5kbGVyOworfTsK
KworY2xhc3MgUGVuZGluZ01lc3NhZ2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIGVudW0gY2xhc3MgVHlwZSB7IFRleHQsIEJpbmFyeSwgQmxvYiB9OworCisg
ICAgZXhwbGljaXQgUGVuZGluZ01lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorICAgICAg
ICA6IG1fdHlwZShUeXBlOjpUZXh0KQorICAgICAgICAsIG1fdGV4dE1lc3NhZ2UobWVzc2FnZSkK
KyAgICB7CisgICAgfQorCisgICAgUGVuZGluZ01lc3NhZ2UoY29uc3QgSlNDOjpBcnJheUJ1ZmZl
ciYgYmluYXJ5RGF0YSwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkK
KyAgICAgICAgOiBtX3R5cGUoVHlwZTo6QmluYXJ5KQorICAgICAgICAsIG1fYmluYXJ5RGF0YShX
ZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4o
YmluYXJ5RGF0YS5kYXRhKCkpICsgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpCisgICAgeworICAg
IH0KKworICAgIFBlbmRpbmdNZXNzYWdlKFdlYkNvcmU6OkRvY3VtZW50KiBkb2N1bWVudCwgQmxv
YiYgYmxvYiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQor
ICAgICAgICA6IG1fdHlwZShUeXBlOjpCbG9iKQorICAgICAgICAsIG1fYmxvYkxvYWRlcihzdGQ6
Om1ha2VfdW5pcXVlPEJsb2JMb2FkZXI+KGRvY3VtZW50LCBibG9iLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSkpCisgICAgeworICAgIH0KKworICAgIH5QZW5kaW5nTWVzc2FnZSgpID0gZGVm
YXVsdDsKKworICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIGNv
bnN0IFN0cmluZyYgdGV4dE1lc3NhZ2UoKSBjb25zdCB7IEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6
VGV4dCk7IHJldHVybiBtX3RleHRNZXNzYWdlOyB9CisgICAgY29uc3QgV2ViQ29yZTo6U2hhcmVk
QnVmZmVyJiBiaW5hcnlEYXRhKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IFR5cGU6OkJpbmFy
eSk7IHJldHVybiAqbV9iaW5hcnlEYXRhOyB9CisgICAgY29uc3QgQmxvYkxvYWRlciYgYmxvYkxv
YWRlcigpIGNvbnN0IHsgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpCbG9iKTsgcmV0dXJuICptX2Js
b2JMb2FkZXI7IH0KKworcHJpdmF0ZToKKyAgICBUeXBlIG1fdHlwZTsKKyAgICBTdHJpbmcgbV90
ZXh0TWVzc2FnZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBtX2JpbmFyeURh
dGE7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJsb2JMb2FkZXI+IG1fYmxvYkxvYWRlcjsKK307CisK
K1dlYlNvY2tldENoYW5uZWw6OlNlbmRSZXN1bHQgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZChXZWJD
b3JlOjpCbG9iJiBibG9iKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFNl
bmRGYWlsOworICAgIC8vIEF2b2lkIHRoZSBCbG9iIHF1ZXVlIGFuZCBsb2FkaW5nIGZvciBlbXB0
eSBibG9icy4KKyAgICBpZiAoIWJsb2Iuc2l6ZSgpKQorICAgICAgICByZXR1cm4gc2VuZChKU0M6
OkFycmF5QnVmZmVyOjpjcmVhdGUoYmxvYi5zaXplKCksIDEpLCAwLCAwKTsKKworICAgIG1fcGVu
ZGluZ01lc3NhZ2VzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPFBlbmRpbmdNZXNzYWdlPihtX2Rv
Y3VtZW50LmdldCgpLCBibG9iLCBbdGhpc10geworICAgICAgICB3aGlsZSAoIW1fcGVuZGluZ01l
c3NhZ2VzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byYgbWVzc2FnZSA9IG1fcGVuZGlu
Z01lc3NhZ2VzLmZpcnN0KCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS0+dHlwZSgp
KSB7CisgICAgICAgICAgICBjYXNlIFBlbmRpbmdNZXNzYWdlOjpUeXBlOjpUZXh0OgorICAgICAg
ICAgICAgICAgIHNlbmRNZXNzYWdlKE1lc3NhZ2VzOjpOZXR3b3JrU29ja2V0Q2hhbm5lbDo6U2Vu
ZFN0cmluZyB7IG1lc3NhZ2UtPnRleHRNZXNzYWdlKCkgfSwgbWVzc2FnZS0+dGV4dE1lc3NhZ2Uo
KS5zaXplSW5CeXRlcygpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgUGVuZGluZ01lc3NhZ2U6OlR5cGU6OkJpbmFyeTogeworICAgICAgICAgICAgICAgIGNvbnN0
IGF1dG8mIGJpbmFyeURhdGEgPSBtZXNzYWdlLT5iaW5hcnlEYXRhKCk7CisgICAgICAgICAgICAg
ICAgc2VuZE1lc3NhZ2UoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVsOjpTZW5kRGF0YSB7
IElQQzo6RGF0YVJlZmVyZW5jZSB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJp
bmFyeURhdGEuZGF0YSgpKSwgYmluYXJ5RGF0YS5zaXplKCkgfSB9LCBiaW5hcnlEYXRhLnNpemUo
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBj
YXNlIFBlbmRpbmdNZXNzYWdlOjpUeXBlOjpCbG9iOiB7CisgICAgICAgICAgICAgICAgYXV0byYg
bG9hZGVyID0gbWVzc2FnZS0+YmxvYkxvYWRlcigpOworICAgICAgICAgICAgICAgIGlmIChsb2Fk
ZXIuaXNMb2FkaW5nKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg
ICAgICAgIGlmIChjb25zdCBhdXRvJiByZXN1bHQgPSBsb2FkZXIucmVzdWx0KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byBieXRlTGVuZ3RoID0gcmVzdWx0LT5ieXRlTGVuZ3RoKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChpbmNyZWFzZUJ1ZmZlcmVkQW1vdW50KGJ5dGVMZW5ndGgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoTWVzc2FnZXM6Ok5ldHdvcmtT
b2NrZXRDaGFubmVsOjpTZW5kRGF0YSB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHJlc3VsdC0+ZGF0YSgpKSwgYnl0ZUxlbmd0aCB9IH0sIGJ5
dGVMZW5ndGgpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXV0byBlcnJvckNvZGUgPSBs
b2FkZXIuZXJyb3JDb2RlKCkpCisgICAgICAgICAgICAgICAgICAgIGZhaWwobWFrZVN0cmluZygi
RmFpbGVkIHRvIGxvYWQgQmxvYjogZXJyb3IgY29kZSA9ICIsIGVycm9yQ29kZS52YWx1ZSgpKSk7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgbV9wZW5kaW5nTWVzc2FnZXMucmVtb3ZlRmlyc3QoKTsKKyAg
ICAgICAgfQorICAgIH0pKTsKKyAgICByZXR1cm4gU2VuZFN1Y2Nlc3M7CiB9CiAKIHVuc2lnbmVk
IFdlYlNvY2tldENoYW5uZWw6OmJ1ZmZlcmVkQW1vdW50KCkgY29uc3QKQEAgLTE0OSw3ICszMDUs
MTEgQEAgdm9pZCBXZWJTb2NrZXRDaGFubmVsOjpjbG9zZShpbnQgY29kZSwgY29uc3QgU3RyaW5n
JiByZWFzb24pCiAKIHZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6ZmFpbChjb25zdCBTdHJpbmcmIHJl
YXNvbikKIHsKLSAgICBNZXNzYWdlU2VuZGVyOjpzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrU29ja2V0
Q2hhbm5lbDo6Q2xvc2UgeyAwLCByZWFzb24gfSk7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAg
ICBtX2NsaWVudC0+ZGlkUmVjZWl2ZU1lc3NhZ2VFcnJvcigpOworCisgICAgaWYgKCFtX2lzQ2xv
c2luZykKKyAgICAgICAgTWVzc2FnZVNlbmRlcjo6c2VuZChNZXNzYWdlczo6TmV0d29ya1NvY2tl
dENoYW5uZWw6OkNsb3NlIHsgMCwgcmVhc29uIH0pOwogfQogCiB2b2lkIFdlYlNvY2tldENoYW5u
ZWw6OmRpc2Nvbm5lY3QoKQpAQCAtMTU3LDYgKzMxNyw3IEBAIHZvaWQgV2ViU29ja2V0Q2hhbm5l
bDo6ZGlzY29ubmVjdCgpCiAgICAgbV9jbGllbnQgPSBudWxscHRyOwogICAgIG1fZG9jdW1lbnQg
PSBudWxscHRyOwogICAgIG1fcGVuZGluZ1Rhc2tzLmNsZWFyKCk7CisgICAgbV9wZW5kaW5nTWVz
c2FnZXMuY2xlYXIoKTsKIAogICAgIE1lc3NhZ2VTZW5kZXI6OnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtTb2NrZXRDaGFubmVsOjpDbG9zZSB7IDAsIHsgfSB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuaAppbmRleCAxYjRhNTUy
ODM1YS4uZWE5NWI3M2RiOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9O
ZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
TmV0d29yay9XZWJTb2NrZXRDaGFubmVsLmgKQEAgLTQxLDYgKzQxLDggQEAgY2xhc3MgRGF0YVJl
ZmVyZW5jZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIFBlbmRpbmdNZXNzYWdlOwor
CiBjbGFzcyBXZWJTb2NrZXRDaGFubmVsIDogcHVibGljIElQQzo6TWVzc2FnZVNlbmRlciwgcHVi
bGljIElQQzo6TWVzc2FnZVJlY2VpdmVyLCBwdWJsaWMgV2ViQ29yZTo6VGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWwsIHB1YmxpYyBSZWZDb3VudGVkPFdlYlNvY2tldENoYW5uZWw+LCBwdWJsaWMg
SWRlbnRpZmllZDxXZWJTb2NrZXRDaGFubmVsPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxX
ZWJTb2NrZXRDaGFubmVsPiBjcmVhdGUoV2ViQ29yZTo6RG9jdW1lbnQmLCBXZWJDb3JlOjpXZWJT
b2NrZXRDaGFubmVsQ2xpZW50Jik7CkBAIC04Myw2ICs4NSw5IEBAIHByaXZhdGU6CiAgICAgSVBD
OjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IGZpbmFsOwogICAg
IHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QgZmluYWw7CiAKKyAg
ICBib29sIGluY3JlYXNlQnVmZmVyZWRBbW91bnQoc2l6ZV90KTsKKyAgICB2b2lkIGRlY3JlYXNl
QnVmZmVyZWRBbW91bnQoc2l6ZV90KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNl
bmRNZXNzYWdlKFQmJiwgc2l6ZV90IGJ5dGVMZW5ndGgpOwogICAgIHZvaWQgZW5xdWV1ZVRhc2so
RnVuY3Rpb248dm9pZCgpPiYmKTsKIAogICAgIFdlYWtQdHI8V2ViQ29yZTo6RG9jdW1lbnQ+IG1f
ZG9jdW1lbnQ7CkBAIC05Miw2ICs5Nyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzQ2xvc2lu
ZyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzU3VzcGVuZGVkIHsgZmFsc2UgfTsKICAgICBEZXF1
ZTxGdW5jdGlvbjx2b2lkKCk+PiBtX3BlbmRpbmdUYXNrczsKKyAgICBEZXF1ZTxzdGQ6OnVuaXF1
ZV9wdHI8UGVuZGluZ01lc3NhZ2U+PiBtX3BlbmRpbmdNZXNzYWdlczsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373031</attachid>
            <date>2019-06-27 06:51:22 -0700</date>
            <delta_ts>2019-06-28 00:55:54 -0700</delta_ts>
            <desc>Try to fix apple builds</desc>
            <filename>wk2-websockets-blobs.diff</filename>
            <type>text/plain</type>
            <size>18371</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjZjA0MDAyYzNhMy4uMWM5MGQxMzQxYmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxOS0wNi0yNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgV2ViU29ja2V0czogYWRkIHN1cHBvcnQgZm9yIHNlbmRpbmcg
YmxvYiBtZXNzYWdlcyB3aGVuIHVzaW5nIHdlYiBzb2NrZXRzIHBsYXRmb3JtIEFQSXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OTE4OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZTogQWRkIG1pc3NpbmcgaGVhZGVycy4KKwogMjAxOS0wNi0yNyAgQ2FybG9zIEdhcmNpYSBDYW1w
b3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1NPVVBdIFVzZSBsaWJzb3VwIFdl
YlNvY2tldHMgQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIv
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBhODFkODJhYjhkZi4uMDE3YzkxMjll
ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtNTE1LDcgKzUxNSw5IEBAIHNldChXZWJDb3JlX1BS
SVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBmaWxlYXBpL0Jsb2JMaW5lRW5kaW5ncy5oCiAg
ICAgZmlsZWFwaS9CbG9iUHJvcGVydHlCYWcuaAogICAgIGZpbGVhcGkvRmlsZS5oCisgICAgZmls
ZWFwaS9GaWxlRXJyb3IuaAogICAgIGZpbGVhcGkvRmlsZUxpc3QuaAorICAgIGZpbGVhcGkvRmls
ZVJlYWRlckxvYWRlci5oCiAgICAgZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyQ2xpZW50LmgKIAog
ICAgIGhpc3RvcnkvQmFja0ZvcndhcmRDbGllbnQuaApAQCAtMTE2OCw2ICsxMTcwLDcgQEAgc2V0
KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL25ldHdvcmsv
QmxvYlBhcnQuaAogICAgIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmgKICAgICBwbGF0
Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuaAorICAgIHBsYXRmb3JtL25ldHdvcmsvQmxv
YlJlc291cmNlSGFuZGxlLmgKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0NhY2hlVmFsaWRhdGlvbi5o
CiAgICAgcGxhdGZvcm0vbmV0d29yay9DZXJ0aWZpY2F0ZUluZm9CYXNlLmgKICAgICBwbGF0Zm9y
bS9uZXR3b3JrL0Nvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5LmgKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhZTQ4MDJlZmE1
Yi4uNWM4NDljNzU4YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTg1NywxMiArODU3LDEyIEBACiAJCTJFNDM0NjUxMEY1NDZB
ODIwMEIwRjFCQSAvKiBXb3JrZXJPYmplY3RQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU0MzQ2M0YwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtl
ck9iamVjdFByb3h5LmggKi87IH07CiAJCTJFNDM0NjUzMEY1NDZBODIwMEIwRjFCQSAvKiBXb3Jr
ZXJSdW5Mb29wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyRTQzNDY0MTBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyUnVuTG9vcC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJFNDM0NjU1MEY1NDZBODIw
MEIwRjFCQSAvKiBXb3JrZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJFNDM0NjQzMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJUaHJlYWQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyRTc1
ODQxRTEyNzc5QURBMDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU3NTg0MUIxMjc3OUFEQTAwNjI2MjhC
IC8qIEZpbGVSZWFkZXJMb2FkZXIuaCAqLzsgfTsKKwkJMkU3NTg0MUUxMjc3OUFEQTAwNjI2MjhC
IC8qIEZpbGVSZWFkZXJMb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJFNzU4NDFCMTI3NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTt9OwogCQkyRTc1
ODQxRjEyNzc5QURBMDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlckNsaWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU3NTg0MUMxMjc3OUFEQTAw
NjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRTk0RjQzQzExOTIwN0RBMDBCN0Y3NUQgLyog
SlNGaWxlUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRTk0RjQzQTExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmggKi87IH07CiAJ
CTJFOUI1RDhGMUI2NkE5NEUwMDhDNkEyNCAvKiBXaGVlbEV2ZW50RGVsdGFGaWx0ZXJNYWMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOUI1RDhFMUI2
NkE5NEUwMDhDNkEyNCAvKiBXaGVlbEV2ZW50RGVsdGFGaWx0ZXJNYWMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRUE3NjgwNDBGRTcxMjY0MDBB
QjlDOEEgLyogV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUE3NjgwMzBGRTcxMjY0MDBBQjlDOEEgLyogV29y
a2VyU2NyaXB0TG9hZGVyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJMkVCNEJDRDMxMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJj
ZUhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkVCNEJDRDExMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5oICovOyB9Owor
CQkyRUI0QkNEMzEyMUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUI0QkNEMTEyMUYwM0Uz
MDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkVCNzY3NTcxREExOUJERjAwM0UyM0I1IC8qIElu
cHV0RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJFQjc2NzU0MURBMTlCNjcwMDNFMjNCNSAvKiBJbnB1dEV2ZW50LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkVCQkMzRDgxQjY1OTg4MzAwRjUy
NTNEIC8qIFdoZWVsRXZlbnREZWx0YUZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkVCQkMzRDcxQjY1OTg4MzAwRjUyNTNEIC8qIFdoZWVsRXZl
bnREZWx0YUZpbHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTJFQ0RCQUQxMjFEODkwMzQwMEYwMEVDRCAvKiBVbmRvTWFuYWdlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVDREJBQ0UyMUQ4OTAz
NDAwRjAwRUNEIC8qIFVuZG9NYW5hZ2VyLmggKi87IH07CkBAIC0yODA0LDcgKzI4MDQsNyBAQAog
CQk5NzZENkM3QzEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYkJ1aWxkZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkQ2QzVEMTIyQjhBM0QwMDFGRDFG
NyAvKiBCbG9iQnVpbGRlci5oICovOyB9OwogCQk5NzZENkM3RjEyMkI4QTNEMDAxRkQxRjcgLyog
QmxvYlVSTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTc2RDZDNjAxMjJCOEEzRDAwMUZEMUY3IC8qIEJsb2JVUkwuaCAqLzsgfTsKIAkJOTc2RDZDODEx
MjJCOEEzRDAwMUZEMUY3IC8qIEZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3NkQ2QzYyMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJOTc2RDZDODMxMjJC
OEEzRDAwMUZEMUY3IC8qIEZpbGVFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTc2RDZDNjQxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVFcnJvci5o
ICovOyB9OworCQk5NzZENkM4MzEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZUVycm9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM2NDEyMkI4QTNE
MDAxRkQxRjcgLyogRmlsZUVycm9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJOTc2RDZDODYxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVMaXN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM2NzEy
MkI4QTNEMDAxRkQxRjcgLyogRmlsZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk5NzZENkM4OTEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVJl
YWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc2
RDZDNkExMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVSZWFkZXIuaCAqLzsgfTsKIAkJOTc2RDZDOTUx
MjJCOEEzRDAwMUZEMUY3IC8qIFRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkQ2Qzc2MTIyQjhBM0QwMDFGRDFG
NyAvKiBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmggKi87IH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDNjMzE1ZDRk
MDgxLi5iMWE1YWQyZDQzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxOS0wNi0yNyAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgV2Vi
U29ja2V0czogYWRkIHN1cHBvcnQgZm9yIHNlbmRpbmcgYmxvYiBtZXNzYWdlcyB3aGVuIHVzaW5n
IHdlYiBzb2NrZXRzIHBsYXRmb3JtIEFQSXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5OTE4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCBoZWxwZXIgcHJpdmF0ZSBjbGFzcyBCbG9iTG9hZGVyIHRo
YXQgdXNlcyBGaWxlUmVhZGVyTG9hZGVyIHRvIGxvYWQgdGhlIGJsb2JzLiBTaW5jZSBibG9iIGxv
YWRzIGFyZQorICAgICAgICBhc3luY2hyb25vdXMsIHRoZSBtZXNzYWdlcyBhcmUgcXVldWVkIHVz
aW5nIGFub3RoZXIgaGVscGVyIGludGVybmFsIGNsYXNzIFBlbmRpbmdNZXNzYWdlLgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJTb2NrZXRDaGFubmVsOjppbmNyZWFzZUJ1ZmZlcmVkQW1vdW50KTogSW5jcmVh
c2UgdGhlIGJ1ZmZlcmVkIGFtb3VudCBjaGVja2luZyB3ZSBkb24ndCBvdmVybG9mdy4KKyAgICAg
ICAgKFdlYktpdDo6V2ViU29ja2V0Q2hhbm5lbDo6ZGVjcmVhc2VCdWZmZXJlZEFtb3VudCk6IERl
Y3JlYXNlIHRoZSBidWZmZXJlZCBhbW91bnQuCisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldENo
YW5uZWw6OnNlbmRNZXNzYWdlKTogSGVscGVyIGNsYXNzIHRvIHNlbmQgbWVzc2FnZSB0byB0aGUg
bmV0d29yayBwcm9jZXNzIGFuZCBkZWNyZWFzZSB0aGUKKyAgICAgICAgYnVmZmVyZWQgYW1vdW50
IHdoZW4gZG9uZS4KKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0Q2hhbm5lbDo6c2VuZCk6IFF1
ZXVlIHRoZSBtZXNzYWdlIGluIHBlbmRpbmcgcXVldWUgaWYgdGhlcmUgYXJlIHBlbmRpbmcgbWVz
c2FnZXMgaW4gdGhlIHF1ZXVlCisgICAgICAgIGZvciB0ZXh0IGFuZCBiaW5hcnkgbWVzc2FnZXMu
IEZvciBibG9icywgYWx3YXlzIHF1ZXVlIHRoZSBtZXNzYWdlIHVubGVzcyBpdCdzIGFuIGVtcHR5
IGJsb2IgdGhhdCB3ZSBjYW4gaGFuZGxlCisgICAgICAgIGFzIGVtcHR5IGJpbmFyeSBkYXRhIGRp
cmVjdGx5LgorICAgICAgICAoV2ViS2l0OjpQZW5kaW5nTWVzc2FnZTo6UGVuZGluZ01lc3NhZ2Up
OiBIZWxwZXIgY2xhc3MgdG8gcXVldWUgbWVzc2FnZSByZXF1ZXN0cy4KKyAgICAgICAgKFdlYktp
dDo6UGVuZGluZ01lc3NhZ2U6OnR5cGUgY29uc3QpOiBUeXBlIG9mIG1lc3NhZ2U6IFRleHQsIEJp
bmFyeSwgQmxvYi4KKyAgICAgICAgKFdlYktpdDo6UGVuZGluZ01lc3NhZ2U6OnRleHRNZXNzYWdl
IGNvbnN0KTogVGhlIHRleHQgbWVzc2FnZS4KKyAgICAgICAgKFdlYktpdDo6UGVuZGluZ01lc3Nh
Z2U6OmJpbmFyeURhdGEgY29uc3QpOiBUaGUgYmluYXJ5IGRhdGEuCisgICAgICAgIChXZWJLaXQ6
OlBlbmRpbmdNZXNzYWdlOjpibG9iTG9hZGVyIGNvbnN0KTogVGhlIGJsb2IgbG9hZGVyLgorICAg
ICAgICAoV2ViS2l0OjpXZWJTb2NrZXRDaGFubmVsOjpmYWlsKTogTm90aWZ5IHRoZSBjbGllbnQg
YWJvdXQgdGhlIGVycm9yIHRvIGVuc3VyZSBvbmNsb3NlIGlzIGVtaXR0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlNvY2tldENoYW5uZWw6OmRpc2Nvbm5lY3QpOiBDbGVhciB0aGUgcGVuZGluZyBt
ZXNzYWdlcyBxdWV1ZS4KKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hh
bm5lbC5oOgorCiAyMDE5LTA2LTI3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KIAogICAgICAgICBbU09VUF0gV2ViU29ja2V0czogaGFuZGxlIFRMUyBjZXJ0aWZp
Y2F0ZSBhbmQgZXJyb3JzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0
d29yay9XZWJTb2NrZXRDaGFubmVsLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3
b3JrL1dlYlNvY2tldENoYW5uZWwuY3BwCmluZGV4IDcyZjdkOWM2MGYyLi4wZmJmYjllMzk1YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hh
bm5lbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0
Q2hhbm5lbC5jcHAKQEAgLTMyLDExICszMiwxNSBAQAogI2luY2x1ZGUgIk5ldHdvcmtTb2NrZXRD
aGFubmVsTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNp
bmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9CbG9iLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVJlYWRlckxvYWRl
ci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVJlYWRlckxvYWRlckNsaWVudC5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dlYlNvY2tl
dENoYW5uZWwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dlYlNvY2tldENoYW5uZWxDbGllbnQuaD4K
ICNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+CisjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1l
dGljLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC05Miw0MyArOTYsMTk1IEBAIFdlYlNv
Y2tldENoYW5uZWw6OkNvbm5lY3RTdGF0dXMgV2ViU29ja2V0Q2hhbm5lbDo6Y29ubmVjdChjb25z
dCBVUkwmIHVybCwgY29uc3QKICAgICByZXR1cm4gQ29ubmVjdFN0YXR1czo6T0s7CiB9CiAKLVdl
YlNvY2tldENoYW5uZWw6OlNlbmRSZXN1bHQgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZChjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCitib29sIFdlYlNvY2tldENoYW5uZWw6OmluY3JlYXNlQnVmZmVyZWRB
bW91bnQoc2l6ZV90IGJ5dGVMZW5ndGgpCiB7Ci0gICAgYXV0byBieXRlTGVuZ3RoID0gbWVzc2Fn
ZS5zaXplSW5CeXRlcygpOwotICAgIG1fYnVmZmVyZWRBbW91bnQgKz0gYnl0ZUxlbmd0aDsKKyAg
ICBpZiAoIWJ5dGVMZW5ndGgpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgQ2hlY2tlZDxz
aXplX3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkTmV3QnVmZmVyZWRBbW91bnQgPSBtX2J1ZmZl
cmVkQW1vdW50OworICAgIGNoZWNrZWROZXdCdWZmZXJlZEFtb3VudCArPSBieXRlTGVuZ3RoOwor
ICAgIGlmIChVTkxJS0VMWShjaGVja2VkTmV3QnVmZmVyZWRBbW91bnQuaGFzT3ZlcmZsb3dlZCgp
KSkgeworICAgICAgICBmYWlsKCJGYWlsZWQgdG8gc2VuZCBXZWJTb2NrZXQgZnJhbWU6IGJ1ZmZl
ciBoYXMgbm8gbW9yZSBzcGFjZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgbV9idWZmZXJlZEFtb3VudCA9IGNoZWNrZWROZXdCdWZmZXJlZEFtb3VudC51bnNhZmVHZXQo
KTsKICAgICBpZiAobV9jbGllbnQpCiAgICAgICAgIG1fY2xpZW50LT5kaWRVcGRhdGVCdWZmZXJl
ZEFtb3VudChtX2J1ZmZlcmVkQW1vdW50KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAordm9pZCBX
ZWJTb2NrZXRDaGFubmVsOjpkZWNyZWFzZUJ1ZmZlcmVkQW1vdW50KHNpemVfdCBieXRlTGVuZ3Ro
KQoreworICAgIGlmICghYnl0ZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJU
KG1fYnVmZmVyZWRBbW91bnQgPj0gYnl0ZUxlbmd0aCk7CisgICAgbV9idWZmZXJlZEFtb3VudCAt
PSBieXRlTGVuZ3RoOworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZFVw
ZGF0ZUJ1ZmZlcmVkQW1vdW50KG1fYnVmZmVyZWRBbW91bnQpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiB2b2lkIFdlYlNvY2tldENoYW5uZWw6OnNlbmRNZXNzYWdlKFQmJiBtZXNzYWdlLCBz
aXplX3QgYnl0ZUxlbmd0aCkKK3sKICAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+IGNvbXBs
ZXRpb25IYW5kbGVyID0gW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgYnl0
ZUxlbmd0aF0gewotICAgICAgICBBU1NFUlQobV9idWZmZXJlZEFtb3VudCA+PSBieXRlTGVuZ3Ro
KTsKLSAgICAgICAgbV9idWZmZXJlZEFtb3VudCAtPSBieXRlTGVuZ3RoOwotICAgICAgICBpZiAo
bV9jbGllbnQpCi0gICAgICAgICAgICBtX2NsaWVudC0+ZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQo
bV9idWZmZXJlZEFtb3VudCk7CisgICAgICAgIGRlY3JlYXNlQnVmZmVyZWRBbW91bnQoYnl0ZUxl
bmd0aCk7CiAgICAgfTsKLSAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtT
b2NrZXRDaGFubmVsOjpTZW5kU3RyaW5nIHsgbWVzc2FnZSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CisgICAgc2VuZFdpdGhBc3luY1JlcGx5KFdURk1vdmUobWVzc2FnZSksIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKworV2ViU29ja2V0Q2hhbm5lbDo6U2VuZFJlc3Vs
dCBXZWJTb2NrZXRDaGFubmVsOjpzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBh
dXRvIGJ5dGVMZW5ndGggPSBtZXNzYWdlLnNpemVJbkJ5dGVzKCk7CisgICAgaWYgKCFpbmNyZWFz
ZUJ1ZmZlcmVkQW1vdW50KGJ5dGVMZW5ndGgpKQorICAgICAgICByZXR1cm4gU2VuZEZhaWw7CisK
KyAgICBpZiAobV9wZW5kaW5nTWVzc2FnZXMuaXNFbXB0eSgpKQorICAgICAgICBzZW5kTWVzc2Fn
ZShNZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6OlNlbmRTdHJpbmcgeyBtZXNzYWdlIH0s
IGJ5dGVMZW5ndGgpOworICAgIGVsc2UKKyAgICAgICAgbV9wZW5kaW5nTWVzc2FnZXMuYXBwZW5k
KHN0ZDo6bWFrZV91bmlxdWU8UGVuZGluZ01lc3NhZ2U+KG1lc3NhZ2UpKTsKKwogICAgIHJldHVy
biBTZW5kU3VjY2VzczsKIH0KIAogV2ViU29ja2V0Q2hhbm5lbDo6U2VuZFJlc3VsdCBXZWJTb2Nr
ZXRDaGFubmVsOjpzZW5kKGNvbnN0IEpTQzo6QXJyYXlCdWZmZXImIGJpbmFyeURhdGEsIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCiB7Ci0gICAgbV9idWZmZXJlZEFt
b3VudCArPSBieXRlTGVuZ3RoOwotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQt
PmRpZFVwZGF0ZUJ1ZmZlcmVkQW1vdW50KG1fYnVmZmVyZWRBbW91bnQpOworICAgIGlmICghaW5j
cmVhc2VCdWZmZXJlZEFtb3VudChieXRlTGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIFNlbmRGYWls
OworCisgICAgaWYgKG1fcGVuZGluZ01lc3NhZ2VzLmlzRW1wdHkoKSkKKyAgICAgICAgc2VuZE1l
c3NhZ2UoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVsOjpTZW5kRGF0YSB7IElQQzo6RGF0
YVJlZmVyZW5jZSB7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihiaW5hcnlEYXRhLmRhdGEo
KSkgKyBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoIH0gfSwgYnl0ZUxlbmd0aCk7CisgICAgZWxzZQor
ICAgICAgICBtX3BlbmRpbmdNZXNzYWdlcy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxQZW5kaW5n
TWVzc2FnZT4oYmluYXJ5RGF0YSwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpOwogCi0gICAgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiBjb21wbGV0aW9uSGFuZGxlciA9IFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGJ5dGVMZW5ndGhdIHsKLSAgICAgICAgQVNTRVJUKG1f
YnVmZmVyZWRBbW91bnQgPj0gYnl0ZUxlbmd0aCk7Ci0gICAgICAgIG1fYnVmZmVyZWRBbW91bnQg
LT0gYnl0ZUxlbmd0aDsKLSAgICAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICAgICAgbV9jbGll
bnQtPmRpZFVwZGF0ZUJ1ZmZlcmVkQW1vdW50KG1fYnVmZmVyZWRBbW91bnQpOwotICAgIH07Ci0g
ICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrU29ja2V0Q2hhbm5lbDo6U2Vu
ZERhdGEgeyBJUEM6OkRhdGFSZWZlcmVuY2UgeyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4o
YmluYXJ5RGF0YS5kYXRhKCkpICsgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCB9IH0sIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICByZXR1cm4gU2VuZFN1Y2Nlc3M7CiB9CiAKLVdlYlNv
Y2tldENoYW5uZWw6OlNlbmRSZXN1bHQgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZChXZWJDb3JlOjpC
bG9iJikKK2NsYXNzIEJsb2JMb2FkZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6RmlsZVJlYWRl
ckxvYWRlckNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgQmxvYkxvYWRlcihXZWJDb3JlOjpEb2N1bWVudCogZG9jdW1lbnQsIEJsb2ImIGJsb2IsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgOiBt
X2xvYWRlcihzdGQ6Om1ha2VfdW5pcXVlPEZpbGVSZWFkZXJMb2FkZXI+KEZpbGVSZWFkZXJMb2Fk
ZXI6OlJlYWRBc0FycmF5QnVmZmVyLCB0aGlzKSkKKyAgICAgICAgLCBtX2NvbXBsZXRpb25IYW5k
bGVyKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKQorICAgIHsKKyAgICAgICAgbV9sb2FkZXIt
PnN0YXJ0KGRvY3VtZW50LCBibG9iKTsKKyAgICB9CisKKyAgICB+QmxvYkxvYWRlcigpCisgICAg
eworICAgICAgICBpZiAobV9sb2FkZXIpCisgICAgICAgICAgICBtX2xvYWRlci0+Y2FuY2VsKCk7
CisgICAgfQorCisgICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdCB7IHJldHVybiAhIW1fbG9hZGVy
OyB9CisgICAgY29uc3QgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+JiByZXN1bHQoKSBjb25zdCB7
IHJldHVybiBtX2J1ZmZlcjsgfQorICAgIE9wdGlvbmFsPGludD4gZXJyb3JDb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9lcnJvckNvZGU7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGRpZFN0YXJ0TG9h
ZGluZygpIGZpbmFsIHsgfQorICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoKSBmaW5hbCB7IH0KKwor
ICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZygpIGZpbmFsCisgICAgeworICAgICAgICBtX2J1ZmZl
ciA9IG1fbG9hZGVyLT5hcnJheUJ1ZmZlclJlc3VsdCgpOworICAgICAgICBjb21wbGV0ZSgpOwor
ICAgIH0KKworICAgIHZvaWQgZGlkRmFpbChpbnQgZXJyb3JDb2RlKSBmaW5hbAorICAgIHsKKyAg
ICAgICAgbV9lcnJvckNvZGUgPSBlcnJvckNvZGU7CisgICAgICAgIGNvbXBsZXRlKCk7CisgICAg
fQorCisgICAgdm9pZCBjb21wbGV0ZSgpCisgICAgeworICAgICAgICBtX2xvYWRlciA9IG51bGxw
dHI7CisgICAgICAgIG1fY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB9CisKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6RmlsZVJlYWRlckxvYWRlcj4gbV9sb2FkZXI7CisgICAgUmVmUHRy
PEpTQzo6QXJyYXlCdWZmZXI+IG1fYnVmZmVyOworICAgIE9wdGlvbmFsPGludD4gbV9lcnJvckNv
ZGU7CisgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiBtX2NvbXBsZXRpb25IYW5kbGVyOwor
fTsKKworY2xhc3MgUGVuZGluZ01lc3NhZ2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIGVudW0gY2xhc3MgVHlwZSB7IFRleHQsIEJpbmFyeSwgQmxvYiB9Owor
CisgICAgZXhwbGljaXQgUGVuZGluZ01lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorICAg
ICAgICA6IG1fdHlwZShUeXBlOjpUZXh0KQorICAgICAgICAsIG1fdGV4dE1lc3NhZ2UobWVzc2Fn
ZSkKKyAgICB7CisgICAgfQorCisgICAgUGVuZGluZ01lc3NhZ2UoY29uc3QgSlNDOjpBcnJheUJ1
ZmZlciYgYmluYXJ5RGF0YSwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0
aCkKKyAgICAgICAgOiBtX3R5cGUoVHlwZTo6QmluYXJ5KQorICAgICAgICAsIG1fYmluYXJ5RGF0
YShXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90
Kj4oYmluYXJ5RGF0YS5kYXRhKCkpICsgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpCisgICAgewor
ICAgIH0KKworICAgIFBlbmRpbmdNZXNzYWdlKFdlYkNvcmU6OkRvY3VtZW50KiBkb2N1bWVudCwg
QmxvYiYgYmxvYiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQorICAgICAgICA6IG1fdHlwZShUeXBlOjpCbG9iKQorICAgICAgICAsIG1fYmxvYkxvYWRlcihz
dGQ6Om1ha2VfdW5pcXVlPEJsb2JMb2FkZXI+KGRvY3VtZW50LCBibG9iLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSkpCisgICAgeworICAgIH0KKworICAgIH5QZW5kaW5nTWVzc2FnZSgpID0g
ZGVmYXVsdDsKKworICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAg
IGNvbnN0IFN0cmluZyYgdGV4dE1lc3NhZ2UoKSBjb25zdCB7IEFTU0VSVChtX3R5cGUgPT0gVHlw
ZTo6VGV4dCk7IHJldHVybiBtX3RleHRNZXNzYWdlOyB9CisgICAgY29uc3QgV2ViQ29yZTo6U2hh
cmVkQnVmZmVyJiBiaW5hcnlEYXRhKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IFR5cGU6OkJp
bmFyeSk7IHJldHVybiAqbV9iaW5hcnlEYXRhOyB9CisgICAgY29uc3QgQmxvYkxvYWRlciYgYmxv
YkxvYWRlcigpIGNvbnN0IHsgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpCbG9iKTsgcmV0dXJuICpt
X2Jsb2JMb2FkZXI7IH0KKworcHJpdmF0ZToKKyAgICBUeXBlIG1fdHlwZTsKKyAgICBTdHJpbmcg
bV90ZXh0TWVzc2FnZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBtX2JpbmFy
eURhdGE7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJsb2JMb2FkZXI+IG1fYmxvYkxvYWRlcjsKK307
CisKK1dlYlNvY2tldENoYW5uZWw6OlNlbmRSZXN1bHQgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZChX
ZWJDb3JlOjpCbG9iJiBibG9iKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IFNlbmRGYWlsOworICAgIC8vIEF2b2lkIHRoZSBCbG9iIHF1ZXVlIGFuZCBsb2FkaW5nIGZvciBl
bXB0eSBibG9icy4KKyAgICBpZiAoIWJsb2Iuc2l6ZSgpKQorICAgICAgICByZXR1cm4gc2VuZChK
U0M6OkFycmF5QnVmZmVyOjpjcmVhdGUoYmxvYi5zaXplKCksIDEpLCAwLCAwKTsKKworICAgIG1f
cGVuZGluZ01lc3NhZ2VzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPFBlbmRpbmdNZXNzYWdlPiht
X2RvY3VtZW50LmdldCgpLCBibG9iLCBbdGhpc10geworICAgICAgICB3aGlsZSAoIW1fcGVuZGlu
Z01lc3NhZ2VzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byYgbWVzc2FnZSA9IG1fcGVu
ZGluZ01lc3NhZ2VzLmZpcnN0KCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS0+dHlw
ZSgpKSB7CisgICAgICAgICAgICBjYXNlIFBlbmRpbmdNZXNzYWdlOjpUeXBlOjpUZXh0OgorICAg
ICAgICAgICAgICAgIHNlbmRNZXNzYWdlKE1lc3NhZ2VzOjpOZXR3b3JrU29ja2V0Q2hhbm5lbDo6
U2VuZFN0cmluZyB7IG1lc3NhZ2UtPnRleHRNZXNzYWdlKCkgfSwgbWVzc2FnZS0+dGV4dE1lc3Nh
Z2UoKS5zaXplSW5CeXRlcygpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgUGVuZGluZ01lc3NhZ2U6OlR5cGU6OkJpbmFyeTogeworICAgICAgICAgICAgICAgIGNv
bnN0IGF1dG8mIGJpbmFyeURhdGEgPSBtZXNzYWdlLT5iaW5hcnlEYXRhKCk7CisgICAgICAgICAg
ICAgICAgc2VuZE1lc3NhZ2UoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVsOjpTZW5kRGF0
YSB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KGJpbmFyeURhdGEuZGF0YSgpKSwgYmluYXJ5RGF0YS5zaXplKCkgfSB9LCBiaW5hcnlEYXRhLnNp
emUoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBjYXNlIFBlbmRpbmdNZXNzYWdlOjpUeXBlOjpCbG9iOiB7CisgICAgICAgICAgICAgICAgYXV0
byYgbG9hZGVyID0gbWVzc2FnZS0+YmxvYkxvYWRlcigpOworICAgICAgICAgICAgICAgIGlmIChs
b2FkZXIuaXNMb2FkaW5nKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgICAgIGlmIChjb25zdCBhdXRvJiByZXN1bHQgPSBsb2FkZXIucmVzdWx0KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byBieXRlTGVuZ3RoID0gcmVzdWx0LT5ieXRlTGVuZ3RoKCk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmNyZWFzZUJ1ZmZlcmVkQW1vdW50KGJ5dGVMZW5n
dGgpKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoTWVzc2FnZXM6Ok5ldHdv
cmtTb2NrZXRDaGFubmVsOjpTZW5kRGF0YSB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHJlc3VsdC0+ZGF0YSgpKSwgYnl0ZUxlbmd0aCB9IH0s
IGJ5dGVMZW5ndGgpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXV0byBlcnJvckNvZGUg
PSBsb2FkZXIuZXJyb3JDb2RlKCkpCisgICAgICAgICAgICAgICAgICAgIGZhaWwobWFrZVN0cmlu
ZygiRmFpbGVkIHRvIGxvYWQgQmxvYjogZXJyb3IgY29kZSA9ICIsIGVycm9yQ29kZS52YWx1ZSgp
KSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgbV9wZW5kaW5nTWVzc2FnZXMucmVtb3ZlRmlyc3QoKTsK
KyAgICAgICAgfQorICAgIH0pKTsKKyAgICByZXR1cm4gU2VuZFN1Y2Nlc3M7CiB9CiAKIHVuc2ln
bmVkIFdlYlNvY2tldENoYW5uZWw6OmJ1ZmZlcmVkQW1vdW50KCkgY29uc3QKQEAgLTE0OSw3ICsz
MDUsMTEgQEAgdm9pZCBXZWJTb2NrZXRDaGFubmVsOjpjbG9zZShpbnQgY29kZSwgY29uc3QgU3Ry
aW5nJiByZWFzb24pCiAKIHZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6ZmFpbChjb25zdCBTdHJpbmcm
IHJlYXNvbikKIHsKLSAgICBNZXNzYWdlU2VuZGVyOjpzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrU29j
a2V0Q2hhbm5lbDo6Q2xvc2UgeyAwLCByZWFzb24gfSk7CisgICAgaWYgKG1fY2xpZW50KQorICAg
ICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZU1lc3NhZ2VFcnJvcigpOworCisgICAgaWYgKCFtX2lz
Q2xvc2luZykKKyAgICAgICAgTWVzc2FnZVNlbmRlcjo6c2VuZChNZXNzYWdlczo6TmV0d29ya1Nv
Y2tldENoYW5uZWw6OkNsb3NlIHsgMCwgcmVhc29uIH0pOwogfQogCiB2b2lkIFdlYlNvY2tldENo
YW5uZWw6OmRpc2Nvbm5lY3QoKQpAQCAtMTU3LDYgKzMxNyw3IEBAIHZvaWQgV2ViU29ja2V0Q2hh
bm5lbDo6ZGlzY29ubmVjdCgpCiAgICAgbV9jbGllbnQgPSBudWxscHRyOwogICAgIG1fZG9jdW1l
bnQgPSBudWxscHRyOwogICAgIG1fcGVuZGluZ1Rhc2tzLmNsZWFyKCk7CisgICAgbV9wZW5kaW5n
TWVzc2FnZXMuY2xlYXIoKTsKIAogICAgIE1lc3NhZ2VTZW5kZXI6OnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtTb2NrZXRDaGFubmVsOjpDbG9zZSB7IDAsIHsgfSB9KTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuaAppbmRleCAxYjRh
NTUyODM1YS4uZWE5NWI3M2RiOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVsLmgKQEAgLTQxLDYgKzQxLDggQEAgY2xhc3MgRGF0
YVJlZmVyZW5jZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIFBlbmRpbmdNZXNzYWdl
OworCiBjbGFzcyBXZWJTb2NrZXRDaGFubmVsIDogcHVibGljIElQQzo6TWVzc2FnZVNlbmRlciwg
cHVibGljIElQQzo6TWVzc2FnZVJlY2VpdmVyLCBwdWJsaWMgV2ViQ29yZTo6VGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWwsIHB1YmxpYyBSZWZDb3VudGVkPFdlYlNvY2tldENoYW5uZWw+LCBwdWJs
aWMgSWRlbnRpZmllZDxXZWJTb2NrZXRDaGFubmVsPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJl
ZjxXZWJTb2NrZXRDaGFubmVsPiBjcmVhdGUoV2ViQ29yZTo6RG9jdW1lbnQmLCBXZWJDb3JlOjpX
ZWJTb2NrZXRDaGFubmVsQ2xpZW50Jik7CkBAIC04Myw2ICs4NSw5IEBAIHByaXZhdGU6CiAgICAg
SVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IGZpbmFsOwog
ICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QgZmluYWw7CiAK
KyAgICBib29sIGluY3JlYXNlQnVmZmVyZWRBbW91bnQoc2l6ZV90KTsKKyAgICB2b2lkIGRlY3Jl
YXNlQnVmZmVyZWRBbW91bnQoc2l6ZV90KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lk
IHNlbmRNZXNzYWdlKFQmJiwgc2l6ZV90IGJ5dGVMZW5ndGgpOwogICAgIHZvaWQgZW5xdWV1ZVRh
c2soRnVuY3Rpb248dm9pZCgpPiYmKTsKIAogICAgIFdlYWtQdHI8V2ViQ29yZTo6RG9jdW1lbnQ+
IG1fZG9jdW1lbnQ7CkBAIC05Miw2ICs5Nyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzQ2xv
c2luZyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzU3VzcGVuZGVkIHsgZmFsc2UgfTsKICAgICBE
ZXF1ZTxGdW5jdGlvbjx2b2lkKCk+PiBtX3BlbmRpbmdUYXNrczsKKyAgICBEZXF1ZTxzdGQ6OnVu
aXF1ZV9wdHI8UGVuZGluZ01lc3NhZ2U+PiBtX3BlbmRpbmdNZXNzYWdlczsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373095</attachid>
            <date>2019-06-28 00:55:54 -0700</date>
            <delta_ts>2019-06-28 11:35:02 -0700</delta_ts>
            <desc>Try to fix apple builds</desc>
            <filename>wk2-websockets-blobs.diff</filename>
            <type>text/plain</type>
            <size>19718</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwZTliZDYzMzhkYi4uOGE5ZGUxMTUyMTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxOS0wNi0yNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgV2ViU29ja2V0czogYWRkIHN1cHBvcnQgZm9yIHNlbmRpbmcg
YmxvYiBtZXNzYWdlcyB3aGVuIHVzaW5nIHdlYiBzb2NrZXRzIHBsYXRmb3JtIEFQSXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OTE4OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZTogQWRkIG1pc3NpbmcgaGVhZGVycy4KKwogMjAxOS0wNi0yOCAgRnVqaWkgSGlyb25vcmkgIDxI
aXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAogICAgICAgICBbV2luXSB1bnJlc29sdmVkIGV4dGVy
bmFsIHN5bWJvbCAiSlNDOjpKU09iamVjdDo6ZGlkQmVjb21lUHJvdG90eXBlKHZvaWQpIiByZWZl
cmVuY2VkIGluIGZ1bmN0aW9uICJKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKC4uLikiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVy
cy5jbWFrZQppbmRleCBhODFkODJhYjhkZi4uMDE3YzkxMjllZjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFr
ZQpAQCAtNTE1LDcgKzUxNSw5IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURF
UlMKICAgICBmaWxlYXBpL0Jsb2JMaW5lRW5kaW5ncy5oCiAgICAgZmlsZWFwaS9CbG9iUHJvcGVy
dHlCYWcuaAogICAgIGZpbGVhcGkvRmlsZS5oCisgICAgZmlsZWFwaS9GaWxlRXJyb3IuaAogICAg
IGZpbGVhcGkvRmlsZUxpc3QuaAorICAgIGZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5oCiAgICAg
ZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyQ2xpZW50LmgKIAogICAgIGhpc3RvcnkvQmFja0Zvcndh
cmRDbGllbnQuaApAQCAtMTE2OCw2ICsxMTcwLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL25ldHdvcmsvQmxvYlBhcnQuaAogICAgIHBsYXRm
b3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmgKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdp
c3RyeUltcGwuaAorICAgIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmgKICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL0NhY2hlVmFsaWRhdGlvbi5oCiAgICAgcGxhdGZvcm0vbmV0d29y
ay9DZXJ0aWZpY2F0ZUluZm9CYXNlLmgKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0Nvb2tpZVJlcXVl
c3RIZWFkZXJGaWVsZFByb3h5LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhZTQ4MDJlZmE1Yi4uNWM4NDljNzU4YjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTg1NywxMiArODU3LDEyIEBACiAJCTJFNDM0NjUxMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJP
YmplY3RQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkU0MzQ2M0YwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlck9iamVjdFByb3h5LmggKi87IH07
CiAJCTJFNDM0NjUzMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJSdW5Mb29wLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTQzNDY0MTBGNTQ2QTgyMDBC
MEYxQkEgLyogV29ya2VyUnVuTG9vcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTJFNDM0NjU1MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJUaHJl
YWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNDM0
NjQzMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJUaHJlYWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyRTc1ODQxRTEyNzc5QURBMDA2MjYyOEIg
LyogRmlsZVJlYWRlckxvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkU3NTg0MUIxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXIu
aCAqLzsgfTsKKwkJMkU3NTg0MUUxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNzU4NDFC
MTI3NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTt9OwogCQkyRTc1ODQxRjEyNzc5QURBMDA2MjYyOEIg
LyogRmlsZVJlYWRlckxvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkU3NTg0MUMxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJM
b2FkZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkyRTk0RjQzQzExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTk0RjQzQTExOTIwN0RB
MDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmggKi87IH07CiAJCTJFOUI1RDhGMUI2NkE5NEUwMDhD
NkEyNCAvKiBXaGVlbEV2ZW50RGVsdGFGaWx0ZXJNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOUI1RDhFMUI2NkE5NEUwMDhDNkEyNCAvKiBXaGVl
bEV2ZW50RGVsdGFGaWx0ZXJNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkyRUE3NjgwNDBGRTcxMjY0MDBBQjlDOEEgLyogV29ya2VyU2NyaXB0
TG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRUE3NjgwMzBGRTcxMjY0MDBBQjlDOEEgLyogV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMkVC
NEJDRDMxMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVCNEJDRDExMjFGMDNFMzAwRUM0
ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5oICovOyB9OworCQkyRUI0QkNEMzEyMUYwM0UzMDBF
QzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRUI0QkNEMTEyMUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJlc291
cmNlSGFuZGxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMkVCNzY3NTcxREExOUJERjAwM0UyM0I1IC8qIElucHV0RXZlbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFQjc2NzU0MURBMTlCNjcwMDNF
MjNCNSAvKiBJbnB1dEV2ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMkVCQkMzRDgxQjY1OTg4MzAwRjUyNTNEIC8qIFdoZWVsRXZlbnREZWx0
YUZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkVCQkMzRDcxQjY1OTg4MzAwRjUyNTNEIC8qIFdoZWVsRXZlbnREZWx0YUZpbHRlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJFQ0RCQUQxMjFE
ODkwMzQwMEYwMEVDRCAvKiBVbmRvTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkVDREJBQ0UyMUQ4OTAzNDAwRjAwRUNEIC8qIFVuZG9NYW5h
Z2VyLmggKi87IH07CkBAIC0yODA0LDcgKzI4MDQsNyBAQAogCQk5NzZENkM3QzEyMkI4QTNEMDAx
RkQxRjcgLyogQmxvYkJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3NkQ2QzVEMTIyQjhBM0QwMDFGRDFGNyAvKiBCbG9iQnVpbGRlci5oICov
OyB9OwogCQk5NzZENkM3RjEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYlVSTC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc2RDZDNjAxMjJCOEEzRDAwMUZE
MUY3IC8qIEJsb2JVUkwuaCAqLzsgfTsKIAkJOTc2RDZDODExMjJCOEEzRDAwMUZEMUY3IC8qIEZp
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkQ2
QzYyMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJOTc2RDZDODMxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVF
cnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc2
RDZDNjQxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVFcnJvci5oICovOyB9OworCQk5NzZENkM4MzEy
MkI4QTNEMDAxRkQxRjcgLyogRmlsZUVycm9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM2NDEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZUVycm9y
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTc2
RDZDODYxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM2NzEyMkI4QTNEMDAxRkQxRjcgLyogRmls
ZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk5NzZENkM4OTEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVJlYWRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc2RDZDNkExMjJCOEEzRDAwMUZEMUY3
IC8qIEZpbGVSZWFkZXIuaCAqLzsgfTsKIAkJOTc2RDZDOTUxMjJCOEEzRDAwMUZEMUY3IC8qIFRo
cmVhZGFibGVCbG9iUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3NkQ2Qzc2MTIyQjhBM0QwMDFGRDFGNyAvKiBUaHJlYWRhYmxlQmxvYlJl
Z2lzdHJ5LmggKi87IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVS
ZWFkZXJMb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5o
CmluZGV4IDFmNzc3OGU4ODllLi43YTQyOGJlNTA1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9GaWxlUmVhZGVyTG9hZGVyLmgKQEAgLTYxLDExICs2MSwxMSBAQCBwdWJsaWM6CiAgICAgfTsK
IAogICAgIC8vIElmIGNsaWVudCBpcyBnaXZlbiwgZG8gdGhlIGxvYWRpbmcgYXN5bmNocm9ub3Vz
bHkuIE90aGVyd2lzZSwgbG9hZCBzeW5jaHJvbm91c2x5LgotICAgIEZpbGVSZWFkZXJMb2FkZXIo
UmVhZFR5cGUsIEZpbGVSZWFkZXJMb2FkZXJDbGllbnQqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBG
aWxlUmVhZGVyTG9hZGVyKFJlYWRUeXBlLCBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50Kik7CiAgICAg
fkZpbGVSZWFkZXJMb2FkZXIoKTsKIAotICAgIHZvaWQgc3RhcnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIEJsb2ImKTsKLSAgICB2b2lkIGNhbmNlbCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc3RhcnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEJsb2ImKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGNhbmNlbCgpOwogCiAgICAgLy8gVGhyZWFkYWJsZUxvYWRlckNsaWVudAogICAg
IHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmKSBvdmVycmlkZTsKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgIHZvaWQgZGlk
RmFpbChjb25zdCBSZXNvdXJjZUVycm9yJikgb3ZlcnJpZGU7CiAKICAgICBTdHJpbmcgc3RyaW5n
UmVzdWx0KCk7Ci0gICAgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyUmVzdWx0
KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+IGFy
cmF5QnVmZmVyUmVzdWx0KCkgY29uc3Q7CiAgICAgdW5zaWduZWQgYnl0ZXNMb2FkZWQoKSBjb25z
dCB7IHJldHVybiBtX2J5dGVzTG9hZGVkOyB9CiAgICAgdW5zaWduZWQgdG90YWxCeXRlcygpIGNv
bnN0IHsgcmV0dXJuIG1fdG90YWxCeXRlczsgfQogICAgIEZpbGVFcnJvcjo6RXJyb3JDb2RlIGVy
cm9yQ29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3JDb2RlOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDE0YWVi
M2Q4OWRkLi4zM2ExOTFhY2IyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxOS0wNi0y
NyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAg
V2ViU29ja2V0czogYWRkIHN1cHBvcnQgZm9yIHNlbmRpbmcgYmxvYiBtZXNzYWdlcyB3aGVuIHVz
aW5nIHdlYiBzb2NrZXRzIHBsYXRmb3JtIEFQSXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OTE4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBoZWxwZXIgcHJpdmF0ZSBjbGFzcyBCbG9iTG9hZGVy
IHRoYXQgdXNlcyBGaWxlUmVhZGVyTG9hZGVyIHRvIGxvYWQgdGhlIGJsb2JzLiBTaW5jZSBibG9i
IGxvYWRzIGFyZQorICAgICAgICBhc3luY2hyb25vdXMsIHRoZSBtZXNzYWdlcyBhcmUgcXVldWVk
IHVzaW5nIGFub3RoZXIgaGVscGVyIGludGVybmFsIGNsYXNzIFBlbmRpbmdNZXNzYWdlLgorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJTb2NrZXRDaGFubmVsOjppbmNyZWFzZUJ1ZmZlcmVkQW1vdW50KTogSW5j
cmVhc2UgdGhlIGJ1ZmZlcmVkIGFtb3VudCBjaGVja2luZyB3ZSBkb24ndCBvdmVybG9mdy4KKyAg
ICAgICAgKFdlYktpdDo6V2ViU29ja2V0Q2hhbm5lbDo6ZGVjcmVhc2VCdWZmZXJlZEFtb3VudCk6
IERlY3JlYXNlIHRoZSBidWZmZXJlZCBhbW91bnQuCisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tl
dENoYW5uZWw6OnNlbmRNZXNzYWdlKTogSGVscGVyIGNsYXNzIHRvIHNlbmQgbWVzc2FnZSB0byB0
aGUgbmV0d29yayBwcm9jZXNzIGFuZCBkZWNyZWFzZSB0aGUKKyAgICAgICAgYnVmZmVyZWQgYW1v
dW50IHdoZW4gZG9uZS4KKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0Q2hhbm5lbDo6c2VuZCk6
IFF1ZXVlIHRoZSBtZXNzYWdlIGluIHBlbmRpbmcgcXVldWUgaWYgdGhlcmUgYXJlIHBlbmRpbmcg
bWVzc2FnZXMgaW4gdGhlIHF1ZXVlCisgICAgICAgIGZvciB0ZXh0IGFuZCBiaW5hcnkgbWVzc2Fn
ZXMuIEZvciBibG9icywgYWx3YXlzIHF1ZXVlIHRoZSBtZXNzYWdlIHVubGVzcyBpdCdzIGFuIGVt
cHR5IGJsb2IgdGhhdCB3ZSBjYW4gaGFuZGxlCisgICAgICAgIGFzIGVtcHR5IGJpbmFyeSBkYXRh
IGRpcmVjdGx5LgorICAgICAgICAoV2ViS2l0OjpQZW5kaW5nTWVzc2FnZTo6UGVuZGluZ01lc3Nh
Z2UpOiBIZWxwZXIgY2xhc3MgdG8gcXVldWUgbWVzc2FnZSByZXF1ZXN0cy4KKyAgICAgICAgKFdl
YktpdDo6UGVuZGluZ01lc3NhZ2U6OnR5cGUgY29uc3QpOiBUeXBlIG9mIG1lc3NhZ2U6IFRleHQs
IEJpbmFyeSwgQmxvYi4KKyAgICAgICAgKFdlYktpdDo6UGVuZGluZ01lc3NhZ2U6OnRleHRNZXNz
YWdlIGNvbnN0KTogVGhlIHRleHQgbWVzc2FnZS4KKyAgICAgICAgKFdlYktpdDo6UGVuZGluZ01l
c3NhZ2U6OmJpbmFyeURhdGEgY29uc3QpOiBUaGUgYmluYXJ5IGRhdGEuCisgICAgICAgIChXZWJL
aXQ6OlBlbmRpbmdNZXNzYWdlOjpibG9iTG9hZGVyIGNvbnN0KTogVGhlIGJsb2IgbG9hZGVyLgor
ICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRDaGFubmVsOjpmYWlsKTogTm90aWZ5IHRoZSBjbGll
bnQgYWJvdXQgdGhlIGVycm9yIHRvIGVuc3VyZSBvbmNsb3NlIGlzIGVtaXR0ZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYlNvY2tldENoYW5uZWw6OmRpc2Nvbm5lY3QpOiBDbGVhciB0aGUgcGVuZGlu
ZyBtZXNzYWdlcyBxdWV1ZS4KKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0
Q2hhbm5lbC5oOgorCiAyMDE5LTA2LTI4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbU09VUF0gV2ViU29ja2V0czogcnVudGltZSBjcml0aWNh
bCB3YXJuaW5nIHdoZW4gY2xvc2luZyB0aGUgY29ubmVjdGlvbiBpbiBzb21lIGNhc2VzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVs
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwu
Y3BwCmluZGV4IDU2Y2I3Yjg5NDFkLi5kNDZiMzQ5YmZmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5jcHAKQEAgLTMyLDEx
ICszMiwxNSBAQAogI2luY2x1ZGUgIk5ldHdvcmtTb2NrZXRDaGFubmVsTWVzc2FnZXMuaCIKICNp
bmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9CbG9iLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVJlYWRlckxvYWRlci5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRmlsZVJlYWRlckxvYWRlckNsaWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVt
ZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dlYlNvY2tldENoYW5uZWwuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1dlYlNvY2tldENoYW5uZWxDbGllbnQuaD4KICNpbmNsdWRlIDxwYWwvU2Vzc2lv
bklELmg+CisjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCkBAIC05Miw0MyArOTYsMTk1IEBAIFdlYlNvY2tldENoYW5uZWw6OkNvbm5lY3RT
dGF0dXMgV2ViU29ja2V0Q2hhbm5lbDo6Y29ubmVjdChjb25zdCBVUkwmIHVybCwgY29uc3QKICAg
ICByZXR1cm4gQ29ubmVjdFN0YXR1czo6T0s7CiB9CiAKLVdlYlNvY2tldENoYW5uZWw6OlNlbmRS
ZXN1bHQgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCitib29s
IFdlYlNvY2tldENoYW5uZWw6OmluY3JlYXNlQnVmZmVyZWRBbW91bnQoc2l6ZV90IGJ5dGVMZW5n
dGgpCiB7Ci0gICAgYXV0byBieXRlTGVuZ3RoID0gbWVzc2FnZS5zaXplSW5CeXRlcygpOwotICAg
IG1fYnVmZmVyZWRBbW91bnQgKz0gYnl0ZUxlbmd0aDsKKyAgICBpZiAoIWJ5dGVMZW5ndGgpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93
PiBjaGVja2VkTmV3QnVmZmVyZWRBbW91bnQgPSBtX2J1ZmZlcmVkQW1vdW50OworICAgIGNoZWNr
ZWROZXdCdWZmZXJlZEFtb3VudCArPSBieXRlTGVuZ3RoOworICAgIGlmIChVTkxJS0VMWShjaGVj
a2VkTmV3QnVmZmVyZWRBbW91bnQuaGFzT3ZlcmZsb3dlZCgpKSkgeworICAgICAgICBmYWlsKCJG
YWlsZWQgdG8gc2VuZCBXZWJTb2NrZXQgZnJhbWU6IGJ1ZmZlciBoYXMgbm8gbW9yZSBzcGFjZSIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9idWZmZXJlZEFtb3VudCA9
IGNoZWNrZWROZXdCdWZmZXJlZEFtb3VudC51bnNhZmVHZXQoKTsKICAgICBpZiAobV9jbGllbnQp
CiAgICAgICAgIG1fY2xpZW50LT5kaWRVcGRhdGVCdWZmZXJlZEFtb3VudChtX2J1ZmZlcmVkQW1v
dW50KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAordm9pZCBXZWJTb2NrZXRDaGFubmVsOjpkZWNy
ZWFzZUJ1ZmZlcmVkQW1vdW50KHNpemVfdCBieXRlTGVuZ3RoKQoreworICAgIGlmICghYnl0ZUxl
bmd0aCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fYnVmZmVyZWRBbW91bnQgPj0g
Ynl0ZUxlbmd0aCk7CisgICAgbV9idWZmZXJlZEFtb3VudCAtPSBieXRlTGVuZ3RoOworICAgIGlm
IChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZFVwZGF0ZUJ1ZmZlcmVkQW1vdW50KG1f
YnVmZmVyZWRBbW91bnQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIFdlYlNvY2tl
dENoYW5uZWw6OnNlbmRNZXNzYWdlKFQmJiBtZXNzYWdlLCBzaXplX3QgYnl0ZUxlbmd0aCkKK3sK
ICAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+IGNvbXBsZXRpb25IYW5kbGVyID0gW3RoaXMs
IHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgYnl0ZUxlbmd0aF0gewotICAgICAgICBB
U1NFUlQobV9idWZmZXJlZEFtb3VudCA+PSBieXRlTGVuZ3RoKTsKLSAgICAgICAgbV9idWZmZXJl
ZEFtb3VudCAtPSBieXRlTGVuZ3RoOwotICAgICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgICAg
ICBtX2NsaWVudC0+ZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQobV9idWZmZXJlZEFtb3VudCk7Cisg
ICAgICAgIGRlY3JlYXNlQnVmZmVyZWRBbW91bnQoYnl0ZUxlbmd0aCk7CiAgICAgfTsKLSAgICBz
ZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVsOjpTZW5kU3Ry
aW5nIHsgbWVzc2FnZSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgc2VuZFdp
dGhBc3luY1JlcGx5KFdURk1vdmUobWVzc2FnZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKK30KKworV2ViU29ja2V0Q2hhbm5lbDo6U2VuZFJlc3VsdCBXZWJTb2NrZXRDaGFubmVsOjpz
ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBhdXRvIGJ5dGVMZW5ndGggPSBtZXNz
YWdlLnNpemVJbkJ5dGVzKCk7CisgICAgaWYgKCFpbmNyZWFzZUJ1ZmZlcmVkQW1vdW50KGJ5dGVM
ZW5ndGgpKQorICAgICAgICByZXR1cm4gU2VuZEZhaWw7CisKKyAgICBpZiAobV9wZW5kaW5nTWVz
c2FnZXMuaXNFbXB0eSgpKQorICAgICAgICBzZW5kTWVzc2FnZShNZXNzYWdlczo6TmV0d29ya1Nv
Y2tldENoYW5uZWw6OlNlbmRTdHJpbmcgeyBtZXNzYWdlIH0sIGJ5dGVMZW5ndGgpOworICAgIGVs
c2UKKyAgICAgICAgbV9wZW5kaW5nTWVzc2FnZXMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8UGVu
ZGluZ01lc3NhZ2U+KG1lc3NhZ2UpKTsKKwogICAgIHJldHVybiBTZW5kU3VjY2VzczsKIH0KIAog
V2ViU29ja2V0Q2hhbm5lbDo6U2VuZFJlc3VsdCBXZWJTb2NrZXRDaGFubmVsOjpzZW5kKGNvbnN0
IEpTQzo6QXJyYXlCdWZmZXImIGJpbmFyeURhdGEsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIGJ5dGVMZW5ndGgpCiB7Ci0gICAgbV9idWZmZXJlZEFtb3VudCArPSBieXRlTGVuZ3RoOwot
ICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPmRpZFVwZGF0ZUJ1ZmZlcmVkQW1v
dW50KG1fYnVmZmVyZWRBbW91bnQpOworICAgIGlmICghaW5jcmVhc2VCdWZmZXJlZEFtb3VudChi
eXRlTGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIFNlbmRGYWlsOworCisgICAgaWYgKG1fcGVuZGlu
Z01lc3NhZ2VzLmlzRW1wdHkoKSkKKyAgICAgICAgc2VuZE1lc3NhZ2UoTWVzc2FnZXM6Ok5ldHdv
cmtTb2NrZXRDaGFubmVsOjpTZW5kRGF0YSB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHN0YXRpY19j
YXN0PGNvbnN0IHVpbnQ4X3QqPihiaW5hcnlEYXRhLmRhdGEoKSkgKyBieXRlT2Zmc2V0LCBieXRl
TGVuZ3RoIH0gfSwgYnl0ZUxlbmd0aCk7CisgICAgZWxzZQorICAgICAgICBtX3BlbmRpbmdNZXNz
YWdlcy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxQZW5kaW5nTWVzc2FnZT4oYmluYXJ5RGF0YSwg
Ynl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpOwogCi0gICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiBjb21wbGV0aW9uSGFuZGxlciA9IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksIGJ5dGVMZW5ndGhdIHsKLSAgICAgICAgQVNTRVJUKG1fYnVmZmVyZWRBbW91bnQgPj0gYnl0
ZUxlbmd0aCk7Ci0gICAgICAgIG1fYnVmZmVyZWRBbW91bnQgLT0gYnl0ZUxlbmd0aDsKLSAgICAg
ICAgaWYgKG1fY2xpZW50KQotICAgICAgICAgICAgbV9jbGllbnQtPmRpZFVwZGF0ZUJ1ZmZlcmVk
QW1vdW50KG1fYnVmZmVyZWRBbW91bnQpOwotICAgIH07Ci0gICAgc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpOZXR3b3JrU29ja2V0Q2hhbm5lbDo6U2VuZERhdGEgeyBJUEM6OkRhdGFSZWZl
cmVuY2UgeyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYmluYXJ5RGF0YS5kYXRhKCkpICsg
Ynl0ZU9mZnNldCwgYnl0ZUxlbmd0aCB9IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICByZXR1cm4gU2VuZFN1Y2Nlc3M7CiB9CiAKLVdlYlNvY2tldENoYW5uZWw6OlNlbmRSZXN1
bHQgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZChXZWJDb3JlOjpCbG9iJikKK2NsYXNzIEJsb2JMb2Fk
ZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6RmlsZVJlYWRlckxvYWRlckNsaWVudCB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgQmxvYkxvYWRlcihXZWJDb3Jl
OjpEb2N1bWVudCogZG9jdW1lbnQsIEJsb2ImIGJsb2IsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgOiBtX2xvYWRlcihzdGQ6Om1ha2VfdW5p
cXVlPEZpbGVSZWFkZXJMb2FkZXI+KEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRBc0FycmF5QnVmZmVy
LCB0aGlzKSkKKyAgICAgICAgLCBtX2NvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKQorICAgIHsKKyAgICAgICAgbV9sb2FkZXItPnN0YXJ0KGRvY3VtZW50LCBibG9i
KTsKKyAgICB9CisKKyAgICB+QmxvYkxvYWRlcigpCisgICAgeworICAgICAgICBpZiAobV9sb2Fk
ZXIpCisgICAgICAgICAgICBtX2xvYWRlci0+Y2FuY2VsKCk7CisgICAgfQorCisgICAgYm9vbCBp
c0xvYWRpbmcoKSBjb25zdCB7IHJldHVybiAhIW1fbG9hZGVyOyB9CisgICAgY29uc3QgUmVmUHRy
PEpTQzo6QXJyYXlCdWZmZXI+JiByZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlcjsgfQor
ICAgIE9wdGlvbmFsPGludD4gZXJyb3JDb2RlKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvckNvZGU7
IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGRpZFN0YXJ0TG9hZGluZygpIGZpbmFsIHsgfQorICAg
IHZvaWQgZGlkUmVjZWl2ZURhdGEoKSBmaW5hbCB7IH0KKworICAgIHZvaWQgZGlkRmluaXNoTG9h
ZGluZygpIGZpbmFsCisgICAgeworICAgICAgICBtX2J1ZmZlciA9IG1fbG9hZGVyLT5hcnJheUJ1
ZmZlclJlc3VsdCgpOworICAgICAgICBjb21wbGV0ZSgpOworICAgIH0KKworICAgIHZvaWQgZGlk
RmFpbChpbnQgZXJyb3JDb2RlKSBmaW5hbAorICAgIHsKKyAgICAgICAgbV9lcnJvckNvZGUgPSBl
cnJvckNvZGU7CisgICAgICAgIGNvbXBsZXRlKCk7CisgICAgfQorCisgICAgdm9pZCBjb21wbGV0
ZSgpCisgICAgeworICAgICAgICBtX2xvYWRlciA9IG51bGxwdHI7CisgICAgICAgIG1fY29tcGxl
dGlvbkhhbmRsZXIoKTsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6Rmls
ZVJlYWRlckxvYWRlcj4gbV9sb2FkZXI7CisgICAgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+IG1f
YnVmZmVyOworICAgIE9wdGlvbmFsPGludD4gbV9lcnJvckNvZGU7CisgICAgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiBtX2NvbXBsZXRpb25IYW5kbGVyOworfTsKKworY2xhc3MgUGVuZGluZ01l
c3NhZ2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0g
Y2xhc3MgVHlwZSB7IFRleHQsIEJpbmFyeSwgQmxvYiB9OworCisgICAgZXhwbGljaXQgUGVuZGlu
Z01lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorICAgICAgICA6IG1fdHlwZShUeXBlOjpU
ZXh0KQorICAgICAgICAsIG1fdGV4dE1lc3NhZ2UobWVzc2FnZSkKKyAgICB7CisgICAgfQorCisg
ICAgUGVuZGluZ01lc3NhZ2UoY29uc3QgSlNDOjpBcnJheUJ1ZmZlciYgYmluYXJ5RGF0YSwgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKKyAgICAgICAgOiBtX3R5cGUo
VHlwZTo6QmluYXJ5KQorICAgICAgICAsIG1fYmluYXJ5RGF0YShXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYmluYXJ5RGF0YS5kYXRhKCkp
ICsgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpCisgICAgeworICAgIH0KKworICAgIFBlbmRpbmdN
ZXNzYWdlKFdlYkNvcmU6OkRvY3VtZW50KiBkb2N1bWVudCwgQmxvYiYgYmxvYiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICA6IG1fdHlwZShU
eXBlOjpCbG9iKQorICAgICAgICAsIG1fYmxvYkxvYWRlcihzdGQ6Om1ha2VfdW5pcXVlPEJsb2JM
b2FkZXI+KGRvY3VtZW50LCBibG9iLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpCisgICAg
eworICAgIH0KKworICAgIH5QZW5kaW5nTWVzc2FnZSgpID0gZGVmYXVsdDsKKworICAgIFR5cGUg
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIGNvbnN0IFN0cmluZyYgdGV4dE1l
c3NhZ2UoKSBjb25zdCB7IEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6VGV4dCk7IHJldHVybiBtX3Rl
eHRNZXNzYWdlOyB9CisgICAgY29uc3QgV2ViQ29yZTo6U2hhcmVkQnVmZmVyJiBiaW5hcnlEYXRh
KCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IFR5cGU6OkJpbmFyeSk7IHJldHVybiAqbV9iaW5h
cnlEYXRhOyB9CisgICAgY29uc3QgQmxvYkxvYWRlciYgYmxvYkxvYWRlcigpIGNvbnN0IHsgQVNT
RVJUKG1fdHlwZSA9PSBUeXBlOjpCbG9iKTsgcmV0dXJuICptX2Jsb2JMb2FkZXI7IH0KKworcHJp
dmF0ZToKKyAgICBUeXBlIG1fdHlwZTsKKyAgICBTdHJpbmcgbV90ZXh0TWVzc2FnZTsKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBtX2JpbmFyeURhdGE7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEJsb2JMb2FkZXI+IG1fYmxvYkxvYWRlcjsKK307CisKK1dlYlNvY2tldENoYW5uZWw6
OlNlbmRSZXN1bHQgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZChXZWJDb3JlOjpCbG9iJiBibG9iKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFNlbmRGYWlsOworICAgIC8vIEF2
b2lkIHRoZSBCbG9iIHF1ZXVlIGFuZCBsb2FkaW5nIGZvciBlbXB0eSBibG9icy4KKyAgICBpZiAo
IWJsb2Iuc2l6ZSgpKQorICAgICAgICByZXR1cm4gc2VuZChKU0M6OkFycmF5QnVmZmVyOjpjcmVh
dGUoYmxvYi5zaXplKCksIDEpLCAwLCAwKTsKKworICAgIG1fcGVuZGluZ01lc3NhZ2VzLmFwcGVu
ZChzdGQ6Om1ha2VfdW5pcXVlPFBlbmRpbmdNZXNzYWdlPihtX2RvY3VtZW50LmdldCgpLCBibG9i
LCBbdGhpc10geworICAgICAgICB3aGlsZSAoIW1fcGVuZGluZ01lc3NhZ2VzLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgYXV0byYgbWVzc2FnZSA9IG1fcGVuZGluZ01lc3NhZ2VzLmZpcnN0KCk7
CisKKyAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS0+dHlwZSgpKSB7CisgICAgICAgICAgICBj
YXNlIFBlbmRpbmdNZXNzYWdlOjpUeXBlOjpUZXh0OgorICAgICAgICAgICAgICAgIHNlbmRNZXNz
YWdlKE1lc3NhZ2VzOjpOZXR3b3JrU29ja2V0Q2hhbm5lbDo6U2VuZFN0cmluZyB7IG1lc3NhZ2Ut
PnRleHRNZXNzYWdlKCkgfSwgbWVzc2FnZS0+dGV4dE1lc3NhZ2UoKS5zaXplSW5CeXRlcygpKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUGVuZGluZ01lc3NhZ2U6
OlR5cGU6OkJpbmFyeTogeworICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGJpbmFyeURhdGEg
PSBtZXNzYWdlLT5iaW5hcnlEYXRhKCk7CisgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoTWVz
c2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVsOjpTZW5kRGF0YSB7IElQQzo6RGF0YVJlZmVyZW5j
ZSB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJpbmFyeURhdGEuZGF0YSgpKSwg
YmluYXJ5RGF0YS5zaXplKCkgfSB9LCBiaW5hcnlEYXRhLnNpemUoKSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFBlbmRpbmdNZXNzYWdl
OjpUeXBlOjpCbG9iOiB7CisgICAgICAgICAgICAgICAgYXV0byYgbG9hZGVyID0gbWVzc2FnZS0+
YmxvYkxvYWRlcigpOworICAgICAgICAgICAgICAgIGlmIChsb2FkZXIuaXNMb2FkaW5nKCkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIGlmIChjb25zdCBh
dXRvJiByZXN1bHQgPSBsb2FkZXIucmVzdWx0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0
byBieXRlTGVuZ3RoID0gcmVzdWx0LT5ieXRlTGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChpbmNyZWFzZUJ1ZmZlcmVkQW1vdW50KGJ5dGVMZW5ndGgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgc2VuZE1lc3NhZ2UoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVsOjpTZW5k
RGF0YSB7IElQQzo6RGF0YVJlZmVyZW5jZSB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KHJlc3VsdC0+ZGF0YSgpKSwgYnl0ZUxlbmd0aCB9IH0sIGJ5dGVMZW5ndGgpOworICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoYXV0byBlcnJvckNvZGUgPSBsb2FkZXIuZXJyb3JDb2RlKCkp
CisgICAgICAgICAgICAgICAgICAgIGZhaWwobWFrZVN0cmluZygiRmFpbGVkIHRvIGxvYWQgQmxv
YjogZXJyb3IgY29kZSA9ICIsIGVycm9yQ29kZS52YWx1ZSgpKSk7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgbV9wZW5kaW5nTWVzc2FnZXMucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgfQorICAgIH0pKTsK
KyAgICByZXR1cm4gU2VuZFN1Y2Nlc3M7CiB9CiAKIHVuc2lnbmVkIFdlYlNvY2tldENoYW5uZWw6
OmJ1ZmZlcmVkQW1vdW50KCkgY29uc3QKQEAgLTE0OSw3ICszMDUsMTEgQEAgdm9pZCBXZWJTb2Nr
ZXRDaGFubmVsOjpjbG9zZShpbnQgY29kZSwgY29uc3QgU3RyaW5nJiByZWFzb24pCiAKIHZvaWQg
V2ViU29ja2V0Q2hhbm5lbDo6ZmFpbChjb25zdCBTdHJpbmcmIHJlYXNvbikKIHsKLSAgICBNZXNz
YWdlU2VuZGVyOjpzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrU29ja2V0Q2hhbm5lbDo6Q2xvc2UgeyAw
LCByZWFzb24gfSk7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkUmVj
ZWl2ZU1lc3NhZ2VFcnJvcigpOworCisgICAgaWYgKCFtX2lzQ2xvc2luZykKKyAgICAgICAgTWVz
c2FnZVNlbmRlcjo6c2VuZChNZXNzYWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6OkNsb3NlIHsg
MCwgcmVhc29uIH0pOwogfQogCiB2b2lkIFdlYlNvY2tldENoYW5uZWw6OmRpc2Nvbm5lY3QoKQpA
QCAtMTU3LDYgKzMxNyw3IEBAIHZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6ZGlzY29ubmVjdCgpCiAg
ICAgbV9jbGllbnQgPSBudWxscHRyOwogICAgIG1fZG9jdW1lbnQgPSBudWxscHRyOwogICAgIG1f
cGVuZGluZ1Rhc2tzLmNsZWFyKCk7CisgICAgbV9wZW5kaW5nTWVzc2FnZXMuY2xlYXIoKTsKIAog
ICAgIE1lc3NhZ2VTZW5kZXI6OnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVsOjpD
bG9zZSB7IDAsIHsgfSB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9O
ZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuaAppbmRleCA5OTM3ZGYxNzIyMy4uZmYxNmY5ZTA5NDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENo
YW5uZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRD
aGFubmVsLmgKQEAgLTQxLDYgKzQxLDggQEAgY2xhc3MgRGF0YVJlZmVyZW5jZTsKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKK2NsYXNzIFBlbmRpbmdNZXNzYWdlOworCiBjbGFzcyBXZWJTb2NrZXRD
aGFubmVsIDogcHVibGljIElQQzo6TWVzc2FnZVNlbmRlciwgcHVibGljIElQQzo6TWVzc2FnZVJl
Y2VpdmVyLCBwdWJsaWMgV2ViQ29yZTo6VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwsIHB1Ymxp
YyBSZWZDb3VudGVkPFdlYlNvY2tldENoYW5uZWw+LCBwdWJsaWMgSWRlbnRpZmllZDxXZWJTb2Nr
ZXRDaGFubmVsPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxXZWJTb2NrZXRDaGFubmVsPiBj
cmVhdGUoV2ViQ29yZTo6RG9jdW1lbnQmLCBXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsQ2xpZW50
Jik7CkBAIC04Myw2ICs4NSw5IEBAIHByaXZhdGU6CiAgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNz
YWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IGZpbmFsOwogICAgIHVpbnQ2NF90IG1lc3NhZ2VT
ZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QgZmluYWw7CiAKKyAgICBib29sIGluY3JlYXNlQnVm
ZmVyZWRBbW91bnQoc2l6ZV90KTsKKyAgICB2b2lkIGRlY3JlYXNlQnVmZmVyZWRBbW91bnQoc2l6
ZV90KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRNZXNzYWdlKFQmJiwgc2l6
ZV90IGJ5dGVMZW5ndGgpOwogICAgIHZvaWQgZW5xdWV1ZVRhc2soRnVuY3Rpb248dm9pZCgpPiYm
KTsKIAogICAgIFdlYWtQdHI8V2ViQ29yZTo6RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CkBAIC05Miw2
ICs5Nyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzQ2xvc2luZyB7IGZhbHNlIH07CiAgICAg
Ym9vbCBtX2lzU3VzcGVuZGVkIHsgZmFsc2UgfTsKICAgICBEZXF1ZTxGdW5jdGlvbjx2b2lkKCk+
PiBtX3BlbmRpbmdUYXNrczsKKyAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8UGVuZGluZ01lc3Nh
Z2U+PiBtX3BlbmRpbmdNZXNzYWdlczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>
<flag name="review"
          id="388871"
          type_id="1"
          status="+"
          setter="youennf"
    />
          </attachment>
      

    </bug>

</bugzilla>