<?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>62669</bug_id>
          
          <creation_ts>2011-06-14 15:39:30 -0700</creation_ts>
          <short_desc>[Qt] Add storage tracker WK1 API for QtWebKit port</short_desc>
          <delta_ts>2014-01-29 09:09:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="kasthuri">kasthuri.n-s</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>kamaji</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>qi.2.zhang</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>420782</commentid>
    <comment_count>0</comment_count>
    <who name="kasthuri">kasthuri.n-s</who>
    <bug_when>2011-06-14 15:39:30 -0700</bug_when>
    <thetext>Add storage tracker WK1 API&apos;s for tracking local storage.  As of now looks like its implemented only in MAC and planning to add these local storage tracker API&apos;s to QtWebKit port as well.
The QWebSecurityOrigin class already has some methods for tracking database storage.  So planning to add the new local storage tracker API&apos;s to QWebSecurityOrigin class.

Also the layouttests for the storage tracker uses the storage tracker client which is used for signaling the updates to storage tracker database.  This tracker client can be added as a new class to webkit API layer or can be just added to make the layout tests pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420796</commentid>
    <comment_count>1</comment_count>
    <who name="kasthuri">kasthuri.n-s</who>
    <bug_when>2011-06-14 16:00:16 -0700</bug_when>
    <thetext>Orignial bug is here https://bugs.webkit.org/show_bug.cgi?id=51878</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422828</commentid>
    <comment_count>2</comment_count>
      <attachid>97637</attachid>
    <who name="kasthuri">kasthuri.n-s</who>
    <bug_when>2011-06-17 12:32:54 -0700</bug_when>
    <thetext>Created attachment 97637
Initial patch

Initial version of the patch with new storage tracker api&apos;s added to QtWebKit API layer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423401</commentid>
    <comment_count>3</comment_count>
      <attachid>97637</attachid>
    <who name="Yael">yael</who>
    <bug_when>2011-06-19 15:16:24 -0700</bug_when>
    <thetext>Comment on attachment 97637
Initial patch

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

I am not a reviewer, but have a few comments.

&gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:275
&gt; +    Returns a list of all security origins with local storage defined.

I would omit the word &quot;defined&quot; here.

&gt; Source/WebKit/qt/QtWebKit.pro:211
&gt; +        $$PWD/WebCoreSupport/StorageTrackerClientQt.h

This file is missing.

&gt; Source/WebKit/qt/QtWebKit.pro:214
&gt; +        $$PWD/WebCoreSupport/StorageTrackerClientQt.cpp

This file is missing.

&gt; Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp:1178
&gt; +       res.append(((((ret[i].scheme()).append(originDelimeter)).append(ret[i].host())).append(originDelimeter)).append(QVariant(ret[i].port()).toString()));

That hurts my eyes :)
I would use operator + since QStringBuilder is public only from Qt 4.8.

&gt; Tools/DumpRenderTree/qt/DumpRenderTree.pro:10
&gt; +INCLUDEPATH += ../../../Source/WebCore/storage

Don&apos;t include WebCore files outside of QtWebKit library.

&gt; Tools/DumpRenderTree/qt/LayoutTestControllerQt.cpp:52
&gt; +    if (m_localStorageTracker)

This check is not needed.

&gt; Tools/DumpRenderTree/qt/LayoutTestControllerQt.cpp:81
&gt; +    m_localStorageTracker = 0;

This should also delete storage that might have been created by the test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423403</commentid>
    <comment_count>4</comment_count>
    <who name="kasthuri">kasthuri.n-s</who>
    <bug_when>2011-06-19 15:45:12 -0700</bug_when>
    <thetext>I think I have few style issues as well which I didn&apos;t see with the style checker script with my patch.  Patch v2 with updates coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424000</commentid>
    <comment_count>5</comment_count>
    <who name="kasthuri">kasthuri.n-s</who>
    <bug_when>2011-06-20 15:38:24 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 97637 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=97637&amp;action=review
&gt; 
&gt; I am not a reviewer, but have a few comments.
&gt; 
&gt; &gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:275
&gt; &gt; +    Returns a list of all security origins with local storage defined.
&gt; 
&gt; I would omit the word &quot;defined&quot; here.
&gt; 
Changed.
&gt; &gt; Source/WebKit/qt/QtWebKit.pro:211
&gt; &gt; +        $$PWD/WebCoreSupport/StorageTrackerClientQt.h
&gt; 
&gt; This file is missing.
&gt; 
Added the file in the new patch that I&apos;m working on.
&gt; &gt; Source/WebKit/qt/QtWebKit.pro:214
&gt; &gt; +        $$PWD/WebCoreSupport/StorageTrackerClientQt.cpp
&gt; 
&gt; This file is missing.
&gt; 
Added the file in the new patch that I&apos;m working on.
&gt; &gt; Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp:1178
&gt; &gt; +       res.append(((((ret[i].scheme()).append(originDelimeter)).append(ret[i].host())).append(originDelimeter)).append(QVariant(ret[i].port()).toString()));
&gt; 
&gt; That hurts my eyes :)
&gt; I would use operator + since QStringBuilder is public only from Qt 4.8.
I tried operator + initially, but then it gave compilation error saying its being deprecated.  So I had to use append(), probably I can split this into multiple lines for better readability.
&gt; 
&gt; &gt; Tools/DumpRenderTree/qt/DumpRenderTree.pro:10
&gt; &gt; +INCLUDEPATH += ../../../Source/WebCore/storage
&gt; 
&gt; Don&apos;t include WebCore files outside of QtWebKit library.
&gt; 
I&apos;m not including any WebCore files directly.  However since the stroage tracker client header that I&apos;m using here depends on a webcore interface I had to use this.  To get away from this I need to introduce a new layer which talks to the storage tracker client maybe as new Qt API.  Please let me know what you think about this.
&gt; &gt; Tools/DumpRenderTree/qt/LayoutTestControllerQt.cpp:52
&gt; &gt; +    if (m_localStorageTracker)
&gt; 
&gt; This check is not needed.
&gt; 
This check is done in destructor to avoid deleting m_localStorageTracker if its not initialized.  Since this is created only if the obserStorageTrackerNotifications() method is called, I did this check.
&gt; &gt; Tools/DumpRenderTree/qt/LayoutTestControllerQt.cpp:81
&gt; &gt; +    m_localStorageTracker = 0;
&gt; 
&gt; This should also delete storage that might have been created by the test.
I just initialized it here in reset() method since its only called from LayoutTestController constructor and deleted it in the destructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424006</commentid>
    <comment_count>6</comment_count>
      <attachid>97874</attachid>
    <who name="kasthuri">kasthuri.n-s</who>
    <bug_when>2011-06-20 15:42:00 -0700</bug_when>
    <thetext>Created attachment 97874
Changes version 2

Patch with few review comments incorporated.  Just uploading to see whether the style bots are accepting the patch.  Working on patch which satisfies all review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426588</commentid>
    <comment_count>7</comment_count>
      <attachid>98428</attachid>
    <who name="kasthuri">kasthuri.n-s</who>
    <bug_when>2011-06-23 16:13:35 -0700</bug_when>
    <thetext>Created attachment 98428
patch v3

Patch with review comments incorporated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426592</commentid>
    <comment_count>8</comment_count>
    <who name="kasthuri">kasthuri.n-s</who>
    <bug_when>2011-06-23 16:16:06 -0700</bug_when>
    <thetext>Attaching patch with review comments incorporated.  The storageTrackerClient is now called through a public method from QWebPage and the corresponding notification is raised through signal in QWebPage.  The access level can be changed from public to private if we don&apos;t want to expose this to clients.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428245</commentid>
    <comment_count>9</comment_count>
      <attachid>98428</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2011-06-27 13:49:11 -0700</bug_when>
    <thetext>Comment on attachment 98428
patch v3

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

&gt; Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp:1169
&gt; +        res.append(ret[i].scheme() + originDelimeter + ret[i].host() + originDelimeter + QString(ret[i].port()));

Maybe use a formating QString and the QString::arg() method can help the construction of this string.

Somethin like: res.append(QString::fromLatin1(&quot;%1_%2_%3&quot;).arg(ret[i].scheme(), ret[i].host(), ret[i].port())); // untested

I think you could even create one QString with the format and reuse it inside the loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428439</commentid>
    <comment_count>10</comment_count>
    <who name="Keith Kyzivat">kamaji</who>
    <bug_when>2011-06-27 16:37:01 -0700</bug_when>
    <thetext>NOTE: I am not a reviewer, but had some comments.

&gt; Source/WebKit/qt/Api/qwebpage.cpp:402
&gt; +    delete m_localStorageTracker;

Wrap in #if ENABLE(DOM_STORAGE) or make sure that m_localStorageTracker is NULL if !DOM_STORAGE.

&gt; Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp:1163
&gt; +    QVariantList res;

This needs a more descriptive name than &apos;res&apos;.

&gt; Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp:1164
&gt; +    QString originDelimeter = QString(QLatin1Char(&apos;_&apos;));

Does this really need to be in a var?

&gt; Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp:1165
&gt; +    QList&lt;QWebSecurityOrigin&gt; ret;

Needs a more descriptive name - you used webOrigins in an above function - I&apos;d use that.

&gt; Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp:1167
&gt; +    ret = QWebSecurityOrigin::allLocalStorageOrigins();

As Caio mentioned - you could define format here something like this:
    QString localStorageOriginFormat(&quot;%1_%2_%3&quot;);

&gt;&gt; Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp:1169
&gt;&gt; +        res.append(ret[i].scheme() + originDelimeter + ret[i].host() + originDelimeter + QString(ret[i].port()));
&gt; 
&gt; Maybe use a formating QString and the QString::arg() method can help the construction of this string.
&gt; 
&gt; Somethin like: res.append(QString::fromLatin1(&quot;%1_%2_%3&quot;).arg(ret[i].scheme(), ret[i].host(), ret[i].port())); // untested
&gt; 
&gt; I think you could even create one QString with the format and reuse it inside the loop.

I would agree.  Formatting string as shown above would be a more clean way to do this, and would be more efficient.

&gt; LayoutTests/platform/qt/Skipped:147
&gt;  # StorageTracker is not enabled.

Update comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428794</commentid>
    <comment_count>11</comment_count>
      <attachid>98428</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-06-28 04:18:20 -0700</bug_when>
    <thetext>Comment on attachment 98428
patch v3

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

&gt; Source/WebKit/qt/Api/qwebpage.cpp:402
&gt; +    delete m_localStorageTracker;

Like previous comment make sure it is 0 or wrap the definition variable in #if ENABLE(DOM_STORAGE) because in the case !ENABLE(DOM_STORAGE) the pointer is not initialized.

&gt; Source/WebKit/qt/Api/qwebpage.cpp:3955
&gt;  

Where is doc?

&gt; Source/WebKit/qt/Api/qwebpage.cpp:3956
&gt; +void QWebPage::observeStorageTrackerNotifications()

And if I don&apos;t want to observe the notification anymore? Isn&apos;t it better to have an API with a bool on/off?

&gt; Source/WebKit/qt/Api/qwebpage.cpp:3959
&gt; +    QObject::connect(d-&gt;m_localStorageTracker, SIGNAL(originModified(const QString&amp;)), this, SIGNAL(localStorageModified(const QString&amp;)), Qt::UniqueConnection);

Perhaps it is justified but could you explain me why UniqueConnection?

&gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:304
&gt; +    Removes a particular security origin which has local storage.

Per doc policy you need to make a comment on the parameter.

&gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:315
&gt; +    Returns the disk usage for a particular security origin.

Ditto.

&gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:327
&gt; +    Syncs local storage dbs.

You have to use full english words in the public documentation.

&gt; Source/WebKit/qt/WebCoreSupport/StorageTrackerClientQt.h:32
&gt; +#include &lt;QtCore/qstring.h&gt;

Why QObject and the next line qstring.h. Make it consistent.

&gt; LayoutTests/platform/qt/Skipped:148
&gt; +storage/domstorage/localstorage/storagetracker/storage-tracker-7-usage.html

it doesn&apos;t pass? Perhaps you should open a bug report about that one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429587</commentid>
    <comment_count>12</comment_count>
      <attachid>99087</attachid>
    <who name="kasthuri">kasthuri.n-s</who>
    <bug_when>2011-06-29 07:17:30 -0700</bug_when>
    <thetext>Created attachment 99087
patch v4

Patch with review comments incorporated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429593</commentid>
    <comment_count>13</comment_count>
    <who name="kasthuri">kasthuri.n-s</who>
    <bug_when>2011-06-29 07:25:48 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 98428 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98428&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/qt/Api/qwebpage.cpp:402
&gt; &gt; +    delete m_localStorageTracker;
&gt; 
&gt; Like previous comment make sure it is 0 or wrap the definition variable in #if ENABLE(DOM_STORAGE) because in the case !ENABLE(DOM_STORAGE) the pointer is not initialized.

Changed.
&gt; 
&gt; &gt; Source/WebKit/qt/Api/qwebpage.cpp:3955
&gt; &gt;  
&gt; 
&gt; Where is doc?
Added the doc.  Didn&apos;t add doc previously as I was not sure whether to expose this as a public API or do it internally in qwebpage and let the use just look for signal if interested. 
&gt; 
&gt; &gt; Source/WebKit/qt/Api/qwebpage.cpp:3956
&gt; &gt; +void QWebPage::observeStorageTrackerNotifications()
&gt; 
&gt; And if I don&apos;t want to observe the notification anymore? Isn&apos;t it better to have an API with a bool on/off?

My thinking is if the user no longer is interested, then he can disconnect from the signal.  Again as quoted above, if the observeStorageTrackerNotifications() call is handled internally and not exposed as a API, then all the user has to do is just connect to localStorageModified() signal.
&gt; 
&gt; &gt; Source/WebKit/qt/Api/qwebpage.cpp:3959
&gt; &gt; +    QObject::connect(d-&gt;m_localStorageTracker, SIGNAL(originModified(const QString&amp;)), this, SIGNAL(localStorageModified(const QString&amp;)), Qt::UniqueConnection);
&gt; 
&gt; Perhaps it is justified but could you explain me why UniqueConnection?
I used this to prevent duplicate connections from happening, if in case the user calls the api twice.
&gt; 
&gt; &gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:304
&gt; &gt; +    Removes a particular security origin which has local storage.
&gt; 
&gt; Per doc policy you need to make a comment on the parameter.
&gt; 
Done.
&gt; &gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:315
&gt; &gt; +    Returns the disk usage for a particular security origin.
&gt; 
&gt; Ditto.
&gt;
Changed. 
&gt; &gt; Source/WebKit/qt/Api/qwebsecurityorigin.cpp:327
&gt; &gt; +    Syncs local storage dbs.
&gt; 
&gt; You have to use full english words in the public documentation.
&gt; 
Changed.
&gt; &gt; Source/WebKit/qt/WebCoreSupport/StorageTrackerClientQt.h:32
&gt; &gt; +#include &lt;QtCore/qstring.h&gt;
&gt; 
&gt; Why QObject and the next line qstring.h. Make it consistent.
&gt; 
Changed.
&gt; &gt; LayoutTests/platform/qt/Skipped:148
&gt; &gt; +storage/domstorage/localstorage/storagetracker/storage-tracker-7-usage.html
&gt; 
&gt; it doesn&apos;t pass? Perhaps you should open a bug report about that one.
There is a hardcoded size in the testcase which I&apos;m checking further.  Will update the skipped list or create a new bug accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429629</commentid>
    <comment_count>14</comment_count>
    <who name="kasthuri">kasthuri.n-s</who>
    <bug_when>2011-06-29 08:36:23 -0700</bug_when>
    <thetext>sorry..forgot to update that the patch takes care of Cmarcelo and Keith&apos;s comments as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430379</commentid>
    <comment_count>15</comment_count>
      <attachid>99087</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-06-30 07:00:03 -0700</bug_when>
    <thetext>Comment on attachment 99087
patch v4

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

Quick review

r- Because
-I don&apos;t see a strong use case for the new APIs of QWebPage.
-There is no API tests
-The API of QWebSecurityOrigin is not future proof at all.

New APIs is always a dangerous/difficult problem, you should make sure it is done right because there is no coming back once an API is public. Because of that, you must:
-have valid use cases for every new public function
-have test cases (API tests) for those uses cases
-add as few functions as possible, and ensure you have enough flexibility for the places where you think the needs will evolve.
-ensure the API is consistent with existing patterns and APIs (in this case, QWebDatabase).

I think you should remove the APIs for QWebPage unless you have a strong use case. And you should have a better API for QWebSecurityOrigin, closer to what exists for QWebDatabase.

&gt; Source/WebKit/qt/Api/qwebpage.cpp:3960
&gt; +    This function is called when a user agent wants to listen for local storage change notificatins.

&quot;notificatins&quot;

By using passive form, you are implying this function is called for you by the framework (in which case it would typically be virtual.)

&gt; Source/WebKit/qt/Api/qwebpage.h:410
&gt; +    void localStorageModified(const QString&amp; originIdentifier);
&gt; +

This signal does not have any documentation.

&gt; Source/WebKit/qt/Api/qwebpage_p.h:217
&gt; +    WebCore::StorageTrackerClientQt* m_localStorageTracker;

You should use a smart pointer instead of handling memory manually.

This should also probably be allocated lazily.

&gt; Source/WebKit/qt/Api/qwebsecurityorigin.h:46
&gt; +    static long long localStorageDiskUsageForOrigin(const QString&amp; originIdentifier);

Using long long is a really bad idea since its definition depends on the compile, and it is signed here.
You should use quint64.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97637</attachid>
            <date>2011-06-17 12:32:54 -0700</date>
            <delta_ts>2011-06-28 03:58:21 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>changes.patch</filename>
            <type>text/plain</type>
            <size>17115</size>
            <attacher name="kasthuri">kasthuri.n-s</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCmluZGV4IGZlMDM2ZjAuLmM2ZDA0MmQgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vcXQvU2tpcHBlZApAQCAtNzgsNyArNzgsNyBAQCBwbHVnaW5zL2NsaWNraW5nLW1pc3Npbmct
