<?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>57090</bug_id>
          
          <creation_ts>2011-03-25 00:25:13 -0700</creation_ts>
          <short_desc>Simplifying Worker termination sequence (removing unnecessary mutex)</short_desc>
          <delta_ts>2011-04-14 15:14:59 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kinuko Yasuda">kinuko</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dimich</cc>
    
    <cc>levin</cc>
    
    <cc>webkit-ews</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>373375</commentid>
    <comment_count>0</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2011-03-25 00:25:13 -0700</bug_when>
    <thetext>While I was trying to fix issue 56138 I found WorkerScriptController is causing another tsan data race warnings.
I&apos;m not sure if it&apos;s false positive but it looks plausible.

WARNING: Possible data race during write of size 1 at 0x62BF478: {{{
   T0 (L{L393, L401}):
    #0  WebCore::WorkerScriptController::forbidExecution(WebCore::WorkerScriptController::ForbidExecutionOption) third_party/WebKit/Source/WebCore/bindings/v8/WorkerScriptController.cpp:93
    #1  WebCore::WorkerThread::stop() third_party/WebKit/Source/WebCore/workers/WorkerThread.cpp:231
    #2  WebKit::WebWorkerBase::stopWorkerThread() third_party/WebKit/Source/WebKit/chromium/src/WebWorkerBase.cpp:164
    #3  WebKit::WebWorkerImpl::terminateWorkerContext() third_party/WebKit/Source/WebKit/chromium/src/WebWorkerImpl.cpp:113
    #4  WebWorkerStub::OnTerminateWorkerContext() content/worker/webworker_stub.cc:56
    #5  bool IPC::Message::Dispatch&lt;WebWorkerStub, WebWorkerStub&gt;(IPC::Message const*, WebWorkerStub*, WebWorkerStub*, void (WebWorkerStub::*)()) ./ipc/ipc_message.h:136
    #6  WebWorkerStub::OnMessageReceived(IPC::Message const&amp;) content/worker/webworker_stub.cc:45
    ...
  Concurrent read(s) happened at (OR AFTER) these points:
   T2 (L{}):
    #0  WebCore::WorkerScriptController::proxy() third_party/WebKit/Source/WebCore/bindings/v8/WorkerScriptController.h:51
    #1  WebCore::toV8Context(WebCore::ScriptExecutionContext*, WebCore::WorldContextHandle const&amp;) third_party/WebKit/Source/WebCore/bindings/v8/V8Proxy.cpp:835
    #2  WebCore::V8CustomVoidCallback::handleEvent() third_party/WebKit/Source/WebCore/bindings/v8/custom/V8CustomVoidCallback.cpp:56
    #3  WebCore::VoidCallbacks::didSucceed() third_party/WebKit/Source/WebCore/fileapi/FileSystemCallbacks.cpp:312
    #4  WebKit::WebFileSystemCallbacksImpl::didSucceed() third_party/WebKit/Source/WebKit/chromium/src/WebFileSystemCallbacksImpl.cpp:65
    #5  WebKit::WorkerFileSystemCallbacksBridge::didSucceedOnWorkerThread(WebCore::ScriptExecutionContext*, WebKit::WorkerFileSystemCallbacksBridge*) third_party/WebKit/Source/WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp:327
    #6  WebCore::CrossThreadTask1&lt;WebKit::WorkerFileSystemCallbacksBridge*, WebKit::WorkerFileSystemCallbacksBridge*&gt;::performTask(WebCore::ScriptExecutionContext*) third_party/WebKit/Source/WebCore/dom/CrossThreadTask.h:81
    ...
  Location 0x62BF478 is 56 bytes inside a block starting at 0x62BF440 of size 64 allocated by T2 from heap:
    #0  operator new(unsigned long) /tmp/valgrind-src/tsan/tsan/ts_valgrind_intercepts.c:418
    #1  WebCore::WorkerContext::WorkerContext(WebCore::KURL const&amp;, WTF::String const&amp;, WebCore::WorkerThread*) third_party/WebKit/Source/WebCore/workers/WorkerContext.cpp:109
    #2  WebCore::DedicatedWorkerContext::DedicatedWorkerContext(WebCore::KURL const&amp;, WTF::String const&amp;, WebCore::DedicatedWorkerThread*) third_party/WebKit/Source/WebCore/workers/DedicatedWorkerContext.cpp:45
    #3  WebCore::DedicatedWorkerContext::create(WebCore::KURL const&amp;, WTF::String const&amp;, WebCore::DedicatedWorkerThread*) third_party/WebKit/Source/WebCore/workers/DedicatedWorkerContext.h:48
    #4  WebCore::DedicatedWorkerThread::createWorkerContext(WebCore::KURL const&amp;, WTF::String const&amp;) third_party/WebKit/Source/WebCore/workers/DedicatedWorkerThread.cpp:59
    #5  WebCore::WorkerThread::workerThread() third_party/WebKit/Source/WebCore/workers/WorkerThread.cpp:125
    #6  WebCore::WorkerThread::workerThreadStart(void*) third_party/WebKit/Source/WebCore/workers/WorkerThread.cpp:118
    ...
  Locks involved in this report (reporting last lock sites): {L393, L401}
   L393 (0x6239C10)
    #0  pthread_mutex_lock /tmp/valgrind-src/tsan/tsan/ts_valgrind_intercepts.c:891
    #1  WTF::Mutex::lock() third_party/WebKit/Source/JavaScriptCore/wtf/ThreadingPthreads.cpp:269
    #2  WTF::Locker&lt;WTF::Mutex&gt;::Locker(WTF::Mutex&amp;) third_party/WebKit/Source/JavaScriptCore/wtf/Locker.h:38
    #3  WebCore::WorkerThread::stop() third_party/WebKit/Source/WebCore/workers/WorkerThread.cpp:227
    #4  WebKit::WebWorkerBase::stopWorkerThread() third_party/WebKit/Source/WebKit/chromium/src/WebWorkerBase.cpp:164
    #5  WebKit::WebWorkerImpl::terminateWorkerContext() third_party/WebKit/Source/WebKit/chromium/src/WebWorkerImpl.cpp:113
    #6  WebWorkerStub::OnTerminateWorkerContext() content/worker/webworker_stub.cc:56
    ...
   L401 (0x62BF450)
    #0  pthread_mutex_lock /tmp/valgrind-src/tsan/tsan/ts_valgrind_intercepts.c:891
    #1  WTF::Mutex::lock() third_party/WebKit/Source/JavaScriptCore/wtf/ThreadingPthreads.cpp:269
    #2  WTF::Locker&lt;WTF::Mutex&gt;::Locker(WTF::Mutex&amp;) third_party/WebKit/Source/JavaScriptCore/wtf/Locker.h:38
    #3  WebCore::WorkerScriptController::forbidExecution(WebCore::WorkerScriptController::ForbidExecutionOption) third_party/WebKit/Source/WebCore/bindings/v8/WorkerScriptController.cpp:92
    #4  WebCore::WorkerThread::stop() third_party/WebKit/Source/WebCore/workers/WorkerThread.cpp:231
    #5  WebKit::WebWorkerBase::stopWorkerThread() third_party/WebKit/Source/WebKit/chromium/src/WebWorkerBase.cpp:164
    #6  WebKit::WebWorkerImpl::terminateWorkerContext() third_party/WebKit/Source/WebKit/chromium/src/WebWorkerImpl.cpp:113
   Race verifier data: 0x2107DEC,0x20EE364
}}}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373378</commentid>
    <comment_count>1</comment_count>
      <attachid>86904</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2011-03-25 00:27:58 -0700</bug_when>
    <thetext>Created attachment 86904
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373534</commentid>
    <comment_count>2</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2011-03-25 08:48:36 -0700</bug_when>
    <thetext>Adding a lock to this accessor does not prevent  the possibility of the flag being flipped right after the exit from the accessor. In this case using the v8 proxy returned would have same results as not having a lock.
Let me take a better look, i think this code is ok without locking, need to verify.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373559</commentid>
    <comment_count>3</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-25 09:35:09 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Adding a lock to this accessor does not prevent  the possibility of the flag being flipped right after the exit from the accessor. In this case using the v8 proxy returned would have same results as not having a lock.
&gt; Let me take a better look, i think this code is ok without locking, need to verify.

Looking at http://trac.webkit.org/browser/trunk/Source/WebCore/bindings/v8/WorkerScriptController.cpp, I don&apos;t understand why the mutex is ever necessary (by similar reasoning to the above).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373643</commentid>
    <comment_count>4</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2011-03-25 11:52:16 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; Looking at http://trac.webkit.org/browser/trunk/Source/WebCore/bindings/v8/WorkerScriptController.cpp, I don&apos;t understand why the mutex is ever necessary (by similar reasoning to the above).

Good point. The lock was grandfathered (euphemism for &quot;just copied by me&quot;), it was added by Alexey for JSC: http://trac.webkit.org/changeset/38689

However, termination code was changed and I think it is not needed now, at least in V8 case.

Here is how it works:
- V8::TerminateExecution() is invoked from any thread. It takes internal lock in V8 and sets a flag.
- On a worker thread, we can be either in v8 code already or in C++ WebCore code. The latter case may eventually enter V8 code as well. It&apos;s not a problem, since it&apos;s ok to enter the v8 code once after the termination flag was set
- V8 discovers a termination flag (after taking an internal lock) and raises the internal exception that unwinds us out of V8 code into C++ WebCore frame. If there are more v8 frames on the stack, the C++ code must check the result and if we have uncatchable exception unwinding (v8::TryCatch::CanContinue() == false), it should gracefully exit to allow the exception to unwind to the bottom. During this unwinding, V8 fast-returns with trivial results from all V8 APIs if they are called anyways.
- After we get out of the last V8 frame, it is not legal to call into V8 again. This is the only place where reentry into V8 is harmful. We should terminate worker then.

One change that makes sense here is to stop setting m_executionForbidden on a non-worker thread, and instead set it on worker thread, the moment we return from v8 frame unwinding termination exception. This will prevent us from re-entering v8 and make this flag set/examined from the single thread.

Removing r? flag from Kinuko&apos;s patch for now. Give me a day or two I&apos;ll upload updated one after running some tests and looking at the code, since threading is tricky :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376009</commentid>
    <comment_count>5</comment_count>
      <attachid>87455</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2011-03-29 20:36:58 -0700</bug_when>
    <thetext>Created attachment 87455
Patch

Work in progress. It applies to both JSC and V8, so I&apos;m removing &quot;[v8]&quot; in the title of the bug

The mutex is gone! It should not be there, since guarding the entry into JS engine is only possible from the same thread, otherwise the whole &quot;entry into JS&quot; would have to be under a lock.

The patch makes the bit preventing the reentry to be only set/checked on a single thread and so the mutex is no longer needed. The logic of termination:

1. If Worker is merely &quot;Closed&quot;, as in WorkerGlobalScope.Close() - the WorkerContext::m_isClosing is set and that eventually drains Task queue and terminates the worker
2. If Worker.terminate() is called or parent page closes - the WorkerScriptController::scheduleExecutionTermination() is called. This will eventually (so no locking needed) propagate to the worker thread and raise termination exception. Upon exit from JSC or V8 with that exception, we use WorkerScriptController::forbidExecution() to set up a flag.
3. After the flag is set, we avoid reentering JS in EventListener and WorkerScriptController code.

The only difference between JSC and V8 is that JSC&apos;s Terminator is not guaranteed to immediately raise termination exception, so additional check is added for the Terminator::shouldTerminate() in addition to exception check.

Tests run fine. I will run V8 tests and update patch with ChanegLogs etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376030</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-03-29 21:38:12 -0700</bug_when>
    <thetext>&gt; This will eventually (so no locking needed) propagate to the worker thread and raise termination exception.

Did you check svn history for the lock around m_executionForbidden? I vaguely recall thinking the same when introducing it originally, but then there was a specific race condition that made the lock in WorkerScriptController::evaluate necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376039</commentid>
    <comment_count>7</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2011-03-29 22:04:11 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; This will eventually (so no locking needed) propagate to the worker thread and raise termination exception.
&gt; 
&gt; Did you check svn history for the lock around m_executionForbidden? I vaguely recall thinking the same when introducing it originally, but then there was a specific race condition that made the lock in WorkerScriptController::evaluate necessary.

I looked, yes. It was created here: http://trac.webkit.org/changeset/38689.

There was originally a timeout of 1ms... Before Terminator. 

I think you might needed a mutex to exclude situation when timeout aborted the JS execution, but m_executionForbidden on worker thread is still &apos;false&apos; - that can happen w/o mutex. So in that case JS could exit by timeout, and immediately enter again.

I think checking the exception result on exit from JS and setting m_executionForbidden on the worker thread achieves the same result, w/o mutex.

Does it match your recollection?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376043</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-03-29 22:21:53 -0700</bug_when>
    <thetext>Yes, that was I&apos;ve been seeing. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376754</commentid>
    <comment_count>9</comment_count>
      <attachid>87632</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2011-03-30 15:57:37 -0700</bug_when>
    <thetext>Created attachment 87632
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378156</commentid>
    <comment_count>10</comment_count>
      <attachid>87935</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2011-04-01 15:52:34 -0700</bug_when>
    <thetext>Created attachment 87935
Patch, added ENABLE(WORKERS) per EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378184</commentid>
    <comment_count>11</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-04-01 16:25:13 -0700</bug_when>
    <thetext>Attachment 87935 did not build on qt:
Build output: http://queues.webkit.org/results/8321313</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378201</commentid>
    <comment_count>12</comment_count>
      <attachid>87940</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2011-04-01 16:37:44 -0700</bug_when>
    <thetext>Created attachment 87940
Patch, another EWS fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382588</commentid>
    <comment_count>13</comment_count>
      <attachid>87940</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-04-08 15:21:57 -0700</bug_when>
    <thetext>Comment on attachment 87940
Patch, another EWS fix.

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

&gt; Source/WebCore/bindings/v8/WorkerScriptController.cpp:72
&gt; +      return ScriptValue();

indent off.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385247</commentid>
    <comment_count>14</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2011-04-13 14:34:09 -0700</bug_when>
    <thetext>I didn&apos;t land this patch because it exposed a race condition in fast/workers/shared-worker-frame-lifecycle.html that caused it to occasionally fail when run like this:
run-webkit-tests LayoutTests/fast/workers/ --iterations 100 --random

The culprit happens to be document.write(), called mostly directly from inline script (in this case it appends to the document) and sometimes deferred via setTimeout() (when not all worker threads from previous test happen to exit yet) - in latter case it overwrites the whole document and makes the test fail.

Added the change from document.write() to using appendChild(), verified we don&apos;t use document.write in other places in worker tests.

Updated patch is coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385265</commentid>
    <comment_count>15</comment_count>
      <attachid>89468</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2011-04-13 14:50:32 -0700</bug_when>
    <thetext>Created attachment 89468
Patch, fixed flaky test

Same code change, plus a LayoutTests/fast/workers/shared-worker-frame-lifecycle.html update to remove race condition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385614</commentid>
    <comment_count>16</comment_count>
      <attachid>89468</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-14 02:52:45 -0700</bug_when>
    <thetext>Comment on attachment 89468
Patch, fixed flaky test

Rejecting attachment 89468 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-8&apos;, &apos;apply-...&quot; exit_code: 2

Last 500 characters of output:
ile Source/WebCore/bindings/v8/WorkerScriptController.h
patching file Source/WebCore/dom/Document.h
patching file Source/WebCore/dom/MessagePort.cpp
patching file Source/WebCore/dom/ScriptExecutionContext.h
patching file Source/WebCore/workers/WorkerContext.cpp
patching file Source/WebCore/workers/WorkerContext.h
patching file Source/WebCore/workers/WorkerThread.cpp

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;David Levin&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/8404575</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386019</commentid>
    <comment_count>17</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2011-04-14 14:05:13 -0700</bug_when>
    <thetext>Landing manually...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386092</commentid>
    <comment_count>18</comment_count>
      <attachid>89468</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2011-04-14 15:14:47 -0700</bug_when>
    <thetext>Comment on attachment 89468
Patch, fixed flaky test

Landed: http://trac.webkit.org/changeset/83900</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86904</attachid>
            <date>2011-03-25 00:27:58 -0700</date>
            <delta_ts>2011-03-29 20:36:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57090-20110325002757.patch</filename>
            <type>text/plain</type>
            <size>2329</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE4NzcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4ODQ5YjNjYjk3YjZlMjg1
NDU0NDkyMmJiNjI1MDU3NjZiMGMxMjNjLi5iODExZWY2NTMwMTRhZmIwMWQ2MjZjZmUzMjExNGU1
ZTcxZTE1YzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDMtMjUgIEtpbnVr
byBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtWOF0gUG9zc2libGUgZGF0YSByYWNlIHByb2JsZW0g
aW4gdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlciAocmVwb3J0ZWQgYnkgdHNhbikKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3MDkwCisgICAgICAgIEd1
YXJkZWQgcHJveHkoKSB3aXRoIGEgbG9jay4KKworICAgICAgICBUZXN0ZWQgYW5kIHZlcmlmaWVk
IHdpdGggdHNhbiBhbmFseXplci4KKworICAgICAgICAqIGJpbmRpbmdzL3Y4L1dvcmtlclNjcmlw
dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxl
cjo6cHJveHkpOiBHdWFyZGVkIHdpdGggYSBsb2NrLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1dv
cmtlclNjcmlwdENvbnRyb2xsZXIuaDoKKwogMjAxMS0wMy0yNCAgRGltaXRyaSBHbGF6a292ICA8
ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVy
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250
cm9sbGVyLmNwcAppbmRleCA0MmUwMmU2NmQyZTQzM2I3OTNiODU1YjNiZTEzOWQ3ZWE5OGNhNGQ1
Li4yZWViMTQ2M2IyMDNlYjllNjBlYWY2ZGUzODM2YjQyZDY1Yjk0NWY5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcApA
QCAtNjEsNiArNjEsMTIgQEAgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6fldvcmtlclNjcmlwdENv
bnRyb2xsZXIoKQogICAgIHJlbW92ZUFsbERPTU9iamVjdHNJbkN1cnJlbnRUaHJlYWQoKTsKIH0K
IAorV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpw
cm94eSgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX3NoYXJlZERhdGFNdXRleCk7CisgICAg
cmV0dXJuIG1fZXhlY3V0aW9uRm9yYmlkZGVuID8gMCA6IG1fcHJveHkuZ2V0KCk7Cit9CisKIFNj
cmlwdFZhbHVlIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IFNjcmlwdFNv
dXJjZUNvZGUmIHNvdXJjZUNvZGUpCiB7CiAgICAgcmV0dXJuIGV2YWx1YXRlKHNvdXJjZUNvZGUs
IDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0
Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29u
dHJvbGxlci5oCmluZGV4IDVlMzE1OWZjYTM5MzI0MWIyMTZhMmFjOTZlZDFlZjMzMGQ4MDNlMTQu
LmZiMTdhNjRmMWZjNGNlMThjZmQ3OWM4ODk1MWE4MmY4MGIzNDE3NmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgKQEAgLTQ4
LDcgKzQ4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBXb3JrZXJTY3JpcHRDb250
cm9sbGVyKFdvcmtlckNvbnRleHQqKTsKICAgICAgICAgfldvcmtlclNjcmlwdENvbnRyb2xsZXIo
KTsKIAotICAgICAgICBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIHByb3h5KCkgeyByZXR1
cm4gbV9leGVjdXRpb25Gb3JiaWRkZW4gPyAwIDogbV9wcm94eS5nZXQoKTsgfQorICAgICAgICBX
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIHByb3h5KCk7CiAgICAgICAgIFdvcmtlckNvbnRl
eHQqIHdvcmtlckNvbnRleHQoKSB7IHJldHVybiBtX3dvcmtlckNvbnRleHQ7IH0KIAogICAgICAg
ICBTY3JpcHRWYWx1ZSBldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87455</attachid>
            <date>2011-03-29 20:36:58 -0700</date>
            <delta_ts>2011-03-30 15:57:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>17755</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCmluZGV4
