<?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>46524</bug_id>
          
          <creation_ts>2010-09-24 15:00:58 -0700</creation_ts>
          <short_desc>Bridge all FileSystem operations on Workers to the MainThread</short_desc>
          <delta_ts>2010-09-30 13:39:33 -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 Misc.</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>
          
          <blocked>42903</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kinuko Yasuda">kinuko</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dumi</cc>
    
    <cc>ericu</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>284740</commentid>
    <comment_count>0</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-09-24 15:00:58 -0700</bug_when>
    <thetext>Bridge all FileSystem operations to MainThread for Workers.

This is also necessary to support synchronous operations on workers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284771</commentid>
    <comment_count>1</comment_count>
      <attachid>68771</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-09-24 15:33:15 -0700</bug_when>
    <thetext>Created attachment 68771
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284826</commentid>
    <comment_count>2</comment_count>
      <attachid>68771</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-09-24 16:21:36 -0700</bug_when>
    <thetext>Comment on attachment 68771
Patch

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

a couple of nits.

&gt; WebKit/chromium/src/WebFileSystemCallbacksImpl.cpp:48
&gt;  WebFileSystemCallbacksImpl::WebFileSystemCallbacksImpl(PassOwnPtr&lt;AsyncFileSystemCallbacks&gt; callbacks)

no need for this constructor. webkit allows default parameters.

&gt; WebKit/chromium/src/WebFileSystemCallbacksImpl.h:55
&gt; +    WebFileSystemCallbacksImpl(PassOwnPtr&lt;WebCore::AsyncFileSystemCallbacks&gt;, WebCore::ScriptExecutionContext*);

WebCore::ScriptExecutionContext* = 0, and remove the other constructor.

&gt; WebKit/chromium/src/WorkerAsyncFileSystemChromium.cpp:63
&gt; +    ASSERT(m_scriptExecutionContext &amp;&amp; m_scriptExecutionContext-&gt;isWorkerContext());

you can just do ASSERT(m_scriptExecutionContext-&gt;isWorkerContext()).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284846</commentid>
    <comment_count>3</comment_count>
      <attachid>68771</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-09-24 16:40:25 -0700</bug_when>
    <thetext>Comment on attachment 68771
Patch

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

&gt; WebKit/chromium/src/WebFileSystemCallbacksImpl.h:55
&gt; +    WebFileSystemCallbacksImpl(PassOwnPtr&lt;WebCore::AsyncFileSystemCallbacks&gt;, WebCore::ScriptExecutionContext*);

Why not just always have this constructor?

It feels odd to me to have two different constructors and depending on which one I call different methods may be called.

&gt; WebKit/chromium/src/WorkerAsyncFileSystemChromium.cpp:76
&gt; +    RefPtr&lt;WorkerFileSystemCallbacksBridge&gt; bridge = WorkerFileSystemCallbacksBridge::create(m_worker, m_scriptExecutionContext, new WebKit::WebFileSystemCallbacksImpl(callbacks));

I would make this a private method.

Something like createWorkerFileSystemCallbacksBridge().

Then you don&apos;t even need to put it in a local variable.

For example,
createWorkerFileSystemCallbacksBridge()-&gt;postMoveToMainThread(m_webFileSystem, srcPath, destPath, m_mode)

&gt; WebKit/chromium/src/WorkerAsyncFileSystemChromium.h:61
&gt; +    virtual void move(const String&amp; srcPath, const String&amp; destPath, PassOwnPtr&lt;AsyncFileSystemCallbacks&gt;);

WebKit tries to avoid abbreviations.

s/src/source/
s/dest/destination/

&gt; WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp:54
&gt; +    {

It would be nice to compile assert sizeof(WebKit::WebFileInfo) == sizeof(double) just to catch any change to this structure and make sure this copy method is updated appropriate (and add a comment before the compile assert explaining why it is here).

&gt; WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp:69
&gt; +            WebKit::WebFileSystemEntry newEntry;
&gt; +            WTF::String name = entries[i].name;
&gt; +            newEntry.isDirectory = entries[i].isDirectory;
&gt; +            newEntry.name = name.crossThreadString();
&gt; +            newEntries[i] = newEntry;

Why not just use newEntries directly?
  newEntries[i].isDirectory = entries[i].isDirectory;
  newEntries[i].name = name.crossThreadString();

&gt; WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp:157
&gt; +{

It feels like these should 
  ASSERT(!m_selfRef);

I wonder if the constructor should just be private and all of the methods just exposed as static. (Of course that would invalid my other comment about making a common method to do the construction).

&gt; WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp:246
&gt; +    ASSERT(isMainThread());
&gt; +    if (bridge-&gt;derefIfWorkerIsStopped())
&gt; +        return;
&gt; +    ASSERT(fileSystem);

Since these checks appear in every callback, it felt like there should be a better way to do it. I think I&apos;ve got one for you.

Make a method something like this

void WorkerFileSystemCallbacksBridge::runTaskWithChecksOnMainThread(WebCore::ScriptExecutionContext* context, WorkerFileSystemCallbacksBridge* bridge, PassOwnPtr&lt;Task&gt; taskToRun)
{
  ASSERT(isMainThread());
  if (bridge-&gt;derefIfWorkerIsStopped())
       return;
   taskToRun-&gt;performTask(context);
}

This is a horrible method name (maybe runTaskOnMainThread).

Change calls from m_worker-&gt;dispatchTaskToMainThread to call this method

WorkerFileSystemCallbacksBridge::dispatchTaskToMainThread(PassOwnPtr&lt;ScriptExecutionContext::Task&gt; task) {
   m_worker-&gt;dispatchTaskToMainThread(createCallbackTask(&amp;runTaskWithChecksOnMainThread, this, task);
}

Then remove the &quot; if (bridge-&gt;derefIfWorkerIsStopped())&quot; from all tasks.

&gt; WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp:247
&gt; +    fileSystem-&gt;move(srcPath, destPath, MainThreadFileSystemCallbacks::create(bridge, mode).leakPtr());

Please consider a method for &quot;MainThreadFileSystemCallbacks::create(bridge, mode).leakPtr()&quot;

&gt; WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp:386
&gt; +    if (bridge-&gt;m_callbacksOnWorkerThread) {

It feels like a wrapper task would be good here too.

The contents of the wrapper task would look like:

  if (!bridge-&gt;m_callbacksOnWorkerThread)
    return;
  task-&gt;performTask();
  bridge-&gt;m_callbacksOnWorkerThread = 0;

&gt; WebKit/chromium/src/WorkerFileSystemCallbacksBridge.h:129
&gt; +    // For early-exist; this deref selfRef and returns true if the worker is already null.

Consider
// For early-exit; this deref&apos;s selfRef and returns true if the worker is already null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284955</commentid>
    <comment_count>4</comment_count>
      <attachid>68811</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-09-24 23:28:36 -0700</bug_when>
    <thetext>Created attachment 68811
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284956</commentid>
    <comment_count>5</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-09-24 23:30:12 -0700</bug_when>
    <thetext>Thanks!  Updated the patch.

&gt;&gt; WebKit/chromium/src/WebFileSystemCallbacksImpl.cpp:48
&gt;&gt;  WebFileSystemCallbacksImpl::WebFileSystemCallbacksImpl(PassOwnPtr&lt;AsyncFileSystemCallbacks&gt; callbacks)
&gt; 
&gt; no need for this constructor. webkit allows default parameters.

Removed.

&gt;&gt;&gt; WebKit/chromium/src/WebFileSystemCallbacksImpl.h:55
&gt;&gt;&gt; +    WebFileSystemCallbacksImpl(PassOwnPtr&lt;WebCore::AsyncFileSystemCallbacks&gt;, WebCore::ScriptExecutionContext*);
&gt;&gt; 
&gt;&gt; WebCore::ScriptExecutionContext* = 0, and remove the other constructor.
&gt; 
&gt; Why not just always have this constructor?
&gt; 
&gt; It feels odd to me to have two different constructors and depending on which one I call different methods may be called.

Removed one of the constructors.

&gt;&gt; WebKit/chromium/src/WorkerAsyncFileSystemChromium.cpp:63
&gt;&gt; +    ASSERT(m_scriptExecutionContext &amp;&amp; m_scriptExecutionContext-&gt;isWorkerContext());
&gt; 
&gt; you can just do ASSERT(m_scriptExecutionContext-&gt;isWorkerContext()).

Fixed.

&gt;&gt; WebKit/chromium/src/WorkerAsyncFileSystemChromium.cpp:76
&gt;&gt; +    RefPtr&lt;WorkerFileSystemCallbacksBridge&gt; bridge = WorkerFileSystemCallbacksBridge::create(m_worker, m_scriptExecutionContext, new WebKit::WebFileSystemCallbacksImpl(callbacks));
&gt; 
&gt; I would make this a private method.
&gt; 
&gt; Something like createWorkerFileSystemCallbacksBridge().
&gt; 
&gt; Then you don&apos;t even need to put it in a local variable.
&gt; 
&gt; For example,
&gt; createWorkerFileSystemCallbacksBridge()-&gt;postMoveToMainThread(m_webFileSystem, srcPath, destPath, m_mode)

Changed the WorkerFileSystemBridge&apos;s create methods to make it also post an operation request to the main thread. (Please see below)

&gt;&gt; WebKit/chromium/src/WorkerAsyncFileSystemChromium.h:61
&gt;&gt; +    virtual void move(const String&amp; srcPath, const String&amp; destPath, PassOwnPtr&lt;AsyncFileSystemCallbacks&gt;);
&gt; 
&gt; WebKit tries to avoid abbreviations.
&gt; 
&gt; s/src/source/
&gt; s/dest/destination/

Fixed.

&gt;&gt; WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp:54
&gt;&gt; +    {
&gt; 
&gt; It would be nice to compile assert sizeof(WebKit::WebFileInfo) == sizeof(double) just to catch any change to this structure and make sure this copy method is updated appropriate (and add a comment before the compile assert explaining why it is here).

Added the ASSERT.

&gt;&gt; WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp:69
&gt;&gt; +            newEntries[i] = newEntry;
&gt; 
&gt; Why not just use newEntries directly?
&gt;   newEntries[i].isDirectory = entries[i].isDirectory;
&gt;   newEntries[i].name = name.crossThreadString();

Fixed.

&gt;&gt; WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp:157
&gt;&gt; +{
&gt; 
&gt; It feels like these should 
&gt;   ASSERT(!m_selfRef);
&gt; 
&gt; I wonder if the constructor should just be private and all of the methods just exposed as static. (Of course that would invalid my other comment about making a common method to do the construction).

Hmm.  Changed all the postXxxToMainThread methods to static methods named createForXxx that create a bridge, dispatch the operation and return the PassRefPtr (for synchronous calls).

&gt;&gt; WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp:246
&gt;&gt; +    ASSERT(fileSystem);
&gt; 
&gt; Since these checks appear in every callback, it felt like there should be a better way to do it. I think I&apos;ve got one for you.
&gt; 
&gt; Make a method something like this
&gt; 
&gt; void WorkerFileSystemCallbacksBridge::runTaskWithChecksOnMainThread(WebCore::ScriptExecutionContext* context, WorkerFileSystemCallbacksBridge* bridge, PassOwnPtr&lt;Task&gt; taskToRun)
&gt; {
&gt;   ASSERT(isMainThread());
&gt;   if (bridge-&gt;derefIfWorkerIsStopped())
&gt;        return;
&gt;    taskToRun-&gt;performTask(context);
&gt; }
&gt; 
&gt; This is a horrible method name (maybe runTaskOnMainThread).
&gt; 
&gt; Change calls from m_worker-&gt;dispatchTaskToMainThread to call this method
&gt; 
&gt; WorkerFileSystemCallbacksBridge::dispatchTaskToMainThread(PassOwnPtr&lt;ScriptExecutionContext::Task&gt; task) {
&gt;    m_worker-&gt;dispatchTaskToMainThread(createCallbackTask(&amp;runTaskWithChecksOnMainThread, this, task);
&gt; }
&gt; 
&gt; Then remove the &quot; if (bridge-&gt;derefIfWorkerIsStopped())&quot; from all tasks.

Sounds good... changed.

&gt;&gt; WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp:247
&gt;&gt; +    fileSystem-&gt;move(srcPath, destPath, MainThreadFileSystemCallbacks::create(bridge, mode).leakPtr());
&gt; 
&gt; Please consider a method for &quot;MainThreadFileSystemCallbacks::create(bridge, mode).leakPtr()&quot;

Since MainThreadFileSystemCallbacks is never going to be owned by anyone (as it&apos;s self-destructed), I changed the method create() to createLeakedPtr().
(If this makes sense to you I&apos;ll also fix WebFileSystemCallbacksImpl&apos;s constructor - it&apos;s also self-destructed and there&apos;re several places where it&apos;s created with a naked new.)

&gt;&gt; WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp:386
&gt;&gt; +    if (bridge-&gt;m_callbacksOnWorkerThread) {
&gt; 
&gt; It feels like a wrapper task would be good here too.
&gt; 
&gt; The contents of the wrapper task would look like:
&gt; 
&gt;   if (!bridge-&gt;m_callbacksOnWorkerThread)
&gt;     return;
&gt;   task-&gt;performTask();
&gt;   bridge-&gt;m_callbacksOnWorkerThread = 0;

Fixed.

&gt;&gt; WebKit/chromium/src/WorkerFileSystemCallbacksBridge.h:129
&gt;&gt; +    // For early-exist; this deref selfRef and returns true if the worker is already null.
&gt; 
&gt; Consider
&gt; // For early-exit; this deref&apos;s selfRef and returns true if the worker is already null.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285287</commentid>
    <comment_count>6</comment_count>
      <attachid>68811</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-26 21:23:59 -0700</bug_when>
    <thetext>Comment on attachment 68811
Patch

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

&gt; WebKit/chromium/src/AsyncFileSystemChromium.h:68
&gt; +    AsyncFileSystemChromium(const String&amp; rootPath);

One-argument constructors required &quot;explicit&quot; before their declarations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285874</commentid>
    <comment_count>7</comment_count>
      <attachid>68811</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-09-27 16:40:10 -0700</bug_when>
    <thetext>Comment on attachment 68811
Patch

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

Please consider doing Adam&apos;s comment and mine.

Thanks!

&gt; WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp:150
&gt; +PassRefPtr&lt;WorkerFileSystemCallbacksBridge&gt; WorkerFileSystemCallbacksBridge::createForOpenFileSystem(WebWorkerBase* worker, ScriptExecutionContext* workerContext, WebFileSystemCallbacks* callbacks, WebCommonWorkerClient* commonClient, WebFileSystem::Type type, long long size, const String&amp; mode)

I wouldn&apos;t bother making these be &quot;createFor&quot; methods and returning a class that no one ever uses.

Consider just returning void and calling the method: &quot;WorkerFileSystemCallbacksBridge::openFileSystem&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285924</commentid>
    <comment_count>8</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-09-27 17:09:28 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 68811 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=68811&amp;action=review
&gt; 
&gt; Please consider doing Adam&apos;s comment and mine.
&gt; 
&gt; Thanks!
&gt; 
&gt; &gt; WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp:150
&gt; &gt; +PassRefPtr&lt;WorkerFileSystemCallbacksBridge&gt; WorkerFileSystemCallbacksBridge::createForOpenFileSystem(WebWorkerBase* worker, ScriptExecutionContext* workerContext, WebFileSystemCallbacks* callbacks, WebCommonWorkerClient* commonClient, WebFileSystem::Type type, long long size, const String&amp; mode)
&gt; 
&gt; I wouldn&apos;t bother making these be &quot;createFor&quot; methods and returning a class that no one ever uses.
&gt; 
&gt; Consider just returning void and calling the method: &quot;WorkerFileSystemCallbacksBridge::openFileSystem&quot;.

Thanks for reviewing!  I&apos;m planning to store the returned value to a local variable in synchronous cases (in a coming change set) while waiting for completion, so I&apos;ll leave it as is in this patch.  (Will make it return void if it turns out I won&apos;t use it.)

Will definitely fix the &apos;explicit&apos; one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286545</commentid>
    <comment_count>9</comment_count>
      <attachid>68811</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-09-28 14:43:16 -0700</bug_when>
    <thetext>Comment on attachment 68811
Patch

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

&gt; WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp:56
&gt; +        ASSERT(sizeof(WebKit::WebFileInfo) == sizeof(double));

1) I believe this could be done with a COMPILE_ASSERT.
2) It should fail.  WebFileInfo currently has 3 fields.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286552</commentid>
    <comment_count>10</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-09-28 14:54:59 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 68811 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=68811&amp;action=review
&gt; 
&gt; &gt; WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp:56
&gt; &gt; +        ASSERT(sizeof(WebKit::WebFileInfo) == sizeof(double));
&gt; 
&gt; 1) I believe this could be done with a COMPILE_ASSERT.
&gt; 2) It should fail.  WebFileInfo currently has 3 fields.

Right.  I was changing it to COMPILE_ASSERT and am in the middle of fixing 2) now :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286570</commentid>
    <comment_count>11</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-09-28 15:20:50 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (From update of attachment 68811 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=68811&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp:56
&gt; &gt; &gt; +        ASSERT(sizeof(WebKit::WebFileInfo) == sizeof(double));
&gt; &gt; 
&gt; &gt; 1) I believe this could be done with a COMPILE_ASSERT.
&gt; &gt; 2) It should fail.  WebFileInfo currently has 3 fields.
&gt; 
&gt; Right.  I was changing it to COMPILE_ASSERT and am in the middle of fixing 2) now :)

Hmm.  Actually I&apos;m going to get rid of this ASSERT -- make sizeof(struct) work in a platform independent way could be tricky.  I&apos;ll replace the copy method with a more specific ones (like the one for WebFieSystemEntry).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287003</commentid>
    <comment_count>12</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-09-29 11:12:55 -0700</bug_when>
    <thetext>Committed r68669: &lt;http://trac.webkit.org/changeset/68669&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287043</commentid>
    <comment_count>13</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-09-29 12:05:13 -0700</bug_when>
    <thetext>Committed r68672: &lt;http://trac.webkit.org/changeset/68672&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287050</commentid>
    <comment_count>14</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-09-29 12:08:51 -0700</bug_when>
    <thetext>Committed r68675: &lt;http://trac.webkit.org/changeset/68675&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68771</attachid>
            <date>2010-09-24 15:33:15 -0700</date>
            <delta_ts>2010-09-24 23:28:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46524-20100924153314.patch</filename>
            <type>text/plain</type>
            <size>38636</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDQxNmNhMzE3YzdkZTFkMzY5MDdkNjk1OTU4ZWZjMWIxYmE1M2QyNmIu