cGx1Z2luLWZpcmVzLWRlbGVnYXRlLmh0bWwKIHN0b3JhZ2UvaW5kZXhlZGRiCiAKICMgU3RvcmFn
ZVRyYWNrZXIgaXMgbm90IGVuYWJsZWQuCi1zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdl
L3N0b3JhZ2V0cmFja2VyCitzdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0
cmFja2VyL3N0b3JhZ2UtdHJhY2tlci03LXVzYWdlLmh0bWwKIAogIyAtLS0tLSBObyBVc2VyIFNj
cmlwdHMKIHVzZXJzY3JpcHRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vi
c2VjdXJpdHlvcmlnaW4uY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNlY3VyaXR5b3Jp
Z2luLmNwcAppbmRleCA5N2Y4ODdhLi42MDUwMDY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2Vic2VjdXJpdHlvcmlnaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJzZWN1cml0eW9yaWdpbi5jcHAKQEAgLTIyLDYgKzIyLDkgQEAKIAogI2luY2x1ZGUgIkFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCisj
aWYgRU5BQkxFKERPTV9TVE9SQUdFKQorI2luY2x1ZGUgIlN0b3JhZ2VUcmFja2VyLmgiCisjZW5k
aWYKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKICNpbmNs
dWRlICJTZWN1cml0eU9yaWdpbi5oIgpAQCAtMTgzLDggKzE4Niw4IEBAIFFMaXN0PFFXZWJTZWN1
cml0eU9yaWdpbj4gUVdlYlNlY3VyaXR5T3JpZ2luOjphbGxPcmlnaW5zKCkKIAogI2lmIEVOQUJM
RShEQVRBQkFTRSkKICAgICBWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+IGNvcmVPcmln
aW5zOwotICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLm9yaWdpbnMoY29yZU9yaWdpbnMp
OwogCisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkub3JpZ2lucyhjb3JlT3JpZ2lucyk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvcmVPcmlnaW5zLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIFFXZWJTZWN1cml0eU9yaWdpblByaXZhdGUqIHByaXYgPSBuZXcgUVdlYlNlY3Vy
aXR5T3JpZ2luUHJpdmF0ZShjb3JlT3JpZ2luc1tpXS5nZXQoKSk7CiAgICAgICAgIHdlYk9yaWdp
bnMuYXBwZW5kKHByaXYpOwpAQCAtMjY3LDMgKzI3MCw2NiBAQCBRU3RyaW5nTGlzdCBRV2ViU2Vj
dXJpdHlPcmlnaW46OmxvY2FsU2NoZW1lcygpCiAgICAgfQogICAgIHJldHVybiBsaXN0OwogfQor
CisvKiEKKyAgICBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgc2VjdXJpdHkgb3JpZ2lucyB3aXRoIGxv
Y2FsIHN0b3JhZ2UgZGVmaW5lZC4KKyovCitRTGlzdDxRV2ViU2VjdXJpdHlPcmlnaW4+IFFXZWJT
ZWN1cml0eU9yaWdpbjo6YWxsTG9jYWxTdG9yYWdlT3JpZ2lucygpCit7CisgICAgUUxpc3Q8UVdl
YlNlY3VyaXR5T3JpZ2luPiB3ZWJPcmlnaW5zOworCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQor
ICAgIFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4gY29yZU9yaWdpbnM7CisgICAgU3Rv
cmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5vcmlnaW5zKGNvcmVPcmlnaW5zKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgY29yZU9yaWdpbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUVdl
YlNlY3VyaXR5T3JpZ2luUHJpdmF0ZSogcHJpdiA9IG5ldyBRV2ViU2VjdXJpdHlPcmlnaW5Qcml2
YXRlKGNvcmVPcmlnaW5zW2ldLmdldCgpKTsKKyAgICAgICAgd2ViT3JpZ2lucy5hcHBlbmQocHJp
dik7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gd2ViT3JpZ2luczsKK30KKworLyohCisg
ICAgUmVtb3ZlcyBhbGwgbG9jYWwgc3RvcmFnZSBzZWN1cml0eSBvcmlnaW5zLgorKi8KK3ZvaWQg
UVdlYlNlY3VyaXR5T3JpZ2luOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2VPcmlnaW5zKCkKK3sKKyNp
ZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5kZWxl
dGVBbGxPcmlnaW5zKCk7CisjZW5kaWYKK30KKworLyohCisgICAgUmVtb3ZlcyBhIHBhcnRpY3Vs
YXIgc2VjdXJpdHkgb3JpZ2luIHdoaWNoIGhhcyBsb2NhbCBzdG9yYWdlLgorKi8KK3ZvaWQgUVdl
YlNlY3VyaXR5T3JpZ2luOjpkZWxldGVMb2NhbFN0b3JhZ2VPcmlnaW4oY29uc3QgUVN0cmluZyYg
b3JpZ2luSWRlbnRpZmllcikKK3sKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgIFJlZlB0
cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShLVVJMKG9y
aWdpbklkZW50aWZpZXIpKTsKKyAgICAgU3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5kZWxldGVP
cmlnaW4ob3JpZ2luLmdldCgpKTsKKyNlbmRpZgorfQorCisvKiEKKyAgICBSZXR1cm5zIHRoZSBk
aXNrIHVzYWdlIGZvciBhIHBhcnRpY3VsYXIgc2VjdXJpdHkgb3JpZ2luLgorKi8KK2xvbmcgbG9u
ZyBRV2ViU2VjdXJpdHlPcmlnaW46OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihjb25z
dCBRU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQoreworI2lmIEVOQUJMRShET01fU1RPUkFHRSkK
KyAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3Jl
YXRlKEtVUkwob3JpZ2luSWRlbnRpZmllcikpOworICAgICByZXR1cm4oU3RvcmFnZVRyYWNrZXI6
OnRyYWNrZXIoKS5kaXNrVXNhZ2VGb3JPcmlnaW4ob3JpZ2luLmdldCgpKSk7CisjZW5kaWYKK30K
KworCisvKiEKKyAgICBTeW5jcyBsb2NhbCBzdG9yYWdlIGRicy4KKyovCit2b2lkIFFXZWJTZWN1
cml0eU9yaWdpbjo6c3luY0xvY2FsU3RvcmFnZSgpCit7CisjaWYgRU5BQkxFKERPTV9TVE9SQUdF
KQorICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuc3luY0xvY2FsU3RvcmFnZSgpOworI2Vu
ZGlmCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZWN1cml0eW9y
aWdpbi5oIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNlY3VyaXR5b3JpZ2luLmgKaW5kZXgg
NzMyODY4MC4uNWNlNzU2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNl
Y3VyaXR5b3JpZ2luLmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNlY3VyaXR5b3Jp
Z2luLmgKQEAgLTQwLDcgKzQwLDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhZGRMb2Nh
bFNjaGVtZShjb25zdCBRU3RyaW5nJiBzY2hlbWUpOwogICAgIHN0YXRpYyB2b2lkIHJlbW92ZUxv
Y2FsU2NoZW1lKGNvbnN0IFFTdHJpbmcmIHNjaGVtZSk7CiAgICAgc3RhdGljIFFTdHJpbmdMaXN0
IGxvY2FsU2NoZW1lcygpOwotCisgICAgc3RhdGljIFFMaXN0PFFXZWJTZWN1cml0eU9yaWdpbj4g
YWxsTG9jYWxTdG9yYWdlT3JpZ2lucygpOworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUFsbExvY2Fs
U3RvcmFnZU9yaWdpbnMoKTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVMb2NhbFN0b3JhZ2VPcmln
aW4oY29uc3QgUVN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7CisgICAgc3RhdGljIGxvbmcgbG9u
ZyBsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luSWRl
bnRpZmllcik7CisgICAgc3RhdGljIHZvaWQgc3luY0xvY2FsU3RvcmFnZSgpOworICAKICAgICB+
UVdlYlNlY3VyaXR5T3JpZ2luKCk7CiAKICAgICBRU3RyaW5nIHNjaGVtZSgpIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKaW5kZXggODgwZWY0OS4uYmU4MDkyMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwCkBAIC00Miw2ICs0Miw5IEBACiAjaW5j
bHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgiCiAj
aW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorI2lu
Y2x1ZGUgIlN0b3JhZ2VUcmFja2VyLmgiCisjZW5kaWYKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgi
CiAKICNpbmNsdWRlIDxRQXBwbGljYXRpb24+CkBAIC0xMDY0LDYgKzEwNjcsOSBAQCB2b2lkIFFX
ZWJTZXR0aW5nczo6c2V0TG9jYWxTdG9yYWdlUGF0aChjb25zdCBRU3RyaW5nJiBwYXRoKQogewog
ICAgIGQtPmxvY2FsU3RvcmFnZVBhdGggPSBwYXRoOwogICAgIGQtPmFwcGx5KCk7CisjaWYgRU5B
QkxFKERPTV9TVE9SQUdFKQorICAgIFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjppbml0aWFsaXpl
VHJhY2tlcihwYXRoKTsKKyNlbmRpZgogfQogCiAvKiEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggODM3MGQ5
OS4uMGViNjJkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAorMjAxMS0wNi0xNyAg
S2FzdGh1cmkgUmVuZ2FuICA8a2FzdGh1cmkubi1zQG5va2lhLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIEFkZCBzdG9yYWdlIHRyYWNr
ZXIgV0sxIEFQSSBmb3IgUXRXZWJLaXQgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI2NjkKKworICAgICAgICBBZGQgc3RvcmFnZSB0cmFja2Vy
IFdLMSBBUEkncyBmb3IgdHJhY2tpbmcgbG9jYWwgc3RvcmFnZS4gIAorICAgICAgCisgICAgICAg
IFRoZSBRV2ViU2VjdXJpdHlPcmlnaW4gY2xhc3MgYWxyZWFkeSBoYXMgc29tZSBtZXRob2RzIGZv
ciB0cmFja2luZyBkYXRhYmFzZSBzdG9yYWdlLiAgCisgICAgICAgIEFkZGVkIG5ldyBBUEkncyBm
b3IgdHJhY2tpbmcgbG9jYWwgc3RvcmFnZSB0byBRV2ViU2VjdXJpdHlPcmlnaW4gY2xhc3MuCisK
KyAgICAgICAgQWxzbyB0aGUgbGF5b3V0dGVzdHMgZm9yIHRoZSBzdG9yYWdlIHRyYWNrZXIgdXNl
cyB0aGUgc3RvcmFnZSB0cmFja2VyIGNsaWVudCB3aGljaCBpcyB1c2VkIGZvciAKKyAgICAgICAg
c2lnbmFsaW5nIHRoZSB1cGRhdGVzIHRvIHN0b3JhZ2UgdHJhY2tlciBkYXRhYmFzZS4gIFNvIGFk
ZGVkIHRoZSBzdG9yYWdlIHRyYWNrZXIgY2xpZW50IHRvCisgICAgICAgIHdlYmNvcmVzdXBwb3J0
LgorCisgICAgICAgICogQXBpL2hlYWRlcnMucHJpOgorICAgICAgICAqIEFwaS9xd2Vic2VjdXJp
dHlvcmlnaW4uY3BwOgorICAgICAgICAoUVdlYlNlY3VyaXR5T3JpZ2luOjphbGxPcmlnaW5zKToK
KyAgICAgICAgKFFXZWJTZWN1cml0eU9yaWdpbjo6YWxsTG9jYWxTdG9yYWdlT3JpZ2lucyk6Cisg
ICAgICAgIChRV2ViU2VjdXJpdHlPcmlnaW46OmRlbGV0ZUFsbExvY2FsU3RvcmFnZU9yaWdpbnMp
OgorICAgICAgICAoUVdlYlNlY3VyaXR5T3JpZ2luOjpkZWxldGVMb2NhbFN0b3JhZ2VPcmlnaW4p
OgorICAgICAgICAoUVdlYlNlY3VyaXR5T3JpZ2luOjpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JP
cmlnaW4pOgorICAgICAgICAoUVdlYlNlY3VyaXR5T3JpZ2luOjpzeW5jTG9jYWxTdG9yYWdlKToK
KyAgICAgICAgKiBBcGkvcXdlYnNlY3VyaXR5b3JpZ2luLmg6CisgICAgICAgICogQXBpL3F3ZWJz
ZXR0aW5ncy5jcHA6CisgICAgICAgIChRV2ViU2V0dGluZ3M6OnNldExvY2FsU3RvcmFnZVBhdGgp
OgorICAgICAgICAqIFF0V2ViS2l0LnBybzoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdC5jcHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0Ojpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4pOgorICAgICAg
ICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Lmg6CisgICAgICAgCisKIDIw
MTEtMDUtMjUgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFA
b3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9RdFdlYktpdC5wcm8gYi9Tb3VyY2UvV2ViS2l0L3F0
L1F0V2ViS2l0LnBybwppbmRleCAxZjI5N2YzLi42ZjQ3MDI2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3F0L1F0V2ViS2l0LnBybworKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1F0V2ViS2l0LnBy
bwpAQCAtMTgyLDcgKzE4Miw4IEBAIFNPVVJDRVMgKz0gXAogICAgICQkUFdEL1dlYkNvcmVTdXBw
b3J0L1BvcHVwTWVudVF0LmNwcCBcCiAgICAgJCRQV0QvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9y
bVBsdWdpbi5jcHAgXAogICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1NlYXJjaFBvcHVwTWVudVF0
LmNwcCBcCi0gICAgJCRQV0QvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNw
cAorICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAgCisK
IAogSEVBREVSUyArPSBcCiAgICAgJCRXRUJLSVRfQVBJX0hFQURFUlMgXApAQCAtMTk4LDEzICsx
OTksMjEgQEAgSEVBREVSUyArPSBcCiAgICAgJCRQV0QvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9y
bVBsdWdpbi5oIFwKICAgICAkJFBXRC9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVRdC5oIFwKICAg
ICAkJFBXRC9XZWJDb3JlU3VwcG9ydC9TZWFyY2hQb3B1cE1lbnVRdC5oIFwKLSAgICAkJFBXRC9X
ZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAorICAgICQkUFdEL1dlYkNvcmVT
dXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oICAgICAKIAogd2Via2l0MiB7CiAgICAgSEVB
REVSUyArPSAkJFdFQktJVDJfQVBJX0hFQURFUlMKICAgICBTT1VSQ0VTICs9ICQkV0VCS0lUMl9B
UElfU09VUkNFUwogfQogCitjb250YWlucyhERUZJTkVTLCBFTkFCTEVfRE9NX1NUT1JBR0U9MSkg
eworICAgIEhFQURFUlMgKz0gXAorICAgICAgICAkJFBXRC9XZWJDb3JlU3VwcG9ydC9TdG9yYWdl
VHJhY2tlckNsaWVudFF0LmgKKworICAgIFNPVVJDRVMgKz0gXAorICAgICAgICAkJFBXRC9XZWJD
b3JlU3VwcG9ydC9TdG9yYWdlVHJhY2tlckNsaWVudFF0LmNwcAorfQorCiBjb250YWlucyhERUZJ
TkVTLCBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQST0xKSB7CiAgICAgdW5peDohc3ltYmlhbiB7
CiAgICAgICAgIG1hZW1vNSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCmluZGV4IDQzZDMzOGMuLjVm
NTM4ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCkBAIC04NSw2ICs4NSw3IEBACiAjaW5jbHVk
ZSAicXdlYnBhZ2UuaCIKICNpbmNsdWRlICJxd2VicGFnZV9wLmgiCiAjaW5jbHVkZSAicXdlYnNj
cmlwdHdvcmxkLmgiCisjaW5jbHVkZSAicXdlYnNlY3VyaXR5b3JpZ2luLmgiCiAKICNpZiBFTkFC
TEUoVklERU8pICYmIFVTRShRVF9NVUxUSU1FRElBKQogI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1l
bnQuaCIKQEAgLTExNjYsNiArMTE2Nyw0NyBAQCBRU3RyaW5nIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpsYXllclRyZWVBc1RleHQoUVdlYkZyYW1lKiBmcmFtZSkKICAgICByZXR1cm4gY29yZUZy
YW1lLT5sYXllclRyZWVBc1RleHQoKTsKIH0KIAorUVZhcmlhbnRMaXN0IER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZSgpCit7CisgICAgUVZhcmlhbnRMaXN0
IHJlczsKKyAgICBRU3RyaW5nIG9yaWdpbkRlbGltZXRlciA9IFFTdHJpbmcoUUxhdGluMUNoYXIo
J18nKSk7CisgICAgUUxpc3Q8UVdlYlNlY3VyaXR5T3JpZ2luPiByZXQ7CisjaWYgRU5BQkxFKERP
TV9TVE9SQUdFKQorICAgIHJldCA9IFFXZWJTZWN1cml0eU9yaWdpbjo6YWxsTG9jYWxTdG9yYWdl
T3JpZ2lucygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXQuc2l6ZSgpOyArK2kp
IAorICAgICAgIHJlcy5hcHBlbmQoKCgoKHJldFtpXS5zY2hlbWUoKSkuYXBwZW5kKG9yaWdpbkRl
bGltZXRlcikpLmFwcGVuZChyZXRbaV0uaG9zdCgpKSkuYXBwZW5kKG9yaWdpbkRlbGltZXRlcikp
LmFwcGVuZChRVmFyaWFudChyZXRbaV0ucG9ydCgpKS50b1N0cmluZygpKSk7CisjZW5kaWYKKyAg
ICByZXR1cm4gcmVzOworfQorCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkZWxldGVB
bGxMb2NhbFN0b3JhZ2UoKQoreworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICBRV2ViU2Vj
dXJpdHlPcmlnaW46OmRlbGV0ZUFsbExvY2FsU3RvcmFnZU9yaWdpbnMoKTsKKyNlbmRpZgorfQor
Cit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmln
aW4oY29uc3QgUVN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyNpZiBFTkFCTEUoRE9NX1NU
T1JBR0UpCisgICAgUVdlYlNlY3VyaXR5T3JpZ2luOjpkZWxldGVMb2NhbFN0b3JhZ2VPcmlnaW4o
b3JpZ2luSWRlbnRpZmllcik7CisjZW5kaWYKK30KKworbG9uZyBsb25nIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0Ojpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4oY29uc3QgUVN0cmluZyYg
b3JpZ2luSWRlbnRpZmllcikKK3sKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgcmV0dXJu
KFFXZWJTZWN1cml0eU9yaWdpbjo6bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKG9yaWdp
bklkZW50aWZpZXIpKTsKKyNlbmRpZgorfQorCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpzeW5jTG9jYWxTdG9yYWdlKCkKK3sKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgUVdl
YlNlY3VyaXR5T3JpZ2luOjpzeW5jTG9jYWxTdG9yYWdlKCk7CisjZW5kaWYKK30KKwogLy8gUHJv
dmlkZSBhIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91c2x5IGV4cG9ydGVkIHBy
aXZhdGUgc3ltYm9scyBhcyBvZiBRdFdlYktpdCA0LjYgcmVsZWFzZQogCiB2b2lkIFFXRUJLSVRf
RVhQT1JUIHF0X3Jlc3VtZUFjdGl2ZURPTU9iamVjdHMoUVdlYkZyYW1lKiBmcmFtZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQuaAppbmRleCAzMjk5ZmFlLi4yNGQxYjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmgKKysrIGIvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oCkBA
IC0yMTMsNiArMjEzLDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUVN0cmluZyBzaGFkb3dQc2V1
ZG9JZChjb25zdCBRV2ViRWxlbWVudCYpOwogCiAgICAgc3RhdGljIFFTdHJpbmcgbGF5ZXJUcmVl
QXNUZXh0KFFXZWJGcmFtZSopOworCisgICAgc3RhdGljIFFWYXJpYW50TGlzdCBvcmlnaW5zV2l0
aExvY2FsU3RvcmFnZSgpOworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUFsbExvY2FsU3RvcmFnZSgp
OworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihjb25zdCBRU3Ry
aW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBzdGF0aWMgbG9uZyBsb25nIGxvY2FsU3RvcmFn
ZURpc2tVc2FnZUZvck9yaWdpbihjb25zdCBRU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKyAg
ICBzdGF0aWMgdm9pZCBzeW5jTG9jYWxTdG9yYWdlKCk7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkZjU2MmM1Li43OTRl
YWNjIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTEtMDYtMTcgIEthc3RodXJpIFJlbmdhbiAgPGthc3RodXJpLm4t
c0Bub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgW1F0XSBBZGQgc3RvcmFnZSB0cmFja2VyIFdLMSBBUEkgZm9yIFF0V2ViS2l0IHBvcnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjY5Cisg
ICAgICAgCisgICAgICAgIEltcGxlbWVudGVkIHRoZSBuZXcgbWV0aG9kcyByZXF1aXJlZCBmb3Ig
dGVzdGluZworICAgICAgICBRdCBzdG9yYWdlIHRyYWNrZXIgQVBJJ3MKKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlLnBybzoKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcDoKKyAgICAgICAgKExheW91dFRlc3RD
b250cm9sbGVyOjp+TGF5b3V0VGVzdENvbnRyb2xsZXIpOgorICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnJlc2V0KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpsb2NhbFN0
b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4pOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJv
bGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyk6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6b3JpZ2luTW9kaWZpZWQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0
L0xheW91dFRlc3RDb250cm9sbGVyUXQuaDoKKwogMjAxMS0wNS0yNSAgQWRhbSBSb2JlbiAgPGFy
b2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgRG9uJ3QgYXNzdW1lIHRoYXQgYnVpbGRzIGZpbmlz
aCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIHN0YXJ0ZWQKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlLnBybyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0
L0R1bXBSZW5kZXJUcmVlLnBybwppbmRleCAyNDI2NTFkLi43ODI1ODkyIDEwMDY0NAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm8KKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvCkBAIC03LDYgKzcsNyBAQCBpc0VtcHR5
KE9VVFBVVF9ESVIpOiBPVVRQVVRfRElSID0gLi4vLi4vLi4KIAogaW5jbHVkZSguLi8uLi8uLi9T
b3VyY2UvV2ViS2l0LnByaSkKIElOQ0xVREVQQVRIICs9IC4uLy4uLy4uL1NvdXJjZQorSU5DTFVE
RVBBVEggKz0gLi4vLi4vLi4vU291cmNlL1dlYkNvcmUvc3RvcmFnZQogSU5DTFVERVBBVEggKz0g
Li4vLi4vLi4vU291cmNlL0phdmFTY3JpcHRDb3JlCiBJTkNMVURFUEFUSCArPSAuLi8uLi8uLi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvRm9yd2FyZGluZ0hlYWRlcnMKIElOQ0xVREVQQVRIICs9IC4u
Ly4uLy4uL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQKZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHAKaW5kZXggZmYzZWQzMy4u
NTUxNzZiNSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENv
bnRyb2xsZXJRdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENv
bnRyb2xsZXJRdC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlclF0LmgiCiAjaW5jbHVkZSAiRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQuaCIKKyNpbmNsdWRlICJTdG9yYWdlVHJhY2tlckNsaWVudFF0LmgiCiAKICNp
bmNsdWRlICJEdW1wUmVuZGVyVHJlZVF0LmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCkBAIC00
Niw2ICs0NywxMSBAQCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6TGF5b3V0VGVzdENvbnRyb2xsZXIo
V2ViQ29yZTo6RHVtcFJlbmRlclRyZWUqIGRydCkKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6ZHVtcE5vdGlmaWNhdGlvbih0cnVlKTsKIH0KIAorTGF5b3V0VGVzdENvbnRyb2xsZXI6On5M
YXlvdXRUZXN0Q29udHJvbGxlcigpCit7CisgICAgaWYgKG1fbG9jYWxTdG9yYWdlVHJhY2tlcikK
KyAgICAgICAgZGVsZXRlIG1fbG9jYWxTdG9yYWdlVHJhY2tlcjsKK30KIHZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnJlc2V0KCkKIHsKICAgICBtX2hhc0R1bXBlZCA9IGZhbHNlOwpAQCAtNzIs
NiArNzgsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZXNldCgpCiAgICAgbV9pc0dl
b2xvY2F0aW9uUGVybWlzc2lvblNldCA9IGZhbHNlOwogICAgIG1faXNQcmludGluZyA9IGZhbHNl
OwogICAgIG1fZ2VvbG9jYXRpb25QZXJtaXNzaW9uID0gZmFsc2U7CisgICAgbV9sb2NhbFN0b3Jh
Z2VUcmFja2VyID0gMDsKIAogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wRWRpdGlu
Z0NhbGxiYWNrcyhmYWxzZSk7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBGcmFt
ZUxvYWRlcihmYWxzZSk7CkBAIC01NzYsOCArNTgzLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIHVybCkK
IAogbG9uZyBsb25nIExheW91dFRlc3RDb250cm9sbGVyOjpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VG
b3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKIHsKLSAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZ2V0dGluZyBkaXNrIHVzYWdlIGluIGJ5dGVzIGZvciBh
biBvcmlnaW4uCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuKER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0Ojpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4ob3JpZ2luSWRlbnRpZmllcikpOwog
fQogCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2lu
UXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQpAQCAtOTI0LDI5ICs5MzAsMzggQEAgdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIG1p
bmltdW1UaW1lckludGVydmFsKQogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNaW5p
bXVtVGltZXJJbnRlcnZhbChtX2RydC0+d2ViUGFnZSgpLCBtaW5pbXVtVGltZXJJbnRlcnZhbCk7
CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdl
KCkKK1FWYXJpYW50TGlzdCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0
b3JhZ2UoKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCisgICAgcmV0dXJuIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZSgpOwogfQogCiB2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQogewotICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQuCisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmRlbGV0ZUFsbExv
Y2FsU3RvcmFnZSgpOwogfQogCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2Nh
bFN0b3JhZ2VGb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKIHsKLSAg
ICAvLyBGSVhNRTogSW1wbGVtZW50LgorICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkZWxl
dGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4ob3JpZ2luSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnModW5z
aWduZWQgbnVtYmVyKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCisgICAgaWYgKCFtX2xv
Y2FsU3RvcmFnZVRyYWNrZXIpCisgICAgICAgIG1fbG9jYWxTdG9yYWdlVHJhY2tlciA9IG5ldyBX
ZWJDb3JlOjpTdG9yYWdlVHJhY2tlckNsaWVudFF0KCk7CisgICAgUU9iamVjdDo6Y29ubmVjdCht
X2xvY2FsU3RvcmFnZVRyYWNrZXIsIFNJR05BTChvcmlnaW5Nb2RpZmllZChjb25zdCBRU3RyaW5n
JikpLAorICAgICAgICAgICAgdGhpcywgU0xPVChvcmlnaW5Nb2RpZmllZChjb25zdCBRU3RyaW5n
JikpLCBRdDo6VW5pcXVlQ29ubmVjdGlvbik7IAogfQogCiB2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzeW5jTG9jYWxTdG9yYWdlKCk7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbk1vZGlmaWVkKGNvbnN0IFFTdHJpbmcmIG9yaWdp
bklkZW50aWZpZXIpCit7CisgICAgcHJpbnRmKCJPcmlnaW4gaWRlbnRpZmllcjogJyVzJ1xuIiwg
b3JpZ2luSWRlbnRpZmllci50b0FzY2lpKCkuZGF0YSgpKTsKKyAgICBub3RpZnlEb25lKCk7CiB9
CiAKIFFTdHJpbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxheWVyVHJlZUFzVGV4dCgpCmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0Lmgg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgKaW5kZXgg
OTlkMDRmMy4uYWExNzM0OSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5
b3V0VGVzdENvbnRyb2xsZXJRdC5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91
dFRlc3RDb250cm9sbGVyUXQuaApAQCAtNTAsNiArNTAsNyBAQCBjbGFzcyBRV2ViRnJhbWU7CiBj
bGFzcyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBj
bGFzcyBEdW1wUmVuZGVyVHJlZTsKKyAgICBjbGFzcyBTdG9yYWdlVHJhY2tlckNsaWVudFF0Owog
fQogY2xhc3MgTGF5b3V0VGVzdENvbnRyb2xsZXIgOiBwdWJsaWMgUU9iamVjdCB7CiAgICAgUV9P
QkpFQ1QKQEAgLTU4LDcgKzU5LDcgQEAgY2xhc3MgTGF5b3V0VGVzdENvbnRyb2xsZXIgOiBwdWJs
aWMgUU9iamVjdCB7CiAgICAgUV9QUk9QRVJUWShib29sIGdsb2JhbEZsYWcgUkVBRCBnbG9iYWxG
bGFnIFdSSVRFIHNldEdsb2JhbEZsYWcpCiBwdWJsaWM6CiAgICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWUqIGRydCk7Ci0KKyAgICB+TGF5b3V0VGVzdENvbnRy
b2xsZXIoKTsKICAgICBib29sIHNob3VsZER1bXBBc1RleHQoKSBjb25zdCB7IHJldHVybiBtX3Rl
eHREdW1wOyB9CiAgICAgYm9vbCBzaG91bGREdW1wQmFja0ZvcndhcmRMaXN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9kdW1wQmFja0ZvcndhcmRMaXN0OyB9CiAgICAgYm9vbCBzaG91bGREdW1wQ2hpbGRy
ZW5Bc1RleHQoKSBjb25zdCB7IHJldHVybiBtX2R1bXBDaGlsZHJlbkFzVGV4dDsgfQpAQCAtMjY3
LDcgKzI2OCw3IEBAIHB1YmxpYyBzbG90czoKIAogICAgIHZvaWQgc2V0TWluaW11bVRpbWVySW50
ZXJ2YWwoZG91YmxlKTsKICAgICAKLSAgICB2b2lkIG9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCk7
CisgICAgUVZhcmlhbnRMaXN0IG9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCk7CiAgICAgdm9pZCBk
ZWxldGVBbGxMb2NhbFN0b3JhZ2UoKTsKICAgICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZUZvck9y
aWdpbihjb25zdCBRU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKICAgICBsb25nIGxvbmcgbG9j
YWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIG9yaWdpbklkZW50aWZp
ZXIpOwpAQCAtMjc1LDYgKzI3Niw4IEBAIHB1YmxpYyBzbG90czoKICAgICB2b2lkIHN5bmNMb2Nh
bFN0b3JhZ2UoKTsKICAgICBRU3RyaW5nIGxheWVyVHJlZUFzVGV4dCgpOwogCisgICAgdm9pZCBv
cmlnaW5Nb2RpZmllZChjb25zdCBRU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKwogcHJpdmF0
ZSBzbG90czoKICAgICB2b2lkIHByb2Nlc3NXb3JrKCk7CiAKQEAgLTMwOSw2ICszMTIsOCBAQCBw
cml2YXRlOgogICAgIFFXZWJIaXN0b3J5KiBtX3dlYkhpc3Rvcnk7CiAgICAgUVN0cmluZ0xpc3Qg
bV9kZXNrdG9wTm90aWZpY2F0aW9uQWxsb3dlZE9yaWdpbnM7CiAgICAgYm9vbCBtX2lnbm9yZURl
c2t0b3BOb3RpZmljYXRpb247CisgICAgV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXJDbGllbnRRdCog
bV9sb2NhbFN0b3JhZ2VUcmFja2VyOworICAgICAKIH07CiAKICNlbmRpZiAvLyBMYXlvdXRUZXN0
Q29udHJvbGxlclF0X2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97874</attachid>
            <date>2011-06-20 15:42:00 -0700</date>
            <delta_ts>2011-06-20 15:42:00 -0700</delta_ts>
            <desc>Changes version 2</desc>
            <filename>patchv2.patch</filename>
            <type>text/plain</type>
            <size>21591</size>
            <attacher name="kasthuri">kasthuri.n-s</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCmluZGV4IGZlMDM2ZjAuLmM2ZDA0MmQgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vcXQvU2tpcHBlZApAQCAtNzgsNyArNzgsNyBAQCBwbHVnaW5zL2NsaWNraW5nLW1pc3Npbmct