IGU0NDRkODguLjBhZWNkY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNF
dmVudExpc3RlbmVyLmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkpTRXZlbnQuaCIK
ICNpbmNsdWRlICJKU0V2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0
YXRlLmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNM
b2NrLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5oPgogCkBAIC02MCw3
ICs2MSw3IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjptYXJrSlNGdW5jdGlvbihNYXJrU3RhY2sm
IG1hcmtTdGFjaykKIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBFdmVudCogZXZlbnQpCiB7CiAg
ICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwotICAgIGlmICghc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCB8fCBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0pTRXhlY3V0aW9uVGVybWlu
YXRlZCgpKQorICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCB8fCBzY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5pc0pTRXhlY3V0aW9uRm9yYmlkZGVuKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CkBAIC0xMjYsNiArMTI3LDEy
IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0CiAKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zZXRD
dXJyZW50RXZlbnQoc2F2ZWRFdmVudCk7CiAKKyAgICAgICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPmlzV29ya2VyQ29udGV4dCgpKSB7CisgICAgICAgICAgICBib29sIHRlcm1pbmF0b3JD
YXVzZWRFeGNlcHRpb24gPSAoZXhlYy0+aGFkRXhjZXB0aW9uKCkgJiYgZXhlYy0+ZXhjZXB0aW9u
KCkuaXNPYmplY3QoKSAmJiBhc09iamVjdChleGVjLT5leGNlcHRpb24oKSktPmV4Y2VwdGlvblR5
cGUoKSA9PSBUZXJtaW5hdGVkKTsKKyAgICAgICAgICAgIGlmICh0ZXJtaW5hdG9yQ2F1c2VkRXhj
ZXB0aW9uIHx8IGdsb2JhbERhdGEudGVybWluYXRvci5zaG91bGRUZXJtaW5hdGUoKSkKKyAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCktPnNjcmlwdCgpLT5mb3JiaWRFeGVjdXRpb24oKTsKKyAgICAgICAgfQorCiAgICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICAgICAgZXZlbnQtPnRhcmdldCgp
LT51bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCk7CiAgICAgICAgICAgICByZXBvcnRD
dXJyZW50RXhjZXB0aW9uKGV4ZWMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCA2N2IwNDQxLi42YTk4ZjBjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250
cm9sbGVyLmNwcApAQCAtMTAwLDExICsxMDAsOSBAQCB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xs
ZXI6OmluaXRTY3JpcHQoKQogCiBTY3JpcHRWYWx1ZSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpl
dmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQogewotICAgIHsKLSAg
ICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX3NoYXJlZERhdGFNdXRleCk7Ci0gICAgICAgIGlmICht
X2V4ZWN1dGlvbkZvcmJpZGRlbikKLSAgICAgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOwot
ICAgIH0KKyAgICBpZiAoaXNFeGVjdXRpb25Gb3JiaWRkZW4oKSkKKyAgICAgICAgcmV0dXJuIFNj
cmlwdFZhbHVlKCk7CisKICAgICBTY3JpcHRWYWx1ZSBleGNlcHRpb247CiAgICAgU2NyaXB0VmFs
dWUgcmVzdWx0KGV2YWx1YXRlKHNvdXJjZUNvZGUsICZleGNlcHRpb24pKTsKICAgICBpZiAoZXhj
ZXB0aW9uLmpzVmFsdWUoKSkgewpAQCAtMTE2LDExICsxMTQsOCBAQCBTY3JpcHRWYWx1ZSBXb3Jr
ZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3Vy
Y2VDb2RlKQogCiBTY3JpcHRWYWx1ZSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShj
b25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBTY3JpcHRWYWx1ZSogZXhjZXB0aW9u
KQogewotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX3NoYXJlZERhdGFNdXRleCk7
Ci0gICAgICAgIGlmIChtX2V4ZWN1dGlvbkZvcmJpZGRlbikKLSAgICAgICAgICAgIHJldHVybiBT
Y3JpcHRWYWx1ZSgpOwotICAgIH0KKyAgICBpZiAoaXNFeGVjdXRpb25Gb3JiaWRkZW4oKSkKKyAg
ICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7CiAKICAgICBpbml0U2NyaXB0SWZOZWVkZWQoKTsK
ICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwpAQCAtMTMwLDEwICsxMjUs
MTggQEAgU2NyaXB0VmFsdWUgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY29uc3Qg
U2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSwKICAgICBDb21wbGV0aW9uIGNvbXAgPSBKU0M6
OmV2YWx1YXRlKGV4ZWMsIGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVD
aGFpbigpLCBzb3VyY2VDb2RlLmpzU291cmNlQ29kZSgpLCBtX3dvcmtlckNvbnRleHRXcmFwcGVy
LmdldCgpKTsKICAgICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5nbG9iYWxEYXRhKCkudGltZW91
dENoZWNrZXIuc3RvcCgpOwogCi0gICAgaWYgKGNvbXAuY29tcGxUeXBlKCkgPT0gTm9ybWFsIHx8
IGNvbXAuY29tcGxUeXBlKCkgPT0gUmV0dXJuVmFsdWUpCisKKyAgICBDb21wbFR5cGUgY29tcGxf
dHlwZSA9IGNvbXAuY29tcGxUeXBlKCk7CisKKyAgICBpZiAoY29tcGxfdHlwZSA9PSBUZXJtaW5h
dGVkIHx8IG1fd29ya2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbERhdGEoKS50ZXJtaW5hdG9yLnNo
b3VsZFRlcm1pbmF0ZSgpKSB7CisgICAgICAgIGZvcmJpZEV4ZWN1dGlvbigpOworICAgICAgICBy
ZXR1cm4gU2NyaXB0VmFsdWUoKTsKKyAgICB9CisKKyAgICBpZiAoY29tcGxfdHlwZSA9PSBOb3Jt
YWwgfHwgY29tcGxfdHlwZSA9PSBSZXR1cm5WYWx1ZSkKICAgICAgICAgcmV0dXJuIFNjcmlwdFZh
bHVlKCptX2dsb2JhbERhdGEsIGNvbXAudmFsdWUoKSk7CiAKLSAgICBpZiAoY29tcC5jb21wbFR5
cGUoKSA9PSBUaHJvdykgeworICAgIGlmIChjb21wbF90eXBlID09IFRocm93KSB7CiAgICAgICAg
IFN0cmluZyBlcnJvck1lc3NhZ2U7CiAgICAgICAgIGludCBsaW5lTnVtYmVyID0gMDsKICAgICAg
ICAgU3RyaW5nIHNvdXJjZVVSTCA9IHNvdXJjZUNvZGUudXJsKCkuc3RyaW5nKCk7CkBAIC0xNTAs
MTYgKzE1MywyMSBAQCB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OnNldEV4Y2VwdGlvbihT
Y3JpcHRWYWx1ZSBleGNlcHRpb24pCiAgICAgdGhyb3dFcnJvcihtX3dvcmtlckNvbnRleHRXcmFw
cGVyLT5nbG9iYWxFeGVjKCksIGV4Y2VwdGlvbi5qc1ZhbHVlKCkpOwogfQogCi12b2lkIFdvcmtl
clNjcmlwdENvbnRyb2xsZXI6OmZvcmJpZEV4ZWN1dGlvbihGb3JiaWRFeGVjdXRpb25PcHRpb24g
b3B0aW9uKQordm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpzY2hlZHVsZUV4ZWN1dGlvblRl
cm1pbmF0aW9uKCkKIHsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZnJvbSBh
bm90aGVyIHRocmVhZC4KLSAgICAvLyBNdXRleCBwcm90ZWN0aW9uIGZvciBtX2V4ZWN1dGlvbkZv
cmJpZGRlbiBpcyBuZWVkZWQgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIHZhbHVlIGlzIHN5bmNocm9u
aXplZCBiZXR3ZWVuIHByb2Nlc3NvcnMsIGJlY2F1c2UKLSAgICAvLyBpZiBpdCB3ZXJlIG5vdCwg
dGhlIHdvcmtlciBjb3VsZCByZS1lbnRlciBKU0M6OmV2YWx1YXRlKCksIGJ1dCB3aXRoIHRpbWVv
dXQgYWxyZWFkeSByZXNldC4KLSAgICAvLyBJdCBpcyBub3QgY3JpdGljYWwgZm9yIFRlcm1pbmF0
b3I6Om1fc2hvdWxkVGVybWluYXRlIHRvIGJlIHN5bmNocm9uaXplZCwgd2UganVzdCByZWx5IG9u
IGl0IHJlYWNoaW5nIHRoZSB3b3JrZXIgdGhyZWFkJ3MgcHJvY2Vzc29yIHNvb25lciBvciBsYXRl
ci4KLSAgICBNdXRleExvY2tlciBsb2NrKG1fc2hhcmVkRGF0YU11dGV4KTsKKyAgICBtX2dsb2Jh
bERhdGEtPnRlcm1pbmF0b3IudGVybWluYXRlU29vbigpOworfQorCit2b2lkIFdvcmtlclNjcmlw
dENvbnRyb2xsZXI6OmZvcmJpZEV4ZWN1dGlvbigpCit7CisgICAgQVNTRVJUKG1fd29ya2VyQ29u
dGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwogICAgIG1fZXhlY3V0aW9uRm9yYmlkZGVuID0gdHJ1
ZTsKLSAgICBpZiAob3B0aW9uID09IFRlcm1pbmF0ZVJ1bm5pbmdTY3JpcHQpCi0gICAgICAgIG1f
Z2xvYmFsRGF0YS0+dGVybWluYXRvci50ZXJtaW5hdGVTb29uKCk7Cit9CisKK2Jvb2wgV29ya2Vy
U2NyaXB0Q29udHJvbGxlcjo6aXNFeGVjdXRpb25Gb3JiaWRkZW4oKSBjb25zdAoreworICAgIEFT
U0VSVChtX3dvcmtlckNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICByZXR1cm4gbV9l
eGVjdXRpb25Gb3JiaWRkZW47CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaAppbmRl
eCBjM2I4MjE1Li5iMjc1NjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oCkBAIC02MSw5ICs2MSwxNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBzZXRFeGNlcHRpb24oU2NyaXB0VmFsdWUpOwogCi0g
ICAgICAgIGVudW0gRm9yYmlkRXhlY3V0aW9uT3B0aW9uIHsgVGVybWluYXRlUnVubmluZ1Njcmlw
dCwgTGV0UnVubmluZ1NjcmlwdEZpbmlzaCB9OwotICAgICAgICB2b2lkIGZvcmJpZEV4ZWN1dGlv
bihGb3JiaWRFeGVjdXRpb25PcHRpb24pOwotICAgICAgICBib29sIGlzRXhlY3V0aW9uRm9yYmlk
ZGVuKCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRpb25Gb3JiaWRkZW47IH0KKyAgICAgICAgLy8g
QXN5bmMgcmVxdWVzdCB0byB0ZXJtaW5hdGUgYSBKUyBydW4gZXhlY3V0aW9uLiBFdmVudHVhbGx5
IGNhdXNlcyB0ZXJtaW5hdGlvbgorICAgICAgICAvLyBleGNlcHRpb24gcmFpc2VkIGR1cmluZyBK
UyBleGVjdXRpb24sIGlmIHRoZSB3b3JrZXIgdGhyZWFkIGhhcHBlbnMgdG8gcnVuIEpTLgorICAg
ICAgICAvLyBBZnRlciBKUyBleGVjdXRpb24gd2FzIHRlcm1pbmF0ZWQgaW4gdGhpcyB3YXksIHRo
ZSBXb3JrZXIgdGhyZWFkIGhhcyB0byB1c2UKKyAgICAgICAgLy8gZm9yYmlkRXhlY3V0aW9uKCkv
aXNFeGVjdXRpb25Gb3JiaWRkZW4oKSB0byBndWFyZCBhZ2FpbnN0IHJlZW50cnkgaW50byBKUy4K
KyAgICAgICAgLy8gQ2FuIGJlIGNhbGxlZCBmcm9tIGFueSB0aHJlYWQuIAorICAgICAgICB2b2lk
IHNjaGVkdWxlRXhlY3V0aW9uVGVybWluYXRpb24oKTsKKworICAgICAgICAvLyBDYWxsZWQgb24g
V29ya2VyIHRocmVhZCB3aGVuIEpTIGV4aXRzIHdpdGggdGVybWluYXRpb24gZXhjZXB0aW9uIGNh
dXNlZCBieSBmb3JiaWRFeGVjdXRpb24oKSByZXF1ZXN0LAorICAgICAgICAvLyBvciBieSBXb3Jr
ZXIgdGhyZWFkIHRlcm1pbmF0aW9uIGNvZGUgdG8gcHJldmVudCBmdXR1cmUgZW50cnkgaW50byBK
Uy4KKyAgICAgICAgdm9pZCBmb3JiaWRFeGVjdXRpb24oKTsKKyAgICAgICAgYm9vbCBpc0V4ZWN1
dGlvbkZvcmJpZGRlbigpIGNvbnN0OwogCiAgICAgICAgIEpTQzo6SlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhKCkgeyByZXR1cm4gbV9nbG9iYWxEYXRhLmdldCgpOyB9CiAKQEAgLTc4LDggKzg2LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBSZWZQdHI8SlNDOjpKU0dsb2JhbERhdGE+
IG1fZ2xvYmFsRGF0YTsKICAgICAgICAgV29ya2VyQ29udGV4dCogbV93b3JrZXJDb250ZXh0Owog
ICAgICAgICBKU0M6Okdsb2JhbDxKU1dvcmtlckNvbnRleHQ+IG1fd29ya2VyQ29udGV4dFdyYXBw
ZXI7Ci0KLSAgICAgICAgTXV0ZXggbV9zaGFyZWREYXRhTXV0ZXg7CiAgICAgICAgIGJvb2wgbV9l
eGVjdXRpb25Gb3JiaWRkZW47CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwCmluZGV4IDZkYzQ5ZmEuLjg1
M2ExNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RF
dmVudExpc3RlbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3Ry
YWN0RXZlbnRMaXN0ZW5lci5jcHAKQEAgLTcyLDYgKzcyLDEwIEBAIFY4QWJzdHJhY3RFdmVudExp
c3RlbmVyOjp+VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIoKQogCiB2b2lkIFY4QWJzdHJhY3RFdmVu
dExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBF
dmVudCogZXZlbnQpCiB7CisgICAgLy8gRG9uJ3QgcmVlbnRlciBWOCBpZiBleGVjdXRpb24gd2Fz
IHRlcm1pbmF0ZWQgaW4gdGhpcyBpbnN0YW5jZSBvZiBWOC4KKyAgICBpZiAoY29udGV4dC0+aXNK
U0V4ZWN1dGlvbkZvcmJpZGRlbigpKQorICAgICAgICByZXR1cm47CisKICAgICBBU1NFUlQoZXZl
bnQpOwogCiAgICAgLy8gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG9uIFhNTEh0dHBSZXF1ZXN0IGNh
biBjbGVhciB0aGUgZXZlbnQgbGlzdGVuZXIgYW5kIGRlc3Ryb3lzICd0aGlzJyBvYmplY3QuIEtl
ZXAgYSBsb2NhbCByZWZlcmVuY2UgdG8gaXQuCkBAIC0xNTAsOCArMTU0LDEyIEBAIHZvaWQgVjhB
YnN0cmFjdEV2ZW50TGlzdGVuZXI6Omludm9rZUV2ZW50SGFuZGxlcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0CiAgICAgICAgIHJldHVyblZhbHVlID0gY2FsbExpc3RlbmVyRnVuY3Rp
b24oY29udGV4dCwganNFdmVudCwgZXZlbnQpOwogICAgICAgICBpZiAodHJ5Q2F0Y2guSGFzQ2F1
Z2h0KCkpCiAgICAgICAgICAgICBldmVudC0+dGFyZ2V0KCktPnVuY2F1Z2h0RXhjZXB0aW9uSW5F
dmVudEhhbmRsZXIoKTsKLSAgICAgICAgaWYgKCF0cnlDYXRjaC5DYW5Db250aW51ZSgpKQorCisg
ICAgICAgIGlmICghdHJ5Q2F0Y2guQ2FuQ29udGludWUoKSkgeyAgLy8gVGVybWluYXRlRXhlY3V0
aW9uKCkgaGFwcGVuZWQuCisgICAgICAgICAgICBpZiAoY29udGV4dC0+aXNXb3JrZXJDb250ZXh0
KCkpCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQp
LT5zY3JpcHQoKS0+Zm9yYmlkRXhlY3V0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KICAgICAgICAgdHJ5Q2F0Y2guUmVzZXQoKTsKIAogICAgICAgICAvLyBSZXN0b3JlIHRo
ZSBvbGQgZXZlbnQuIFRoaXMgbXVzdCBiZSBkb25lIGZvciBhbGwgZXhpdCBwYXRocyB0aHJvdWdo
IHRoaXMgbWV0aG9kLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29y
a2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKaW5kZXggZWI3MjUyYi4uZDVlNWJlNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250
ZXh0RXhlY3V0aW9uUHJveHkuY3BwCkBAIC0yMDAsOCArMjAwLDEwIEBAIFNjcmlwdFZhbHVlIFdv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQs
IGNvbnN0IFN0CiAgICAgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBjb21waWxlZFNjcmlwdCA9IFY4
UHJveHk6OmNvbXBpbGVTY3JpcHQoc2NyaXB0U3RyaW5nLCBmaWxlTmFtZSwgc2NyaXB0U3RhcnRQ
b3NpdGlvbik7CiAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gcmVzdWx0ID0gcnVuU2NyaXB0KGNv
bXBpbGVkU2NyaXB0KTsKIAotICAgIGlmICghZXhjZXB0aW9uQ2F0Y2hlci5DYW5Db250aW51ZSgp
KQorICAgIGlmICghZXhjZXB0aW9uQ2F0Y2hlci5DYW5Db250aW51ZSgpKSB7CisgICAgICAgIG1f
d29ya2VyQ29udGV4dC0+c2NyaXB0LT5mb3JiaWRFeGVjdXRpb24oKTsKICAgICAgICAgcmV0dXJu
IFNjcmlwdFZhbHVlKCk7CisgICAgfQogCiAgICAgaWYgKGV4Y2VwdGlvbkNhdGNoZXIuSGFzQ2F1
Z2h0KCkpIHsKICAgICAgICAgdjg6OkxvY2FsPHY4OjpNZXNzYWdlPiBtZXNzYWdlID0gZXhjZXB0
aW9uQ2F0Y2hlci5NZXNzYWdlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDQyZTAyZTYuLmY2NmU5MmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRy
b2xsZXIuY3BwCkBAIC02OCwxMSArNjgsOCBAQCBTY3JpcHRWYWx1ZSBXb3JrZXJTY3JpcHRDb250
cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQogCiBT
Y3JpcHRWYWx1ZSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRT
b3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBTY3JpcHRWYWx1ZSogZXhjZXB0aW9uKQogewotICAgIHsK
LSAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX3NoYXJlZERhdGFNdXRleCk7Ci0gICAgICAgIGlm
IChtX2V4ZWN1dGlvbkZvcmJpZGRlbikKLSAgICAgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgp
OwotICAgIH0KKyAgICBpZiAoaXNFeGVjdXRpb25Gb3JiaWRkZW4oKSkKKyAgICAgIHJldHVybiBT
Y3JpcHRWYWx1ZSgpOwogCiAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblN0YXRlIHN0YXRlOwog
ICAgIFNjcmlwdFZhbHVlIHJlc3VsdCA9IG1fcHJveHktPmV2YWx1YXRlKHNvdXJjZUNvZGUuc291
cmNlKCksIHNvdXJjZUNvZGUudXJsKCkuc3RyaW5nKCksIFdURjo6dG9aZXJvQmFzZWRUZXh0UG9z
aXRpb24oc291cmNlQ29kZS5zdGFydFBvc2l0aW9uKCkpLCAmc3RhdGUpOwpAQCAtODYsMTMgKzgz
LDIxIEBAIFNjcmlwdFZhbHVlIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0
IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
dm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpmb3JiaWRFeGVjdXRpb24oRm9yYmlkRXhlY3V0
aW9uT3B0aW9uIG9wdGlvbikKK3ZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6c2NoZWR1bGVF
eGVjdXRpb25UZXJtaW5hdGlvbigpCit7CisgICAgdjg6OlY4OjpUZXJtaW5hdGVFeGVjdXRpb24o
KTsKK30KKwordm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpmb3JiaWRFeGVjdXRpb24oKQog
ewotICAgIC8vIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBmcm9tIGFub3RoZXIgdGhyZWFk
LgotICAgIE11dGV4TG9ja2VyIGxvY2sobV9zaGFyZWREYXRhTXV0ZXgpOworICAgIEFTU0VSVCht
X3dvcmtlckNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICBtX2V4ZWN1dGlvbkZvcmJp
ZGRlbiA9IHRydWU7Ci0gICAgaWYgKG9wdGlvbiA9PSBUZXJtaW5hdGVSdW5uaW5nU2NyaXB0KQot
ICAgICAgICB2ODo6Vjg6OlRlcm1pbmF0ZUV4ZWN1dGlvbigpOworfQorCitib29sIFdvcmtlclNj
cmlwdENvbnRyb2xsZXI6OmlzRXhlY3V0aW9uRm9yYmlkZGVuKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQobV93b3JrZXJDb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgcmV0dXJuIG1fZXhl
Y3V0aW9uRm9yYmlkZGVuOwogfQogCiB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OnNldEV4
Y2VwdGlvbihTY3JpcHRWYWx1ZSBleGNlcHRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgKaW5kZXggNWUzMTU5Zi4uZGYyMDM1
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29u
dHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENv
bnRyb2xsZXIuaApAQCAtNDgsNyArNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IFdvcmtlclNjcmlwdENvbnRyb2xsZXIoV29ya2VyQ29udGV4dCopOwogICAgICAgICB+V29ya2Vy
U2NyaXB0Q29udHJvbGxlcigpOwogCi0gICAgICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eSogcHJveHkoKSB7IHJldHVybiBtX2V4ZWN1dGlvbkZvcmJpZGRlbiA/IDAgOiBtX3Byb3h5Lmdl
dCgpOyB9CisgICAgICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSogcHJveHkoKSB7IHJl
dHVybiBtX3Byb3h5LmdldCgpOyB9CiAgICAgICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRl
eHQoKSB7IHJldHVybiBtX3dvcmtlckNvbnRleHQ7IH0KIAogICAgICAgICBTY3JpcHRWYWx1ZSBl
dmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJik7CkBAIC01Niw5ICs1NiwxNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBzZXRFeGNlcHRpb24oU2NyaXB0VmFsdWUp
OwogCi0gICAgICAgIGVudW0gRm9yYmlkRXhlY3V0aW9uT3B0aW9uIHsgVGVybWluYXRlUnVubmlu
Z1NjcmlwdCwgTGV0UnVubmluZ1NjcmlwdEZpbmlzaCB9OwotICAgICAgICB2b2lkIGZvcmJpZEV4
ZWN1dGlvbihGb3JiaWRFeGVjdXRpb25PcHRpb24pOwotICAgICAgICBib29sIGlzRXhlY3V0aW9u
Rm9yYmlkZGVuKCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRpb25Gb3JiaWRkZW47IH0KKyAgICAg
ICAgLy8gQXN5bmMgcmVxdWVzdCB0byB0ZXJtaW5hdGUgYSBmdXR1cmUgSlMgZXhlY3V0aW9uLiBF
dmVudHVhbGx5IGNhdXNlcyB0ZXJtaW5hdGlvbgorICAgICAgICAvLyBleGNlcHRpb24gcmFpc2Vk
IGR1cmluZyBKUyBleGVjdXRpb24sIGlmIHRoZSB3b3JrZXIgdGhyZWFkIGhhcHBlbnMgdG8gcnVu
IEpTLgorICAgICAgICAvLyBBZnRlciBKUyBleGVjdXRpb24gd2FzIHRlcm1pbmF0ZWQgaW4gdGhp
cyB3YXksIHRoZSBXb3JrZXIgdGhyZWFkIGhhcyB0byB1c2UKKyAgICAgICAgLy8gZm9yYmlkRXhl
Y3V0aW9uKCkvaXNFeGVjdXRpb25Gb3JiaWRkZW4oKSB0byBndWFyZCBhZ2FpbnN0IHJlZW50cnkg
aW50byBKUy4KKyAgICAgICAgLy8gQ2FuIGJlIGNhbGxlZCBmcm9tIGFueSB0aHJlYWQuIAorICAg
ICAgICB2b2lkIHNjaGVkdWxlRXhlY3V0aW9uVGVybWluYXRpb24oKTsKKworICAgICAgICAvLyBD
YWxsZWQgb24gV29ya2VyIHRocmVhZCB3aGVuIEpTIGV4aXRzIHdpdGggdGVybWluYXRpb24gZXhj
ZXB0aW9uIGNhdXNlZCBieSBmb3JiaWRFeGVjdXRpb24oKSByZXF1ZXN0LAorICAgICAgICAvLyBv
ciBieSBXb3JrZXIgdGhyZWFkIHRlcm1pbmF0aW9uIGNvZGUgdG8gcHJldmVudCBmdXR1cmUgZW50
cnkgaW50byBKUy4KKyAgICAgICAgdm9pZCBmb3JiaWRFeGVjdXRpb24oKTsKKyAgICAgICAgYm9v
bCBpc0V4ZWN1dGlvbkZvcmJpZGRlbigpIGNvbnN0OwogCiAgICAgICAgIC8vIFJldHVybnMgV29y
a2VyU2NyaXB0Q29udHJvbGxlciBmb3IgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgY29udGV4dC4g
MCB3aWxsIGJlIHJldHVybmVkIGlmIHRoZSBjdXJyZW50IGV4ZWN1dGluZyBjb250ZXh0IGlzIG5v
dCB0aGUgd29ya2VyIGNvbnRleHQuCiAgICAgICAgIHN0YXRpYyBXb3JrZXJTY3JpcHRDb250cm9s
bGVyKiBjb250cm9sbGVyRm9yQ29udGV4dCgpOwpAQCAtNjYsOCArNzQsNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgV29ya2VyQ29udGV4dCogbV93b3JrZXJD
b250ZXh0OwogICAgICAgICBPd25QdHI8V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5PiBtX3By
b3h5OwotCi0gICAgICAgIE11dGV4IG1fc2hhcmVkRGF0YU11dGV4OwogICAgICAgICBib29sIG1f
ZXhlY3V0aW9uRm9yYmlkZGVuOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggMjNh
NDI1ZC4uMDZlY2ZmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTEwNDUsNyArMTA0NSw3IEBA
IHB1YmxpYzoKICNlbmRpZgogCiAgICAgdmlydHVhbCBib29sIGlzQ29udGV4dFRocmVhZCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0pTRXhlY3V0aW9uVGVybWluYXRlZCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzSlNFeGVjdXRpb25Gb3JiaWRkZW4o
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdm9pZCBzZXRVc2luZ0dlb2xvY2F0aW9u
KGJvb2wgZikgeyBtX3VzaW5nR2VvbG9jYXRpb24gPSBmOyB9CiAgICAgYm9vbCB1c2luZ0dlb2xv
Y2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV91c2luZ0dlb2xvY2F0aW9uOyB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9NZXNzYWdlUG9ydC5jcHAKaW5kZXggMWI3YWVhNy4uNjY0NGFiMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
TWVzc2FnZVBvcnQuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50
LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJUaW1lci5oIgorI2lu
Y2x1ZGUgIldvcmtlckNvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTcxLDYgKzE3MiwxMCBAQCB2b2lkIE1lc3Nh
Z2VQb3J0OjpkaXNwYXRjaE1lc3NhZ2VzKCkKIAogICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5u
ZWw6OkV2ZW50RGF0YT4gZXZlbnREYXRhOwogICAgIHdoaWxlIChtX2VudGFuZ2xlZENoYW5uZWwg
JiYgbV9lbnRhbmdsZWRDaGFubmVsLT50cnlHZXRNZXNzYWdlRnJvbVJlbW90ZShldmVudERhdGEp
KSB7CisgICAgICAgIC8vIGNsb3NlKCkgaW4gV29ya2VyIG9ubWVzc2FnZSBoYW5kbGVyIHNob3Vs
ZCBwcmV2ZW50IG5leHQgbWVzc2FnZSBmcm9tIGRpc3BhdGNoaW5nLgorICAgICAgICBpZiAobV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSAmJiBzdGF0aWNfY2FzdDxX
b3JrZXJDb250ZXh0Kj4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KS0+aXNDbG9zaW5nKCkpCisg
ICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgT3duUHRyPE1lc3NhZ2VQb3J0QXJyYXk+IHBv
cnRzID0gTWVzc2FnZVBvcnQ6OmVudGFuZ2xlUG9ydHMoKm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCwgZXZlbnREYXRhLT5jaGFubmVscygpKTsKICAgICAgICAgUmVmUHRyPEV2ZW50PiBldnQgPSBN
ZXNzYWdlRXZlbnQ6OmNyZWF0ZShwb3J0cy5yZWxlYXNlKCksIGV2ZW50RGF0YS0+bWVzc2FnZSgp
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKaW5kZXgg
M2IzN2YwYy4uODQwNzY5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oCkBAIC04Miw3ICs4Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dm9pZCBzdG9wRGF0YWJhc2VzKERhdGFiYXNlVGFza1N5bmNocm9uaXplciopOwogI2VuZGlmCiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRleHRUaHJlYWQoKSBjb25zdCA9IDA7Ci0gICAgICAg
IHZpcnR1YWwgYm9vbCBpc0pTRXhlY3V0aW9uVGVybWluYXRlZCgpIGNvbnN0ID0gMDsKKyAgICAg
ICAgdmlydHVhbCBib29sIGlzSlNFeGVjdXRpb25Gb3JiaWRkZW4oKSBjb25zdCA9IDA7CiAKICAg
ICAgICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFVSTCgpOyB9CiAg
ICAgICAgIEtVUkwgY29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0IHsgcmV0dXJu
IHZpcnR1YWxDb21wbGV0ZVVSTCh1cmwpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJD
b250ZXh0LmNwcAppbmRleCAzYjE0ZTU5Li5iNTEyNjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyQ29udGV4dC5jcHAKQEAgLTE2Nyw5ICsxNjcsMTAgQEAgdm9pZCBXb3JrZXJDb250
ZXh0OjpjbG9zZSgpCiAgICAgaWYgKG1fY2xvc2luZykKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9jbG9zaW5nID0gdHJ1ZTsKICAgICAvLyBMZXQgY3VycmVudCBzY3JpcHQgcnVuIHRvIGNvbXBs
ZXRpb24gYnV0IHByZXZlbnQgZnV0dXJlIHNjcmlwdCBldmFsdWF0aW9ucy4KLSAgICBtX3Njcmlw
dC0+Zm9yYmlkRXhlY3V0aW9uKFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OkxldFJ1bm5pbmdTY3Jp
cHRGaW5pc2gpOworICAgIC8vIEFmdGVyIG1fY2xvc2luZyBpcyBzZXQsIGFsbCB0aGUgdGFza3Mg
aW4gdGhlIHF1ZXVlIGNvbnRpbnVlIHRvIGJlIGZldGNoZWQgYnV0IG9ubHkKKyAgICAvLyB0YXNr
cyB3aXRoIGlzQ2xlYW51cFRhc2soKT09dHJ1ZSB3aWxsIGJlIGV4ZWN1dGVkLgorICAgIG1fY2xv
c2luZyA9IHRydWU7CiAgICAgcG9zdFRhc2soQ2xvc2VXb3JrZXJDb250ZXh0VGFzazo6Y3JlYXRl
KCkpOwogfQogCkBAIC0zMjAsNyArMzIxLDcgQEAgYm9vbCBXb3JrZXJDb250ZXh0Ojppc0NvbnRl
eHRUaHJlYWQoKSBjb25zdAogICAgIHJldHVybiBjdXJyZW50VGhyZWFkKCkgPT0gdGhyZWFkKCkt
PnRocmVhZElEKCk7CiB9CiAKLWJvb2wgV29ya2VyQ29udGV4dDo6aXNKU0V4ZWN1dGlvblRlcm1p
bmF0ZWQoKSBjb25zdAorYm9vbCBXb3JrZXJDb250ZXh0Ojppc0pTRXhlY3V0aW9uRm9yYmlkZGVu
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zY3JpcHQtPmlzRXhlY3V0aW9uRm9yYmlkZGVuKCk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaCBi
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCmluZGV4IGQyY2NiMTEuLjk1
M2ZmMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCkBAIC0xMjAsNyAr
MTIwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0YWJh
c2VFeGNlZWRlZFF1b3RhKGNvbnN0IFN0cmluZyYpOwogI2VuZGlmCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc0NvbnRleHRUaHJlYWQoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIGlzSlNF
eGVjdXRpb25UZXJtaW5hdGVkKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0pTRXhl
Y3V0aW9uRm9yYmlkZGVuKCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoQkxPQikKICAgICAgICAgRE9N
VVJMKiB3ZWJraXRVUkwoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFk
LmNwcAppbmRleCBkZWFmYjBiLi5hZWY5MzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJUaHJlYWQuY3BwCkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCogV29ya2VyVGhyZWFkOjp3b3Jr
ZXJUaHJlYWQoKQogICAgICAgICBpZiAobV9ydW5Mb29wLnRlcm1pbmF0ZWQoKSkgewogICAgICAg
ICAgICAgLy8gVGhlIHdvcmtlciB3YXMgdGVybWluYXRlZCBiZWZvcmUgdGhlIHRocmVhZCBoYWQg
YSBjaGFuY2UgdG8gcnVuLiBTaW5jZSB0aGUgY29udGV4dCBkaWRuJ3QgZXhpc3QgeWV0LAogICAg
ICAgICAgICAgLy8gZm9yYmlkRXhlY3V0aW9uKCkgY291bGRuJ3QgYmUgY2FsbGVkIGZyb20gc3Rv
cCgpLgotICAgICAgICAgICBtX3dvcmtlckNvbnRleHQtPnNjcmlwdCgpLT5mb3JiaWRFeGVjdXRp
b24oV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6VGVybWluYXRlUnVubmluZ1NjcmlwdCk7CisgICAg
ICAgICAgIG1fd29ya2VyQ29udGV4dC0+c2NyaXB0KCktPmZvcmJpZEV4ZWN1dGlvbigpOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC0yMjgsNyArMjI4LDcgQEAgdm9pZCBXb3JrZXJUaHJlYWQ6OnN0
b3AoKQogCiAgICAgLy8gRW5zdXJlIHRoYXQgdGFza3MgYXJlIGJlaW5nIGhhbmRsZWQgYnkgdGhy
ZWFkIGV2ZW50IGxvb3AuIElmIHNjcmlwdCBleGVjdXRpb24gd2VyZW4ndCBmb3JiaWRkZW4sIGEg
d2hpbGUoMSkgbG9vcCBpbiBKUyBjb3VsZCBrZWVwIHRoZSB0aHJlYWQgYWxpdmUgZm9yZXZlci4K
ICAgICBpZiAobV93b3JrZXJDb250ZXh0KSB7Ci0gICAgICAgIG1fd29ya2VyQ29udGV4dC0+c2Ny
aXB0KCktPmZvcmJpZEV4ZWN1dGlvbihXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpUZXJtaW5hdGVS
dW5uaW5nU2NyaXB0KTsKKyAgICAgICAgbV93b3JrZXJDb250ZXh0LT5zY3JpcHQoKS0+c2NoZWR1
bGVFeGVjdXRpb25UZXJtaW5hdGlvbigpOwogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogICAgICAg
ICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5pbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250
ZXh0KG1fd29ya2VyQ29udGV4dC5nZXQoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87632</attachid>
            <date>2011-03-30 15:57:37 -0700</date>
            <delta_ts>2011-04-01 15:52:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57090-20110330155736.patch</filename>
            <type>text/plain</type>
            <size>22000</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE5NzEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjNTI1ZWVmNzVmNTM5ZGYx