LjMyMjJlZTdiOTJlZThiYjNjZWNlMWY5NDQ4OTU1NjkzNzhmMDM2NmIgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDU2IEBACisyMDEwLTA5LTI0ICBLaW51a28gWWFzdWRhICA8a2ludWtvQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBCcmlkZ2UgYWxsIEZpbGVTeXN0ZW0gb3BlcmF0aW9ucyBvbiBXb3JrZXJzIHRvIHRoZSBNYWlu
VGhyZWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
NjUyNAorCisgICAgICAgICogc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxvY2FsRmlsZVN5c3RlbTo6cmVxdWVzdEZpbGVTeXN0ZW0pOiBDaGFuZ2Vk
IHRoZSB3b3JrZXIgY2FzZQorICAgICAgICBjb2RlIHRvIGNyZWF0ZSBXZWJGaWxlU3lzdGVtQ2Fs
bGJhY2tzSW1wbCB3aXRoIHRoZSBjdXJyZW50CisgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQgKFdvcmtlckNvbnRleHQpLgorICAgICAgICAqIHNyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tz
SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsOjpX
ZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbCk6IEFkZGVkCisgICAgICAgIGEgbmV3IGNvbnN0cnVj
dG9yIHRoYXQgdGFrZXMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCAoV29ya2VyQ29udGV4dCkKKyAg
ICAgICAgZm9yIHdvcmtlcnMuCisgICAgICAgIChXZWJLaXQ6OldlYkZpbGVTeXN0ZW1DYWxsYmFj
a3NJbXBsOjpkaWRPcGVuRmlsZVN5c3RlbSk6IEFkZGVkIHRoZQorICAgICAgICBjb2RlIGZvciB3
b3JrZXJzIHRoYXQgY3JlYXRlcyBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS4KKyAgICAg
ICAgKiBzcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuaDoKKyAgICAgICAgKiBzcmMvV29y
a2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV29y
a2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaDogQWRkZWQuCisgICAgICAgICogc3JjL1dvcmtl
ckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwOiBBZGRlZCBtZXRob2RzIGZvciByZWd1bGFy
CisgICAgICAgIGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMgdG8gcHJveHkgdGhlbSB0byB0aGUgbWFp
biB0aHJlYWQuCisgICAgICAgIChXZWJLaXQ6Ok1haW5UaHJlYWRGaWxlU3lzdGVtQ2FsbGJhY2tz
OjpkaWRTdWNjZWVkKToKKyAgICAgICAgKFdlYktpdDo6TWFpblRocmVhZEZpbGVTeXN0ZW1DYWxs
YmFja3M6OmRpZFJlYWRNZXRhZGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok1haW5UaHJlYWRGaWxl
U3lzdGVtQ2FsbGJhY2tzOjpkaWRSZWFkRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYktpdDo6V29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdE1vdmVUb01haW5UaHJlYWQpOgorICAg
ICAgICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpwb3N0Q29weVRv
TWFpblRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NC
cmlkZ2U6OnBvc3RSZW1vdmVUb01haW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpwb3N0UmVhZE1ldGFkYXRhVG9NYWluVGhyZWFkKToK
KyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdENy
ZWF0ZUZpbGVUb01haW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlOjpwb3N0Q3JlYXRlRGlyZWN0b3J5VG9NYWluVGhyZWFkKToKKyAgICAg
ICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdEZpbGVFeGlz
dHNUb01haW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJh
Y2tzQnJpZGdlOjpwb3N0RGlyZWN0b3J5RXhpc3RzVG9NYWluVGhyZWFkKToKKyAgICAgICAgKFdl
YktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdFJlYWREaXJlY3RvcnlU
b01haW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlOjpvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6Oldv
cmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6Om1vdmVPbk1haW5UaHJlYWQpOgorICAgICAg
ICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjb3B5T25NYWluVGhy
ZWFkKToKKyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6
cmVtb3ZlT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNh
bGxiYWNrc0JyaWRnZTo6cmVhZE1ldGFkYXRhT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYktp
dDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6Y3JlYXRlRmlsZU9uTWFpblRocmVh
ZCk6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmNy
ZWF0ZURpcmVjdG9yeU9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVT
eXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmZpbGVFeGlzdHNPbk1haW5UaHJlYWQpOgorICAgICAgICAo
V2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaXJlY3RvcnlFeGlzdHNP
bk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlOjpyZWFkRGlyZWN0b3J5T25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6V29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6ZGlkU3VjY2VlZE9uTWFpblRocmVhZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpZFJlYWRN
ZXRhZGF0YU9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1D
YWxsYmFja3NCcmlkZ2U6OmRpZFJlYWREaXJlY3RvcnlPbk1haW5UaHJlYWQpOgorICAgICAgICAo
V2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaWRTdWNjZWVkT25Xb3Jr
ZXJUaHJlYWQpOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlOjpkaWRSZWFkTWV0YWRhdGFPbldvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6Oldv
cmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpZFJlYWREaXJlY3RvcnlPbldvcmtlclRo
cmVhZCk6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6
OmRlcmVmSWZXb3JrZXJJc1N0b3BwZWQpOgorICAgICAgICAqIHNyYy9Xb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlLmg6CisKIDIwMTAtMDktMjQgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggY2hyb21pdW0gY29tcGlsZSBhZnRl
ciByNjgyNzYgd2hpY2ggcmVuYW1lZApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9M
b2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmls
ZVN5c3RlbUNocm9taXVtLmNwcAppbmRleCA5OTRmMzEwNDZiM2RkNzU3NWFhMDE5ZTZlMTg5OWJh
ZmYxOTA5MzE4Li4xNTMzNDY5MTIwNzhjOWE1YTAyN2Y3ZDM5MTcyMWRiN2QwNDE3ZjMyIDEwMDY0
NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcAor
KysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcApAQCAt
NjgsNyArNjgsNyBAQCB2b2lkIExvY2FsRmlsZVN5c3RlbTo6cmVxdWVzdEZpbGVTeXN0ZW0oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQXN5bmNGaQogICAgICAgICBXb3JrZXJDb250
ZXh0KiB3b3JrZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQp
OwogICAgICAgICBXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHkgPSAmd29ya2Vy
Q29udGV4dC0+dGhyZWFkKCktPndvcmtlckxvYWRlclByb3h5KCk7CiAgICAgICAgIFdlYldvcmtl
ckJhc2UqIHdlYldvcmtlciA9IHN0YXRpY19jYXN0PFdlYldvcmtlckJhc2UqPih3b3JrZXJMb2Fk
ZXJQcm94eSk7Ci0gICAgICAgIHdlYldvcmtlci0+b3BlbkZpbGVTeXN0ZW0oc3RhdGljX2Nhc3Q8
V2ViRmlsZVN5c3RlbTo6VHlwZT4odHlwZSksIHNpemUsIG5ldyBXZWJGaWxlU3lzdGVtQ2FsbGJh
Y2tzSW1wbChuZXcgRmlsZVN5c3RlbUNhbGxiYWNrcyhzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2Fs
bGJhY2ssIGNvbnRleHQpKSk7CisgICAgICAgIHdlYldvcmtlci0+b3BlbkZpbGVTeXN0ZW0oc3Rh
dGljX2Nhc3Q8V2ViRmlsZVN5c3RlbTo6VHlwZT4odHlwZSksIHNpemUsIG5ldyBXZWJGaWxlU3lz
dGVtQ2FsbGJhY2tzSW1wbChuZXcgRmlsZVN5c3RlbUNhbGxiYWNrcyhzdWNjZXNzQ2FsbGJhY2ss
IGVycm9yQ2FsbGJhY2ssIGNvbnRleHQpLCBjb250ZXh0KSk7CiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNwcCBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwCmluZGV4
IGEyM2FkZDdiZmUxMDYzMTE5NTVmYWExZDg3YzVmYjg1NWUxZDQzYzIuLjAyN2VjMzZiMmYwNmJi
ODk5ZjFlZjNkMWQ2NTU1MTJmNmRiNWQ3MjEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwCkBAIC0zNCwxMCArMzQsMTEgQEAKIAog
I2luY2x1ZGUgIkFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcy5oIgogI2luY2x1ZGUgIkFzeW5jRmls
ZVN5c3RlbUNocm9taXVtLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJGaWxlU3lzdGVtRW50cnku
aCIKICNpbmNsdWRlICJXZWJGaWxlSW5mby5oIgogI2luY2x1ZGUgIldlYlN0cmluZy5oIgorI2lu
Y2x1ZGUgIldvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgiCiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTQ2LDcgKzQ3LDE2IEBAIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6V2ViRmlsZVN5
c3RlbUNhbGxiYWNrc0ltcGwoUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNh
bGxiYWNrcykKICAgICA6IG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICAsIG1fY29udGV4dCgw
KQogeworICAgIEFTU0VSVChtX2NhbGxiYWNrcyk7Cit9CisKK1dlYkZpbGVTeXN0ZW1DYWxsYmFj
a3NJbXBsOjpXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChQYXNzT3duUHRyPEFzeW5jRmlsZVN5
c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0KQorICAgIDogbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgICwgbV9jb250ZXh0
KGNvbnRleHQpCit7CisgICAgQVNTRVJUKG1fY2FsbGJhY2tzKTsKIH0KIAogV2ViRmlsZVN5c3Rl
bUNhbGxiYWNrc0ltcGw6On5XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbCgpCkBAIC01NSwyMSAr
NjUsMTggQEAgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6On5XZWJGaWxlU3lzdGVtQ2FsbGJh
Y2tzSW1wbCgpCiAKIHZvaWQgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6OmRpZFN1Y2NlZWQo
KQogewotICAgIEFTU0VSVChtX2NhbGxiYWNrcyk7CiAgICAgbV9jYWxsYmFja3MtPmRpZFN1Y2Nl
ZWQoKTsKICAgICBkZWxldGUgdGhpczsKIH0KIAogdm9pZCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tz
SW1wbDo6ZGlkUmVhZE1ldGFkYXRhKGNvbnN0IFdlYkZpbGVJbmZvJiBpbmZvKQogewotICAgIEFT
U0VSVChtX2NhbGxiYWNrcyk7CiAgICAgbV9jYWxsYmFja3MtPmRpZFJlYWRNZXRhZGF0YShpbmZv
Lm1vZGlmaWNhdGlvblRpbWUpOwogICAgIGRlbGV0ZSB0aGlzOwogfQogCiB2b2lkIFdlYkZpbGVT
eXN0ZW1DYWxsYmFja3NJbXBsOjpkaWRSZWFkRGlyZWN0b3J5KGNvbnN0IFdlYlZlY3RvcjxXZWJG
aWxlU3lzdGVtRW50cnk+JiBlbnRyaWVzLCBib29sIGhhc01vcmUpCiB7Ci0gICAgQVNTRVJUKG1f
Y2FsbGJhY2tzKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVudHJpZXMuc2l6ZSgpOyAr
K2kpCiAgICAgICAgIG1fY2FsbGJhY2tzLT5kaWRSZWFkRGlyZWN0b3J5RW50cnkoZW50cmllc1tp
XS5uYW1lLCBlbnRyaWVzW2ldLmlzRGlyZWN0b3J5KTsKICAgICBtX2NhbGxiYWNrcy0+ZGlkUmVh
ZERpcmVjdG9yeUVudHJpZXMoaGFzTW9yZSk7CkBAIC03OSwxMyArODYsMTUgQEAgdm9pZCBXZWJG
aWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6ZGlkUmVhZERpcmVjdG9yeShjb25zdCBXZWJWZWN0b3I8
V2ViRmlsZVN5c3RlbUUKIAogdm9pZCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6ZGlkT3Bl
bkZpbGVTeXN0ZW0oY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIHBhdGgp
CiB7Ci0gICAgbV9jYWxsYmFja3MtPmRpZE9wZW5GaWxlU3lzdGVtKG5hbWUsIG5ldyBBc3luY0Zp
bGVTeXN0ZW1DaHJvbWl1bShwYXRoKSk7CisgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQt
PmlzV29ya2VyQ29udGV4dCgpKQorICAgICAgICBtX2NhbGxiYWNrcy0+ZGlkT3BlbkZpbGVTeXN0
ZW0obmFtZSwgV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWF0ZShtX2NvbnRleHQs
IHBhdGgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fY2FsbGJhY2tzLT5kaWRPcGVuRmlsZVN5c3Rl
bShuYW1lLCBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYXRlKHBhdGgpKTsKICAgICBkZWxl
dGUgdGhpczsKIH0KIAogdm9pZCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6ZGlkRmFpbChX
ZWJGaWxlRXJyb3IgZXJyb3IpCiB7Ci0gICAgQVNTRVJUKG1fY2FsbGJhY2tzKTsKICAgICBtX2Nh
bGxiYWNrcy0+ZGlkRmFpbChlcnJvcik7CiAgICAgZGVsZXRlIHRoaXM7CiB9CmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmggYi9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmgKaW5kZXggMzZhYjlm
ZmIwNGQxNDkzMzY1MTUzZmYwODY4MTJkN2NmNmYyYTFiMC4uZmMyNGI4NTYxYzcxOTViY2UxZGU0
NGY3YjMzMTdmN2UxZTQ5ZDc0YyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJG
aWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmls
ZVN5c3RlbUNhbGxiYWNrc0ltcGwuaApAQCAtMzgsNiArMzgsNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M7CitjbGFzcyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQ5LDYgKzUwLDEwIEBA
IGNsYXNzIFdlYlN0cmluZzsKIGNsYXNzIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsIDogcHVi
bGljIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MgewogcHVibGljOgogICAgIFdlYkZpbGVTeXN0ZW1D
YWxsYmFja3NJbXBsKFBhc3NPd25QdHI8V2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tz
Pik7CisKKyAgICAvLyBBIHNwZWNpYWxpemVkIGNvbnN0cnVjdG9yIGZvciBvcGVuRmlsZVN5c3Rl
bSBvbiB3b3JrZXJzLgorICAgIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKFBhc3NPd25QdHI8
V2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiwgV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCopOworCiAgICAgdmlydHVhbCB+V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwo
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRTdWNjZWVkKCk7CkBAIC01OSw2ICs2NCw5IEBAIHB1
YmxpYzoKIAogcHJpdmF0ZToKICAgICBPd25QdHI8V2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtQ2Fs
bGJhY2tzPiBtX2NhbGxiYWNrczsKKworICAgIC8vIFVzZWQgZm9yIHdvcmtlcidzIG9wZW5GaWxl
U3lzdGVtIGNhbGxiYWNrcy4KKyAgICBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBt
X2NvbnRleHQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYjg0ZDMzZTJiOTA5OWQ0YjljNWFkZDVjYTYwZTBjY2M3YTFjYjlkNwotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0u
Y3BwCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldvcmtl
ckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgiCisKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCisK
KyNpbmNsdWRlICJBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3MuaCIKKyNpbmNsdWRlICJGaWxlU3lz
dGVtLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJXZWJGaWxlU3lz
dGVtLmgiCisjaW5jbHVkZSAiV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuaCIKKyNpbmNsdWRl
ICJXZWJLaXQuaCIKKyNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJXb3Jr
ZXJCYXNlLmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUgIldvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaCIKKyNpbmNsdWRlICJXb3JrZXJTY3JpcHRDb250cm9s
bGVyLmgiCisjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0YXRpYyBjb25zdCBjaGFyIGZpbGVTeXN0ZW1PcGVyYXRpb25zTW9kZVtdID0gImZpbGVT
eXN0ZW1PcGVyYXRpb25zTW9kZSI7CisKK1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpX
b3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBjb25zdCBTdHJpbmcmIHJvb3RQYXRoKQorICAgIDogQXN5bmNGaWxlU3lzdGVtKHJvb3RQ
YXRoKQorICAgICwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCisgICAgLCBtX3dl
YkZpbGVTeXN0ZW0oV2ViS2l0Ojp3ZWJLaXRDbGllbnQoKS0+ZmlsZVN5c3RlbSgpKQorICAgICwg
bV9tb2RlKGZpbGVTeXN0ZW1PcGVyYXRpb25zTW9kZSkKK3sKKyAgICBBU1NFUlQobV93ZWJGaWxl
U3lzdGVtKTsKKyAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0ICYmIG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOworCisgICAgV29ya2VyQ29udGV4
dCogd29ya2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihjb250ZXh0KTsK
KyAgICBXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHkgPSAmd29ya2VyQ29udGV4
dC0+dGhyZWFkKCktPndvcmtlckxvYWRlclByb3h5KCk7CisgICAgbV93b3JrZXIgPSBzdGF0aWNf
Y2FzdDxXZWJXb3JrZXJCYXNlKj4od29ya2VyTG9hZGVyUHJveHkpOworfQorCitXb3JrZXJBc3lu
Y0ZpbGVTeXN0ZW1DaHJvbWl1bTo6fldvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtKCkKK3sK
K30KKwordm9pZCBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6bW92ZShjb25zdCBTdHJp
bmcmIHNyY1BhdGgsIGNvbnN0IFN0cmluZyYgZGVzdFBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxl
U3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgUmVmUHRyPFdvcmtlckZpbGVTeXN0
ZW1DYWxsYmFja3NCcmlkZ2U+IGJyaWRnZSA9IFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2U6OmNyZWF0ZShtX3dvcmtlciwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBuZXcgV2ViS2l0
OjpXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpKTsKKyAgICBicmlkZ2UtPnBv
c3RNb3ZlVG9NYWluVGhyZWFkKG1fd2ViRmlsZVN5c3RlbSwgc3JjUGF0aCwgZGVzdFBhdGgsIG1f
bW9kZSk7Cit9CisKK3ZvaWQgV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNvcHkoY29u
c3QgU3RyaW5nJiBzcmNQYXRoLCBjb25zdCBTdHJpbmcmIGRlc3RQYXRoLCBQYXNzT3duUHRyPEFz
eW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIFJlZlB0cjxXb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBicmlkZ2UgPSBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJh
Y2tzQnJpZGdlOjpjcmVhdGUobV93b3JrZXIsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgbmV3
IFdlYktpdDo6V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSk7CisgICAgYnJp
ZGdlLT5wb3N0Q29weVRvTWFpblRocmVhZChtX3dlYkZpbGVTeXN0ZW0sIHNyY1BhdGgsIGRlc3RQ
YXRoLCBtX21vZGUpOworfQorCit2b2lkIFdvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpy
ZW1vdmUoY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxi
YWNrcz4gY2FsbGJhY2tzKQoreworICAgIFJlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlPiBicmlkZ2UgPSBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGUo
bV93b3JrZXIsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgbmV3IFdlYktpdDo6V2ViRmlsZVN5
c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSk7CisgICAgYnJpZGdlLT5wb3N0UmVtb3ZlVG9N
YWluVGhyZWFkKG1fd2ViRmlsZVN5c3RlbSwgcGF0aCwgbV9tb2RlKTsKK30KKwordm9pZCBXb3Jr
ZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6cmVhZE1ldGFkYXRhKGNvbnN0IFN0cmluZyYgcGF0
aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAg
ICBSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gYnJpZGdlID0gV29ya2Vy
RmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6Y3JlYXRlKG1fd29ya2VyLCBtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIG5ldyBXZWJLaXQ6OldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxi
YWNrcykpOworICAgIGJyaWRnZS0+cG9zdFJlYWRNZXRhZGF0YVRvTWFpblRocmVhZChtX3dlYkZp
bGVTeXN0ZW0sIHBhdGgsIG1fbW9kZSk7Cit9CisKK3ZvaWQgV29ya2VyQXN5bmNGaWxlU3lzdGVt
Q2hyb21pdW06OmNyZWF0ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBib29sIGV4Y2x1c2l2ZSwg
UGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBS
ZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gYnJpZGdlID0gV29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6Y3JlYXRlKG1fd29ya2VyLCBtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQsIG5ldyBXZWJLaXQ6OldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNr
cykpOworICAgIGJyaWRnZS0+cG9zdENyZWF0ZUZpbGVUb01haW5UaHJlYWQobV93ZWJGaWxlU3lz
dGVtLCBwYXRoLCBleGNsdXNpdmUsIG1fbW9kZSk7Cit9CisKK3ZvaWQgV29ya2VyQXN5bmNGaWxl
U3lzdGVtQ2hyb21pdW06OmNyZWF0ZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGJvb2wg
ZXhjbHVzaXZlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tz
KQoreworICAgIFJlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBicmlkZ2Ug
PSBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGUobV93b3JrZXIsIG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwgbmV3IFdlYktpdDo6V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0lt
cGwoY2FsbGJhY2tzKSk7CisgICAgYnJpZGdlLT5wb3N0Q3JlYXRlRGlyZWN0b3J5VG9NYWluVGhy
ZWFkKG1fd2ViRmlsZVN5c3RlbSwgcGF0aCwgZXhjbHVzaXZlLCBtX21vZGUpOworfQorCit2b2lk
IFdvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpmaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYg
cGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKK3sK
KyAgICBSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gYnJpZGdlID0gV29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6Y3JlYXRlKG1fd29ya2VyLCBtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQsIG5ldyBXZWJLaXQ6OldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNh
bGxiYWNrcykpOworICAgIGJyaWRnZS0+cG9zdEZpbGVFeGlzdHNUb01haW5UaHJlYWQobV93ZWJG
aWxlU3lzdGVtLCBwYXRoLCBtX21vZGUpOworfQorCit2b2lkIFdvcmtlckFzeW5jRmlsZVN5c3Rl
bUNocm9taXVtOjpkaXJlY3RvcnlFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzT3duUHRy
PEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIFJlZlB0cjxXb3Jr
ZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBicmlkZ2UgPSBXb3JrZXJGaWxlU3lzdGVtQ2Fs
bGJhY2tzQnJpZGdlOjpjcmVhdGUobV93b3JrZXIsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwg
bmV3IFdlYktpdDo6V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSk7CisgICAg
YnJpZGdlLT5wb3N0RGlyZWN0b3J5RXhpc3RzVG9NYWluVGhyZWFkKG1fd2ViRmlsZVN5c3RlbSwg
cGF0aCwgbV9tb2RlKTsKK30KKwordm9pZCBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6
cmVhZERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lz
dGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1D
YWxsYmFja3NCcmlkZ2U+IGJyaWRnZSA9IFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6
OmNyZWF0ZShtX3dvcmtlciwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBuZXcgV2ViS2l0OjpX
ZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpKTsKKyAgICBicmlkZ2UtPnBvc3RS
ZWFkRGlyZWN0b3J5VG9NYWluVGhyZWFkKG1fd2ViRmlsZVN5c3RlbSwgcGF0aCwgbV9tb2RlKTsK
K30KKwordm9pZCBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYXRlV3JpdGVyKEZp
bGVXcml0ZXJDbGllbnQqLCBjb25zdCBTdHJpbmcmLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3Rl
bUNhbGxiYWNrcz4pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjY0M2E1YjExNjg2ZWMyZTMwNjNkNzNjMTY4NjUwMTA0MjQxY2I5NWUKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVt
LmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW1f
aAorI2RlZmluZSBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bV9oCisKKyNpZiBFTkFCTEUo
RklMRV9TWVNURU0pCisKKyNpbmNsdWRlICJBc3luY0ZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIEZpbGVXcml0ZXJDbGll
bnQ7CitjbGFzcyBXZWJGaWxlU3lzdGVtOworY2xhc3MgV2ViV29ya2VyQmFzZTsKK30KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M7CitjbGFz
cyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCitjbGFzcyBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1D
aHJvbWl1bSA6IHB1YmxpYyBBc3luY0ZpbGVTeXN0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgcm9vdFBhdGgpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IFdvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtKGNvbnRleHQsIHJvb3RQ
YXRoKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21p
dW0oKTsKKworICAgIHZpcnR1YWwgdm9pZCBtb3ZlKGNvbnN0IFN0cmluZyYgc3JjUGF0aCwgY29u
c3QgU3RyaW5nJiBkZXN0UGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY29weShjb25zdCBTdHJpbmcmIHNyY1BhdGgsIGNvbnN0IFN0
cmluZyYgZGVzdFBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZShjb25zdCBTdHJpbmcmIHBhdGgsIFBhc3NPd25QdHI8QXN5
bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CisgICAgdmlydHVhbCB2b2lkIHJlYWRNZXRhZGF0YShj
b25zdCBTdHJpbmcmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7
CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBib29sIGV4
Y2x1c2l2ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKKyAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgYm9vbCBleGNsdXNp
dmUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CisgICAgdmlydHVhbCB2
b2lkIGZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5
c3RlbUNhbGxiYWNrcz4pOworICAgIHZpcnR1YWwgdm9pZCBkaXJlY3RvcnlFeGlzdHMoY29uc3Qg
U3RyaW5nJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOworICAg
IHZpcnR1YWwgdm9pZCByZWFkRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgUGFzc093blB0
cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlV3Jp
dGVyKEZpbGVXcml0ZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzT3du
UHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOworCitwcml2YXRlOgorICAgIFdvcmtlckFz
eW5jRmlsZVN5c3RlbUNocm9taXVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJp
bmcmIHJvb3RQYXRoKTsKKworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDsKKyAgICBXZWJLaXQ6OldlYkZpbGVTeXN0ZW0qIG1fd2ViRmlsZVN5c3Rl
bTsKKyAgICBXZWJLaXQ6OldlYldvcmtlckJhc2UqIG1fd29ya2VyOworICAgIFN0cmluZyBtX21v
ZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRklM
RV9TWVNURU0pCisKKyNlbmRpZiAvLyBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bV9oCmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NC
cmlkZ2UuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlLmNwcAppbmRleCBkMTEyODg2NGU5MDZkNzg5Y2ZiMzgzMmZkZjA5MjUwYzg5N2E1Y2Mx
Li5iZDE3OWZlMzJjMTFiZGY5Y2QyM2E1MDU2YTY5MzVjYzE3OTY4OGU4IDEwMDY0NAotLS0gYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5j
cHAKQEAgLTM1LDcgKzM1LDkgQEAKIAogI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgogI2lu
Y2x1ZGUgIldlYkNvbW1vbldvcmtlckNsaWVudC5oIgorI2luY2x1ZGUgIldlYkZpbGVJbmZvLmgi
CiAjaW5jbHVkZSAiV2ViRmlsZVN5c3RlbUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIldlYkZpbGVT
eXN0ZW1FbnRyeS5oIgogI2luY2x1ZGUgIldlYlN0cmluZy5oIgogI2luY2x1ZGUgIldlYldvcmtl
ckJhc2UuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCkBAIC00NCw2ICs0NiwzNCBAQAog
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgog
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPD4gc3RydWN0IENyb3NzVGhyZWFkQ29w
aWVyQmFzZTxmYWxzZSwgZmFsc2UsIFdlYktpdDo6V2ViRmlsZUluZm8+IHsKKyAgICB0eXBlZGVm
IFdlYktpdDo6V2ViRmlsZUluZm8gVHlwZTsKKyAgICBzdGF0aWMgVHlwZSBjb3B5KGNvbnN0IFdl
YktpdDo6V2ViRmlsZUluZm8mIGluZm8pCisgICAgeworICAgICAgICByZXR1cm4gaW5mbzsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2Us
IGZhbHNlLCBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYkZpbGVTeXN0ZW1FbnRyeT4gPiB7
CisgICAgdHlwZWRlZiBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYkZpbGVTeXN0ZW1FbnRy
eT4gVHlwZTsKKyAgICBzdGF0aWMgVHlwZSBjb3B5KGNvbnN0IFdlYktpdDo6V2ViVmVjdG9yPFdl
YktpdDo6V2ViRmlsZVN5c3RlbUVudHJ5PiYgZW50cmllcykKKyAgICB7CisgICAgICAgIFdlYktp
dDo6V2ViVmVjdG9yPFdlYktpdDo6V2ViRmlsZVN5c3RlbUVudHJ5PiBuZXdFbnRyaWVzKGVudHJp
ZXMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyaWVzLnNpemUo
KTsgKytpKSB7CisgICAgICAgICAgICBXZWJLaXQ6OldlYkZpbGVTeXN0ZW1FbnRyeSBuZXdFbnRy
eTsKKyAgICAgICAgICAgIFdURjo6U3RyaW5nIG5hbWUgPSBlbnRyaWVzW2ldLm5hbWU7CisgICAg
ICAgICAgICBuZXdFbnRyeS5pc0RpcmVjdG9yeSA9IGVudHJpZXNbaV0uaXNEaXJlY3Rvcnk7Cisg
ICAgICAgICAgICBuZXdFbnRyeS5uYW1lID0gbmFtZS5jcm9zc1RocmVhZFN0cmluZygpOworICAg
ICAgICAgICAgbmV3RW50cmllc1tpXSA9IG5ld0VudHJ5OworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBuZXdFbnRyaWVzOworICAgIH0KK307CisKK30KKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNzQsMTcgKzEwNCwyMCBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkU3VjY2VlZCgpCiAgICAgewotICAgICAgICBXRUJLSVRfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIG1fYnJpZGdlLT5kaWRTdWNjZWVkT25NYWluVGhy
ZWFkKG1fbW9kZSk7CisgICAgICAgIGRlbGV0ZSB0aGlzOwogICAgIH0KIAogICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWFkTWV0YWRhdGEoY29uc3QgV2ViRmlsZUluZm8mIGluZm8pCiAgICAgewotICAg
ICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIG1fYnJpZGdlLT5kaWRS
ZWFkTWV0YWRhdGFPbk1haW5UaHJlYWQoaW5mbywgbV9tb2RlKTsKKyAgICAgICAgZGVsZXRlIHRo
aXM7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlYWREaXJlY3RvcnkoY29uc3QgV2Vi
VmVjdG9yPFdlYkZpbGVTeXN0ZW1FbnRyeT4mIGVudHJpZXMsIGJvb2wgaGFzTW9yZSkKICAgICB7
Ci0gICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgbV9icmlkZ2Ut
PmRpZFJlYWREaXJlY3RvcnlPbk1haW5UaHJlYWQoZW50cmllcywgaGFzTW9yZSwgbV9tb2RlKTsK
KyAgICAgICAgZGVsZXRlIHRoaXM7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMTIwLDkgKzE1Myw4
MyBAQCB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBvc3RPcGVuRmlsZVN5
c3RlbVRvTWFpblRocmVhZChXZWJDb21tb25XbwogICAgIG1fd29ya2VyLT5kaXNwYXRjaFRhc2tU
b01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVh
ZCwgY29tbW9uQ2xpZW50LCB0eXBlLCBzaXplLCB0aGlzLCBtb2RlKSk7CiB9CiAKK3ZvaWQgV29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdE1vdmVUb01haW5UaHJlYWQoV2ViRmls
ZVN5c3RlbSogZmlsZVN5c3RlbSwgY29uc3QgU3RyaW5nJiBzcmNQYXRoLCBjb25zdCBTdHJpbmcm
IGRlc3RQYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpCit7CisgICAgbV9zZWxmUmVmID0gdGhpczsK
KyAgICBBU1NFUlQobV93b3JrZXJDb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgQVNT
RVJUKG1fd29ya2VyKTsKKyAgICBtX3dvcmtlci0+ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNy
ZWF0ZUNhbGxiYWNrVGFzaygmbW92ZU9uTWFpblRocmVhZCwgZmlsZVN5c3RlbSwgc3JjUGF0aCwg
ZGVzdFBhdGgsIHRoaXMsIG1vZGUpKTsKK30KKwordm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJh
Y2tzQnJpZGdlOjpwb3N0Q29weVRvTWFpblRocmVhZChXZWJGaWxlU3lzdGVtKiBmaWxlU3lzdGVt
LCBjb25zdCBTdHJpbmcmIHNyY1BhdGgsIGNvbnN0IFN0cmluZyYgZGVzdFBhdGgsIGNvbnN0IFN0
cmluZyYgbW9kZSkKK3sKKyAgICBtX3NlbGZSZWYgPSB0aGlzOworICAgIEFTU0VSVChtX3dvcmtl
ckNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBBU1NFUlQobV93b3JrZXIpOworICAg
IG1fd29ya2VyLT5kaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZj
b3B5T25NYWluVGhyZWFkLCBmaWxlU3lzdGVtLCBzcmNQYXRoLCBkZXN0UGF0aCwgdGhpcywgbW9k
ZSkpOworfQorCit2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBvc3RSZW1v
dmVUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSogZmlsZVN5c3RlbSwgY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpCit7CisgICAgbV9zZWxmUmVmID0gdGhpczsKKyAgICBB
U1NFUlQobV93b3JrZXJDb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgQVNTRVJUKG1f
d29ya2VyKTsKKyAgICBtX3dvcmtlci0+ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNh
bGxiYWNrVGFzaygmcmVtb3ZlT25NYWluVGhyZWFkLCBmaWxlU3lzdGVtLCBwYXRoLCB0aGlzLCBt
b2RlKSk7Cit9CisKK3ZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdFJl
YWRNZXRhZGF0YVRvTWFpblRocmVhZChXZWJGaWxlU3lzdGVtKiBmaWxlU3lzdGVtLCBjb25zdCBT
dHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgbW9kZSkKK3sKKyAgICBtX3NlbGZSZWYgPSB0aGlz
OworICAgIEFTU0VSVChtX3dvcmtlckNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBB
U1NFUlQobV93b3JrZXIpOworICAgIG1fd29ya2VyLT5kaXNwYXRjaFRhc2tUb01haW5UaHJlYWQo
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZyZWFkTWV0YWRhdGFPbk1haW5UaHJlYWQsIGZpbGVTeXN0ZW0s
IHBhdGgsIHRoaXMsIG1vZGUpKTsKK30KKwordm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlOjpwb3N0Q3JlYXRlRmlsZVRvTWFpblRocmVhZChXZWJGaWxlU3lzdGVtKiBmaWxlU3lz
dGVtLCBjb25zdCBTdHJpbmcmIHBhdGgsIGJvb2wgZXhjbHVzaXZlLCBjb25zdCBTdHJpbmcmIG1v
ZGUpCit7CisgICAgbV9zZWxmUmVmID0gdGhpczsKKyAgICBBU1NFUlQobV93b3JrZXJDb250ZXh0
LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fd29ya2VyKTsKKyAgICBtX3dvcmtl
ci0+ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmY3JlYXRlRmls
ZU9uTWFpblRocmVhZCwgZmlsZVN5c3RlbSwgcGF0aCwgZXhjbHVzaXZlLCB0aGlzLCBtb2RlKSk7
Cit9CisKK3ZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdENyZWF0ZURp
cmVjdG9yeVRvTWFpblRocmVhZChXZWJGaWxlU3lzdGVtKiBmaWxlU3lzdGVtLCBjb25zdCBTdHJp
bmcmIHBhdGgsIGJvb2wgZXhjbHVzaXZlLCBjb25zdCBTdHJpbmcmIG1vZGUpCit7CisgICAgbV9z
ZWxmUmVmID0gdGhpczsKKyAgICBBU1NFUlQobV93b3JrZXJDb250ZXh0LT5pc0NvbnRleHRUaHJl
YWQoKSk7CisgICAgQVNTRVJUKG1fd29ya2VyKTsKKyAgICBtX3dvcmtlci0+ZGlzcGF0Y2hUYXNr
VG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmY3JlYXRlRGlyZWN0b3J5T25NYWluVGhy
ZWFkLCBmaWxlU3lzdGVtLCBwYXRoLCBleGNsdXNpdmUsIHRoaXMsIG1vZGUpKTsKK30KKwordm9p
ZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpwb3N0RmlsZUV4aXN0c1RvTWFpblRo
cmVhZChXZWJGaWxlU3lzdGVtKiBmaWxlU3lzdGVtLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0
IFN0cmluZyYgbW9kZSkKK3sKKyAgICBtX3NlbGZSZWYgPSB0aGlzOworICAgIEFTU0VSVChtX3dv
cmtlckNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBBU1NFUlQobV93b3JrZXIpOwor
ICAgIG1fd29ya2VyLT5kaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNr
KCZmaWxlRXhpc3RzT25NYWluVGhyZWFkLCBmaWxlU3lzdGVtLCBwYXRoLCB0aGlzLCBtb2RlKSk7
Cit9CisKK3ZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdERpcmVjdG9y
eUV4aXN0c1RvTWFpblRocmVhZChXZWJGaWxlU3lzdGVtKiBmaWxlU3lzdGVtLCBjb25zdCBTdHJp
bmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgbW9kZSkKK3sKKyAgICBtX3NlbGZSZWYgPSB0aGlzOwor
ICAgIEFTU0VSVChtX3dvcmtlckNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBBU1NF
UlQobV93b3JrZXIpOworICAgIG1fd29ya2VyLT5kaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZkaXJlY3RvcnlFeGlzdHNPbk1haW5UaHJlYWQsIGZpbGVTeXN0ZW0s
IHBhdGgsIHRoaXMsIG1vZGUpKTsKK30KKwordm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlOjpwb3N0UmVhZERpcmVjdG9yeVRvTWFpblRocmVhZChXZWJGaWxlU3lzdGVtKiBmaWxl
U3lzdGVtLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgbW9kZSkKK3sKKyAgICBt
X3NlbGZSZWYgPSB0aGlzOworICAgIEFTU0VSVChtX3dvcmtlckNvbnRleHQtPmlzQ29udGV4dFRo
cmVhZCgpKTsKKyAgICBBU1NFUlQobV93b3JrZXIpOworICAgIG1fd29ya2VyLT5kaXNwYXRjaFRh
c2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZyZWFkRGlyZWN0b3J5T25NYWluVGhy
ZWFkLCBmaWxlU3lzdGVtLCBwYXRoLCB0aGlzLCBtb2RlKSk7Cit9CisKIHZvaWQgV29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6b3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBX
ZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBXb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlKiBicmlkZ2UsIGNvbnN0IFN0cmluZyYgbW9kZSkKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmIChicmlkZ2UtPmRlcmVmSWZXb3JrZXJJc1N0b3Bw
ZWQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmICghY29tbW9uQ2xpZW50KQogICAgICAgICBi
cmlkZ2UtPmRpZEZhaWxPbk1haW5UaHJlYWQoV2ViRmlsZUVycm9yQWJvcnQsIG1vZGUpOwogICAg
IGVsc2UgewpAQCAtMTMxLDYgKzIzOCw4NyBAQCB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2U6Om9wZW5GaWxlU3lzdGVtT25NYWluVGhyZWFkKFNjcmlwdEV4ZWN1dGlvbgogICAg
IH0KIH0KIAordm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjptb3ZlT25NYWlu
VGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtKiBm
aWxlU3lzdGVtLCBjb25zdCBTdHJpbmcmIHNyY1BhdGgsIGNvbnN0IFN0cmluZyYgZGVzdFBhdGgs
IFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqIGJyaWRnZSwgY29uc3QgU3RyaW5nJiBt
b2RlKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKGJyaWRnZS0+ZGVy
ZWZJZldvcmtlcklzU3RvcHBlZCgpKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKGZpbGVT
eXN0ZW0pOworICAgIGZpbGVTeXN0ZW0tPm1vdmUoc3JjUGF0aCwgZGVzdFBhdGgsIE1haW5UaHJl
YWRGaWxlU3lzdGVtQ2FsbGJhY2tzOjpjcmVhdGUoYnJpZGdlLCBtb2RlKS5sZWFrUHRyKCkpOwor
fQorCit2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmNvcHlPbk1haW5UaHJl
YWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qIGZpbGVT
eXN0ZW0sIGNvbnN0IFN0cmluZyYgc3JjUGF0aCwgY29uc3QgU3RyaW5nJiBkZXN0UGF0aCwgV29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSogYnJpZGdlLCBjb25zdCBTdHJpbmcmIG1vZGUp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoYnJpZGdlLT5kZXJlZklm
V29ya2VySXNTdG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoZmlsZVN5c3Rl
bSk7CisgICAgZmlsZVN5c3RlbS0+Y29weShzcmNQYXRoLCBkZXN0UGF0aCwgTWFpblRocmVhZEZp
bGVTeXN0ZW1DYWxsYmFja3M6OmNyZWF0ZShicmlkZ2UsIG1vZGUpLmxlYWtQdHIoKSk7Cit9CisK
K3ZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cmVtb3ZlT25NYWluVGhyZWFk
KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtKiBmaWxlU3lz
dGVtLCBjb25zdCBTdHJpbmcmIHBhdGgsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2Uq
IGJyaWRnZSwgY29uc3QgU3RyaW5nJiBtb2RlKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisgICAgaWYgKGJyaWRnZS0+ZGVyZWZJZldvcmtlcklzU3RvcHBlZCgpKQorICAgICAgICBy
ZXR1cm47CisgICAgQVNTRVJUKGZpbGVTeXN0ZW0pOworICAgIGZpbGVTeXN0ZW0tPnJlbW92ZShw
YXRoLCBNYWluVGhyZWFkRmlsZVN5c3RlbUNhbGxiYWNrczo6Y3JlYXRlKGJyaWRnZSwgbW9kZSku
bGVha1B0cigpKTsKK30KKwordm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpy
ZWFkTWV0YWRhdGFPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFdlYkZpbGVTeXN0ZW0qIGZpbGVTeXN0ZW0sIGNvbnN0IFN0cmluZyYgcGF0aCwgV29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSogYnJpZGdlLCBjb25zdCBTdHJpbmcmIG1vZGUpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoYnJpZGdlLT5kZXJlZklmV29ya2Vy
SXNTdG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoZmlsZVN5c3RlbSk7Cisg
ICAgZmlsZVN5c3RlbS0+cmVhZE1ldGFkYXRhKHBhdGgsIE1haW5UaHJlYWRGaWxlU3lzdGVtQ2Fs
bGJhY2tzOjpjcmVhdGUoYnJpZGdlLCBtb2RlKS5sZWFrUHRyKCkpOworfQorCit2b2lkIFdvcmtl
ckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmNyZWF0ZUZpbGVPbk1haW5UaHJlYWQoV2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qIGZpbGVTeXN0ZW0sIGNv
bnN0IFN0cmluZyYgcGF0aCwgYm9vbCBleGNsdXNpdmUsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2UqIGJyaWRnZSwgY29uc3QgU3RyaW5nJiBtb2RlKQoreworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgaWYgKGJyaWRnZS0+ZGVyZWZJZldvcmtlcklzU3RvcHBlZCgpKQor
ICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKGZpbGVTeXN0ZW0pOworICAgIGZpbGVTeXN0ZW0t
PmNyZWF0ZUZpbGUocGF0aCwgZXhjbHVzaXZlLCBNYWluVGhyZWFkRmlsZVN5c3RlbUNhbGxiYWNr
czo6Y3JlYXRlKGJyaWRnZSwgbW9kZSkubGVha1B0cigpKTsKK30KKwordm9pZCBXb3JrZXJGaWxl
U3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGVEaXJlY3RvcnlPbk1haW5UaHJlYWQoV2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qIGZpbGVTeXN0ZW0sIGNv
bnN0IFN0cmluZyYgcGF0aCwgYm9vbCBleGNsdXNpdmUsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2UqIGJyaWRnZSwgY29uc3QgU3RyaW5nJiBtb2RlKQoreworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgaWYgKGJyaWRnZS0+ZGVyZWZJZldvcmtlcklzU3RvcHBlZCgpKQor
ICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKGZpbGVTeXN0ZW0pOworICAgIGZpbGVTeXN0ZW0t
PmNyZWF0ZURpcmVjdG9yeShwYXRoLCBleGNsdXNpdmUsIE1haW5UaHJlYWRGaWxlU3lzdGVtQ2Fs
bGJhY2tzOjpjcmVhdGUoYnJpZGdlLCBtb2RlKS5sZWFrUHRyKCkpOworfQorCit2b2lkIFdvcmtl
ckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmZpbGVFeGlzdHNPbk1haW5UaHJlYWQoV2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qIGZpbGVTeXN0ZW0sIGNv
bnN0IFN0cmluZyYgcGF0aCwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSogYnJpZGdl
LCBjb25zdCBTdHJpbmcmIG1vZGUpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBpZiAoYnJpZGdlLT5kZXJlZklmV29ya2VySXNTdG9wcGVkKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBBU1NFUlQoZmlsZVN5c3RlbSk7CisgICAgZmlsZVN5c3RlbS0+ZmlsZUV4aXN0cyhwYXRo
LCBNYWluVGhyZWFkRmlsZVN5c3RlbUNhbGxiYWNrczo6Y3JlYXRlKGJyaWRnZSwgbW9kZSkubGVh
a1B0cigpKTsKK30KKwordm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaXJl
Y3RvcnlFeGlzdHNPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFdlYkZpbGVTeXN0ZW0qIGZpbGVTeXN0ZW0sIGNvbnN0IFN0cmluZyYgcGF0aCwgV29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSogYnJpZGdlLCBjb25zdCBTdHJpbmcmIG1vZGUpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoYnJpZGdlLT5kZXJlZklmV29ya2Vy
SXNTdG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoZmlsZVN5c3RlbSk7Cisg
ICAgZmlsZVN5c3RlbS0+ZGlyZWN0b3J5RXhpc3RzKHBhdGgsIE1haW5UaHJlYWRGaWxlU3lzdGVt
Q2FsbGJhY2tzOjpjcmVhdGUoYnJpZGdlLCBtb2RlKS5sZWFrUHRyKCkpOworfQorCit2b2lkIFdv
cmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnJlYWREaXJlY3RvcnlPbk1haW5UaHJlYWQo
V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qIGZpbGVTeXN0
ZW0sIGNvbnN0IFN0cmluZyYgcGF0aCwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSog
YnJpZGdlLCBjb25zdCBTdHJpbmcmIG1vZGUpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICBpZiAoYnJpZGdlLT5kZXJlZklmV29ya2VySXNTdG9wcGVkKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBBU1NFUlQoZmlsZVN5c3RlbSk7CisgICAgZmlsZVN5c3RlbS0+cmVhZERpcmVj
dG9yeShwYXRoLCBNYWluVGhyZWFkRmlsZVN5c3RlbUNhbGxiYWNrczo6Y3JlYXRlKGJyaWRnZSwg
bW9kZSkubGVha1B0cigpKTsKK30KKwogdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlOjpkaWRGYWlsT25NYWluVGhyZWFkKFdlYkZpbGVFcnJvciBlcnJvciwgY29uc3QgU3RyaW5n
JiBtb2RlKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC0xNDMsNiArMzMxLDI0
IEBAIHZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6ZGlkT3BlbkZpbGVTeXN0
ZW1Pbk1haW5UaHJlYWQoY29uc3QgU3RyaW5nCiAgICAgbWF5UG9zdFRhc2tUb1dvcmtlcihjcmVh
dGVDYWxsYmFja1Rhc2soJmRpZE9wZW5GaWxlU3lzdGVtT25Xb3JrZXJUaHJlYWQsIG1fc2VsZlJl
ZiwgbmFtZSwgcm9vdFBhdGgpLCBtb2RlKTsKIH0KIAordm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2Fs
bGJhY2tzQnJpZGdlOjpkaWRTdWNjZWVkT25NYWluVGhyZWFkKGNvbnN0IFN0cmluZyYgbW9kZSkK
K3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIG1heVBvc3RUYXNrVG9Xb3JrZXIo
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZkaWRTdWNjZWVkT25Xb3JrZXJUaHJlYWQsIG1fc2VsZlJlZiks
IG1vZGUpOworfQorCit2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpZFJl
YWRNZXRhZGF0YU9uTWFpblRocmVhZChjb25zdCBXZWJGaWxlSW5mbyYgaW5mbywgY29uc3QgU3Ry
aW5nJiBtb2RlKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgbWF5UG9zdFRh
c2tUb1dvcmtlcihjcmVhdGVDYWxsYmFja1Rhc2soJmRpZFJlYWRNZXRhZGF0YU9uV29ya2VyVGhy
ZWFkLCBtX3NlbGZSZWYsIGluZm8pLCBtb2RlKTsKK30KKwordm9pZCBXb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlOjpkaWRSZWFkRGlyZWN0b3J5T25NYWluVGhyZWFkKGNvbnN0IFdlYlZl
Y3RvcjxXZWJGaWxlU3lzdGVtRW50cnk+JiBlbnRyaWVzLCBib29sIGhhc01vcmUsIGNvbnN0IFN0
cmluZyYgbW9kZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIG1heVBvc3RU
YXNrVG9Xb3JrZXIoY3JlYXRlQ2FsbGJhY2tUYXNrKCZkaWRSZWFkRGlyZWN0b3J5T25Xb3JrZXJU
aHJlYWQsIG1fc2VsZlJlZiwgZW50cmllcywgaGFzTW9yZSksIG1vZGUpOworfQorCiBXb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
KFdlYldvcmtlckJhc2UqIHdvcmtlciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzKQogICAgIDog
V29ya2VyQ29udGV4dDo6T2JzZXJ2ZXIoc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQpKQogICAgICwgbV93b3JrZXIod29ya2VyKQpAQCAtMTc1LDYgKzM4
MSw0OCBAQCB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpZE9wZW5GaWxl
U3lzdGVtT25Xb3JrZXJUaHJlYWQoU2NyaXB0RXhlYwogICAgIH0KIH0KIAordm9pZCBXb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaWRTdWNjZWVkT25Xb3JrZXJUaHJlYWQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0Jy
aWRnZT4gYnJpZGdlKQoreworICAgIGlmIChicmlkZ2UtPm1fY2FsbGJhY2tzT25Xb3JrZXJUaHJl
YWQpIHsKKyAgICAgICAgQVNTRVJUKGJyaWRnZS0+bV93b3JrZXJDb250ZXh0LT5pc0NvbnRleHRU
aHJlYWQoKSk7CisgICAgICAgIGJyaWRnZS0+bV9jYWxsYmFja3NPbldvcmtlclRocmVhZC0+ZGlk
U3VjY2VlZCgpOworICAgICAgICBicmlkZ2UtPm1fY2FsbGJhY2tzT25Xb3JrZXJUaHJlYWQgPSAw
OworICAgIH0KK30KKwordm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaWRS
ZWFkTWV0YWRhdGFPbldvcmtlclRocmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBicmlkZ2UsIGNvbnN0IFdlYkZp
bGVJbmZvJiBpbmZvKQoreworICAgIGlmIChicmlkZ2UtPm1fY2FsbGJhY2tzT25Xb3JrZXJUaHJl
YWQpIHsKKyAgICAgICAgQVNTRVJUKGJyaWRnZS0+bV93b3JrZXJDb250ZXh0LT5pc0NvbnRleHRU
aHJlYWQoKSk7CisgICAgICAgIGJyaWRnZS0+bV9jYWxsYmFja3NPbldvcmtlclRocmVhZC0+ZGlk
UmVhZE1ldGFkYXRhKGluZm8pOworICAgICAgICBicmlkZ2UtPm1fY2FsbGJhY2tzT25Xb3JrZXJU
aHJlYWQgPSAwOworICAgIH0KK30KKwordm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlOjpkaWRSZWFkRGlyZWN0b3J5T25Xb3JrZXJUaHJlYWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gYnJpZGdlLCBj
b25zdCBXZWJWZWN0b3I8V2ViRmlsZVN5c3RlbUVudHJ5PiYgZW50cmllcywgYm9vbCBoYXNNb3Jl
KQoreworICAgIGlmIChicmlkZ2UtPm1fY2FsbGJhY2tzT25Xb3JrZXJUaHJlYWQpIHsKKyAgICAg
ICAgQVNTRVJUKGJyaWRnZS0+bV93b3JrZXJDb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7Cisg
ICAgICAgIGJyaWRnZS0+bV9jYWxsYmFja3NPbldvcmtlclRocmVhZC0+ZGlkUmVhZERpcmVjdG9y
eShlbnRyaWVzLCBoYXNNb3JlKTsKKyAgICAgICAgYnJpZGdlLT5tX2NhbGxiYWNrc09uV29ya2Vy
VGhyZWFkID0gMDsKKyAgICB9Cit9CisKK2Jvb2wgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0Jy
aWRnZTo6ZGVyZWZJZldvcmtlcklzU3RvcHBlZCgpCit7CisgICAgV2ViV29ya2VyQmFzZSogd29y
a2VyID0gMDsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAg
ICAgICAgd29ya2VyID0gbV93b3JrZXI7CisgICAgfQorCisgICAgaWYgKCF3b3JrZXIpIHsKKyAg
ICAgICAgbV9zZWxmUmVmLmNsZWFyKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZTo6bWF5UG9zdFRhc2tUb1dvcmtlcihQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmluZyYgbW9kZSkKIHsKICAgICB7IC8vIExldCBnbyBvZiB0
aGUgbXV0ZXggYmVmb3JlIHBvc3NpYmx5IGRlbGV0aW5nIHRoaXMgZHVlIHRvIG1fc2VsZlJlZi5j
bGVhcigpLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1D
YWxsYmFja3NCcmlkZ2UuaAppbmRleCA1MDc5ZGIxNzAwZmE5NTNhYjc3ZjY3ZTY0NzZlNWZlZWVj
YmExOThiLi4zMTlhYTU5YzY2OWJlMmU5YWY0NzM4MjVmYjNiNDVlNjZhN2FlMWZhIDEwMDY0NAot
LS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2Uu
aAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2UuaApAQCAtODIsMTggKzgyLDM5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc3RvcCgpOwogCi0g
ICAgLy8gUG9zdHMgYW4gaW5pdGlhbCByZXF1ZXN0IHRhc2sgdG8gdGhlIG1haW4gdGhyZWFkLiBJ
dCBpcyBzdXBwb3NlZCB0byBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGJyaWRnZSBp
cyBjb25zdHJ1Y3RlZC4gKEl0IGRvZXNuJ3QgY2hlY2sgaWYgdGhlIGNvbnRleHQgaGFzIGJlZW4g
c3RvcHBlZCBvciBub3QuKQorICAgIC8vIE1ldGhvZHMgdGhhdCBwb3N0IGFuIGluaXRpYWwgcmVx
dWVzdCB0YXNrIHRvIHRoZSBtYWluIHRocmVhZC4gVGhleSBhcmUgc3VwcG9zZWQgdG8gYmUgY2Fs
bGVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBicmlkZ2UgaXMgY29uc3RydWN0ZWQgKHRoZXkgZG9u
J3QgY2hlY2sgaWYgdGhlIGNvbnRleHQgaGFzIGJlZW4gc3RvcHBlZCBvciBub3QpLgogICAgIHZv
aWQgcG9zdE9wZW5GaWxlU3lzdGVtVG9NYWluVGhyZWFkKFdlYkNvbW1vbldvcmtlckNsaWVudCos
IFdlYkZpbGVTeXN0ZW06OlR5cGUsIGxvbmcgbG9uZyBzaXplLCBjb25zdCBTdHJpbmcmIG1vZGUp
OworICAgIHZvaWQgcG9zdE1vdmVUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0IFN0
cmluZyYgc3JjUGF0aCwgY29uc3QgU3RyaW5nJiBkZXN0UGF0aCwgY29uc3QgU3RyaW5nJiBtb2Rl
KTsKKyAgICB2b2lkIHBvc3RDb3B5VG9NYWluVGhyZWFkKFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBT
dHJpbmcmIHNyY1BhdGgsIGNvbnN0IFN0cmluZyYgZGVzdFBhdGgsIGNvbnN0IFN0cmluZyYgbW9k
ZSk7CisgICAgdm9pZCBwb3N0UmVtb3ZlVG9NYWluVGhyZWFkKFdlYkZpbGVTeXN0ZW0qLCBjb25z
dCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgbW9kZSk7CisgICAgdm9pZCBwb3N0UmVhZE1l
dGFkYXRhVG9NYWluVGhyZWFkKFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNv
bnN0IFN0cmluZyYgbW9kZSk7CisgICAgdm9pZCBwb3N0Q3JlYXRlRmlsZVRvTWFpblRocmVhZChX
ZWJGaWxlU3lzdGVtKiwgY29uc3QgU3RyaW5nJiBwYXRoLCBib29sIGV4Y2x1c2l2ZSwgY29uc3Qg
U3RyaW5nJiBtb2RlKTsKKyAgICB2b2lkIHBvc3RDcmVhdGVEaXJlY3RvcnlUb01haW5UaHJlYWQo
V2ViRmlsZVN5c3RlbSosIGNvbnN0IFN0cmluZyYgcGF0aCwgYm9vbCBleGNsdXNpdmUsIGNvbnN0
IFN0cmluZyYgbW9kZSk7CisgICAgdm9pZCBwb3N0RmlsZUV4aXN0c1RvTWFpblRocmVhZChXZWJG
aWxlU3lzdGVtKiwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpOworICAg
IHZvaWQgcG9zdERpcmVjdG9yeUV4aXN0c1RvTWFpblRocmVhZChXZWJGaWxlU3lzdGVtKiwgY29u
c3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpOworICAgIHZvaWQgcG9zdFJlYWRE
aXJlY3RvcnlUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgU3RyaW5nJiBtb2RlKTsKIAogICAgIC8vIENhbGxiYWNrIG1ldGhvZHMgdGhhdCBhcmUg
Y2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICB2b2lkIGRpZEZhaWxPbk1haW5UaHJlYWQo
V2ViRmlsZUVycm9yLCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHZvaWQgZGlkT3BlbkZpbGVT
eXN0ZW1Pbk1haW5UaHJlYWQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHJvb3RQ
YXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpOworICAgIHZvaWQgZGlkU3VjY2VlZE9uTWFpblRocmVh
ZChjb25zdCBTdHJpbmcmIG1vZGUpOworICAgIHZvaWQgZGlkUmVhZE1ldGFkYXRhT25NYWluVGhy
ZWFkKGNvbnN0IFdlYkZpbGVJbmZvJiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKKyAgICB2b2lkIGRp
ZFJlYWREaXJlY3RvcnlPbk1haW5UaHJlYWQoY29uc3QgV2ViVmVjdG9yPFdlYkZpbGVTeXN0ZW1F
bnRyeT4mLCBib29sIGhhc01vcmUsIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAKIHByaXZhdGU6CiAg
ICAgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZShXZWJXb3JrZXJCYXNlKiwgV2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqKTsKIAot
ICAgIC8vIE1ldGhvZCB0aGF0IGlzIHRvIGJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCisg
ICAgLy8gTWV0aG9kcyB0aGF0IGFyZSB0byBiZSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLgog
ICAgIHN0YXRpYyB2b2lkIG9wZW5GaWxlU3lzdGVtT25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb21tb25Xb3JrZXJDbGllbnQqLCBXZWJGaWxlU3lzdGVt
OjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSos
IGNvbnN0IFN0cmluZyYgbW9kZSk7CisgICAgc3RhdGljIHZvaWQgbW92ZU9uTWFpblRocmVhZChX
ZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbSosIGNvbnN0IFN0
cmluZyYgc3JjUGF0aCwgY29uc3QgU3RyaW5nJiBkZXN0UGF0aCwgV29ya2VyRmlsZVN5c3RlbUNh
bGxiYWNrc0JyaWRnZSosIGNvbnN0IFN0cmluZyYgbW9kZSk7CisgICAgc3RhdGljIHZvaWQgY29w
eU9uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5
c3RlbSosIGNvbnN0IFN0cmluZyYgc3JjUGF0aCwgY29uc3QgU3RyaW5nJiBkZXN0UGF0aCwgV29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSosIGNvbnN0IFN0cmluZyYgbW9kZSk7CisgICAg
c3RhdGljIHZvaWQgcmVtb3ZlT25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBXZWJGaWxlU3lzdGVtKiwgY29uc3QgU3RyaW5nJiBwYXRoLCBXb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKKyAgICBzdGF0aWMgdm9p
ZCByZWFkTWV0YWRhdGFPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBTdHJpbmcmIHBhdGgsIFdvcmtlckZpbGVTeXN0ZW1D
YWxsYmFja3NCcmlkZ2UqLCBjb25zdCBTdHJpbmcmIG1vZGUpOworICAgIHN0YXRpYyB2b2lkIGNy
ZWF0ZUZpbGVPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdl
YkZpbGVTeXN0ZW0qLCBjb25zdCBTdHJpbmcmIHBhdGgsIGJvb2wgZXhjbHVzaXZlLCBXb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKKyAgICBzdGF0
aWMgdm9pZCBjcmVhdGVEaXJlY3RvcnlPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBTdHJpbmcmIHBhdGgsIGJvb2wgZXhj
bHVzaXZlLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBt
b2RlKTsKKyAgICBzdGF0aWMgdm9pZCBmaWxlRXhpc3RzT25NYWluVGhyZWFkKFdlYkNvcmU6OlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtKiwgY29uc3QgU3RyaW5nJiBwYXRo
LCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsK
KyAgICBzdGF0aWMgdm9pZCBkaXJlY3RvcnlFeGlzdHNPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBTdHJpbmcmIHBhdGgs
IFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBjb25zdCBTdHJpbmcmIG1vZGUpOwor
ICAgIHN0YXRpYyB2b2lkIHJlYWREaXJlY3RvcnlPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBTdHJpbmcmIHBhdGgsIFdv
cmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBjb25zdCBTdHJpbmcmIG1vZGUpOwogCiAg
ICAgZnJpZW5kIGNsYXNzIE1haW5UaHJlYWRGaWxlU3lzdGVtQ2FsbGJhY2tzOwogCkBAIC0xMDEs
NiArMTIyLDEyIEBAIHByaXZhdGU6CiAgICAgLy8gVGhleSByZWxlYXNlIGEgc2VsZlJlZiBvZiB0
aGUgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS4KICAgICBzdGF0aWMgdm9pZCBkaWRG
YWlsT25Xb3JrZXJUaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4sIFdlYkZpbGVFcnJvcik7CiAg
ICAgc3RhdGljIHZvaWQgZGlkT3BlbkZpbGVTeXN0ZW1PbldvcmtlclRocmVhZChXZWJDb3JlOjpT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJh
Y2tzQnJpZGdlPiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHJvb3RQYXRoKTsK
KyAgICBzdGF0aWMgdm9pZCBkaWRTdWNjZWVkT25Xb3JrZXJUaHJlYWQoV2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0Jy
aWRnZT4pOworICAgIHN0YXRpYyB2b2lkIGRpZFJlYWRNZXRhZGF0YU9uV29ya2VyVGhyZWFkKFdl
YkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0
ZW1DYWxsYmFja3NCcmlkZ2U+LCBjb25zdCBXZWJGaWxlSW5mbyYpOworICAgIHN0YXRpYyB2b2lk
IGRpZFJlYWREaXJlY3RvcnlPbldvcmtlclRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSosIGNvbnN0IFdlYlZlY3Rv
cjxXZWJGaWxlU3lzdGVtRW50cnk+JiwgYm9vbCBoYXNNb3JlKTsKKworICAgIC8vIEZvciBlYXJs
eS1leGlzdDsgdGhpcyBkZXJlZiBzZWxmUmVmIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHdvcmtl
ciBpcyBhbHJlYWR5IG51bGwuCisgICAgYm9vbCBkZXJlZklmV29ya2VySXNTdG9wcGVkKCk7CiAK
ICAgICB2b2lkIG1heVBvc3RUYXNrVG9Xb3JrZXIoUGFzc093blB0cjxXZWJDb3JlOjpTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrPiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68811</attachid>
            <date>2010-09-24 23:28:36 -0700</date>
            <delta_ts>2010-09-28 14:43:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46524-20100924232835.patch</filename>
            <type>text/plain</type>
            <size>48946</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDQxNmNhMzE3YzdkZTFkMzY5MDdkNjk1OTU4ZWZjMWIxYmE1M2QyNmIu