cGx1Z2luLWZpcmVzLWRlbGVnYXRlLmh0bWwKIHN0b3JhZ2UvaW5kZXhlZGRiCiAKICMgU3RvcmFn
ZVRyYWNrZXIgaXMgbm90IGVuYWJsZWQuCi1zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdl
L3N0b3JhZ2V0cmFja2VyCitzdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3N0b3JhZ2V0
cmFja2VyL3N0b3JhZ2UtdHJhY2tlci03LXVzYWdlLmh0bWwKIAogIyAtLS0tLSBObyBVc2VyIFNj
cmlwdHMKIHVzZXJzY3JpcHRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vi
c2VjdXJpdHlvcmlnaW4uY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNlY3VyaXR5b3Jp
Z2luLmNwcAppbmRleCA5N2Y4ODdhLi4xYjM2NDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2Vic2VjdXJpdHlvcmlnaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJzZWN1cml0eW9yaWdpbi5jcHAKQEAgLTIyLDYgKzIyLDkgQEAKIAogI2luY2x1ZGUgIkFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCisj
aWYgRU5BQkxFKERPTV9TVE9SQUdFKQorI2luY2x1ZGUgIlN0b3JhZ2VUcmFja2VyLmgiCisjZW5k
aWYKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKICNpbmNs
dWRlICJTZWN1cml0eU9yaWdpbi5oIgpAQCAtMTgzLDggKzE4Niw4IEBAIFFMaXN0PFFXZWJTZWN1
cml0eU9yaWdpbj4gUVdlYlNlY3VyaXR5T3JpZ2luOjphbGxPcmlnaW5zKCkKIAogI2lmIEVOQUJM
RShEQVRBQkFTRSkKICAgICBWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+IGNvcmVPcmln
aW5zOwotICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLm9yaWdpbnMoY29yZU9yaWdpbnMp
OwogCisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkub3JpZ2lucyhjb3JlT3JpZ2lucyk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvcmVPcmlnaW5zLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIFFXZWJTZWN1cml0eU9yaWdpblByaXZhdGUqIHByaXYgPSBuZXcgUVdlYlNlY3Vy
aXR5T3JpZ2luUHJpdmF0ZShjb3JlT3JpZ2luc1tpXS5nZXQoKSk7CiAgICAgICAgIHdlYk9yaWdp
bnMuYXBwZW5kKHByaXYpOwpAQCAtMjY3LDMgKzI3MCw2NiBAQCBRU3RyaW5nTGlzdCBRV2ViU2Vj
dXJpdHlPcmlnaW46OmxvY2FsU2NoZW1lcygpCiAgICAgfQogICAgIHJldHVybiBsaXN0OwogfQor
CisvKiEKKyAgICBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgc2VjdXJpdHkgb3JpZ2lucyB3aXRoIGxv
Y2FsIHN0b3JhZ2UuCisqLworUUxpc3Q8UVdlYlNlY3VyaXR5T3JpZ2luPiBRV2ViU2VjdXJpdHlP
cmlnaW46OmFsbExvY2FsU3RvcmFnZU9yaWdpbnMoKQoreworICAgIFFMaXN0PFFXZWJTZWN1cml0
eU9yaWdpbj4gd2ViT3JpZ2luczsKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICBWZWN0
b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+IGNvcmVPcmlnaW5zOworICAgIFN0b3JhZ2VUcmFj
a2VyOjp0cmFja2VyKCkub3JpZ2lucyhjb3JlT3JpZ2lucyk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGNvcmVPcmlnaW5zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFFXZWJTZWN1cml0
eU9yaWdpblByaXZhdGUqIHByaXYgPSBuZXcgUVdlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZShjb3Jl
T3JpZ2luc1tpXS5nZXQoKSk7CisgICAgICAgIHdlYk9yaWdpbnMuYXBwZW5kKHByaXYpOworICAg
IH0KKyNlbmRpZgorCisgICAgcmV0dXJuIHdlYk9yaWdpbnM7Cit9CisKKy8qIQorICAgIFJlbW92
ZXMgYWxsIGxvY2FsIHN0b3JhZ2Ugc2VjdXJpdHkgb3JpZ2lucy4KKyovCit2b2lkIFFXZWJTZWN1
cml0eU9yaWdpbjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlT3JpZ2lucygpCit7CisjaWYgRU5BQkxF
KERPTV9TVE9SQUdFKQorICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlQWxsT3Jp
Z2lucygpOworI2VuZGlmCit9CisKKy8qIQorICAgIFJlbW92ZXMgYSBwYXJ0aWN1bGFyIHNlY3Vy
aXR5IG9yaWdpbiB3aGljaCBoYXMgbG9jYWwgc3RvcmFnZS4KKyovCit2b2lkIFFXZWJTZWN1cml0
eU9yaWdpbjo6ZGVsZXRlTG9jYWxTdG9yYWdlT3JpZ2luKGNvbnN0IFFTdHJpbmcmIG9yaWdpbklk
ZW50aWZpZXIpCit7CisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorICAgICBSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+IG9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUoS1VSTChvcmlnaW5JZGVu
dGlmaWVyKSk7CisgICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlT3JpZ2luKG9y
aWdpbi5nZXQoKSk7CisjZW5kaWYKK30KKworLyohCisgICAgUmV0dXJucyB0aGUgZGlzayB1c2Fn
ZSBmb3IgYSBwYXJ0aWN1bGFyIHNlY3VyaXR5IG9yaWdpbi4KKyovCitsb25nIGxvbmcgUVdlYlNl
Y3VyaXR5T3JpZ2luOjpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4oY29uc3QgUVN0cmlu
ZyYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgIFJl
ZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShLVVJM
KG9yaWdpbklkZW50aWZpZXIpKTsKKyAgICAgcmV0dXJuKFN0b3JhZ2VUcmFja2VyOjp0cmFja2Vy
KCkuZGlza1VzYWdlRm9yT3JpZ2luKG9yaWdpbi5nZXQoKSkpOworI2VuZGlmCit9CisKKworLyoh
CisgICAgU3luY3MgbG9jYWwgc3RvcmFnZSBkYnMuCisqLwordm9pZCBRV2ViU2VjdXJpdHlPcmln
aW46OnN5bmNMb2NhbFN0b3JhZ2UoKQoreworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICBT
dG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLnN5bmNMb2NhbFN0b3JhZ2UoKTsKKyNlbmRpZgorfQor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2VjdXJpdHlvcmlnaW4uaCBi
L1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZWN1cml0eW9yaWdpbi5oCmluZGV4IDczMjg2ODAu
LjVjZTc1NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZWN1cml0eW9y
aWdpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZWN1cml0eW9yaWdpbi5oCkBA
IC00MCw3ICs0MCwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgYWRkTG9jYWxTY2hlbWUo
Y29uc3QgUVN0cmluZyYgc2NoZW1lKTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVMb2NhbFNjaGVt
ZShjb25zdCBRU3RyaW5nJiBzY2hlbWUpOwogICAgIHN0YXRpYyBRU3RyaW5nTGlzdCBsb2NhbFNj
aGVtZXMoKTsKLQorICAgIHN0YXRpYyBRTGlzdDxRV2ViU2VjdXJpdHlPcmlnaW4+IGFsbExvY2Fs
U3RvcmFnZU9yaWdpbnMoKTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVBbGxMb2NhbFN0b3JhZ2VP
cmlnaW5zKCk7CisgICAgc3RhdGljIHZvaWQgZGVsZXRlTG9jYWxTdG9yYWdlT3JpZ2luKGNvbnN0
IFFTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOworICAgIHN0YXRpYyBsb25nIGxvbmcgbG9jYWxT
dG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIp
OworICAgIHN0YXRpYyB2b2lkIHN5bmNMb2NhbFN0b3JhZ2UoKTsKKyAgCiAgICAgflFXZWJTZWN1
cml0eU9yaWdpbigpOwogCiAgICAgUVN0cmluZyBzY2hlbWUoKSBjb25zdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2Vic2V0dGluZ3MuY3BwCmluZGV4IDg4MGVmNDkuLmJlODA5MjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcApAQCAtNDIsNiArNDIsOSBAQAogI2luY2x1ZGUgIklu
dFNpemUuaCIKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oIgogI2luY2x1ZGUg
IkRhdGFiYXNlVHJhY2tlci5oIgorI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyNpbmNsdWRlICJT
dG9yYWdlVHJhY2tlci5oIgorI2VuZGlmCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogCiAjaW5j
bHVkZSA8UUFwcGxpY2F0aW9uPgpAQCAtMTA2NCw2ICsxMDY3LDkgQEAgdm9pZCBRV2ViU2V0dGlu
Z3M6OnNldExvY2FsU3RvcmFnZVBhdGgoY29uc3QgUVN0cmluZyYgcGF0aCkKIHsKICAgICBkLT5s
b2NhbFN0b3JhZ2VQYXRoID0gcGF0aDsKICAgICBkLT5hcHBseSgpOworI2lmIEVOQUJMRShET01f
U1RPUkFHRSkKKyAgICBXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6aW5pdGlhbGl6ZVRyYWNrZXIo
cGF0aCk7CisjZW5kaWYKIH0KIAogLyohCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDgzNzBkOTkuLjBlYjYy
ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTEtMDYtMTcgIEthc3RodXJp
IFJlbmdhbiAgPGthc3RodXJpLm4tc0Bub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBBZGQgc3RvcmFnZSB0cmFja2VyIFdLMSBB
UEkgZm9yIFF0V2ViS2l0IHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTYyNjY5CisKKyAgICAgICAgQWRkIHN0b3JhZ2UgdHJhY2tlciBXSzEgQVBJ
J3MgZm9yIHRyYWNraW5nIGxvY2FsIHN0b3JhZ2UuICAKKyAgICAgIAorICAgICAgICBUaGUgUVdl
YlNlY3VyaXR5T3JpZ2luIGNsYXNzIGFscmVhZHkgaGFzIHNvbWUgbWV0aG9kcyBmb3IgdHJhY2tp
bmcgZGF0YWJhc2Ugc3RvcmFnZS4gIAorICAgICAgICBBZGRlZCBuZXcgQVBJJ3MgZm9yIHRyYWNr
aW5nIGxvY2FsIHN0b3JhZ2UgdG8gUVdlYlNlY3VyaXR5T3JpZ2luIGNsYXNzLgorCisgICAgICAg
IEFsc28gdGhlIGxheW91dHRlc3RzIGZvciB0aGUgc3RvcmFnZSB0cmFja2VyIHVzZXMgdGhlIHN0
b3JhZ2UgdHJhY2tlciBjbGllbnQgd2hpY2ggaXMgdXNlZCBmb3IgCisgICAgICAgIHNpZ25hbGlu
ZyB0aGUgdXBkYXRlcyB0byBzdG9yYWdlIHRyYWNrZXIgZGF0YWJhc2UuICBTbyBhZGRlZCB0aGUg
c3RvcmFnZSB0cmFja2VyIGNsaWVudCB0bworICAgICAgICB3ZWJjb3Jlc3VwcG9ydC4KKworICAg
ICAgICAqIEFwaS9oZWFkZXJzLnByaToKKyAgICAgICAgKiBBcGkvcXdlYnNlY3VyaXR5b3JpZ2lu
LmNwcDoKKyAgICAgICAgKFFXZWJTZWN1cml0eU9yaWdpbjo6YWxsT3JpZ2lucyk6CisgICAgICAg
IChRV2ViU2VjdXJpdHlPcmlnaW46OmFsbExvY2FsU3RvcmFnZU9yaWdpbnMpOgorICAgICAgICAo
UVdlYlNlY3VyaXR5T3JpZ2luOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2VPcmlnaW5zKToKKyAgICAg
ICAgKFFXZWJTZWN1cml0eU9yaWdpbjo6ZGVsZXRlTG9jYWxTdG9yYWdlT3JpZ2luKToKKyAgICAg
ICAgKFFXZWJTZWN1cml0eU9yaWdpbjo6bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKToK
KyAgICAgICAgKFFXZWJTZWN1cml0eU9yaWdpbjo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAg
ICogQXBpL3F3ZWJzZWN1cml0eW9yaWdpbi5oOgorICAgICAgICAqIEFwaS9xd2Vic2V0dGluZ3Mu
Y3BwOgorICAgICAgICAoUVdlYlNldHRpbmdzOjpzZXRMb2NhbFN0b3JhZ2VQYXRoKToKKyAgICAg
ICAgKiBRdFdlYktpdC5wcm86CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQuY3BwOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Om9yaWdp
bnNXaXRoTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpk
ZWxldGVBbGxMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbik6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjpzeW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oOgorICAgICAgIAorCiAyMDExLTA1LTI1
ICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3Nz
YS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvcXQvUXRXZWJLaXQucHJvIGIvU291cmNlL1dlYktpdC9xdC9RdFdlYktp
dC5wcm8KaW5kZXggMWYyOTdmMy4uNmY0NzAyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9x
dC9RdFdlYktpdC5wcm8KKysrIGIvU291cmNlL1dlYktpdC9xdC9RdFdlYktpdC5wcm8KQEAgLTE4
Miw3ICsxODIsOCBAQCBTT1VSQ0VTICs9IFwKICAgICAkJFBXRC9XZWJDb3JlU3VwcG9ydC9Qb3B1
cE1lbnVRdC5jcHAgXAogICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4u
Y3BwIFwKICAgICAkJFBXRC9XZWJDb3JlU3VwcG9ydC9TZWFyY2hQb3B1cE1lbnVRdC5jcHAgXAot
ICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKKyAgICAk
JFBXRC9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwIAorCiAKIEhFQURF
UlMgKz0gXAogICAgICQkV0VCS0lUX0FQSV9IRUFERVJTIFwKQEAgLTE5OCwxMyArMTk5LDIxIEBA
IEhFQURFUlMgKz0gXAogICAgICQkUFdEL1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4u
aCBcCiAgICAgJCRQV0QvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51UXQuaCBcCiAgICAgJCRQV0Qv
V2ViQ29yZVN1cHBvcnQvU2VhcmNoUG9wdXBNZW51UXQuaCBcCi0gICAgJCRQV0QvV2ViQ29yZVN1
cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKKyAgICAkJFBXRC9XZWJDb3JlU3VwcG9ydC9X
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCAgICAgCiAKIHdlYmtpdDIgewogICAgIEhFQURFUlMgKz0g
JCRXRUJLSVQyX0FQSV9IRUFERVJTCiAgICAgU09VUkNFUyArPSAkJFdFQktJVDJfQVBJX1NPVVJD
RVMKIH0KIAorY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0RPTV9TVE9SQUdFPTEpIHsKKyAgICBI
RUFERVJTICs9IFwKKyAgICAgICAgJCRQV0QvV2ViQ29yZVN1cHBvcnQvU3RvcmFnZVRyYWNrZXJD
bGllbnRRdC5oCisKKyAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgJCRQV0QvV2ViQ29yZVN1cHBv
cnQvU3RvcmFnZVRyYWNrZXJDbGllbnRRdC5jcHAKK30KKwogY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX05FVFNDQVBFX1BMVUdJTl9BUEk9MSkgewogICAgIHVuaXg6IXN5bWJpYW4gewogICAgICAg
ICBtYWVtbzUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9E
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAppbmRleCA0M2QzMzhjLi41ZjUzOGRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0LmNwcApAQCAtODUsNiArODUsNyBAQAogI2luY2x1ZGUgInF3ZWJw
YWdlLmgiCiAjaW5jbHVkZSAicXdlYnBhZ2VfcC5oIgogI2luY2x1ZGUgInF3ZWJzY3JpcHR3b3Js
ZC5oIgorI2luY2x1ZGUgInF3ZWJzZWN1cml0eW9yaWdpbi5oIgogCiAjaWYgRU5BQkxFKFZJREVP
KSAmJiBVU0UoUVRfTVVMVElNRURJQSkKICNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCkBA
IC0xMTY2LDYgKzExNjcsNDcgQEAgUVN0cmluZyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6bGF5
ZXJUcmVlQXNUZXh0KFFXZWJGcmFtZSogZnJhbWUpCiAgICAgcmV0dXJuIGNvcmVGcmFtZS0+bGF5
ZXJUcmVlQXNUZXh0KCk7CiB9CiAKK1FWYXJpYW50TGlzdCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKQoreworICAgIFFWYXJpYW50TGlzdCByZXM7Cisg
ICAgUVN0cmluZyBvcmlnaW5EZWxpbWV0ZXIgPSBRU3RyaW5nKFFMYXRpbjFDaGFyKCdfJykpOwor
ICAgIFFMaXN0PFFXZWJTZWN1cml0eU9yaWdpbj4gcmV0OworI2lmIEVOQUJMRShET01fU1RPUkFH
RSkKKyAgICByZXQgPSBRV2ViU2VjdXJpdHlPcmlnaW46OmFsbExvY2FsU3RvcmFnZU9yaWdpbnMo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmV0LnNpemUoKTsgKytpKSAKKyAgICAg
ICByZXMuYXBwZW5kKCgoKChyZXRbaV0uc2NoZW1lKCkpLmFwcGVuZChvcmlnaW5EZWxpbWV0ZXIp
KS5hcHBlbmQocmV0W2ldLmhvc3QoKSkpLmFwcGVuZChvcmlnaW5EZWxpbWV0ZXIpKS5hcHBlbmQo
UVZhcmlhbnQocmV0W2ldLnBvcnQoKSkudG9TdHJpbmcoKSkpOworI2VuZGlmCisgICAgcmV0dXJu
IHJlczsKK30KKwordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZGVsZXRlQWxsTG9jYWxT
dG9yYWdlKCkKK3sKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgUVdlYlNlY3VyaXR5T3Jp
Z2luOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2VPcmlnaW5zKCk7CisjZW5kaWYKK30KKwordm9pZCBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKGNvbnN0
IFFTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7CisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQor
ICAgIFFXZWJTZWN1cml0eU9yaWdpbjo6ZGVsZXRlTG9jYWxTdG9yYWdlT3JpZ2luKG9yaWdpbklk
ZW50aWZpZXIpOworI2VuZGlmCit9CisKK2xvbmcgbG9uZyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIG9yaWdpbklk
ZW50aWZpZXIpCit7CisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorICAgIHJldHVybihRV2ViU2Vj
dXJpdHlPcmlnaW46OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihvcmlnaW5JZGVudGlm
aWVyKSk7CisjZW5kaWYKK30KKwordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c3luY0xv
Y2FsU3RvcmFnZSgpCit7CisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorICAgIFFXZWJTZWN1cml0
eU9yaWdpbjo6c3luY0xvY2FsU3RvcmFnZSgpOworI2VuZGlmCit9CisKIC8vIFByb3ZpZGUgYSBi
YWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXNseSBleHBvcnRlZCBwcml2YXRlIHN5
bWJvbHMgYXMgb2YgUXRXZWJLaXQgNC42IHJlbGVhc2UKIAogdm9pZCBRV0VCS0lUX0VYUE9SVCBx
dF9yZXN1bWVBY3RpdmVET01PYmplY3RzKFFXZWJGcmFtZSogZnJhbWUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Lmgg
Yi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
LmgKaW5kZXggMzI5OWZhZS4uMjRkMWI4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuaApAQCAtMjEzLDYg
KzIxMywxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFFTdHJpbmcgc2hhZG93UHNldWRvSWQoY29u
c3QgUVdlYkVsZW1lbnQmKTsKIAogICAgIHN0YXRpYyBRU3RyaW5nIGxheWVyVHJlZUFzVGV4dChR
V2ViRnJhbWUqKTsKKworICAgIHN0YXRpYyBRVmFyaWFudExpc3Qgb3JpZ2luc1dpdGhMb2NhbFN0
b3JhZ2UoKTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKTsKKyAgICBz
dGF0aWMgdm9pZCBkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3Jp
Z2luSWRlbnRpZmllcik7CisgICAgc3RhdGljIGxvbmcgbG9uZyBsb2NhbFN0b3JhZ2VEaXNrVXNh
Z2VGb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7CisgICAgc3RhdGlj
IHZvaWQgc3luY0xvY2FsU3RvcmFnZSgpOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1N0b3JhZ2VUcmFja2VyQ2xpZW50UXQuY3BwIGIv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9TdG9yYWdlVHJhY2tlckNsaWVudFF0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmIxMTJiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9TdG9yYWdlVHJhY2tlckNs
aWVudFF0LmNwcApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlN0b3JhZ2VUcmFja2VyQ2xpZW50UXQuaCIKKworI2luY2x1ZGUgIlN0b3JhZ2VUcmFj
a2VyLmgiCisjaW5jbHVkZSAiU3RvcmFnZVRyYWNrZXJDbGllbnQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitTdG9yYWdlVHJhY2tlckNsaWVudFF0OjpTdG9yYWdlVHJhY2tlckNsaWVudFF0
KCkKK3sKKyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLnNldENsaWVudCh0aGlzKTsKK30K
KworU3RvcmFnZVRyYWNrZXJDbGllbnRRdDo6flN0b3JhZ2VUcmFja2VyQ2xpZW50UXQoKQorewor
fQorCit2b2lkIFN0b3JhZ2VUcmFja2VyQ2xpZW50UXQ6OmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2lu
KGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyAgICBlbWl0IG9yaWdpbk1vZGlm
aWVkKG9yaWdpbklkZW50aWZpZXIpOworfQorCit9CisKKyNpbmNsdWRlICJtb2NfU3RvcmFnZVRy
YWNrZXJDbGllbnRRdC5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L1N0b3JhZ2VUcmFja2VyQ2xpZW50UXQuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvU3RvcmFnZVRyYWNrZXJDbGllbnRRdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjEwNWRhYTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L1N0b3JhZ2VUcmFja2VyQ2xpZW50UXQuaApAQCAtMCwwICsxLDUyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFN0b3JhZ2VUcmFja2VyQ2xpZW50UXRfaAorI2RlZmluZSBTdG9yYWdlVHJh
Y2tlckNsaWVudFF0X2gKKworI2luY2x1ZGUgIlN0b3JhZ2VUcmFja2VyQ2xpZW50LmgiCisjaW5j
bHVkZSAicXdlYmtpdGdsb2JhbC5oIgorI2luY2x1ZGUgPFF0Q29yZS9RT2JqZWN0PgorI2luY2x1
ZGUgPFF0Q29yZS9xc3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBj
bGFzcyBwcm92aWRlcyBhIGltcGxlbWVudGF0aW9uIGZvciBTdG9yYWdlVHJhY2tlckNsaWVudCBm
b3IgcXRXZWJraXQuCitjbGFzcyBRV0VCS0lUX0VYUE9SVCBTdG9yYWdlVHJhY2tlckNsaWVudFF0
IDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBTdG9yYWdlVHJhY2tlckNsaWVudCB7CisgICAgUV9P
QkpFQ1QKKworcHVibGljOgorICAgIFN0b3JhZ2VUcmFja2VyQ2xpZW50UXQoKTsKKyAgICB2aXJ0
dWFsIH5TdG9yYWdlVHJhY2tlckNsaWVudFF0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hEaWRNb2RpZnlPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKworUV9T
SUdOQUxTOgorICAgIHZvaWQgb3JpZ2luTW9kaWZpZWQoY29uc3QgUVN0cmluZyYgb3JpZ2luSWRl
bnRpZmllcik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTdG9y
YWdlVHJhY2tlckNsaWVudFF0X2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xz
L0NoYW5nZUxvZwppbmRleCBkZjU2MmM1Li43OTRlYWNjIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDYtMTcg
IEthc3RodXJpIFJlbmdhbiAgPGthc3RodXJpLm4tc0Bub2tpYS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBBZGQgc3RvcmFnZSB0cmFj
a2VyIFdLMSBBUEkgZm9yIFF0V2ViS2l0IHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjY5CisgICAgICAgCisgICAgICAgIEltcGxlbWVudGVk
IHRoZSBuZXcgbWV0aG9kcyByZXF1aXJlZCBmb3IgdGVzdGluZworICAgICAgICBRdCBzdG9yYWdl
IHRyYWNrZXIgQVBJJ3MKKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJU
cmVlLnBybzoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxl
clF0LmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjp+TGF5b3V0VGVzdENvbnRy
b2xsZXIpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlc2V0KToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4pOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdp
bik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2Vy
Tm90aWZpY2F0aW9ucyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2Fs
U3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luTW9kaWZpZWQp
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaDoK
KwogMjAxMS0wNS0yNSAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAg
RG9uJ3QgYXNzdW1lIHRoYXQgYnVpbGRzIGZpbmlzaCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIHN0
YXJ0ZWQKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVl
LnBybyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlLnBybwppbmRleCAy
NDI2NTFkLi43ODI1ODkyIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1w
UmVuZGVyVHJlZS5wcm8KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRy
ZWUucHJvCkBAIC03LDYgKzcsNyBAQCBpc0VtcHR5KE9VVFBVVF9ESVIpOiBPVVRQVVRfRElSID0g
Li4vLi4vLi4KIAogaW5jbHVkZSguLi8uLi8uLi9Tb3VyY2UvV2ViS2l0LnByaSkKIElOQ0xVREVQ
QVRIICs9IC4uLy4uLy4uL1NvdXJjZQorSU5DTFVERVBBVEggKz0gLi4vLi4vLi4vU291cmNlL1dl
YkNvcmUvc3RvcmFnZQogSU5DTFVERVBBVEggKz0gLi4vLi4vLi4vU291cmNlL0phdmFTY3JpcHRD
b3JlCiBJTkNMVURFUEFUSCArPSAuLi8uLi8uLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRm9yd2Fy
ZGluZ0hlYWRlcnMKIElOQ0xVREVQQVRIICs9IC4uLy4uLy4uL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRl
c3RDb250cm9sbGVyUXQuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENv
bnRyb2xsZXJRdC5jcHAKaW5kZXggZmYzZWQzMy4uNTUxNzZiNSAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHAKKysrIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHAKQEAgLTI5LDYgKzI5
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxl
clF0LmgiCiAjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuaCIKKyNpbmNsdWRlICJT
dG9yYWdlVHJhY2tlckNsaWVudFF0LmgiCiAKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZVF0Lmgi
CiAjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCkBAIC00Niw2ICs0NywxMSBAQCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6TGF5b3V0VGVzdENvbnRyb2xsZXIoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWUqIGRy
dCkKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcE5vdGlmaWNhdGlvbih0cnVlKTsK
IH0KIAorTGF5b3V0VGVzdENvbnRyb2xsZXI6On5MYXlvdXRUZXN0Q29udHJvbGxlcigpCit7Cisg
ICAgaWYgKG1fbG9jYWxTdG9yYWdlVHJhY2tlcikKKyAgICAgICAgZGVsZXRlIG1fbG9jYWxTdG9y
YWdlVHJhY2tlcjsKK30KIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlc2V0KCkKIHsKICAg
ICBtX2hhc0R1bXBlZCA9IGZhbHNlOwpAQCAtNzIsNiArNzgsNyBAQCB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpyZXNldCgpCiAgICAgbV9pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldCA9IGZh
bHNlOwogICAgIG1faXNQcmludGluZyA9IGZhbHNlOwogICAgIG1fZ2VvbG9jYXRpb25QZXJtaXNz
aW9uID0gZmFsc2U7CisgICAgbV9sb2NhbFN0b3JhZ2VUcmFja2VyID0gMDsKIAogICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wRWRpdGluZ0NhbGxiYWNrcyhmYWxzZSk7CiAgICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBGcmFtZUxvYWRlcihmYWxzZSk7CkBAIC01NzYsOCAr
NTgzLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hl
Rm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIHVybCkKIAogbG9uZyBsb25nIExheW91dFRlc3RDb250
cm9sbGVyOjpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3Jp
Z2luSWRlbnRpZmllcikKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZ2V0
dGluZyBkaXNrIHVzYWdlIGluIGJ5dGVzIGZvciBhbiBvcmlnaW4uCi0gICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VG
b3JPcmlnaW4ob3JpZ2luSWRlbnRpZmllcikpOwogfQogCiB2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1
b3RhKQpAQCAtOTI0LDI5ICs5MzAsMzggQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIG1pbmltdW1UaW1lckludGVydmFsKQogICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChtX2RydC0+d2Vi
UGFnZSgpLCBtaW5pbXVtVGltZXJJbnRlcnZhbCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCkKK1FWYXJpYW50TGlzdCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKQogewotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQuCisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpvcmlnaW5zV2l0
aExvY2FsU3RvcmFnZSgpOwogfQogCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVB
bGxMb2NhbFN0b3JhZ2UoKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCisgICAgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpOwogfQogCiB2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oY29uc3QgUVN0
cmluZyYgb3JpZ2luSWRlbnRpZmllcikKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4ob3Jp
Z2luSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVT
dG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQgbnVtYmVyKQogewotICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQuCisgICAgaWYgKCFtX2xvY2FsU3RvcmFnZVRyYWNrZXIpCisgICAgICAg
IG1fbG9jYWxTdG9yYWdlVHJhY2tlciA9IG5ldyBXZWJDb3JlOjpTdG9yYWdlVHJhY2tlckNsaWVu
dFF0KCk7CisgICAgUU9iamVjdDo6Y29ubmVjdChtX2xvY2FsU3RvcmFnZVRyYWNrZXIsIFNJR05B
TChvcmlnaW5Nb2RpZmllZChjb25zdCBRU3RyaW5nJikpLAorICAgICAgICAgICAgdGhpcywgU0xP
VChvcmlnaW5Nb2RpZmllZChjb25zdCBRU3RyaW5nJikpLCBRdDo6VW5pcXVlQ29ubmVjdGlvbik7
IAogfQogCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKIHsK
LSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpz
eW5jTG9jYWxTdG9yYWdlKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdp
bk1vZGlmaWVkKGNvbnN0IFFTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgcHJpbnRm
KCJPcmlnaW4gaWRlbnRpZmllcjogJyVzJ1xuIiwgb3JpZ2luSWRlbnRpZmllci50b0FzY2lpKCku
ZGF0YSgpKTsKKyAgICBub3RpZnlEb25lKCk7CiB9CiAKIFFTdHJpbmcgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmxheWVyVHJlZUFzVGV4dCgpCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9M
YXlvdXRUZXN0Q29udHJvbGxlclF0LmgKaW5kZXggOTlkMDRmMy4uYWExNzM0OSAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaApAQCAtNTAs
NiArNTAsNyBAQCBjbGFzcyBRV2ViRnJhbWU7CiBjbGFzcyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBEdW1wUmVuZGVyVHJlZTsKKyAgICBj
bGFzcyBTdG9yYWdlVHJhY2tlckNsaWVudFF0OwogfQogY2xhc3MgTGF5b3V0VGVzdENvbnRyb2xs
ZXIgOiBwdWJsaWMgUU9iamVjdCB7CiAgICAgUV9PQkpFQ1QKQEAgLTU4LDcgKzU5LDcgQEAgY2xh
c3MgTGF5b3V0VGVzdENvbnRyb2xsZXIgOiBwdWJsaWMgUU9iamVjdCB7CiAgICAgUV9QUk9QRVJU
WShib29sIGdsb2JhbEZsYWcgUkVBRCBnbG9iYWxGbGFnIFdSSVRFIHNldEdsb2JhbEZsYWcpCiBw
dWJsaWM6CiAgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWUq
IGRydCk7Ci0KKyAgICB+TGF5b3V0VGVzdENvbnRyb2xsZXIoKTsKICAgICBib29sIHNob3VsZER1
bXBBc1RleHQoKSBjb25zdCB7IHJldHVybiBtX3RleHREdW1wOyB9CiAgICAgYm9vbCBzaG91bGRE
dW1wQmFja0ZvcndhcmRMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9kdW1wQmFja0ZvcndhcmRMaXN0
OyB9CiAgICAgYm9vbCBzaG91bGREdW1wQ2hpbGRyZW5Bc1RleHQoKSBjb25zdCB7IHJldHVybiBt
X2R1bXBDaGlsZHJlbkFzVGV4dDsgfQpAQCAtMjY3LDcgKzI2OCw3IEBAIHB1YmxpYyBzbG90czoK
IAogICAgIHZvaWQgc2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlKTsKICAgICAKLSAgICB2
b2lkIG9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCk7CisgICAgUVZhcmlhbnRMaXN0IG9yaWdpbnNX
aXRoTG9jYWxTdG9yYWdlKCk7CiAgICAgdm9pZCBkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKTsKICAg
ICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihjb25zdCBRU3RyaW5nJiBvcmlnaW5J
ZGVudGlmaWVyKTsKICAgICBsb25nIGxvbmcgbG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2lu
KGNvbnN0IFFTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOwpAQCAtMjc1LDYgKzI3Niw4IEBAIHB1
YmxpYyBzbG90czoKICAgICB2b2lkIHN5bmNMb2NhbFN0b3JhZ2UoKTsKICAgICBRU3RyaW5nIGxh
eWVyVHJlZUFzVGV4dCgpOwogCisgICAgdm9pZCBvcmlnaW5Nb2RpZmllZChjb25zdCBRU3RyaW5n
JiBvcmlnaW5JZGVudGlmaWVyKTsKKwogcHJpdmF0ZSBzbG90czoKICAgICB2b2lkIHByb2Nlc3NX
b3JrKCk7CiAKQEAgLTMwOSw2ICszMTIsOCBAQCBwcml2YXRlOgogICAgIFFXZWJIaXN0b3J5KiBt
X3dlYkhpc3Rvcnk7CiAgICAgUVN0cmluZ0xpc3QgbV9kZXNrdG9wTm90aWZpY2F0aW9uQWxsb3dl
ZE9yaWdpbnM7CiAgICAgYm9vbCBtX2lnbm9yZURlc2t0b3BOb3RpZmljYXRpb247CisgICAgV2Vi
Q29yZTo6U3RvcmFnZVRyYWNrZXJDbGllbnRRdCogbV9sb2NhbFN0b3JhZ2VUcmFja2VyOworICAg
ICAKIH07CiAKICNlbmRpZiAvLyBMYXlvdXRUZXN0Q29udHJvbGxlclF0X2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98428</attachid>
            <date>2011-06-23 16:13:35 -0700</date>
            <delta_ts>2011-06-28 04:18:20 -0700</delta_ts>
            <desc>patch v3</desc>
            <filename>patchV3.diff</filename>
            <type>text/plain</type>
            <size>22595</size>
            <attacher name="kasthuri">kasthuri.n-s</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA4OTYzMSkKKysrIFNvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTEtMDYtMjMgIEth
c3RodXJpIFJlbmdhbiAgPGthc3RodXJpLm4tc0Bub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBBZGQgc3RvcmFnZSB0cmFja2Vy
IFdLMSBBUEkgZm9yIFF0V2ViS2l0IHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTYyNjY5CisKKyAgICAgICAgQWRkIHN0b3JhZ2UgdHJhY2tlciBX
SzEgQVBJJ3MgZm9yIHRyYWNraW5nIGxvY2FsIHN0b3JhZ2UuICAKKyAgICAgIAorICAgICAgICBU
aGUgUVdlYlNlY3VyaXR5T3JpZ2luIGNsYXNzIGFscmVhZHkgaGFzIHNvbWUgbWV0aG9kcyBmb3Ig
dHJhY2tpbmcgZGF0YWJhc2Ugc3RvcmFnZS4gIAorICAgICAgICBBZGRlZCBuZXcgQVBJJ3MgZm9y
IHRyYWNraW5nIGxvY2FsIHN0b3JhZ2UgdG8gUVdlYlNlY3VyaXR5T3JpZ2luIGNsYXNzLgorCisg
ICAgICAgIEFsc28gdGhlIGxheW91dHRlc3RzIGZvciB0aGUgc3RvcmFnZSB0cmFja2VyIHVzZXMg
dGhlIHN0b3JhZ2UgdHJhY2tlciBjbGllbnQgd2hpY2ggaXMgdXNlZCBmb3IgCisgICAgICAgIHNp
Z25hbGluZyB0aGUgdXBkYXRlcyB0byBzdG9yYWdlIHRyYWNrZXIgZGF0YWJhc2UuICBTbyBhZGRl
ZCB0aGUgc3RvcmFnZSB0cmFja2VyIGNsaWVudCB0bworICAgICAgICB3ZWJjb3Jlc3VwcG9ydC4K
KworICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6
OlFXZWJQYWdlUHJpdmF0ZSk6CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6On5RV2ViUGFnZVBy
aXZhdGUpOgorICAgICAgICAoUVdlYlBhZ2U6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNh
dGlvbnMpOgorICAgICAgICAqIEFwaS9xd2VicGFnZS5oOgorICAgICAgICAqIEFwaS9xd2VicGFn
ZV9wLmg6CisgICAgICAgICogQXBpL3F3ZWJzZWN1cml0eW9yaWdpbi5jcHA6CisgICAgICAgIChR
V2ViU2VjdXJpdHlPcmlnaW46OmFsbExvY2FsU3RvcmFnZU9yaWdpbnMpOgorICAgICAgICAoUVdl
YlNlY3VyaXR5T3JpZ2luOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2VPcmlnaW5zKToKKyAgICAgICAg
KFFXZWJTZWN1cml0eU9yaWdpbjo6ZGVsZXRlTG9jYWxTdG9yYWdlT3JpZ2luKToKKyAgICAgICAg
KFFXZWJTZWN1cml0eU9yaWdpbjo6bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKToKKyAg
ICAgICAgKFFXZWJTZWN1cml0eU9yaWdpbjo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgICog
QXBpL3F3ZWJzZWN1cml0eW9yaWdpbi5oOgorICAgICAgICAqIEFwaS9xd2Vic2V0dGluZ3MuY3Bw
OgorICAgICAgICAoUVdlYlNldHRpbmdzOjpzZXRMb2NhbFN0b3JhZ2VQYXRoKToKKyAgICAgICAg
KiBRdFdlYktpdC5wcm86CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQuY3BwOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Om9yaWdpbnNX
aXRoTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkZWxl
dGVBbGxMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmRl
bGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbik6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpzeW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L1N0b3JhZ2VUcmFja2VyQ2xpZW50UXQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyQ2xpZW50UXQ6OlN0b3JhZ2VUcmFja2VyQ2xpZW50
UXQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXJDbGllbnRRdDo6flN0b3JhZ2VU
cmFja2VyQ2xpZW50UXQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXJDbGllbnRR
dDo6ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4pOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1N0
b3JhZ2VUcmFja2VyQ2xpZW50UXQuaDogQWRkZWQuCisKIDIwMTEtMDYtMjMgIEpvZSBXaWxkICA8
am9zZXBoLndpbGRAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IExhc3psbyBHb21i
b3MuCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L1F0V2ViS2l0LnBybwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L3F0L1F0V2ViS2l0LnBybwkocmV2aXNpb24gODk2MTApCisrKyBTb3VyY2Uv
V2ViS2l0L3F0L1F0V2ViS2l0LnBybwkod29ya2luZyBjb3B5KQpAQCAtMjEwLDYgKzIxMCwxNCBA
QCB3ZWJraXQyIHsKICAgICBTT1VSQ0VTICs9ICQkV0VCS0lUMl9BUElfU09VUkNFUwogfQogCitj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfRE9NX1NUT1JBR0U9MSkgeworICAgIEhFQURFUlMgKz0g
XAorICAgICAgICAkJFBXRC9XZWJDb3JlU3VwcG9ydC9TdG9yYWdlVHJhY2tlckNsaWVudFF0LmgK
KworICAgIFNPVVJDRVMgKz0gXAorICAgICAgICAkJFBXRC9XZWJDb3JlU3VwcG9ydC9TdG9yYWdl
VHJhY2tlckNsaWVudFF0LmNwcAorfQorCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfTkVUU0NB
UEVfUExVR0lOX0FQST0xKSB7CiAgICAgdW5peDohc3ltYmlhbiB7CiAgICAgICAgIG1hZW1vNSB7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCShyZXZpc2lvbiA4OTYxMCkKKysrIFNv
dXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYg
KzEwNCw3IEBACiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW4uaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0b3JhZ2VUcmFja2VyQ2xp
ZW50UXQuaCIKICNpZiBkZWZpbmVkIFFfT1NfV0lOMzIKICNpbmNsdWRlICJTeXN0ZW1JbmZvLmgi
CiAjZW5kaWYgLy8gUV9PU19XSU4zMgpAQCAtMzcwLDYgKzM3MSwxMCBAQCBRV2ViUGFnZVByaXZh
dGU6OlFXZWJQYWdlUHJpdmF0ZShRV2ViUGFnCiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpICAg
IAogICAgIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojpub3RpZmljYXRpb25QcmVzZW50
ZXIoKS0+YWRkQ2xpZW50KCk7CiAjZW5kaWYKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAg
ICBtX2xvY2FsU3RvcmFnZVRyYWNrZXIgPSBuZXcgV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXJDbGll
bnRRdCgpOworI2VuZGlmCiB9CiAKIFFXZWJQYWdlUHJpdmF0ZTo6flFXZWJQYWdlUHJpdmF0ZSgp
CkBAIC0zOTQsNiArMzk5LDcgQEAgUVdlYlBhZ2VQcml2YXRlOjp+UVdlYlBhZ2VQcml2YXRlKCkK
ICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKICAgICBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGll
bnRRdDo6bm90aWZpY2F0aW9uUHJlc2VudGVyKCktPnJlbW92ZUNsaWVudCgpOwogI2VuZGlmCisg
ICAgZGVsZXRlIG1fbG9jYWxTdG9yYWdlVHJhY2tlcjsKIH0KIAogV2ViQ29yZTo6Vmlld3BvcnRB
cmd1bWVudHMgUVdlYlBhZ2VQcml2YXRlOjp2aWV3cG9ydEFyZ3VtZW50cygpCkBAIC0zOTQ3LDYg
KzM5NTMsMTMgQEAgdm9pZCBRV2ViUGFnZVByaXZhdGU6Ol9xX29uTG9hZFByb2dyZXNzQwogICAg
IG1fYnl0ZXNSZWNlaXZlZCA9IHBhZ2UtPnByb2dyZXNzKCktPnRvdGFsQnl0ZXNSZWNlaXZlZCgp
OwogfQogCit2b2lkIFFXZWJQYWdlOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25z
KCkKK3sKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgUU9iamVjdDo6Y29ubmVjdChkLT5t
X2xvY2FsU3RvcmFnZVRyYWNrZXIsIFNJR05BTChvcmlnaW5Nb2RpZmllZChjb25zdCBRU3RyaW5n
JikpLCB0aGlzLCBTSUdOQUwobG9jYWxTdG9yYWdlTW9kaWZpZWQoY29uc3QgUVN0cmluZyYpKSwg
UXQ6OlVuaXF1ZUNvbm5lY3Rpb24pOworI2VuZGlmCit9CisKIAogLyohCiAgICAgUmV0dXJucyB0
aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2VyZSByZWNlaXZlZCBmcm9tIHRoZSBuZXR3
b3JrIHRvIHJlbmRlciB0aGUgY3VycmVudCBwYWdlLApJbmRleDogU291cmNlL1dlYktpdC9xdC9B
cGkvcXdlYnBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFn
ZS5oCShyZXZpc2lvbiA4OTYxMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM2NSw2ICszNjUsOCBAQCBwdWJsaWM6CiAKICAgICBpbmxpbmUg
UVdlYlBhZ2VQcml2YXRlKiBoYW5kbGUoKSBjb25zdCB7IHJldHVybiBkOyB9CiAKKyAgICB2b2lk
IG9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMoKTsKKwogcHVibGljIFFfU0xPVFM6
CiAgICAgYm9vbCBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCk7CiAKQEAgLTQwNCw2ICs0MDYs
OCBAQCBRX1NJR05BTFM6CiAgICAgdm9pZCBmZWF0dXJlUGVybWlzc2lvblJlcXVlc3RlZChRV2Vi
RnJhbWUqIGZyYW1lLCBRV2ViUGFnZTo6RmVhdHVyZSBmZWF0dXJlKTsKICAgICB2b2lkIGZlYXR1
cmVQZXJtaXNzaW9uUmVxdWVzdENhbmNlbGVkKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpG
ZWF0dXJlIGZlYXR1cmUpOwogCisgICAgdm9pZCBsb2NhbFN0b3JhZ2VNb2RpZmllZChjb25zdCBR
U3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgUVdl
YlBhZ2UgKmNyZWF0ZVdpbmRvdyhXZWJXaW5kb3dUeXBlIHR5cGUpOwogICAgIHZpcnR1YWwgUU9i
amVjdCAqY3JlYXRlUGx1Z2luKGNvbnN0IFFTdHJpbmcgJmNsYXNzaWQsIGNvbnN0IFFVcmwgJnVy
bCwgY29uc3QgUVN0cmluZ0xpc3QgJnBhcmFtTmFtZXMsIGNvbnN0IFFTdHJpbmdMaXN0ICZwYXJh
bVZhbHVlcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZV9wLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2VfcC5oCShyZXZpc2lvbiA4OTYx
MCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlX3AuaAkod29ya2luZyBjb3B5KQpA
QCAtNTQsNiArNTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgTm9kZUxpc3Q7
CiAgICAgY2xhc3MgUGFnZTsKICAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBTdG9yYWdlVHJh
Y2tlckNsaWVudFF0OwogfQogCiBRVF9CRUdJTl9OQU1FU1BBQ0UKQEAgLTIxMiw2ICsyMTMsOCBA
QCBwdWJsaWM6CiAgICAgUXQ6OkRyb3BBY3Rpb24gbV9sYXN0RHJvcEFjdGlvbjsKIAogICAgIHN0
YXRpYyBib29sIGRydFJ1bjsKKworICAgIFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyQ2xpZW50UXQq
IG1fbG9jYWxTdG9yYWdlVHJhY2tlcjsKIH07CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktp
dC9xdC9BcGkvcXdlYnNlY3VyaXR5b3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2Vic2VjdXJpdHlvcmlnaW4uY3BwCShyZXZpc2lvbiA4OTYxMCkKKysrIFNv
dXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZWN1cml0eW9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyLDYgKzIyLDkgQEAKIAogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgi
CiAjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQor
I2luY2x1ZGUgIlN0b3JhZ2VUcmFja2VyLmgiCisjZW5kaWYKICNpbmNsdWRlICJLVVJMLmgiCiAj
aW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgpA
QCAtMjY3LDMgKzI3MCw2NiBAQCBRU3RyaW5nTGlzdCBRV2ViU2VjdXJpdHlPcmlnaW46OmxvY2Fs
U2NoCiAgICAgfQogICAgIHJldHVybiBsaXN0OwogfQorCisvKiEKKyAgICBSZXR1cm5zIGEgbGlz
dCBvZiBhbGwgc2VjdXJpdHkgb3JpZ2lucyB3aXRoIGxvY2FsIHN0b3JhZ2UuCisqLworUUxpc3Q8
UVdlYlNlY3VyaXR5T3JpZ2luPiBRV2ViU2VjdXJpdHlPcmlnaW46OmFsbExvY2FsU3RvcmFnZU9y
aWdpbnMoKQoreworICAgIFFMaXN0PFFXZWJTZWN1cml0eU9yaWdpbj4gd2ViT3JpZ2luczsKKwor
I2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICBWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiA+IGNvcmVPcmlnaW5zOworICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkub3JpZ2lucyhj
b3JlT3JpZ2lucyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvcmVPcmlnaW5zLnNp
emUoKTsgKytpKSB7CisgICAgICAgIFFXZWJTZWN1cml0eU9yaWdpblByaXZhdGUqIHByaXYgPSBu
ZXcgUVdlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZShjb3JlT3JpZ2luc1tpXS5nZXQoKSk7CisgICAg
ICAgIHdlYk9yaWdpbnMuYXBwZW5kKHByaXYpOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJu
IHdlYk9yaWdpbnM7Cit9CisKKy8qIQorICAgIFJlbW92ZXMgYWxsIGxvY2FsIHN0b3JhZ2Ugc2Vj
dXJpdHkgb3JpZ2lucy4KKyovCit2b2lkIFFXZWJTZWN1cml0eU9yaWdpbjo6ZGVsZXRlQWxsTG9j
YWxTdG9yYWdlT3JpZ2lucygpCit7CisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorICAgIFN0b3Jh
Z2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlQWxsT3JpZ2lucygpOworI2VuZGlmCit9CisKKy8q
IQorICAgIFJlbW92ZXMgYSBwYXJ0aWN1bGFyIHNlY3VyaXR5IG9yaWdpbiB3aGljaCBoYXMgbG9j
YWwgc3RvcmFnZS4KKyovCit2b2lkIFFXZWJTZWN1cml0eU9yaWdpbjo6ZGVsZXRlTG9jYWxTdG9y
YWdlT3JpZ2luKGNvbnN0IFFTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7CisjaWYgRU5BQkxF
KERPTV9TVE9SQUdFKQorICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9IFNlY3Vy
aXR5T3JpZ2luOjpjcmVhdGUoS1VSTChvcmlnaW5JZGVudGlmaWVyKSk7CisgICAgIFN0b3JhZ2VU
cmFja2VyOjp0cmFja2VyKCkuZGVsZXRlT3JpZ2luKG9yaWdpbi5nZXQoKSk7CisjZW5kaWYKK30K
KworLyohCisgICAgUmV0dXJucyB0aGUgZGlzayB1c2FnZSBmb3IgYSBwYXJ0aWN1bGFyIHNlY3Vy
aXR5IG9yaWdpbi4KKyovCitsb25nIGxvbmcgUVdlYlNlY3VyaXR5T3JpZ2luOjpsb2NhbFN0b3Jh
Z2VEaXNrVXNhZ2VGb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKK3sK
KyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3Jp
Z2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShLVVJMKG9yaWdpbklkZW50aWZpZXIpKTsKKyAg
ICAgcmV0dXJuKFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkuZGlza1VzYWdlRm9yT3JpZ2luKG9y
aWdpbi5nZXQoKSkpOworI2VuZGlmCit9CisKKworLyohCisgICAgU3luY3MgbG9jYWwgc3RvcmFn
ZSBkYnMuCisqLwordm9pZCBRV2ViU2VjdXJpdHlPcmlnaW46OnN5bmNMb2NhbFN0b3JhZ2UoKQor
eworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigp
LnN5bmNMb2NhbFN0b3JhZ2UoKTsKKyNlbmRpZgorfQorCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2Vic2VjdXJpdHlvcmlnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2Vic2VjdXJpdHlvcmlnaW4uaAkocmV2aXNpb24gODk2MTApCisrKyBTb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2Vic2VjdXJpdHlvcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyAr
NDAsMTIgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGFkZExvY2FsU2NoZW1lKGNvbnN0IFFT
dHJpbmcmIHNjaGVtZSk7CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlTG9jYWxTY2hlbWUoY29uc3Qg
UVN0cmluZyYgc2NoZW1lKTsKICAgICBzdGF0aWMgUVN0cmluZ0xpc3QgbG9jYWxTY2hlbWVzKCk7
Ci0KKyAgICBzdGF0aWMgUUxpc3Q8UVdlYlNlY3VyaXR5T3JpZ2luPiBhbGxMb2NhbFN0b3JhZ2VP
cmlnaW5zKCk7CisgICAgc3RhdGljIHZvaWQgZGVsZXRlQWxsTG9jYWxTdG9yYWdlT3JpZ2lucygp
OworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZU9yaWdpbihjb25zdCBRU3RyaW5n
JiBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBzdGF0aWMgbG9uZyBsb25nIGxvY2FsU3RvcmFnZURp
c2tVc2FnZUZvck9yaWdpbihjb25zdCBRU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBz
dGF0aWMgdm9pZCBzeW5jTG9jYWxTdG9yYWdlKCk7CisgIAogICAgIH5RV2ViU2VjdXJpdHlPcmln
aW4oKTsKIAogICAgIFFTdHJpbmcgc2NoZW1lKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQv
QXBpL3F3ZWJzZXR0aW5ncy5jcHAJKHJldmlzaW9uIDg5NjEwKQorKysgU291cmNlL1dlYktpdC9x
dC9BcGkvcXdlYnNldHRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsOSBAQAog
I2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5o
IgogI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgorI2lmIEVOQUJMRShET01fU1RPUkFHRSkK
KyNpbmNsdWRlICJTdG9yYWdlVHJhY2tlci5oIgorI2VuZGlmCiAjaW5jbHVkZSAiRmlsZVN5c3Rl
bS5oIgogCiAjaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgpAQCAtMTA2OCw2ICsxMDcxLDkgQEAgdm9p
ZCBRV2ViU2V0dGluZ3M6OnNldExvY2FsU3RvcmFnZVBhdGgoYwogewogICAgIGQtPmxvY2FsU3Rv
cmFnZVBhdGggPSBwYXRoOwogICAgIGQtPmFwcGx5KCk7CisjaWYgRU5BQkxFKERPTV9TVE9SQUdF
KQorICAgIFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyOjppbml0aWFsaXplVHJhY2tlcihwYXRoKTsK
KyNlbmRpZgogfQogCiAvKiEKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCShyZXZpc2lvbiA4
OTYxMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw3IEBACiAjaW5jbHVkZSAi
cXdlYnBhZ2UuaCIKICNpbmNsdWRlICJxd2VicGFnZV9wLmgiCiAjaW5jbHVkZSAicXdlYnNjcmlw
dHdvcmxkLmgiCisjaW5jbHVkZSAicXdlYnNlY3VyaXR5b3JpZ2luLmgiCiAKICNpZiBFTkFCTEUo
VklERU8pICYmIFVTRShRVF9NVUxUSU1FRElBKQogI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQu
aCIKQEAgLTExNTcsNiArMTE1OCw1NCBAQCBRU3RyaW5nIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpsYXllclRyCiAgICAgcmV0dXJuIGNvcmVGcmFtZS0+bGF5ZXJUcmVlQXNUZXh0KCk7CiB9CiAK
K1FWYXJpYW50TGlzdCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6b3JpZ2luc1dpdGhMb2NhbFN0
b3JhZ2UoKQoreworICAgIFFWYXJpYW50TGlzdCByZXM7CisgICAgUVN0cmluZyBvcmlnaW5EZWxp
bWV0ZXIgPSBRU3RyaW5nKFFMYXRpbjFDaGFyKCdfJykpOworICAgIFFMaXN0PFFXZWJTZWN1cml0
eU9yaWdpbj4gcmV0OworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICByZXQgPSBRV2ViU2Vj
dXJpdHlPcmlnaW46OmFsbExvY2FsU3RvcmFnZU9yaWdpbnMoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcmV0LnNpemUoKTsgKytpKSAKKyAgICAgICAgcmVzLmFwcGVuZChyZXRbaV0u
c2NoZW1lKCkgKyBvcmlnaW5EZWxpbWV0ZXIgKyByZXRbaV0uaG9zdCgpICsgb3JpZ2luRGVsaW1l
dGVyICsgUVN0cmluZyhyZXRbaV0ucG9ydCgpKSk7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzOwor
fQorCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkZWxldGVBbGxMb2NhbFN0b3JhZ2Uo
KQoreworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICBRV2ViU2VjdXJpdHlPcmlnaW46OmRl
bGV0ZUFsbExvY2FsU3RvcmFnZU9yaWdpbnMoKTsKKyNlbmRpZgorfQorCit2b2lkIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oY29uc3QgUVN0cmlu
ZyYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgUVdl
YlNlY3VyaXR5T3JpZ2luOjpkZWxldGVMb2NhbFN0b3JhZ2VPcmlnaW4ob3JpZ2luSWRlbnRpZmll
cik7CisjZW5kaWYKK30KKworbG9uZyBsb25nIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpsb2Nh
bFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luSWRlbnRpZmll
cikKK3sKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgcmV0dXJuKFFXZWJTZWN1cml0eU9y
aWdpbjo6bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKG9yaWdpbklkZW50aWZpZXIpKTsK
KyNlbmRpZgorfQorCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzeW5jTG9jYWxTdG9y
YWdlKCkKK3sKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgUVdlYlNlY3VyaXR5T3JpZ2lu
OjpzeW5jTG9jYWxTdG9yYWdlKCk7CisjZW5kaWYKK30KKwordm9pZCBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyhRV2ViUGFnZSogcGFn
ZSkKK3sKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgcGFnZS0+b2JzZXJ2ZVN0b3JhZ2VU
cmFja2VyTm90aWZpY2F0aW9ucygpOworI2VuZGlmCit9CisKIHZvaWQgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6OmluamVjdEludGVybmFsc09iamVjdChRV2ViRnJhbWUqIGZyYW1lKQogewogICAg
IFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKGZyYW1l
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmgJKHJldmlzaW9uIDg5NjEwKQorKysgU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTUsNiArMjE1LDEzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUVN0cmluZyBz
aGFkb3dQc2V1ZG9JZChjb25zdCBRV2ViRWxlbWVudCYpOwogCiAgICAgc3RhdGljIFFTdHJpbmcg
bGF5ZXJUcmVlQXNUZXh0KFFXZWJGcmFtZSopOworICAgIAorICAgIHN0YXRpYyBRVmFyaWFudExp
c3Qgb3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVBbGxM
b2NhbFN0b3JhZ2UoKTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmln
aW4oY29uc3QgUVN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7CisgICAgc3RhdGljIGxvbmcgbG9u
ZyBsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luSWRl
bnRpZmllcik7CisgICAgc3RhdGljIHZvaWQgc3luY0xvY2FsU3RvcmFnZSgpOworICAgIHN0YXRp
YyB2b2lkIG9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMoUVdlYlBhZ2UqKTsKIAog
ICAgIHN0YXRpYyB2b2lkIGluamVjdEludGVybmFsc09iamVjdChRV2ViRnJhbWUqKTsKIH07Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1N0b3JhZ2VUcmFja2VyQ2xpZW50
UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvU3Rv
cmFnZVRyYWNrZXJDbGllbnRRdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L1N0b3JhZ2VUcmFja2VyQ2xpZW50UXQuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0b3Jh
Z2VUcmFja2VyQ2xpZW50UXQuaCIKKworI2luY2x1ZGUgIlN0b3JhZ2VUcmFja2VyLmgiCisjaW5j
bHVkZSAiU3RvcmFnZVRyYWNrZXJDbGllbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitT
dG9yYWdlVHJhY2tlckNsaWVudFF0OjpTdG9yYWdlVHJhY2tlckNsaWVudFF0KCkKK3sKKyAgICBT
dG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLnNldENsaWVudCh0aGlzKTsKK30KKworU3RvcmFnZVRy
YWNrZXJDbGllbnRRdDo6flN0b3JhZ2VUcmFja2VyQ2xpZW50UXQoKQoreworfQorCit2b2lkIFN0
b3JhZ2VUcmFja2VyQ2xpZW50UXQ6OmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKGNvbnN0IFN0cmlu
ZyYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyAgICBlbWl0IG9yaWdpbk1vZGlmaWVkKG9yaWdpbklk
ZW50aWZpZXIpOworfQorCit9CisKKyNpbmNsdWRlICJtb2NfU3RvcmFnZVRyYWNrZXJDbGllbnRR
dC5jcHAiCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1N0b3JhZ2VUcmFj
a2VyQ2xpZW50UXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1N0b3JhZ2VUcmFja2VyQ2xpZW50UXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvU3RvcmFnZVRyYWNrZXJDbGllbnRRdC5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFN0b3JhZ2VUcmFja2VyQ2xpZW50UXRfaAor
I2RlZmluZSBTdG9yYWdlVHJhY2tlckNsaWVudFF0X2gKKworI2luY2x1ZGUgIlN0b3JhZ2VUcmFj
a2VyQ2xpZW50LmgiCisjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorI2luY2x1ZGUgPFF0Q29y
ZS9RT2JqZWN0PgorI2luY2x1ZGUgPFF0Q29yZS9xc3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhIGltcGxlbWVudGF0aW9uIGZvciBTdG9y
YWdlVHJhY2tlckNsaWVudCBmb3IgcXRXZWJraXQuCitjbGFzcyBRV0VCS0lUX0VYUE9SVCBTdG9y
YWdlVHJhY2tlckNsaWVudFF0IDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBTdG9yYWdlVHJhY2tl
ckNsaWVudCB7CisgICAgUV9PQkpFQ1QKKworcHVibGljOgorICAgIFN0b3JhZ2VUcmFja2VyQ2xp
ZW50UXQoKTsKKyAgICB2aXJ0dWFsIH5TdG9yYWdlVHJhY2tlckNsaWVudFF0KCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5J
ZGVudGlmaWVyKTsKKworUV9TSUdOQUxTOgorICAgIHZvaWQgb3JpZ2luTW9kaWZpZWQoY29uc3Qg
UVN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBTdG9yYWdlVHJhY2tlckNsaWVudFF0X2gKSW5kZXg6IFRvb2xzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDg5NjMxKQorKysg
VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDYt
MjMgIEthc3RodXJpIFJlbmdhbiAgPGthc3RodXJpLm4tc0Bub2tpYS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBBZGQgc3RvcmFnZSB0
cmFja2VyIFdLMSBBUEkgZm9yIFF0V2ViS2l0IHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjY5CisgICAgICAgCisgICAgICAgIEltcGxlbWVu
dGVkIHRoZSBuZXcgbWV0aG9kcyByZXF1aXJlZCBmb3IgdGVzdGluZworICAgICAgICBRdCBzdG9y
YWdlIHRyYWNrZXIgQVBJJ3MKKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRl
c3RDb250cm9sbGVyUXQuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxvY2Fs
U3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKExheW91dFRlc3RDb250
cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKToKKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKExheW91dFRl
c3RDb250cm9sbGVyOjpvcmlnaW5Nb2RpZmllZCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
cXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oOgorCiAyMDExLTA2LTIzICBBbG9rIFByaXlhZGFy
c2hpICA8YWxva3BAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJv
Ymluc29uLgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xs
ZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVz
dENvbnRyb2xsZXJRdC5jcHAJKHJldmlzaW9uIDg5NjEwKQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3MSw4
ICs1NzEsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFwcGxpY2F0CiAKIGxv
bmcgbG9uZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3Jp
Z2luKGNvbnN0IFFTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCiB7Ci0gICAgLy8gRklYTUU6IElt
cGxlbWVudCB0byBzdXBwb3J0IGdldHRpbmcgZGlzayB1c2FnZSBpbiBieXRlcyBmb3IgYW4gb3Jp
Z2luLgotICAgIHJldHVybiAwOworICAgIHJldHVybihEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKG9yaWdpbklkZW50aWZpZXIpKTsKIH0KIAog
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3Rh
KHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKQEAgLTkyOSwyOSArOTI4LDM2IEBAIHZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldE1pbmltdW1UaW0KICAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwobV9kcnQtPndlYlBhZ2UoKSwgbWluaW11bVRp
bWVySW50ZXJ2YWwpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0
aExvY2FsU3RvcmFnZSgpCitRVmFyaWFudExpc3QgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdp
bnNXaXRoTG9jYWxTdG9yYWdlKCkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorICAgIHJl
dHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKTsK
IH0KIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCkK
IHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKTsKIH0KIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIG9yaWdpbklkZW50
aWZpZXIpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKG9yaWdpbklkZW50aWZpZXIpOwog
fQogCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3Rp
ZmljYXRpb25zKHVuc2lnbmVkIG51bWJlcikKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50Lgor
ICAgIFFPYmplY3Q6OmNvbm5lY3QobV9kcnQtPndlYlBhZ2UoKSwgU0lHTkFMKGxvY2FsU3RvcmFn
ZU1vZGlmaWVkKGNvbnN0IFFTdHJpbmcmKSksIHRoaXMsIFNMT1Qob3JpZ2luTW9kaWZpZWQoY29u
c3QgUVN0cmluZyYpKSwgUXQ6OlVuaXF1ZUNvbm5lY3Rpb24pOworICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKG1fZHJ0LT53ZWJQ
YWdlKCkpOyAgICAgICAgCiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2Nh
bFN0b3JhZ2UoKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCisgICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OnN5bmNMb2NhbFN0b3JhZ2UoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6b3JpZ2luTW9kaWZpZWQoY29uc3QgUVN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikK
K3sKKyAgICBwcmludGYoIk9yaWdpbiBpZGVudGlmaWVyOiAnJXMnXG4iLCBvcmlnaW5JZGVudGlm
aWVyLnRvQXNjaWkoKS5kYXRhKCkpOworICAgIG5vdGlmeURvbmUoKTsKIH0KIAogUVN0cmluZyBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6bGF5ZXJUcmVlQXNUZXh0KCkKSW5kZXg6IFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgJKHJldmlzaW9uIDg5
NjEwKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjcsNyArMjY3LDcgQEAgcHVibGljIHNsb3RzOgogCiAgICAg
dm9pZCBzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUpOwogICAgIAotICAgIHZvaWQgb3Jp
Z2luc1dpdGhMb2NhbFN0b3JhZ2UoKTsKKyAgICBRVmFyaWFudExpc3Qgb3JpZ2luc1dpdGhMb2Nh
bFN0b3JhZ2UoKTsKICAgICB2b2lkIGRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpOwogICAgIHZvaWQg
ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIG9yaWdpbklkZW50aWZp
ZXIpOwogICAgIGxvbmcgbG9uZyBsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4oY29uc3Qg
UVN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7CkBAIC0yNzYsNiArMjc2LDggQEAgcHVibGljIHNs
b3RzOgogICAgIFFTdHJpbmcgbGF5ZXJUcmVlQXNUZXh0KCk7CiAgICAgdm9pZCBzZXRUZXh0RGly
ZWN0aW9uKGNvbnN0IFFTdHJpbmcmIGRpcmVjdGlvbk5hbWUpOwogCisgICAgdm9pZCBvcmlnaW5N
b2RpZmllZChjb25zdCBRU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKwogcHJpdmF0ZSBzbG90
czoKICAgICB2b2lkIHByb2Nlc3NXb3JrKCk7CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDg5NjMxKQor
KysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTEtMDYtMjMgIEthc3RodXJpIFJlbmdhbiAgPGthc3RodXJpLm4tc0Bub2tpYS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBBZGQg
c3RvcmFnZSB0cmFja2VyIFdLMSBBUEkgZm9yIFF0V2ViS2l0IHBvcnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjY5CisgICAgICAgCisgICAgICAg
IEltcGxlbWVudGVkIHRoZSBuZXcgbWV0aG9kcyByZXF1aXJlZCBmb3IgdGVzdGluZworICAgICAg
ICBRdCBzdG9yYWdlIHRyYWNrZXIgQVBJJ3MuICBFbmFibGVkIHRoZSBTdG9yYWdlIHRyYWNrZXIK
KyAgICAgICAgdGVzdHMgZm9yIHF0IGV4Y2VwdCBzdG9yYWdlLXRyYWNrZXItNy11c2FnZS5odG1s
IGFzIGl0IGhhcyBzb21lIAorICAgICAgICBoYXJkY29kZWQgc2l6ZSB2YWx1ZS4KKworICAgICAg
ICAqIHBsYXRmb3JtL3F0L1NraXBwZWQ6CisKIDIwMTEtMDYtMjMgIEplc3NpZSBCZXJsaW4gIDxq
YmVybGluQGFwcGxlLmNvbT4KIAogICAgICAgICBjb21wb3NpdGluZy90aWxpbmcvaHVnZS1sYXll
ciogZmxha2V5CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQJKHJldmlzaW9uIDg5NjEwKQor
KysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtMTQ1
LDcgKzE0NSw3IEBAIGh0dHAvdGVzdHMvc2VjdXJpdHkvaXNvbGF0ZWRXb3JsZC9jcm9zcy0KIHBs
dWdpbnMvY2xpY2tpbmctbWlzc2luZy1wbHVnaW4tZmlyZXMtZGVsZWdhdGUuaHRtbAogCiAjIFN0
b3JhZ2VUcmFja2VyIGlzIG5vdCBlbmFibGVkLgotc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3Rv
cmFnZS9zdG9yYWdldHJhY2tlcgorc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9zdG9y
YWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItNy11c2FnZS5odG1sCiAKICMgLS0tLS0gTm8gVXNl
ciBTY3JpcHRzCiB1c2Vyc2NyaXB0cwo=
</data>
<flag name="review"
          id="92649"
          type_id="1"
          status="-"
          setter="menard"
    />
    <flag name="commit-queue"
          id="92650"
          type_id="3"
          status="-"
          setter="menard"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99087</attachid>
            <date>2011-06-29 07:17:30 -0700</date>
            <delta_ts>2011-06-30 07:00:03 -0700</delta_ts>
            <desc>patch v4</desc>
            <filename>patchv4.diff</filename>
            <type>text/plain</type>
            <size>23186</size>
            <attacher name="kasthuri">kasthuri.n-s</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA4OTYzMSkKKysrIFNvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTEtMDYtMjMgIEth
c3RodXJpIFJlbmdhbiAgPGthc3RodXJpLm4tc0Bub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBBZGQgc3RvcmFnZSB0cmFja2Vy
IFdLMSBBUEkgZm9yIFF0V2ViS2l0IHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTYyNjY5CisKKyAgICAgICAgQWRkIHN0b3JhZ2UgdHJhY2tlciBX
SzEgQVBJJ3MgZm9yIHRyYWNraW5nIGxvY2FsIHN0b3JhZ2UuICAKKyAgICAgIAorICAgICAgICBU
aGUgUVdlYlNlY3VyaXR5T3JpZ2luIGNsYXNzIGFscmVhZHkgaGFzIHNvbWUgbWV0aG9kcyBmb3Ig
dHJhY2tpbmcgZGF0YWJhc2Ugc3RvcmFnZS4gIAorICAgICAgICBBZGRlZCBuZXcgQVBJJ3MgZm9y
IHRyYWNraW5nIGxvY2FsIHN0b3JhZ2UgdG8gUVdlYlNlY3VyaXR5T3JpZ2luIGNsYXNzLgorCisg
ICAgICAgIEFsc28gdGhlIGxheW91dHRlc3RzIGZvciB0aGUgc3RvcmFnZSB0cmFja2VyIHVzZXMg
dGhlIHN0b3JhZ2UgdHJhY2tlciBjbGllbnQgd2hpY2ggaXMgdXNlZCBmb3IgCisgICAgICAgIHNp
Z25hbGluZyB0aGUgdXBkYXRlcyB0byBzdG9yYWdlIHRyYWNrZXIgZGF0YWJhc2UuICBTbyBhZGRl
ZCB0aGUgc3RvcmFnZSB0cmFja2VyIGNsaWVudCB0bworICAgICAgICB3ZWJjb3Jlc3VwcG9ydC4K
KworICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6
OlFXZWJQYWdlUHJpdmF0ZSk6CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6On5RV2ViUGFnZVBy
aXZhdGUpOgorICAgICAgICAoUVdlYlBhZ2U6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNh
dGlvbnMpOgorICAgICAgICAqIEFwaS9xd2VicGFnZS5oOgorICAgICAgICAqIEFwaS9xd2VicGFn
ZV9wLmg6CisgICAgICAgICogQXBpL3F3ZWJzZWN1cml0eW9yaWdpbi5jcHA6CisgICAgICAgIChR
V2ViU2VjdXJpdHlPcmlnaW46OmFsbExvY2FsU3RvcmFnZU9yaWdpbnMpOgorICAgICAgICAoUVdl
YlNlY3VyaXR5T3JpZ2luOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2VPcmlnaW5zKToKKyAgICAgICAg
KFFXZWJTZWN1cml0eU9yaWdpbjo6ZGVsZXRlTG9jYWxTdG9yYWdlT3JpZ2luKToKKyAgICAgICAg
KFFXZWJTZWN1cml0eU9yaWdpbjo6bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKToKKyAg
ICAgICAgKFFXZWJTZWN1cml0eU9yaWdpbjo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgICog
QXBpL3F3ZWJzZWN1cml0eW9yaWdpbi5oOgorICAgICAgICAqIEFwaS9xd2Vic2V0dGluZ3MuY3Bw
OgorICAgICAgICAoUVdlYlNldHRpbmdzOjpzZXRMb2NhbFN0b3JhZ2VQYXRoKToKKyAgICAgICAg
KiBRdFdlYktpdC5wcm86CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQuY3BwOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Om9yaWdpbnNX
aXRoTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkZWxl
dGVBbGxMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmRl
bGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbik6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6bG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjpzeW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L1N0b3JhZ2VUcmFja2VyQ2xpZW50UXQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlN0b3JhZ2VUcmFja2VyQ2xpZW50UXQ6OlN0b3JhZ2VUcmFja2VyQ2xpZW50
UXQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXJDbGllbnRRdDo6flN0b3JhZ2VU
cmFja2VyQ2xpZW50UXQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXJDbGllbnRR
dDo6ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4pOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1N0
b3JhZ2VUcmFja2VyQ2xpZW50UXQuaDogQWRkZWQuCisKIDIwMTEtMDYtMjMgIEpvZSBXaWxkICA8
am9zZXBoLndpbGRAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IExhc3psbyBHb21i
b3MuCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L1F0V2ViS2l0LnBybwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L3F0L1F0V2ViS2l0LnBybwkocmV2aXNpb24gODk2MTApCisrKyBTb3VyY2Uv
V2ViS2l0L3F0L1F0V2ViS2l0LnBybwkod29ya2luZyBjb3B5KQpAQCAtMjEwLDYgKzIxMCwxNCBA
QCB3ZWJraXQyIHsKICAgICBTT1VSQ0VTICs9ICQkV0VCS0lUMl9BUElfU09VUkNFUwogfQogCitj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfRE9NX1NUT1JBR0U9MSkgeworICAgIEhFQURFUlMgKz0g
XAorICAgICAgICAkJFBXRC9XZWJDb3JlU3VwcG9ydC9TdG9yYWdlVHJhY2tlckNsaWVudFF0LmgK
KworICAgIFNPVVJDRVMgKz0gXAorICAgICAgICAkJFBXRC9XZWJDb3JlU3VwcG9ydC9TdG9yYWdl
VHJhY2tlckNsaWVudFF0LmNwcAorfQorCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfTkVUU0NB
UEVfUExVR0lOX0FQST0xKSB7CiAgICAgdW5peDohc3ltYmlhbiB7CiAgICAgICAgIG1hZW1vNSB7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCShyZXZpc2lvbiA4OTYxMCkKKysrIFNv
dXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYg
KzEwNCw3IEBACiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW4uaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0b3JhZ2VUcmFja2VyQ2xp
ZW50UXQuaCIKICNpZiBkZWZpbmVkIFFfT1NfV0lOMzIKICNpbmNsdWRlICJTeXN0ZW1JbmZvLmgi
CiAjZW5kaWYgLy8gUV9PU19XSU4zMgpAQCAtMzcwLDYgKzM3MSwxMCBAQCBRV2ViUGFnZVByaXZh
dGU6OlFXZWJQYWdlUHJpdmF0ZShRV2ViUGFnCiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpICAg
IAogICAgIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojpub3RpZmljYXRpb25QcmVzZW50
ZXIoKS0+YWRkQ2xpZW50KCk7CiAjZW5kaWYKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAg
ICBtX2xvY2FsU3RvcmFnZVRyYWNrZXIgPSBuZXcgV2ViQ29yZTo6U3RvcmFnZVRyYWNrZXJDbGll
bnRRdCgpOworI2VuZGlmCiB9CiAKIFFXZWJQYWdlUHJpdmF0ZTo6flFXZWJQYWdlUHJpdmF0ZSgp
CkBAIC0zOTQsNiArMzk5LDEwIEBAIFFXZWJQYWdlUHJpdmF0ZTo6flFXZWJQYWdlUHJpdmF0ZSgp
CiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCiAgICAgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xp
ZW50UXQ6Om5vdGlmaWNhdGlvblByZXNlbnRlcigpLT5yZW1vdmVDbGllbnQoKTsKICNlbmRpZgor
CisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorICAgIGRlbGV0ZSBtX2xvY2FsU3RvcmFnZVRyYWNr
ZXI7CisjZW5kaWYKIH0KIAogV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMgUVdlYlBhZ2VQcml2
YXRlOjp2aWV3cG9ydEFyZ3VtZW50cygpCkBAIC0zOTQ3LDYgKzM5NTYsMTkgQEAgdm9pZCBRV2Vi
UGFnZVByaXZhdGU6Ol9xX29uTG9hZFByb2dyZXNzQwogICAgIG1fYnl0ZXNSZWNlaXZlZCA9IHBh
Z2UtPnByb2dyZXNzKCktPnRvdGFsQnl0ZXNSZWNlaXZlZCgpOwogfQogCisvKiEKKyAgICBUaGlz
IGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgdXNlciBhZ2VudCB3YW50cyB0byBsaXN0ZW4gZm9y
IGxvY2FsIHN0b3JhZ2UgY2hhbmdlIG5vdGlmaWNhdGlucy4KKworICAgIE9uY2UgdGhpcyBpcyBj
YWxsZWQsIHRoZSB1c2VyIGFnZW50IGNhbiBsaXN0ZW4gdG8gc2lnbmFsICJsb2NhbFN0b3JhZ2VN
b2RpZmllZChjb25zdCBRU3RyaW5nJikiIAorICAgIHdoaWNoIGlzIHJhaXNlZCBhcyBhbmQgd2hl
biB0aGVyZSBhcmUgY2hhbmdlcyB0byBsb2NhbCBzdG9yYWdlIGRhdGEuCisqLwordm9pZCBRV2Vi
UGFnZTo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucygpCit7CisjaWYgRU5BQkxF
KERPTV9TVE9SQUdFKQorICAgIFFPYmplY3Q6OmNvbm5lY3QoZC0+bV9sb2NhbFN0b3JhZ2VUcmFj
a2VyLCBTSUdOQUwob3JpZ2luTW9kaWZpZWQoY29uc3QgUVN0cmluZyYpKSwgdGhpcywgU0lHTkFM
KGxvY2FsU3RvcmFnZU1vZGlmaWVkKGNvbnN0IFFTdHJpbmcmKSksIFF0OjpVbmlxdWVDb25uZWN0
aW9uKTsKKyNlbmRpZgorfQorCiAKIC8qIQogICAgIFJldHVybnMgdGhlIHRvdGFsIG51bWJlciBv
ZiBieXRlcyB0aGF0IHdlcmUgcmVjZWl2ZWQgZnJvbSB0aGUgbmV0d29yayB0byByZW5kZXIgdGhl
IGN1cnJlbnQgcGFnZSwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaAkocmV2aXNpb24gODk2
MTApCisrKyBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNjUsNiArMzY1LDggQEAgcHVibGljOgogCiAgICAgaW5saW5lIFFXZWJQYWdlUHJpdmF0ZSog
aGFuZGxlKCkgY29uc3QgeyByZXR1cm4gZDsgfQogCisgICAgdm9pZCBvYnNlcnZlU3RvcmFnZVRy
YWNrZXJOb3RpZmljYXRpb25zKCk7CisKIHB1YmxpYyBRX1NMT1RTOgogICAgIGJvb2wgc2hvdWxk
SW50ZXJydXB0SmF2YVNjcmlwdCgpOwogCkBAIC00MDQsNiArNDA2LDggQEAgUV9TSUdOQUxTOgog
ICAgIHZvaWQgZmVhdHVyZVBlcm1pc3Npb25SZXF1ZXN0ZWQoUVdlYkZyYW1lKiBmcmFtZSwgUVdl
YlBhZ2U6OkZlYXR1cmUgZmVhdHVyZSk7CiAgICAgdm9pZCBmZWF0dXJlUGVybWlzc2lvblJlcXVl
c3RDYW5jZWxlZChRV2ViRnJhbWUqIGZyYW1lLCBRV2ViUGFnZTo6RmVhdHVyZSBmZWF0dXJlKTsK
IAorICAgIHZvaWQgbG9jYWxTdG9yYWdlTW9kaWZpZWQoY29uc3QgUVN0cmluZyYgb3JpZ2luSWRl
bnRpZmllcik7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIFFXZWJQYWdlICpjcmVhdGVXaW5k
b3coV2ViV2luZG93VHlwZSB0eXBlKTsKICAgICB2aXJ0dWFsIFFPYmplY3QgKmNyZWF0ZVBsdWdp
bihjb25zdCBRU3RyaW5nICZjbGFzc2lkLCBjb25zdCBRVXJsICZ1cmwsIGNvbnN0IFFTdHJpbmdM
aXN0ICZwYXJhbU5hbWVzLCBjb25zdCBRU3RyaW5nTGlzdCAmcGFyYW1WYWx1ZXMpOwpJbmRleDog
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2VfcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvcXQvQXBpL3F3ZWJwYWdlX3AuaAkocmV2aXNpb24gODk2MTApCisrKyBTb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2VicGFnZV9wLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIE5vZGVMaXN0OwogICAgIGNsYXNzIFBhZ2U7
CiAgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgU3RvcmFnZVRyYWNrZXJDbGllbnRRdDsKIH0K
IAogUVRfQkVHSU5fTkFNRVNQQUNFCkBAIC0yMTIsNiArMjEzLDggQEAgcHVibGljOgogICAgIFF0
OjpEcm9wQWN0aW9uIG1fbGFzdERyb3BBY3Rpb247CiAKICAgICBzdGF0aWMgYm9vbCBkcnRSdW47
CisKKyAgICBXZWJDb3JlOjpTdG9yYWdlVHJhY2tlckNsaWVudFF0KiBtX2xvY2FsU3RvcmFnZVRy
YWNrZXI7CiB9OwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZWN1
cml0eW9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNl
Y3VyaXR5b3JpZ2luLmNwcAkocmV2aXNpb24gODk2MTApCisrKyBTb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2Vic2VjdXJpdHlvcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw5IEBA
CiAKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oIgogI2luY2x1ZGUgIkRhdGFi
YXNlVHJhY2tlci5oIgorI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyNpbmNsdWRlICJTdG9yYWdl
VHJhY2tlci5oIgorI2VuZGlmCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlNjaGVtZVJl
Z2lzdHJ5LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKQEAgLTI2NywzICsyNzAsNjYg
QEAgUVN0cmluZ0xpc3QgUVdlYlNlY3VyaXR5T3JpZ2luOjpsb2NhbFNjaAogICAgIH0KICAgICBy
ZXR1cm4gbGlzdDsKIH0KKworLyohCisgICAgUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHNlY3VyaXR5
IG9yaWdpbnMgd2l0aCBsb2NhbCBzdG9yYWdlLgorKi8KK1FMaXN0PFFXZWJTZWN1cml0eU9yaWdp
bj4gUVdlYlNlY3VyaXR5T3JpZ2luOjphbGxMb2NhbFN0b3JhZ2VPcmlnaW5zKCkKK3sKKyAgICBR
TGlzdDxRV2ViU2VjdXJpdHlPcmlnaW4+IHdlYk9yaWdpbnM7CisKKyNpZiBFTkFCTEUoRE9NX1NU
T1JBR0UpCisgICAgVmVjdG9yPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gPiBjb3JlT3JpZ2luczsK
KyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLm9yaWdpbnMoY29yZU9yaWdpbnMpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3JlT3JpZ2lucy5zaXplKCk7ICsraSkgeworICAg
ICAgICBRV2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlKiBwcml2ID0gbmV3IFFXZWJTZWN1cml0eU9y
aWdpblByaXZhdGUoY29yZU9yaWdpbnNbaV0uZ2V0KCkpOworICAgICAgICB3ZWJPcmlnaW5zLmFw
cGVuZChwcml2KTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiB3ZWJPcmlnaW5zOworfQor
CisvKiEKKyAgICBSZW1vdmVzIGFsbCBsb2NhbCBzdG9yYWdlIHNlY3VyaXR5IG9yaWdpbnMuCisq
Lwordm9pZCBRV2ViU2VjdXJpdHlPcmlnaW46OmRlbGV0ZUFsbExvY2FsU3RvcmFnZU9yaWdpbnMo
KQoreworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tl
cigpLmRlbGV0ZUFsbE9yaWdpbnMoKTsKKyNlbmRpZgorfQorCisvKiEKKyAgICBSZW1vdmVzIGxv
Y2FsIHN0b3JhZ2UgZm9yIHRoZSBwYXJ0aWN1bGFyIFxhIG9yaWdpbklkZW50aWZpZXIuCisqLwor
dm9pZCBRV2ViU2VjdXJpdHlPcmlnaW46OmRlbGV0ZUxvY2FsU3RvcmFnZU9yaWdpbihjb25zdCBR
U3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQoreworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAg
ICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRl
KEtVUkwob3JpZ2luSWRlbnRpZmllcikpOworICAgICBTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigp
LmRlbGV0ZU9yaWdpbihvcmlnaW4uZ2V0KCkpOworI2VuZGlmCit9CisKKy8qIQorICAgIFJldHVy
bnMgdGhlIGRpc2sgdXNhZ2UgZm9yIGEgcGFydGljdWxhciBcYSBvcmlnaW5JZGVudGlmaWVyLgor
Ki8KK2xvbmcgbG9uZyBRV2ViU2VjdXJpdHlPcmlnaW46OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZv
ck9yaWdpbihjb25zdCBRU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQoreworI2lmIEVOQUJMRShE
T01fU1RPUkFHRSkKKyAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBTZWN1cml0
eU9yaWdpbjo6Y3JlYXRlKEtVUkwob3JpZ2luSWRlbnRpZmllcikpOworICAgICByZXR1cm4oU3Rv
cmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5kaXNrVXNhZ2VGb3JPcmlnaW4ob3JpZ2luLmdldCgpKSk7
CisjZW5kaWYKK30KKworCisvKiEKKyAgICBTeW5jaHJvbml6ZSB0aGUgbG9jYWwgc3RvcmFnZSBk
YXRhYmFzZSB3aXRoIGxhdGVzdCBkYXRhLgorKi8KK3ZvaWQgUVdlYlNlY3VyaXR5T3JpZ2luOjpz
eW5jTG9jYWxTdG9yYWdlKCkKK3sKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgU3RvcmFn
ZVRyYWNrZXI6OnRyYWNrZXIoKS5zeW5jTG9jYWxTdG9yYWdlKCk7CisjZW5kaWYKK30KKwpJbmRl
eDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNlY3VyaXR5b3JpZ2luLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNlY3VyaXR5b3JpZ2luLmgJKHJldmlzaW9uIDg5
NjEwKQorKysgU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNlY3VyaXR5b3JpZ2luLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDcgKzQwLDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhZGRM
b2NhbFNjaGVtZShjb25zdCBRU3RyaW5nJiBzY2hlbWUpOwogICAgIHN0YXRpYyB2b2lkIHJlbW92
ZUxvY2FsU2NoZW1lKGNvbnN0IFFTdHJpbmcmIHNjaGVtZSk7CiAgICAgc3RhdGljIFFTdHJpbmdM
aXN0IGxvY2FsU2NoZW1lcygpOwotCisgICAgc3RhdGljIFFMaXN0PFFXZWJTZWN1cml0eU9yaWdp
bj4gYWxsTG9jYWxTdG9yYWdlT3JpZ2lucygpOworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUFsbExv
Y2FsU3RvcmFnZU9yaWdpbnMoKTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVMb2NhbFN0b3JhZ2VP
cmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7CisgICAgc3RhdGljIGxvbmcg
bG9uZyBsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4oY29uc3QgUVN0cmluZyYgb3JpZ2lu
SWRlbnRpZmllcik7CisgICAgc3RhdGljIHZvaWQgc3luY0xvY2FsU3RvcmFnZSgpOworICAKICAg
ICB+UVdlYlNlY3VyaXR5T3JpZ2luKCk7CiAKICAgICBRU3RyaW5nIHNjaGVtZSgpIGNvbnN0OwpJ
bmRleDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwCShyZXZpc2lvbiA4OTYxMCkK
KysrIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDYgKzQyLDkgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKKyNpZiBF
TkFCTEUoRE9NX1NUT1JBR0UpCisjaW5jbHVkZSAiU3RvcmFnZVRyYWNrZXIuaCIKKyNlbmRpZgog
I2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKIAogI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KQEAgLTEw
NjgsNiArMTA3MSw5IEBAIHZvaWQgUVdlYlNldHRpbmdzOjpzZXRMb2NhbFN0b3JhZ2VQYXRoKGMK
IHsKICAgICBkLT5sb2NhbFN0b3JhZ2VQYXRoID0gcGF0aDsKICAgICBkLT5hcHBseSgpOworI2lm
IEVOQUJMRShET01fU1RPUkFHRSkKKyAgICBXZWJDb3JlOjpTdG9yYWdlVHJhY2tlcjo6aW5pdGlh
bGl6ZVRyYWNrZXIocGF0aCk7CisjZW5kaWYKIH0KIAogLyohCkluZGV4OiBTb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0LmNwcAkocmV2aXNpb24gODk2MTApCisrKyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNiAr
ODksNyBAQAogI2luY2x1ZGUgInF3ZWJwYWdlLmgiCiAjaW5jbHVkZSAicXdlYnBhZ2VfcC5oIgog
I2luY2x1ZGUgInF3ZWJzY3JpcHR3b3JsZC5oIgorI2luY2x1ZGUgInF3ZWJzZWN1cml0eW9yaWdp
bi5oIgogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoUVRfTVVMVElNRURJQSkKICNpbmNsdWRl
ICJIVE1MVmlkZW9FbGVtZW50LmgiCkBAIC0xMTU3LDYgKzExNTgsNTMgQEAgUVN0cmluZyBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6bGF5ZXJUcgogICAgIHJldHVybiBjb3JlRnJhbWUtPmxheWVy
VHJlZUFzVGV4dCgpOwogfQogCitRVmFyaWFudExpc3QgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCkKK3sKKyAgICBRVmFyaWFudExpc3Qgd2ViT3JpZ2lu
czsKKyAgICBRTGlzdDxRV2ViU2VjdXJpdHlPcmlnaW4+IGxvY2FsU3RvcmFnZU9yaWdpbnM7Cisj
aWYgRU5BQkxFKERPTV9TVE9SQUdFKQorICAgIGxvY2FsU3RvcmFnZU9yaWdpbnMgPSBRV2ViU2Vj
dXJpdHlPcmlnaW46OmFsbExvY2FsU3RvcmFnZU9yaWdpbnMoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbG9jYWxTdG9yYWdlT3JpZ2lucy5zaXplKCk7ICsraSkgCisgICAgICAgIHdl
Yk9yaWdpbnMuYXBwZW5kKFFTdHJpbmc6OmZyb21MYXRpbjEoIiUxXyUyXyUzIikuYXJnKGxvY2Fs
U3RvcmFnZU9yaWdpbnNbaV0uc2NoZW1lKCksIGxvY2FsU3RvcmFnZU9yaWdpbnNbaV0uaG9zdCgp
LCBRVmFyaWFudChsb2NhbFN0b3JhZ2VPcmlnaW5zW2ldLnBvcnQoKSkudG9TdHJpbmcoKSkpOwor
I2VuZGlmCisgICAgcmV0dXJuIHdlYk9yaWdpbnM7Cit9CisKK3ZvaWQgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpCit7CisjaWYgRU5BQkxFKERPTV9TVE9S
QUdFKQorICAgIFFXZWJTZWN1cml0eU9yaWdpbjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlT3JpZ2lu
cygpOworI2VuZGlmCit9CisKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmRlbGV0ZUxv
Y2FsU3RvcmFnZUZvck9yaWdpbihjb25zdCBRU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQorewor
I2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICBRV2ViU2VjdXJpdHlPcmlnaW46OmRlbGV0ZUxv
Y2FsU3RvcmFnZU9yaWdpbihvcmlnaW5JZGVudGlmaWVyKTsKKyNlbmRpZgorfQorCitsb25nIGxv
bmcgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdp
bihjb25zdCBRU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQoreworI2lmIEVOQUJMRShET01fU1RP
UkFHRSkKKyAgICByZXR1cm4oUVdlYlNlY3VyaXR5T3JpZ2luOjpsb2NhbFN0b3JhZ2VEaXNrVXNh
Z2VGb3JPcmlnaW4ob3JpZ2luSWRlbnRpZmllcikpOworI2VuZGlmCit9CisKK3ZvaWQgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OnN5bmNMb2NhbFN0b3JhZ2UoKQoreworI2lmIEVOQUJMRShET01f
U1RPUkFHRSkKKyAgICBRV2ViU2VjdXJpdHlPcmlnaW46OnN5bmNMb2NhbFN0b3JhZ2UoKTsKKyNl
bmRpZgorfQorCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpvYnNlcnZlU3RvcmFnZVRy
YWNrZXJOb3RpZmljYXRpb25zKFFXZWJQYWdlKiBwYWdlKQoreworI2lmIEVOQUJMRShET01fU1RP
UkFHRSkKKyAgICBwYWdlLT5vYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKCk7Cisj
ZW5kaWYKK30KKwogdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6aW5qZWN0SW50ZXJuYWxz
T2JqZWN0KFFXZWJGcmFtZSogZnJhbWUpCiB7CiAgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFt
ZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJhbWUpOwpJbmRleDogU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQu
aAkocmV2aXNpb24gODk2MTApCisrKyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNSw2ICsyMTUsMTMg
QEAgcHVibGljOgogICAgIHN0YXRpYyBRU3RyaW5nIHNoYWRvd1BzZXVkb0lkKGNvbnN0IFFXZWJF
bGVtZW50Jik7CiAKICAgICBzdGF0aWMgUVN0cmluZyBsYXllclRyZWVBc1RleHQoUVdlYkZyYW1l
Kik7CisgICAgCisgICAgc3RhdGljIFFWYXJpYW50TGlzdCBvcmlnaW5zV2l0aExvY2FsU3RvcmFn
ZSgpOworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpOworICAgIHN0YXRp
YyB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbihjb25zdCBRU3RyaW5nJiBvcmlnaW5J
ZGVudGlmaWVyKTsKKyAgICBzdGF0aWMgbG9uZyBsb25nIGxvY2FsU3RvcmFnZURpc2tVc2FnZUZv
ck9yaWdpbihjb25zdCBRU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKKyAgICBzdGF0aWMgdm9p
ZCBzeW5jTG9jYWxTdG9yYWdlKCk7CisgICAgc3RhdGljIHZvaWQgb2JzZXJ2ZVN0b3JhZ2VUcmFj
a2VyTm90aWZpY2F0aW9ucyhRV2ViUGFnZSopOwogCiAgICAgc3RhdGljIHZvaWQgaW5qZWN0SW50
ZXJuYWxzT2JqZWN0KFFXZWJGcmFtZSopOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvU3RvcmFnZVRyYWNrZXJDbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9TdG9yYWdlVHJhY2tlckNsaWVudFF0LmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvU3RvcmFnZVRy
YWNrZXJDbGllbnRRdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3RvcmFnZVRyYWNrZXJDbGllbnRRdC5oIgorCisj
aW5jbHVkZSAiU3RvcmFnZVRyYWNrZXIuaCIKKyNpbmNsdWRlICJTdG9yYWdlVHJhY2tlckNsaWVu
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1N0b3JhZ2VUcmFja2VyQ2xpZW50UXQ6OlN0
b3JhZ2VUcmFja2VyQ2xpZW50UXQoKQoreworICAgIFN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCku
c2V0Q2xpZW50KHRoaXMpOworfQorCitTdG9yYWdlVHJhY2tlckNsaWVudFF0Ojp+U3RvcmFnZVRy
YWNrZXJDbGllbnRRdCgpCit7Cit9CisKK3ZvaWQgU3RvcmFnZVRyYWNrZXJDbGllbnRRdDo6ZGlz
cGF0Y2hEaWRNb2RpZnlPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQorewor
ICAgIGVtaXQgb3JpZ2luTW9kaWZpZWQob3JpZ2luSWRlbnRpZmllcik7Cit9CisKK30KKworI2lu
Y2x1ZGUgIm1vY19TdG9yYWdlVHJhY2tlckNsaWVudFF0LmNwcCIKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvU3RvcmFnZVRyYWNrZXJDbGllbnRRdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvU3RvcmFnZVRyYWNrZXJDbGllbnRR
dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9TdG9y
YWdlVHJhY2tlckNsaWVudFF0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgU3RvcmFnZVRyYWNrZXJDbGllbnRRdF9oCisjZGVmaW5lIFN0b3JhZ2VUcmFja2VyQ2xp
ZW50UXRfaAorCisjaW5jbHVkZSAiU3RvcmFnZVRyYWNrZXJDbGllbnQuaCIKKyNpbmNsdWRlICJx
d2Via2l0Z2xvYmFsLmgiCisjaW5jbHVkZSA8UXRDb3JlL3FvYmplY3QuaD4KKyNpbmNsdWRlIDxR
dENvcmUvcXN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRoaXMgY2xhc3Mg
cHJvdmlkZXMgYSBpbXBsZW1lbnRhdGlvbiBmb3IgU3RvcmFnZVRyYWNrZXJDbGllbnQgZm9yIHF0
V2Via2l0LgorY2xhc3MgUVdFQktJVF9FWFBPUlQgU3RvcmFnZVRyYWNrZXJDbGllbnRRdCA6IHB1
YmxpYyBRT2JqZWN0LCBwdWJsaWMgU3RvcmFnZVRyYWNrZXJDbGllbnQgeworICAgIFFfT0JKRUNU
CisKK3B1YmxpYzoKKyAgICBTdG9yYWdlVHJhY2tlckNsaWVudFF0KCk7CisgICAgdmlydHVhbCB+
U3RvcmFnZVRyYWNrZXJDbGllbnRRdCgpOworCisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlk
TW9kaWZ5T3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcik7CisKK1FfU0lHTkFM
UzoKKyAgICB2b2lkIG9yaWdpbk1vZGlmaWVkKGNvbnN0IFFTdHJpbmcmIG9yaWdpbklkZW50aWZp
ZXIpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU3RvcmFnZVRy
YWNrZXJDbGllbnRRdF9oCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA4OTYzMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDExLTA2LTIzICBLYXN0aHVyaSBSZW5nYW4gIDxr
YXN0aHVyaS5uLXNAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtRdF0gQWRkIHN0b3JhZ2UgdHJhY2tlciBXSzEgQVBJIGZvciBRdFdl
YktpdCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02MjY2OQorICAgICAgIAorICAgICAgICBJbXBsZW1lbnRlZCB0aGUgbmV3IG1ldGhvZHMgcmVx
dWlyZWQgZm9yIHRlc3RpbmcKKyAgICAgICAgUXQgc3RvcmFnZSB0cmFja2VyIEFQSSdzCisKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcDoKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmln
aW4pOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9y
YWdlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3Jh
Z2UpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZv
ck9yaWdpbik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VU
cmFja2VyTm90aWZpY2F0aW9ucyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3lu
Y0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luTW9k
aWZpZWQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVy
UXQuaDoKKwogMjAxMS0wNi0yMyAgQWxvayBQcml5YWRhcnNoaSAgPGFsb2twQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNvbi4KSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCShyZXZp
c2lvbiA4OTYxMCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9s
bGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzEsOCArNTcxLDcgQEAgdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Y2xlYXJBcHBsaWNhdAogCiBsb25nIGxvbmcgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihjb25zdCBRU3RyaW5nJiBvcmln
aW5JZGVudGlmaWVyKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBnZXR0
aW5nIGRpc2sgdXNhZ2UgaW4gYnl0ZXMgZm9yIGFuIG9yaWdpbi4KLSAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4oRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZv
ck9yaWdpbihvcmlnaW5JZGVudGlmaWVyKSk7CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVv
dGEpCkBAIC05MjksMjkgKzkyOCwzNiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRN
aW5pbXVtVGltCiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1pbmltdW1UaW1lcklu
dGVydmFsKG1fZHJ0LT53ZWJQYWdlKCksIG1pbmltdW1UaW1lckludGVydmFsKTsKIH0KIAotdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoKQorUVZhcmlh
bnRMaXN0IExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZSgpCiB7
Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCk7CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxl
bWVudC4KKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdl
KCk7CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUZv
ck9yaWdpbihjb25zdCBRU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKQogewotICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQuCisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmRlbGV0ZUxvY2FsU3Rv
cmFnZUZvck9yaWdpbihvcmlnaW5JZGVudGlmaWVyKTsKIH0KIAogdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6b2JzZXJ2ZVN0b3JhZ2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCBudW1i
ZXIpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICBRT2JqZWN0Ojpjb25uZWN0KG1f
ZHJ0LT53ZWJQYWdlKCksIFNJR05BTChsb2NhbFN0b3JhZ2VNb2RpZmllZChjb25zdCBRU3RyaW5n
JikpLCB0aGlzLCBTTE9UKG9yaWdpbk1vZGlmaWVkKGNvbnN0IFFTdHJpbmcmKSksIFF0OjpVbmlx
dWVDb25uZWN0aW9uKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6b2JzZXJ2ZVN0b3Jh
Z2VUcmFja2VyTm90aWZpY2F0aW9ucyhtX2RydC0+d2ViUGFnZSgpKTsgICAgICAgIAogfQogCiB2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKIHsKLSAgICAvLyBG
SVhNRTogSW1wbGVtZW50LgorICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzeW5jTG9jYWxT
dG9yYWdlKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbk1vZGlmaWVk
KGNvbnN0IFFTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCit7CisgICAgcHJpbnRmKCJPcmlnaW4g
aWRlbnRpZmllcjogJyVzJ1xuIiwgb3JpZ2luSWRlbnRpZmllci50b0FzY2lpKCkuZGF0YSgpKTsK
KyAgICBub3RpZnlEb25lKCk7CiB9CiAKIFFTdHJpbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omxh
eWVyVHJlZUFzVGV4dCgpCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0
Q29udHJvbGxlclF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5
b3V0VGVzdENvbnRyb2xsZXJRdC5oCShyZXZpc2lvbiA4OTYxMCkKKysrIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjY3
LDcgKzI2Nyw3IEBAIHB1YmxpYyBzbG90czoKIAogICAgIHZvaWQgc2V0TWluaW11bVRpbWVySW50
ZXJ2YWwoZG91YmxlKTsKICAgICAKLSAgICB2b2lkIG9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCk7
CisgICAgUVZhcmlhbnRMaXN0IG9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKCk7CiAgICAgdm9pZCBk
ZWxldGVBbGxMb2NhbFN0b3JhZ2UoKTsKICAgICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZUZvck9y
aWdpbihjb25zdCBRU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyKTsKICAgICBsb25nIGxvbmcgbG9j
YWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luKGNvbnN0IFFTdHJpbmcmIG9yaWdpbklkZW50aWZp
ZXIpOwpAQCAtMjc2LDYgKzI3Niw4IEBAIHB1YmxpYyBzbG90czoKICAgICBRU3RyaW5nIGxheWVy
VHJlZUFzVGV4dCgpOwogICAgIHZvaWQgc2V0VGV4dERpcmVjdGlvbihjb25zdCBRU3RyaW5nJiBk
aXJlY3Rpb25OYW1lKTsKIAorICAgIHZvaWQgb3JpZ2luTW9kaWZpZWQoY29uc3QgUVN0cmluZyYg
b3JpZ2luSWRlbnRpZmllcik7CisKIHByaXZhdGUgc2xvdHM6CiAgICAgdm9pZCBwcm9jZXNzV29y
aygpOwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA4OTYzMSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDExLTA2LTIzICBLYXN0aHVyaSBS
ZW5nYW4gIDxrYXN0aHVyaS5uLXNAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gQWRkIHN0b3JhZ2UgdHJhY2tlciBXSzEgQVBJ
IGZvciBRdFdlYktpdCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MjY2OQorICAgICAgIAorICAgICAgICBJbXBsZW1lbnRlZCB0aGUgbmV3IG1l
dGhvZHMgcmVxdWlyZWQgZm9yIHRlc3RpbmcKKyAgICAgICAgUXQgc3RvcmFnZSB0cmFja2VyIEFQ
SSdzLiAgRW5hYmxlZCB0aGUgU3RvcmFnZSB0cmFja2VyCisgICAgICAgIHRlc3RzIGZvciBxdCBl
eGNlcHQgc3RvcmFnZS10cmFja2VyLTctdXNhZ2UuaHRtbCBhcyBpdCBoYXMgc29tZSAKKyAgICAg
ICAgaGFyZGNvZGVkIHNpemUgdmFsdWUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVk
OgorCiAyMDExLTA2LTIzICBKZXNzaWUgQmVybGluICA8amJlcmxpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgY29tcG9zaXRpbmcvdGlsaW5nL2h1Z2UtbGF5ZXIqIGZsYWtleQpJbmRleDogTGF5b3V0
VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9xdC9Ta2lwcGVkCShyZXZpc2lvbiA4OTYxMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3Jt
L3F0L1NraXBwZWQJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw4ICsxNDQsOCBAQCBodHRwL3Rlc3Rz
L3NlY3VyaXR5L2lzb2xhdGVkV29ybGQvY3Jvc3MtCiAjIFRoaXMgdGVzdCBpcyBmb3IgY2xpZW50
cyB0aGF0IGNob29zZSB0byBtYWtlIHRoZSBtaXNzaW5nIHBsdWdpbiBpbmRpY2F0b3IgYSBidXR0
b24KIHBsdWdpbnMvY2xpY2tpbmctbWlzc2luZy1wbHVnaW4tZmlyZXMtZGVsZWdhdGUuaHRtbAog
Ci0jIFN0b3JhZ2VUcmFja2VyIGlzIG5vdCBlbmFibGVkLgotc3RvcmFnZS9kb21zdG9yYWdlL2xv
Y2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlcgorIyBzdG9yYWdlLXRyYWNrZXItNy11c2FnZS5odG1s
IG5lZWQgdG8gY2hlY2sgdGhlIGhhcmRjb2RlZCBzaXplIHZhbHVlLgorc3RvcmFnZS9kb21zdG9y
YWdlL2xvY2Fsc3RvcmFnZS9zdG9yYWdldHJhY2tlci9zdG9yYWdlLXRyYWNrZXItNy11c2FnZS5o
dG1sCiAKICMgLS0tLS0gTm8gVXNlciBTY3JpcHRzCiB1c2Vyc2NyaXB0cwo=
</data>
<flag name="review"
          id="93492"
          type_id="1"
          status="-"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>