NDk5ZDZhMjRmZTkyMWU4YWE0MzVhNTQ0Li44ODE2Njk1YzI2MGQ3MWZlOWFhYjY5ODRkM2ViMjQx
Nzg4MDU0ZTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjQgQEAKKzIwMTEtMDMtMzAgIERtaXRy
eSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgU2ltcGxpZnlpbmcgV29ya2VyIHRlcm1pbmF0aW9uIHNl
cXVlbmNlIChyZW1vdmluZyB1bm5lY2Vzc2FyeSBtdXRleCkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3MDkwCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LiBFeGlzdGluZyBXb3JrZXIgdGVzdHMgc2hvdWxkIHBhc3MuCisKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3Rl
bmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgIENoZWNrIGZvciBUZXJtaW5hdG9yLWNhdXNlZCBl
eGNlcHRpb24gKG9yIFRlcm1pbmF0b3I6OnNob3VsZFRlcm1pbmF0ZSBzaW5jZSBzb21ldGltZXMK
KyAgICAgICAgSlMgbWlnaHQgbm90IHJ1biBzaWduaWZpY2FudCBlbm91Z2ggY2h1bmsgdG8gYmUg
dGVybWluYXRlZCBieSBUZXJtaW5hdG9yKSBhbmQgc2V0CisgICAgICAgIHRoZSBmbGFnIHRvIGZv
cmJpZCBmdXR1cmUgcmVlbnRyeSBpbnRvIEpTLgorCisgICAgICAgICogYmluZGluZ3MvanMvV29y
a2VyU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRD
b250cm9sbGVyOjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250
cm9sbGVyOjpzY2hlZHVsZUV4ZWN1dGlvblRlcm1pbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmZvcmJpZEV4ZWN1dGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjppc0V4ZWN1dGlvbkZvcmJpZGRlbik6CisgICAg
ICAgICogYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyU2NyaXB0Q29udHJvbGxlcjo6c2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpmb3JiaWRFeGVjdXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6aXNFeGVjdXRpb25Gb3Ji
aWRkZW4pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OnByb3h5KToKKyAgICAg
ICAgU3ltbWV0cmljYWwgY2hhbmdlcyB0byBKU0MgYW5kIFY4IFdvcmtlclNjcmlwdENvbnRyb2xs
ZXJzOgorICAgICAgICAtIHJlbW92ZSBNdXRleCBhcm91bmQgb3BlcmF0aW9ucyB3aXRoIGV4ZWN1
dGlvbkZvcmJpZGRlbiBmbGFnLgorICAgICAgICAtIHNldC9jaGVjayB0aGF0IGZsYWcgb25seSBv
biBXb3JrZXIgdGhyZWFkLgorICAgICAgICAtIHNvbWUgcmVuYW1pbmcgaW4gYXR0ZW1wdCB0byBi
ZXR0ZXIgcmVmbGVjdCB3aGF0IHRoZSBtZXRob2RzIGRvLgorCisgICAgICAgICogYmluZGluZ3Mv
djgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhBYnN0
cmFjdEV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlY4QWJz
dHJhY3RFdmVudExpc3RlbmVyOjppbnZva2VFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmV2YWx1YXRlKToKKyAgICAgICAgQ2hlY2sg
Zm9yIHY4OjpUcnlDYXRjaDo6Q2FuQ29udGludWUoKSBhbmQgc2V0IGZvcmJpZEV4ZWN1dGlvbiBm
bGFnLgorICAgICAgICBUaGlzIHJlc3VsdCBpbmRpY2F0ZXMgdGhhdCBUZXJtaW5hdGVFeGVjdXRp
b24oKSB3YXMgaW4gZWZmZWN0IC0gd2Ugc2hvdWxkCisgICAgICAgIG5vdCByZWVudGVyIFY4IGFu
eW1vcmUgYWZ0ZXIgdGhhdC4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OmlzSlNFeGVjdXRpb25Gb3JiaWRkZW4pOgorICAgICAgICAqIGRv
bS9NZXNzYWdlUG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6ZGlzcGF0
Y2hNZXNzYWdlcyk6CisgICAgICAgIFN0b3AgZGlzcGF0Y2hpbmcgbWVzc2FnZXMgb25jZSB0aGUg
d29ya2VyIGNvbnRleHQgc3RhcnRlZCB0byBjbG9zZS4KKyAgICAgICAgUGVyIFdvcmtlcnMgc3Bl
Yywgb25jZSBXb3JrZXJHbG9iYWxTY29wZS5DbG9zZSgpIGlzIGNhbGxlZCwgdGhlIG5leHQKKyAg
ICAgICAgSlMgZXhlY3V0aW9uIGRvZXMgbm90IGhhcHBlbiwgaW5jbHVkaW5nIG9ubWVzc2FnZSBl
dmVudHMuIEJlZm9yZSB0aGlzCisgICAgICAgIGNoYW5nZSwgQ2xvc2UoKSB3YXMgc2V0dGluZyB0
aGUgZm9yYmlkRXhlY3V0aW9uIGZsYWcsIGluZGlyZWN0bHkgc3RvcHBpbmcKKyAgICAgICAgZXZl
bnRzIGZyb20gZGlzcGF0Y2hpbmcuCisKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJD
b250ZXh0Ojppc0pTRXhlY3V0aW9uRm9yYmlkZGVuKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtl
ckNvbnRleHQuaDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclRocmVhZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJUaHJlYWQ6OnN0b3ApOgorCiAyMDExLTAzLTI1ICBQYXZlbCBGZWxkbWFuICA8cGZl
bGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRz
a3kuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVu
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcApp
bmRleCBlNDQ0ZDg4ODQwMGM4N2I5ZDdjN2RhOThhYzM2YTgyYjBhMDM5ODM1Li4wYWVjZGNlN2I1
YTAxMzgxNWY3MzVkOGE1YWZlMzgxOWFiNWEyNGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRl
ICJKU0V2ZW50LmgiCiAjaW5jbHVkZSAiSlNFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIkpTTWFp
blRocmVhZEV4ZWNTdGF0ZS5oIgorI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKICNpbmNsdWRl
IDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIu
aD4KIApAQCAtNjAsNyArNjEsNyBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6bWFya0pTRnVuY3Rp
b24oTWFya1N0YWNrJiBtYXJrU3RhY2spCiB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZl
bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgRXZlbnQq
IGV2ZW50KQogewogICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKLSAgICBpZiAo
IXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgfHwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNKU0V4
ZWN1dGlvblRlcm1pbmF0ZWQoKSkKKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgfHwg
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNKU0V4ZWN1dGlvbkZvcmJpZGRlbigpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwpAQCAt
MTI2LDYgKzEyNywxMiBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dAogCiAgICAgICAgIGdsb2Jh
bE9iamVjdC0+c2V0Q3VycmVudEV2ZW50KHNhdmVkRXZlbnQpOwogCisgICAgICAgIGlmIChzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSkgeworICAgICAgICAgICAgYm9v
bCB0ZXJtaW5hdG9yQ2F1c2VkRXhjZXB0aW9uID0gKGV4ZWMtPmhhZEV4Y2VwdGlvbigpICYmIGV4
ZWMtPmV4Y2VwdGlvbigpLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoZXhlYy0+ZXhjZXB0aW9uKCkp
LT5leGNlcHRpb25UeXBlKCkgPT0gVGVybWluYXRlZCk7CisgICAgICAgICAgICBpZiAodGVybWlu
YXRvckNhdXNlZEV4Y2VwdGlvbiB8fCBnbG9iYWxEYXRhLnRlcm1pbmF0b3Iuc2hvdWxkVGVybWlu
YXRlKCkpCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQpLT5zY3JpcHQoKS0+Zm9yYmlkRXhlY3V0aW9uKCk7CisgICAgICAg
IH0KKwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAgICAgICAgICAgIGV2
ZW50LT50YXJnZXQoKS0+dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcigpOwogICAgICAg
ICAgICAgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihleGVjKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggNjdiMDQ0
MWFhMjJhNGY1MDRiYWZiNTBhZjJjMzIyZjFhYTM3NTYxMi4uZWZhYTc1ZDk1YjkzMTAxYzBjOTU3
MTI5ZDJlNGY0YTI5MDRjNDc5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTEwMCwxMSArMTAwLDkgQEAgdm9p
ZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjppbml0U2NyaXB0KCkKIAogU2NyaXB0VmFsdWUgV29y
a2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291
cmNlQ29kZSkKIHsKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9zaGFyZWREYXRh
TXV0ZXgpOwotICAgICAgICBpZiAobV9leGVjdXRpb25Gb3JiaWRkZW4pCi0gICAgICAgICAgICBy
ZXR1cm4gU2NyaXB0VmFsdWUoKTsKLSAgICB9CisgICAgaWYgKGlzRXhlY3V0aW9uRm9yYmlkZGVu
KCkpCisgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOworCiAgICAgU2NyaXB0VmFsdWUgZXhj
ZXB0aW9uOwogICAgIFNjcmlwdFZhbHVlIHJlc3VsdChldmFsdWF0ZShzb3VyY2VDb2RlLCAmZXhj
ZXB0aW9uKSk7CiAgICAgaWYgKGV4Y2VwdGlvbi5qc1ZhbHVlKCkpIHsKQEAgLTExNiwxMSArMTE0
LDggQEAgU2NyaXB0VmFsdWUgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY29uc3Qg
U2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSkKIAogU2NyaXB0VmFsdWUgV29ya2VyU2NyaXB0
Q29udHJvbGxlcjo6ZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSwg
U2NyaXB0VmFsdWUqIGV4Y2VwdGlvbikKIHsKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxv
Y2sobV9zaGFyZWREYXRhTXV0ZXgpOwotICAgICAgICBpZiAobV9leGVjdXRpb25Gb3JiaWRkZW4p
Ci0gICAgICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKLSAgICB9CisgICAgaWYgKGlzRXhl
Y3V0aW9uRm9yYmlkZGVuKCkpCisgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOwogCiAgICAg
aW5pdFNjcmlwdElmTmVlZGVkKCk7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKQEAgLTEzMCwxMCArMTI1LDE4IEBAIFNjcmlwdFZhbHVlIFdvcmtlclNjcmlwdENvbnRy
b2xsZXI6OmV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsCiAgICAg
Q29tcGxldGlvbiBjb21wID0gSlNDOjpldmFsdWF0ZShleGVjLCBleGVjLT5keW5hbWljR2xvYmFs
T2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwgc291cmNlQ29kZS5qc1NvdXJjZUNvZGUoKSwg
bV93b3JrZXJDb250ZXh0V3JhcHBlci5nZXQoKSk7CiAgICAgbV93b3JrZXJDb250ZXh0V3JhcHBl
ci0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKIAotICAgIGlmIChjb21wLmNv
bXBsVHlwZSgpID09IE5vcm1hbCB8fCBjb21wLmNvbXBsVHlwZSgpID09IFJldHVyblZhbHVlKQor
CisgICAgQ29tcGxUeXBlIGNvbXBsZXRpb25UeXBlID0gY29tcC5jb21wbFR5cGUoKTsKKworICAg
IGlmIChjb21wbGV0aW9uVHlwZSA9PSBUZXJtaW5hdGVkIHx8IG1fd29ya2VyQ29udGV4dFdyYXBw
ZXItPmdsb2JhbERhdGEoKS50ZXJtaW5hdG9yLnNob3VsZFRlcm1pbmF0ZSgpKSB7CisgICAgICAg
IGZvcmJpZEV4ZWN1dGlvbigpOworICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKKyAgICB9
CisKKyAgICBpZiAoY29tcGxldGlvblR5cGUgPT0gTm9ybWFsIHx8IGNvbXBsZXRpb25UeXBlID09
IFJldHVyblZhbHVlKQogICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKm1fZ2xvYmFsRGF0YSwg
Y29tcC52YWx1ZSgpKTsKIAotICAgIGlmIChjb21wLmNvbXBsVHlwZSgpID09IFRocm93KSB7Cisg
ICAgaWYgKGNvbXBsZXRpb25UeXBlID09IFRocm93KSB7CiAgICAgICAgIFN0cmluZyBlcnJvck1l
c3NhZ2U7CiAgICAgICAgIGludCBsaW5lTnVtYmVyID0gMDsKICAgICAgICAgU3RyaW5nIHNvdXJj
ZVVSTCA9IHNvdXJjZUNvZGUudXJsKCkuc3RyaW5nKCk7CkBAIC0xNTAsMTYgKzE1MywyMSBAQCB2
b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OnNldEV4Y2VwdGlvbihTY3JpcHRWYWx1ZSBleGNl
cHRpb24pCiAgICAgdGhyb3dFcnJvcihtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5nbG9iYWxFeGVj
KCksIGV4Y2VwdGlvbi5qc1ZhbHVlKCkpOwogfQogCi12b2lkIFdvcmtlclNjcmlwdENvbnRyb2xs
ZXI6OmZvcmJpZEV4ZWN1dGlvbihGb3JiaWRFeGVjdXRpb25PcHRpb24gb3B0aW9uKQordm9pZCBX
b3JrZXJTY3JpcHRDb250cm9sbGVyOjpzY2hlZHVsZUV4ZWN1dGlvblRlcm1pbmF0aW9uKCkKIHsK
LSAgICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZnJvbSBhbm90aGVyIHRocmVhZC4K
LSAgICAvLyBNdXRleCBwcm90ZWN0aW9uIGZvciBtX2V4ZWN1dGlvbkZvcmJpZGRlbiBpcyBuZWVk
ZWQgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIHZhbHVlIGlzIHN5bmNocm9uaXplZCBiZXR3ZWVuIHBy
b2Nlc3NvcnMsIGJlY2F1c2UKLSAgICAvLyBpZiBpdCB3ZXJlIG5vdCwgdGhlIHdvcmtlciBjb3Vs
ZCByZS1lbnRlciBKU0M6OmV2YWx1YXRlKCksIGJ1dCB3aXRoIHRpbWVvdXQgYWxyZWFkeSByZXNl
dC4KLSAgICAvLyBJdCBpcyBub3QgY3JpdGljYWwgZm9yIFRlcm1pbmF0b3I6Om1fc2hvdWxkVGVy
bWluYXRlIHRvIGJlIHN5bmNocm9uaXplZCwgd2UganVzdCByZWx5IG9uIGl0IHJlYWNoaW5nIHRo
ZSB3b3JrZXIgdGhyZWFkJ3MgcHJvY2Vzc29yIHNvb25lciBvciBsYXRlci4KLSAgICBNdXRleExv
Y2tlciBsb2NrKG1fc2hhcmVkRGF0YU11dGV4KTsKKyAgICBtX2dsb2JhbERhdGEtPnRlcm1pbmF0
b3IudGVybWluYXRlU29vbigpOworfQorCit2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmZv
cmJpZEV4ZWN1dGlvbigpCit7CisgICAgQVNTRVJUKG1fd29ya2VyQ29udGV4dC0+aXNDb250ZXh0
VGhyZWFkKCkpOwogICAgIG1fZXhlY3V0aW9uRm9yYmlkZGVuID0gdHJ1ZTsKLSAgICBpZiAob3B0
aW9uID09IFRlcm1pbmF0ZVJ1bm5pbmdTY3JpcHQpCi0gICAgICAgIG1fZ2xvYmFsRGF0YS0+dGVy
bWluYXRvci50ZXJtaW5hdGVTb29uKCk7Cit9CisKK2Jvb2wgV29ya2VyU2NyaXB0Q29udHJvbGxl
cjo6aXNFeGVjdXRpb25Gb3JiaWRkZW4oKSBjb25zdAoreworICAgIEFTU0VSVChtX3dvcmtlckNv
bnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICByZXR1cm4gbV9leGVjdXRpb25Gb3JiaWRk
ZW47CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaAppbmRleCBjM2I4MjE1ZGQ2MTUz
OWJlYmFlOGM0Y2FiMGRlMTczMjMyNjZiNjA2Li41YWMwNDgyMTQxOTkyMTI3MGU3YTQxZWI0MmMx
MGI3ZGQ4ODQ3MTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3Jr
ZXJTY3JpcHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29y
a2VyU2NyaXB0Q29udHJvbGxlci5oCkBAIC02MSw5ICs2MSwxNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgdm9pZCBzZXRFeGNlcHRpb24oU2NyaXB0VmFsdWUpOwogCi0gICAgICAg
IGVudW0gRm9yYmlkRXhlY3V0aW9uT3B0aW9uIHsgVGVybWluYXRlUnVubmluZ1NjcmlwdCwgTGV0
UnVubmluZ1NjcmlwdEZpbmlzaCB9OwotICAgICAgICB2b2lkIGZvcmJpZEV4ZWN1dGlvbihGb3Ji
aWRFeGVjdXRpb25PcHRpb24pOwotICAgICAgICBib29sIGlzRXhlY3V0aW9uRm9yYmlkZGVuKCkg
Y29uc3QgeyByZXR1cm4gbV9leGVjdXRpb25Gb3JiaWRkZW47IH0KKyAgICAgICAgLy8gQXN5bmMg
cmVxdWVzdCB0byB0ZXJtaW5hdGUgYSBKUyBydW4gZXhlY3V0aW9uLiBFdmVudHVhbGx5IGNhdXNl
cyB0ZXJtaW5hdGlvbgorICAgICAgICAvLyBleGNlcHRpb24gcmFpc2VkIGR1cmluZyBKUyBleGVj
dXRpb24sIGlmIHRoZSB3b3JrZXIgdGhyZWFkIGhhcHBlbnMgdG8gcnVuIEpTLgorICAgICAgICAv
LyBBZnRlciBKUyBleGVjdXRpb24gd2FzIHRlcm1pbmF0ZWQgaW4gdGhpcyB3YXksIHRoZSBXb3Jr
ZXIgdGhyZWFkIGhhcyB0byB1c2UKKyAgICAgICAgLy8gZm9yYmlkRXhlY3V0aW9uKCkvaXNFeGVj
dXRpb25Gb3JiaWRkZW4oKSB0byBndWFyZCBhZ2FpbnN0IHJlZW50cnkgaW50byBKUy4KKyAgICAg
ICAgLy8gQ2FuIGJlIGNhbGxlZCBmcm9tIGFueSB0aHJlYWQuCisgICAgICAgIHZvaWQgc2NoZWR1
bGVFeGVjdXRpb25UZXJtaW5hdGlvbigpOworCisgICAgICAgIC8vIENhbGxlZCBvbiBXb3JrZXIg
dGhyZWFkIHdoZW4gSlMgZXhpdHMgd2l0aCB0ZXJtaW5hdGlvbiBleGNlcHRpb24gY2F1c2VkIGJ5
IGZvcmJpZEV4ZWN1dGlvbigpIHJlcXVlc3QsCisgICAgICAgIC8vIG9yIGJ5IFdvcmtlciB0aHJl
YWQgdGVybWluYXRpb24gY29kZSB0byBwcmV2ZW50IGZ1dHVyZSBlbnRyeSBpbnRvIEpTLgorICAg
ICAgICB2b2lkIGZvcmJpZEV4ZWN1dGlvbigpOworICAgICAgICBib29sIGlzRXhlY3V0aW9uRm9y
YmlkZGVuKCkgY29uc3Q7CiAKICAgICAgICAgSlNDOjpKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEo
KSB7IHJldHVybiBtX2dsb2JhbERhdGEuZ2V0KCk7IH0KIApAQCAtNzgsOCArODYsNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJlZlB0cjxKU0M6OkpTR2xvYmFsRGF0YT4gbV9nbG9i
YWxEYXRhOwogICAgICAgICBXb3JrZXJDb250ZXh0KiBtX3dvcmtlckNvbnRleHQ7CiAgICAgICAg
IEpTQzo6R2xvYmFsPEpTV29ya2VyQ29udGV4dD4gbV93b3JrZXJDb250ZXh0V3JhcHBlcjsKLQot
ICAgICAgICBNdXRleCBtX3NoYXJlZERhdGFNdXRleDsKICAgICAgICAgYm9vbCBtX2V4ZWN1dGlv
bkZvcmJpZGRlbjsKICAgICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5jcHAKaW5kZXggNmRjNDlmYThmYjkyMjIxODgw
MzI5ZjRjMjVlODQ5MDRmNjY4M2Y4Mi4uZjExMDJjMmRkOTY2YzIzOWZiOWVlM2MyNWNhODEwNDFm
OWMyYjI0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFj
dEV2ZW50TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJz
dHJhY3RFdmVudExpc3RlbmVyLmNwcApAQCAtNzIsNiArNzIsMTAgQEAgVjhBYnN0cmFjdEV2ZW50
TGlzdGVuZXI6On5WOEFic3RyYWN0RXZlbnRMaXN0ZW5lcigpCiAKIHZvaWQgVjhBYnN0cmFjdEV2
ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IEV2ZW50KiBldmVudCkKIHsKKyAgICAvLyBEb24ndCByZWVudGVyIFY4IGlmIGV4ZWN1dGlvbiB3
YXMgdGVybWluYXRlZCBpbiB0aGlzIGluc3RhbmNlIG9mIFY4LgorICAgIGlmIChjb250ZXh0LT5p
c0pTRXhlY3V0aW9uRm9yYmlkZGVuKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIEFTU0VSVChl
dmVudCk7CiAKICAgICAvLyBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gb24gWE1MSHR0cFJlcXVlc3Qg
Y2FuIGNsZWFyIHRoZSBldmVudCBsaXN0ZW5lciBhbmQgZGVzdHJveXMgJ3RoaXMnIG9iamVjdC4g
S2VlcCBhIGxvY2FsIHJlZmVyZW5jZSB0byBpdC4KQEAgLTE1MCw4ICsxNTQsMTIgQEAgdm9pZCBW
OEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aW52b2tlRXZlbnRIYW5kbGVyKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQKICAgICAgICAgcmV0dXJuVmFsdWUgPSBjYWxsTGlzdGVuZXJGdW5j
dGlvbihjb250ZXh0LCBqc0V2ZW50LCBldmVudCk7CiAgICAgICAgIGlmICh0cnlDYXRjaC5IYXND
YXVnaHQoKSkKICAgICAgICAgICAgIGV2ZW50LT50YXJnZXQoKS0+dW5jYXVnaHRFeGNlcHRpb25J
bkV2ZW50SGFuZGxlcigpOwotICAgICAgICBpZiAoIXRyeUNhdGNoLkNhbkNvbnRpbnVlKCkpCisK
KyAgICAgICAgaWYgKCF0cnlDYXRjaC5DYW5Db250aW51ZSgpKSB7IC8vIFJlc3VsdCBvZiBUZXJt
aW5hdGVFeGVjdXRpb24oKS4KKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5pc1dvcmtlckNvbnRl
eHQoKSkKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4
dCktPnNjcmlwdCgpLT5mb3JiaWRFeGVjdXRpb24oKTsKICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQogICAgICAgICB0cnlDYXRjaC5SZXNldCgpOwogCiAgICAgICAgIC8vIFJlc3RvcmUg
dGhlIG9sZCBldmVudC4gVGhpcyBtdXN0IGJlIGRvbmUgZm9yIGFsbCBleGl0IHBhdGhzIHRocm91
Z2ggdGhpcyBtZXRob2QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9X
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcAppbmRleCBlYjcyNTJiNWVmMTI0MTMx
YmI4N2E4MDU5NjZhMWNmZDY4Nzk4OTVhLi40Mjc4MTU2NjE4NTE1NmQ2NTE0N2IyNDg3ZDQ2Y2Rm
Y2ZkNmJhNDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJD
b250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKQEAgLTIwMCw4ICsyMDAsMTAgQEAgU2Ny
aXB0VmFsdWUgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpldmFsdWF0ZShjb25zdCBTdHJp
bmcmIHNjcmlwdCwgY29uc3QgU3QKICAgICB2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IGNvbXBpbGVk
U2NyaXB0ID0gVjhQcm94eTo6Y29tcGlsZVNjcmlwdChzY3JpcHRTdHJpbmcsIGZpbGVOYW1lLCBz
Y3JpcHRTdGFydFBvc2l0aW9uKTsKICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiByZXN1bHQgPSBy
dW5TY3JpcHQoY29tcGlsZWRTY3JpcHQpOwogCi0gICAgaWYgKCFleGNlcHRpb25DYXRjaGVyLkNh
bkNvbnRpbnVlKCkpCisgICAgaWYgKCFleGNlcHRpb25DYXRjaGVyLkNhbkNvbnRpbnVlKCkpIHsK
KyAgICAgICAgbV93b3JrZXJDb250ZXh0LT5zY3JpcHQoKS0+Zm9yYmlkRXhlY3V0aW9uKCk7CiAg
ICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOworICAgIH0KIAogICAgIGlmIChleGNlcHRpb25D
YXRjaGVyLkhhc0NhdWdodCgpKSB7CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6TWVzc2FnZT4gbWVz
c2FnZSA9IGV4Y2VwdGlvbkNhdGNoZXIuTWVzc2FnZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCA0MmUwMmU2
NmQyZTQzM2I3OTNiODU1YjNiZTEzOWQ3ZWE5OGNhNGQ1Li5mNjZlOTJmZTkxNmMxYzYxZTQwYjgy
OThjMzVhMzE0ZGMyZDRjMGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcApAQCAtNjgsMTEgKzY4LDggQEAgU2NyaXB0
VmFsdWUgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNl
Q29kZSYgc291cmNlQ29kZSkKIAogU2NyaXB0VmFsdWUgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6
ZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSwgU2NyaXB0VmFsdWUq
IGV4Y2VwdGlvbikKIHsKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9zaGFyZWRE
YXRhTXV0ZXgpOwotICAgICAgICBpZiAobV9leGVjdXRpb25Gb3JiaWRkZW4pCi0gICAgICAgICAg
ICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKLSAgICB9CisgICAgaWYgKGlzRXhlY3V0aW9uRm9yYmlk
ZGVuKCkpCisgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKIAogICAgIFdvcmtlckNvbnRleHRF
eGVjdXRpb25TdGF0ZSBzdGF0ZTsKICAgICBTY3JpcHRWYWx1ZSByZXN1bHQgPSBtX3Byb3h5LT5l
dmFsdWF0ZShzb3VyY2VDb2RlLnNvdXJjZSgpLCBzb3VyY2VDb2RlLnVybCgpLnN0cmluZygpLCBX
VEY6OnRvWmVyb0Jhc2VkVGV4dFBvc2l0aW9uKHNvdXJjZUNvZGUuc3RhcnRQb3NpdGlvbigpKSwg
JnN0YXRlKTsKQEAgLTg2LDEzICs4MywyMSBAQCBTY3JpcHRWYWx1ZSBXb3JrZXJTY3JpcHRDb250
cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6Zm9yYmlk
RXhlY3V0aW9uKEZvcmJpZEV4ZWN1dGlvbk9wdGlvbiBvcHRpb24pCit2b2lkIFdvcmtlclNjcmlw
dENvbnRyb2xsZXI6OnNjaGVkdWxlRXhlY3V0aW9uVGVybWluYXRpb24oKQoreworICAgIHY4OjpW
ODo6VGVybWluYXRlRXhlY3V0aW9uKCk7Cit9CisKK3ZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxl
cjo6Zm9yYmlkRXhlY3V0aW9uKCkKIHsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxs
ZWQgZnJvbSBhbm90aGVyIHRocmVhZC4KLSAgICBNdXRleExvY2tlciBsb2NrKG1fc2hhcmVkRGF0
YU11dGV4KTsKKyAgICBBU1NFUlQobV93b3JrZXJDb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7
CiAgICAgbV9leGVjdXRpb25Gb3JiaWRkZW4gPSB0cnVlOwotICAgIGlmIChvcHRpb24gPT0gVGVy
bWluYXRlUnVubmluZ1NjcmlwdCkKLSAgICAgICAgdjg6OlY4OjpUZXJtaW5hdGVFeGVjdXRpb24o
KTsKK30KKworYm9vbCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjppc0V4ZWN1dGlvbkZvcmJpZGRl
bigpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fd29ya2VyQ29udGV4dC0+aXNDb250ZXh0VGhyZWFk
KCkpOworICAgIHJldHVybiBtX2V4ZWN1dGlvbkZvcmJpZGRlbjsKIH0KIAogdm9pZCBXb3JrZXJT
Y3JpcHRDb250cm9sbGVyOjpzZXRFeGNlcHRpb24oU2NyaXB0VmFsdWUgZXhjZXB0aW9uKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxl
ci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5o
CmluZGV4IDVlMzE1OWZjYTM5MzI0MWIyMTZhMmFjOTZlZDFlZjMzMGQ4MDNlMTQuLmNjNGI3YzQx
MjU2NWQ2NGFmYzM2MjlmMTJhY2IwYjAxZTM5MjBlZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgKQEAgLTQ4LDcgKzQ4LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBXb3JrZXJTY3JpcHRDb250cm9sbGVyKFdv
cmtlckNvbnRleHQqKTsKICAgICAgICAgfldvcmtlclNjcmlwdENvbnRyb2xsZXIoKTsKIAotICAg
ICAgICBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIHByb3h5KCkgeyByZXR1cm4gbV9leGVj
dXRpb25Gb3JiaWRkZW4gPyAwIDogbV9wcm94eS5nZXQoKTsgfQorICAgICAgICBXb3JrZXJDb250
ZXh0RXhlY3V0aW9uUHJveHkqIHByb3h5KCkgeyByZXR1cm4gbV9wcm94eS5nZXQoKTsgfQogICAg
ICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0KCkgeyByZXR1cm4gbV93b3JrZXJDb250
ZXh0OyB9CiAKICAgICAgICAgU2NyaXB0VmFsdWUgZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNl
Q29kZSYpOwpAQCAtNTYsOSArNTYsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAg
IHZvaWQgc2V0RXhjZXB0aW9uKFNjcmlwdFZhbHVlKTsKIAotICAgICAgICBlbnVtIEZvcmJpZEV4
ZWN1dGlvbk9wdGlvbiB7IFRlcm1pbmF0ZVJ1bm5pbmdTY3JpcHQsIExldFJ1bm5pbmdTY3JpcHRG
aW5pc2ggfTsKLSAgICAgICAgdm9pZCBmb3JiaWRFeGVjdXRpb24oRm9yYmlkRXhlY3V0aW9uT3B0
aW9uKTsKLSAgICAgICAgYm9vbCBpc0V4ZWN1dGlvbkZvcmJpZGRlbigpIGNvbnN0IHsgcmV0dXJu
IG1fZXhlY3V0aW9uRm9yYmlkZGVuOyB9CisgICAgICAgIC8vIEFzeW5jIHJlcXVlc3QgdG8gdGVy
bWluYXRlIGEgZnV0dXJlIEpTIGV4ZWN1dGlvbi4gRXZlbnR1YWxseSBjYXVzZXMgdGVybWluYXRp
b24KKyAgICAgICAgLy8gZXhjZXB0aW9uIHJhaXNlZCBkdXJpbmcgSlMgZXhlY3V0aW9uLCBpZiB0
aGUgd29ya2VyIHRocmVhZCBoYXBwZW5zIHRvIHJ1biBKUy4KKyAgICAgICAgLy8gQWZ0ZXIgSlMg
ZXhlY3V0aW9uIHdhcyB0ZXJtaW5hdGVkIGluIHRoaXMgd2F5LCB0aGUgV29ya2VyIHRocmVhZCBo
YXMgdG8gdXNlCisgICAgICAgIC8vIGZvcmJpZEV4ZWN1dGlvbigpL2lzRXhlY3V0aW9uRm9yYmlk
ZGVuKCkgdG8gZ3VhcmQgYWdhaW5zdCByZWVudHJ5IGludG8gSlMuCisgICAgICAgIC8vIENhbiBi
ZSBjYWxsZWQgZnJvbSBhbnkgdGhyZWFkLgorICAgICAgICB2b2lkIHNjaGVkdWxlRXhlY3V0aW9u
VGVybWluYXRpb24oKTsKKworICAgICAgICAvLyBDYWxsZWQgb24gV29ya2VyIHRocmVhZCB3aGVu
IEpTIGV4aXRzIHdpdGggdGVybWluYXRpb24gZXhjZXB0aW9uIGNhdXNlZCBieSBmb3JiaWRFeGVj
dXRpb24oKSByZXF1ZXN0LAorICAgICAgICAvLyBvciBieSBXb3JrZXIgdGhyZWFkIHRlcm1pbmF0
aW9uIGNvZGUgdG8gcHJldmVudCBmdXR1cmUgZW50cnkgaW50byBKUy4KKyAgICAgICAgdm9pZCBm
b3JiaWRFeGVjdXRpb24oKTsKKyAgICAgICAgYm9vbCBpc0V4ZWN1dGlvbkZvcmJpZGRlbigpIGNv
bnN0OwogCiAgICAgICAgIC8vIFJldHVybnMgV29ya2VyU2NyaXB0Q29udHJvbGxlciBmb3IgdGhl
IGN1cnJlbnRseSBleGVjdXRpbmcgY29udGV4dC4gMCB3aWxsIGJlIHJldHVybmVkIGlmIHRoZSBj
dXJyZW50IGV4ZWN1dGluZyBjb250ZXh0IGlzIG5vdCB0aGUgd29ya2VyIGNvbnRleHQuCiAgICAg
ICAgIHN0YXRpYyBXb3JrZXJTY3JpcHRDb250cm9sbGVyKiBjb250cm9sbGVyRm9yQ29udGV4dCgp
OwpAQCAtNjYsOCArNzQsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAg
ICAgICAgV29ya2VyQ29udGV4dCogbV93b3JrZXJDb250ZXh0OwogICAgICAgICBPd25QdHI8V29y
a2VyQ29udGV4dEV4ZWN1dGlvblByb3h5PiBtX3Byb3h5OwotCi0gICAgICAgIE11dGV4IG1fc2hh
cmVkRGF0YU11dGV4OwogICAgICAgICBib29sIG1fZXhlY3V0aW9uRm9yYmlkZGVuOwogICAgIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggMjNhNDI1ZGQ2YzI4Mjk0NmMzZTQ2MTQwMmE0Njcy
Mjg2MDYzZmEyYi4uMDZlY2ZmNTk3YzM0NzY3NzE0YmJmMWM0NTgwNDJiMjQwZjIzOWIxOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmgKQEAgLTEwNDUsNyArMTA0NSw3IEBAIHB1YmxpYzoKICNlbmRpZgog
CiAgICAgdmlydHVhbCBib29sIGlzQ29udGV4dFRocmVhZCgpIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBpc0pTRXhlY3V0aW9uVGVybWluYXRlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCBib29sIGlzSlNFeGVjdXRpb25Gb3JiaWRkZW4oKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogCiAgICAgdm9pZCBzZXRVc2luZ0dlb2xvY2F0aW9uKGJvb2wgZikgeyBtX3VzaW5n
R2VvbG9jYXRpb24gPSBmOyB9CiAgICAgYm9vbCB1c2luZ0dlb2xvY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV91c2luZ0dlb2xvY2F0aW9uOyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL01lc3NhZ2VQb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAK
aW5kZXggMWI3YWVhNzJhMzgxYjk4YmEzMTM1YWNlOTA0MzdjNmI4MDdmYzYzNC4uNjY0NGFiMDhk
ZDZiODg5NTc4OTI4OGRjNzA2ZDlmMDJjNWQ4NjQ0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL01lc3NhZ2VQb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBv
cnQuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCiAjaW5j
bHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIldv
cmtlckNvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMTcxLDYgKzE3MiwxMCBAQCB2b2lkIE1lc3NhZ2VQb3J0Ojpk
aXNwYXRjaE1lc3NhZ2VzKCkKIAogICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWw6OkV2ZW50
RGF0YT4gZXZlbnREYXRhOwogICAgIHdoaWxlIChtX2VudGFuZ2xlZENoYW5uZWwgJiYgbV9lbnRh
bmdsZWRDaGFubmVsLT50cnlHZXRNZXNzYWdlRnJvbVJlbW90ZShldmVudERhdGEpKSB7CisgICAg
ICAgIC8vIGNsb3NlKCkgaW4gV29ya2VyIG9ubWVzc2FnZSBoYW5kbGVyIHNob3VsZCBwcmV2ZW50
IG5leHQgbWVzc2FnZSBmcm9tIGRpc3BhdGNoaW5nLgorICAgICAgICBpZiAobV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSAmJiBzdGF0aWNfY2FzdDxXb3JrZXJDb250
ZXh0Kj4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KS0+aXNDbG9zaW5nKCkpCisgICAgICAgICAg
ICByZXR1cm47CisKICAgICAgICAgT3duUHRyPE1lc3NhZ2VQb3J0QXJyYXk+IHBvcnRzID0gTWVz
c2FnZVBvcnQ6OmVudGFuZ2xlUG9ydHMoKm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgZXZlbnRE
YXRhLT5jaGFubmVscygpKTsKICAgICAgICAgUmVmUHRyPEV2ZW50PiBldnQgPSBNZXNzYWdlRXZl
bnQ6OmNyZWF0ZShwb3J0cy5yZWxlYXNlKCksIGV2ZW50RGF0YS0+bWVzc2FnZSgpKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKaW5kZXggM2IzN2YwY2Ez
ZTU4YzVhNjViNWExYTEyYzU0YzBmMWQ1ODY1MjNjMi4uODQwNzY5OTZlYWQ3NzYyY2E4MDQ5NjJk
ZWI3YzViN2NkODJhZTJjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oCkBAIC04Miw3ICs4Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dm9pZCBzdG9wRGF0YWJhc2VzKERhdGFiYXNlVGFza1N5bmNocm9uaXplciopOwogI2VuZGlmCiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRleHRUaHJlYWQoKSBjb25zdCA9IDA7Ci0gICAgICAg
IHZpcnR1YWwgYm9vbCBpc0pTRXhlY3V0aW9uVGVybWluYXRlZCgpIGNvbnN0ID0gMDsKKyAgICAg
ICAgdmlydHVhbCBib29sIGlzSlNFeGVjdXRpb25Gb3JiaWRkZW4oKSBjb25zdCA9IDA7CiAKICAg
ICAgICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFVSTCgpOyB9CiAg
ICAgICAgIEtVUkwgY29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0IHsgcmV0dXJu
IHZpcnR1YWxDb21wbGV0ZVVSTCh1cmwpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJD
b250ZXh0LmNwcAppbmRleCAzYjE0ZTU5ZTYzOGNlYTQ0YmM3MWY3OWZmMmFlNzc1N2IwYzc2ZmM1
Li5iNTEyNjJhMTlhMDhkYTFlMmEwOTJmNGU5YjQ5MGY0NzY0YzM1ODFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKQEAgLTE2Nyw5ICsxNjcsMTAgQEAgdm9pZCBX
b3JrZXJDb250ZXh0OjpjbG9zZSgpCiAgICAgaWYgKG1fY2xvc2luZykKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9jbG9zaW5nID0gdHJ1ZTsKICAgICAvLyBMZXQgY3VycmVudCBzY3JpcHQgcnVu
IHRvIGNvbXBsZXRpb24gYnV0IHByZXZlbnQgZnV0dXJlIHNjcmlwdCBldmFsdWF0aW9ucy4KLSAg
ICBtX3NjcmlwdC0+Zm9yYmlkRXhlY3V0aW9uKFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OkxldFJ1
bm5pbmdTY3JpcHRGaW5pc2gpOworICAgIC8vIEFmdGVyIG1fY2xvc2luZyBpcyBzZXQsIGFsbCB0
aGUgdGFza3MgaW4gdGhlIHF1ZXVlIGNvbnRpbnVlIHRvIGJlIGZldGNoZWQgYnV0IG9ubHkKKyAg
ICAvLyB0YXNrcyB3aXRoIGlzQ2xlYW51cFRhc2soKT09dHJ1ZSB3aWxsIGJlIGV4ZWN1dGVkLgor
ICAgIG1fY2xvc2luZyA9IHRydWU7CiAgICAgcG9zdFRhc2soQ2xvc2VXb3JrZXJDb250ZXh0VGFz
azo6Y3JlYXRlKCkpOwogfQogCkBAIC0zMjAsNyArMzIxLDcgQEAgYm9vbCBXb3JrZXJDb250ZXh0
Ojppc0NvbnRleHRUaHJlYWQoKSBjb25zdAogICAgIHJldHVybiBjdXJyZW50VGhyZWFkKCkgPT0g
dGhyZWFkKCktPnRocmVhZElEKCk7CiB9CiAKLWJvb2wgV29ya2VyQ29udGV4dDo6aXNKU0V4ZWN1
dGlvblRlcm1pbmF0ZWQoKSBjb25zdAorYm9vbCBXb3JrZXJDb250ZXh0Ojppc0pTRXhlY3V0aW9u
Rm9yYmlkZGVuKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zY3JpcHQtPmlzRXhlY3V0aW9uRm9y
YmlkZGVuKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNv
bnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCmluZGV4IGQy
Y2NiMTE4MGZhMzA5ZjI0MGNhN2NiM2U2MGY2NTFkYTNjOGQyNDkuLjk1M2ZmMDc1ZmJjOTE1Mzc5
OWNkNDJhYjc2YzJhYjRmNDg5OWFjNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29u
dGV4dC5oCkBAIC0xMjAsNyArMTIwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
aXJ0dWFsIHZvaWQgZGF0YWJhc2VFeGNlZWRlZFF1b3RhKGNvbnN0IFN0cmluZyYpOwogI2VuZGlm
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRleHRUaHJlYWQoKSBjb25zdDsKLSAgICAgICAg
dmlydHVhbCBib29sIGlzSlNFeGVjdXRpb25UZXJtaW5hdGVkKCkgY29uc3Q7CisgICAgICAgIHZp
cnR1YWwgYm9vbCBpc0pTRXhlY3V0aW9uRm9yYmlkZGVuKCkgY29uc3Q7CiAKICNpZiBFTkFCTEUo
QkxPQikKICAgICAgICAgRE9NVVJMKiB3ZWJraXRVUkwoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyVGhyZWFkLmNwcAppbmRleCBkZWFmYjBiNzAwYWEyMTBjZGY4N2MyYzUwZWI3
YTQ3MmYzNjZhYmE0Li5hZWY5MzZmMDEzNWYxNjEwNDQzYjUyZjk5OGM4YTE3Y2NiYmEwYzM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCkBAIC0xMjcsNyArMTI3LDcg
QEAgdm9pZCogV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWQoKQogICAgICAgICBpZiAobV9ydW5M
b29wLnRlcm1pbmF0ZWQoKSkgewogICAgICAgICAgICAgLy8gVGhlIHdvcmtlciB3YXMgdGVybWlu
YXRlZCBiZWZvcmUgdGhlIHRocmVhZCBoYWQgYSBjaGFuY2UgdG8gcnVuLiBTaW5jZSB0aGUgY29u
dGV4dCBkaWRuJ3QgZXhpc3QgeWV0LAogICAgICAgICAgICAgLy8gZm9yYmlkRXhlY3V0aW9uKCkg
Y291bGRuJ3QgYmUgY2FsbGVkIGZyb20gc3RvcCgpLgotICAgICAgICAgICBtX3dvcmtlckNvbnRl
eHQtPnNjcmlwdCgpLT5mb3JiaWRFeGVjdXRpb24oV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6VGVy
bWluYXRlUnVubmluZ1NjcmlwdCk7CisgICAgICAgICAgIG1fd29ya2VyQ29udGV4dC0+c2NyaXB0
KCktPmZvcmJpZEV4ZWN1dGlvbigpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMjgsNyArMjI4
LDcgQEAgdm9pZCBXb3JrZXJUaHJlYWQ6OnN0b3AoKQogCiAgICAgLy8gRW5zdXJlIHRoYXQgdGFz
a3MgYXJlIGJlaW5nIGhhbmRsZWQgYnkgdGhyZWFkIGV2ZW50IGxvb3AuIElmIHNjcmlwdCBleGVj
dXRpb24gd2VyZW4ndCBmb3JiaWRkZW4sIGEgd2hpbGUoMSkgbG9vcCBpbiBKUyBjb3VsZCBrZWVw
IHRoZSB0aHJlYWQgYWxpdmUgZm9yZXZlci4KICAgICBpZiAobV93b3JrZXJDb250ZXh0KSB7Ci0g
ICAgICAgIG1fd29ya2VyQ29udGV4dC0+c2NyaXB0KCktPmZvcmJpZEV4ZWN1dGlvbihXb3JrZXJT
Y3JpcHRDb250cm9sbGVyOjpUZXJtaW5hdGVSdW5uaW5nU2NyaXB0KTsKKyAgICAgICAgbV93b3Jr
ZXJDb250ZXh0LT5zY3JpcHQoKS0+c2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbigpOwogCiAj
aWYgRU5BQkxFKERBVEFCQVNFKQogICAgICAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5p
bnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KG1fd29ya2VyQ29udGV4dC5nZXQoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87935</attachid>
            <date>2011-04-01 15:52:34 -0700</date>
            <delta_ts>2011-04-01 16:37:41 -0700</delta_ts>
            <desc>Patch, added ENABLE(WORKERS) per EWS.</desc>
            <filename>bug-57090-20110401155233.patch</filename>
            <type>text/plain</type>
            <size>22061</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE5NzEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjNTI1ZWVmNzVmNTM5ZGYx