LmM1YzJiNTU0ZGUwYzVhMTljYTUyNmU1ZDU5NjBiMTYzZTYxN2Q2ZDAgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDU3IEBACisyMDEwLTA5LTI0ICBLaW51a28gWWFzdWRhICA8a2ludWtvQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBCcmlkZ2UgYWxsIEZpbGVTeXN0ZW0gb3BlcmF0aW9ucyBvbiBXb3JrZXJzIHRvIHRoZSBNYWlu
VGhyZWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
NjUyNAorCisgICAgICAgICogc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxvY2FsRmlsZVN5c3RlbTo6cmVxdWVzdEZpbGVTeXN0ZW0pOiBDaGFuZ2Vk
IHRoZSB3b3JrZXIgY2FzZQorICAgICAgICBjb2RlIHRvIGNyZWF0ZSBXZWJGaWxlU3lzdGVtQ2Fs
bGJhY2tzSW1wbCB3aXRoIHRoZSBjdXJyZW50CisgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQgKFdvcmtlckNvbnRleHQpLgorICAgICAgICAqIHNyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tz
SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsOjpX
ZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbCk6IEFkZGVkCisgICAgICAgIGEgbmV3IGNvbnN0cnVj
dG9yIHRoYXQgdGFrZXMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCAoV29ya2VyQ29udGV4dCkKKyAg
ICAgICAgZm9yIHdvcmtlcnMuCisgICAgICAgIChXZWJLaXQ6OldlYkZpbGVTeXN0ZW1DYWxsYmFj
a3NJbXBsOjpkaWRPcGVuRmlsZVN5c3RlbSk6IEFkZGVkIHRoZQorICAgICAgICBjb2RlIGZvciB3
b3JrZXJzIHRoYXQgY3JlYXRlcyBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS4KKyAgICAg
ICAgKiBzcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuaDoKKyAgICAgICAgKiBzcmMvV29y
a2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV29y
a2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaDogQWRkZWQuCisgICAgICAgICogc3JjL1dvcmtl
ckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwOiBBZGRlZCBtZXRob2RzIGZvciByZWd1bGFy
CisgICAgICAgIGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMgdG8gcHJveHkgdGhlbSB0byB0aGUgbWFp
biB0aHJlYWQuCisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2U6OmNyZWF0ZUZvck9wZW5GaWxlU3lzdGVtKToKKyAgICAgICAgKFdlYktpdDo6V29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6Y3JlYXRlRm9yTW92ZSk6CisgICAgICAgIChXZWJLaXQ6
OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmNyZWF0ZUZvckNvcHkpOgorICAgICAg
ICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGVGb3JSZW1v
dmUpOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpj
cmVhdGVGb3JSZWFkTWV0YWRhdGEpOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlOjpjcmVhdGVGb3JDcmVhdGVGaWxlKToKKyAgICAgICAgKFdlYktpdDo6
V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6Y3JlYXRlRm9yQ3JlYXRlRGlyZWN0b3J5
KToKKyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6Y3Jl
YXRlRm9yRmlsZUV4aXN0cyk6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxs
YmFja3NCcmlkZ2U6OmNyZWF0ZUZvckRpcmVjdG9yeUV4aXN0cyk6CisgICAgICAgIChXZWJLaXQ6
OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmNyZWF0ZUZvclJlYWREaXJlY3Rvcnkp
OgorICAgICAgICAoV2ViS2l0OjpNYWluVGhyZWFkRmlsZVN5c3RlbUNhbGxiYWNrczo6ZGlkU3Vj
Y2VlZCk6CisgICAgICAgIChXZWJLaXQ6Ok1haW5UaHJlYWRGaWxlU3lzdGVtQ2FsbGJhY2tzOjpk
aWRSZWFkTWV0YWRhdGEpOgorICAgICAgICAoV2ViS2l0OjpNYWluVGhyZWFkRmlsZVN5c3RlbUNh
bGxiYWNrczo6ZGlkUmVhZERpcmVjdG9yeSk6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVT
eXN0ZW1DYWxsYmFja3NCcmlkZ2U6Om9wZW5GaWxlU3lzdGVtT25NYWluVGhyZWFkKToKKyAgICAg
ICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6bW92ZU9uTWFpblRo
cmVhZCk6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6
OmNvcHlPbk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2Fs
bGJhY2tzQnJpZGdlOjpyZW1vdmVPbk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0OjpXb3Jr
ZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpyZWFkTWV0YWRhdGFPbk1haW5UaHJlYWQpOgor
ICAgICAgICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGVG
aWxlT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxi
YWNrc0JyaWRnZTo6Y3JlYXRlRGlyZWN0b3J5T25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYktp
dDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6ZmlsZUV4aXN0c09uTWFpblRocmVh
ZCk6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRp
cmVjdG9yeUV4aXN0c09uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVT
eXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnJlYWREaXJlY3RvcnlPbk1haW5UaHJlYWQpOgorICAgICAg
ICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaWRTdWNjZWVkT25N
YWluVGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0Jy
aWRnZTo6ZGlkUmVhZE1ldGFkYXRhT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6V29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6ZGlkUmVhZERpcmVjdG9yeU9uTWFpblRocmVh
ZCk6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRp
ZFN1Y2NlZWRPbldvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0
ZW1DYWxsYmFja3NCcmlkZ2U6OmRpZFJlYWRNZXRhZGF0YU9uV29ya2VyVGhyZWFkKToKKyAgICAg
ICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6ZGlkUmVhZERpcmVj
dG9yeU9uV29ya2VyVGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNh
bGxiYWNrc0JyaWRnZTo6ZGVyZWZJZldvcmtlcklzU3RvcHBlZCk6CisgICAgICAgICogc3JjL1dv
cmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaDoKKwogMjAxMC0wOS0yNCAgVG9ueSBDaGFu
ZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGZpeCBjaHJvbWl1
bSBjb21waWxlIGFmdGVyIHI2ODI3NiB3aGljaCByZW5hbWVkCmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmggYi9XZWJLaXQvY2hyb21pdW0v
c3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgKaW5kZXggZDg2OThkNWY3N2I1Y2I4ZGZiYWEy
MTA2YTliYjVmNjZmMTFmMTk5My4uZjQwOTIzOWNkOGU1NjE4MTFiMGY4ZjNlZjYwOTdlMmU5Njc0
NzE3OSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJv
bWl1bS5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0u
aApAQCAtMzQsNyArMzQsNyBAQAogI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKIAogI2luY2x1ZGUg
IkFzeW5jRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJGaWxl
U3lzdGVtOwpAQCAtNDYsNyArNDYsMTEgQEAgY2xhc3MgQXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tz
OwogCiBjbGFzcyBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bSA6IHB1YmxpYyBBc3luY0ZpbGVTeXN0
ZW0gewogcHVibGljOgotICAgIEFzeW5jRmlsZVN5c3RlbUNocm9taXVtKGNvbnN0IFN0cmluZyYg
cm9vdFBhdGgpOworICAgIHN0YXRpYyBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNocm9taXVt
PiBjcmVhdGUoY29uc3QgU3RyaW5nJiByb290UGF0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0ocm9vdFBhdGgpKTsKKyAgICB9CisK
ICAgICB2aXJ0dWFsIH5Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bSgpOwogCiAgICAgdmlydHVhbCB2
b2lkIG1vdmUoY29uc3QgU3RyaW5nJiBzcmNQYXRoLCBjb25zdCBTdHJpbmcmIGRlc3RQYXRoLCBQ
YXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOwpAQCAtNjEsNiArNjUsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVdyaXRlcihBc3luY0ZpbGVXcml0ZXJDbGll
bnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3Rl
bUNhbGxiYWNrcz4pOwogCiBwcml2YXRlOgorICAgIEFzeW5jRmlsZVN5c3RlbUNocm9taXVtKGNv
bnN0IFN0cmluZyYgcm9vdFBhdGgpOwogICAgIFdlYktpdDo6V2ViRmlsZVN5c3RlbSogbV93ZWJG
aWxlU3lzdGVtOwogfTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZp
bGVTeXN0ZW1DaHJvbWl1bS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3Rl
bUNocm9taXVtLmNwcAppbmRleCA5OTRmMzEwNDZiM2RkNzU3NWFhMDE5ZTZlMTg5OWJhZmYxOTA5
MzE4Li4xNTMzNDY5MTIwNzhjOWE1YTAyN2Y3ZDM5MTcyMWRiN2QwNDE3ZjMyIDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcApAQCAtNjgsNyAr
NjgsNyBAQCB2b2lkIExvY2FsRmlsZVN5c3RlbTo6cmVxdWVzdEZpbGVTeXN0ZW0oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgQXN5bmNGaQogICAgICAgICBXb3JrZXJDb250ZXh0KiB3
b3JrZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpOwogICAg
ICAgICBXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHkgPSAmd29ya2VyQ29udGV4
dC0+dGhyZWFkKCktPndvcmtlckxvYWRlclByb3h5KCk7CiAgICAgICAgIFdlYldvcmtlckJhc2Uq
IHdlYldvcmtlciA9IHN0YXRpY19jYXN0PFdlYldvcmtlckJhc2UqPih3b3JrZXJMb2FkZXJQcm94
eSk7Ci0gICAgICAgIHdlYldvcmtlci0+b3BlbkZpbGVTeXN0ZW0oc3RhdGljX2Nhc3Q8V2ViRmls
ZVN5c3RlbTo6VHlwZT4odHlwZSksIHNpemUsIG5ldyBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1w
bChuZXcgRmlsZVN5c3RlbUNhbGxiYWNrcyhzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ss
IGNvbnRleHQpKSk7CisgICAgICAgIHdlYldvcmtlci0+b3BlbkZpbGVTeXN0ZW0oc3RhdGljX2Nh
c3Q8V2ViRmlsZVN5c3RlbTo6VHlwZT4odHlwZSksIHNpemUsIG5ldyBXZWJGaWxlU3lzdGVtQ2Fs
bGJhY2tzSW1wbChuZXcgRmlsZVN5c3RlbUNhbGxiYWNrcyhzdWNjZXNzQ2FsbGJhY2ssIGVycm9y
Q2FsbGJhY2ssIGNvbnRleHQpLCBjb250ZXh0KSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNwcCBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwCmluZGV4IGEyM2Fk
ZDdiZmUxMDYzMTE5NTVmYWExZDg3YzVmYjg1NWUxZDQzYzIuLmZhZmZlZDBlNTMxOTNmMzU5ZTg3
MmJkMjIzYjRlZWRmMjJhM2JlZTkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwCkBAIC0zNCwxOSArMzQsMjIgQEAKIAogI2luY2x1
ZGUgIkFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcy5oIgogI2luY2x1ZGUgIkFzeW5jRmlsZVN5c3Rl
bUNocm9taXVtLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJGaWxlU3lzdGVtRW50cnkuaCIKICNp
bmNsdWRlICJXZWJGaWxlSW5mby5oIgogI2luY2x1ZGUgIldlYlN0cmluZy5oIgorI2luY2x1ZGUg
IldvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVdl
YkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsOjpXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChQYXNz
T3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQorV2ViRmlsZVN5c3Rl
bUNhbGxiYWNrc0ltcGw6OldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKFBhc3NPd25QdHI8QXN5
bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQpCiAgICAgOiBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgLCBt
X2NvbnRleHQoY29udGV4dCkKIHsKKyAgICBBU1NFUlQobV9jYWxsYmFja3MpOwogfQogCiBXZWJG
aWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6fldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKCkKQEAg
LTU1LDIxICs1OCwxOCBAQCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6fldlYkZpbGVTeXN0
ZW1DYWxsYmFja3NJbXBsKCkKIAogdm9pZCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6ZGlk
U3VjY2VlZCgpCiB7Ci0gICAgQVNTRVJUKG1fY2FsbGJhY2tzKTsKICAgICBtX2NhbGxiYWNrcy0+
ZGlkU3VjY2VlZCgpOwogICAgIGRlbGV0ZSB0aGlzOwogfQogCiB2b2lkIFdlYkZpbGVTeXN0ZW1D
YWxsYmFja3NJbXBsOjpkaWRSZWFkTWV0YWRhdGEoY29uc3QgV2ViRmlsZUluZm8mIGluZm8pCiB7
Ci0gICAgQVNTRVJUKG1fY2FsbGJhY2tzKTsKICAgICBtX2NhbGxiYWNrcy0+ZGlkUmVhZE1ldGFk
YXRhKGluZm8ubW9kaWZpY2F0aW9uVGltZSk7CiAgICAgZGVsZXRlIHRoaXM7CiB9CiAKIHZvaWQg
V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6OmRpZFJlYWREaXJlY3RvcnkoY29uc3QgV2ViVmVj
dG9yPFdlYkZpbGVTeXN0ZW1FbnRyeT4mIGVudHJpZXMsIGJvb2wgaGFzTW9yZSkKIHsKLSAgICBB
U1NFUlQobV9jYWxsYmFja3MpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW50cmllcy5z
aXplKCk7ICsraSkKICAgICAgICAgbV9jYWxsYmFja3MtPmRpZFJlYWREaXJlY3RvcnlFbnRyeShl
bnRyaWVzW2ldLm5hbWUsIGVudHJpZXNbaV0uaXNEaXJlY3RvcnkpOwogICAgIG1fY2FsbGJhY2tz
LT5kaWRSZWFkRGlyZWN0b3J5RW50cmllcyhoYXNNb3JlKTsKQEAgLTc5LDEzICs3OSwxNSBAQCB2
b2lkIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsOjpkaWRSZWFkRGlyZWN0b3J5KGNvbnN0IFdl
YlZlY3RvcjxXZWJGaWxlU3lzdGVtRQogCiB2b2lkIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBs
OjpkaWRPcGVuRmlsZVN5c3RlbShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmlu
ZyYgcGF0aCkKIHsKLSAgICBtX2NhbGxiYWNrcy0+ZGlkT3BlbkZpbGVTeXN0ZW0obmFtZSwgbmV3
IEFzeW5jRmlsZVN5c3RlbUNocm9taXVtKHBhdGgpKTsKKyAgICBpZiAobV9jb250ZXh0ICYmIG1f
Y29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpCisgICAgICAgIG1fY2FsbGJhY2tzLT5kaWRPcGVu
RmlsZVN5c3RlbShuYW1lLCBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYXRlKG1f
Y29udGV4dCwgcGF0aCkpOworICAgIGVsc2UKKyAgICAgICAgbV9jYWxsYmFja3MtPmRpZE9wZW5G
aWxlU3lzdGVtKG5hbWUsIEFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpjcmVhdGUocGF0aCkpOwog
ICAgIGRlbGV0ZSB0aGlzOwogfQogCiB2b2lkIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsOjpk
aWRGYWlsKFdlYkZpbGVFcnJvciBlcnJvcikKIHsKLSAgICBBU1NFUlQobV9jYWxsYmFja3MpOwog
ICAgIG1fY2FsbGJhY2tzLT5kaWRGYWlsKGVycm9yKTsKICAgICBkZWxldGUgdGhpczsKIH0KZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwu
aCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuaAppbmRl
eCAzNmFiOWZmYjA0ZDE0OTMzNjUxNTNmZjA4NjgxMmQ3Y2Y2ZjJhMWIwLi5jYjY2MmY4NmEyNDBm
ZjFkYTQ1N2VkZWM4ODg0YjMxMzAwZGMwN2ZiIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5oCkBAIC0zOCw2ICszOCw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrczsKK2NsYXNzIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNDgsNyAr
NDksOCBAQCBjbGFzcyBXZWJTdHJpbmc7CiAKIGNsYXNzIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJ
bXBsIDogcHVibGljIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MgewogcHVibGljOgotICAgIFdlYkZp
bGVTeXN0ZW1DYWxsYmFja3NJbXBsKFBhc3NPd25QdHI8V2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVt
Q2FsbGJhY2tzPik7CisgICAgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoUGFzc093blB0cjxX
ZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+LCBXZWJDb3JlOjpTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiA9IDApOworCiAgICAgdmlydHVhbCB+V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0lt
cGwoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRTdWNjZWVkKCk7CkBAIC01OSw2ICs2MSw5IEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBPd25QdHI8V2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVt
Q2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKKworICAgIC8vIFVzZWQgZm9yIHdvcmtlcidzIG9wZW5G
aWxlU3lzdGVtIGNhbGxiYWNrcy4KKyAgICBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBtX2NvbnRleHQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYldvcmtlckJhc2UuY3BwCmluZGV4IDYyMmY1YzI4ZTQyZTYxMDAwOTg2MzYwOTUwMGFiYTI1
ZjRhNjI5MmQuLmQ1N2MyNWYwYzNlYzYyZmFkOWFkZjMwOTQ3MDVhOTA5MDAzODg2YmYgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5jcHAKKysrIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmNwcApAQCAtMjQwLDEwICsyNDAsNyBAQCBib29s
IFdlYldvcmtlckJhc2U6OmFsbG93RGF0YWJhc2UoV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcm
IG5hbWUsIGNvbnN0IFdlYlN0cgogdm9pZCBXZWJXb3JrZXJCYXNlOjpvcGVuRmlsZVN5c3RlbShX
ZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBXZWJGaWxlU3lzdGVtQ2Fs
bGJhY2tzKiBjYWxsYmFja3MpCiB7CiAgICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJv
bGxlciA9IFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7Ci0g
ICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IGNvbnRyb2xsZXItPndvcmtlckNvbnRl
eHQoKTsKLQotICAgIFJlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBicmlk
Z2UgPSBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGUodGhpcywgd29ya2Vy
Q29udGV4dCwgY2FsbGJhY2tzKTsKLSAgICBicmlkZ2UtPnBvc3RPcGVuRmlsZVN5c3RlbVRvTWFp
blRocmVhZChjb21tb25DbGllbnQoKSwgdHlwZSwgc2l6ZSwgb3BlbkZpbGVTeXN0ZW1Nb2RlKTsK
KyAgICBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGVGb3JPcGVuRmlsZVN5
c3RlbSh0aGlzLCBjb250cm9sbGVyLT53b3JrZXJDb250ZXh0KCksIGNhbGxiYWNrcywgY29tbW9u
Q2xpZW50KCksIHR5cGUsIHNpemUsIG9wZW5GaWxlU3lzdGVtTW9kZSk7CiB9CiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJv
bWl1bS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9t
aXVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yNGQ3YzNiNjM4NjcxN2M3YmQ0MzA2ZDNiNTk2Y2FlMzI1YTNk
ODAwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3luY0Zp
bGVTeXN0ZW1DaHJvbWl1bS5jcHAKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaCIKKworI2lmIEVOQUJM
RShGSUxFX1NZU1RFTSkKKworI2luY2x1ZGUgIkFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcy5oIgor
I2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lu
Y2x1ZGUgIldlYkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJXZWJGaWxlU3lzdGVtQ2FsbGJhY2tz
SW1wbC5oIgorI2luY2x1ZGUgIldlYktpdC5oIgorI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgor
I2luY2x1ZGUgIldlYldvcmtlckJhc2UuaCIKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisj
aW5jbHVkZSAiV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5oIgorI2luY2x1ZGUgIldv
cmtlclNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGNoYXIgZmlsZVN5c3RlbU9wZXJhdGlv
bnNNb2RlW10gPSAiZmlsZVN5c3RlbU9wZXJhdGlvbnNNb2RlIjsKKworV29ya2VyQXN5bmNGaWxl
U3lzdGVtQ2hyb21pdW06OldvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgcm9vdFBhdGgpCisgICAgOiBBc3lu
Y0ZpbGVTeXN0ZW0ocm9vdFBhdGgpCisgICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29u
dGV4dCkKKyAgICAsIG1fd2ViRmlsZVN5c3RlbShXZWJLaXQ6OndlYktpdENsaWVudCgpLT5maWxl
U3lzdGVtKCkpCisgICAgLCBtX21vZGUoZmlsZVN5c3RlbU9wZXJhdGlvbnNNb2RlKQoreworICAg
IEFTU0VSVChtX3dlYkZpbGVTeXN0ZW0pOworICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKKworICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNv
bnRleHQgPSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCk7CisgICAgV29ya2Vy
TG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5ID0gJndvcmtlckNvbnRleHQtPnRocmVhZCgp
LT53b3JrZXJMb2FkZXJQcm94eSgpOworICAgIG1fd29ya2VyID0gc3RhdGljX2Nhc3Q8V2ViV29y
a2VyQmFzZSo+KHdvcmtlckxvYWRlclByb3h5KTsKK30KKworV29ya2VyQXN5bmNGaWxlU3lzdGVt
Q2hyb21pdW06On5Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bSgpCit7Cit9CisKK3ZvaWQg
V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06Om1vdmUoY29uc3QgU3RyaW5nJiBzb3VyY2VQ
YXRoLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uUGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVT
eXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJh
Y2tzQnJpZGdlOjpjcmVhdGVGb3JNb3ZlKG1fd29ya2VyLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsIG5ldyBXZWJLaXQ6OldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksIG1f
d2ViRmlsZVN5c3RlbSwgc291cmNlUGF0aCwgZGVzdGluYXRpb25QYXRoLCBtX21vZGUpOworfQor
Cit2b2lkIFdvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpjb3B5KGNvbnN0IFN0cmluZyYg
c291cmNlUGF0aCwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvblBhdGgsIFBhc3NPd25QdHI8QXN5
bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgV29ya2VyRmlsZVN5c3Rl
bUNhbGxiYWNrc0JyaWRnZTo6Y3JlYXRlRm9yQ29weShtX3dvcmtlciwgbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LCBuZXcgV2ViS2l0OjpXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFj
a3MpLCBtX3dlYkZpbGVTeXN0ZW0sIHNvdXJjZVBhdGgsIGRlc3RpbmF0aW9uUGF0aCwgbV9tb2Rl
KTsKK30KKwordm9pZCBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6cmVtb3ZlKGNvbnN0
IFN0cmluZyYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxi
YWNrcykKK3sKKyAgICBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGVGb3JS
ZW1vdmUobV93b3JrZXIsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgbmV3IFdlYktpdDo6V2Vi
RmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgbV93ZWJGaWxlU3lzdGVtLCBwYXRo
LCBtX21vZGUpOworfQorCit2b2lkIFdvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpyZWFk
TWV0YWRhdGEoY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNh
bGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2U6OmNyZWF0ZUZvclJlYWRNZXRhZGF0YShtX3dvcmtlciwgbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0LCBuZXcgV2ViS2l0OjpXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCBt
X3dlYkZpbGVTeXN0ZW0sIHBhdGgsIG1fbW9kZSk7Cit9CisKK3ZvaWQgV29ya2VyQXN5bmNGaWxl
U3lzdGVtQ2hyb21pdW06OmNyZWF0ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBib29sIGV4Y2x1
c2l2ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKK3sK
KyAgICBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGVGb3JDcmVhdGVGaWxl
KG1fd29ya2VyLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG5ldyBXZWJLaXQ6OldlYkZpbGVT
eXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksIG1fd2ViRmlsZVN5c3RlbSwgcGF0aCwgZXhj
bHVzaXZlLCBtX21vZGUpOworfQorCit2b2lkIFdvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVt
OjpjcmVhdGVEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBib29sIGV4Y2x1c2l2ZSwgUGFz
c093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBXb3Jr
ZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGVGb3JDcmVhdGVEaXJlY3RvcnkobV93
b3JrZXIsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgbmV3IFdlYktpdDo6V2ViRmlsZVN5c3Rl
bUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgbV93ZWJGaWxlU3lzdGVtLCBwYXRoLCBleGNsdXNp
dmUsIG1fbW9kZSk7Cit9CisKK3ZvaWQgV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmZp
bGVFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNh
bGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2U6OmNyZWF0ZUZvckZpbGVFeGlzdHMobV93b3JrZXIsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCwgbmV3IFdlYktpdDo6V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgbV93
ZWJGaWxlU3lzdGVtLCBwYXRoLCBtX21vZGUpOworfQorCit2b2lkIFdvcmtlckFzeW5jRmlsZVN5
c3RlbUNocm9taXVtOjpkaXJlY3RvcnlFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzT3du
UHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIFdvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmNyZWF0ZUZvckRpcmVjdG9yeUV4aXN0cyhtX3dvcmtl
ciwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBuZXcgV2ViS2l0OjpXZWJGaWxlU3lzdGVtQ2Fs
bGJhY2tzSW1wbChjYWxsYmFja3MpLCBtX3dlYkZpbGVTeXN0ZW0sIHBhdGgsIG1fbW9kZSk7Cit9
CisKK3ZvaWQgV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OnJlYWREaXJlY3RvcnkoY29u
c3QgU3RyaW5nJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQoreworICAgIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmNyZWF0ZUZv
clJlYWREaXJlY3RvcnkobV93b3JrZXIsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgbmV3IFdl
YktpdDo6V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgbV93ZWJGaWxlU3lz
dGVtLCBwYXRoLCBtX21vZGUpOworfQorCit2b2lkIFdvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9t
aXVtOjpjcmVhdGVXcml0ZXIoQXN5bmNGaWxlV3JpdGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiwg
UGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShG
SUxFX1NZU1RFTSkKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNG
aWxlU3lzdGVtQ2hyb21pdW0uaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxl
U3lzdGVtQ2hyb21pdW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZTE5YjdhMDU2YWM3MzFhMDRkMTNlMjc4YTU4
YjlkMzJmNmFlZmE3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3Jr
ZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdvcmtl
ckFzeW5jRmlsZVN5c3RlbUNocm9taXVtX2gKKyNkZWZpbmUgV29ya2VyQXN5bmNGaWxlU3lzdGVt
Q2hyb21pdW1faAorCisjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQorCisjaW5jbHVkZSAiQXN5bmNG
aWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CitjbGFzcyBXZWJGaWxlU3lzdGVtOworY2xhc3MgV2ViV29ya2VyQmFzZTsKK30KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M7CitjbGFz
cyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCitjbGFzcyBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1D
aHJvbWl1bSA6IHB1YmxpYyBBc3luY0ZpbGVTeXN0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgcm9vdFBhdGgpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IFdvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtKGNvbnRleHQsIHJvb3RQ
YXRoKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21p
dW0oKTsKKworICAgIHZpcnR1YWwgdm9pZCBtb3ZlKGNvbnN0IFN0cmluZyYgc291cmNlUGF0aCwg
Y29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvblBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVt
Q2FsbGJhY2tzPik7CisgICAgdmlydHVhbCB2b2lkIGNvcHkoY29uc3QgU3RyaW5nJiBzb3VyY2VQ
YXRoLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uUGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVT
eXN0ZW1DYWxsYmFja3M+KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlKGNvbnN0IFN0cmluZyYg
cGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVhZE1ldGFkYXRhKGNvbnN0IFN0cmluZyYgcGF0aCwgUGFzc093blB0cjxBc3luY0Zp
bGVTeXN0ZW1DYWxsYmFja3M+KTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlRmlsZShjb25zdCBT
dHJpbmcmIHBhdGgsIGJvb2wgZXhjbHVzaXZlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNh
bGxiYWNrcz4pOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVEaXJlY3RvcnkoY29uc3QgU3RyaW5n
JiBwYXRoLCBib29sIGV4Y2x1c2l2ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFj
a3M+KTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgsIFBh
c3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CisgICAgdmlydHVhbCB2b2lkIGRp
cmVjdG9yeUV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lz
dGVtQ2FsbGJhY2tzPik7CisgICAgdmlydHVhbCB2b2lkIHJlYWREaXJlY3RvcnkoY29uc3QgU3Ry
aW5nJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOworICAgIHZp
cnR1YWwgdm9pZCBjcmVhdGVXcml0ZXIoQXN5bmNGaWxlV3JpdGVyQ2xpZW50KiBjbGllbnQsIGNv
bnN0IFN0cmluZyYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsK
KworcHJpdmF0ZToKKyAgICBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiByb290UGF0aCk7CisKKyAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisgICAgV2ViS2l0OjpXZWJG
aWxlU3lzdGVtKiBtX3dlYkZpbGVTeXN0ZW07CisgICAgV2ViS2l0OjpXZWJXb3JrZXJCYXNlKiBt
X3dvcmtlcjsKKyAgICBTdHJpbmcgbV9tb2RlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQorCisjZW5kaWYgLy8gV29ya2VyQXN5
bmNGaWxlU3lzdGVtQ2hyb21pdW1faApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9X
b3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAKaW5kZXggZDExMjg4NjRlOTA2ZDc4
OWNmYjM4MzJmZGYwOTI1MGM4OTdhNWNjMS4uMzFlNjlmZDZmYzlkYzExZWQxNGIwMTBjOGE5ODEz
ODY1NjIzNzIwMCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwCkBAIC0zNSw3ICszNSw5IEBACiAKICNpbmNsdWRl
ICJDcm9zc1RocmVhZFRhc2suaCIKICNpbmNsdWRlICJXZWJDb21tb25Xb3JrZXJDbGllbnQuaCIK
KyNpbmNsdWRlICJXZWJGaWxlSW5mby5oIgogI2luY2x1ZGUgIldlYkZpbGVTeXN0ZW1DYWxsYmFj
a3MuaCIKKyNpbmNsdWRlICJXZWJGaWxlU3lzdGVtRW50cnkuaCIKICNpbmNsdWRlICJXZWJTdHJp
bmcuaCIKICNpbmNsdWRlICJXZWJXb3JrZXJCYXNlLmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4
dC5oIgpAQCAtNDQsNiArNDYsMzQgQEAKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAorbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBXZWJLaXQ6Oldl
YkZpbGVJbmZvPiB7CisgICAgdHlwZWRlZiBXZWJLaXQ6OldlYkZpbGVJbmZvIFR5cGU7CisgICAg
c3RhdGljIFR5cGUgY29weShjb25zdCBXZWJLaXQ6OldlYkZpbGVJbmZvJiBpbmZvKQorICAgIHsK
KyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgV2ViRmlsZUluZm8gaGFzIG9ubHkgb25lIGRvdWJs
ZSBmaWVsZC4gKFRoaXMgY29weSBtZXRob2QgbmVlZHMgdG8gYmUgdXBkYXRlZCB3aGVuZXZlciB0
aGUgc3RydWN0dXJlIGlzIHVwZGF0ZWQuKQorICAgICAgICBBU1NFUlQoc2l6ZW9mKFdlYktpdDo6
V2ViRmlsZUluZm8pID09IHNpemVvZihkb3VibGUpKTsKKyAgICAgICAgcmV0dXJuIGluZm87Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNl
LCBmYWxzZSwgV2ViS2l0OjpXZWJWZWN0b3I8V2ViS2l0OjpXZWJGaWxlU3lzdGVtRW50cnk+ID4g
eworICAgIHR5cGVkZWYgV2ViS2l0OjpXZWJWZWN0b3I8V2ViS2l0OjpXZWJGaWxlU3lzdGVtRW50
cnk+IFR5cGU7CisgICAgc3RhdGljIFR5cGUgY29weShjb25zdCBXZWJLaXQ6OldlYlZlY3RvcjxX
ZWJLaXQ6OldlYkZpbGVTeXN0ZW1FbnRyeT4mIGVudHJpZXMpCisgICAgeworICAgICAgICBXZWJL
aXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYkZpbGVTeXN0ZW1FbnRyeT4gbmV3RW50cmllcyhlbnRy
aWVzLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW50cmllcy5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBlbnRyaWVzW2ldLm5hbWU7Cisg
ICAgICAgICAgICBuZXdFbnRyaWVzW2ldLmlzRGlyZWN0b3J5ID0gZW50cmllc1tpXS5pc0RpcmVj
dG9yeTsKKyAgICAgICAgICAgIG5ld0VudHJpZXNbaV0ubmFtZSA9IG5hbWUuY3Jvc3NUaHJlYWRT
dHJpbmcoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3RW50cmllczsKKyAgICB9Cit9
OworCit9CisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
QEAgLTUxLDkgKzgxLDExIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogLy8gRmlsZVN5c3RlbUNhbGxi
YWNrcyB0aGF0IGFyZSB0byBiZSBkaXNwYXRjaGVkIG9uIHRoZSBtYWluIHRocmVhZC4KIGNsYXNz
IE1haW5UaHJlYWRGaWxlU3lzdGVtQ2FsbGJhY2tzIDogcHVibGljIFdlYkZpbGVTeXN0ZW1DYWxs
YmFja3MgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPE1haW5UaHJlYWRGaWxlU3lz
dGVtQ2FsbGJhY2tzPiBjcmVhdGUoUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlPiBicmlkZ2UsIGNvbnN0IFN0cmluZyYgbW9kZSkKKyAgICAvLyBDYWxsYmFja3MgYXJl
IHNlbGYtZGVzdHJ1Y3RlZCBhbmQgd2UgYWx3YXlzIHJldHVybiBsZWFrZWQgcG9pbnRlciBoZXJl
LgorICAgIHN0YXRpYyBNYWluVGhyZWFkRmlsZVN5c3RlbUNhbGxiYWNrcyogY3JlYXRlTGVha2Vk
UHRyKFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gYnJpZGdlLCBj
b25zdCBTdHJpbmcmIG1vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1h
aW5UaHJlYWRGaWxlU3lzdGVtQ2FsbGJhY2tzKGJyaWRnZSwgbW9kZSkpOworICAgICAgICBPd25Q
dHI8TWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcyA9IGFkb3B0UHRyKG5l
dyBNYWluVGhyZWFkRmlsZVN5c3RlbUNhbGxiYWNrcyhicmlkZ2UsIG1vZGUpKTsKKyAgICAgICAg
cmV0dXJuIGNhbGxiYWNrcy5sZWFrUHRyKCk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+TWFpblRo
cmVhZEZpbGVTeXN0ZW1DYWxsYmFja3MoKQpAQCAtNzQsMTcgKzEwNiwyMCBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkU3VjY2VlZCgpCiAgICAgewotICAgICAgICBXRUJLSVRfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIG1fYnJpZGdlLT5kaWRTdWNjZWVkT25NYWluVGhy
ZWFkKG1fbW9kZSk7CisgICAgICAgIGRlbGV0ZSB0aGlzOwogICAgIH0KIAogICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWFkTWV0YWRhdGEoY29uc3QgV2ViRmlsZUluZm8mIGluZm8pCiAgICAgewotICAg
ICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIG1fYnJpZGdlLT5kaWRS
ZWFkTWV0YWRhdGFPbk1haW5UaHJlYWQoaW5mbywgbV9tb2RlKTsKKyAgICAgICAgZGVsZXRlIHRo
aXM7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlYWREaXJlY3RvcnkoY29uc3QgV2Vi
VmVjdG9yPFdlYkZpbGVTeXN0ZW1FbnRyeT4mIGVudHJpZXMsIGJvb2wgaGFzTW9yZSkKICAgICB7
Ci0gICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgbV9icmlkZ2Ut
PmRpZFJlYWREaXJlY3RvcnlPbk1haW5UaHJlYWQoZW50cmllcywgaGFzTW9yZSwgbV9tb2RlKTsK
KyAgICAgICAgZGVsZXRlIHRoaXM7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMTEyLDM1ICsxNDcs
MTYwIEBAIHZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6c3RvcCgpCiAgICAg
fQogfQogCi12b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBvc3RPcGVuRmls
ZVN5c3RlbVRvTWFpblRocmVhZChXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwg
V2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgY29uc3QgU3RyaW5nJiBt
b2RlKQorUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBXb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGVGb3JPcGVuRmlsZVN5c3RlbShXZWJXb3Jr
ZXJCYXNlKiB3b3JrZXIsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHdvcmtlckNvbnRleHQsIFdl
YkZpbGVTeXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNrcywgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBj
b21tb25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGNv
bnN0IFN0cmluZyYgbW9kZSkKIHsKLSAgICBtX3NlbGZSZWYgPSB0aGlzOwotICAgIEFTU0VSVCht
X3dvcmtlckNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBBU1NFUlQobV93b3JrZXIp
OwotICAgIG1fd29ya2VyLT5kaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tU
YXNrKCZvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZCwgY29tbW9uQ2xpZW50LCB0eXBlLCBzaXpl
LCB0aGlzLCBtb2RlKSk7CisgICAgUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2U+IGJyaWRnZSA9IFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmNyZWF0ZSh3b3Jr
ZXIsIHdvcmtlckNvbnRleHQsIGNhbGxiYWNrcyk7CisgICAgYnJpZGdlLT5kaXNwYXRjaFRhc2tU
b01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVh
ZCwgY29tbW9uQ2xpZW50LCB0eXBlLCBzaXplLCBicmlkZ2UuZ2V0KCksIG1vZGUpKTsKKyAgICBy
ZXR1cm4gYnJpZGdlLnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlPiBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGVG
b3JNb3ZlKFdlYldvcmtlckJhc2UqIHdvcmtlciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogd29y
a2VyQ29udGV4dCwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzLCBXZWJGaWxlU3lz
dGVtKiBmaWxlU3lzdGVtLCBjb25zdCBTdHJpbmcmIHNvdXJjZVBhdGgsIGNvbnN0IFN0cmluZyYg
ZGVzdGluYXRpb25QYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpCit7CisgICAgUmVmUHRyPFdvcmtl
ckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGJyaWRnZSA9IFdvcmtlckZpbGVTeXN0ZW1DYWxs
YmFja3NCcmlkZ2U6OmNyZWF0ZSh3b3JrZXIsIHdvcmtlckNvbnRleHQsIGNhbGxiYWNrcyk7Cisg
ICAgYnJpZGdlLT5kaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZt
b3ZlT25NYWluVGhyZWFkLCBmaWxlU3lzdGVtLCBzb3VyY2VQYXRoLCBkZXN0aW5hdGlvblBhdGgs
IGJyaWRnZS5nZXQoKSwgbW9kZSkpOworICAgIHJldHVybiBicmlkZ2UucmVsZWFzZSgpOworfQor
CitQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IFdvcmtlckZpbGVT
eXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmNyZWF0ZUZvckNvcHkoV2ViV29ya2VyQmFzZSogd29ya2Vy
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiB3b3JrZXJDb250ZXh0LCBXZWJGaWxlU3lzdGVtQ2Fs
bGJhY2tzKiBjYWxsYmFja3MsIFdlYkZpbGVTeXN0ZW0qIGZpbGVTeXN0ZW0sIGNvbnN0IFN0cmlu
ZyYgc291cmNlUGF0aCwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvblBhdGgsIGNvbnN0IFN0cmlu
ZyYgbW9kZSkKK3sKKyAgICBSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4g
YnJpZGdlID0gV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6Y3JlYXRlKHdvcmtlciwg
d29ya2VyQ29udGV4dCwgY2FsbGJhY2tzKTsKKyAgICBicmlkZ2UtPmRpc3BhdGNoVGFza1RvTWFp
blRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJmNvcHlPbk1haW5UaHJlYWQsIGZpbGVTeXN0ZW0s
IHNvdXJjZVBhdGgsIGRlc3RpbmF0aW9uUGF0aCwgYnJpZGdlLmdldCgpLCBtb2RlKSk7CisgICAg
cmV0dXJuIGJyaWRnZS5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3Rl
bUNhbGxiYWNrc0JyaWRnZT4gV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6Y3JlYXRl
Rm9yUmVtb3ZlKFdlYldvcmtlckJhc2UqIHdvcmtlciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
d29ya2VyQ29udGV4dCwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzLCBXZWJGaWxl
U3lzdGVtKiBmaWxlU3lzdGVtLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgbW9k
ZSkKK3sKKyAgICBBU1NFUlQoZmlsZVN5c3RlbSk7CisgICAgUmVmUHRyPFdvcmtlckZpbGVTeXN0
ZW1DYWxsYmFja3NCcmlkZ2U+IGJyaWRnZSA9IFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2U6OmNyZWF0ZSh3b3JrZXIsIHdvcmtlckNvbnRleHQsIGNhbGxiYWNrcyk7CisgICAgYnJpZGdl
LT5kaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZyZW1vdmVPbk1h
aW5UaHJlYWQsIGZpbGVTeXN0ZW0sIHBhdGgsIGJyaWRnZS5nZXQoKSwgbW9kZSkpOworICAgIHJl
dHVybiBicmlkZ2UucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1D
YWxsYmFja3NCcmlkZ2U+IFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmNyZWF0ZUZv
clJlYWRNZXRhZGF0YShXZWJXb3JrZXJCYXNlKiB3b3JrZXIsIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHdvcmtlckNvbnRleHQsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNrcywgV2Vi
RmlsZVN5c3RlbSogZmlsZVN5c3RlbSwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcm
IG1vZGUpCit7CisgICAgQVNTRVJUKGZpbGVTeXN0ZW0pOworICAgIFJlZlB0cjxXb3JrZXJGaWxl
U3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBicmlkZ2UgPSBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlOjpjcmVhdGUod29ya2VyLCB3b3JrZXJDb250ZXh0LCBjYWxsYmFja3MpOworICAgIGJy
aWRnZS0+ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmcmVhZE1l
dGFkYXRhT25NYWluVGhyZWFkLCBmaWxlU3lzdGVtLCBwYXRoLCBicmlkZ2UuZ2V0KCksIG1vZGUp
KTsKKyAgICByZXR1cm4gYnJpZGdlLnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxXb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
OjpjcmVhdGVGb3JDcmVhdGVGaWxlKFdlYldvcmtlckJhc2UqIHdvcmtlciwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogd29ya2VyQ29udGV4dCwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJh
Y2tzLCBXZWJGaWxlU3lzdGVtKiBmaWxlU3lzdGVtLCBjb25zdCBTdHJpbmcmIHBhdGgsIGJvb2wg
ZXhjbHVzaXZlLCBjb25zdCBTdHJpbmcmIG1vZGUpCit7CisgICAgQVNTRVJUKGZpbGVTeXN0ZW0p
OworICAgIFJlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBicmlkZ2UgPSBX
b3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGUod29ya2VyLCB3b3JrZXJDb250
ZXh0LCBjYWxsYmFja3MpOworICAgIGJyaWRnZS0+ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNy
ZWF0ZUNhbGxiYWNrVGFzaygmY3JlYXRlRmlsZU9uTWFpblRocmVhZCwgZmlsZVN5c3RlbSwgcGF0
aCwgZXhjbHVzaXZlLCBicmlkZ2UuZ2V0KCksIG1vZGUpKTsKKyAgICByZXR1cm4gYnJpZGdlLnJl
bGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
PiBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGVGb3JDcmVhdGVEaXJlY3Rv
cnkoV2ViV29ya2VyQmFzZSogd29ya2VyLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiB3b3JrZXJD
b250ZXh0LCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFdlYkZpbGVTeXN0ZW0q
IGZpbGVTeXN0ZW0sIGNvbnN0IFN0cmluZyYgcGF0aCwgYm9vbCBleGNsdXNpdmUsIGNvbnN0IFN0
cmluZyYgbW9kZSkKK3sKKyAgICBBU1NFUlQoZmlsZVN5c3RlbSk7CisgICAgUmVmUHRyPFdvcmtl
ckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGJyaWRnZSA9IFdvcmtlckZpbGVTeXN0ZW1DYWxs
YmFja3NCcmlkZ2U6OmNyZWF0ZSh3b3JrZXIsIHdvcmtlckNvbnRleHQsIGNhbGxiYWNrcyk7Cisg
ICAgYnJpZGdlLT5kaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZj
cmVhdGVEaXJlY3RvcnlPbk1haW5UaHJlYWQsIGZpbGVTeXN0ZW0sIHBhdGgsIGV4Y2x1c2l2ZSwg
YnJpZGdlLmdldCgpLCBtb2RlKSk7CisgICAgcmV0dXJuIGJyaWRnZS5yZWxlYXNlKCk7Cit9CisK
K1Bhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gV29ya2VyRmlsZVN5
c3RlbUNhbGxiYWNrc0JyaWRnZTo6Y3JlYXRlRm9yRmlsZUV4aXN0cyhXZWJXb3JrZXJCYXNlKiB3
b3JrZXIsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHdvcmtlckNvbnRleHQsIFdlYkZpbGVTeXN0
ZW1DYWxsYmFja3MqIGNhbGxiYWNrcywgV2ViRmlsZVN5c3RlbSogZmlsZVN5c3RlbSwgY29uc3Qg
U3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpCit7CisgICAgQVNTRVJUKGZpbGVTeXN0
ZW0pOworICAgIFJlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBicmlkZ2Ug
PSBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGUod29ya2VyLCB3b3JrZXJD
b250ZXh0LCBjYWxsYmFja3MpOworICAgIGJyaWRnZS0+ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFk
KGNyZWF0ZUNhbGxiYWNrVGFzaygmZmlsZUV4aXN0c09uTWFpblRocmVhZCwgZmlsZVN5c3RlbSwg
cGF0aCwgYnJpZGdlLmdldCgpLCBtb2RlKSk7CisgICAgcmV0dXJuIGJyaWRnZS5yZWxlYXNlKCk7
Cit9CisKK1Bhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gV29ya2Vy
RmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6Y3JlYXRlRm9yRGlyZWN0b3J5RXhpc3RzKFdlYldv
cmtlckJhc2UqIHdvcmtlciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogd29ya2VyQ29udGV4dCwg
V2ViRmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzLCBXZWJGaWxlU3lzdGVtKiBmaWxlU3lz
dGVtLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgbW9kZSkKK3sKKyAgICBBU1NF
UlQoZmlsZVN5c3RlbSk7CisgICAgUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2U+IGJyaWRnZSA9IFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmNyZWF0ZSh3b3Jr
ZXIsIHdvcmtlckNvbnRleHQsIGNhbGxiYWNrcyk7CisgICAgYnJpZGdlLT5kaXNwYXRjaFRhc2tU
b01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZkaXJlY3RvcnlFeGlzdHNPbk1haW5UaHJl
YWQsIGZpbGVTeXN0ZW0sIHBhdGgsIGJyaWRnZS5nZXQoKSwgbW9kZSkpOworICAgIHJldHVybiBi
cmlkZ2UucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2U+IFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmNyZWF0ZUZvclJlYWRE
aXJlY3RvcnkoV2ViV29ya2VyQmFzZSogd29ya2VyLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiB3
b3JrZXJDb250ZXh0LCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFdlYkZpbGVT
eXN0ZW0qIGZpbGVTeXN0ZW0sIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBtb2Rl
KQoreworICAgIEFTU0VSVChmaWxlU3lzdGVtKTsKKyAgICBSZWZQdHI8V29ya2VyRmlsZVN5c3Rl
bUNhbGxiYWNrc0JyaWRnZT4gYnJpZGdlID0gV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZTo6Y3JlYXRlKHdvcmtlciwgd29ya2VyQ29udGV4dCwgY2FsbGJhY2tzKTsKKyAgICBicmlkZ2Ut
PmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJnJlYWREaXJlY3Rv
cnlPbk1haW5UaHJlYWQsIGZpbGVTeXN0ZW0sIHBhdGgsIGJyaWRnZS5nZXQoKSwgbW9kZSkpOwor
ICAgIHJldHVybiBicmlkZ2UucmVsZWFzZSgpOwogfQogCiB2b2lkIFdvcmtlckZpbGVTeXN0ZW1D
YWxsYmFja3NCcmlkZ2U6Om9wZW5GaWxlU3lzdGVtT25NYWluVGhyZWFkKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRmlsZVN5
c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZSogYnJpZGdlLCBjb25zdCBTdHJpbmcmIG1vZGUpCiB7Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKICAgICBpZiAoIWNvbW1vbkNsaWVudCkKICAgICAgICAgYnJpZGdlLT5kaWRG
YWlsT25NYWluVGhyZWFkKFdlYkZpbGVFcnJvckFib3J0LCBtb2RlKTsKICAgICBlbHNlIHsKLSAg
ICAgICAgLy8gTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFja3MgaXMgc2VsZi1kZXN0cnVjdGVk
LCBzbyB3ZSBsZWFrIHB0ciBoZXJlLgotICAgICAgICBjb21tb25DbGllbnQtPm9wZW5GaWxlU3lz
dGVtKHR5cGUsIHNpemUsIE1haW5UaHJlYWRGaWxlU3lzdGVtQ2FsbGJhY2tzOjpjcmVhdGUoYnJp
ZGdlLCBtb2RlKS5sZWFrUHRyKCkpOworICAgICAgICBjb21tb25DbGllbnQtPm9wZW5GaWxlU3lz
dGVtKHR5cGUsIHNpemUsIE1haW5UaHJlYWRGaWxlU3lzdGVtQ2FsbGJhY2tzOjpjcmVhdGVMZWFr
ZWRQdHIoYnJpZGdlLCBtb2RlKSk7CiAgICAgfQogfQogCit2b2lkIFdvcmtlckZpbGVTeXN0ZW1D
YWxsYmFja3NCcmlkZ2U6Om1vdmVPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFdlYkZpbGVTeXN0ZW0qIGZpbGVTeXN0ZW0sIGNvbnN0IFN0cmluZyYgc291cmNl
UGF0aCwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvblBhdGgsIFdvcmtlckZpbGVTeXN0ZW1DYWxs
YmFja3NCcmlkZ2UqIGJyaWRnZSwgY29uc3QgU3RyaW5nJiBtb2RlKQoreworICAgIGZpbGVTeXN0
ZW0tPm1vdmUoc291cmNlUGF0aCwgZGVzdGluYXRpb25QYXRoLCBNYWluVGhyZWFkRmlsZVN5c3Rl
bUNhbGxiYWNrczo6Y3JlYXRlTGVha2VkUHRyKGJyaWRnZSwgbW9kZSkpOworfQorCit2b2lkIFdv
cmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmNvcHlPbk1haW5UaHJlYWQoV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qIGZpbGVTeXN0ZW0sIGNvbnN0
IFN0cmluZyYgc291cmNlUGF0aCwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvblBhdGgsIFdvcmtl
ckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqIGJyaWRnZSwgY29uc3QgU3RyaW5nJiBtb2RlKQor
eworICAgIGZpbGVTeXN0ZW0tPmNvcHkoc291cmNlUGF0aCwgZGVzdGluYXRpb25QYXRoLCBNYWlu
VGhyZWFkRmlsZVN5c3RlbUNhbGxiYWNrczo6Y3JlYXRlTGVha2VkUHRyKGJyaWRnZSwgbW9kZSkp
OworfQorCit2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnJlbW92ZU9uTWFp
blRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbSog
ZmlsZVN5c3RlbSwgY29uc3QgU3RyaW5nJiBwYXRoLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlKiBicmlkZ2UsIGNvbnN0IFN0cmluZyYgbW9kZSkKK3sKKyAgICBmaWxlU3lzdGVtLT5y
ZW1vdmUocGF0aCwgTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFja3M6OmNyZWF0ZUxlYWtlZFB0
cihicmlkZ2UsIG1vZGUpKTsKK30KKwordm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlOjpyZWFkTWV0YWRhdGFPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFdlYkZpbGVTeXN0ZW0qIGZpbGVTeXN0ZW0sIGNvbnN0IFN0cmluZyYgcGF0aCwgV29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSogYnJpZGdlLCBjb25zdCBTdHJpbmcmIG1vZGUp
Cit7CisgICAgZmlsZVN5c3RlbS0+cmVhZE1ldGFkYXRhKHBhdGgsIE1haW5UaHJlYWRGaWxlU3lz
dGVtQ2FsbGJhY2tzOjpjcmVhdGVMZWFrZWRQdHIoYnJpZGdlLCBtb2RlKSk7Cit9CisKK3ZvaWQg
V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6Y3JlYXRlRmlsZU9uTWFpblRocmVhZChX
ZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbSogZmlsZVN5c3Rl
bSwgY29uc3QgU3RyaW5nJiBwYXRoLCBib29sIGV4Y2x1c2l2ZSwgV29ya2VyRmlsZVN5c3RlbUNh
bGxiYWNrc0JyaWRnZSogYnJpZGdlLCBjb25zdCBTdHJpbmcmIG1vZGUpCit7CisgICAgZmlsZVN5
c3RlbS0+Y3JlYXRlRmlsZShwYXRoLCBleGNsdXNpdmUsIE1haW5UaHJlYWRGaWxlU3lzdGVtQ2Fs
bGJhY2tzOjpjcmVhdGVMZWFrZWRQdHIoYnJpZGdlLCBtb2RlKSk7Cit9CisKK3ZvaWQgV29ya2Vy
RmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6Y3JlYXRlRGlyZWN0b3J5T25NYWluVGhyZWFkKFdl
YkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtKiBmaWxlU3lzdGVt
LCBjb25zdCBTdHJpbmcmIHBhdGgsIGJvb2wgZXhjbHVzaXZlLCBXb3JrZXJGaWxlU3lzdGVtQ2Fs
bGJhY2tzQnJpZGdlKiBicmlkZ2UsIGNvbnN0IFN0cmluZyYgbW9kZSkKK3sKKyAgICBmaWxlU3lz
dGVtLT5jcmVhdGVEaXJlY3RvcnkocGF0aCwgZXhjbHVzaXZlLCBNYWluVGhyZWFkRmlsZVN5c3Rl
bUNhbGxiYWNrczo6Y3JlYXRlTGVha2VkUHRyKGJyaWRnZSwgbW9kZSkpOworfQorCit2b2lkIFdv
cmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmZpbGVFeGlzdHNPbk1haW5UaHJlYWQoV2Vi
Q29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qIGZpbGVTeXN0ZW0s
IGNvbnN0IFN0cmluZyYgcGF0aCwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSogYnJp
ZGdlLCBjb25zdCBTdHJpbmcmIG1vZGUpCit7CisgICAgZmlsZVN5c3RlbS0+ZmlsZUV4aXN0cyhw
YXRoLCBNYWluVGhyZWFkRmlsZVN5c3RlbUNhbGxiYWNrczo6Y3JlYXRlTGVha2VkUHRyKGJyaWRn
ZSwgbW9kZSkpOworfQorCit2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRp
cmVjdG9yeUV4aXN0c09uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgV2ViRmlsZVN5c3RlbSogZmlsZVN5c3RlbSwgY29uc3QgU3RyaW5nJiBwYXRoLCBXb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiBicmlkZ2UsIGNvbnN0IFN0cmluZyYgbW9kZSkKK3sK
KyAgICBmaWxlU3lzdGVtLT5kaXJlY3RvcnlFeGlzdHMocGF0aCwgTWFpblRocmVhZEZpbGVTeXN0
ZW1DYWxsYmFja3M6OmNyZWF0ZUxlYWtlZFB0cihicmlkZ2UsIG1vZGUpKTsKK30KKwordm9pZCBX
b3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpyZWFkRGlyZWN0b3J5T25NYWluVGhyZWFk
KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtKiBmaWxlU3lz
dGVtLCBjb25zdCBTdHJpbmcmIHBhdGgsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2Uq
IGJyaWRnZSwgY29uc3QgU3RyaW5nJiBtb2RlKQoreworICAgIGZpbGVTeXN0ZW0tPnJlYWREaXJl
Y3RvcnkocGF0aCwgTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFja3M6OmNyZWF0ZUxlYWtlZFB0
cihicmlkZ2UsIG1vZGUpKTsKK30KKwogdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlOjpkaWRGYWlsT25NYWluVGhyZWFkKFdlYkZpbGVFcnJvciBlcnJvciwgY29uc3QgU3RyaW5n
JiBtb2RlKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbWF5UG9zdFRhc2tU
b1dvcmtlcihjcmVhdGVDYWxsYmFja1Rhc2soJmRpZEZhaWxPbldvcmtlclRocmVhZCwgbV9zZWxm
UmVmLCBlcnJvciksIG1vZGUpOworICAgIG1heVBvc3RUYXNrVG9Xb3JrZXIoY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZkaWRGYWlsT25Xb3JrZXJUaHJlYWQsIHRoaXMsIGVycm9yKSwgbW9kZSk7CiB9CiAK
IHZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6ZGlkT3BlbkZpbGVTeXN0ZW1P
bk1haW5UaHJlYWQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBj
b25zdCBTdHJpbmcmIG1vZGUpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBt
YXlQb3N0VGFza1RvV29ya2VyKGNyZWF0ZUNhbGxiYWNrVGFzaygmZGlkT3BlbkZpbGVTeXN0ZW1P
bldvcmtlclRocmVhZCwgbV9zZWxmUmVmLCBuYW1lLCByb290UGF0aCksIG1vZGUpOworICAgIG1h
eVBvc3RUYXNrVG9Xb3JrZXIoY3JlYXRlQ2FsbGJhY2tUYXNrKCZkaWRPcGVuRmlsZVN5c3RlbU9u
V29ya2VyVGhyZWFkLCB0aGlzLCBuYW1lLCByb290UGF0aCksIG1vZGUpOworfQorCit2b2lkIFdv
cmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpZFN1Y2NlZWRPbk1haW5UaHJlYWQoY29u
c3QgU3RyaW5nJiBtb2RlKQoreworICAgIG1heVBvc3RUYXNrVG9Xb3JrZXIoY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZkaWRTdWNjZWVkT25Xb3JrZXJUaHJlYWQsIHRoaXMpLCBtb2RlKTsKK30KKwordm9p
ZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaWRSZWFkTWV0YWRhdGFPbk1haW5U
aHJlYWQoY29uc3QgV2ViRmlsZUluZm8mIGluZm8sIGNvbnN0IFN0cmluZyYgbW9kZSkKK3sKKyAg
ICBtYXlQb3N0VGFza1RvV29ya2VyKGNyZWF0ZUNhbGxiYWNrVGFzaygmZGlkUmVhZE1ldGFkYXRh
T25Xb3JrZXJUaHJlYWQsIHRoaXMsIGluZm8pLCBtb2RlKTsKK30KKwordm9pZCBXb3JrZXJGaWxl
U3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaWRSZWFkRGlyZWN0b3J5T25NYWluVGhyZWFkKGNvbnN0
IFdlYlZlY3RvcjxXZWJGaWxlU3lzdGVtRW50cnk+JiBlbnRyaWVzLCBib29sIGhhc01vcmUsIGNv
bnN0IFN0cmluZyYgbW9kZSkKK3sKKyAgICBtYXlQb3N0VGFza1RvV29ya2VyKGNyZWF0ZUNhbGxi
YWNrVGFzaygmZGlkUmVhZERpcmVjdG9yeU9uV29ya2VyVGhyZWFkLCB0aGlzLCBlbnRyaWVzLCBo
YXNNb3JlKSwgbW9kZSk7CiB9CiAKIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6Oldv
cmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UoV2ViV29ya2VyQmFzZSogd29ya2VyLCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBXZWJGaWxlU3lzdGVt
Q2FsbGJhY2tzKiBjYWxsYmFja3MpCkBAIC0xNTcsMzAgKzMxNyw3OSBAQCBXb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlOjp+V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSgpCiAg
ICAgQVNTRVJUKCFtX2NhbGxiYWNrc09uV29ya2VyVGhyZWFkKTsKIH0KIAotdm9pZCBXb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaWRGYWlsT25Xb3JrZXJUaHJlYWQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZT4gYnJpZGdlLCBXZWJGaWxlRXJyb3IgZXJyb3IpCit2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxs
YmFja3NCcmlkZ2U6OmRpZEZhaWxPbldvcmtlclRocmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSogYnJpZGdlLCBXZWJGaWxlRXJyb3Ig
ZXJyb3IpCiB7Ci0gICAgaWYgKGJyaWRnZS0+bV9jYWxsYmFja3NPbldvcmtlclRocmVhZCkgewot
ICAgICAgICBBU1NFUlQoYnJpZGdlLT5tX3dvcmtlckNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgp
KTsKLSAgICAgICAgYnJpZGdlLT5tX2NhbGxiYWNrc09uV29ya2VyVGhyZWFkLT5kaWRGYWlsKGVy
cm9yKTsKLSAgICAgICAgYnJpZGdlLT5tX2NhbGxiYWNrc09uV29ya2VyVGhyZWFkID0gMDsKLSAg
ICB9CisgICAgYnJpZGdlLT5tX2NhbGxiYWNrc09uV29ya2VyVGhyZWFkLT5kaWRGYWlsKGVycm9y
KTsKIH0KIAotdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaWRPcGVuRmls
ZVN5c3RlbU9uV29ya2VyVGhyZWFkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGJyaWRnZSwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHJvb3RQYXRoKQordm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJh
Y2tzQnJpZGdlOjpkaWRPcGVuRmlsZVN5c3RlbU9uV29ya2VyVGhyZWFkKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiBicmlkZ2UsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiByb290UGF0aCkKIHsKLSAgICBpZiAoYnJpZGdl
LT5tX2NhbGxiYWNrc09uV29ya2VyVGhyZWFkKSB7Ci0gICAgICAgIEFTU0VSVChicmlkZ2UtPm1f
d29ya2VyQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgICAgICBicmlkZ2UtPm1fY2Fs
bGJhY2tzT25Xb3JrZXJUaHJlYWQtPmRpZE9wZW5GaWxlU3lzdGVtKG5hbWUsIHJvb3RQYXRoKTsK
LSAgICAgICAgYnJpZGdlLT5tX2NhbGxiYWNrc09uV29ya2VyVGhyZWFkID0gMDsKKyAgICBicmlk
Z2UtPm1fY2FsbGJhY2tzT25Xb3JrZXJUaHJlYWQtPmRpZE9wZW5GaWxlU3lzdGVtKG5hbWUsIHJv
b3RQYXRoKTsKK30KKwordm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaWRT
dWNjZWVkT25Xb3JrZXJUaHJlYWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdvcmtlckZpbGVT
eXN0ZW1DYWxsYmFja3NCcmlkZ2UqIGJyaWRnZSkKK3sKKyAgICBicmlkZ2UtPm1fY2FsbGJhY2tz
T25Xb3JrZXJUaHJlYWQtPmRpZFN1Y2NlZWQoKTsKK30KKwordm9pZCBXb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlOjpkaWRSZWFkTWV0YWRhdGFPbldvcmtlclRocmVhZChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSogYnJpZGdlLCBj
b25zdCBXZWJGaWxlSW5mbyYgaW5mbykKK3sKKyAgICBicmlkZ2UtPm1fY2FsbGJhY2tzT25Xb3Jr
ZXJUaHJlYWQtPmRpZFJlYWRNZXRhZGF0YShpbmZvKTsKK30KKwordm9pZCBXb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlOjpkaWRSZWFkRGlyZWN0b3J5T25Xb3JrZXJUaHJlYWQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqIGJyaWRn
ZSwgY29uc3QgV2ViVmVjdG9yPFdlYkZpbGVTeXN0ZW1FbnRyeT4mIGVudHJpZXMsIGJvb2wgaGFz
TW9yZSkKK3sKKyAgICBicmlkZ2UtPm1fY2FsbGJhY2tzT25Xb3JrZXJUaHJlYWQtPmRpZFJlYWRE
aXJlY3RvcnkoZW50cmllcywgaGFzTW9yZSk7Cit9CisKK2Jvb2wgV29ya2VyRmlsZVN5c3RlbUNh
bGxiYWNrc0JyaWRnZTo6ZGVyZWZJZldvcmtlcklzU3RvcHBlZCgpCit7CisgICAgV2ViV29ya2Vy
QmFzZSogd29ya2VyID0gMDsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211
dGV4KTsKKyAgICAgICAgd29ya2VyID0gbV93b3JrZXI7CisgICAgfQorCisgICAgaWYgKCF3b3Jr
ZXIpIHsKKyAgICAgICAgbV9zZWxmUmVmLmNsZWFyKCk7CisgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxi
YWNrc0JyaWRnZTo6cnVuVGFza09uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlKiBicmlkZ2UsIFBhc3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6VGFzaz4gdGFza1RvUnVuKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAg
aWYgKGJyaWRnZS0+ZGVyZWZJZldvcmtlcklzU3RvcHBlZCgpKQorICAgICAgICByZXR1cm47Cisg
ICAgdGFza1RvUnVuLT5wZXJmb3JtVGFzayhzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKK30KKwor
dm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpydW5UYXNrT25Xb3JrZXJUaHJl
YWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCwgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBicmlkZ2UsIFBh
c3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFza1RvUnVu
KQoreworICAgIGlmICghYnJpZGdlLT5tX2NhbGxiYWNrc09uV29ya2VyVGhyZWFkKQorICAgICAg
ICByZXR1cm47CisgICAgQVNTRVJUKGJyaWRnZS0+bV93b3JrZXJDb250ZXh0LT5pc0NvbnRleHRU
aHJlYWQoKSk7CisgICAgdGFza1RvUnVuLT5wZXJmb3JtVGFzayhzY3JpcHRFeGVjdXRpb25Db250
ZXh0KTsKKyAgICBicmlkZ2UtPm1fY2FsbGJhY2tzT25Xb3JrZXJUaHJlYWQgPSAwOworfQorCit2
b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpc3BhdGNoVGFza1RvTWFpblRo
cmVhZChQYXNzT3duUHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRh
c2spCit7CisgICAgQVNTRVJUKCFtX3NlbGZSZWYpOworICAgIEFTU0VSVChtX3dvcmtlcik7Cisg
ICAgQVNTRVJUKG1fd29ya2VyQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIG1fc2Vs
ZlJlZiA9IHRoaXM7CisgICAgbV93b3JrZXItPmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVh
dGVDYWxsYmFja1Rhc2soJnJ1blRhc2tPbk1haW5UaHJlYWQsIHRoaXMsIHRhc2spKTsKIH0KIAog
dm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjptYXlQb3N0VGFza1RvV29ya2Vy
KFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgY29uc3QgU3Ry
aW5nJiBtb2RlKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgeyAvLyBMZXQg
Z28gb2YgdGhlIG11dGV4IGJlZm9yZSBwb3NzaWJseSBkZWxldGluZyB0aGlzIGR1ZSB0byBtX3Nl
bGZSZWYuY2xlYXIoKS4KICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwogICAg
ICAgICBpZiAobV93b3JrZXIpCi0gICAgICAgICAgICBtX3dvcmtlci0+cG9zdFRhc2tGb3JNb2Rl
VG9Xb3JrZXJDb250ZXh0KHRhc2ssIG1vZGUpOworICAgICAgICAgICAgbV93b3JrZXItPnBvc3RU
YXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChjcmVhdGVDYWxsYmFja1Rhc2soJnJ1blRhc2tPbldv
cmtlclRocmVhZCwgbV9zZWxmUmVmLCB0YXNrKSwgbW9kZSk7CiAgICAgfQogICAgIG1fc2VsZlJl
Zi5jbGVhcigpOwogfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxl
U3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVT
eXN0ZW1DYWxsYmFja3NCcmlkZ2UuaAppbmRleCA1MDc5ZGIxNzAwZmE5NTNhYjc3ZjY3ZTY0NzZl
NWZlZWVjYmExOThiLi43MDg4OTZiNGJmYmMyMjUyZGExMGUzN2MyZTFlZGM5ZTNjYTk2YjJiIDEw
MDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NC
cmlkZ2UuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2UuaApAQCAtNTcsNyArNTcsNyBAQCBzdHJ1Y3QgV2ViRmlsZUluZm87CiAvLyBUaGlz
IGNsYXNzIGlzIHVzZWQgdG8gcG9zdCBhIG9wZW5GaWxlU3lzdGVtIHJlcXVlc3QgdG8gdGhlIG1h
aW4gdGhyZWFkIGFuZCBnZXQgY2FsbGVkIGJhY2sgZm9yIHRoZSByZXF1ZXN0LiBUaGlzIG11c3Qg
YmUgZGVzdHJ1Y3RlZCBvbiB0aGUgd29ya2VyIHRocmVhZC4KIC8vCiAvLyBBIHR5cGljYWwgZmxv
dyBmb3Igb3BlbkZpbGVTeXN0ZW0gd291bGQgbG9vayBsaWtlIHRoaXM6Ci0vLyBCcmlkZ2U6OnBv
c3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZCgpIG9uIFdvcmtlclRocmVhZAorLy8gQnJpZGdl
OjpjcmVhdGVGb3JPcGVuRmlsZVN5c3RlbSgpIG9uIFdvcmtlclRocmVhZAogLy8gIC0tPiBCcmlk
Z2U6Om9wZW5GaWxlU3lzdGVtT25NYWluVGhyZWFkKCkgaXMgY2FsbGVkIG9uIE1haW5UaHJlYWQK
IC8vICAgICAgVGhpcyBtYWtlcyBhbiBJUEMgd2l0aCBhIE1haW5UaHJlYWRGaWxlU3lzdGVtQ2Fs
bGJhY2tzIGluc3RhbmNlCiAvLyAgICAgW2FjdHVhbCBvcGVyYXRpb24gaXMgZG93biBpbiB0aGUg
YnJvd3Nlcl0KQEAgLTY4LDEwICs2OCw2IEBAIHN0cnVjdCBXZWJGaWxlSW5mbzsKIC8vICAgICAg
cmVsZWFzZXMgYSBzZWxmLXJlZmVyZW5jZSB0byB0aGUgYnJpZGdlLgogY2xhc3MgV29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFdvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+LCBwdWJsaWMgV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6
T2JzZXJ2ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0
ZW1DYWxsYmFja3NCcmlkZ2U+IGNyZWF0ZShXZWJXb3JrZXJCYXNlKiB3b3JrZXIsIFdlYkNvcmU6
OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHdvcmtlckNvbnRleHQsIFdlYkZpbGVTeXN0ZW1DYWxs
YmFja3MqIGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OmFkb3B0UmVmKG5l
dyBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKHdvcmtlciwgd29ya2VyQ29udGV4dCwg
Y2FsbGJhY2tzKSk7Ci0gICAgfQogICAgIH5Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
KCk7CiAKICAgICAvLyBXb3JrZXJDb250ZXh0OjpPYnNlcnZlciBtZXRob2QuCkBAIC04MiwyNiAr
NzgsNjEgQEAgcHVibGljOgogCiAgICAgdm9pZCBzdG9wKCk7CiAKLSAgICAvLyBQb3N0cyBhbiBp
bml0aWFsIHJlcXVlc3QgdGFzayB0byB0aGUgbWFpbiB0aHJlYWQuIEl0IGlzIHN1cHBvc2VkIHRv
IGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgYnJpZGdlIGlzIGNvbnN0cnVjdGVkLiAo
SXQgZG9lc24ndCBjaGVjayBpZiB0aGUgY29udGV4dCBoYXMgYmVlbiBzdG9wcGVkIG9yIG5vdC4p
Ci0gICAgdm9pZCBwb3N0T3BlbkZpbGVTeXN0ZW1Ub01haW5UaHJlYWQoV2ViQ29tbW9uV29ya2Vy
Q2xpZW50KiwgV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25nIHNpemUsIGNvbnN0IFN0cmlu
ZyYgbW9kZSk7CisgICAgLy8gQ3JlYXRlIG1ldGhvZHMgdGhhdCBjcmVhdGUgYW4gaW5zdGFuY2Ug
YW5kIHBvc3QgYW4gaW5pdGlhbCByZXF1ZXN0IHRhc2sgdG8gdGhlIG1haW4gdGhyZWFkLiBUaGV5
IG11c3QgYmUgY2FsbGVkIG9uIHRoZSB3b3JrZXIgdGhyZWFkLgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGNyZWF0ZUZvck9wZW5GaWxlU3lz
dGVtKFdlYldvcmtlckJhc2UqLCBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2Vi
RmlsZVN5c3RlbUNhbGxiYWNrcyosIFdlYkNvbW1vbldvcmtlckNsaWVudCosIFdlYkZpbGVTeXN0
ZW06OlR5cGUsIGxvbmcgbG9uZyBzaXplLCBjb25zdCBTdHJpbmcmIG1vZGUpOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGNyZWF0ZUZvck1v
dmUoV2ViV29ya2VyQmFzZSosIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJG
aWxlU3lzdGVtQ2FsbGJhY2tzKiwgV2ViRmlsZVN5c3RlbSosIGNvbnN0IFN0cmluZyYgc3JjUGF0
aCwgY29uc3QgU3RyaW5nJiBkZXN0UGF0aCwgY29uc3QgU3RyaW5nJiBtb2RlKTsKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBjcmVhdGVGb3JD
b3B5KFdlYldvcmtlckJhc2UqLCBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2Vi
RmlsZVN5c3RlbUNhbGxiYWNrcyosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBTdHJpbmcmIHNyY1Bh
dGgsIGNvbnN0IFN0cmluZyYgZGVzdFBhdGgsIGNvbnN0IFN0cmluZyYgbW9kZSk7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gY3JlYXRlRm9y
UmVtb3ZlKFdlYldvcmtlckJhc2UqLCBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
V2ViRmlsZVN5c3RlbUNhbGxiYWNrcyosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBTdHJpbmcmIHBh
dGgsIGNvbnN0IFN0cmluZyYgbW9kZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gY3JlYXRlRm9yUmVhZE1ldGFkYXRhKFdlYldvcmtlckJh
c2UqLCBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbUNhbGxi
YWNrcyosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYg
bW9kZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0Jy
aWRnZT4gY3JlYXRlRm9yQ3JlYXRlRmlsZShXZWJXb3JrZXJCYXNlKiwgV2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqLCBXZWJGaWxlU3lzdGVt
KiwgY29uc3QgU3RyaW5nJiBwYXRoLCBib29sIGV4Y2x1c2l2ZSwgY29uc3QgU3RyaW5nJiBtb2Rl
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
PiBjcmVhdGVGb3JDcmVhdGVEaXJlY3RvcnkoV2ViV29ya2VyQmFzZSosIFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiwgV2ViRmlsZVN5c3Rl
bSosIGNvbnN0IFN0cmluZyYgcGF0aCwgYm9vbCBleGNsdXNpdmUsIGNvbnN0IFN0cmluZyYgbW9k
ZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZT4gY3JlYXRlRm9yRmlsZUV4aXN0cyhXZWJXb3JrZXJCYXNlKiwgV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqLCBXZWJGaWxlU3lzdGVtKiwg
Y29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGNyZWF0ZUZvckRpcmVjdG9y
eUV4aXN0cyhXZWJXb3JrZXJCYXNlKiwgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqLCBXZWJGaWxlU3lzdGVtKiwgY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGNyZWF0ZUZvclJlYWREaXJlY3RvcnkoV2ViV29ya2Vy
QmFzZSosIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtQ2Fs
bGJhY2tzKiwgV2ViRmlsZVN5c3RlbSosIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5n
JiBtb2RlKTsKIAogICAgIC8vIENhbGxiYWNrIG1ldGhvZHMgdGhhdCBhcmUgY2FsbGVkIG9uIHRo
ZSBtYWluIHRocmVhZC4KICAgICB2b2lkIGRpZEZhaWxPbk1haW5UaHJlYWQoV2ViRmlsZUVycm9y
LCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHZvaWQgZGlkT3BlbkZpbGVTeXN0ZW1Pbk1haW5U
aHJlYWQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBjb25zdCBT
dHJpbmcmIG1vZGUpOworICAgIHZvaWQgZGlkU3VjY2VlZE9uTWFpblRocmVhZChjb25zdCBTdHJp
bmcmIG1vZGUpOworICAgIHZvaWQgZGlkUmVhZE1ldGFkYXRhT25NYWluVGhyZWFkKGNvbnN0IFdl
YkZpbGVJbmZvJiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKKyAgICB2b2lkIGRpZFJlYWREaXJlY3Rv
cnlPbk1haW5UaHJlYWQoY29uc3QgV2ViVmVjdG9yPFdlYkZpbGVTeXN0ZW1FbnRyeT4mLCBib29s
IGhhc01vcmUsIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAKIHByaXZhdGU6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gY3JlYXRlKFdlYldvcmtl
ckJhc2UqIHdvcmtlciwgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogd29ya2VyQ29u
dGV4dCwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKHdvcmtl
ciwgd29ya2VyQ29udGV4dCwgY2FsbGJhY2tzKSk7CisgICAgfQogICAgIFdvcmtlckZpbGVTeXN0
ZW1DYWxsYmFja3NCcmlkZ2UoV2ViV29ya2VyQmFzZSosIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKik7CiAKLSAgICAvLyBNZXRob2QgdGhh
dCBpcyB0byBiZSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLgorICAgIC8vIE1ldGhvZHMgdGhh
dCBhcmUgdG8gYmUgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICBzdGF0aWMgdm9pZCBv
cGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiwgV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25n
IHNpemUsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBjb25zdCBTdHJpbmcmIG1v
ZGUpOworICAgIHN0YXRpYyB2b2lkIG1vdmVPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBTdHJpbmcmIHNyY1BhdGgsIGNv
bnN0IFN0cmluZyYgZGVzdFBhdGgsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBj
b25zdCBTdHJpbmcmIG1vZGUpOworICAgIHN0YXRpYyB2b2lkIGNvcHlPbk1haW5UaHJlYWQoV2Vi
Q29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBTdHJp
bmcmIHNyY1BhdGgsIGNvbnN0IFN0cmluZyYgZGVzdFBhdGgsIFdvcmtlckZpbGVTeXN0ZW1DYWxs
YmFja3NCcmlkZ2UqLCBjb25zdCBTdHJpbmcmIG1vZGUpOworICAgIHN0YXRpYyB2b2lkIHJlbW92
ZU9uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5
c3RlbSosIGNvbnN0IFN0cmluZyYgcGF0aCwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZSosIGNvbnN0IFN0cmluZyYgbW9kZSk7CisgICAgc3RhdGljIHZvaWQgcmVhZE1ldGFkYXRhT25N
YWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVt
KiwgY29uc3QgU3RyaW5nJiBwYXRoLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwg
Y29uc3QgU3RyaW5nJiBtb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBjcmVhdGVGaWxlT25NYWluVGhy
ZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtKiwgY29u
c3QgU3RyaW5nJiBwYXRoLCBib29sIGV4Y2x1c2l2ZSwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZSosIGNvbnN0IFN0cmluZyYgbW9kZSk7CisgICAgc3RhdGljIHZvaWQgY3JlYXRlRGly
ZWN0b3J5T25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJG
aWxlU3lzdGVtKiwgY29uc3QgU3RyaW5nJiBwYXRoLCBib29sIGV4Y2x1c2l2ZSwgV29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSosIGNvbnN0IFN0cmluZyYgbW9kZSk7CisgICAgc3RhdGlj
IHZvaWQgZmlsZUV4aXN0c09uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgV2ViRmlsZVN5c3RlbSosIGNvbnN0IFN0cmluZyYgcGF0aCwgV29ya2VyRmlsZVN5c3Rl
bUNhbGxiYWNrc0JyaWRnZSosIGNvbnN0IFN0cmluZyYgbW9kZSk7CisgICAgc3RhdGljIHZvaWQg
ZGlyZWN0b3J5RXhpc3RzT25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBXZWJGaWxlU3lzdGVtKiwgY29uc3QgU3RyaW5nJiBwYXRoLCBXb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBy
ZWFkRGlyZWN0b3J5T25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBXZWJGaWxlU3lzdGVtKiwgY29uc3QgU3RyaW5nJiBwYXRoLCBXb3JrZXJGaWxlU3lzdGVtQ2Fs
bGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKIAogICAgIGZyaWVuZCBjbGFzcyBN
YWluVGhyZWFkRmlsZVN5c3RlbUNhbGxiYWNrczsKIAogICAgIC8vIE1ldGhvZHMgdGhhdCBkaXNw
YXRjaCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzIG9uIHRoZSB3b3JrZXIgdGhyZWFkcy4KICAgICAv
LyBUaGV5IHJlbGVhc2UgYSBzZWxmUmVmIG9mIHRoZSBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlLgotICAgIHN0YXRpYyB2b2lkIGRpZEZhaWxPbldvcmtlclRocmVhZChXZWJDb3JlOjpT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJh
Y2tzQnJpZGdlPiwgV2ViRmlsZUVycm9yKTsKLSAgICBzdGF0aWMgdm9pZCBkaWRPcGVuRmlsZVN5
c3RlbU9uV29ya2VyVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+LCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgcm9vdFBhdGgpOworICAgIHN0YXRpYyB2b2lkIGRpZEZhaWxPbldv
cmtlclRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV29ya2VyRmlsZVN5
c3RlbUNhbGxiYWNrc0JyaWRnZSosIFdlYkZpbGVFcnJvcik7CisgICAgc3RhdGljIHZvaWQgZGlk
T3BlbkZpbGVTeXN0ZW1PbldvcmtlclRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSosIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiByb290UGF0aCk7CisgICAgc3RhdGljIHZvaWQgZGlkU3VjY2VlZE9u
V29ya2VyVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXb3JrZXJGaWxl
U3lzdGVtQ2FsbGJhY2tzQnJpZGdlKik7CisgICAgc3RhdGljIHZvaWQgZGlkUmVhZE1ldGFkYXRh
T25Xb3JrZXJUaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBjb25zdCBXZWJGaWxlSW5mbyYpOworICAgIHN0YXRp
YyB2b2lkIGRpZFJlYWREaXJlY3RvcnlPbldvcmtlclRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSosIGNvbnN0IFdl
YlZlY3RvcjxXZWJGaWxlU3lzdGVtRW50cnk+JiwgYm9vbCBoYXNNb3JlKTsKKworICAgIC8vIEZv
ciBlYXJseS1leGlzdDsgdGhpcyBkZXJlZidzIHNlbGZSZWYgYW5kIHJldHVybnMgdHJ1ZSBpZiB0
aGUgd29ya2VyIGlzIGFscmVhZHkgbnVsbC4KKyAgICBib29sIGRlcmVmSWZXb3JrZXJJc1N0b3Bw
ZWQoKTsKKworICAgIHN0YXRpYyB2b2lkIHJ1blRhc2tPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBQ
YXNzT3duUHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KTsKKyAgICBz
dGF0aWMgdm9pZCBydW5UYXNrT25Xb3JrZXJUaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4sIFBh
c3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4pOwogCisgICAg
dm9pZCBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoUGFzc093blB0cjxXZWJDb3JlOjpTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrPik7CiAgICAgdm9pZCBtYXlQb3N0VGFza1RvV29ya2VyKFBh
c3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4sIGNvbnN0IFN0
cmluZyYgbW9kZSk7CiAKICAgICAvLyBtX3NlbGZSZWYga2VlcHMgYSByZWZlcmVuY2UgdG8gaXRz
ZWxmIHVudGlsIGEgdGFzayBpcyBjcmVhdGVkIGZvciB0aGUgd29ya2VyIHRocmVhZCAoYXQgd2hp
Y2ggcG9pbnQgdGhlIHRhc2sgaG9sZHMgdGhlIHJlZmVyZW5jZSkuCg==
</data>
<flag name="review"
          id="58387"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>