NDk5ZDZhMjRmZTkyMWU4YWE0MzVhNTQ0Li44ODE2Njk1YzI2MGQ3MWZlOWFhYjY5ODRkM2ViMjQx
Nzg4MDU0ZTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjQgQEAKKzIwMTEtMDMtMzAgIERtaXRy
eSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgU2ltcGxpZnlpbmcgV29ya2VyIHRlcm1pbmF0aW9uIHNl
cXVlbmNlIChyZW1vdmluZyB1bm5lY2Vzc2FyeSBtdXRleCkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3MDkwCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LiBFeGlzdGluZyBXb3JrZXIgdGVzdHMgc2hvdWxkIHBhc3MuCisKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3Rl
bmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgIENoZWNrIGZvciBUZXJtaW5hdG9yLWNhdXNlZCBl
eGNlcHRpb24gKG9yIFRlcm1pbmF0b3I6OnNob3VsZFRlcm1pbmF0ZSBzaW5jZSBzb21ldGltZXMK
KyAgICAgICAgSlMgbWlnaHQgbm90IHJ1biBzaWduaWZpY2FudCBlbm91Z2ggY2h1bmsgdG8gYmUg
dGVybWluYXRlZCBieSBUZXJtaW5hdG9yKSBhbmQgc2V0CisgICAgICAgIHRoZSBmbGFnIHRvIGZv
cmJpZCBmdXR1cmUgcmVlbnRyeSBpbnRvIEpTLgorCisgICAgICAgICogYmluZGluZ3MvanMvV29y
a2VyU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRD
b250cm9sbGVyOjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250
cm9sbGVyOjpzY2hlZHVsZUV4ZWN1dGlvblRlcm1pbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmZvcmJpZEV4ZWN1dGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjppc0V4ZWN1dGlvbkZvcmJpZGRlbik6CisgICAg
ICAgICogYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyU2NyaXB0Q29udHJvbGxlcjo6c2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpmb3JiaWRFeGVjdXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6aXNFeGVjdXRpb25Gb3Ji
aWRkZW4pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OnByb3h5KToKKyAgICAg
ICAgU3ltbWV0cmljYWwgY2hhbmdlcyB0byBKU0MgYW5kIFY4IFdvcmtlclNjcmlwdENvbnRyb2xs
ZXJzOgorICAgICAgICAtIHJlbW92ZSBNdXRleCBhcm91bmQgb3BlcmF0aW9ucyB3aXRoIGV4ZWN1
dGlvbkZvcmJpZGRlbiBmbGFnLgorICAgICAgICAtIHNldC9jaGVjayB0aGF0IGZsYWcgb25seSBv
biBXb3JrZXIgdGhyZWFkLgorICAgICAgICAtIHNvbWUgcmVuYW1pbmcgaW4gYXR0ZW1wdCB0byBi
ZXR0ZXIgcmVmbGVjdCB3aGF0IHRoZSBtZXRob2RzIGRvLgorCisgICAgICAgICogYmluZGluZ3Mv
djgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhBYnN0
cmFjdEV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlY4QWJz
dHJhY3RFdmVudExpc3RlbmVyOjppbnZva2VFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmV2YWx1YXRlKToKKyAgICAgICAgQ2hlY2sg
Zm9yIHY4OjpUcnlDYXRjaDo6Q2FuQ29udGludWUoKSBhbmQgc2V0IGZvcmJpZEV4ZWN1dGlvbiBm
bGFnLgorICAgICAgICBUaGlzIHJlc3VsdCBpbmRpY2F0ZXMgdGhhdCBUZXJtaW5hdGVFeGVjdXRp
b24oKSB3YXMgaW4gZWZmZWN0IC0gd2Ugc2hvdWxkCisgICAgICAgIG5vdCByZWVudGVyIFY4IGFu
eW1vcmUgYWZ0ZXIgdGhhdC4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OmlzSlNFeGVjdXRpb25Gb3JiaWRkZW4pOgorICAgICAgICAqIGRv
bS9NZXNzYWdlUG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6ZGlzcGF0
Y2hNZXNzYWdlcyk6CisgICAgICAgIFN0b3AgZGlzcGF0Y2hpbmcgbWVzc2FnZXMgb25jZSB0aGUg
d29ya2VyIGNvbnRleHQgc3RhcnRlZCB0byBjbG9zZS4KKyAgICAgICAgUGVyIFdvcmtlcnMgc3Bl
Yywgb25jZSBXb3JrZXJHbG9iYWxTY29wZS5DbG9zZSgpIGlzIGNhbGxlZCwgdGhlIG5leHQKKyAg
ICAgICAgSlMgZXhlY3V0aW9uIGRvZXMgbm90IGhhcHBlbiwgaW5jbHVkaW5nIG9ubWVzc2FnZSBl
dmVudHMuIEJlZm9yZSB0aGlzCisgICAgICAgIGNoYW5nZSwgQ2xvc2UoKSB3YXMgc2V0dGluZyB0
aGUgZm9yYmlkRXhlY3V0aW9uIGZsYWcsIGluZGlyZWN0bHkgc3RvcHBpbmcKKyAgICAgICAgZXZl
bnRzIGZyb20gZGlzcGF0Y2hpbmcuCisKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJD
b250ZXh0Ojppc0pTRXhlY3V0aW9uRm9yYmlkZGVuKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtl
ckNvbnRleHQuaDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclRocmVhZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJUaHJlYWQ6OnN0b3ApOgorCiAyMDExLTAzLTI1ICBQYXZlbCBGZWxkbWFuICA8cGZl
bGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRz
a3kuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVu
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcApp
bmRleCBlNDQ0ZDg4ODQwMGM4N2I5ZDdjN2RhOThhYzM2YTgyYjBhMDM5ODM1Li43NGZmNzQ4NWVi
NzZmMDQ4YmU4YTk0YzY4MGI4OTAwM2U5NDhhNGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRl
ICJKU0V2ZW50LmgiCiAjaW5jbHVkZSAiSlNFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIkpTTWFp
blRocmVhZEV4ZWNTdGF0ZS5oIgorI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKICNpbmNsdWRl
IDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIu
aD4KIApAQCAtNjAsNyArNjEsNyBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6bWFya0pTRnVuY3Rp
b24oTWFya1N0YWNrJiBtYXJrU3RhY2spCiB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZl
bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgRXZlbnQq
IGV2ZW50KQogewogICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKLSAgICBpZiAo
IXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgfHwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNKU0V4
ZWN1dGlvblRlcm1pbmF0ZWQoKSkKKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgfHwg
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNKU0V4ZWN1dGlvbkZvcmJpZGRlbigpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwpAQCAt
MTI2LDYgKzEyNywxNCBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dAogCiAgICAgICAgIGdsb2Jh
bE9iamVjdC0+c2V0Q3VycmVudEV2ZW50KHNhdmVkRXZlbnQpOwogCisjaWYgRU5BQkxFRChXT1JL
RVJTKQorICAgICAgICBpZiAoc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNXb3JrZXJDb250ZXh0
KCkpIHsKKyAgICAgICAgICAgIGJvb2wgdGVybWluYXRvckNhdXNlZEV4Y2VwdGlvbiA9IChleGVj
LT5oYWRFeGNlcHRpb24oKSAmJiBleGVjLT5leGNlcHRpb24oKS5pc09iamVjdCgpICYmIGFzT2Jq
ZWN0KGV4ZWMtPmV4Y2VwdGlvbigpKS0+ZXhjZXB0aW9uVHlwZSgpID09IFRlcm1pbmF0ZWQpOwor
ICAgICAgICAgICAgaWYgKHRlcm1pbmF0b3JDYXVzZWRFeGNlcHRpb24gfHwgZ2xvYmFsRGF0YS50
ZXJtaW5hdG9yLnNob3VsZFRlcm1pbmF0ZSgpKQorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PFdvcmtlckNvbnRleHQqPihzY3JpcHRFeGVjdXRpb25Db250ZXh0KS0+c2NyaXB0KCktPmZvcmJp
ZEV4ZWN1dGlvbigpOworICAgICAgICB9CisjZW5kaWYKKwogICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpIHsKICAgICAgICAgICAgIGV2ZW50LT50YXJnZXQoKS0+dW5jYXVnaHRFeGNl
cHRpb25JbkV2ZW50SGFuZGxlcigpOwogICAgICAgICAgICAgcmVwb3J0Q3VycmVudEV4Y2VwdGlv
bihleGVjKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNj
cmlwdENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2Ny
aXB0Q29udHJvbGxlci5jcHAKaW5kZXggNjdiMDQ0MWFhMjJhNGY1MDRiYWZiNTBhZjJjMzIyZjFh
YTM3NTYxMi4uZWZhYTc1ZDk1YjkzMTAxYzBjOTU3MTI5ZDJlNGY0YTI5MDRjNDc5YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxl
ci5jcHAKQEAgLTEwMCwxMSArMTAwLDkgQEAgdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpp
bml0U2NyaXB0KCkKIAogU2NyaXB0VmFsdWUgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVh
dGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSkKIHsKLSAgICB7Ci0gICAgICAg
IE11dGV4TG9ja2VyIGxvY2sobV9zaGFyZWREYXRhTXV0ZXgpOwotICAgICAgICBpZiAobV9leGVj
dXRpb25Gb3JiaWRkZW4pCi0gICAgICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKLSAgICB9
CisgICAgaWYgKGlzRXhlY3V0aW9uRm9yYmlkZGVuKCkpCisgICAgICAgIHJldHVybiBTY3JpcHRW
YWx1ZSgpOworCiAgICAgU2NyaXB0VmFsdWUgZXhjZXB0aW9uOwogICAgIFNjcmlwdFZhbHVlIHJl
c3VsdChldmFsdWF0ZShzb3VyY2VDb2RlLCAmZXhjZXB0aW9uKSk7CiAgICAgaWYgKGV4Y2VwdGlv
bi5qc1ZhbHVlKCkpIHsKQEAgLTExNiwxMSArMTE0LDggQEAgU2NyaXB0VmFsdWUgV29ya2VyU2Ny
aXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29k
ZSkKIAogU2NyaXB0VmFsdWUgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY29uc3Qg
U2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSwgU2NyaXB0VmFsdWUqIGV4Y2VwdGlvbikKIHsK
LSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9zaGFyZWREYXRhTXV0ZXgpOwotICAg
ICAgICBpZiAobV9leGVjdXRpb25Gb3JiaWRkZW4pCi0gICAgICAgICAgICByZXR1cm4gU2NyaXB0
VmFsdWUoKTsKLSAgICB9CisgICAgaWYgKGlzRXhlY3V0aW9uRm9yYmlkZGVuKCkpCisgICAgICAg
IHJldHVybiBTY3JpcHRWYWx1ZSgpOwogCiAgICAgaW5pdFNjcmlwdElmTmVlZGVkKCk7CiAgICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKQEAgLTEzMCwxMCArMTI1LDE4IEBA
IFNjcmlwdFZhbHVlIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IFNjcmlw
dFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsCiAgICAgQ29tcGxldGlvbiBjb21wID0gSlNDOjpldmFs
dWF0ZShleGVjLCBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4o
KSwgc291cmNlQ29kZS5qc1NvdXJjZUNvZGUoKSwgbV93b3JrZXJDb250ZXh0V3JhcHBlci5nZXQo
KSk7CiAgICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVj
a2VyLnN0b3AoKTsKIAotICAgIGlmIChjb21wLmNvbXBsVHlwZSgpID09IE5vcm1hbCB8fCBjb21w
LmNvbXBsVHlwZSgpID09IFJldHVyblZhbHVlKQorCisgICAgQ29tcGxUeXBlIGNvbXBsZXRpb25U
eXBlID0gY29tcC5jb21wbFR5cGUoKTsKKworICAgIGlmIChjb21wbGV0aW9uVHlwZSA9PSBUZXJt
aW5hdGVkIHx8IG1fd29ya2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbERhdGEoKS50ZXJtaW5hdG9y
LnNob3VsZFRlcm1pbmF0ZSgpKSB7CisgICAgICAgIGZvcmJpZEV4ZWN1dGlvbigpOworICAgICAg
ICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKKyAgICB9CisKKyAgICBpZiAoY29tcGxldGlvblR5cGUg
PT0gTm9ybWFsIHx8IGNvbXBsZXRpb25UeXBlID09IFJldHVyblZhbHVlKQogICAgICAgICByZXR1
cm4gU2NyaXB0VmFsdWUoKm1fZ2xvYmFsRGF0YSwgY29tcC52YWx1ZSgpKTsKIAotICAgIGlmIChj
b21wLmNvbXBsVHlwZSgpID09IFRocm93KSB7CisgICAgaWYgKGNvbXBsZXRpb25UeXBlID09IFRo
cm93KSB7CiAgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7CiAgICAgICAgIGludCBsaW5lTnVt
YmVyID0gMDsKICAgICAgICAgU3RyaW5nIHNvdXJjZVVSTCA9IHNvdXJjZUNvZGUudXJsKCkuc3Ry
aW5nKCk7CkBAIC0xNTAsMTYgKzE1MywyMSBAQCB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6
OnNldEV4Y2VwdGlvbihTY3JpcHRWYWx1ZSBleGNlcHRpb24pCiAgICAgdGhyb3dFcnJvcihtX3dv
cmtlckNvbnRleHRXcmFwcGVyLT5nbG9iYWxFeGVjKCksIGV4Y2VwdGlvbi5qc1ZhbHVlKCkpOwog
fQogCi12b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmZvcmJpZEV4ZWN1dGlvbihGb3JiaWRF
eGVjdXRpb25PcHRpb24gb3B0aW9uKQordm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpzY2hl
ZHVsZUV4ZWN1dGlvblRlcm1pbmF0aW9uKCkKIHsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBi
ZSBjYWxsZWQgZnJvbSBhbm90aGVyIHRocmVhZC4KLSAgICAvLyBNdXRleCBwcm90ZWN0aW9uIGZv
ciBtX2V4ZWN1dGlvbkZvcmJpZGRlbiBpcyBuZWVkZWQgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIHZh
bHVlIGlzIHN5bmNocm9uaXplZCBiZXR3ZWVuIHByb2Nlc3NvcnMsIGJlY2F1c2UKLSAgICAvLyBp
ZiBpdCB3ZXJlIG5vdCwgdGhlIHdvcmtlciBjb3VsZCByZS1lbnRlciBKU0M6OmV2YWx1YXRlKCks
IGJ1dCB3aXRoIHRpbWVvdXQgYWxyZWFkeSByZXNldC4KLSAgICAvLyBJdCBpcyBub3QgY3JpdGlj
YWwgZm9yIFRlcm1pbmF0b3I6Om1fc2hvdWxkVGVybWluYXRlIHRvIGJlIHN5bmNocm9uaXplZCwg
d2UganVzdCByZWx5IG9uIGl0IHJlYWNoaW5nIHRoZSB3b3JrZXIgdGhyZWFkJ3MgcHJvY2Vzc29y
IHNvb25lciBvciBsYXRlci4KLSAgICBNdXRleExvY2tlciBsb2NrKG1fc2hhcmVkRGF0YU11dGV4
KTsKKyAgICBtX2dsb2JhbERhdGEtPnRlcm1pbmF0b3IudGVybWluYXRlU29vbigpOworfQorCit2
b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmZvcmJpZEV4ZWN1dGlvbigpCit7CisgICAgQVNT
RVJUKG1fd29ya2VyQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwogICAgIG1fZXhlY3V0aW9u
Rm9yYmlkZGVuID0gdHJ1ZTsKLSAgICBpZiAob3B0aW9uID09IFRlcm1pbmF0ZVJ1bm5pbmdTY3Jp
cHQpCi0gICAgICAgIG1fZ2xvYmFsRGF0YS0+dGVybWluYXRvci50ZXJtaW5hdGVTb29uKCk7Cit9
CisKK2Jvb2wgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6aXNFeGVjdXRpb25Gb3JiaWRkZW4oKSBj
b25zdAoreworICAgIEFTU0VSVChtX3dvcmtlckNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsK
KyAgICByZXR1cm4gbV9leGVjdXRpb25Gb3JiaWRkZW47CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlw
dENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENv
bnRyb2xsZXIuaAppbmRleCBjM2I4MjE1ZGQ2MTUzOWJlYmFlOGM0Y2FiMGRlMTczMjMyNjZiNjA2
Li41YWMwNDgyMTQxOTkyMTI3MGU3YTQxZWI0MmMxMGI3ZGQ4ODQ3MTA4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oCkBAIC02
MSw5ICs2MSwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBzZXRFeGNl
cHRpb24oU2NyaXB0VmFsdWUpOwogCi0gICAgICAgIGVudW0gRm9yYmlkRXhlY3V0aW9uT3B0aW9u
IHsgVGVybWluYXRlUnVubmluZ1NjcmlwdCwgTGV0UnVubmluZ1NjcmlwdEZpbmlzaCB9OwotICAg
ICAgICB2b2lkIGZvcmJpZEV4ZWN1dGlvbihGb3JiaWRFeGVjdXRpb25PcHRpb24pOwotICAgICAg
ICBib29sIGlzRXhlY3V0aW9uRm9yYmlkZGVuKCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRpb25G
b3JiaWRkZW47IH0KKyAgICAgICAgLy8gQXN5bmMgcmVxdWVzdCB0byB0ZXJtaW5hdGUgYSBKUyBy
dW4gZXhlY3V0aW9uLiBFdmVudHVhbGx5IGNhdXNlcyB0ZXJtaW5hdGlvbgorICAgICAgICAvLyBl
eGNlcHRpb24gcmFpc2VkIGR1cmluZyBKUyBleGVjdXRpb24sIGlmIHRoZSB3b3JrZXIgdGhyZWFk
IGhhcHBlbnMgdG8gcnVuIEpTLgorICAgICAgICAvLyBBZnRlciBKUyBleGVjdXRpb24gd2FzIHRl
cm1pbmF0ZWQgaW4gdGhpcyB3YXksIHRoZSBXb3JrZXIgdGhyZWFkIGhhcyB0byB1c2UKKyAgICAg
ICAgLy8gZm9yYmlkRXhlY3V0aW9uKCkvaXNFeGVjdXRpb25Gb3JiaWRkZW4oKSB0byBndWFyZCBh
Z2FpbnN0IHJlZW50cnkgaW50byBKUy4KKyAgICAgICAgLy8gQ2FuIGJlIGNhbGxlZCBmcm9tIGFu
eSB0aHJlYWQuCisgICAgICAgIHZvaWQgc2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbigpOwor
CisgICAgICAgIC8vIENhbGxlZCBvbiBXb3JrZXIgdGhyZWFkIHdoZW4gSlMgZXhpdHMgd2l0aCB0
ZXJtaW5hdGlvbiBleGNlcHRpb24gY2F1c2VkIGJ5IGZvcmJpZEV4ZWN1dGlvbigpIHJlcXVlc3Qs
CisgICAgICAgIC8vIG9yIGJ5IFdvcmtlciB0aHJlYWQgdGVybWluYXRpb24gY29kZSB0byBwcmV2
ZW50IGZ1dHVyZSBlbnRyeSBpbnRvIEpTLgorICAgICAgICB2b2lkIGZvcmJpZEV4ZWN1dGlvbigp
OworICAgICAgICBib29sIGlzRXhlY3V0aW9uRm9yYmlkZGVuKCkgY29uc3Q7CiAKICAgICAgICAg
SlNDOjpKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEoKSB7IHJldHVybiBtX2dsb2JhbERhdGEuZ2V0
KCk7IH0KIApAQCAtNzgsOCArODYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJl
ZlB0cjxKU0M6OkpTR2xvYmFsRGF0YT4gbV9nbG9iYWxEYXRhOwogICAgICAgICBXb3JrZXJDb250
ZXh0KiBtX3dvcmtlckNvbnRleHQ7CiAgICAgICAgIEpTQzo6R2xvYmFsPEpTV29ya2VyQ29udGV4
dD4gbV93b3JrZXJDb250ZXh0V3JhcHBlcjsKLQotICAgICAgICBNdXRleCBtX3NoYXJlZERhdGFN
dXRleDsKICAgICAgICAgYm9vbCBtX2V4ZWN1dGlvbkZvcmJpZGRlbjsKICAgICB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5l
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5l
ci5jcHAKaW5kZXggNmRjNDlmYThmYjkyMjIxODgwMzI5ZjRjMjVlODQ5MDRmNjY4M2Y4Mi4uZjEx
MDJjMmRkOTY2YzIzOWZiOWVlM2MyNWNhODEwNDFmOWMyYjI0MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmNwcApAQCAt
NzIsNiArNzIsMTAgQEAgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI6On5WOEFic3RyYWN0RXZlbnRM
aXN0ZW5lcigpCiAKIHZvaWQgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV2ZW50KiBldmVudCkKIHsKKyAgICAvLyBE
b24ndCByZWVudGVyIFY4IGlmIGV4ZWN1dGlvbiB3YXMgdGVybWluYXRlZCBpbiB0aGlzIGluc3Rh
bmNlIG9mIFY4LgorICAgIGlmIChjb250ZXh0LT5pc0pTRXhlY3V0aW9uRm9yYmlkZGVuKCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIEFTU0VSVChldmVudCk7CiAKICAgICAvLyBUaGUgY2FsbGJh
Y2sgZnVuY3Rpb24gb24gWE1MSHR0cFJlcXVlc3QgY2FuIGNsZWFyIHRoZSBldmVudCBsaXN0ZW5l
ciBhbmQgZGVzdHJveXMgJ3RoaXMnIG9iamVjdC4gS2VlcCBhIGxvY2FsIHJlZmVyZW5jZSB0byBp
dC4KQEAgLTE1MCw4ICsxNTQsMTIgQEAgdm9pZCBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aW52
b2tlRXZlbnRIYW5kbGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQKICAgICAgICAg
cmV0dXJuVmFsdWUgPSBjYWxsTGlzdGVuZXJGdW5jdGlvbihjb250ZXh0LCBqc0V2ZW50LCBldmVu
dCk7CiAgICAgICAgIGlmICh0cnlDYXRjaC5IYXNDYXVnaHQoKSkKICAgICAgICAgICAgIGV2ZW50
LT50YXJnZXQoKS0+dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcigpOwotICAgICAgICBp
ZiAoIXRyeUNhdGNoLkNhbkNvbnRpbnVlKCkpCisKKyAgICAgICAgaWYgKCF0cnlDYXRjaC5DYW5D
b250aW51ZSgpKSB7IC8vIFJlc3VsdCBvZiBUZXJtaW5hdGVFeGVjdXRpb24oKS4KKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSkKKyAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCktPnNjcmlwdCgpLT5mb3JiaWRFeGVjdXRp
b24oKTsKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICB0cnlDYXRjaC5S
ZXNldCgpOwogCiAgICAgICAgIC8vIFJlc3RvcmUgdGhlIG9sZCBldmVudC4gVGhpcyBtdXN0IGJl
IGRvbmUgZm9yIGFsbCBleGl0IHBhdGhzIHRocm91Z2ggdGhpcyBtZXRob2QuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHku
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5LmNwcAppbmRleCBlYjcyNTJiNWVmMTI0MTMxYmI4N2E4MDU5NjZhMWNmZDY4Nzk4OTVhLi40
Mjc4MTU2NjE4NTE1NmQ2NTE0N2IyNDg3ZDQ2Y2RmY2ZkNmJhNDZhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eS5jcHAKQEAgLTIwMCw4ICsyMDAsMTAgQEAgU2NyaXB0VmFsdWUgV29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5OjpldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgY29uc3QgU3QKICAgICB2
ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IGNvbXBpbGVkU2NyaXB0ID0gVjhQcm94eTo6Y29tcGlsZVNj
cmlwdChzY3JpcHRTdHJpbmcsIGZpbGVOYW1lLCBzY3JpcHRTdGFydFBvc2l0aW9uKTsKICAgICB2
ODo6TG9jYWw8djg6OlZhbHVlPiByZXN1bHQgPSBydW5TY3JpcHQoY29tcGlsZWRTY3JpcHQpOwog
Ci0gICAgaWYgKCFleGNlcHRpb25DYXRjaGVyLkNhbkNvbnRpbnVlKCkpCisgICAgaWYgKCFleGNl
cHRpb25DYXRjaGVyLkNhbkNvbnRpbnVlKCkpIHsKKyAgICAgICAgbV93b3JrZXJDb250ZXh0LT5z
Y3JpcHQoKS0+Zm9yYmlkRXhlY3V0aW9uKCk7CiAgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgp
OworICAgIH0KIAogICAgIGlmIChleGNlcHRpb25DYXRjaGVyLkhhc0NhdWdodCgpKSB7CiAgICAg
ICAgIHY4OjpMb2NhbDx2ODo6TWVzc2FnZT4gbWVzc2FnZSA9IGV4Y2VwdGlvbkNhdGNoZXIuTWVz
c2FnZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2Ny
aXB0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3Jp
cHRDb250cm9sbGVyLmNwcAppbmRleCA0MmUwMmU2NmQyZTQzM2I3OTNiODU1YjNiZTEzOWQ3ZWE5
OGNhNGQ1Li5mNjZlOTJmZTkxNmMxYzYxZTQwYjgyOThjMzVhMzE0ZGMyZDRjMGQxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVy
LmNwcApAQCAtNjgsMTEgKzY4LDggQEAgU2NyaXB0VmFsdWUgV29ya2VyU2NyaXB0Q29udHJvbGxl
cjo6ZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSkKIAogU2NyaXB0
VmFsdWUgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNl
Q29kZSYgc291cmNlQ29kZSwgU2NyaXB0VmFsdWUqIGV4Y2VwdGlvbikKIHsKLSAgICB7Ci0gICAg
ICAgIE11dGV4TG9ja2VyIGxvY2sobV9zaGFyZWREYXRhTXV0ZXgpOwotICAgICAgICBpZiAobV9l
eGVjdXRpb25Gb3JiaWRkZW4pCi0gICAgICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKLSAg
ICB9CisgICAgaWYgKGlzRXhlY3V0aW9uRm9yYmlkZGVuKCkpCisgICAgICByZXR1cm4gU2NyaXB0
VmFsdWUoKTsKIAogICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSBzdGF0ZTsKICAgICBT
Y3JpcHRWYWx1ZSByZXN1bHQgPSBtX3Byb3h5LT5ldmFsdWF0ZShzb3VyY2VDb2RlLnNvdXJjZSgp
LCBzb3VyY2VDb2RlLnVybCgpLnN0cmluZygpLCBXVEY6OnRvWmVyb0Jhc2VkVGV4dFBvc2l0aW9u
KHNvdXJjZUNvZGUuc3RhcnRQb3NpdGlvbigpKSwgJnN0YXRlKTsKQEAgLTg2LDEzICs4MywyMSBA
QCBTY3JpcHRWYWx1ZSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3Jp
cHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQg
V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6Zm9yYmlkRXhlY3V0aW9uKEZvcmJpZEV4ZWN1dGlvbk9w
dGlvbiBvcHRpb24pCit2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OnNjaGVkdWxlRXhlY3V0
aW9uVGVybWluYXRpb24oKQoreworICAgIHY4OjpWODo6VGVybWluYXRlRXhlY3V0aW9uKCk7Cit9
CisKK3ZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6Zm9yYmlkRXhlY3V0aW9uKCkKIHsKLSAg
ICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZnJvbSBhbm90aGVyIHRocmVhZC4KLSAg
ICBNdXRleExvY2tlciBsb2NrKG1fc2hhcmVkRGF0YU11dGV4KTsKKyAgICBBU1NFUlQobV93b3Jr
ZXJDb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CiAgICAgbV9leGVjdXRpb25Gb3JiaWRkZW4g
PSB0cnVlOwotICAgIGlmIChvcHRpb24gPT0gVGVybWluYXRlUnVubmluZ1NjcmlwdCkKLSAgICAg
ICAgdjg6OlY4OjpUZXJtaW5hdGVFeGVjdXRpb24oKTsKK30KKworYm9vbCBXb3JrZXJTY3JpcHRD
b250cm9sbGVyOjppc0V4ZWN1dGlvbkZvcmJpZGRlbigpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1f
d29ya2VyQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIHJldHVybiBtX2V4ZWN1dGlv
bkZvcmJpZGRlbjsKIH0KIAogdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpzZXRFeGNlcHRp
b24oU2NyaXB0VmFsdWUgZXhjZXB0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IDVlMzE1OWZjYTM5MzI0MWIyMTZh
MmFjOTZlZDFlZjMzMGQ4MDNlMTQuLmNjNGI3YzQxMjU2NWQ2NGFmYzM2MjlmMTJhY2IwYjAxZTM5
MjBlZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlw
dENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3Jp
cHRDb250cm9sbGVyLmgKQEAgLTQ4LDcgKzQ4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBXb3JrZXJTY3JpcHRDb250cm9sbGVyKFdvcmtlckNvbnRleHQqKTsKICAgICAgICAgfldv
cmtlclNjcmlwdENvbnRyb2xsZXIoKTsKIAotICAgICAgICBXb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHkqIHByb3h5KCkgeyByZXR1cm4gbV9leGVjdXRpb25Gb3JiaWRkZW4gPyAwIDogbV9wcm94
eS5nZXQoKTsgfQorICAgICAgICBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIHByb3h5KCkg
eyByZXR1cm4gbV9wcm94eS5nZXQoKTsgfQogICAgICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJD
b250ZXh0KCkgeyByZXR1cm4gbV93b3JrZXJDb250ZXh0OyB9CiAKICAgICAgICAgU2NyaXB0VmFs
dWUgZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYpOwpAQCAtNTYsOSArNTYsMTcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgc2V0RXhjZXB0aW9uKFNjcmlwdFZh
bHVlKTsKIAotICAgICAgICBlbnVtIEZvcmJpZEV4ZWN1dGlvbk9wdGlvbiB7IFRlcm1pbmF0ZVJ1
bm5pbmdTY3JpcHQsIExldFJ1bm5pbmdTY3JpcHRGaW5pc2ggfTsKLSAgICAgICAgdm9pZCBmb3Ji
aWRFeGVjdXRpb24oRm9yYmlkRXhlY3V0aW9uT3B0aW9uKTsKLSAgICAgICAgYm9vbCBpc0V4ZWN1
dGlvbkZvcmJpZGRlbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0aW9uRm9yYmlkZGVuOyB9Cisg
ICAgICAgIC8vIEFzeW5jIHJlcXVlc3QgdG8gdGVybWluYXRlIGEgZnV0dXJlIEpTIGV4ZWN1dGlv
bi4gRXZlbnR1YWxseSBjYXVzZXMgdGVybWluYXRpb24KKyAgICAgICAgLy8gZXhjZXB0aW9uIHJh
aXNlZCBkdXJpbmcgSlMgZXhlY3V0aW9uLCBpZiB0aGUgd29ya2VyIHRocmVhZCBoYXBwZW5zIHRv
IHJ1biBKUy4KKyAgICAgICAgLy8gQWZ0ZXIgSlMgZXhlY3V0aW9uIHdhcyB0ZXJtaW5hdGVkIGlu
IHRoaXMgd2F5LCB0aGUgV29ya2VyIHRocmVhZCBoYXMgdG8gdXNlCisgICAgICAgIC8vIGZvcmJp
ZEV4ZWN1dGlvbigpL2lzRXhlY3V0aW9uRm9yYmlkZGVuKCkgdG8gZ3VhcmQgYWdhaW5zdCByZWVu
dHJ5IGludG8gSlMuCisgICAgICAgIC8vIENhbiBiZSBjYWxsZWQgZnJvbSBhbnkgdGhyZWFkLgor
ICAgICAgICB2b2lkIHNjaGVkdWxlRXhlY3V0aW9uVGVybWluYXRpb24oKTsKKworICAgICAgICAv
LyBDYWxsZWQgb24gV29ya2VyIHRocmVhZCB3aGVuIEpTIGV4aXRzIHdpdGggdGVybWluYXRpb24g
ZXhjZXB0aW9uIGNhdXNlZCBieSBmb3JiaWRFeGVjdXRpb24oKSByZXF1ZXN0LAorICAgICAgICAv
LyBvciBieSBXb3JrZXIgdGhyZWFkIHRlcm1pbmF0aW9uIGNvZGUgdG8gcHJldmVudCBmdXR1cmUg
ZW50cnkgaW50byBKUy4KKyAgICAgICAgdm9pZCBmb3JiaWRFeGVjdXRpb24oKTsKKyAgICAgICAg
Ym9vbCBpc0V4ZWN1dGlvbkZvcmJpZGRlbigpIGNvbnN0OwogCiAgICAgICAgIC8vIFJldHVybnMg
V29ya2VyU2NyaXB0Q29udHJvbGxlciBmb3IgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgY29udGV4
dC4gMCB3aWxsIGJlIHJldHVybmVkIGlmIHRoZSBjdXJyZW50IGV4ZWN1dGluZyBjb250ZXh0IGlz
IG5vdCB0aGUgd29ya2VyIGNvbnRleHQuCiAgICAgICAgIHN0YXRpYyBXb3JrZXJTY3JpcHRDb250
cm9sbGVyKiBjb250cm9sbGVyRm9yQ29udGV4dCgpOwpAQCAtNjYsOCArNzQsNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgV29ya2VyQ29udGV4dCogbV93b3Jr
ZXJDb250ZXh0OwogICAgICAgICBPd25QdHI8V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5PiBt
X3Byb3h5OwotCi0gICAgICAgIE11dGV4IG1fc2hhcmVkRGF0YU11dGV4OwogICAgICAgICBib29s
IG1fZXhlY3V0aW9uRm9yYmlkZGVuOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXgg
MjNhNDI1ZGQ2YzI4Mjk0NmMzZTQ2MTQwMmE0NjcyMjg2MDYzZmEyYi4uMDZlY2ZmNTk3YzM0NzY3
NzE0YmJmMWM0NTgwNDJiMjQwZjIzOWIxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTEwNDUs
NyArMTA0NSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdmlydHVhbCBib29sIGlzQ29udGV4
dFRocmVhZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0pTRXhlY3V0aW9uVGVybWluYXRl
ZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzSlNFeGVjdXRp
b25Gb3JiaWRkZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdm9pZCBzZXRVc2lu
Z0dlb2xvY2F0aW9uKGJvb2wgZikgeyBtX3VzaW5nR2VvbG9jYXRpb24gPSBmOyB9CiAgICAgYm9v
bCB1c2luZ0dlb2xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV91c2luZ0dlb2xvY2F0aW9uOyB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAKaW5kZXggMWI3YWVhNzJhMzgxYjk4YmEzMTM1
YWNlOTA0MzdjNmI4MDdmYzYzNC4uNWVkYzM2YzIxNDc5OGU2NGFiNmNlZGE0NDVjYmE4MmUzYjdj
ZjkyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAj
aW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNp
bmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTcxLDYg
KzE3MiwxMyBAQCB2b2lkIE1lc3NhZ2VQb3J0OjpkaXNwYXRjaE1lc3NhZ2VzKCkKIAogICAgIE93
blB0cjxNZXNzYWdlUG9ydENoYW5uZWw6OkV2ZW50RGF0YT4gZXZlbnREYXRhOwogICAgIHdoaWxl
IChtX2VudGFuZ2xlZENoYW5uZWwgJiYgbV9lbnRhbmdsZWRDaGFubmVsLT50cnlHZXRNZXNzYWdl
RnJvbVJlbW90ZShldmVudERhdGEpKSB7CisKKyNpZiBFTkFCTEUoV09SS0VSUykKKyAgICAgICAg
Ly8gY2xvc2UoKSBpbiBXb3JrZXIgb25tZXNzYWdlIGhhbmRsZXIgc2hvdWxkIHByZXZlbnQgbmV4
dCBtZXNzYWdlIGZyb20gZGlzcGF0Y2hpbmcuCisgICAgICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpICYmIHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQq
PihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLT5pc0Nsb3NpbmcoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyNlbmRpZgorCiAgICAgICAgIE93blB0cjxNZXNzYWdlUG9ydEFycmF5PiBwb3J0cyA9
IE1lc3NhZ2VQb3J0OjplbnRhbmdsZVBvcnRzKCptX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGV2
ZW50RGF0YS0+Y2hhbm5lbHMoKSk7CiAgICAgICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0gTWVzc2Fn
ZUV2ZW50OjpjcmVhdGUocG9ydHMucmVsZWFzZSgpLCBldmVudERhdGEtPm1lc3NhZ2UoKSk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCmluZGV4IDNiMzdm
MGNhM2U1OGM1YTY1YjVhMWExMmM1NGMwZjFkNTg2NTIzYzIuLjg0MDc2OTk2ZWFkNzc2MmNhODA0
OTYyZGViN2M1YjdjZDgyYWUyYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaApAQCAtODIsNyArODIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHZvaWQgc3RvcERhdGFiYXNlcyhEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqKTsKICNlbmRp
ZgogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZXh0VGhyZWFkKCkgY29uc3QgPSAwOwotICAg
ICAgICB2aXJ0dWFsIGJvb2wgaXNKU0V4ZWN1dGlvblRlcm1pbmF0ZWQoKSBjb25zdCA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc0pTRXhlY3V0aW9uRm9yYmlkZGVuKCkgY29uc3QgPSAwOwog
CiAgICAgICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxVUkwoKTsg
fQogICAgICAgICBLVVJMIGNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdCB7IHJl
dHVybiB2aXJ0dWFsQ29tcGxldGVVUkwodXJsKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyQ29udGV4dC5jcHAKaW5kZXggM2IxNGU1OWU2MzhjZWE0NGJjNzFmNzlmZjJhZTc3NTdiMGM3
NmZjNS4uYjUxMjYyYTE5YTA4ZGExZTJhMDkyZjRlOWI0OTBmNDc2NGMzNTgxYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCkBAIC0xNjcsOSArMTY3LDEwIEBAIHZv
aWQgV29ya2VyQ29udGV4dDo6Y2xvc2UoKQogICAgIGlmIChtX2Nsb3NpbmcpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fY2xvc2luZyA9IHRydWU7CiAgICAgLy8gTGV0IGN1cnJlbnQgc2NyaXB0
IHJ1biB0byBjb21wbGV0aW9uIGJ1dCBwcmV2ZW50IGZ1dHVyZSBzY3JpcHQgZXZhbHVhdGlvbnMu
Ci0gICAgbV9zY3JpcHQtPmZvcmJpZEV4ZWN1dGlvbihXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpM
ZXRSdW5uaW5nU2NyaXB0RmluaXNoKTsKKyAgICAvLyBBZnRlciBtX2Nsb3NpbmcgaXMgc2V0LCBh
bGwgdGhlIHRhc2tzIGluIHRoZSBxdWV1ZSBjb250aW51ZSB0byBiZSBmZXRjaGVkIGJ1dCBvbmx5
CisgICAgLy8gdGFza3Mgd2l0aCBpc0NsZWFudXBUYXNrKCk9PXRydWUgd2lsbCBiZSBleGVjdXRl
ZC4KKyAgICBtX2Nsb3NpbmcgPSB0cnVlOwogICAgIHBvc3RUYXNrKENsb3NlV29ya2VyQ29udGV4
dFRhc2s6OmNyZWF0ZSgpKTsKIH0KIApAQCAtMzIwLDcgKzMyMSw3IEBAIGJvb2wgV29ya2VyQ29u
dGV4dDo6aXNDb250ZXh0VGhyZWFkKCkgY29uc3QKICAgICByZXR1cm4gY3VycmVudFRocmVhZCgp
ID09IHRocmVhZCgpLT50aHJlYWRJRCgpOwogfQogCi1ib29sIFdvcmtlckNvbnRleHQ6OmlzSlNF
eGVjdXRpb25UZXJtaW5hdGVkKCkgY29uc3QKK2Jvb2wgV29ya2VyQ29udGV4dDo6aXNKU0V4ZWN1
dGlvbkZvcmJpZGRlbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc2NyaXB0LT5pc0V4ZWN1dGlv
bkZvcmJpZGRlbigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaAppbmRl
eCBkMmNjYjExODBmYTMwOWYyNDBjYTdjYjNlNjBmNjUxZGEzYzhkMjQ5Li45NTNmZjA3NWZiYzkx
NTM3OTljZDQyYWI3NmMyYWI0ZjQ4OTlhYzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlckNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtl
ckNvbnRleHQuaApAQCAtMTIwLDcgKzEyMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGRhdGFiYXNlRXhjZWVkZWRRdW90YShjb25zdCBTdHJpbmcmKTsKICNl
bmRpZgogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZXh0VGhyZWFkKCkgY29uc3Q7Ci0gICAg
ICAgIHZpcnR1YWwgYm9vbCBpc0pTRXhlY3V0aW9uVGVybWluYXRlZCgpIGNvbnN0OworICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNKU0V4ZWN1dGlvbkZvcmJpZGRlbigpIGNvbnN0OwogCiAjaWYgRU5B
QkxFKEJMT0IpCiAgICAgICAgIERPTVVSTCogd2Via2l0VVJMKCkgY29uc3Q7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKaW5kZXggZGVhZmIwYjcwMGFhMjEwY2RmODdjMmM1
MGViN2E0NzJmMzY2YWJhNC4uYWVmOTM2ZjAxMzVmMTYxMDQ0M2I1MmY5OThjOGExN2NjYmJhMGMz
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcApAQCAtMTI3LDcgKzEy
Nyw3IEBAIHZvaWQqIFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkKCkKICAgICAgICAgaWYgKG1f
cnVuTG9vcC50ZXJtaW5hdGVkKCkpIHsKICAgICAgICAgICAgIC8vIFRoZSB3b3JrZXIgd2FzIHRl
cm1pbmF0ZWQgYmVmb3JlIHRoZSB0aHJlYWQgaGFkIGEgY2hhbmNlIHRvIHJ1bi4gU2luY2UgdGhl
IGNvbnRleHQgZGlkbid0IGV4aXN0IHlldCwKICAgICAgICAgICAgIC8vIGZvcmJpZEV4ZWN1dGlv
bigpIGNvdWxkbid0IGJlIGNhbGxlZCBmcm9tIHN0b3AoKS4KLSAgICAgICAgICAgbV93b3JrZXJD
b250ZXh0LT5zY3JpcHQoKS0+Zm9yYmlkRXhlY3V0aW9uKFdvcmtlclNjcmlwdENvbnRyb2xsZXI6
OlRlcm1pbmF0ZVJ1bm5pbmdTY3JpcHQpOworICAgICAgICAgICBtX3dvcmtlckNvbnRleHQtPnNj
cmlwdCgpLT5mb3JiaWRFeGVjdXRpb24oKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjI4LDcg
KzIyOCw3IEBAIHZvaWQgV29ya2VyVGhyZWFkOjpzdG9wKCkKIAogICAgIC8vIEVuc3VyZSB0aGF0
IHRhc2tzIGFyZSBiZWluZyBoYW5kbGVkIGJ5IHRocmVhZCBldmVudCBsb29wLiBJZiBzY3JpcHQg
ZXhlY3V0aW9uIHdlcmVuJ3QgZm9yYmlkZGVuLCBhIHdoaWxlKDEpIGxvb3AgaW4gSlMgY291bGQg
a2VlcCB0aGUgdGhyZWFkIGFsaXZlIGZvcmV2ZXIuCiAgICAgaWYgKG1fd29ya2VyQ29udGV4dCkg
ewotICAgICAgICBtX3dvcmtlckNvbnRleHQtPnNjcmlwdCgpLT5mb3JiaWRFeGVjdXRpb24oV29y
a2VyU2NyaXB0Q29udHJvbGxlcjo6VGVybWluYXRlUnVubmluZ1NjcmlwdCk7CisgICAgICAgIG1f
d29ya2VyQ29udGV4dC0+c2NyaXB0KCktPnNjaGVkdWxlRXhlY3V0aW9uVGVybWluYXRpb24oKTsK
IAogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2Vy
KCkuaW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChtX3dvcmtlckNvbnRleHQuZ2V0KCkp
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87940</attachid>
            <date>2011-04-01 16:37:44 -0700</date>
            <delta_ts>2011-04-13 14:50:32 -0700</delta_ts>
            <desc>Patch, another EWS fix.</desc>
            <filename>bug-57090-20110401163743.patch</filename>
            <type>text/plain</type>
            <size>22060</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE5NzEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjNTI1ZWVmNzVmNTM5ZGYx
NDk5ZDZhMjRmZTkyMWU4YWE0MzVhNTQ0Li44ODE2Njk1YzI2MGQ3MWZlOWFhYjY5ODRkM2ViMjQx
Nzg4MDU0ZTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjQgQEAKKzIwMTEtMDMtMzAgIERtaXRy
eSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgU2ltcGxpZnlpbmcgV29ya2VyIHRlcm1pbmF0aW9uIHNl
cXVlbmNlIChyZW1vdmluZyB1bm5lY2Vzc2FyeSBtdXRleCkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3MDkwCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LiBFeGlzdGluZyBXb3JrZXIgdGVzdHMgc2hvdWxkIHBhc3MuCisKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3Rl
bmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgIENoZWNrIGZvciBUZXJtaW5hdG9yLWNhdXNlZCBl
eGNlcHRpb24gKG9yIFRlcm1pbmF0b3I6OnNob3VsZFRlcm1pbmF0ZSBzaW5jZSBzb21ldGltZXMK
KyAgICAgICAgSlMgbWlnaHQgbm90IHJ1biBzaWduaWZpY2FudCBlbm91Z2ggY2h1bmsgdG8gYmUg
dGVybWluYXRlZCBieSBUZXJtaW5hdG9yKSBhbmQgc2V0CisgICAgICAgIHRoZSBmbGFnIHRvIGZv
cmJpZCBmdXR1cmUgcmVlbnRyeSBpbnRvIEpTLgorCisgICAgICAgICogYmluZGluZ3MvanMvV29y
a2VyU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRD
b250cm9sbGVyOjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250
cm9sbGVyOjpzY2hlZHVsZUV4ZWN1dGlvblRlcm1pbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmZvcmJpZEV4ZWN1dGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjppc0V4ZWN1dGlvbkZvcmJpZGRlbik6CisgICAg
ICAgICogYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyU2NyaXB0Q29udHJvbGxlcjo6c2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpmb3JiaWRFeGVjdXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6aXNFeGVjdXRpb25Gb3Ji
aWRkZW4pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OnByb3h5KToKKyAgICAg
ICAgU3ltbWV0cmljYWwgY2hhbmdlcyB0byBKU0MgYW5kIFY4IFdvcmtlclNjcmlwdENvbnRyb2xs
ZXJzOgorICAgICAgICAtIHJlbW92ZSBNdXRleCBhcm91bmQgb3BlcmF0aW9ucyB3aXRoIGV4ZWN1
dGlvbkZvcmJpZGRlbiBmbGFnLgorICAgICAgICAtIHNldC9jaGVjayB0aGF0IGZsYWcgb25seSBv
biBXb3JrZXIgdGhyZWFkLgorICAgICAgICAtIHNvbWUgcmVuYW1pbmcgaW4gYXR0ZW1wdCB0byBi
ZXR0ZXIgcmVmbGVjdCB3aGF0IHRoZSBtZXRob2RzIGRvLgorCisgICAgICAgICogYmluZGluZ3Mv
djgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhBYnN0
cmFjdEV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlY4QWJz
dHJhY3RFdmVudExpc3RlbmVyOjppbnZva2VFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmV2YWx1YXRlKToKKyAgICAgICAgQ2hlY2sg
Zm9yIHY4OjpUcnlDYXRjaDo6Q2FuQ29udGludWUoKSBhbmQgc2V0IGZvcmJpZEV4ZWN1dGlvbiBm
bGFnLgorICAgICAgICBUaGlzIHJlc3VsdCBpbmRpY2F0ZXMgdGhhdCBUZXJtaW5hdGVFeGVjdXRp
b24oKSB3YXMgaW4gZWZmZWN0IC0gd2Ugc2hvdWxkCisgICAgICAgIG5vdCByZWVudGVyIFY4IGFu
eW1vcmUgYWZ0ZXIgdGhhdC4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OmlzSlNFeGVjdXRpb25Gb3JiaWRkZW4pOgorICAgICAgICAqIGRv
bS9NZXNzYWdlUG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6ZGlzcGF0
Y2hNZXNzYWdlcyk6CisgICAgICAgIFN0b3AgZGlzcGF0Y2hpbmcgbWVzc2FnZXMgb25jZSB0aGUg
d29ya2VyIGNvbnRleHQgc3RhcnRlZCB0byBjbG9zZS4KKyAgICAgICAgUGVyIFdvcmtlcnMgc3Bl
Yywgb25jZSBXb3JrZXJHbG9iYWxTY29wZS5DbG9zZSgpIGlzIGNhbGxlZCwgdGhlIG5leHQKKyAg
ICAgICAgSlMgZXhlY3V0aW9uIGRvZXMgbm90IGhhcHBlbiwgaW5jbHVkaW5nIG9ubWVzc2FnZSBl
dmVudHMuIEJlZm9yZSB0aGlzCisgICAgICAgIGNoYW5nZSwgQ2xvc2UoKSB3YXMgc2V0dGluZyB0
aGUgZm9yYmlkRXhlY3V0aW9uIGZsYWcsIGluZGlyZWN0bHkgc3RvcHBpbmcKKyAgICAgICAgZXZl
bnRzIGZyb20gZGlzcGF0Y2hpbmcuCisKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJD
b250ZXh0Ojppc0pTRXhlY3V0aW9uRm9yYmlkZGVuKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtl
ckNvbnRleHQuaDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclRocmVhZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJUaHJlYWQ6OnN0b3ApOgorCiAyMDExLTAzLTI1ICBQYXZlbCBGZWxkbWFuICA8cGZl
bGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRz
a3kuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVu
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcApp
bmRleCBlNDQ0ZDg4ODQwMGM4N2I5ZDdjN2RhOThhYzM2YTgyYjBhMDM5ODM1Li4wZTNhZGEyYWIz
MTZkNDRhNTM0OWFiMWQ3NWIwNWFiYzcxNWQyZDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRl
ICJKU0V2ZW50LmgiCiAjaW5jbHVkZSAiSlNFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIkpTTWFp
blRocmVhZEV4ZWNTdGF0ZS5oIgorI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKICNpbmNsdWRl
IDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIu
aD4KIApAQCAtNjAsNyArNjEsNyBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6bWFya0pTRnVuY3Rp
b24oTWFya1N0YWNrJiBtYXJrU3RhY2spCiB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZl
bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgRXZlbnQq
IGV2ZW50KQogewogICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKLSAgICBpZiAo
IXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgfHwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNKU0V4
ZWN1dGlvblRlcm1pbmF0ZWQoKSkKKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgfHwg
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNKU0V4ZWN1dGlvbkZvcmJpZGRlbigpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwpAQCAt
MTI2LDYgKzEyNywxNCBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dAogCiAgICAgICAgIGdsb2Jh
bE9iamVjdC0+c2V0Q3VycmVudEV2ZW50KHNhdmVkRXZlbnQpOwogCisjaWYgRU5BQkxFKFdPUktF
UlMpCisgICAgICAgIGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc1dvcmtlckNvbnRleHQo
KSkgeworICAgICAgICAgICAgYm9vbCB0ZXJtaW5hdG9yQ2F1c2VkRXhjZXB0aW9uID0gKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpICYmIGV4ZWMtPmV4Y2VwdGlvbigpLmlzT2JqZWN0KCkgJiYgYXNPYmpl
Y3QoZXhlYy0+ZXhjZXB0aW9uKCkpLT5leGNlcHRpb25UeXBlKCkgPT0gVGVybWluYXRlZCk7Cisg
ICAgICAgICAgICBpZiAodGVybWluYXRvckNhdXNlZEV4Y2VwdGlvbiB8fCBnbG9iYWxEYXRhLnRl
cm1pbmF0b3Iuc2hvdWxkVGVybWluYXRlKCkpCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
V29ya2VyQ29udGV4dCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLT5zY3JpcHQoKS0+Zm9yYmlk
RXhlY3V0aW9uKCk7CisgICAgICAgIH0KKyNlbmRpZgorCiAgICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkgewogICAgICAgICAgICAgZXZlbnQtPnRhcmdldCgpLT51bmNhdWdodEV4Y2Vw
dGlvbkluRXZlbnRIYW5kbGVyKCk7CiAgICAgICAgICAgICByZXBvcnRDdXJyZW50RXhjZXB0aW9u
KGV4ZWMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2Ny
aXB0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3Jp
cHRDb250cm9sbGVyLmNwcAppbmRleCA2N2IwNDQxYWEyMmE0ZjUwNGJhZmI1MGFmMmMzMjJmMWFh
Mzc1NjEyLi5lZmFhNzVkOTViOTMxMDFjMGM5NTcxMjlkMmU0ZjRhMjkwNGM0NzliIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVy
LmNwcApAQCAtMTAwLDExICsxMDAsOSBAQCB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6Omlu
aXRTY3JpcHQoKQogCiBTY3JpcHRWYWx1ZSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0
ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQogewotICAgIHsKLSAgICAgICAg
TXV0ZXhMb2NrZXIgbG9jayhtX3NoYXJlZERhdGFNdXRleCk7Ci0gICAgICAgIGlmIChtX2V4ZWN1
dGlvbkZvcmJpZGRlbikKLSAgICAgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOwotICAgIH0K
KyAgICBpZiAoaXNFeGVjdXRpb25Gb3JiaWRkZW4oKSkKKyAgICAgICAgcmV0dXJuIFNjcmlwdFZh
bHVlKCk7CisKICAgICBTY3JpcHRWYWx1ZSBleGNlcHRpb247CiAgICAgU2NyaXB0VmFsdWUgcmVz
dWx0KGV2YWx1YXRlKHNvdXJjZUNvZGUsICZleGNlcHRpb24pKTsKICAgICBpZiAoZXhjZXB0aW9u
LmpzVmFsdWUoKSkgewpAQCAtMTE2LDExICsxMTQsOCBAQCBTY3JpcHRWYWx1ZSBXb3JrZXJTY3Jp
cHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2Rl
KQogCiBTY3JpcHRWYWx1ZSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBT
Y3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBTY3JpcHRWYWx1ZSogZXhjZXB0aW9uKQogewot
ICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX3NoYXJlZERhdGFNdXRleCk7Ci0gICAg
ICAgIGlmIChtX2V4ZWN1dGlvbkZvcmJpZGRlbikKLSAgICAgICAgICAgIHJldHVybiBTY3JpcHRW
YWx1ZSgpOwotICAgIH0KKyAgICBpZiAoaXNFeGVjdXRpb25Gb3JiaWRkZW4oKSkKKyAgICAgICAg
cmV0dXJuIFNjcmlwdFZhbHVlKCk7CiAKICAgICBpbml0U2NyaXB0SWZOZWVkZWQoKTsKICAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwpAQCAtMTMwLDEwICsxMjUsMTggQEAg
U2NyaXB0VmFsdWUgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY29uc3QgU2NyaXB0
U291cmNlQ29kZSYgc291cmNlQ29kZSwKICAgICBDb21wbGV0aW9uIGNvbXAgPSBKU0M6OmV2YWx1
YXRlKGV4ZWMsIGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigp
LCBzb3VyY2VDb2RlLmpzU291cmNlQ29kZSgpLCBtX3dvcmtlckNvbnRleHRXcmFwcGVyLmdldCgp
KTsKICAgICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNr
ZXIuc3RvcCgpOwogCi0gICAgaWYgKGNvbXAuY29tcGxUeXBlKCkgPT0gTm9ybWFsIHx8IGNvbXAu
Y29tcGxUeXBlKCkgPT0gUmV0dXJuVmFsdWUpCisKKyAgICBDb21wbFR5cGUgY29tcGxldGlvblR5
cGUgPSBjb21wLmNvbXBsVHlwZSgpOworCisgICAgaWYgKGNvbXBsZXRpb25UeXBlID09IFRlcm1p
bmF0ZWQgfHwgbV93b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xvYmFsRGF0YSgpLnRlcm1pbmF0b3Iu
c2hvdWxkVGVybWluYXRlKCkpIHsKKyAgICAgICAgZm9yYmlkRXhlY3V0aW9uKCk7CisgICAgICAg
IHJldHVybiBTY3JpcHRWYWx1ZSgpOworICAgIH0KKworICAgIGlmIChjb21wbGV0aW9uVHlwZSA9
PSBOb3JtYWwgfHwgY29tcGxldGlvblR5cGUgPT0gUmV0dXJuVmFsdWUpCiAgICAgICAgIHJldHVy
biBTY3JpcHRWYWx1ZSgqbV9nbG9iYWxEYXRhLCBjb21wLnZhbHVlKCkpOwogCi0gICAgaWYgKGNv
bXAuY29tcGxUeXBlKCkgPT0gVGhyb3cpIHsKKyAgICBpZiAoY29tcGxldGlvblR5cGUgPT0gVGhy
b3cpIHsKICAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKICAgICAgICAgaW50IGxpbmVOdW1i
ZXIgPSAwOwogICAgICAgICBTdHJpbmcgc291cmNlVVJMID0gc291cmNlQ29kZS51cmwoKS5zdHJp
bmcoKTsKQEAgLTE1MCwxNiArMTUzLDIxIEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6
c2V0RXhjZXB0aW9uKFNjcmlwdFZhbHVlIGV4Y2VwdGlvbikKICAgICB0aHJvd0Vycm9yKG1fd29y
a2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbEV4ZWMoKSwgZXhjZXB0aW9uLmpzVmFsdWUoKSk7CiB9
CiAKLXZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6Zm9yYmlkRXhlY3V0aW9uKEZvcmJpZEV4
ZWN1dGlvbk9wdGlvbiBvcHRpb24pCit2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OnNjaGVk
dWxlRXhlY3V0aW9uVGVybWluYXRpb24oKQogewotICAgIC8vIFRoaXMgZnVuY3Rpb24gbWF5IGJl
IGNhbGxlZCBmcm9tIGFub3RoZXIgdGhyZWFkLgotICAgIC8vIE11dGV4IHByb3RlY3Rpb24gZm9y
IG1fZXhlY3V0aW9uRm9yYmlkZGVuIGlzIG5lZWRlZCB0byBndWFyYW50ZWUgdGhhdCB0aGUgdmFs
dWUgaXMgc3luY2hyb25pemVkIGJldHdlZW4gcHJvY2Vzc29ycywgYmVjYXVzZQotICAgIC8vIGlm
IGl0IHdlcmUgbm90LCB0aGUgd29ya2VyIGNvdWxkIHJlLWVudGVyIEpTQzo6ZXZhbHVhdGUoKSwg
YnV0IHdpdGggdGltZW91dCBhbHJlYWR5IHJlc2V0LgotICAgIC8vIEl0IGlzIG5vdCBjcml0aWNh
bCBmb3IgVGVybWluYXRvcjo6bV9zaG91bGRUZXJtaW5hdGUgdG8gYmUgc3luY2hyb25pemVkLCB3
ZSBqdXN0IHJlbHkgb24gaXQgcmVhY2hpbmcgdGhlIHdvcmtlciB0aHJlYWQncyBwcm9jZXNzb3Ig
c29vbmVyIG9yIGxhdGVyLgotICAgIE11dGV4TG9ja2VyIGxvY2sobV9zaGFyZWREYXRhTXV0ZXgp
OworICAgIG1fZ2xvYmFsRGF0YS0+dGVybWluYXRvci50ZXJtaW5hdGVTb29uKCk7Cit9CisKK3Zv
aWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6Zm9yYmlkRXhlY3V0aW9uKCkKK3sKKyAgICBBU1NF
UlQobV93b3JrZXJDb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CiAgICAgbV9leGVjdXRpb25G
b3JiaWRkZW4gPSB0cnVlOwotICAgIGlmIChvcHRpb24gPT0gVGVybWluYXRlUnVubmluZ1Njcmlw
dCkKLSAgICAgICAgbV9nbG9iYWxEYXRhLT50ZXJtaW5hdG9yLnRlcm1pbmF0ZVNvb24oKTsKK30K
KworYm9vbCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjppc0V4ZWN1dGlvbkZvcmJpZGRlbigpIGNv
bnN0Cit7CisgICAgQVNTRVJUKG1fd29ya2VyQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwor
ICAgIHJldHVybiBtX2V4ZWN1dGlvbkZvcmJpZGRlbjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0
Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29u
dHJvbGxlci5oCmluZGV4IGMzYjgyMTVkZDYxNTM5YmViYWU4YzRjYWIwZGUxNzMyMzI2NmI2MDYu
LjVhYzA0ODIxNDE5OTIxMjcwZTdhNDFlYjQyYzEwYjdkZDg4NDcxMDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgKQEAgLTYx
LDkgKzYxLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIHNldEV4Y2Vw
dGlvbihTY3JpcHRWYWx1ZSk7CiAKLSAgICAgICAgZW51bSBGb3JiaWRFeGVjdXRpb25PcHRpb24g
eyBUZXJtaW5hdGVSdW5uaW5nU2NyaXB0LCBMZXRSdW5uaW5nU2NyaXB0RmluaXNoIH07Ci0gICAg
ICAgIHZvaWQgZm9yYmlkRXhlY3V0aW9uKEZvcmJpZEV4ZWN1dGlvbk9wdGlvbik7Ci0gICAgICAg
IGJvb2wgaXNFeGVjdXRpb25Gb3JiaWRkZW4oKSBjb25zdCB7IHJldHVybiBtX2V4ZWN1dGlvbkZv
cmJpZGRlbjsgfQorICAgICAgICAvLyBBc3luYyByZXF1ZXN0IHRvIHRlcm1pbmF0ZSBhIEpTIHJ1
biBleGVjdXRpb24uIEV2ZW50dWFsbHkgY2F1c2VzIHRlcm1pbmF0aW9uCisgICAgICAgIC8vIGV4
Y2VwdGlvbiByYWlzZWQgZHVyaW5nIEpTIGV4ZWN1dGlvbiwgaWYgdGhlIHdvcmtlciB0aHJlYWQg
aGFwcGVucyB0byBydW4gSlMuCisgICAgICAgIC8vIEFmdGVyIEpTIGV4ZWN1dGlvbiB3YXMgdGVy
bWluYXRlZCBpbiB0aGlzIHdheSwgdGhlIFdvcmtlciB0aHJlYWQgaGFzIHRvIHVzZQorICAgICAg
ICAvLyBmb3JiaWRFeGVjdXRpb24oKS9pc0V4ZWN1dGlvbkZvcmJpZGRlbigpIHRvIGd1YXJkIGFn
YWluc3QgcmVlbnRyeSBpbnRvIEpTLgorICAgICAgICAvLyBDYW4gYmUgY2FsbGVkIGZyb20gYW55
IHRocmVhZC4KKyAgICAgICAgdm9pZCBzY2hlZHVsZUV4ZWN1dGlvblRlcm1pbmF0aW9uKCk7CisK
KyAgICAgICAgLy8gQ2FsbGVkIG9uIFdvcmtlciB0aHJlYWQgd2hlbiBKUyBleGl0cyB3aXRoIHRl
cm1pbmF0aW9uIGV4Y2VwdGlvbiBjYXVzZWQgYnkgZm9yYmlkRXhlY3V0aW9uKCkgcmVxdWVzdCwK
KyAgICAgICAgLy8gb3IgYnkgV29ya2VyIHRocmVhZCB0ZXJtaW5hdGlvbiBjb2RlIHRvIHByZXZl
bnQgZnV0dXJlIGVudHJ5IGludG8gSlMuCisgICAgICAgIHZvaWQgZm9yYmlkRXhlY3V0aW9uKCk7
CisgICAgICAgIGJvb2wgaXNFeGVjdXRpb25Gb3JiaWRkZW4oKSBjb25zdDsKIAogICAgICAgICBK
U0M6OkpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpIHsgcmV0dXJuIG1fZ2xvYmFsRGF0YS5nZXQo
KTsgfQogCkBAIC03OCw4ICs4Niw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUmVm
UHRyPEpTQzo6SlNHbG9iYWxEYXRhPiBtX2dsb2JhbERhdGE7CiAgICAgICAgIFdvcmtlckNvbnRl
eHQqIG1fd29ya2VyQ29udGV4dDsKICAgICAgICAgSlNDOjpHbG9iYWw8SlNXb3JrZXJDb250ZXh0
PiBtX3dvcmtlckNvbnRleHRXcmFwcGVyOwotCi0gICAgICAgIE11dGV4IG1fc2hhcmVkRGF0YU11
dGV4OwogICAgICAgICBib29sIG1fZXhlY3V0aW9uRm9yYmlkZGVuOwogICAgIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVy
LmNwcAppbmRleCA2ZGM0OWZhOGZiOTIyMjE4ODAzMjlmNGMyNWU4NDkwNGY2NjgzZjgyLi5mMTEw
MmMyZGQ5NjZjMjM5ZmI5ZWUzYzI1Y2E4MTA0MWY5YzJiMjQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwCkBAIC03
Miw2ICs3MiwxMCBAQCBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6flY4QWJzdHJhY3RFdmVudExp
c3RlbmVyKCkKIAogdm9pZCBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXZlbnQqIGV2ZW50KQogeworICAgIC8vIERv
bid0IHJlZW50ZXIgVjggaWYgZXhlY3V0aW9uIHdhcyB0ZXJtaW5hdGVkIGluIHRoaXMgaW5zdGFu
Y2Ugb2YgVjguCisgICAgaWYgKGNvbnRleHQtPmlzSlNFeGVjdXRpb25Gb3JiaWRkZW4oKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgQVNTRVJUKGV2ZW50KTsKIAogICAgIC8vIFRoZSBjYWxsYmFj
ayBmdW5jdGlvbiBvbiBYTUxIdHRwUmVxdWVzdCBjYW4gY2xlYXIgdGhlIGV2ZW50IGxpc3RlbmVy
IGFuZCBkZXN0cm95cyAndGhpcycgb2JqZWN0LiBLZWVwIGEgbG9jYWwgcmVmZXJlbmNlIHRvIGl0
LgpAQCAtMTUwLDggKzE1NCwxMiBAQCB2b2lkIFY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjppbnZv
a2VFdmVudEhhbmRsZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dAogICAgICAgICBy
ZXR1cm5WYWx1ZSA9IGNhbGxMaXN0ZW5lckZ1bmN0aW9uKGNvbnRleHQsIGpzRXZlbnQsIGV2ZW50
KTsKICAgICAgICAgaWYgKHRyeUNhdGNoLkhhc0NhdWdodCgpKQogICAgICAgICAgICAgZXZlbnQt
PnRhcmdldCgpLT51bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCk7Ci0gICAgICAgIGlm
ICghdHJ5Q2F0Y2guQ2FuQ29udGludWUoKSkKKworICAgICAgICBpZiAoIXRyeUNhdGNoLkNhbkNv
bnRpbnVlKCkpIHsgLy8gUmVzdWx0IG9mIFRlcm1pbmF0ZUV4ZWN1dGlvbigpLgorICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKQorICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PFdvcmtlckNvbnRleHQqPihjb250ZXh0KS0+c2NyaXB0KCktPmZvcmJpZEV4ZWN1dGlv
bigpOwogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIHRyeUNhdGNoLlJl
c2V0KCk7CiAKICAgICAgICAgLy8gUmVzdG9yZSB0aGUgb2xkIGV2ZW50LiBUaGlzIG11c3QgYmUg
ZG9uZSBmb3IgYWxsIGV4aXQgcGF0aHMgdGhyb3VnaCB0aGlzIG1ldGhvZC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJv
eHkuY3BwCmluZGV4IGViNzI1MmI1ZWYxMjQxMzFiYjg3YTgwNTk2NmExY2ZkNjg3OTg5NWEuLjQy
NzgxNTY2MTg1MTU2ZDY1MTQ3YjI0ODdkNDZjZGZjZmQ2YmE0NmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
LmNwcApAQCAtMjAwLDggKzIwMCwxMCBAQCBTY3JpcHRWYWx1ZSBXb3JrZXJDb250ZXh0RXhlY3V0
aW9uUHJveHk6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBjb25zdCBTdAogICAgIHY4
OjpIYW5kbGU8djg6OlNjcmlwdD4gY29tcGlsZWRTY3JpcHQgPSBWOFByb3h5Ojpjb21waWxlU2Ny
aXB0KHNjcmlwdFN0cmluZywgZmlsZU5hbWUsIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogICAgIHY4
OjpMb2NhbDx2ODo6VmFsdWU+IHJlc3VsdCA9IHJ1blNjcmlwdChjb21waWxlZFNjcmlwdCk7CiAK
LSAgICBpZiAoIWV4Y2VwdGlvbkNhdGNoZXIuQ2FuQ29udGludWUoKSkKKyAgICBpZiAoIWV4Y2Vw
dGlvbkNhdGNoZXIuQ2FuQ29udGludWUoKSkgeworICAgICAgICBtX3dvcmtlckNvbnRleHQtPnNj
cmlwdCgpLT5mb3JiaWRFeGVjdXRpb24oKTsKICAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7
CisgICAgfQogCiAgICAgaWYgKGV4Y2VwdGlvbkNhdGNoZXIuSGFzQ2F1Z2h0KCkpIHsKICAgICAg
ICAgdjg6OkxvY2FsPHY4OjpNZXNzYWdlPiBtZXNzYWdlID0gZXhjZXB0aW9uQ2F0Y2hlci5NZXNz
YWdlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3Jp
cHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlw
dENvbnRyb2xsZXIuY3BwCmluZGV4IDQyZTAyZTY2ZDJlNDMzYjc5M2I4NTViM2JlMTM5ZDdlYTk4
Y2E0ZDUuLmY2NmU5MmZlOTE2YzFjNjFlNDBiODI5OGMzNWEzMTRkYzJkNGMwZDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIu
Y3BwCkBAIC02OCwxMSArNjgsOCBAQCBTY3JpcHRWYWx1ZSBXb3JrZXJTY3JpcHRDb250cm9sbGVy
OjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQogCiBTY3JpcHRW
YWx1ZSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VD
b2RlJiBzb3VyY2VDb2RlLCBTY3JpcHRWYWx1ZSogZXhjZXB0aW9uKQogewotICAgIHsKLSAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9jayhtX3NoYXJlZERhdGFNdXRleCk7Ci0gICAgICAgIGlmIChtX2V4
ZWN1dGlvbkZvcmJpZGRlbikKLSAgICAgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOwotICAg
IH0KKyAgICBpZiAoaXNFeGVjdXRpb25Gb3JiaWRkZW4oKSkKKyAgICAgIHJldHVybiBTY3JpcHRW
YWx1ZSgpOwogCiAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblN0YXRlIHN0YXRlOwogICAgIFNj
cmlwdFZhbHVlIHJlc3VsdCA9IG1fcHJveHktPmV2YWx1YXRlKHNvdXJjZUNvZGUuc291cmNlKCks
IHNvdXJjZUNvZGUudXJsKCkuc3RyaW5nKCksIFdURjo6dG9aZXJvQmFzZWRUZXh0UG9zaXRpb24o
c291cmNlQ29kZS5zdGFydFBvc2l0aW9uKCkpLCAmc3RhdGUpOwpAQCAtODYsMTMgKzgzLDIxIEBA
IFNjcmlwdFZhbHVlIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IFNjcmlw
dFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBX
b3JrZXJTY3JpcHRDb250cm9sbGVyOjpmb3JiaWRFeGVjdXRpb24oRm9yYmlkRXhlY3V0aW9uT3B0
aW9uIG9wdGlvbikKK3ZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6c2NoZWR1bGVFeGVjdXRp
b25UZXJtaW5hdGlvbigpCit7CisgICAgdjg6OlY4OjpUZXJtaW5hdGVFeGVjdXRpb24oKTsKK30K
Kwordm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpmb3JiaWRFeGVjdXRpb24oKQogewotICAg
IC8vIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBmcm9tIGFub3RoZXIgdGhyZWFkLgotICAg
IE11dGV4TG9ja2VyIGxvY2sobV9zaGFyZWREYXRhTXV0ZXgpOworICAgIEFTU0VSVChtX3dvcmtl
ckNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICBtX2V4ZWN1dGlvbkZvcmJpZGRlbiA9
IHRydWU7Ci0gICAgaWYgKG9wdGlvbiA9PSBUZXJtaW5hdGVSdW5uaW5nU2NyaXB0KQotICAgICAg
ICB2ODo6Vjg6OlRlcm1pbmF0ZUV4ZWN1dGlvbigpOworfQorCitib29sIFdvcmtlclNjcmlwdENv
bnRyb2xsZXI6OmlzRXhlY3V0aW9uRm9yYmlkZGVuKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV93
b3JrZXJDb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgcmV0dXJuIG1fZXhlY3V0aW9u
Rm9yYmlkZGVuOwogfQogCiB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OnNldEV4Y2VwdGlv
bihTY3JpcHRWYWx1ZSBleGNlcHRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgKaW5kZXggNWUzMTU5ZmNhMzkzMjQxYjIxNmEy
YWM5NmVkMWVmMzMwZDgwM2UxNC4uY2M0YjdjNDEyNTY1ZDY0YWZjMzYyOWYxMmFjYjBiMDFlMzky
MGVkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0
Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlw
dENvbnRyb2xsZXIuaApAQCAtNDgsNyArNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIFdvcmtlclNjcmlwdENvbnRyb2xsZXIoV29ya2VyQ29udGV4dCopOwogICAgICAgICB+V29y
a2VyU2NyaXB0Q29udHJvbGxlcigpOwogCi0gICAgICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eSogcHJveHkoKSB7IHJldHVybiBtX2V4ZWN1dGlvbkZvcmJpZGRlbiA/IDAgOiBtX3Byb3h5
LmdldCgpOyB9CisgICAgICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSogcHJveHkoKSB7
IHJldHVybiBtX3Byb3h5LmdldCgpOyB9CiAgICAgICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNv
bnRleHQoKSB7IHJldHVybiBtX3dvcmtlckNvbnRleHQ7IH0KIAogICAgICAgICBTY3JpcHRWYWx1
ZSBldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJik7CkBAIC01Niw5ICs1NiwxNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBzZXRFeGNlcHRpb24oU2NyaXB0VmFs
dWUpOwogCi0gICAgICAgIGVudW0gRm9yYmlkRXhlY3V0aW9uT3B0aW9uIHsgVGVybWluYXRlUnVu
bmluZ1NjcmlwdCwgTGV0UnVubmluZ1NjcmlwdEZpbmlzaCB9OwotICAgICAgICB2b2lkIGZvcmJp
ZEV4ZWN1dGlvbihGb3JiaWRFeGVjdXRpb25PcHRpb24pOwotICAgICAgICBib29sIGlzRXhlY3V0
aW9uRm9yYmlkZGVuKCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRpb25Gb3JiaWRkZW47IH0KKyAg
ICAgICAgLy8gQXN5bmMgcmVxdWVzdCB0byB0ZXJtaW5hdGUgYSBmdXR1cmUgSlMgZXhlY3V0aW9u
LiBFdmVudHVhbGx5IGNhdXNlcyB0ZXJtaW5hdGlvbgorICAgICAgICAvLyBleGNlcHRpb24gcmFp
c2VkIGR1cmluZyBKUyBleGVjdXRpb24sIGlmIHRoZSB3b3JrZXIgdGhyZWFkIGhhcHBlbnMgdG8g
cnVuIEpTLgorICAgICAgICAvLyBBZnRlciBKUyBleGVjdXRpb24gd2FzIHRlcm1pbmF0ZWQgaW4g
dGhpcyB3YXksIHRoZSBXb3JrZXIgdGhyZWFkIGhhcyB0byB1c2UKKyAgICAgICAgLy8gZm9yYmlk
RXhlY3V0aW9uKCkvaXNFeGVjdXRpb25Gb3JiaWRkZW4oKSB0byBndWFyZCBhZ2FpbnN0IHJlZW50
cnkgaW50byBKUy4KKyAgICAgICAgLy8gQ2FuIGJlIGNhbGxlZCBmcm9tIGFueSB0aHJlYWQuCisg
ICAgICAgIHZvaWQgc2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbigpOworCisgICAgICAgIC8v
IENhbGxlZCBvbiBXb3JrZXIgdGhyZWFkIHdoZW4gSlMgZXhpdHMgd2l0aCB0ZXJtaW5hdGlvbiBl
eGNlcHRpb24gY2F1c2VkIGJ5IGZvcmJpZEV4ZWN1dGlvbigpIHJlcXVlc3QsCisgICAgICAgIC8v
IG9yIGJ5IFdvcmtlciB0aHJlYWQgdGVybWluYXRpb24gY29kZSB0byBwcmV2ZW50IGZ1dHVyZSBl
bnRyeSBpbnRvIEpTLgorICAgICAgICB2b2lkIGZvcmJpZEV4ZWN1dGlvbigpOworICAgICAgICBi
b29sIGlzRXhlY3V0aW9uRm9yYmlkZGVuKCkgY29uc3Q7CiAKICAgICAgICAgLy8gUmV0dXJucyBX
b3JrZXJTY3JpcHRDb250cm9sbGVyIGZvciB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBjb250ZXh0
LiAwIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlIGN1cnJlbnQgZXhlY3V0aW5nIGNvbnRleHQgaXMg
bm90IHRoZSB3b3JrZXIgY29udGV4dC4KICAgICAgICAgc3RhdGljIFdvcmtlclNjcmlwdENvbnRy
b2xsZXIqIGNvbnRyb2xsZXJGb3JDb250ZXh0KCk7CkBAIC02Niw4ICs3NCw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBwcml2YXRlOgogICAgICAgICBXb3JrZXJDb250ZXh0KiBtX3dvcmtl
ckNvbnRleHQ7CiAgICAgICAgIE93blB0cjxXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk+IG1f
cHJveHk7Ci0KLSAgICAgICAgTXV0ZXggbV9zaGFyZWREYXRhTXV0ZXg7CiAgICAgICAgIGJvb2wg
bV9leGVjdXRpb25Gb3JiaWRkZW47CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCAy
M2E0MjVkZDZjMjgyOTQ2YzNlNDYxNDAyYTQ2NzIyODYwNjNmYTJiLi4wNmVjZmY1OTdjMzQ3Njc3
MTRiYmYxYzQ1ODA0MmIyNDBmMjM5YjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtMTA0NSw3
ICsxMDQ1LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZXh0
VGhyZWFkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzSlNFeGVjdXRpb25UZXJtaW5hdGVk
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNKU0V4ZWN1dGlv
bkZvcmJpZGRlbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2b2lkIHNldFVzaW5n
R2VvbG9jYXRpb24oYm9vbCBmKSB7IG1fdXNpbmdHZW9sb2NhdGlvbiA9IGY7IH0KICAgICBib29s
IHVzaW5nR2VvbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3VzaW5nR2VvbG9jYXRpb247IH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAppbmRleCAxYjdhZWE3MmEzODFiOThiYTMxMzVh
Y2U5MDQzN2M2YjgwN2ZjNjM0Li41ZWRjMzZjMjE0Nzk4ZTY0YWI2Y2VkYTQ0NWNiYTgyZTNiN2Nm
OTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNp
bmNsdWRlICJNZXNzYWdlRXZlbnQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2lu
Y2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNzEsNiAr
MTcyLDEzIEBAIHZvaWQgTWVzc2FnZVBvcnQ6OmRpc3BhdGNoTWVzc2FnZXMoKQogCiAgICAgT3du
UHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRhPiBldmVudERhdGE7CiAgICAgd2hpbGUg
KG1fZW50YW5nbGVkQ2hhbm5lbCAmJiBtX2VudGFuZ2xlZENoYW5uZWwtPnRyeUdldE1lc3NhZ2VG
cm9tUmVtb3RlKGV2ZW50RGF0YSkpIHsKKworI2lmIEVOQUJMRShXT1JLRVJTKQorICAgICAgICAv
LyBjbG9zZSgpIGluIFdvcmtlciBvbm1lc3NhZ2UgaGFuZGxlciBzaG91bGQgcHJldmVudCBuZXh0
IG1lc3NhZ2UgZnJvbSBkaXNwYXRjaGluZy4KKyAgICAgICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkgJiYgc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+
KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCktPmlzQ2xvc2luZygpKQorICAgICAgICAgICAgcmV0
dXJuOworI2VuZGlmCisKICAgICAgICAgT3duUHRyPE1lc3NhZ2VQb3J0QXJyYXk+IHBvcnRzID0g
TWVzc2FnZVBvcnQ6OmVudGFuZ2xlUG9ydHMoKm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgZXZl
bnREYXRhLT5jaGFubmVscygpKTsKICAgICAgICAgUmVmUHRyPEV2ZW50PiBldnQgPSBNZXNzYWdl
RXZlbnQ6OmNyZWF0ZShwb3J0cy5yZWxlYXNlKCksIGV2ZW50RGF0YS0+bWVzc2FnZSgpKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKaW5kZXggM2IzN2Yw
Y2EzZTU4YzVhNjViNWExYTEyYzU0YzBmMWQ1ODY1MjNjMi4uODQwNzY5OTZlYWQ3NzYyY2E4MDQ5
NjJkZWI3YzViN2NkODJhZTJjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oCkBAIC04Miw3ICs4Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdm9pZCBzdG9wRGF0YWJhc2VzKERhdGFiYXNlVGFza1N5bmNocm9uaXplciopOwogI2VuZGlm
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRleHRUaHJlYWQoKSBjb25zdCA9IDA7Ci0gICAg
ICAgIHZpcnR1YWwgYm9vbCBpc0pTRXhlY3V0aW9uVGVybWluYXRlZCgpIGNvbnN0ID0gMDsKKyAg
ICAgICAgdmlydHVhbCBib29sIGlzSlNFeGVjdXRpb25Gb3JiaWRkZW4oKSBjb25zdCA9IDA7CiAK
ICAgICAgICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFVSTCgpOyB9
CiAgICAgICAgIEtVUkwgY29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0IHsgcmV0
dXJuIHZpcnR1YWxDb21wbGV0ZVVSTCh1cmwpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJDb250ZXh0LmNwcAppbmRleCAzYjE0ZTU5ZTYzOGNlYTQ0YmM3MWY3OWZmMmFlNzc1N2IwYzc2
ZmM1Li5iNTEyNjJhMTlhMDhkYTFlMmEwOTJmNGU5YjQ5MGY0NzY0YzM1ODFiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKQEAgLTE2Nyw5ICsxNjcsMTAgQEAgdm9p
ZCBXb3JrZXJDb250ZXh0OjpjbG9zZSgpCiAgICAgaWYgKG1fY2xvc2luZykKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9jbG9zaW5nID0gdHJ1ZTsKICAgICAvLyBMZXQgY3VycmVudCBzY3JpcHQg
cnVuIHRvIGNvbXBsZXRpb24gYnV0IHByZXZlbnQgZnV0dXJlIHNjcmlwdCBldmFsdWF0aW9ucy4K
LSAgICBtX3NjcmlwdC0+Zm9yYmlkRXhlY3V0aW9uKFdvcmtlclNjcmlwdENvbnRyb2xsZXI6Okxl
dFJ1bm5pbmdTY3JpcHRGaW5pc2gpOworICAgIC8vIEFmdGVyIG1fY2xvc2luZyBpcyBzZXQsIGFs
bCB0aGUgdGFza3MgaW4gdGhlIHF1ZXVlIGNvbnRpbnVlIHRvIGJlIGZldGNoZWQgYnV0IG9ubHkK
KyAgICAvLyB0YXNrcyB3aXRoIGlzQ2xlYW51cFRhc2soKT09dHJ1ZSB3aWxsIGJlIGV4ZWN1dGVk
LgorICAgIG1fY2xvc2luZyA9IHRydWU7CiAgICAgcG9zdFRhc2soQ2xvc2VXb3JrZXJDb250ZXh0
VGFzazo6Y3JlYXRlKCkpOwogfQogCkBAIC0zMjAsNyArMzIxLDcgQEAgYm9vbCBXb3JrZXJDb250
ZXh0Ojppc0NvbnRleHRUaHJlYWQoKSBjb25zdAogICAgIHJldHVybiBjdXJyZW50VGhyZWFkKCkg
PT0gdGhyZWFkKCktPnRocmVhZElEKCk7CiB9CiAKLWJvb2wgV29ya2VyQ29udGV4dDo6aXNKU0V4
ZWN1dGlvblRlcm1pbmF0ZWQoKSBjb25zdAorYm9vbCBXb3JrZXJDb250ZXh0Ojppc0pTRXhlY3V0
aW9uRm9yYmlkZGVuKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zY3JpcHQtPmlzRXhlY3V0aW9u
Rm9yYmlkZGVuKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtl
ckNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCmluZGV4
IGQyY2NiMTE4MGZhMzA5ZjI0MGNhN2NiM2U2MGY2NTFkYTNjOGQyNDkuLjk1M2ZmMDc1ZmJjOTE1
Mzc5OWNkNDJhYjc2YzJhYjRmNDg5OWFjNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
Q29udGV4dC5oCkBAIC0xMjAsNyArMTIwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGF0YWJhc2VFeGNlZWRlZFF1b3RhKGNvbnN0IFN0cmluZyYpOwogI2Vu
ZGlmCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRleHRUaHJlYWQoKSBjb25zdDsKLSAgICAg
ICAgdmlydHVhbCBib29sIGlzSlNFeGVjdXRpb25UZXJtaW5hdGVkKCkgY29uc3Q7CisgICAgICAg
IHZpcnR1YWwgYm9vbCBpc0pTRXhlY3V0aW9uRm9yYmlkZGVuKCkgY29uc3Q7CiAKICNpZiBFTkFC
TEUoQkxPQikKICAgICAgICAgRE9NVVJMKiB3ZWJraXRVUkwoKSBjb25zdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcAppbmRleCBkZWFmYjBiNzAwYWEyMTBjZGY4N2MyYzUw
ZWI3YTQ3MmYzNjZhYmE0Li5hZWY5MzZmMDEzNWYxNjEwNDQzYjUyZjk5OGM4YTE3Y2NiYmEwYzM2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCkBAIC0xMjcsNyArMTI3
LDcgQEAgdm9pZCogV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWQoKQogICAgICAgICBpZiAobV9y
dW5Mb29wLnRlcm1pbmF0ZWQoKSkgewogICAgICAgICAgICAgLy8gVGhlIHdvcmtlciB3YXMgdGVy
bWluYXRlZCBiZWZvcmUgdGhlIHRocmVhZCBoYWQgYSBjaGFuY2UgdG8gcnVuLiBTaW5jZSB0aGUg
Y29udGV4dCBkaWRuJ3QgZXhpc3QgeWV0LAogICAgICAgICAgICAgLy8gZm9yYmlkRXhlY3V0aW9u
KCkgY291bGRuJ3QgYmUgY2FsbGVkIGZyb20gc3RvcCgpLgotICAgICAgICAgICBtX3dvcmtlckNv
bnRleHQtPnNjcmlwdCgpLT5mb3JiaWRFeGVjdXRpb24oV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6
VGVybWluYXRlUnVubmluZ1NjcmlwdCk7CisgICAgICAgICAgIG1fd29ya2VyQ29udGV4dC0+c2Ny
aXB0KCktPmZvcmJpZEV4ZWN1dGlvbigpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMjgsNyAr
MjI4LDcgQEAgdm9pZCBXb3JrZXJUaHJlYWQ6OnN0b3AoKQogCiAgICAgLy8gRW5zdXJlIHRoYXQg
dGFza3MgYXJlIGJlaW5nIGhhbmRsZWQgYnkgdGhyZWFkIGV2ZW50IGxvb3AuIElmIHNjcmlwdCBl
eGVjdXRpb24gd2VyZW4ndCBmb3JiaWRkZW4sIGEgd2hpbGUoMSkgbG9vcCBpbiBKUyBjb3VsZCBr
ZWVwIHRoZSB0aHJlYWQgYWxpdmUgZm9yZXZlci4KICAgICBpZiAobV93b3JrZXJDb250ZXh0KSB7
Ci0gICAgICAgIG1fd29ya2VyQ29udGV4dC0+c2NyaXB0KCktPmZvcmJpZEV4ZWN1dGlvbihXb3Jr
ZXJTY3JpcHRDb250cm9sbGVyOjpUZXJtaW5hdGVSdW5uaW5nU2NyaXB0KTsKKyAgICAgICAgbV93
b3JrZXJDb250ZXh0LT5zY3JpcHQoKS0+c2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbigpOwog
CiAjaWYgRU5BQkxFKERBVEFCQVNFKQogICAgICAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIo
KS5pbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KG1fd29ya2VyQ29udGV4dC5nZXQoKSk7
Cg==
</data>
<flag name="review"
          id="80401"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="80402"
          type_id="3"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89468</attachid>
            <date>2011-04-13 14:50:32 -0700</date>
            <delta_ts>2011-04-14 15:14:47 -0700</delta_ts>
            <desc>Patch, fixed flaky test</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>22847</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyYmViNGM5Li44MWFmM2IxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDQt
MTMgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2ltcGxpZnlpbmcgV29ya2VyIHRlcm1p
bmF0aW9uIHNlcXVlbmNlIChyZW1vdmluZyB1bm5lY2Vzc2FyeSBtdXRleCkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3MDkwCisKKyAgICAgICAgKiBm
YXN0L3dvcmtlcnMvcmVzb3VyY2VzL3NoYXJlZC13b3JrZXItbGlmZWN5Y2xlLmpzOgorICAgICAg
ICAoY3JlYXRlV29ya2VyRnJhbWUpOiBGaXhpbmcgZmxha3kgd29ya2VyIHRlc3QgLSByZW1vdmlu
ZyBkb2N1bWVudC53cml0ZSgpLgorCisgICAgICAgIFdoZW4gZG9jdW1lbnQud3JpdGUoKSBpcyBj
YWxsZWQgZGlyZWN0bHkgZnJvbSBpbmxpbmUgc2NyaXB0IGFzIGluIHRoaXMgdGVzdCwgaXQgYXBw
ZW5kcyB0byB0aGUgZG9jdW1lbnQuCisgICAgICAgIEhvd2V2ZXIsIGlmIHdvcmtlciB0aHJlYWRz
IGZyb20gcHJldmlvdXNseSBydW4gdGVzdCBhcmUgc3RpbGwgZXhpdGluZywKKyAgICAgICAgdGhl
IHRlc3QgZGVmZXJzIGl0c2VsZiB1c2luZyBzZXRUaW1lb3V0KCkgYW5kIGluIHRoaXMgY2FzZSBk
b2N1bWVudC53cml0ZSgpIG92ZXJ3cml0ZXMgdGhlIHdob2xlIGRvY3VtZW50CisgICAgICAgIGFu
ZCBtYWtlcyB0aGUgdGVzdCBmYWlsLgorCiAyMDExLTA0LTA4ICBYaWFvbWVpIEppICA8eGppQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBIeWF0dC4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9yZXNvdXJjZXMvc2hhcmVkLXdvcmtlci1saWZl
Y3ljbGUuanMgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvcmVzb3VyY2VzL3NoYXJlZC13b3Jr
ZXItbGlmZWN5Y2xlLmpzCmluZGV4IDJlY2JlMGIuLjA4OGY0OTIgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9yZXNvdXJjZXMvc2hhcmVkLXdvcmtlci1saWZlY3ljbGUuanMK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291cmNlcy9zaGFyZWQtd29ya2VyLWxp
ZmVjeWNsZS5qcwpAQCAtMjEsNyArMjEsMTAgQEAgZnVuY3Rpb24gcnVuVGVzdHMoKQogCiBmdW5j
dGlvbiBjcmVhdGVXb3JrZXJGcmFtZShpZCwgd29ya2VyTmFtZXMpCiB7Ci0gICAgZG9jdW1lbnQu
d3JpdGUoIjxpZnJhbWUgaWQ9JyIgKyBpZCArICInIHNyYz0ncmVzb3VyY2VzL2NyZWF0ZS1zaGFy
ZWQtd29ya2VyLWZyYW1lLmh0bWw/IiArIHdvcmtlck5hbWVzICsgIic+PC9pZnJhbWU+Iik7Cisg
ICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworICAgIGlm
cmFtZS5zZXRBdHRyaWJ1dGUoImlkIiwgaWQpOworICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoInNy
YyIsICJyZXNvdXJjZXMvY3JlYXRlLXNoYXJlZC13b3JrZXItZnJhbWUuaHRtbD8iICsgd29ya2Vy
TmFtZXMpOworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsKIH0KIAogZnVu
Y3Rpb24gY2xvc2VGcmFtZShpZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiZDI0NzNkLi5iM2E1ODBlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNjQgQEAKKzIwMTEtMDQtMTMgIERtaXRyeSBUaXRvdiAgPGRpbWlj
aEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgU2ltcGxpZnlpbmcgV29ya2VyIHRlcm1pbmF0aW9uIHNlcXVlbmNlIChyZW1vdmlu
ZyB1bm5lY2Vzc2FyeSBtdXRleCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU3MDkwCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBFeGlzdGluZyBXb3Jr
ZXIgdGVzdHMgc2hvdWxkIHBhc3MuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50TGlz
dGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVu
dCk6CisgICAgICAgIENoZWNrIGZvciBUZXJtaW5hdG9yLWNhdXNlZCBleGNlcHRpb24gKG9yIFRl
cm1pbmF0b3I6OnNob3VsZFRlcm1pbmF0ZSBzaW5jZSBzb21ldGltZXMKKyAgICAgICAgSlMgbWln
aHQgbm90IHJ1biBzaWduaWZpY2FudCBlbm91Z2ggY2h1bmsgdG8gYmUgdGVybWluYXRlZCBieSBU
ZXJtaW5hdG9yKSBhbmQgc2V0CisgICAgICAgIHRoZSBmbGFnIHRvIGZvcmJpZCBmdXR1cmUgcmVl
bnRyeSBpbnRvIEpTLgorCisgICAgICAgICogYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFs
dWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpzY2hlZHVs
ZUV4ZWN1dGlvblRlcm1pbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENv
bnRyb2xsZXI6OmZvcmJpZEV4ZWN1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3Jp
cHRDb250cm9sbGVyOjppc0V4ZWN1dGlvbkZvcmJpZGRlbik6CisgICAgICAgICogYmluZGluZ3Mv
anMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1dvcmtl
clNjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29u
dHJvbGxlcjo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJv
bGxlcjo6c2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJTY3JpcHRDb250cm9sbGVyOjpmb3JiaWRFeGVjdXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6aXNFeGVjdXRpb25Gb3JiaWRkZW4pOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OnByb3h5KToKKyAgICAgICAgU3ltbWV0cmljYWwg
Y2hhbmdlcyB0byBKU0MgYW5kIFY4IFdvcmtlclNjcmlwdENvbnRyb2xsZXJzOgorICAgICAgICAt
IHJlbW92ZSBNdXRleCBhcm91bmQgb3BlcmF0aW9ucyB3aXRoIGV4ZWN1dGlvbkZvcmJpZGRlbiBm
bGFnLgorICAgICAgICAtIHNldC9jaGVjayB0aGF0IGZsYWcgb25seSBvbiBXb3JrZXIgdGhyZWFk
LgorICAgICAgICAtIHNvbWUgcmVuYW1pbmcgaW4gYXR0ZW1wdCB0byBiZXR0ZXIgcmVmbGVjdCB3
aGF0IHRoZSBtZXRob2RzIGRvLgorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2
ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhBYnN0cmFjdEV2ZW50TGlzdGVu
ZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlY4QWJzdHJhY3RFdmVudExpc3Rl
bmVyOjppbnZva2VFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1dvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0
RXhlY3V0aW9uUHJveHk6OmV2YWx1YXRlKToKKyAgICAgICAgQ2hlY2sgZm9yIHY4OjpUcnlDYXRj
aDo6Q2FuQ29udGludWUoKSBhbmQgc2V0IGZvcmJpZEV4ZWN1dGlvbiBmbGFnLgorICAgICAgICBU
aGlzIHJlc3VsdCBpbmRpY2F0ZXMgdGhhdCBUZXJtaW5hdGVFeGVjdXRpb24oKSB3YXMgaW4gZWZm
ZWN0IC0gd2Ugc2hvdWxkCisgICAgICAgIG5vdCByZWVudGVyIFY4IGFueW1vcmUgYWZ0ZXIgdGhh
dC4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OmlzSlNFeGVjdXRpb25Gb3JiaWRkZW4pOgorICAgICAgICAqIGRvbS9NZXNzYWdlUG9ydC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6ZGlzcGF0Y2hNZXNzYWdlcyk6Cisg
ICAgICAgIFN0b3AgZGlzcGF0Y2hpbmcgbWVzc2FnZXMgb25jZSB0aGUgd29ya2VyIGNvbnRleHQg
c3RhcnRlZCB0byBjbG9zZS4KKyAgICAgICAgUGVyIFdvcmtlcnMgc3BlYywgb25jZSBXb3JrZXJH
bG9iYWxTY29wZS5DbG9zZSgpIGlzIGNhbGxlZCwgdGhlIG5leHQKKyAgICAgICAgSlMgZXhlY3V0
aW9uIGRvZXMgbm90IGhhcHBlbiwgaW5jbHVkaW5nIG9ubWVzc2FnZSBldmVudHMuIEJlZm9yZSB0
aGlzCisgICAgICAgIGNoYW5nZSwgQ2xvc2UoKSB3YXMgc2V0dGluZyB0aGUgZm9yYmlkRXhlY3V0
aW9uIGZsYWcsIGluZGlyZWN0bHkgc3RvcHBpbmcKKyAgICAgICAgZXZlbnRzIGZyb20gZGlzcGF0
Y2hpbmcuCisKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oOgorICAgICAg
ICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJD
b250ZXh0OjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0Ojppc0pTRXhl
Y3V0aW9uRm9yYmlkZGVuKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaDoKKyAg
ICAgICAgKiB3b3JrZXJzL1dvcmtlclRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJUaHJlYWQ6OndvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6
OnN0b3ApOgorCiAyMDExLTA0LTA3ICBSb2xhbmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCmluZGV4IGU0NDRk
ODguLjBlM2FkYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExp
c3RlbmVyLmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkpTRXZlbnQuaCIKICNpbmNs
dWRlICJKU0V2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgi
CisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5oPgogCkBAIC02MCw3ICs2MSw3
IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjptYXJrSlNGdW5jdGlvbihNYXJrU3RhY2smIG1hcmtT
dGFjaykKIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBFdmVudCogZXZlbnQpCiB7CiAgICAgQVNT
RVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwotICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCB8fCBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0pTRXhlY3V0aW9uVGVybWluYXRlZCgp
KQorICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCB8fCBzY3JpcHRFeGVjdXRpb25Db250
ZXh0LT5pc0pTRXhlY3V0aW9uRm9yYmlkZGVuKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CkBAIC0xMjYsNiArMTI3LDE0IEBAIHZv
aWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0CiAKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zZXRDdXJyZW50
RXZlbnQoc2F2ZWRFdmVudCk7CiAKKyNpZiBFTkFCTEUoV09SS0VSUykKKyAgICAgICAgaWYgKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKSB7CisgICAgICAgICAgICBi
b29sIHRlcm1pbmF0b3JDYXVzZWRFeGNlcHRpb24gPSAoZXhlYy0+aGFkRXhjZXB0aW9uKCkgJiYg
ZXhlYy0+ZXhjZXB0aW9uKCkuaXNPYmplY3QoKSAmJiBhc09iamVjdChleGVjLT5leGNlcHRpb24o
KSktPmV4Y2VwdGlvblR5cGUoKSA9PSBUZXJtaW5hdGVkKTsKKyAgICAgICAgICAgIGlmICh0ZXJt
aW5hdG9yQ2F1c2VkRXhjZXB0aW9uIHx8IGdsb2JhbERhdGEudGVybWluYXRvci5zaG91bGRUZXJt
aW5hdGUoKSkKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCktPnNjcmlwdCgpLT5mb3JiaWRFeGVjdXRpb24oKTsKKyAgICAg
ICAgfQorI2VuZGlmCisKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAgICAg
ICAgICAgICBldmVudC0+dGFyZ2V0KCktPnVuY2F1Z2h0RXhjZXB0aW9uSW5FdmVudEhhbmRsZXIo
KTsKICAgICAgICAgICAgIHJlcG9ydEN1cnJlbnRFeGNlcHRpb24oZXhlYyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCmlu
ZGV4IDY3YjA0NDEuLmVmYWE3NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCkBAIC0xMDAsMTEgKzEwMCw5IEBAIHZv
aWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6aW5pdFNjcmlwdCgpCiAKIFNjcmlwdFZhbHVlIFdv
cmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNv
dXJjZUNvZGUpCiB7Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fc2hhcmVkRGF0
YU11dGV4KTsKLSAgICAgICAgaWYgKG1fZXhlY3V0aW9uRm9yYmlkZGVuKQotICAgICAgICAgICAg
cmV0dXJuIFNjcmlwdFZhbHVlKCk7Ci0gICAgfQorICAgIGlmIChpc0V4ZWN1dGlvbkZvcmJpZGRl
bigpKQorICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKKwogICAgIFNjcmlwdFZhbHVlIGV4
Y2VwdGlvbjsKICAgICBTY3JpcHRWYWx1ZSByZXN1bHQoZXZhbHVhdGUoc291cmNlQ29kZSwgJmV4
Y2VwdGlvbikpOwogICAgIGlmIChleGNlcHRpb24uanNWYWx1ZSgpKSB7CkBAIC0xMTYsMTEgKzEx
NCw4IEBAIFNjcmlwdFZhbHVlIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0
IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCiAKIFNjcmlwdFZhbHVlIFdvcmtlclNjcmlw
dENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUs
IFNjcmlwdFZhbHVlKiBleGNlcHRpb24pCiB7Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBs
b2NrKG1fc2hhcmVkRGF0YU11dGV4KTsKLSAgICAgICAgaWYgKG1fZXhlY3V0aW9uRm9yYmlkZGVu
KQotICAgICAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7Ci0gICAgfQorICAgIGlmIChpc0V4
ZWN1dGlvbkZvcmJpZGRlbigpKQorICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKIAogICAg
IGluaXRTY3JpcHRJZk5lZWRlZCgpOwogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CkBAIC0xMzAsMTAgKzEyNSwxOCBAQCBTY3JpcHRWYWx1ZSBXb3JrZXJTY3JpcHRDb250
cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLAogICAg
IENvbXBsZXRpb24gY29tcCA9IEpTQzo6ZXZhbHVhdGUoZXhlYywgZXhlYy0+ZHluYW1pY0dsb2Jh
bE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCksIHNvdXJjZUNvZGUuanNTb3VyY2VDb2RlKCks
IG1fd29ya2VyQ29udGV4dFdyYXBwZXIuZ2V0KCkpOwogICAgIG1fd29ya2VyQ29udGV4dFdyYXBw
ZXItPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdG9wKCk7CiAKLSAgICBpZiAoY29tcC5j
b21wbFR5cGUoKSA9PSBOb3JtYWwgfHwgY29tcC5jb21wbFR5cGUoKSA9PSBSZXR1cm5WYWx1ZSkK
KworICAgIENvbXBsVHlwZSBjb21wbGV0aW9uVHlwZSA9IGNvbXAuY29tcGxUeXBlKCk7CisKKyAg
ICBpZiAoY29tcGxldGlvblR5cGUgPT0gVGVybWluYXRlZCB8fCBtX3dvcmtlckNvbnRleHRXcmFw
cGVyLT5nbG9iYWxEYXRhKCkudGVybWluYXRvci5zaG91bGRUZXJtaW5hdGUoKSkgeworICAgICAg
ICBmb3JiaWRFeGVjdXRpb24oKTsKKyAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7CisgICAg
fQorCisgICAgaWYgKGNvbXBsZXRpb25UeXBlID09IE5vcm1hbCB8fCBjb21wbGV0aW9uVHlwZSA9
PSBSZXR1cm5WYWx1ZSkKICAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCptX2dsb2JhbERhdGEs
IGNvbXAudmFsdWUoKSk7CiAKLSAgICBpZiAoY29tcC5jb21wbFR5cGUoKSA9PSBUaHJvdykgewor
ICAgIGlmIChjb21wbGV0aW9uVHlwZSA9PSBUaHJvdykgewogICAgICAgICBTdHJpbmcgZXJyb3JN
ZXNzYWdlOwogICAgICAgICBpbnQgbGluZU51bWJlciA9IDA7CiAgICAgICAgIFN0cmluZyBzb3Vy
Y2VVUkwgPSBzb3VyY2VDb2RlLnVybCgpLnN0cmluZygpOwpAQCAtMTUwLDE2ICsxNTMsMjEgQEAg
dm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpzZXRFeGNlcHRpb24oU2NyaXB0VmFsdWUgZXhj
ZXB0aW9uKQogICAgIHRocm93RXJyb3IobV93b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xvYmFsRXhl
YygpLCBleGNlcHRpb24uanNWYWx1ZSgpKTsKIH0KIAotdm9pZCBXb3JrZXJTY3JpcHRDb250cm9s
bGVyOjpmb3JiaWRFeGVjdXRpb24oRm9yYmlkRXhlY3V0aW9uT3B0aW9uIG9wdGlvbikKK3ZvaWQg
V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6c2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbigpCiB7
Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZyb20gYW5vdGhlciB0aHJlYWQu
Ci0gICAgLy8gTXV0ZXggcHJvdGVjdGlvbiBmb3IgbV9leGVjdXRpb25Gb3JiaWRkZW4gaXMgbmVl
ZGVkIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSB2YWx1ZSBpcyBzeW5jaHJvbml6ZWQgYmV0d2VlbiBw
cm9jZXNzb3JzLCBiZWNhdXNlCi0gICAgLy8gaWYgaXQgd2VyZSBub3QsIHRoZSB3b3JrZXIgY291
bGQgcmUtZW50ZXIgSlNDOjpldmFsdWF0ZSgpLCBidXQgd2l0aCB0aW1lb3V0IGFscmVhZHkgcmVz
ZXQuCi0gICAgLy8gSXQgaXMgbm90IGNyaXRpY2FsIGZvciBUZXJtaW5hdG9yOjptX3Nob3VsZFRl
cm1pbmF0ZSB0byBiZSBzeW5jaHJvbml6ZWQsIHdlIGp1c3QgcmVseSBvbiBpdCByZWFjaGluZyB0
aGUgd29ya2VyIHRocmVhZCdzIHByb2Nlc3NvciBzb29uZXIgb3IgbGF0ZXIuCi0gICAgTXV0ZXhM
b2NrZXIgbG9jayhtX3NoYXJlZERhdGFNdXRleCk7CisgICAgbV9nbG9iYWxEYXRhLT50ZXJtaW5h
dG9yLnRlcm1pbmF0ZVNvb24oKTsKK30KKwordm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpm
b3JiaWRFeGVjdXRpb24oKQoreworICAgIEFTU0VSVChtX3dvcmtlckNvbnRleHQtPmlzQ29udGV4
dFRocmVhZCgpKTsKICAgICBtX2V4ZWN1dGlvbkZvcmJpZGRlbiA9IHRydWU7Ci0gICAgaWYgKG9w
dGlvbiA9PSBUZXJtaW5hdGVSdW5uaW5nU2NyaXB0KQotICAgICAgICBtX2dsb2JhbERhdGEtPnRl
cm1pbmF0b3IudGVybWluYXRlU29vbigpOworfQorCitib29sIFdvcmtlclNjcmlwdENvbnRyb2xs
ZXI6OmlzRXhlY3V0aW9uRm9yYmlkZGVuKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV93b3JrZXJD
b250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgcmV0dXJuIG1fZXhlY3V0aW9uRm9yYmlk
ZGVuOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgKaW5kZXggYzNiODIxNS4uNWFj
MDQ4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0
Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlw
dENvbnRyb2xsZXIuaApAQCAtNjEsOSArNjEsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgICAgIHZvaWQgc2V0RXhjZXB0aW9uKFNjcmlwdFZhbHVlKTsKIAotICAgICAgICBlbnVtIEZv
cmJpZEV4ZWN1dGlvbk9wdGlvbiB7IFRlcm1pbmF0ZVJ1bm5pbmdTY3JpcHQsIExldFJ1bm5pbmdT
Y3JpcHRGaW5pc2ggfTsKLSAgICAgICAgdm9pZCBmb3JiaWRFeGVjdXRpb24oRm9yYmlkRXhlY3V0
aW9uT3B0aW9uKTsKLSAgICAgICAgYm9vbCBpc0V4ZWN1dGlvbkZvcmJpZGRlbigpIGNvbnN0IHsg
cmV0dXJuIG1fZXhlY3V0aW9uRm9yYmlkZGVuOyB9CisgICAgICAgIC8vIEFzeW5jIHJlcXVlc3Qg
dG8gdGVybWluYXRlIGEgSlMgcnVuIGV4ZWN1dGlvbi4gRXZlbnR1YWxseSBjYXVzZXMgdGVybWlu
YXRpb24KKyAgICAgICAgLy8gZXhjZXB0aW9uIHJhaXNlZCBkdXJpbmcgSlMgZXhlY3V0aW9uLCBp
ZiB0aGUgd29ya2VyIHRocmVhZCBoYXBwZW5zIHRvIHJ1biBKUy4KKyAgICAgICAgLy8gQWZ0ZXIg
SlMgZXhlY3V0aW9uIHdhcyB0ZXJtaW5hdGVkIGluIHRoaXMgd2F5LCB0aGUgV29ya2VyIHRocmVh
ZCBoYXMgdG8gdXNlCisgICAgICAgIC8vIGZvcmJpZEV4ZWN1dGlvbigpL2lzRXhlY3V0aW9uRm9y
YmlkZGVuKCkgdG8gZ3VhcmQgYWdhaW5zdCByZWVudHJ5IGludG8gSlMuCisgICAgICAgIC8vIENh
biBiZSBjYWxsZWQgZnJvbSBhbnkgdGhyZWFkLgorICAgICAgICB2b2lkIHNjaGVkdWxlRXhlY3V0
aW9uVGVybWluYXRpb24oKTsKKworICAgICAgICAvLyBDYWxsZWQgb24gV29ya2VyIHRocmVhZCB3
aGVuIEpTIGV4aXRzIHdpdGggdGVybWluYXRpb24gZXhjZXB0aW9uIGNhdXNlZCBieSBmb3JiaWRF
eGVjdXRpb24oKSByZXF1ZXN0LAorICAgICAgICAvLyBvciBieSBXb3JrZXIgdGhyZWFkIHRlcm1p
bmF0aW9uIGNvZGUgdG8gcHJldmVudCBmdXR1cmUgZW50cnkgaW50byBKUy4KKyAgICAgICAgdm9p
ZCBmb3JiaWRFeGVjdXRpb24oKTsKKyAgICAgICAgYm9vbCBpc0V4ZWN1dGlvbkZvcmJpZGRlbigp
IGNvbnN0OwogCiAgICAgICAgIEpTQzo6SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKCkgeyByZXR1
cm4gbV9nbG9iYWxEYXRhLmdldCgpOyB9CiAKQEAgLTc4LDggKzg2LDYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBSZWZQdHI8SlNDOjpKU0dsb2JhbERhdGE+IG1fZ2xvYmFsRGF0YTsK
ICAgICAgICAgV29ya2VyQ29udGV4dCogbV93b3JrZXJDb250ZXh0OwogICAgICAgICBKU0M6Okds
b2JhbDxKU1dvcmtlckNvbnRleHQ+IG1fd29ya2VyQ29udGV4dFdyYXBwZXI7Ci0KLSAgICAgICAg
TXV0ZXggbV9zaGFyZWREYXRhTXV0ZXg7CiAgICAgICAgIGJvb2wgbV9leGVjdXRpb25Gb3JiaWRk
ZW47CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhB
YnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhB
YnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwCmluZGV4IDZkYzQ5ZmEuLmYxMTAyYzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5l
ci5jcHAKQEAgLTcyLDYgKzcyLDEwIEBAIFY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjp+VjhBYnN0
cmFjdEV2ZW50TGlzdGVuZXIoKQogCiB2b2lkIFY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjpoYW5k
bGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFdmVudCogZXZlbnQpCiB7
CisgICAgLy8gRG9uJ3QgcmVlbnRlciBWOCBpZiBleGVjdXRpb24gd2FzIHRlcm1pbmF0ZWQgaW4g
dGhpcyBpbnN0YW5jZSBvZiBWOC4KKyAgICBpZiAoY29udGV4dC0+aXNKU0V4ZWN1dGlvbkZvcmJp
ZGRlbigpKQorICAgICAgICByZXR1cm47CisKICAgICBBU1NFUlQoZXZlbnQpOwogCiAgICAgLy8g
VGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG9uIFhNTEh0dHBSZXF1ZXN0IGNhbiBjbGVhciB0aGUgZXZl
bnQgbGlzdGVuZXIgYW5kIGRlc3Ryb3lzICd0aGlzJyBvYmplY3QuIEtlZXAgYSBsb2NhbCByZWZl
cmVuY2UgdG8gaXQuCkBAIC0xNTAsOCArMTU0LDEyIEBAIHZvaWQgVjhBYnN0cmFjdEV2ZW50TGlz
dGVuZXI6Omludm9rZUV2ZW50SGFuZGxlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
CiAgICAgICAgIHJldHVyblZhbHVlID0gY2FsbExpc3RlbmVyRnVuY3Rpb24oY29udGV4dCwganNF
dmVudCwgZXZlbnQpOwogICAgICAgICBpZiAodHJ5Q2F0Y2guSGFzQ2F1Z2h0KCkpCiAgICAgICAg
ICAgICBldmVudC0+dGFyZ2V0KCktPnVuY2F1Z2h0RXhjZXB0aW9uSW5FdmVudEhhbmRsZXIoKTsK
LSAgICAgICAgaWYgKCF0cnlDYXRjaC5DYW5Db250aW51ZSgpKQorCisgICAgICAgIGlmICghdHJ5
Q2F0Y2guQ2FuQ29udGludWUoKSkgeyAvLyBSZXN1bHQgb2YgVGVybWluYXRlRXhlY3V0aW9uKCku
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpCisgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpLT5zY3JpcHQoKS0+Zm9y
YmlkRXhlY3V0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAg
dHJ5Q2F0Y2guUmVzZXQoKTsKIAogICAgICAgICAvLyBSZXN0b3JlIHRoZSBvbGQgZXZlbnQuIFRo
aXMgbXVzdCBiZSBkb25lIGZvciBhbGwgZXhpdCBwYXRocyB0aHJvdWdoIHRoaXMgbWV0aG9kLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eS5jcHAKaW5kZXggZWI3MjUyYi4uNDI3ODE1NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJv
eHkuY3BwCkBAIC0yMDAsOCArMjAwLDEwIEBAIFNjcmlwdFZhbHVlIFdvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eTo6ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIGNvbnN0IFN0CiAgICAg
djg6OkhhbmRsZTx2ODo6U2NyaXB0PiBjb21waWxlZFNjcmlwdCA9IFY4UHJveHk6OmNvbXBpbGVT
Y3JpcHQoc2NyaXB0U3RyaW5nLCBmaWxlTmFtZSwgc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAgICAg
djg6OkxvY2FsPHY4OjpWYWx1ZT4gcmVzdWx0ID0gcnVuU2NyaXB0KGNvbXBpbGVkU2NyaXB0KTsK
IAotICAgIGlmICghZXhjZXB0aW9uQ2F0Y2hlci5DYW5Db250aW51ZSgpKQorICAgIGlmICghZXhj
ZXB0aW9uQ2F0Y2hlci5DYW5Db250aW51ZSgpKSB7CisgICAgICAgIG1fd29ya2VyQ29udGV4dC0+
c2NyaXB0KCktPmZvcmJpZEV4ZWN1dGlvbigpOwogICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUo
KTsKKyAgICB9CiAKICAgICBpZiAoZXhjZXB0aW9uQ2F0Y2hlci5IYXNDYXVnaHQoKSkgewogICAg
ICAgICB2ODo6TG9jYWw8djg6Ok1lc3NhZ2U+IG1lc3NhZ2UgPSBleGNlcHRpb25DYXRjaGVyLk1l
c3NhZ2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNj
cmlwdENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2Ny
aXB0Q29udHJvbGxlci5jcHAKaW5kZXggNDJlMDJlNi4uMjE0ZGE0ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKQEAg
LTY4LDExICs2OCw4IEBAIFNjcmlwdFZhbHVlIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1
YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCiAKIFNjcmlwdFZhbHVlIFdv
cmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNv
dXJjZUNvZGUsIFNjcmlwdFZhbHVlKiBleGNlcHRpb24pCiB7Ci0gICAgewotICAgICAgICBNdXRl
eExvY2tlciBsb2NrKG1fc2hhcmVkRGF0YU11dGV4KTsKLSAgICAgICAgaWYgKG1fZXhlY3V0aW9u
Rm9yYmlkZGVuKQotICAgICAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7Ci0gICAgfQorICAg
IGlmIChpc0V4ZWN1dGlvbkZvcmJpZGRlbigpKQorICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUo
KTsKIAogICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSBzdGF0ZTsKICAgICBTY3JpcHRW
YWx1ZSByZXN1bHQgPSBtX3Byb3h5LT5ldmFsdWF0ZShzb3VyY2VDb2RlLnNvdXJjZSgpLCBzb3Vy
Y2VDb2RlLnVybCgpLnN0cmluZygpLCBXVEY6OnRvWmVyb0Jhc2VkVGV4dFBvc2l0aW9uKHNvdXJj
ZUNvZGUuc3RhcnRQb3NpdGlvbigpKSwgJnN0YXRlKTsKQEAgLTg2LDEzICs4MywyMSBAQCBTY3Jp
cHRWYWx1ZSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3Vy
Y2VDb2RlJiBzb3VyY2VDb2RlLAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgV29ya2Vy
U2NyaXB0Q29udHJvbGxlcjo6Zm9yYmlkRXhlY3V0aW9uKEZvcmJpZEV4ZWN1dGlvbk9wdGlvbiBv
cHRpb24pCit2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OnNjaGVkdWxlRXhlY3V0aW9uVGVy
bWluYXRpb24oKQoreworICAgIHY4OjpWODo6VGVybWluYXRlRXhlY3V0aW9uKCk7Cit9CisKK3Zv
aWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6Zm9yYmlkRXhlY3V0aW9uKCkKIHsKLSAgICAvLyBU
aGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZnJvbSBhbm90aGVyIHRocmVhZC4KLSAgICBNdXRl
eExvY2tlciBsb2NrKG1fc2hhcmVkRGF0YU11dGV4KTsKKyAgICBBU1NFUlQobV93b3JrZXJDb250
ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CiAgICAgbV9leGVjdXRpb25Gb3JiaWRkZW4gPSB0cnVl
OwotICAgIGlmIChvcHRpb24gPT0gVGVybWluYXRlUnVubmluZ1NjcmlwdCkKLSAgICAgICAgdjg6
OlY4OjpUZXJtaW5hdGVFeGVjdXRpb24oKTsKK30KKworYm9vbCBXb3JrZXJTY3JpcHRDb250cm9s
bGVyOjppc0V4ZWN1dGlvbkZvcmJpZGRlbigpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fd29ya2Vy
Q29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIHJldHVybiBtX2V4ZWN1dGlvbkZvcmJp
ZGRlbjsKIH0KIAogdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpzZXRFeGNlcHRpb24oU2Ny
aXB0VmFsdWUgZXhjZXB0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
V29ya2VyU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IDVlMzE1OWYuLmNjNGI3YzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgK
QEAgLTQ4LDcgKzQ4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBXb3JrZXJTY3Jp
cHRDb250cm9sbGVyKFdvcmtlckNvbnRleHQqKTsKICAgICAgICAgfldvcmtlclNjcmlwdENvbnRy
b2xsZXIoKTsKIAotICAgICAgICBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIHByb3h5KCkg
eyByZXR1cm4gbV9leGVjdXRpb25Gb3JiaWRkZW4gPyAwIDogbV9wcm94eS5nZXQoKTsgfQorICAg
ICAgICBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIHByb3h5KCkgeyByZXR1cm4gbV9wcm94
eS5nZXQoKTsgfQogICAgICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0KCkgeyByZXR1
cm4gbV93b3JrZXJDb250ZXh0OyB9CiAKICAgICAgICAgU2NyaXB0VmFsdWUgZXZhbHVhdGUoY29u
c3QgU2NyaXB0U291cmNlQ29kZSYpOwpAQCAtNTYsOSArNTYsMTcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIHZvaWQgc2V0RXhjZXB0aW9uKFNjcmlwdFZhbHVlKTsKIAotICAgICAg
ICBlbnVtIEZvcmJpZEV4ZWN1dGlvbk9wdGlvbiB7IFRlcm1pbmF0ZVJ1bm5pbmdTY3JpcHQsIExl
dFJ1bm5pbmdTY3JpcHRGaW5pc2ggfTsKLSAgICAgICAgdm9pZCBmb3JiaWRFeGVjdXRpb24oRm9y
YmlkRXhlY3V0aW9uT3B0aW9uKTsKLSAgICAgICAgYm9vbCBpc0V4ZWN1dGlvbkZvcmJpZGRlbigp
IGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0aW9uRm9yYmlkZGVuOyB9CisgICAgICAgIC8vIEFzeW5j
IHJlcXVlc3QgdG8gdGVybWluYXRlIGEgZnV0dXJlIEpTIGV4ZWN1dGlvbi4gRXZlbnR1YWxseSBj
YXVzZXMgdGVybWluYXRpb24KKyAgICAgICAgLy8gZXhjZXB0aW9uIHJhaXNlZCBkdXJpbmcgSlMg
ZXhlY3V0aW9uLCBpZiB0aGUgd29ya2VyIHRocmVhZCBoYXBwZW5zIHRvIHJ1biBKUy4KKyAgICAg
ICAgLy8gQWZ0ZXIgSlMgZXhlY3V0aW9uIHdhcyB0ZXJtaW5hdGVkIGluIHRoaXMgd2F5LCB0aGUg
V29ya2VyIHRocmVhZCBoYXMgdG8gdXNlCisgICAgICAgIC8vIGZvcmJpZEV4ZWN1dGlvbigpL2lz
RXhlY3V0aW9uRm9yYmlkZGVuKCkgdG8gZ3VhcmQgYWdhaW5zdCByZWVudHJ5IGludG8gSlMuCisg
ICAgICAgIC8vIENhbiBiZSBjYWxsZWQgZnJvbSBhbnkgdGhyZWFkLgorICAgICAgICB2b2lkIHNj
aGVkdWxlRXhlY3V0aW9uVGVybWluYXRpb24oKTsKKworICAgICAgICAvLyBDYWxsZWQgb24gV29y
a2VyIHRocmVhZCB3aGVuIEpTIGV4aXRzIHdpdGggdGVybWluYXRpb24gZXhjZXB0aW9uIGNhdXNl
ZCBieSBmb3JiaWRFeGVjdXRpb24oKSByZXF1ZXN0LAorICAgICAgICAvLyBvciBieSBXb3JrZXIg
dGhyZWFkIHRlcm1pbmF0aW9uIGNvZGUgdG8gcHJldmVudCBmdXR1cmUgZW50cnkgaW50byBKUy4K
KyAgICAgICAgdm9pZCBmb3JiaWRFeGVjdXRpb24oKTsKKyAgICAgICAgYm9vbCBpc0V4ZWN1dGlv
bkZvcmJpZGRlbigpIGNvbnN0OwogCiAgICAgICAgIC8vIFJldHVybnMgV29ya2VyU2NyaXB0Q29u
dHJvbGxlciBmb3IgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgY29udGV4dC4gMCB3aWxsIGJlIHJl
dHVybmVkIGlmIHRoZSBjdXJyZW50IGV4ZWN1dGluZyBjb250ZXh0IGlzIG5vdCB0aGUgd29ya2Vy
IGNvbnRleHQuCiAgICAgICAgIHN0YXRpYyBXb3JrZXJTY3JpcHRDb250cm9sbGVyKiBjb250cm9s
bGVyRm9yQ29udGV4dCgpOwpAQCAtNjYsOCArNzQsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgcHJpdmF0ZToKICAgICAgICAgV29ya2VyQ29udGV4dCogbV93b3JrZXJDb250ZXh0OwogICAg
ICAgICBPd25QdHI8V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5PiBtX3Byb3h5OwotCi0gICAg
ICAgIE11dGV4IG1fc2hhcmVkRGF0YU11dGV4OwogICAgICAgICBib29sIG1fZXhlY3V0aW9uRm9y
YmlkZGVuOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggMWYwZjJhMC4uNmNjNDQ4
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTEwMjcsNyArMTAyNyw3IEBAIHB1YmxpYzoKICNl
bmRpZgogCiAgICAgdmlydHVhbCBib29sIGlzQ29udGV4dFRocmVhZCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBpc0pTRXhlY3V0aW9uVGVybWluYXRlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCBib29sIGlzSlNFeGVjdXRpb25Gb3JiaWRkZW4oKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogCiAgICAgdm9pZCBzZXRVc2luZ0dlb2xvY2F0aW9uKGJvb2wgZikgeyBt
X3VzaW5nR2VvbG9jYXRpb24gPSBmOyB9CiAgICAgYm9vbCB1c2luZ0dlb2xvY2F0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV91c2luZ0dlb2xvY2F0aW9uOyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9y
dC5jcHAKaW5kZXggMWI3YWVhNy4uNWVkYzM2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL01lc3NhZ2VQb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQu
Y3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCiAjaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIldvcmtl
ckNvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMTcxLDYgKzE3MiwxMyBAQCB2b2lkIE1lc3NhZ2VQb3J0OjpkaXNw
YXRjaE1lc3NhZ2VzKCkKIAogICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWw6OkV2ZW50RGF0
YT4gZXZlbnREYXRhOwogICAgIHdoaWxlIChtX2VudGFuZ2xlZENoYW5uZWwgJiYgbV9lbnRhbmds
ZWRDaGFubmVsLT50cnlHZXRNZXNzYWdlRnJvbVJlbW90ZShldmVudERhdGEpKSB7CisKKyNpZiBF
TkFCTEUoV09SS0VSUykKKyAgICAgICAgLy8gY2xvc2UoKSBpbiBXb3JrZXIgb25tZXNzYWdlIGhh
bmRsZXIgc2hvdWxkIHByZXZlbnQgbmV4dCBtZXNzYWdlIGZyb20gZGlzcGF0Y2hpbmcuCisgICAg
ICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpICYmIHN0
YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLT5pc0Ns
b3NpbmcoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyNlbmRpZgorCiAgICAgICAgIE93blB0cjxN
ZXNzYWdlUG9ydEFycmF5PiBwb3J0cyA9IE1lc3NhZ2VQb3J0OjplbnRhbmdsZVBvcnRzKCptX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQsIGV2ZW50RGF0YS0+Y2hhbm5lbHMoKSk7CiAgICAgICAgIFJl
ZlB0cjxFdmVudD4gZXZ0ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUocG9ydHMucmVsZWFzZSgpLCBl
dmVudERhdGEtPm1lc3NhZ2UoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9T
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oCmluZGV4IDNiMzdmMGMuLjg0MDc2OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaApAQCAtODIsNyArODIsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc3RvcERhdGFiYXNlcyhEYXRhYmFzZVRhc2tTeW5jaHJv
bml6ZXIqKTsKICNlbmRpZgogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZXh0VGhyZWFkKCkg
Y29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNKU0V4ZWN1dGlvblRlcm1pbmF0ZWQo
KSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0pTRXhlY3V0aW9uRm9yYmlkZGVu
KCkgY29uc3QgPSAwOwogCiAgICAgICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJu
IHZpcnR1YWxVUkwoKTsgfQogICAgICAgICBLVVJMIGNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYg
dXJsKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsQ29tcGxldGVVUkwodXJsKTsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKaW5kZXggM2IxNGU1OS4uYjUxMjYyYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCkBAIC0xNjcsOSArMTY3LDEw
IEBAIHZvaWQgV29ya2VyQ29udGV4dDo6Y2xvc2UoKQogICAgIGlmIChtX2Nsb3NpbmcpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1fY2xvc2luZyA9IHRydWU7CiAgICAgLy8gTGV0IGN1cnJlbnQg
c2NyaXB0IHJ1biB0byBjb21wbGV0aW9uIGJ1dCBwcmV2ZW50IGZ1dHVyZSBzY3JpcHQgZXZhbHVh
dGlvbnMuCi0gICAgbV9zY3JpcHQtPmZvcmJpZEV4ZWN1dGlvbihXb3JrZXJTY3JpcHRDb250cm9s
bGVyOjpMZXRSdW5uaW5nU2NyaXB0RmluaXNoKTsKKyAgICAvLyBBZnRlciBtX2Nsb3NpbmcgaXMg
c2V0LCBhbGwgdGhlIHRhc2tzIGluIHRoZSBxdWV1ZSBjb250aW51ZSB0byBiZSBmZXRjaGVkIGJ1
dCBvbmx5CisgICAgLy8gdGFza3Mgd2l0aCBpc0NsZWFudXBUYXNrKCk9PXRydWUgd2lsbCBiZSBl
eGVjdXRlZC4KKyAgICBtX2Nsb3NpbmcgPSB0cnVlOwogICAgIHBvc3RUYXNrKENsb3NlV29ya2Vy
Q29udGV4dFRhc2s6OmNyZWF0ZSgpKTsKIH0KIApAQCAtMzIwLDcgKzMyMSw3IEBAIGJvb2wgV29y
a2VyQ29udGV4dDo6aXNDb250ZXh0VGhyZWFkKCkgY29uc3QKICAgICByZXR1cm4gY3VycmVudFRo
cmVhZCgpID09IHRocmVhZCgpLT50aHJlYWRJRCgpOwogfQogCi1ib29sIFdvcmtlckNvbnRleHQ6
OmlzSlNFeGVjdXRpb25UZXJtaW5hdGVkKCkgY29uc3QKK2Jvb2wgV29ya2VyQ29udGV4dDo6aXNK
U0V4ZWN1dGlvbkZvcmJpZGRlbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc2NyaXB0LT5pc0V4
ZWN1dGlvbkZvcmJpZGRlbigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQu
aAppbmRleCBkMmNjYjExLi45NTNmZjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNv
bnRleHQuaApAQCAtMTIwLDcgKzEyMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dmlydHVhbCB2b2lkIGRhdGFiYXNlRXhjZWVkZWRRdW90YShjb25zdCBTdHJpbmcmKTsKICNlbmRp
ZgogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZXh0VGhyZWFkKCkgY29uc3Q7Ci0gICAgICAg
IHZpcnR1YWwgYm9vbCBpc0pTRXhlY3V0aW9uVGVybWluYXRlZCgpIGNvbnN0OworICAgICAgICB2
aXJ0dWFsIGJvb2wgaXNKU0V4ZWN1dGlvbkZvcmJpZGRlbigpIGNvbnN0OwogCiAjaWYgRU5BQkxF
KEJMT0IpCiAgICAgICAgIERPTVVSTCogd2Via2l0VVJMKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKaW5kZXggZGVhZmIwYi4uYWVmOTM2ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcApAQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQq
IFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkKCkKICAgICAgICAgaWYgKG1fcnVuTG9vcC50ZXJt
aW5hdGVkKCkpIHsKICAgICAgICAgICAgIC8vIFRoZSB3b3JrZXIgd2FzIHRlcm1pbmF0ZWQgYmVm
b3JlIHRoZSB0aHJlYWQgaGFkIGEgY2hhbmNlIHRvIHJ1bi4gU2luY2UgdGhlIGNvbnRleHQgZGlk
bid0IGV4aXN0IHlldCwKICAgICAgICAgICAgIC8vIGZvcmJpZEV4ZWN1dGlvbigpIGNvdWxkbid0
IGJlIGNhbGxlZCBmcm9tIHN0b3AoKS4KLSAgICAgICAgICAgbV93b3JrZXJDb250ZXh0LT5zY3Jp
cHQoKS0+Zm9yYmlkRXhlY3V0aW9uKFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OlRlcm1pbmF0ZVJ1
bm5pbmdTY3JpcHQpOworICAgICAgICAgICBtX3dvcmtlckNvbnRleHQtPnNjcmlwdCgpLT5mb3Ji
aWRFeGVjdXRpb24oKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjI4LDcgKzIyOCw3IEBAIHZv
aWQgV29ya2VyVGhyZWFkOjpzdG9wKCkKIAogICAgIC8vIEVuc3VyZSB0aGF0IHRhc2tzIGFyZSBi
ZWluZyBoYW5kbGVkIGJ5IHRocmVhZCBldmVudCBsb29wLiBJZiBzY3JpcHQgZXhlY3V0aW9uIHdl
cmVuJ3QgZm9yYmlkZGVuLCBhIHdoaWxlKDEpIGxvb3AgaW4gSlMgY291bGQga2VlcCB0aGUgdGhy
ZWFkIGFsaXZlIGZvcmV2ZXIuCiAgICAgaWYgKG1fd29ya2VyQ29udGV4dCkgewotICAgICAgICBt
X3dvcmtlckNvbnRleHQtPnNjcmlwdCgpLT5mb3JiaWRFeGVjdXRpb24oV29ya2VyU2NyaXB0Q29u
dHJvbGxlcjo6VGVybWluYXRlUnVubmluZ1NjcmlwdCk7CisgICAgICAgIG1fd29ya2VyQ29udGV4
dC0+c2NyaXB0KCktPnNjaGVkdWxlRXhlY3V0aW9uVGVybWluYXRpb24oKTsKIAogI2lmIEVOQUJM
RShEQVRBQkFTRSkKICAgICAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuaW50ZXJydXB0
QWxsRGF0YWJhc2VzRm9yQ29udGV4dChtX3dvcmtlckNvbnRleHQuZ2V0KCkpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>