<?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>136372</bug_id>
          
          <creation_ts>2014-08-29 09:29:25 -0700</creation_ts>
          <short_desc>[GTK] allow overwriting destination of download</short_desc>
          <delta_ts>2014-09-10 01:37:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>136322</dependson>
    
    <dependson>136423</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Catanzaro">mcatanzaro</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>berto</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1032167</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2014-08-29 09:29:25 -0700</bug_when>
    <thetext>When bug #136322 is fixed it will be possible for a download to overwrite an existing file on this. We should figure out if or how we want to expose this in the API. One possibility would be to implicitly allow overwrites if webkit_download_set_destination() is called. Another would be to add webkit_download_get_allow_overwrite() and webkit_download_set_allow_overwrite() or similarly-named functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032171</commentid>
    <comment_count>1</comment_count>
      <attachid>237353</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2014-08-29 09:38:08 -0700</bug_when>
    <thetext>Created attachment 237353
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032172</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-29 09:40:41 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032173</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-29 09:40:49 -0700</bug_when>
    <thetext>Attachment 237353 did not pass style-queue:


WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitDownload.h&quot;
ERROR: Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:207:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:209:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:210:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:211:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:212:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 5 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032182</commentid>
    <comment_count>4</comment_count>
      <attachid>237353</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-08-29 10:06:29 -0700</bug_when>
    <thetext>Comment on attachment 237353
Patch

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

We need a test case in the unit tests for this new API, and new symbols in the docs, see http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:205
&gt; +     */

Since: 2.6

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:213
&gt; +    g_object_class_install_property(objectClass,
&gt; +                                    PROP_ALLOW_OVERWRITE,
&gt; +                                    g_param_spec_boolean(&quot;allow-overwrite&quot;,
&gt; +                                                         _(&quot;Allow Overwrite&quot;),
&gt; +                                                         _(&quot;Whether the destination may be overwritten&quot;),
&gt; +                                                         FALSE,
&gt; +                                                         WEBKIT_PARAM_READWRITE));
&gt; +

You need to follow the coding style here regarding indentation.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:406
&gt; -CString webkitDownloadDecideDestinationWithSuggestedFilename(WebKitDownload* download, const CString&amp; suggestedFilename)
&gt; +CString webkitDownloadDecideDestinationWithSuggestedFilename(WebKitDownload* download, const CString&amp; suggestedFilename, bool* allowOverwrite)

The public C API uses a pointer for the out parameter but here we can use a reference instead. We should move this to use API::DownloadClient at some point instead of the C API.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:413
&gt; +    if (allowOverwrite)
&gt; +        *allowOverwrite = download-&gt;priv-&gt;allowOverwrite;

We should always receive a reference.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:611
&gt; + * Returns the current value of the #WebKitDownload::allow-overwrite property,

:: is for signals, for properties use a single :

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:615
&gt; + * Returns: the current value of the #WebKitDownload::allow-overwrite property

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:629
&gt; + * @allowed: the new value for the #WebKitDownload::allow-overwrite property

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:631
&gt; + * Sets the #WebKitDownload::allow-overwrite property, which determines whether

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032423</commentid>
    <comment_count>5</comment_count>
      <attachid>237436</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2014-08-31 16:17:33 -0700</bug_when>
    <thetext>Created attachment 237436
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032424</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2014-08-31 16:21:40 -0700</bug_when>
    <thetext>I&apos;m concerned that we emit the &quot;created-destination&quot; signal after the temporary destination has been created, rather than after the final destination has been created. There doesn&apos;t seem to be any way to fix this without violating the documented behavior that it&apos;s emitted before &quot;received-data&quot; :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032427</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2014-08-31 17:08:39 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; I&apos;m concerned that we emit the &quot;created-destination&quot; signal after the temporary destination has been created, rather than after the final destination has been created. There doesn&apos;t seem to be any way to fix this without violating the documented behavior that it&apos;s emitted before &quot;received-data&quot; :/

I guess we could create the destination early, potentially failing if it already exists, leave it empty, and copy over it later. Not sure why that didn&apos;t seem obvious to me earlier....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032451</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-01 01:08:56 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; I&apos;m concerned that we emit the &quot;created-destination&quot; signal after the temporary destination has been created, rather than after the final destination has been created. There doesn&apos;t seem to be any way to fix this without violating the documented behavior that it&apos;s emitted before &quot;received-data&quot; :/
&gt; 
&gt; I guess we could create the destination early, potentially failing if it already exists, leave it empty, and copy over it later. Not sure why that didn&apos;t seem obvious to me earlier....

hmm, you are right, but in that case we would always use G_FILE_COPY_OVERWRITE for g_file_move() and when creating the file in didReceiveResponse() only when allowOverwrite is true. If that fails we would not even create the temporary file. That would also save the race condition of the destination doesn&apos;t exist when the download start, but exists when it finishes, and might be overwritten.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032453</commentid>
    <comment_count>9</comment_count>
      <attachid>237436</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-01 01:24:11 -0700</bug_when>
    <thetext>Comment on attachment 237436
Patch

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

&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:159
&gt; +        webkit_download_set_allow_overwrite(download, m_allowOverwrite);

Add an assert here to check that false is always the default and another assert after the set() to check that the get() now returns true.

&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:222
&gt; +    const char* filename = &quot;test.pdf&quot;;

static const char*

&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:229
&gt; +    const char* filename = &quot;test.pdf&quot;;

static const char*

&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:240
&gt; +    const char* filename = &quot;test.pdf&quot;;

static const char*

&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:258
&gt; +    Vector&lt;DownloadTest::DownloadEvent&gt;&amp; events = test-&gt;m_downloadEvents;
&gt; +    g_assert_cmpint(events.size(), ==, 6);
&gt; +    g_assert_cmpint(events[0], ==, DownloadTest::Started);
&gt; +    g_assert_cmpint(events[1], ==, DownloadTest::ReceivedResponse);
&gt; +    g_assert_cmpint(events[2], ==, DownloadTest::CreatedDestination);
&gt; +    g_assert_cmpint(events[3], ==, DownloadTest::ReceivedData);
&gt; +    g_assert_cmpint(events[4], ==, DownloadTest::Failed);
&gt; +    g_assert_cmpint(events[5], ==, DownloadTest::Finished);
&gt; +    g_assert_cmpfloat(webkit_download_get_estimated_progress(additionalDownload.get()), ==, 1);

You should use a DownloadErrorTest to check the actual error is the expected one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032461</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-01 02:10:12 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; I&apos;m concerned that we emit the &quot;created-destination&quot; signal after the temporary destination has been created, rather than after the final destination has been created. There doesn&apos;t seem to be any way to fix this without violating the documented behavior that it&apos;s emitted before &quot;received-data&quot; :/
&gt; &gt; 
&gt; &gt; I guess we could create the destination early, potentially failing if it already exists, leave it empty, and copy over it later. Not sure why that didn&apos;t seem obvious to me earlier....
&gt; 
&gt; hmm, you are right, but in that case we would always use G_FILE_COPY_OVERWRITE for g_file_move() and when creating the file in didReceiveResponse() only when allowOverwrite is true. If that fails we would not even create the temporary file. That would also save the race condition of the destination doesn&apos;t exist when the download start, but exists when it finishes, and might be overwritten.

See https://bugs.webkit.org/show_bug.cgi?id=136423</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032520</commentid>
    <comment_count>11</comment_count>
      <attachid>237460</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2014-09-01 13:17:12 -0700</bug_when>
    <thetext>Created attachment 237460
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032583</commentid>
    <comment_count>12</comment_count>
      <attachid>237460</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-02 01:53:33 -0700</bug_when>
    <thetext>Comment on attachment 237460
Patch

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

Once patch in bug #136423 lands we should probably check also that the destination file exists when decided destination callback is called.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:124
&gt; +    case PROP_ALLOW_OVERWRITE:
&gt; +        g_value_set_boolean(value, webkit_download_get_allow_overwrite(download));
&gt;      default:

break;

&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:162
&gt; +        ASSERT(!webkit_download_get_allow_overwrite(download));
&gt; +        webkit_download_set_allow_overwrite(download, m_allowOverwrite);
&gt; +        ASSERT(webkit_download_get_allow_overwrite(download) == m_allowOverwrite);

Use g_assert() instead of ASSERT(), because ASSERT() is noop in release builds but we want unit tests to fail also in release builds.

&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:234
&gt; +    static const char* filename = &quot;test.pdf&quot;;
&gt; +    GRefPtr&lt;WebKitDownload&gt; originalDownload = downloadLocalFileSuccessfully(test, filename);
&gt; +    test-&gt;checkDestination(originalDownload.get(), filename);

I guess we could just create the file to ensure it exists instead of doing the download. That way we don&apos;t need to change the checkDestinationAndDeleteFile()

&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:238
&gt; +    test-&gt;m_allowOverwrite = true;
&gt; +    GRefPtr&lt;WebKitDownload&gt; additionalDownload = downloadLocalFileSuccessfully(test, filename);
&gt; +    test-&gt;checkDestinationAndDeleteFile(additionalDownload.get(), filename);

This should work when the destination file exists no matter if it was a previous download or created by us manually. I think it would simply the test

&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:247
&gt; +        , m_permitSuccess(false)

I would use m_expectedToFail, initialized to true

&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:-222
&gt; -    void receivedResponse(WebKitDownload* download)
&gt; -    {
&gt; -        DownloadTest::receivedResponse(download);
&gt; -    }

Why did you delete this?

&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:269
&gt; -        if (m_expectedError != WEBKIT_DOWNLOAD_ERROR_DESTINATION) {
&gt; +        if (m_permitSuccess || m_expectedError != WEBKIT_DOWNLOAD_ERROR_DESTINATION) {

Since now we are going to handle several cases of destination failure, I think we could use our own internal enum, for errors, possible including None (if we really need to handle of not failure). Then we could have InvalidDestination to set here and invalid dest, and DestinationExists, to set the right destination here

&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:285
&gt; +    static const char* filename = &quot;test.pdf&quot;;
&gt; +    test-&gt;m_permitSuccess = true;
&gt; +    GRefPtr&lt;WebKitDownload&gt; originalDownload = downloadLocalFileSuccessfully(test, filename);
&gt; +    test-&gt;checkDestination(originalDownload.get(), filename);

Same here about the download, just create the file and then you don&apos;t need the special case of a DownloadErrorTest that doesn&apos;t fail.

&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:288
&gt; +    test-&gt;m_permitSuccess = false;

I don&apos;t think this is working, this combination makes the test set an invalid destination in decideDestination(), so this will fail because of the invalid destination and not because of the destination file already exists.

&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:303
&gt; +    test-&gt;checkDestinationAndDeleteFile(originalDownload.get(), filename);

I&apos;ve noticed we are using this in all download error tests, but I guess we should check the files don&apos;t exist at this point, since they are supposed to be deleted by the web process when the download fails or is cancelled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033694</commentid>
    <comment_count>13</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2014-09-06 15:40:41 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:-222
&gt; &gt; -    void receivedResponse(WebKitDownload* download)
&gt; &gt; -    {
&gt; &gt; -        DownloadTest::receivedResponse(download);
&gt; &gt; -    }
&gt; 
&gt; Why did you delete this?

I guess I should not have in this patch, since it&apos;s not related. I removed it because it wasn&apos;t doing anything (it&apos;s an override of a virtual function that just calls the parent class&apos;s version of that function).

&gt; &gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:288
&gt; &gt; +    test-&gt;m_permitSuccess = false;
&gt; 
&gt; I don&apos;t think this is working, this combination makes the test set an invalid destination in decideDestination(), so this will fail because of the invalid destination and not because of the destination file already exists.

Yes, this test was really broken, sorry.

&gt; I&apos;ve noticed we are using this in all download error tests, but I guess we should check the files don&apos;t exist at this
&gt; point, since they are supposed to be deleted by the web process when the download fails or is cancelled.

Well, if the download fails because the file already exists, as would be the case here, that wouldn&apos;t make sense.  But it would be good for the other test cases, yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033699</commentid>
    <comment_count>14</comment_count>
      <attachid>237747</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2014-09-06 16:57:05 -0700</bug_when>
    <thetext>Created attachment 237747
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034243</commentid>
    <comment_count>15</comment_count>
      <attachid>237747</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-10 01:02:23 -0700</bug_when>
    <thetext>Comment on attachment 237747
Patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034246</commentid>
    <comment_count>16</comment_count>
      <attachid>237747</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-10 01:37:27 -0700</bug_when>
    <thetext>Comment on attachment 237747
Patch

Clearing flags on attachment: 237747

Committed r173456: &lt;http://trac.webkit.org/changeset/173456&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034247</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-10 01:37:35 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237353</attachid>
            <date>2014-08-29 09:38:08 -0700</date>
            <delta_ts>2014-08-31 16:17:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136372-20140829113801.patch</filename>
            <type>text/plain</type>
            <size>10027</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyOTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOGUxMzcwNjUxNmZhYzA3
YTQ4YmExYzZjZGQzNTM3NTdjNjM3NDcyNS4uMDA5N2Q0ZGE2ZTg5NjQ0YTFkYTk3NmFjNTFiNzVk
YWNmNjk5YmQ2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE0LTA4LTI5ICBNaWNo
YWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBh
bGxvdyBvdmVyd3JpdGluZyBkZXN0aW5hdGlvbiBvZiBkb3dubG9hZAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MzcyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXREb3dubG9hZC5jcHA6CisgICAgICAgICh3ZWJraXREb3dubG9hZEdldFByb3BlcnR5KTogQWRk
ZWQKKyAgICAgICAgKHdlYmtpdF9kb3dubG9hZF9jbGFzc19pbml0KTogSW5zdGFsbCB3ZWJraXRE
b3dubG9hZEdldFByb3BlcnR5CisgICAgICAgICh3ZWJraXREb3dubG9hZERlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKTogYWRkCisgICAgICAgIGFsbG93T3ZlcndyaXRlIG91
dCBwYXJhbWV0ZXIgYW5kIHNldCBpdCBhcHByb3ByaWF0ZWx5CisgICAgICAgICh3ZWJraXRfZG93
bmxvYWRfZ2V0X2FsbG93X292ZXJ3cml0ZSk6IEFkZGVkCisgICAgICAgICh3ZWJraXRfZG93bmxv
YWRfc2V0X2FsbG93X292ZXJ3cml0ZSk6IEFkZGVkCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RG93bmxvYWQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRE
b3dubG9hZENsaWVudC5jcHA6CisgICAgICAgIChkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0
ZWRGaWxlbmFtZSk6IFN0b3AgaWdub3JpbmcgdGhlCisgICAgICAgIGFsbG93T3ZlcndyaXRlIHBh
cmFtZXRlcgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkUHJpdmF0
ZS5oOgorCiAyMDE0LTA4LTI1ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgU3VicGl4ZWwgbGF5b3V0OiByZW1vdmUgcm91bmRlZExheW91dFBvaW50L3JvdW5kZWRM
YXlvdXRTaXplIGZ1bmN0aW9ucy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdERvd25sb2FkLmNwcAppbmRleCBjNDgzYjkyN2NmZDIzNjcwNWMyMjg2ZDc2
Yzc3NzYyZGUwZWMwMDY3Li43MTAxZjMxNjZhNjZmNWViNThmZTlhNTI4OWU5OTFiMThmZDkxM2Ji
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3du
bG9hZC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93
bmxvYWQuY3BwCkBAIC02Myw3ICs2Myw4IEBAIGVudW0gewogCiAgICAgUFJPUF9ERVNUSU5BVElP
TiwKICAgICBQUk9QX1JFU1BPTlNFLAotICAgIFBST1BfRVNUSU1BVEVEX1BST0dSRVNTCisgICAg
UFJPUF9FU1RJTUFURURfUFJPR1JFU1MsCisgICAgUFJPUF9BTExPV19PVkVSV1JJVEUKIH07CiAK
IHN0cnVjdCBfV2ViS2l0RG93bmxvYWRQcml2YXRlIHsKQEAgLTg0LDEyICs4NSwyNiBAQCBzdHJ1
Y3QgX1dlYktpdERvd25sb2FkUHJpdmF0ZSB7CiAgICAgR1VuaXF1ZVB0cjxHVGltZXI+IHRpbWVy
OwogICAgIGdkb3VibGUgbGFzdFByb2dyZXNzOwogICAgIGdkb3VibGUgbGFzdEVsYXBzZWQ7Cisg
ICAgYm9vbCBhbGxvd092ZXJ3cml0ZTsKIH07CiAKIHN0YXRpYyBndWludCBzaWduYWxzW0xBU1Rf
U0lHTkFMXSA9IHsgMCwgfTsKIAogV0VCS0lUX0RFRklORV9UWVBFKFdlYktpdERvd25sb2FkLCB3
ZWJraXRfZG93bmxvYWQsIEdfVFlQRV9PQkpFQ1QpCiAKK3N0YXRpYyB2b2lkIHdlYmtpdERvd25s
b2FkU2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIGNvbnN0IEdWYWx1
ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBhcmFtU3BlYykKK3sKKyAgICBXZWJLaXREb3dubG9hZCog
ZG93bmxvYWQgPSBXRUJLSVRfRE9XTkxPQUQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcElk
KSB7CisgICAgY2FzZSBQUk9QX0FMTE9XX09WRVJXUklURToKKyAgICAgICAgd2Via2l0X2Rvd25s
b2FkX3NldF9hbGxvd19vdmVyd3JpdGUoZG93bmxvYWQsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFs
dWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FS
Tl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElkLCBwYXJhbVNwZWMpOworICAgIH0K
K30KKwogc3RhdGljIHZvaWQgd2Via2l0RG93bmxvYWRHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmpl
Y3QsIGd1aW50IHByb3BJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQog
ewogICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCA9IFdFQktJVF9ET1dOTE9BRChvYmplY3Qp
OwpAQCAtMTA0LDYgKzExOSw4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdERvd25sb2FkR2V0UHJvcGVy
dHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsCiAgICAgY2FzZSBQ
Uk9QX0VTVElNQVRFRF9QUk9HUkVTUzoKICAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVl
LCB3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcyhkb3dubG9hZCkpOwogICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQUxMT1dfT1ZFUldSSVRFOgorICAgICAgICBnX3Zh
bHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG93bmxvYWRfZ2V0X2FsbG93X292ZXJ3cml0
ZShkb3dubG9hZCkpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJ
RF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcGFyYW1TcGVjKTsKICAgICB9CkBAIC0xMzAs
NiArMTQ3LDcgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdERvd25sb2FkRGVjaWRlRGVzdGluYXRp
b24oV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdAogc3RhdGljIHZvaWQgd2Via2l0X2Rv
d25sb2FkX2NsYXNzX2luaXQoV2ViS2l0RG93bmxvYWRDbGFzcyogZG93bmxvYWRDbGFzcykKIHsK
ICAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MoZG93bmxvYWRD
bGFzcyk7CisgICAgb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdERvd25sb2FkU2V0
UHJvcGVydHk7CiAgICAgb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdERvd25sb2Fk
R2V0UHJvcGVydHk7CiAKICAgICBkb3dubG9hZENsYXNzLT5kZWNpZGVfZGVzdGluYXRpb24gPSB3
ZWJraXREb3dubG9hZERlY2lkZURlc3RpbmF0aW9uOwpAQCAtMTc5LDYgKzE5NywyMSBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRfZG93bmxvYWRfY2xhc3NfaW5pdChXZWJLaXREb3dubG9hZENsYXNzKiBk
b3dubG9hZENsYXNzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKIAogICAgIC8qKgorICAgICAq
IFdlYktpdERvd25sb2FkOmFsbG93LW92ZXJ3cml0ZToKKyAgICAgKgorICAgICAqIFdoZXRoZXIg
b3Igbm90IHRoZSBkb3dubG9hZCBpcyBhbGxvd2VkIHRvIG92ZXJ3cml0ZSBhbiBleGlzdGluZyBm
aWxlIG9uCisgICAgICogZGlzay4gSWYgdGhpcyBwcm9wZXJ0eSBpcyAlRkFMU0UgYW5kIHRoZSBk
ZXN0aW5hdGlvbiBhbHJlYWR5IGV4aXN0cywKKyAgICAgKiB0aGUgZG93bmxvYWQgd2lsbCBmYWls
LgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xh
c3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0FMTE9XX09WRVJX
UklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19i
b29sZWFuKCJhbGxvdy1vdmVyd3JpdGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiQWxsb3cgT3ZlcndyaXRlIiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJXaGV0
aGVyIHRoZSBkZXN0aW5hdGlvbiBtYXkgYmUgb3ZlcndyaXR0ZW4iKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworCisgICAgLyoqCiAgICAgICogV2ViS2l0RG93bmxvYWQ6OnJl
Y2VpdmVkLWRhdGE6CiAgICAgICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERvd25sb2FkCiAgICAg
ICogQGRhdGFfbGVuZ3RoOiB0aGUgbGVuZ3RoIG9mIGRhdGEgcmVjZWl2ZWQgaW4gYnl0ZXMKQEAg
LTM3MCwxMiArNDAzLDE0IEBAIHZvaWQgd2Via2l0RG93bmxvYWRGaW5pc2hlZChXZWJLaXREb3du
bG9hZCogZG93bmxvYWQpCiAgICAgZ19zaWduYWxfZW1pdChkb3dubG9hZCwgc2lnbmFsc1tGSU5J
U0hFRF0sIDAsIE5VTEwpOwogfQogCi1DU3RyaW5nIHdlYmtpdERvd25sb2FkRGVjaWRlRGVzdGlu
YXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25z
dCBDU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKK0NTdHJpbmcgd2Via2l0RG93bmxvYWREZWNp
ZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShXZWJLaXREb3dubG9hZCogZG93bmxv
YWQsIGNvbnN0IENTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBib29sKiBhbGxvd092ZXJ3cml0
ZSkKIHsKICAgICBpZiAoZG93bmxvYWQtPnByaXYtPmlzQ2FuY2VsbGVkKQogICAgICAgICByZXR1
cm4gIiI7CiAgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CiAgICAgZ19zaWduYWxfZW1pdChkb3du
bG9hZCwgc2lnbmFsc1tERUNJREVfREVTVElOQVRJT05dLCAwLCBzdWdnZXN0ZWRGaWxlbmFtZS5k
YXRhKCksICZyZXR1cm5WYWx1ZSk7CisgICAgaWYgKGFsbG93T3ZlcndyaXRlKQorICAgICAgICAq
YWxsb3dPdmVyd3JpdGUgPSBkb3dubG9hZC0+cHJpdi0+YWxsb3dPdmVyd3JpdGU7CiAgICAgcmV0
dXJuIGRvd25sb2FkLT5wcml2LT5kZXN0aW5hdGlvblVSSTsKIH0KIApAQCAtNTY4LDMgKzYwMyw0
NCBAQCBXZWJLaXRXZWJWaWV3KiB3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92aWV3KFdlYktpdERv
d25sb2FkKiBkb3dubG9hZCkKIAogICAgIHJldHVybiBkb3dubG9hZC0+cHJpdi0+d2ViVmlldzsK
IH0KKworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRfZ2V0X2FsbG93X292ZXJ3cml0ZQorICogQGRv
d25sb2FkOiBhICNXZWJLaXREb3dubG9hZAorICoKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgdmFs
dWUgb2YgdGhlICNXZWJLaXREb3dubG9hZDo6YWxsb3ctb3ZlcndyaXRlIHByb3BlcnR5LAorICog
d2hpY2ggZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBkb3dubG9hZCB3aWxsIG92ZXJ3cml0ZSBhbiBl
eGlzdGluZyBmaWxlIG9uCisgKiBkaXNrLCBvciBpZiBpdCB3aWxsIGZhaWwgaWYgdGhlIGRlc3Rp
bmF0aW9uIGFscmVhZHkgZXhpc3RzLgorICoKKyAqIFJldHVybnM6IHRoZSBjdXJyZW50IHZhbHVl
IG9mIHRoZSAjV2ViS2l0RG93bmxvYWQ6OmFsbG93LW92ZXJ3cml0ZSBwcm9wZXJ0eQorICoKKyAq
IFNpbmNlOiAyLjYKKyAqLworZ2Jvb2xlYW4gd2Via2l0X2Rvd25sb2FkX2dldF9hbGxvd19vdmVy
d3JpdGUoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9hZCksIEZBTFNFKTsKKworICAgIHJldHVybiBk
b3dubG9hZC0+cHJpdi0+YWxsb3dPdmVyd3JpdGU7Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25s
b2FkX3NldF9hbGxvd19vdmVyd3JpdGUKKyAqIEBkb3dubG9hZDogYSAjV2ViS2l0RG93bmxvYWQK
KyAqIEBhbGxvd2VkOiB0aGUgbmV3IHZhbHVlIGZvciB0aGUgI1dlYktpdERvd25sb2FkOjphbGxv
dy1vdmVyd3JpdGUgcHJvcGVydHkKKyAqCisgKiBTZXRzIHRoZSAjV2ViS2l0RG93bmxvYWQ6OmFs
bG93LW92ZXJ3cml0ZSBwcm9wZXJ0eSwgd2hpY2ggZGV0ZXJtaW5lcyB3aGV0aGVyCisgKiB0aGUg
ZG93bmxvYWQgbWF5IG92ZXJ3cml0ZSBhbiBleGlzdGluZyBmaWxlIG9uIGRpc2ssIG9yIGlmIGl0
IHdpbGwgZmFpbCBpZgorICogdGhlIGRlc3RpbmF0aW9uIGFscmVhZHkgZXhpc3RzLgorICoKKyAq
IFNpbmNlOiAyLjYKKyAqLwordm9pZCB3ZWJraXRfZG93bmxvYWRfc2V0X2FsbG93X292ZXJ3cml0
ZShXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGdib29sZWFuIGFsbG93ZWQpCit7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpKTsKKworICAgIGlmIChh
bGxvd2VkID09IGRvd25sb2FkLT5wcml2LT5hbGxvd092ZXJ3cml0ZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZG93bmxvYWQtPnByaXYtPmFsbG93T3ZlcndyaXRlID0gYWxsb3dlZDsKKyAgICBn
X29iamVjdF9ub3RpZnkoR19PQkpFQ1QoZG93bmxvYWQpLCAiYWxsb3ctb3ZlcndyaXRlIik7Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3du
bG9hZC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQu
aAppbmRleCA0OTNiZmVhNDAyMmM5ZTA2ZGEwZDUwZGUyODczN2U0NzEwMDdhOWIzLi43ZTZiZmVi
NDZkY2JiMjJjZWFkMGU4YmRhNzMxODZkMTZjMTgxMDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmgKQEAgLTkyLDYgKzkyLDEzIEBA
IHdlYmtpdF9kb3dubG9hZF9nZXRfcmVjZWl2ZWRfZGF0YV9sZW5ndGggKFdlYktpdERvd25sb2Fk
ICpkb3dubG9hZCk7CiBXRUJLSVRfQVBJIFdlYktpdFdlYlZpZXcgKgogd2Via2l0X2Rvd25sb2Fk
X2dldF93ZWJfdmlldyAgICAgICAgICAgICAoV2ViS2l0RG93bmxvYWQgKmRvd25sb2FkKTsKIAor
V0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2Rvd25sb2FkX2dldF9hbGxvd19vdmVyd3JpdGUg
ICAgICAoV2ViS2l0RG93bmxvYWQgKmRvd25sb2FkKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG93bmxvYWRfc2V0X2FsbG93X292ZXJ3cml0ZSAgICAgIChXZWJLaXREb3dubG9hZCAqZG93
bmxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVh
biAgICAgICAgYWxsb3dlZCk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRDbGllbnQuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRDbGllbnQu
Y3BwCmluZGV4IDE5N2I2YjViNGNjMDUzYjY5MmM1NjZjOTQxNmViMTJhYWM3MzFkNTEuLjhjYjM1
ZmE1ZGZjY2Y5MzNhNzk4Y2Q4Y2IwZGRjNDE1NTBkMWNmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkQ2xpZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZENsaWVudC5jcHAK
QEAgLTU0LDExICs1NCwxMCBAQCBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlRGF0YShXS0NvbnRleHRS
ZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgdWludDY0X3QgbGVuZwogICAgIHdlYmtpdERv
d25sb2FkTm90aWZ5UHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCksIGxlbmd0aCk7CiB9CiAKLXN0YXRp
YyBXS1N0cmluZ1JlZiBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShXS0Nv
bnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tTdHJpbmdSZWYgZmlsZW5hbWUs
IGJvb2wqIC8qIGFsbG93T3ZlcndyaXRlICovLCBjb25zdCB2b2lkKiAvKiBjbGllbnRJbmZvICov
KQorc3RhdGljIFdLU3RyaW5nUmVmIGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVu
YW1lKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBXS1N0cmluZ1JlZiBm
aWxlbmFtZSwgYm9vbCogYWxsb3dPdmVyd3JpdGUsIGNvbnN0IHZvaWQqIC8qIGNsaWVudEluZm8g
Ki8pCiB7CiAgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSB3ZWJraXRXZWJD
b250ZXh0R2V0T3JDcmVhdGVEb3dubG9hZCh0b0ltcGwod2tEb3dubG9hZCkpOwotICAgIENTdHJp
bmcgZGVzdGluYXRpb25VUkkgPSB3ZWJraXREb3dubG9hZERlY2lkZURlc3RpbmF0aW9uV2l0aFN1
Z2dlc3RlZEZpbGVuYW1lKGRvd25sb2FkLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRvSW1wbChmaWxlbmFtZSktPnN0cmluZygpLnV0ZjgoKSk7CisgICAgQ1N0cmluZyBkZXN0aW5h
dGlvblVSSSA9IHdlYmtpdERvd25sb2FkRGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmls
ZW5hbWUoZG93bmxvYWQuZ2V0KCksIHRvSW1wbChmaWxlbmFtZSktPnN0cmluZygpLnV0ZjgoKSwg
YWxsb3dPdmVyd3JpdGUpOwogICAgIHJldHVybiBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZyhkZXN0aW5hdGlvblVSSS5kYXRhKCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZFByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkUHJpdmF0ZS5oCmluZGV4IDk4MGFk
NzMyYjRhYzBhZWRjYmMzMTU2MTVjNTcyNWMyZGI2MWU0NDAuLjg2YzdjZTUxN2VhNjFiNjlmNmQ5
ZTE2MzNjMmIzZTA4MTRiNmE1YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdERvd25sb2FkUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkUHJpdmF0ZS5oCkBAIC0zNSw3ICszNSw3IEBA
IHZvaWQgd2Via2l0RG93bmxvYWROb3RpZnlQcm9ncmVzcyhXZWJLaXREb3dubG9hZCosIGd1aW50
NjQgYnl0ZXNSZWNlaXZlZCk7CiB2b2lkIHdlYmtpdERvd25sb2FkRmFpbGVkKFdlYktpdERvd25s
b2FkKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOwogdm9pZCB3ZWJraXREb3dubG9h
ZENhbmNlbGxlZChXZWJLaXREb3dubG9hZCopOwogdm9pZCB3ZWJraXREb3dubG9hZEZpbmlzaGVk
KFdlYktpdERvd25sb2FkKik7Ci1DU3RyaW5nIHdlYmtpdERvd25sb2FkRGVjaWRlRGVzdGluYXRp
b25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoV2ViS2l0RG93bmxvYWQqLCBjb25zdCBDU3RyaW5nJiBz
dWdnZXN0ZWRGaWxlbmFtZSk7CitDU3RyaW5nIHdlYmtpdERvd25sb2FkRGVjaWRlRGVzdGluYXRp
b25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoV2ViS2l0RG93bmxvYWQqLCBjb25zdCBDU3RyaW5nJiBz
dWdnZXN0ZWRGaWxlbmFtZSwgYm9vbCogYWxsb3dPdmVyd3JpdGUpOwogdm9pZCB3ZWJraXREb3du
bG9hZERlc3RpbmF0aW9uQ3JlYXRlZChXZWJLaXREb3dubG9hZCosIGNvbnN0IENTdHJpbmcmIGRl
c3RpbmF0aW9uVVJJKTsKIAogI2VuZGlmIC8vIFdlYktpdERvd25sb2FkUHJpdmF0ZV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237436</attachid>
            <date>2014-08-31 16:17:33 -0700</date>
            <delta_ts>2014-09-01 12:27:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136372-20140831181726.patch</filename>
            <type>text/plain</type>
            <size>18416</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczMTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOGJjZmI0OTQ0ZjQ3ZWU5
YTNiNjMyODRmMjhmN2ZhYzI0ZDI4MzEzZi4uOWI3ZGY0ZmRjNzA2ZjY4NzNlMGQzNDk3ZjA3OTM1
MmNhYjBmMTJiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE0LTA4LTMxICBNaWNo
YWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBh
bGxvdyBvdmVyd3JpdGluZyBkZXN0aW5hdGlvbiBvZiBkb3dubG9hZAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MzcyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXREb3dubG9hZC5jcHA6CisgICAgICAgICh3ZWJraXREb3dubG9hZEdldFByb3BlcnR5KTogQWRk
ZWQKKyAgICAgICAgKHdlYmtpdF9kb3dubG9hZF9jbGFzc19pbml0KTogSW5zdGFsbCB3ZWJraXRE
b3dubG9hZEdldFByb3BlcnR5CisgICAgICAgICh3ZWJraXREb3dubG9hZERlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKTogQWRkCisgICAgICAgIGFsbG93T3ZlcndyaXRlIHBh
cmFtZXRlciBhbmQgc2V0IGl0IGFwcHJvcHJpYXRlbHkKKyAgICAgICAgKHdlYmtpdF9kb3dubG9h
ZF9nZXRfYWxsb3dfb3ZlcndyaXRlKTogQWRkZWQKKyAgICAgICAgKHdlYmtpdF9kb3dubG9hZF9z
ZXRfYWxsb3dfb3ZlcndyaXRlKTogQWRkZWQKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXREb3dubG9hZC5oOiBOZXcgQVBJCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RG93bmxvYWRDbGllbnQuY3BwOgorICAgICAgICAoZGVjaWRlRGVzdGluYXRpb25XaXRoU3Vn
Z2VzdGVkRmlsZW5hbWUpOiBQYXNzIGFsbG93T3ZlcndyaXRlIHRvCisgICAgICAgIHdlYmtpdERv
d25sb2FkRGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZFByaXZhdGUuaDogQWRkIGFsbG93T3Zlcndy
aXRlCisgICAgICAgIHBhcmFtZXRlciB0byB3ZWJraXREb3dubG9hZERlY2lkZURlc3RpbmF0aW9u
V2l0aFN1Z2dlc3RlZEZpbGVuYW1lCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93
ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDogTmV3IEFQSQorCiAyMDE0LTA4LTMxICBUaW0gSG9ydG9u
ICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIE9jY2FzaW9uYWwgY3Jhc2hl
cyAobnVsbCBkZXJlZikgdW5kZXIgVmlld0dlc3R1cmVDb250cm9sbGVyOjplbmRNYWduaWZpY2F0
aW9uR2VzdHVyZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0RG93bmxvYWQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RG93bmxvYWQuY3BwCmluZGV4IGM0ODNiOTI3Y2ZkMjM2NzA1YzIyODZkNzZjNzc3NjJkZTBl
YzAwNjcuLmZlYjhhZWM5NGZkZGYyMmI2ZTU3YmFjNTFmMmY2OTQ2YzVjMzU3YTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5jcHAK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgSWdhbGlhIFMuTC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtNjMsNyArNjMsOCBAQCBlbnVtIHsKIAogICAgIFBST1BfREVTVElOQVRJT04sCiAgICAg
UFJPUF9SRVNQT05TRSwKLSAgICBQUk9QX0VTVElNQVRFRF9QUk9HUkVTUworICAgIFBST1BfRVNU
SU1BVEVEX1BST0dSRVNTLAorICAgIFBST1BfQUxMT1dfT1ZFUldSSVRFCiB9OwogCiBzdHJ1Y3Qg
X1dlYktpdERvd25sb2FkUHJpdmF0ZSB7CkBAIC04NCwxMiArODUsMjYgQEAgc3RydWN0IF9XZWJL
aXREb3dubG9hZFByaXZhdGUgewogICAgIEdVbmlxdWVQdHI8R1RpbWVyPiB0aW1lcjsKICAgICBn
ZG91YmxlIGxhc3RQcm9ncmVzczsKICAgICBnZG91YmxlIGxhc3RFbGFwc2VkOworICAgIGJvb2wg
YWxsb3dPdmVyd3JpdGU7CiB9OwogCiBzdGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05BTF0g
PSB7IDAsIH07CiAKIFdFQktJVF9ERUZJTkVfVFlQRShXZWJLaXREb3dubG9hZCwgd2Via2l0X2Rv
d25sb2FkLCBHX1RZUEVfT0JKRUNUKQogCitzdGF0aWMgdm9pZCB3ZWJraXREb3dubG9hZFNldFBy
b3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBjb25zdCBHVmFsdWUqIHZhbHVl
LCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2Fk
ID0gV0VCS0lUX0RPV05MT0FEKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAg
IGNhc2UgUFJPUF9BTExPV19PVkVSV1JJVEU6CisgICAgICAgIHdlYmtpdF9kb3dubG9hZF9zZXRf
YWxsb3dfb3ZlcndyaXRlKGRvd25sb2FkLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJ
RF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcGFyYW1TcGVjKTsKKyAgICB9Cit9CisKIHN0
YXRpYyB2b2lkIHdlYmtpdERvd25sb2FkR2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wSWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBhcmFtU3BlYykKIHsKICAgICBX
ZWJLaXREb3dubG9hZCogZG93bmxvYWQgPSBXRUJLSVRfRE9XTkxPQUQob2JqZWN0KTsKQEAgLTEw
NCw2ICsxMTksOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXREb3dubG9hZEdldFByb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBHVmFsdWUqIHZhbAogICAgIGNhc2UgUFJPUF9FU1RJ
TUFURURfUFJPR1JFU1M6CiAgICAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0
X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQpKTsKICAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX0FMTE9XX09WRVJXUklURToKKyAgICAgICAgZ192YWx1ZV9zZXRf
Ym9vbGVhbih2YWx1ZSwgd2Via2l0X2Rvd25sb2FkX2dldF9hbGxvd19vdmVyd3JpdGUoZG93bmxv
YWQpKTsKICAgICBkZWZhdWx0OgogICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVS
VFlfSUQob2JqZWN0LCBwcm9wSWQsIHBhcmFtU3BlYyk7CiAgICAgfQpAQCAtMTMwLDYgKzE0Nyw3
IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXREb3dubG9hZERlY2lkZURlc3RpbmF0aW9uKFdlYktp
dERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QKIHN0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9j
bGFzc19pbml0KFdlYktpdERvd25sb2FkQ2xhc3MqIGRvd25sb2FkQ2xhc3MpCiB7CiAgICAgR09i
amVjdENsYXNzKiBvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGRvd25sb2FkQ2xhc3MpOwor
ICAgIG9iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXREb3dubG9hZFNldFByb3BlcnR5
OwogICAgIG9iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXREb3dubG9hZEdldFByb3Bl
cnR5OwogCiAgICAgZG93bmxvYWRDbGFzcy0+ZGVjaWRlX2Rlc3RpbmF0aW9uID0gd2Via2l0RG93
bmxvYWREZWNpZGVEZXN0aW5hdGlvbjsKQEAgLTE3OSw2ICsxOTcsMjUgQEAgc3RhdGljIHZvaWQg
d2Via2l0X2Rvd25sb2FkX2NsYXNzX2luaXQoV2ViS2l0RG93bmxvYWRDbGFzcyogZG93bmxvYWRD
bGFzcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CiAKICAgICAvKioKKyAgICAgKiBXZWJLaXRE
b3dubG9hZDphbGxvdy1vdmVyd3JpdGU6CisgICAgICoKKyAgICAgKiBXaGV0aGVyIG9yIG5vdCB0
aGUgZG93bmxvYWQgaXMgYWxsb3dlZCB0byBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgZmlsZSBvbgor
ICAgICAqIGRpc2suIElmIHRoaXMgcHJvcGVydHkgaXMgJUZBTFNFIGFuZCB0aGUgZGVzdGluYXRp
b24gYWxyZWFkeSBleGlzdHMsCisgICAgICogdGhlIGRvd25sb2FkIHdpbGwgZmFpbC4KKyAgICAg
KgorICAgICAqIFNpbmNlOiAyLjYKKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BTExPV19PVkVS
V1JJVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImFsbG93
LW92ZXJ3cml0ZSIsCisgICAgICAgICAgICBfKCJBbGxvdyBPdmVyd3JpdGUiKSwKKyAgICAgICAg
ICAgIF8oIldoZXRoZXIgdGhlIGRlc3RpbmF0aW9uIG1heSBiZSBvdmVyd3JpdHRlbiIpLAorICAg
ICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
KyAgICAvKioKICAgICAgKiBXZWJLaXREb3dubG9hZDo6cmVjZWl2ZWQtZGF0YToKICAgICAgKiBA
ZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQKICAgICAgKiBAZGF0YV9sZW5ndGg6IHRoZSBs
ZW5ndGggb2YgZGF0YSByZWNlaXZlZCBpbiBieXRlcwpAQCAtMzcwLDEyICs0MDcsMTMgQEAgdm9p
ZCB3ZWJraXREb3dubG9hZEZpbmlzaGVkKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKICAgICBn
X3NpZ25hbF9lbWl0KGRvd25sb2FkLCBzaWduYWxzW0ZJTklTSEVEXSwgMCwgTlVMTCk7CiB9CiAK
LUNTdHJpbmcgd2Via2l0RG93bmxvYWREZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxl
bmFtZShXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IENTdHJpbmcmIHN1Z2dlc3RlZEZp
bGVuYW1lKQorQ1N0cmluZyB3ZWJraXREb3dubG9hZERlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dl
c3RlZEZpbGVuYW1lKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgQ1N0cmluZyYgc3Vn
Z2VzdGVkRmlsZW5hbWUsIGJvb2wmIGFsbG93T3ZlcndyaXRlKQogewogICAgIGlmIChkb3dubG9h
ZC0+cHJpdi0+aXNDYW5jZWxsZWQpCiAgICAgICAgIHJldHVybiAiIjsKICAgICBnYm9vbGVhbiBy
ZXR1cm5WYWx1ZTsKICAgICBnX3NpZ25hbF9lbWl0KGRvd25sb2FkLCBzaWduYWxzW0RFQ0lERV9E
RVNUSU5BVElPTl0sIDAsIHN1Z2dlc3RlZEZpbGVuYW1lLmRhdGEoKSwgJnJldHVyblZhbHVlKTsK
KyAgICBhbGxvd092ZXJ3cml0ZSA9IGRvd25sb2FkLT5wcml2LT5hbGxvd092ZXJ3cml0ZTsKICAg
ICByZXR1cm4gZG93bmxvYWQtPnByaXYtPmRlc3RpbmF0aW9uVVJJOwogfQogCkBAIC01NjgsMyAr
NjA2LDQ0IEBAIFdlYktpdFdlYlZpZXcqIHdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcoV2Vi
S2l0RG93bmxvYWQqIGRvd25sb2FkKQogCiAgICAgcmV0dXJuIGRvd25sb2FkLT5wcml2LT53ZWJW
aWV3OwogfQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9hZF9nZXRfYWxsb3dfb3ZlcndyaXRlOgor
ICogQGRvd25sb2FkOiBhICNXZWJLaXREb3dubG9hZAorICoKKyAqIFJldHVybnMgdGhlIGN1cnJl
bnQgdmFsdWUgb2YgdGhlICNXZWJLaXREb3dubG9hZDphbGxvdy1vdmVyd3JpdGUgcHJvcGVydHks
CisgKiB3aGljaCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGRvd25sb2FkIHdpbGwgb3ZlcndyaXRl
IGFuIGV4aXN0aW5nIGZpbGUgb24KKyAqIGRpc2ssIG9yIGlmIGl0IHdpbGwgZmFpbCBpZiB0aGUg
ZGVzdGluYXRpb24gYWxyZWFkeSBleGlzdHMuCisgKgorICogUmV0dXJuczogdGhlIGN1cnJlbnQg
dmFsdWUgb2YgdGhlICNXZWJLaXREb3dubG9hZDphbGxvdy1vdmVyd3JpdGUgcHJvcGVydHkKKyAq
CisgKiBTaW5jZTogMi42CisgKi8KK2dib29sZWFuIHdlYmtpdF9kb3dubG9hZF9nZXRfYWxsb3df
b3ZlcndyaXRlKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpLCBGQUxTRSk7CisKKyAgICByZXR1
cm4gZG93bmxvYWQtPnByaXYtPmFsbG93T3ZlcndyaXRlOworfQorCisvKioKKyAqIHdlYmtpdF9k
b3dubG9hZF9zZXRfYWxsb3dfb3ZlcndyaXRlOgorICogQGRvd25sb2FkOiBhICNXZWJLaXREb3du
bG9hZAorICogQGFsbG93ZWQ6IHRoZSBuZXcgdmFsdWUgZm9yIHRoZSAjV2ViS2l0RG93bmxvYWQ6
YWxsb3ctb3ZlcndyaXRlIHByb3BlcnR5CisgKgorICogU2V0cyB0aGUgI1dlYktpdERvd25sb2Fk
OmFsbG93LW92ZXJ3cml0ZSBwcm9wZXJ0eSwgd2hpY2ggZGV0ZXJtaW5lcyB3aGV0aGVyCisgKiB0
aGUgZG93bmxvYWQgbWF5IG92ZXJ3cml0ZSBhbiBleGlzdGluZyBmaWxlIG9uIGRpc2ssIG9yIGlm
IGl0IHdpbGwgZmFpbCBpZgorICogdGhlIGRlc3RpbmF0aW9uIGFscmVhZHkgZXhpc3RzLgorICoK
KyAqIFNpbmNlOiAyLjYKKyAqLwordm9pZCB3ZWJraXRfZG93bmxvYWRfc2V0X2FsbG93X292ZXJ3
cml0ZShXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGdib29sZWFuIGFsbG93ZWQpCit7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpKTsKKworICAgIGlm
IChhbGxvd2VkID09IGRvd25sb2FkLT5wcml2LT5hbGxvd092ZXJ3cml0ZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgZG93bmxvYWQtPnByaXYtPmFsbG93T3ZlcndyaXRlID0gYWxsb3dlZDsKKyAg
ICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1QoZG93bmxvYWQpLCAiYWxsb3ctb3ZlcndyaXRlIik7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRE
b3dubG9hZC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxv
YWQuaAppbmRleCA0OTNiZmVhNDAyMmM5ZTA2ZGEwZDUwZGUyODczN2U0NzEwMDdhOWIzLi43ZTZi
ZmViNDZkY2JiMjJjZWFkMGU4YmRhNzMxODZkMTZjMTgxMDFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmgKQEAgLTkyLDYgKzkyLDEz
IEBAIHdlYmtpdF9kb3dubG9hZF9nZXRfcmVjZWl2ZWRfZGF0YV9sZW5ndGggKFdlYktpdERvd25s
b2FkICpkb3dubG9hZCk7CiBXRUJLSVRfQVBJIFdlYktpdFdlYlZpZXcgKgogd2Via2l0X2Rvd25s
b2FkX2dldF93ZWJfdmlldyAgICAgICAgICAgICAoV2ViS2l0RG93bmxvYWQgKmRvd25sb2FkKTsK
IAorV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2Rvd25sb2FkX2dldF9hbGxvd19vdmVyd3Jp
dGUgICAgICAoV2ViS2l0RG93bmxvYWQgKmRvd25sb2FkKTsKKworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG93bmxvYWRfc2V0X2FsbG93X292ZXJ3cml0ZSAgICAgIChXZWJLaXREb3dubG9hZCAq
ZG93bmxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9v
bGVhbiAgICAgICAgYWxsb3dlZCk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRDbGllbnQu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRDbGll
bnQuY3BwCmluZGV4IDE5N2I2YjViNGNjMDUzYjY5MmM1NjZjOTQxNmViMTJhYWM3MzFkNTEuLjBm
NGNlODY4YzEzOTA5N2I4MTM1MzY1NDg1MzkzZDVkMjM0NGY2NDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkQ2xpZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZENsaWVudC5j
cHAKQEAgLTU0LDExICs1NCwxMCBAQCBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlRGF0YShXS0NvbnRl
eHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgdWludDY0X3QgbGVuZwogICAgIHdlYmtp
dERvd25sb2FkTm90aWZ5UHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCksIGxlbmd0aCk7CiB9CiAKLXN0
YXRpYyBXS1N0cmluZ1JlZiBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShX
S0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tTdHJpbmdSZWYgZmlsZW5h
bWUsIGJvb2wqIC8qIGFsbG93T3ZlcndyaXRlICovLCBjb25zdCB2b2lkKiAvKiBjbGllbnRJbmZv
ICovKQorc3RhdGljIFdLU3RyaW5nUmVmIGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZp
bGVuYW1lKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBXS1N0cmluZ1Jl
ZiBmaWxlbmFtZSwgYm9vbCogYWxsb3dPdmVyd3JpdGUsIGNvbnN0IHZvaWQqIC8qIGNsaWVudElu
Zm8gKi8pCiB7CiAgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSB3ZWJraXRX
ZWJDb250ZXh0R2V0T3JDcmVhdGVEb3dubG9hZCh0b0ltcGwod2tEb3dubG9hZCkpOwotICAgIENT
dHJpbmcgZGVzdGluYXRpb25VUkkgPSB3ZWJraXREb3dubG9hZERlY2lkZURlc3RpbmF0aW9uV2l0
aFN1Z2dlc3RlZEZpbGVuYW1lKGRvd25sb2FkLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRvSW1wbChmaWxlbmFtZSktPnN0cmluZygpLnV0ZjgoKSk7CisgICAgQ1N0cmluZyBkZXN0
aW5hdGlvblVSSSA9IHdlYmtpdERvd25sb2FkRGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVk
RmlsZW5hbWUoZG93bmxvYWQuZ2V0KCksIHRvSW1wbChmaWxlbmFtZSktPnN0cmluZygpLnV0Zjgo
KSwgKmFsbG93T3ZlcndyaXRlKTsKICAgICByZXR1cm4gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoZGVzdGluYXRpb25VUkkuZGF0YSgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZFByaXZhdGUuaAppbmRleCA5
ODBhZDczMmI0YWMwYWVkY2JjMzE1NjE1YzU3MjVjMmRiNjFlNDQwLi5iOTg2Y2EyMzE4ZTczYTY1
MjVlMzY2NTg1MWRlNTEzMmQxMjkyYjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZFByaXZhdGUuaApAQCAtMzUsNyArMzUs
NyBAQCB2b2lkIHdlYmtpdERvd25sb2FkTm90aWZ5UHJvZ3Jlc3MoV2ViS2l0RG93bmxvYWQqLCBn
dWludDY0IGJ5dGVzUmVjZWl2ZWQpOwogdm9pZCB3ZWJraXREb3dubG9hZEZhaWxlZChXZWJLaXRE
b3dubG9hZCosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKIHZvaWQgd2Via2l0RG93
bmxvYWRDYW5jZWxsZWQoV2ViS2l0RG93bmxvYWQqKTsKIHZvaWQgd2Via2l0RG93bmxvYWRGaW5p
c2hlZChXZWJLaXREb3dubG9hZCopOwotQ1N0cmluZyB3ZWJraXREb3dubG9hZERlY2lkZURlc3Rp
bmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKFdlYktpdERvd25sb2FkKiwgY29uc3QgQ1N0cmlu
ZyYgc3VnZ2VzdGVkRmlsZW5hbWUpOworQ1N0cmluZyB3ZWJraXREb3dubG9hZERlY2lkZURlc3Rp
bmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKFdlYktpdERvd25sb2FkKiwgY29uc3QgQ1N0cmlu
ZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGJvb2wmIGFsbG93T3ZlcndyaXRlKTsKIHZvaWQgd2Via2l0
RG93bmxvYWREZXN0aW5hdGlvbkNyZWF0ZWQoV2ViS2l0RG93bmxvYWQqLCBjb25zdCBDU3RyaW5n
JiBkZXN0aW5hdGlvblVSSSk7CiAKICNlbmRpZiAvLyBXZWJLaXREb3dubG9hZFByaXZhdGVfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQy
Z3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKaW5kZXggODVlY2Y3MTFkNDQwZDhiM2ViOGJjMTZjZGRj
YjExOGI0NTMwNDliMS4uZDU2M2YzM2M0NzBjZjNiN2IzNzBlZDZhMWFmMGM3YTE2YmQyMmNjNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQy
Z3RrLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9k
b2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CkBAIC01MjIsNiArNTIyLDggQEAgd2Via2l0X2Rv
d25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MKIHdlYmtpdF9kb3dubG9hZF9nZXRfZWxhcHNl
ZF90aW1lCiB3ZWJraXRfZG93bmxvYWRfZ2V0X3JlY2VpdmVkX2RhdGFfbGVuZ3RoCiB3ZWJraXRf
ZG93bmxvYWRfZ2V0X3dlYl92aWV3Cit3ZWJraXRfZG93bmxvYWRfZ2V0X2FsbG93X292ZXJ3cml0
ZQord2Via2l0X2Rvd25sb2FkX3NldF9hbGxvd19vdmVyd3JpdGUKIAogPFNVQlNFQ1RJT04gU3Rh
bmRhcmQ+CiBXZWJLaXREb3dubG9hZENsYXNzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDYzYTI1N2EwZThkODNmOWUyNTBjOTZkYWYxZDgxNzIz
NDNhYThhNC4uYzFiY2RlOGQ5MzAxN2I1OTA1YWMzN2U4MmZlZjViYjM3ZjM3N2FlYyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3
IEBACisyMDE0LTA4LTMxICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNv
bT4KKworICAgICAgICBbR1RLXSBhbGxvdyBvdmVyd3JpdGluZyBkZXN0aW5hdGlvbiBvZiBkb3du
bG9hZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2
MzcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdERvd25sb2Fkcy5jcHA6CisgICAgICAg
IChkb3dubG9hZExvY2FsRmlsZVN1Y2Nlc3NmdWxseSk6IFNwbGl0IGZyb20gdGVzdERvd25sb2Fk
TG9jYWxGaWxlCisgICAgICAgICh0ZXN0RG93bmxvYWRMb2NhbEZpbGUpOiBTcGxpdCBvZmYgZG93
bmxvYWRMb2NhbEZpbGVTdWNjZXNzZnVsbHkKKyAgICAgICAgKHRlc3REb3dubG9hZE92ZXJ3cml0
ZURlc3RpbmF0aW9uQWxsb3dlZCk6IEFkZGVkCisgICAgICAgICh0ZXN0RG93bmxvYWRPdmVyd3Jp
dGVEZXN0aW5hdGlvbkRpc2FsbG93ZWQpOiBBZGRlZAorICAgICAgICAoYmVmb3JlQWxsKTogQWRk
IG5ldyB0ZXN0cworCiAyMDE0LTA4LTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CiAKICAgICAgICAgW1JKU1RdIGVhZ2VyLW5vLWNqaXQgc2hvdWxkIHJlYWxseSBtZWFuIGVhZ2Vy
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdERv
d25sb2Fkcy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdERv
d25sb2Fkcy5jcHAKaW5kZXggYzliMzBkMzFmYjFkZmVlMGUwMzk2YjA2NTE5MGMzZjM4OTJjOTli
NC4uMjY3YTlmMTU4NWM1NDgwZjI2NjUwYzhmZTUxYTY2NWU5M2E4YzYxNiAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3REb3dubG9hZHMuY3BwCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RG93bmxvYWRzLmNw
cApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBJZ2FsaWEgUy5MLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC05OCw2ICs5OCw3IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX3dlYkNvbnRleHQod2Vi
a2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpCiAgICAgICAgICwgbV9tYWluTG9vcChnX21h
aW5fbG9vcF9uZXcoMCwgVFJVRSkpCiAgICAgICAgICwgbV9kb3dubG9hZFNpemUoMCkKKyAgICAg
ICAgLCBtX2FsbG93T3ZlcndyaXRlKGZhbHNlKQogICAgIHsKICAgICAgICAgZ19zaWduYWxfY29u
bmVjdChtX3dlYkNvbnRleHQsICJkb3dubG9hZC1zdGFydGVkIiwgR19DQUxMQkFDSyhkb3dubG9h
ZFN0YXJ0ZWRDYWxsYmFjayksIHRoaXMpOwogICAgIH0KQEAgLTExMCw2ICsxMTEsOCBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRlZChXZWJLaXREb3dubG9hZCogZG93bmxvYWQp
CiAgICAgeworICAgICAgICBtX2Rvd25sb2FkU2l6ZSA9IDA7CisgICAgICAgIG1fZG93bmxvYWRF
dmVudHMuY2xlYXIoKTsKICAgICAgICAgbV9kb3dubG9hZEV2ZW50cy5hcHBlbmQoU3RhcnRlZCk7
CiAgICAgfQogCkBAIC0xNTMsMjQgKzE1NiwyOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBX
ZWJLaXREb3dubG9hZCogZG93bmxvYWQgPSB3ZWJraXRfd2ViX2NvbnRleHRfZG93bmxvYWRfdXJp
KG1fd2ViQ29udGV4dCwgcmVxdWVzdFVSSS5kYXRhKCkpOwogICAgICAgICBhc3NlcnRPYmplY3RJ
c0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGRvd25sb2FkKSk7CisgICAgICAgIHdl
YmtpdF9kb3dubG9hZF9zZXRfYWxsb3dfb3ZlcndyaXRlKGRvd25sb2FkLCBtX2FsbG93T3Zlcndy
aXRlKTsKIAogICAgICAgICBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0ID0gd2Via2l0X2Rvd25s
b2FkX2dldF9yZXF1ZXN0KGRvd25sb2FkKTsKICAgICAgICAgZ19hc3NlcnQocmVxdWVzdCk7CiAg
ICAgICAgIEFTU0VSVF9DTVBfQ1NUUklORyh3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1
ZXN0KSwgPT0sIHJlcXVlc3RVUkkpOwogCiAgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5M
b29wKTsKLQogICAgICAgICByZXR1cm4gZG93bmxvYWQ7CiAgICAgfQogCi0gICAgdm9pZCBjaGVj
a0Rlc3RpbmF0aW9uQW5kRGVsZXRlRmlsZShXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0
IGNoYXIqIGV4cGVjdGVkTmFtZSkKKyAgICB2b2lkIGNoZWNrRGVzdGluYXRpb24oV2ViS2l0RG93
bmxvYWQqIGRvd25sb2FkLCBjb25zdCBjaGFyKiBleHBlY3RlZE5hbWUpCiAgICAgewogICAgICAg
ICBpZiAoIXdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24oZG93bmxvYWQpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBHUmVmUHRyPEdGaWxlPiBkZXN0RmlsZSA9IGFkb3B0R1Jl
ZihnX2ZpbGVfbmV3X2Zvcl91cmkod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3du
bG9hZCkpKTsKICAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBkZXN0QmFzZW5hbWUoZ19maWxlX2dl
dF9iYXNlbmFtZShkZXN0RmlsZS5nZXQoKSkpOwogICAgICAgICBnX2Fzc2VydF9jbXBzdHIoZGVz
dEJhc2VuYW1lLmdldCgpLCA9PSwgZXhwZWN0ZWROYW1lKTsKKyAgICB9CiAKKyAgICB2b2lkIGNo
ZWNrRGVzdGluYXRpb25BbmREZWxldGVGaWxlKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29u
c3QgY2hhciogZXhwZWN0ZWROYW1lKQorICAgIHsKKyAgICAgICAgY2hlY2tEZXN0aW5hdGlvbihk
b3dubG9hZCwgZXhwZWN0ZWROYW1lKTsKKyAgICAgICAgR1JlZlB0cjxHRmlsZT4gZGVzdEZpbGUg
PSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfdXJpKHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGlu
YXRpb24oZG93bmxvYWQpKSk7CiAgICAgICAgIGdfZmlsZV9kZWxldGUoZGVzdEZpbGUuZ2V0KCks
IDAsIDApOwogICAgIH0KIApAQCAtMTc4LDExICsxODYsMTIgQEAgcHVibGljOgogICAgIEdNYWlu
TG9vcCogbV9tYWluTG9vcDsKICAgICBWZWN0b3I8RG93bmxvYWRFdmVudD4gbV9kb3dubG9hZEV2
ZW50czsKICAgICBndWludDY0IG1fZG93bmxvYWRTaXplOworICAgIGJvb2wgbV9hbGxvd092ZXJ3
cml0ZTsKIH07CiAKLXN0YXRpYyB2b2lkIHRlc3REb3dubG9hZExvY2FsRmlsZShEb3dubG9hZFRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCitzdGF0aWMgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4g
ZG93bmxvYWRMb2NhbEZpbGVTdWNjZXNzZnVsbHkoRG93bmxvYWRUZXN0KiB0ZXN0LCBjb25zdCBj
aGFyKiBmaWxlbmFtZSkKIHsKLSAgICBHVW5pcXVlUHRyPGNoYXI+IHNvdXJjZVBhdGgoZ19idWls
ZF9maWxlbmFtZShUZXN0OjpnZXRSZXNvdXJjZXNEaXIoKS5kYXRhKCksICJ0ZXN0LnBkZiIsIG51
bGxwdHIpKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHNvdXJjZVBhdGgoZ19idWlsZF9maWxlbmFt
ZShUZXN0OjpnZXRSZXNvdXJjZXNEaXIoKS5kYXRhKCksIGZpbGVuYW1lLCBudWxscHRyKSk7CiAg
ICAgR1JlZlB0cjxHRmlsZT4gc291cmNlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgo
c291cmNlUGF0aC5nZXQoKSkpOwogICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBzb3VyY2VJbmZvID0g
YWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9pbmZvKHNvdXJjZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVU
RV9TVEFOREFSRF9TSVpFLCBzdGF0aWNfY2FzdDxHRmlsZVF1ZXJ5SW5mb0ZsYWdzPigwKSwgMCwg
MCkpOwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gc291cmNlVVJJKGdfZmlsZV9nZXRfdXJpKHNvdXJj
ZS5nZXQoKSkpOwpAQCAtMjA0LDcgKzIxMyw1MSBAQCBzdGF0aWMgdm9pZCB0ZXN0RG93bmxvYWRM
b2NhbEZpbGUoRG93bmxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0
X2NtcGludCh0ZXN0LT5tX2Rvd25sb2FkU2l6ZSwgPT0sIGdfZmlsZV9pbmZvX2dldF9zaXplKHNv
dXJjZUluZm8uZ2V0KCkpKTsKICAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3Rp
bmF0aW9uKGRvd25sb2FkLmdldCgpKSk7CiAgICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rv
d25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA9PSwgMSk7Ci0g
ICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksICJ0
ZXN0LnBkZiIpOworCisgICAgcmV0dXJuIGRvd25sb2FkOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
RG93bmxvYWRMb2NhbEZpbGUoRG93bmxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lID0gInRlc3QucGRmIjsKKyAgICBHUmVmUHRyPFdlYktp
dERvd25sb2FkPiBkb3dubG9hZCA9IGRvd25sb2FkTG9jYWxGaWxlU3VjY2Vzc2Z1bGx5KHRlc3Qs
IGZpbGVuYW1lKTsKKyAgICB0ZXN0LT5jaGVja0Rlc3RpbmF0aW9uQW5kRGVsZXRlRmlsZShkb3du
bG9hZC5nZXQoKSwgZmlsZW5hbWUpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RG93bmxvYWRPdmVy
d3JpdGVEZXN0aW5hdGlvbkFsbG93ZWQoRG93bmxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQoreworICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lID0gInRlc3QucGRmIjsKKyAgICBHUmVmUHRy
PFdlYktpdERvd25sb2FkPiBvcmlnaW5hbERvd25sb2FkID0gZG93bmxvYWRMb2NhbEZpbGVTdWNj
ZXNzZnVsbHkodGVzdCwgZmlsZW5hbWUpOworICAgIHRlc3QtPmNoZWNrRGVzdGluYXRpb24ob3Jp
Z2luYWxEb3dubG9hZC5nZXQoKSwgZmlsZW5hbWUpOworCisgICAgdGVzdC0+bV9hbGxvd092ZXJ3
cml0ZSA9IHRydWU7CisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gYWRkaXRpb25hbERvd25s
b2FkID0gZG93bmxvYWRMb2NhbEZpbGVTdWNjZXNzZnVsbHkodGVzdCwgZmlsZW5hbWUpOworICAg
IHRlc3QtPmNoZWNrRGVzdGluYXRpb25BbmREZWxldGVGaWxlKGFkZGl0aW9uYWxEb3dubG9hZC5n
ZXQoKSwgZmlsZW5hbWUpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RG93bmxvYWRPdmVyd3JpdGVE
ZXN0aW5hdGlvbkRpc2FsbG93ZWQoRG93bmxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQor
eworICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lID0gInRlc3QucGRmIjsKKyAgICBHUmVmUHRyPFdl
YktpdERvd25sb2FkPiBvcmlnaW5hbERvd25sb2FkID0gZG93bmxvYWRMb2NhbEZpbGVTdWNjZXNz
ZnVsbHkodGVzdCwgZmlsZW5hbWUpOworICAgIHRlc3QtPmNoZWNrRGVzdGluYXRpb24ob3JpZ2lu
YWxEb3dubG9hZC5nZXQoKSwgZmlsZW5hbWUpOworCisgICAgR1VuaXF1ZVB0cjxjaGFyPiBzb3Vy
Y2VQYXRoKGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0UmVzb3VyY2VzRGlyKCkuZGF0YSgpLCBm
aWxlbmFtZSwgbnVsbHB0cikpOworICAgIEdSZWZQdHI8R0ZpbGU+IHNvdXJjZSA9IGFkb3B0R1Jl
ZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHNvdXJjZVBhdGguZ2V0KCkpKTsKKyAgICBHVW5pcXVlUHRy
PGNoYXI+IHNvdXJjZVVSSShnX2ZpbGVfZ2V0X3VyaShzb3VyY2UuZ2V0KCkpKTsKKyAgICBHUmVm
UHRyPFdlYktpdERvd25sb2FkPiBhZGRpdGlvbmFsRG93bmxvYWQgPSBhZG9wdEdSZWYodGVzdC0+
ZG93bmxvYWRVUklBbmRXYWl0VW50aWxGaW5pc2hlcyhzb3VyY2VVUkkuZ2V0KCkpKTsKKyAgICBn
X2Fzc2VydCghd2Via2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyhhZGRpdGlvbmFsRG93bmxvYWQu
Z2V0KCkpKTsKKworICAgIFZlY3RvcjxEb3dubG9hZFRlc3Q6OkRvd25sb2FkRXZlbnQ+JiBldmVu
dHMgPSB0ZXN0LT5tX2Rvd25sb2FkRXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMu
c2l6ZSgpLCA9PSwgNik7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIERvd25s
b2FkVGVzdDo6U3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIERv
d25sb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1syXSwgPT0sIERvd25sb2FkVGVzdDo6Q3JlYXRlZERlc3RpbmF0aW9uKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZERhdGEpOworICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbNF0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1s1XSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQp
OworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3By
b2dyZXNzKGFkZGl0aW9uYWxEb3dubG9hZC5nZXQoKSksID09LCAxKTsKKworICAgIHRlc3QtPmNo
ZWNrRGVzdGluYXRpb25BbmREZWxldGVGaWxlKG9yaWdpbmFsRG93bmxvYWQuZ2V0KCksIGZpbGVu
YW1lKTsKIH0KIAogY2xhc3MgRG93bmxvYWRFcnJvclRlc3Q6IHB1YmxpYyBEb3dubG9hZFRlc3Qg
ewpAQCAtNTMzLDYgKzU4Niw4IEBAIHZvaWQgYmVmb3JlQWxsKCkKICAgICBnX2Fzc2VydChrVGVt
cERpcmVjdG9yeSk7CiAKICAgICBEb3dubG9hZFRlc3Q6OmFkZCgiRG93bmxvYWRzIiwgImxvY2Fs
LWZpbGUiLCB0ZXN0RG93bmxvYWRMb2NhbEZpbGUpOworICAgIERvd25sb2FkVGVzdDo6YWRkKCJE
b3dubG9hZHMiLCAib3ZlcndyaXRlLWRlc3RpbmF0aW9uLWFsbG93ZWQiLCB0ZXN0RG93bmxvYWRP
dmVyd3JpdGVEZXN0aW5hdGlvbkFsbG93ZWQpOworICAgIERvd25sb2FkVGVzdDo6YWRkKCJEb3du
bG9hZHMiLCAib3ZlcndyaXRlLWRlc3RpbmF0aW9uLWRpc2FsbG93ZWQiLCB0ZXN0RG93bmxvYWRP
dmVyd3JpdGVEZXN0aW5hdGlvbkRpc2FsbG93ZWQpOwogICAgIERvd25sb2FkRXJyb3JUZXN0Ojph
ZGQoIkRvd25sb2FkcyIsICJsb2NhbC1maWxlLWVycm9yIiwgdGVzdERvd25sb2FkTG9jYWxGaWxl
RXJyb3IpOwogICAgIERvd25sb2FkVGVzdDo6YWRkKCJEb3dubG9hZHMiLCAicmVtb3RlLWZpbGUi
LCB0ZXN0RG93bmxvYWRSZW1vdGVGaWxlKTsKICAgICBEb3dubG9hZEVycm9yVGVzdDo6YWRkKCJE
b3dubG9hZHMiLCAicmVtb3RlLWZpbGUtZXJyb3IiLCB0ZXN0RG93bmxvYWRSZW1vdGVGaWxlRXJy
b3IpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237460</attachid>
            <date>2014-09-01 13:17:12 -0700</date>
            <delta_ts>2014-09-06 16:56:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136372-20140901151706.patch</filename>
            <type>text/plain</type>
            <size>19961</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczMTU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNWQxOTgyZjEzNDljZmNj
YTdmNTZmOTAwY2UzODMyZmU2M2NhN2VmMS4uYTQyYzI3MTQzM2Y5MDY0M2IzYjVhZGYwZGI4ZGEz
MWI2MTcwNDMwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE0LTA5LTAxICBNaWNo
YWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBh
bGxvdyBvdmVyd3JpdGluZyBkZXN0aW5hdGlvbiBvZiBkb3dubG9hZAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MzcyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXREb3dubG9hZC5jcHA6CisgICAgICAgICh3ZWJraXREb3dubG9hZEdldFByb3BlcnR5KTogQWRk
ZWQKKyAgICAgICAgKHdlYmtpdF9kb3dubG9hZF9jbGFzc19pbml0KTogSW5zdGFsbCB3ZWJraXRE
b3dubG9hZEdldFByb3BlcnR5CisgICAgICAgICh3ZWJraXREb3dubG9hZERlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKTogQWRkCisgICAgICAgIGFsbG93T3ZlcndyaXRlIHBh
cmFtZXRlciBhbmQgc2V0IGl0IGFwcHJvcHJpYXRlbHkKKyAgICAgICAgKHdlYmtpdF9kb3dubG9h
ZF9nZXRfYWxsb3dfb3ZlcndyaXRlKTogQWRkZWQKKyAgICAgICAgKHdlYmtpdF9kb3dubG9hZF9z
ZXRfYWxsb3dfb3ZlcndyaXRlKTogQWRkZWQKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXREb3dubG9hZC5oOiBOZXcgQVBJCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RG93bmxvYWRDbGllbnQuY3BwOgorICAgICAgICAoZGVjaWRlRGVzdGluYXRpb25XaXRoU3Vn
Z2VzdGVkRmlsZW5hbWUpOiBQYXNzIGFsbG93T3ZlcndyaXRlIHRvCisgICAgICAgIHdlYmtpdERv
d25sb2FkRGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZFByaXZhdGUuaDogQWRkIGFsbG93T3Zlcndy
aXRlCisgICAgICAgIHBhcmFtZXRlciB0byB3ZWJraXREb3dubG9hZERlY2lkZURlc3RpbmF0aW9u
V2l0aFN1Z2dlc3RlZEZpbGVuYW1lCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93
ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDogTmV3IEFQSQorCiAyMDE0LTA5LTAxICBHeXV5b3VuZyBL
aW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0NNQUtFXSBCdWlsZCB3
YXJuaW5nIGJ5IElOVEVSRkFDRV9MSU5LX0xJQlJBUklFUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuY3BwCmluZGV4IGM0ODNiOTI3Y2Zk
MjM2NzA1YzIyODZkNzZjNzc3NjJkZTBlYzAwNjcuLmZlYjhhZWM5NGZkZGYyMmI2ZTU3YmFjNTFm
MmY2OTQ2YzVjMzU3YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdERvd25sb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXREb3dubG9hZC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgSWdhbGlh
IFMuTC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNjMsNyArNjMsOCBAQCBlbnVtIHsKIAogICAg
IFBST1BfREVTVElOQVRJT04sCiAgICAgUFJPUF9SRVNQT05TRSwKLSAgICBQUk9QX0VTVElNQVRF
RF9QUk9HUkVTUworICAgIFBST1BfRVNUSU1BVEVEX1BST0dSRVNTLAorICAgIFBST1BfQUxMT1df
T1ZFUldSSVRFCiB9OwogCiBzdHJ1Y3QgX1dlYktpdERvd25sb2FkUHJpdmF0ZSB7CkBAIC04NCwx
MiArODUsMjYgQEAgc3RydWN0IF9XZWJLaXREb3dubG9hZFByaXZhdGUgewogICAgIEdVbmlxdWVQ
dHI8R1RpbWVyPiB0aW1lcjsKICAgICBnZG91YmxlIGxhc3RQcm9ncmVzczsKICAgICBnZG91Ymxl
IGxhc3RFbGFwc2VkOworICAgIGJvb2wgYWxsb3dPdmVyd3JpdGU7CiB9OwogCiBzdGF0aWMgZ3Vp
bnQgc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CiAKIFdFQktJVF9ERUZJTkVfVFlQRShX
ZWJLaXREb3dubG9hZCwgd2Via2l0X2Rvd25sb2FkLCBHX1RZUEVfT0JKRUNUKQogCitzdGF0aWMg
dm9pZCB3ZWJraXREb3dubG9hZFNldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cElkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAg
V2ViS2l0RG93bmxvYWQqIGRvd25sb2FkID0gV0VCS0lUX0RPV05MT0FEKG9iamVjdCk7CisKKyAg
ICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9BTExPV19PVkVSV1JJVEU6CisgICAg
ICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfYWxsb3dfb3ZlcndyaXRlKGRvd25sb2FkLCBnX3ZhbHVl
X2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcGFy
YW1TcGVjKTsKKyAgICB9Cit9CisKIHN0YXRpYyB2b2lkIHdlYmtpdERvd25sb2FkR2V0UHJvcGVy
dHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNw
ZWMqIHBhcmFtU3BlYykKIHsKICAgICBXZWJLaXREb3dubG9hZCogZG93bmxvYWQgPSBXRUJLSVRf
RE9XTkxPQUQob2JqZWN0KTsKQEAgLTEwNCw2ICsxMTksOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRE
b3dubG9hZEdldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBHVmFsdWUq
IHZhbAogICAgIGNhc2UgUFJPUF9FU1RJTUFURURfUFJPR1JFU1M6CiAgICAgICAgIGdfdmFsdWVf
c2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3Mo
ZG93bmxvYWQpKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FMTE9XX09WRVJXUklU
RToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2Rvd25sb2FkX2dl
dF9hbGxvd19vdmVyd3JpdGUoZG93bmxvYWQpKTsKICAgICBkZWZhdWx0OgogICAgICAgICBHX09C
SkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBhcmFtU3BlYyk7
CiAgICAgfQpAQCAtMTMwLDYgKzE0Nyw3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXREb3dubG9h
ZERlY2lkZURlc3RpbmF0aW9uKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QKIHN0YXRp
YyB2b2lkIHdlYmtpdF9kb3dubG9hZF9jbGFzc19pbml0KFdlYktpdERvd25sb2FkQ2xhc3MqIGRv
d25sb2FkQ2xhc3MpCiB7CiAgICAgR09iamVjdENsYXNzKiBvYmplY3RDbGFzcyA9IEdfT0JKRUNU
X0NMQVNTKGRvd25sb2FkQ2xhc3MpOworICAgIG9iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3
ZWJraXREb3dubG9hZFNldFByb3BlcnR5OwogICAgIG9iamVjdENsYXNzLT5nZXRfcHJvcGVydHkg
PSB3ZWJraXREb3dubG9hZEdldFByb3BlcnR5OwogCiAgICAgZG93bmxvYWRDbGFzcy0+ZGVjaWRl
X2Rlc3RpbmF0aW9uID0gd2Via2l0RG93bmxvYWREZWNpZGVEZXN0aW5hdGlvbjsKQEAgLTE3OSw2
ICsxOTcsMjUgQEAgc3RhdGljIHZvaWQgd2Via2l0X2Rvd25sb2FkX2NsYXNzX2luaXQoV2ViS2l0
RG93bmxvYWRDbGFzcyogZG93bmxvYWRDbGFzcykKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CiAK
ICAgICAvKioKKyAgICAgKiBXZWJLaXREb3dubG9hZDphbGxvdy1vdmVyd3JpdGU6CisgICAgICoK
KyAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgZG93bmxvYWQgaXMgYWxsb3dlZCB0byBvdmVyd3Jp
dGUgYW4gZXhpc3RpbmcgZmlsZSBvbgorICAgICAqIGRpc2suIElmIHRoaXMgcHJvcGVydHkgaXMg
JUZBTFNFIGFuZCB0aGUgZGVzdGluYXRpb24gYWxyZWFkeSBleGlzdHMsCisgICAgICogdGhlIGRv
d25sb2FkIHdpbGwgZmFpbC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAyLjYKKyAgICAgKi8KKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9BTExPV19PVkVSV1JJVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29s
ZWFuKAorICAgICAgICAgICAgImFsbG93LW92ZXJ3cml0ZSIsCisgICAgICAgICAgICBfKCJBbGxv
dyBPdmVyd3JpdGUiKSwKKyAgICAgICAgICAgIF8oIldoZXRoZXIgdGhlIGRlc3RpbmF0aW9uIG1h
eSBiZSBvdmVyd3JpdHRlbiIpLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICAvKioKICAgICAgKiBXZWJLaXREb3dubG9hZDo6
cmVjZWl2ZWQtZGF0YToKICAgICAgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQKICAg
ICAgKiBAZGF0YV9sZW5ndGg6IHRoZSBsZW5ndGggb2YgZGF0YSByZWNlaXZlZCBpbiBieXRlcwpA
QCAtMzcwLDEyICs0MDcsMTMgQEAgdm9pZCB3ZWJraXREb3dubG9hZEZpbmlzaGVkKFdlYktpdERv
d25sb2FkKiBkb3dubG9hZCkKICAgICBnX3NpZ25hbF9lbWl0KGRvd25sb2FkLCBzaWduYWxzW0ZJ
TklTSEVEXSwgMCwgTlVMTCk7CiB9CiAKLUNTdHJpbmcgd2Via2l0RG93bmxvYWREZWNpZGVEZXN0
aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNv
bnN0IENTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQorQ1N0cmluZyB3ZWJraXREb3dubG9hZERl
Y2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKFdlYktpdERvd25sb2FkKiBkb3du
bG9hZCwgY29uc3QgQ1N0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGJvb2wmIGFsbG93T3Zlcndy
aXRlKQogewogICAgIGlmIChkb3dubG9hZC0+cHJpdi0+aXNDYW5jZWxsZWQpCiAgICAgICAgIHJl
dHVybiAiIjsKICAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKICAgICBnX3NpZ25hbF9lbWl0KGRv
d25sb2FkLCBzaWduYWxzW0RFQ0lERV9ERVNUSU5BVElPTl0sIDAsIHN1Z2dlc3RlZEZpbGVuYW1l
LmRhdGEoKSwgJnJldHVyblZhbHVlKTsKKyAgICBhbGxvd092ZXJ3cml0ZSA9IGRvd25sb2FkLT5w
cml2LT5hbGxvd092ZXJ3cml0ZTsKICAgICByZXR1cm4gZG93bmxvYWQtPnByaXYtPmRlc3RpbmF0
aW9uVVJJOwogfQogCkBAIC01NjgsMyArNjA2LDQ0IEBAIFdlYktpdFdlYlZpZXcqIHdlYmtpdF9k
b3dubG9hZF9nZXRfd2ViX3ZpZXcoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQogCiAgICAgcmV0
dXJuIGRvd25sb2FkLT5wcml2LT53ZWJWaWV3OwogfQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9h
ZF9nZXRfYWxsb3dfb3ZlcndyaXRlOgorICogQGRvd25sb2FkOiBhICNXZWJLaXREb3dubG9hZAor
ICoKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlICNXZWJLaXREb3dubG9hZDph
bGxvdy1vdmVyd3JpdGUgcHJvcGVydHksCisgKiB3aGljaCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhl
IGRvd25sb2FkIHdpbGwgb3ZlcndyaXRlIGFuIGV4aXN0aW5nIGZpbGUgb24KKyAqIGRpc2ssIG9y
IGlmIGl0IHdpbGwgZmFpbCBpZiB0aGUgZGVzdGluYXRpb24gYWxyZWFkeSBleGlzdHMuCisgKgor
ICogUmV0dXJuczogdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlICNXZWJLaXREb3dubG9hZDphbGxv
dy1vdmVyd3JpdGUgcHJvcGVydHkKKyAqCisgKiBTaW5jZTogMi42CisgKi8KK2dib29sZWFuIHdl
YmtpdF9kb3dubG9hZF9nZXRfYWxsb3dfb3ZlcndyaXRlKFdlYktpdERvd25sb2FkKiBkb3dubG9h
ZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxv
YWQpLCBGQUxTRSk7CisKKyAgICByZXR1cm4gZG93bmxvYWQtPnByaXYtPmFsbG93T3ZlcndyaXRl
OworfQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9hZF9zZXRfYWxsb3dfb3ZlcndyaXRlOgorICog
QGRvd25sb2FkOiBhICNXZWJLaXREb3dubG9hZAorICogQGFsbG93ZWQ6IHRoZSBuZXcgdmFsdWUg
Zm9yIHRoZSAjV2ViS2l0RG93bmxvYWQ6YWxsb3ctb3ZlcndyaXRlIHByb3BlcnR5CisgKgorICog
U2V0cyB0aGUgI1dlYktpdERvd25sb2FkOmFsbG93LW92ZXJ3cml0ZSBwcm9wZXJ0eSwgd2hpY2gg
ZGV0ZXJtaW5lcyB3aGV0aGVyCisgKiB0aGUgZG93bmxvYWQgbWF5IG92ZXJ3cml0ZSBhbiBleGlz
dGluZyBmaWxlIG9uIGRpc2ssIG9yIGlmIGl0IHdpbGwgZmFpbCBpZgorICogdGhlIGRlc3RpbmF0
aW9uIGFscmVhZHkgZXhpc3RzLgorICoKKyAqIFNpbmNlOiAyLjYKKyAqLwordm9pZCB3ZWJraXRf
ZG93bmxvYWRfc2V0X2FsbG93X292ZXJ3cml0ZShXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGdi
b29sZWFuIGFsbG93ZWQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRE9XTkxP
QUQoZG93bmxvYWQpKTsKKworICAgIGlmIChhbGxvd2VkID09IGRvd25sb2FkLT5wcml2LT5hbGxv
d092ZXJ3cml0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZG93bmxvYWQtPnByaXYtPmFsbG93
T3ZlcndyaXRlID0gYWxsb3dlZDsKKyAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1QoZG93bmxv
YWQpLCAiYWxsb3ctb3ZlcndyaXRlIik7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuaAppbmRleCA0OTNiZmVhNDAyMmM5ZTA2ZGEwZDUw
ZGUyODczN2U0NzEwMDdhOWIzLi43ZTZiZmViNDZkY2JiMjJjZWFkMGU4YmRhNzMxODZkMTZjMTgx
MDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRE
b3dubG9hZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERv
d25sb2FkLmgKQEAgLTkyLDYgKzkyLDEzIEBAIHdlYmtpdF9kb3dubG9hZF9nZXRfcmVjZWl2ZWRf
ZGF0YV9sZW5ndGggKFdlYktpdERvd25sb2FkICpkb3dubG9hZCk7CiBXRUJLSVRfQVBJIFdlYktp
dFdlYlZpZXcgKgogd2Via2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyAgICAgICAgICAgICAoV2Vi
S2l0RG93bmxvYWQgKmRvd25sb2FkKTsKIAorV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2Rv
d25sb2FkX2dldF9hbGxvd19vdmVyd3JpdGUgICAgICAoV2ViS2l0RG93bmxvYWQgKmRvd25sb2Fk
KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG93bmxvYWRfc2V0X2FsbG93X292ZXJ3cml0
ZSAgICAgIChXZWJLaXREb3dubG9hZCAqZG93bmxvYWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgYWxsb3dlZCk7CisKIEdfRU5EX0RF
Q0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RG93bmxvYWRDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RG93bmxvYWRDbGllbnQuY3BwCmluZGV4IDE5N2I2YjViNGNjMDUzYjY5MmM1
NjZjOTQxNmViMTJhYWM3MzFkNTEuLjBmNGNlODY4YzEzOTA5N2I4MTM1MzY1NDg1MzkzZDVkMjM0
NGY2NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dERvd25sb2FkQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXREb3dubG9hZENsaWVudC5jcHAKQEAgLTU0LDExICs1NCwxMCBAQCBzdGF0aWMgdm9p
ZCBkaWRSZWNlaXZlRGF0YShXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwg
dWludDY0X3QgbGVuZwogICAgIHdlYmtpdERvd25sb2FkTm90aWZ5UHJvZ3Jlc3MoZG93bmxvYWQu
Z2V0KCksIGxlbmd0aCk7CiB9CiAKLXN0YXRpYyBXS1N0cmluZ1JlZiBkZWNpZGVEZXN0aW5hdGlv
bldpdGhTdWdnZXN0ZWRGaWxlbmFtZShXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3du
bG9hZCwgV0tTdHJpbmdSZWYgZmlsZW5hbWUsIGJvb2wqIC8qIGFsbG93T3ZlcndyaXRlICovLCBj
b25zdCB2b2lkKiAvKiBjbGllbnRJbmZvICovKQorc3RhdGljIFdLU3RyaW5nUmVmIGRlY2lkZURl
c3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJl
ZiB3a0Rvd25sb2FkLCBXS1N0cmluZ1JlZiBmaWxlbmFtZSwgYm9vbCogYWxsb3dPdmVyd3JpdGUs
IGNvbnN0IHZvaWQqIC8qIGNsaWVudEluZm8gKi8pCiB7CiAgICAgR1JlZlB0cjxXZWJLaXREb3du
bG9hZD4gZG93bmxvYWQgPSB3ZWJraXRXZWJDb250ZXh0R2V0T3JDcmVhdGVEb3dubG9hZCh0b0lt
cGwod2tEb3dubG9hZCkpOwotICAgIENTdHJpbmcgZGVzdGluYXRpb25VUkkgPSB3ZWJraXREb3du
bG9hZERlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKGRvd25sb2FkLmdldCgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvSW1wbChmaWxlbmFtZSktPnN0cmluZygpLnV0
ZjgoKSk7CisgICAgQ1N0cmluZyBkZXN0aW5hdGlvblVSSSA9IHdlYmtpdERvd25sb2FkRGVjaWRl
RGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoZG93bmxvYWQuZ2V0KCksIHRvSW1wbChm
aWxlbmFtZSktPnN0cmluZygpLnV0ZjgoKSwgKmFsbG93T3ZlcndyaXRlKTsKICAgICByZXR1cm4g
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZGVzdGluYXRpb25VUkkuZGF0YSgpKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93
bmxvYWRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRE
b3dubG9hZFByaXZhdGUuaAppbmRleCA5ODBhZDczMmI0YWMwYWVkY2JjMzE1NjE1YzU3MjVjMmRi
NjFlNDQwLi5iOTg2Y2EyMzE4ZTczYTY1MjVlMzY2NTg1MWRlNTEzMmQxMjkyYjFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZFByaXZh
dGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9h
ZFByaXZhdGUuaApAQCAtMzUsNyArMzUsNyBAQCB2b2lkIHdlYmtpdERvd25sb2FkTm90aWZ5UHJv
Z3Jlc3MoV2ViS2l0RG93bmxvYWQqLCBndWludDY0IGJ5dGVzUmVjZWl2ZWQpOwogdm9pZCB3ZWJr
aXREb3dubG9hZEZhaWxlZChXZWJLaXREb3dubG9hZCosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
RXJyb3ImKTsKIHZvaWQgd2Via2l0RG93bmxvYWRDYW5jZWxsZWQoV2ViS2l0RG93bmxvYWQqKTsK
IHZvaWQgd2Via2l0RG93bmxvYWRGaW5pc2hlZChXZWJLaXREb3dubG9hZCopOwotQ1N0cmluZyB3
ZWJraXREb3dubG9hZERlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKFdlYktp
dERvd25sb2FkKiwgY29uc3QgQ1N0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpOworQ1N0cmluZyB3
ZWJraXREb3dubG9hZERlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKFdlYktp
dERvd25sb2FkKiwgY29uc3QgQ1N0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGJvb2wmIGFsbG93
T3ZlcndyaXRlKTsKIHZvaWQgd2Via2l0RG93bmxvYWREZXN0aW5hdGlvbkNyZWF0ZWQoV2ViS2l0
RG93bmxvYWQqLCBjb25zdCBDU3RyaW5nJiBkZXN0aW5hdGlvblVSSSk7CiAKICNlbmRpZiAvLyBX
ZWJLaXREb3dubG9hZFByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKaW5kZXggODVl
Y2Y3MTFkNDQwZDhiM2ViOGJjMTZjZGRjYjExOGI0NTMwNDliMS4uZDU2M2YzM2M0NzBjZjNiN2Iz
NzBlZDZhMWFmMGM3YTE2YmQyMmNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CkBAIC01
MjIsNiArNTIyLDggQEAgd2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MKIHdl
YmtpdF9kb3dubG9hZF9nZXRfZWxhcHNlZF90aW1lCiB3ZWJraXRfZG93bmxvYWRfZ2V0X3JlY2Vp
dmVkX2RhdGFfbGVuZ3RoCiB3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92aWV3Cit3ZWJraXRfZG93
bmxvYWRfZ2V0X2FsbG93X292ZXJ3cml0ZQord2Via2l0X2Rvd25sb2FkX3NldF9hbGxvd19vdmVy
d3JpdGUKIAogPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CiBXZWJLaXREb3dubG9hZENsYXNzCmRpZmYg
LS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDlhYzBiMTYy
YjJhODFkYmY2ZDBmYzI4MzJlZjY5NDZhOTk0NmJhYy4uMWQyYTI3N2FmYjEzZDQ1N2Q4YjllMTg3
ZjA1YjgxNTk0MWVjMGNhOSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE0LTA5LTAxICBNaWNoYWVsIENhdGFuemFy
byAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBhbGxvdyBvdmVyd3Jp
dGluZyBkZXN0aW5hdGlvbiBvZiBkb3dubG9hZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MzcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVz
dERvd25sb2Fkcy5jcHA6CisgICAgICAgIChkb3dubG9hZExvY2FsRmlsZVN1Y2Nlc3NmdWxseSk6
IFNwbGl0IGZyb20gdGVzdERvd25sb2FkTG9jYWxGaWxlCisgICAgICAgICh0ZXN0RG93bmxvYWRM
b2NhbEZpbGUpOiBTcGxpdCBvZmYgZG93bmxvYWRMb2NhbEZpbGVTdWNjZXNzZnVsbHkKKyAgICAg
ICAgKHRlc3REb3dubG9hZE92ZXJ3cml0ZURlc3RpbmF0aW9uQWxsb3dlZCk6IEFkZGVkCisgICAg
ICAgICh0ZXN0RG93bmxvYWRPdmVyd3JpdGVEZXN0aW5hdGlvbkRpc2FsbG93ZWQpOiBBZGRlZAor
ICAgICAgICAoYmVmb3JlQWxsKTogQWRkIG5ldyB0ZXN0cworCiAyMDE0LTA5LTAxICBDYXJsb3Mg
QWxiZXJ0byBMb3BleiBQZXJleiAgPGNsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtd
IFtKSEJ1aWxkXSBDeWNsaWMgZGVwZW5kZW5jeSBiZXR3ZWVuIGNhaXJvIGFuZCBsaWJyc3ZnLgpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3REb3du
bG9hZHMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3REb3du
bG9hZHMuY3BwCmluZGV4IGM5YjMwZDMxZmIxZGZlZTBlMDM5NmIwNjUxOTBjM2YzODkyYzk5YjQu
LjhhNDA4MjMxZGYzN2Q2M2YxMmE5YWM3NjU3MDJjZTJkMzY2Y2E1ZDAgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RG93bmxvYWRzLmNwcAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdERvd25sb2Fkcy5jcHAK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgSWdhbGlhIFMuTC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtOTgsNiArOTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIDogbV93ZWJDb250ZXh0KHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKQogICAgICAgICAsIG1fbWFpbkxvb3AoZ19tYWlu
X2xvb3BfbmV3KDAsIFRSVUUpKQogICAgICAgICAsIG1fZG93bmxvYWRTaXplKDApCisgICAgICAg
ICwgbV9hbGxvd092ZXJ3cml0ZShmYWxzZSkKICAgICB7CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobV93ZWJDb250ZXh0LCAiZG93bmxvYWQtc3RhcnRlZCIsIEdfQ0FMTEJBQ0soZG93bmxvYWRT
dGFydGVkQ2FsbGJhY2spLCB0aGlzKTsKICAgICB9CkBAIC0xMTAsNiArMTExLDggQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0ZWQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQog
ICAgIHsKKyAgICAgICAgbV9kb3dubG9hZFNpemUgPSAwOworICAgICAgICBtX2Rvd25sb2FkRXZl
bnRzLmNsZWFyKCk7CiAgICAgICAgIG1fZG93bmxvYWRFdmVudHMuYXBwZW5kKFN0YXJ0ZWQpOwog
ICAgIH0KIApAQCAtMTU0LDIzICsxNTcsMzEgQEAgcHVibGljOgogICAgICAgICBXZWJLaXREb3du
bG9hZCogZG93bmxvYWQgPSB3ZWJraXRfd2ViX2NvbnRleHRfZG93bmxvYWRfdXJpKG1fd2ViQ29u
dGV4dCwgcmVxdWVzdFVSSS5kYXRhKCkpOwogICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRX
aGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGRvd25sb2FkKSk7CiAKKyAgICAgICAgQVNTRVJUKCF3
ZWJraXRfZG93bmxvYWRfZ2V0X2FsbG93X292ZXJ3cml0ZShkb3dubG9hZCkpOworICAgICAgICB3
ZWJraXRfZG93bmxvYWRfc2V0X2FsbG93X292ZXJ3cml0ZShkb3dubG9hZCwgbV9hbGxvd092ZXJ3
cml0ZSk7CisgICAgICAgIEFTU0VSVCh3ZWJraXRfZG93bmxvYWRfZ2V0X2FsbG93X292ZXJ3cml0
ZShkb3dubG9hZCkgPT0gbV9hbGxvd092ZXJ3cml0ZSk7CisKICAgICAgICAgV2ViS2l0VVJJUmVx
dWVzdCogcmVxdWVzdCA9IHdlYmtpdF9kb3dubG9hZF9nZXRfcmVxdWVzdChkb3dubG9hZCk7CiAg
ICAgICAgIGdfYXNzZXJ0KHJlcXVlc3QpOwogICAgICAgICBBU1NFUlRfQ01QX0NTVFJJTkcod2Vi
a2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCByZXF1ZXN0VVJJKTsKIAogICAg
ICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Ci0KICAgICAgICAgcmV0dXJuIGRvd25s
b2FkOwogICAgIH0KIAotICAgIHZvaWQgY2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUoV2Vi
S2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBjaGFyKiBleHBlY3RlZE5hbWUpCisgICAgdm9p
ZCBjaGVja0Rlc3RpbmF0aW9uKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgY2hhciog
ZXhwZWN0ZWROYW1lKQogICAgIHsKICAgICAgICAgaWYgKCF3ZWJraXRfZG93bmxvYWRfZ2V0X2Rl
c3RpbmF0aW9uKGRvd25sb2FkKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgR1JlZlB0
cjxHRmlsZT4gZGVzdEZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfdXJpKHdlYmtpdF9k
b3dubG9hZF9nZXRfZGVzdGluYXRpb24oZG93bmxvYWQpKSk7CiAgICAgICAgIEdVbmlxdWVQdHI8
Y2hhcj4gZGVzdEJhc2VuYW1lKGdfZmlsZV9nZXRfYmFzZW5hbWUoZGVzdEZpbGUuZ2V0KCkpKTsK
ICAgICAgICAgZ19hc3NlcnRfY21wc3RyKGRlc3RCYXNlbmFtZS5nZXQoKSwgPT0sIGV4cGVjdGVk
TmFtZSk7CisgICAgfQogCisgICAgdm9pZCBjaGVja0Rlc3RpbmF0aW9uQW5kRGVsZXRlRmlsZShX
ZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGNoYXIqIGV4cGVjdGVkTmFtZSkKKyAgICB7
CisgICAgICAgIGNoZWNrRGVzdGluYXRpb24oZG93bmxvYWQsIGV4cGVjdGVkTmFtZSk7CisgICAg
ICAgIEdSZWZQdHI8R0ZpbGU+IGRlc3RGaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3Vy
aSh3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkKSkpOwogICAgICAgICBn
X2ZpbGVfZGVsZXRlKGRlc3RGaWxlLmdldCgpLCAwLCAwKTsKICAgICB9CiAKQEAgLTE3OCwxMSAr
MTg5LDEyIEBAIHB1YmxpYzoKICAgICBHTWFpbkxvb3AqIG1fbWFpbkxvb3A7CiAgICAgVmVjdG9y
PERvd25sb2FkRXZlbnQ+IG1fZG93bmxvYWRFdmVudHM7CiAgICAgZ3VpbnQ2NCBtX2Rvd25sb2Fk
U2l6ZTsKKyAgICBib29sIG1fYWxsb3dPdmVyd3JpdGU7CiB9OwogCi1zdGF0aWMgdm9pZCB0ZXN0
RG93bmxvYWRMb2NhbEZpbGUoRG93bmxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorc3Rh
dGljIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkTG9jYWxGaWxlU3VjY2Vzc2Z1bGx5
KERvd25sb2FkVGVzdCogdGVzdCwgY29uc3QgY2hhciogZmlsZW5hbWUpCiB7Ci0gICAgR1VuaXF1
ZVB0cjxjaGFyPiBzb3VyY2VQYXRoKGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0UmVzb3VyY2Vz
RGlyKCkuZGF0YSgpLCAidGVzdC5wZGYiLCBudWxscHRyKSk7CisgICAgR1VuaXF1ZVB0cjxjaGFy
PiBzb3VyY2VQYXRoKGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0UmVzb3VyY2VzRGlyKCkuZGF0
YSgpLCBmaWxlbmFtZSwgbnVsbHB0cikpOwogICAgIEdSZWZQdHI8R0ZpbGU+IHNvdXJjZSA9IGFk
b3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHNvdXJjZVBhdGguZ2V0KCkpKTsKICAgICBHUmVm
UHRyPEdGaWxlSW5mbz4gc291cmNlSW5mbyA9IGFkb3B0R1JlZihnX2ZpbGVfcXVlcnlfaW5mbyhz
b3VyY2UuZ2V0KCksIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0laRSwgc3RhdGljX2Nhc3Q8
R0ZpbGVRdWVyeUluZm9GbGFncz4oMCksIDAsIDApKTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IHNv
dXJjZVVSSShnX2ZpbGVfZ2V0X3VyaShzb3VyY2UuZ2V0KCkpKTsKQEAgLTIwNCw3ICsyMTYsMjYg
QEAgc3RhdGljIHZvaWQgdGVzdERvd25sb2FkTG9jYWxGaWxlKERvd25sb2FkVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9kb3dubG9hZFNpemUs
ID09LCBnX2ZpbGVfaW5mb19nZXRfc2l6ZShzb3VyY2VJbmZvLmdldCgpKSk7CiAgICAgZ19hc3Nl
cnQod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9hZC5nZXQoKSkpOwogICAg
IGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNz
KGRvd25sb2FkLmdldCgpKSwgPT0sIDEpOwotICAgIHRlc3QtPmNoZWNrRGVzdGluYXRpb25BbmRE
ZWxldGVGaWxlKGRvd25sb2FkLmdldCgpLCAidGVzdC5wZGYiKTsKKworICAgIHJldHVybiBkb3du
bG9hZDsKK30KKworc3RhdGljIHZvaWQgdGVzdERvd25sb2FkTG9jYWxGaWxlKERvd25sb2FkVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZmlsZW5h
bWUgPSAidGVzdC5wZGYiOworICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0g
ZG93bmxvYWRMb2NhbEZpbGVTdWNjZXNzZnVsbHkodGVzdCwgZmlsZW5hbWUpOworICAgIHRlc3Qt
PmNoZWNrRGVzdGluYXRpb25BbmREZWxldGVGaWxlKGRvd25sb2FkLmdldCgpLCBmaWxlbmFtZSk7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3REb3dubG9hZE92ZXJ3cml0ZURlc3RpbmF0aW9uQWxsb3dl
ZChEb3dubG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0
IGNoYXIqIGZpbGVuYW1lID0gInRlc3QucGRmIjsKKyAgICBHUmVmUHRyPFdlYktpdERvd25sb2Fk
PiBvcmlnaW5hbERvd25sb2FkID0gZG93bmxvYWRMb2NhbEZpbGVTdWNjZXNzZnVsbHkodGVzdCwg
ZmlsZW5hbWUpOworICAgIHRlc3QtPmNoZWNrRGVzdGluYXRpb24ob3JpZ2luYWxEb3dubG9hZC5n
ZXQoKSwgZmlsZW5hbWUpOworCisgICAgdGVzdC0+bV9hbGxvd092ZXJ3cml0ZSA9IHRydWU7Cisg
ICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gYWRkaXRpb25hbERvd25sb2FkID0gZG93bmxvYWRM
b2NhbEZpbGVTdWNjZXNzZnVsbHkodGVzdCwgZmlsZW5hbWUpOworICAgIHRlc3QtPmNoZWNrRGVz
dGluYXRpb25BbmREZWxldGVGaWxlKGFkZGl0aW9uYWxEb3dubG9hZC5nZXQoKSwgZmlsZW5hbWUp
OwogfQogCiBjbGFzcyBEb3dubG9hZEVycm9yVGVzdDogcHVibGljIERvd25sb2FkVGVzdCB7CkBA
IC0yMTMsMjAgKzI0NCwxOCBAQCBwdWJsaWM6CiAKICAgICBEb3dubG9hZEVycm9yVGVzdCgpCiAg
ICAgICAgIDogbV9leHBlY3RlZEVycm9yKFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ORVRXT1JLKQor
ICAgICAgICAsIG1fcGVybWl0U3VjY2VzcyhmYWxzZSkKICAgICB7CiAgICAgfQogCi0gICAgdm9p
ZCByZWNlaXZlZFJlc3BvbnNlKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKLSAgICB7Ci0gICAg
ICAgIERvd25sb2FkVGVzdDo6cmVjZWl2ZWRSZXNwb25zZShkb3dubG9hZCk7Ci0gICAgfQotCiAg
ICAgdm9pZCBjcmVhdGVkRGVzdGluYXRpb24oV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25z
dCBjaGFyKiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIGlmIChtX2V4cGVjdGVkRXJyb3Ig
PT0gV0VCS0lUX0RPV05MT0FEX0VSUk9SX0NBTkNFTExFRF9CWV9VU0VSKQogICAgICAgICAgICAg
d2Via2l0X2Rvd25sb2FkX2NhbmNlbChkb3dubG9hZCk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAg
ZWxzZSBpZiAoIW1fcGVybWl0U3VjY2VzcykKICAgICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFj
aGVkKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIERvd25sb2FkVGVzdDo6Y3JlYXRlZERl
c3RpbmF0aW9uKGRvd25sb2FkLCBkZXN0aW5hdGlvbik7CiAgICAgfQogCiAgICAgdm9pZCBmYWls
ZWQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBHRXJyb3IqIGVycm9yKQpAQCAtMjM3LDcgKzI2
Niw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGVjaWRlRGVzdGluYXRpb24oV2ViS2l0RG93bmxv
YWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogc3VnZ2VzdGVkRmlsZW5hbWUpCiAgICAgewotICAg
ICAgICBpZiAobV9leHBlY3RlZEVycm9yICE9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ERVNUSU5B
VElPTikgeworICAgICAgICBpZiAobV9wZXJtaXRTdWNjZXNzIHx8IG1fZXhwZWN0ZWRFcnJvciAh
PSBXRUJLSVRfRE9XTkxPQURfRVJST1JfREVTVElOQVRJT04pIHsKICAgICAgICAgICAgIERvd25s
b2FkVGVzdDo6ZGVjaWRlRGVzdGluYXRpb24oZG93bmxvYWQsIHN1Z2dlc3RlZEZpbGVuYW1lKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjQ1LDggKzI3NCwzNSBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgV2ViS2l0RG93bmxvYWRFcnJvciBtX2V4cGVjdGVkRXJyb3I7Cisg
ICAgYm9vbCBtX3Blcm1pdFN1Y2Nlc3M7CiB9OwogCitzdGF0aWMgdm9pZCB0ZXN0RG93bmxvYWRP
dmVyd3JpdGVEZXN0aW5hdGlvbkRpc2FsbG93ZWQoRG93bmxvYWRFcnJvclRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZpbGVuYW1lID0gInRlc3Qu
cGRmIjsKKyAgICB0ZXN0LT5tX3Blcm1pdFN1Y2Nlc3MgPSB0cnVlOworICAgIEdSZWZQdHI8V2Vi
S2l0RG93bmxvYWQ+IG9yaWdpbmFsRG93bmxvYWQgPSBkb3dubG9hZExvY2FsRmlsZVN1Y2Nlc3Nm
dWxseSh0ZXN0LCBmaWxlbmFtZSk7CisgICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbihvcmlnaW5h
bERvd25sb2FkLmdldCgpLCBmaWxlbmFtZSk7CisKKyAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3Ig
PSBXRUJLSVRfRE9XTkxPQURfRVJST1JfREVTVElOQVRJT047CisgICAgdGVzdC0+bV9wZXJtaXRT
dWNjZXNzID0gZmFsc2U7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBzb3VyY2VQYXRoKGdfYnVpbGRf
ZmlsZW5hbWUoVGVzdDo6Z2V0UmVzb3VyY2VzRGlyKCkuZGF0YSgpLCBmaWxlbmFtZSwgbnVsbHB0
cikpOworICAgIEdSZWZQdHI8R0ZpbGU+IHNvdXJjZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zv
cl9wYXRoKHNvdXJjZVBhdGguZ2V0KCkpKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHNvdXJjZVVS
SShnX2ZpbGVfZ2V0X3VyaShzb3VyY2UuZ2V0KCkpKTsKKyAgICBHUmVmUHRyPFdlYktpdERvd25s
b2FkPiBhZGRpdGlvbmFsRG93bmxvYWQgPSBhZG9wdEdSZWYodGVzdC0+ZG93bmxvYWRVUklBbmRX
YWl0VW50aWxGaW5pc2hlcyhzb3VyY2VVUkkuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0
X2Rvd25sb2FkX2dldF93ZWJfdmlldyhhZGRpdGlvbmFsRG93bmxvYWQuZ2V0KCkpKTsKKworICAg
IFZlY3RvcjxEb3dubG9hZFRlc3Q6OkRvd25sb2FkRXZlbnQ+JiBldmVudHMgPSB0ZXN0LT5tX2Rv
d25sb2FkRXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNCk7
CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIERvd25sb2FkVGVzdDo6U3RhcnRl
ZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIERvd25sb2FkVGVzdDo6UmVj
ZWl2ZWRSZXNwb25zZSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIERvd25s
b2FkVGVzdDo6RmFpbGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgRG93
bmxvYWRUZXN0OjpGaW5pc2hlZCk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rvd25s
b2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoYWRkaXRpb25hbERvd25sb2FkLmdldCgpKSwgPT0s
IDApOworCisgICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUob3JpZ2luYWxE
b3dubG9hZC5nZXQoKSwgZmlsZW5hbWUpOworfQorCiBzdGF0aWMgdm9pZCB0ZXN0RG93bmxvYWRM
b2NhbEZpbGVFcnJvcihEb3dubG9hZEVycm9yVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsK
ICAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxPQURfRVJST1JfTkVUV09S
SzsKQEAgLTUzMyw2ICs1ODksOCBAQCB2b2lkIGJlZm9yZUFsbCgpCiAgICAgZ19hc3NlcnQoa1Rl
bXBEaXJlY3RvcnkpOwogCiAgICAgRG93bmxvYWRUZXN0OjphZGQoIkRvd25sb2FkcyIsICJsb2Nh
bC1maWxlIiwgdGVzdERvd25sb2FkTG9jYWxGaWxlKTsKKyAgICBEb3dubG9hZFRlc3Q6OmFkZCgi
RG93bmxvYWRzIiwgIm92ZXJ3cml0ZS1kZXN0aW5hdGlvbi1hbGxvd2VkIiwgdGVzdERvd25sb2Fk
T3ZlcndyaXRlRGVzdGluYXRpb25BbGxvd2VkKTsKKyAgICBEb3dubG9hZEVycm9yVGVzdDo6YWRk
KCJEb3dubG9hZHMiLCAib3ZlcndyaXRlLWRlc3RpbmF0aW9uLWRpc2FsbG93ZWQiLCB0ZXN0RG93
bmxvYWRPdmVyd3JpdGVEZXN0aW5hdGlvbkRpc2FsbG93ZWQpOwogICAgIERvd25sb2FkRXJyb3JU
ZXN0OjphZGQoIkRvd25sb2FkcyIsICJsb2NhbC1maWxlLWVycm9yIiwgdGVzdERvd25sb2FkTG9j
YWxGaWxlRXJyb3IpOwogICAgIERvd25sb2FkVGVzdDo6YWRkKCJEb3dubG9hZHMiLCAicmVtb3Rl
LWZpbGUiLCB0ZXN0RG93bmxvYWRSZW1vdGVGaWxlKTsKICAgICBEb3dubG9hZEVycm9yVGVzdDo6
YWRkKCJEb3dubG9hZHMiLCAicmVtb3RlLWZpbGUtZXJyb3IiLCB0ZXN0RG93bmxvYWRSZW1vdGVG
aWxlRXJyb3IpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237747</attachid>
            <date>2014-09-06 16:57:05 -0700</date>
            <delta_ts>2014-09-10 01:37:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136372-20140906185659.patch</filename>
            <type>text/plain</type>
            <size>24063</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczMzU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNjc2YzRkM2JkNDhlYTU0
ZjMzY2I5N2EzN2RhMWJhNGVkZTU1NGQ2MS4uMjlmODNmMmFjODY3OGFkMjE0YjlmYjhhM2I3ZGM2
MTIzYWY1Mjk0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE0LTA5LTA2ICBNaWNo
YWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBh
bGxvdyBvdmVyd3JpdGluZyBkZXN0aW5hdGlvbiBvZiBkb3dubG9hZAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MzcyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXREb3dubG9hZC5jcHA6CisgICAgICAgICh3ZWJraXREb3dubG9hZEdldFByb3BlcnR5KTogQWRk
ZWQKKyAgICAgICAgKHdlYmtpdF9kb3dubG9hZF9jbGFzc19pbml0KTogSW5zdGFsbCB3ZWJraXRE
b3dubG9hZEdldFByb3BlcnR5CisgICAgICAgICh3ZWJraXREb3dubG9hZERlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKTogQWRkCisgICAgICAgIGFsbG93T3ZlcndyaXRlIHBh
cmFtZXRlciBhbmQgc2V0IGl0IGFwcHJvcHJpYXRlbHkKKyAgICAgICAgKHdlYmtpdF9kb3dubG9h
ZF9nZXRfYWxsb3dfb3ZlcndyaXRlKTogQWRkZWQKKyAgICAgICAgKHdlYmtpdF9kb3dubG9hZF9z
ZXRfYWxsb3dfb3ZlcndyaXRlKTogQWRkZWQKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXREb3dubG9hZC5oOiBOZXcgQVBJCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RG93bmxvYWRDbGllbnQuY3BwOgorICAgICAgICAoZGVjaWRlRGVzdGluYXRpb25XaXRoU3Vn
Z2VzdGVkRmlsZW5hbWUpOiBQYXNzIGFsbG93T3ZlcndyaXRlIHRvCisgICAgICAgIHdlYmtpdERv
d25sb2FkRGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZFByaXZhdGUuaDogQWRkIGFsbG93T3Zlcndy
aXRlCisgICAgICAgIHBhcmFtZXRlciB0byB3ZWJraXREb3dubG9hZERlY2lkZURlc3RpbmF0aW9u
V2l0aFN1Z2dlc3RlZEZpbGVuYW1lCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93
ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDogTmV3IEFQSQorCiAyMDE0LTA5LTA2ICBBbnR0aSBLb2l2
aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBTZXJpYWxpemUgUmVzb3VyY2VSZXNw
b25zZXMgdXNpbmcgV2ViS2l0IHR5cGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5jcHAKaW5kZXggYzQ4M2I5MjdjZmQyMzY3MDVjMjI4
NmQ3NmM3Nzc2MmRlMGVjMDA2Ny4uN2Q1YWY2M2U1NWYwODExNDM4NTE2OGZlNTg0Y2ExMDFmNmFl
MDIwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
RG93bmxvYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dERvd25sb2FkLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBJZ2FsaWEgUy5MLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC02Myw3ICs2Myw4IEBAIGVudW0gewogCiAgICAgUFJPUF9ERVNU
SU5BVElPTiwKICAgICBQUk9QX1JFU1BPTlNFLAotICAgIFBST1BfRVNUSU1BVEVEX1BST0dSRVNT
CisgICAgUFJPUF9FU1RJTUFURURfUFJPR1JFU1MsCisgICAgUFJPUF9BTExPV19PVkVSV1JJVEUK
IH07CiAKIHN0cnVjdCBfV2ViS2l0RG93bmxvYWRQcml2YXRlIHsKQEAgLTg0LDEyICs4NSwyNiBA
QCBzdHJ1Y3QgX1dlYktpdERvd25sb2FkUHJpdmF0ZSB7CiAgICAgR1VuaXF1ZVB0cjxHVGltZXI+
IHRpbWVyOwogICAgIGdkb3VibGUgbGFzdFByb2dyZXNzOwogICAgIGdkb3VibGUgbGFzdEVsYXBz
ZWQ7CisgICAgYm9vbCBhbGxvd092ZXJ3cml0ZTsKIH07CiAKIHN0YXRpYyBndWludCBzaWduYWxz
W0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKIAogV0VCS0lUX0RFRklORV9UWVBFKFdlYktpdERvd25s
b2FkLCB3ZWJraXRfZG93bmxvYWQsIEdfVFlQRV9PQkpFQ1QpCiAKK3N0YXRpYyB2b2lkIHdlYmtp
dERvd25sb2FkU2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIGNvbnN0
IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBhcmFtU3BlYykKK3sKKyAgICBXZWJLaXREb3du
bG9hZCogZG93bmxvYWQgPSBXRUJLSVRfRE9XTkxPQUQob2JqZWN0KTsKKworICAgIHN3aXRjaCAo
cHJvcElkKSB7CisgICAgY2FzZSBQUk9QX0FMTE9XX09WRVJXUklURToKKyAgICAgICAgd2Via2l0
X2Rvd25sb2FkX3NldF9hbGxvd19vdmVyd3JpdGUoZG93bmxvYWQsIGdfdmFsdWVfZ2V0X2Jvb2xl
YW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpF
Q1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElkLCBwYXJhbVNwZWMpOwor
ICAgIH0KK30KKwogc3RhdGljIHZvaWQgd2Via2l0RG93bmxvYWRHZXRQcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1T
cGVjKQogewogICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCA9IFdFQktJVF9ET1dOTE9BRChv
YmplY3QpOwpAQCAtMTA0LDYgKzExOSw5IEBAIHN0YXRpYyB2b2lkIHdlYmtpdERvd25sb2FkR2V0
UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsCiAgICAg
Y2FzZSBQUk9QX0VTVElNQVRFRF9QUk9HUkVTUzoKICAgICAgICAgZ192YWx1ZV9zZXRfZG91Ymxl
KHZhbHVlLCB3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcyhkb3dubG9hZCkp
OwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQUxMT1dfT1ZFUldSSVRFOgorICAgICAg
ICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG93bmxvYWRfZ2V0X2FsbG93X292
ZXJ3cml0ZShkb3dubG9hZCkpOworICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAg
ICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBhcmFt
U3BlYyk7CiAgICAgfQpAQCAtMTMwLDYgKzE0OCw3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRE
b3dubG9hZERlY2lkZURlc3RpbmF0aW9uKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QK
IHN0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9jbGFzc19pbml0KFdlYktpdERvd25sb2FkQ2xh
c3MqIGRvd25sb2FkQ2xhc3MpCiB7CiAgICAgR09iamVjdENsYXNzKiBvYmplY3RDbGFzcyA9IEdf
T0JKRUNUX0NMQVNTKGRvd25sb2FkQ2xhc3MpOworICAgIG9iamVjdENsYXNzLT5zZXRfcHJvcGVy
dHkgPSB3ZWJraXREb3dubG9hZFNldFByb3BlcnR5OwogICAgIG9iamVjdENsYXNzLT5nZXRfcHJv
cGVydHkgPSB3ZWJraXREb3dubG9hZEdldFByb3BlcnR5OwogCiAgICAgZG93bmxvYWRDbGFzcy0+
ZGVjaWRlX2Rlc3RpbmF0aW9uID0gd2Via2l0RG93bmxvYWREZWNpZGVEZXN0aW5hdGlvbjsKQEAg
LTE3OSw2ICsxOTgsMjUgQEAgc3RhdGljIHZvaWQgd2Via2l0X2Rvd25sb2FkX2NsYXNzX2luaXQo
V2ViS2l0RG93bmxvYWRDbGFzcyogZG93bmxvYWRDbGFzcykKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CiAKICAgICAvKioKKyAgICAgKiBXZWJLaXREb3dubG9hZDphbGxvdy1vdmVyd3JpdGU6Cisg
ICAgICoKKyAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgZG93bmxvYWQgaXMgYWxsb3dlZCB0byBv
dmVyd3JpdGUgYW4gZXhpc3RpbmcgZmlsZSBvbgorICAgICAqIGRpc2suIElmIHRoaXMgcHJvcGVy
dHkgaXMgJUZBTFNFIGFuZCB0aGUgZGVzdGluYXRpb24gYWxyZWFkeSBleGlzdHMsCisgICAgICog
dGhlIGRvd25sb2FkIHdpbGwgZmFpbC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAyLjYKKyAgICAg
Ki8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9BTExPV19PVkVSV1JJVEUsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19ib29sZWFuKAorICAgICAgICAgICAgImFsbG93LW92ZXJ3cml0ZSIsCisgICAgICAgICAgICBf
KCJBbGxvdyBPdmVyd3JpdGUiKSwKKyAgICAgICAgICAgIF8oIldoZXRoZXIgdGhlIGRlc3RpbmF0
aW9uIG1heSBiZSBvdmVyd3JpdHRlbiIpLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICAvKioKICAgICAgKiBXZWJLaXREb3du
bG9hZDo6cmVjZWl2ZWQtZGF0YToKICAgICAgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxv
YWQKICAgICAgKiBAZGF0YV9sZW5ndGg6IHRoZSBsZW5ndGggb2YgZGF0YSByZWNlaXZlZCBpbiBi
eXRlcwpAQCAtMzcwLDEyICs0MDgsMTMgQEAgdm9pZCB3ZWJraXREb3dubG9hZEZpbmlzaGVkKFdl
YktpdERvd25sb2FkKiBkb3dubG9hZCkKICAgICBnX3NpZ25hbF9lbWl0KGRvd25sb2FkLCBzaWdu
YWxzW0ZJTklTSEVEXSwgMCwgTlVMTCk7CiB9CiAKLUNTdHJpbmcgd2Via2l0RG93bmxvYWREZWNp
ZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShXZWJLaXREb3dubG9hZCogZG93bmxv
YWQsIGNvbnN0IENTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQorQ1N0cmluZyB3ZWJraXREb3du
bG9hZERlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKFdlYktpdERvd25sb2Fk
KiBkb3dubG9hZCwgY29uc3QgQ1N0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGJvb2wmIGFsbG93
T3ZlcndyaXRlKQogewogICAgIGlmIChkb3dubG9hZC0+cHJpdi0+aXNDYW5jZWxsZWQpCiAgICAg
ICAgIHJldHVybiAiIjsKICAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKICAgICBnX3NpZ25hbF9l
bWl0KGRvd25sb2FkLCBzaWduYWxzW0RFQ0lERV9ERVNUSU5BVElPTl0sIDAsIHN1Z2dlc3RlZEZp
bGVuYW1lLmRhdGEoKSwgJnJldHVyblZhbHVlKTsKKyAgICBhbGxvd092ZXJ3cml0ZSA9IGRvd25s
b2FkLT5wcml2LT5hbGxvd092ZXJ3cml0ZTsKICAgICByZXR1cm4gZG93bmxvYWQtPnByaXYtPmRl
c3RpbmF0aW9uVVJJOwogfQogCkBAIC01NjgsMyArNjA3LDQ0IEBAIFdlYktpdFdlYlZpZXcqIHdl
YmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQogCiAg
ICAgcmV0dXJuIGRvd25sb2FkLT5wcml2LT53ZWJWaWV3OwogfQorCisvKioKKyAqIHdlYmtpdF9k
b3dubG9hZF9nZXRfYWxsb3dfb3ZlcndyaXRlOgorICogQGRvd25sb2FkOiBhICNXZWJLaXREb3du
bG9hZAorICoKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlICNXZWJLaXREb3du
bG9hZDphbGxvdy1vdmVyd3JpdGUgcHJvcGVydHksCisgKiB3aGljaCBkZXRlcm1pbmVzIHdoZXRo
ZXIgdGhlIGRvd25sb2FkIHdpbGwgb3ZlcndyaXRlIGFuIGV4aXN0aW5nIGZpbGUgb24KKyAqIGRp
c2ssIG9yIGlmIGl0IHdpbGwgZmFpbCBpZiB0aGUgZGVzdGluYXRpb24gYWxyZWFkeSBleGlzdHMu
CisgKgorICogUmV0dXJuczogdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlICNXZWJLaXREb3dubG9h
ZDphbGxvdy1vdmVyd3JpdGUgcHJvcGVydHkKKyAqCisgKiBTaW5jZTogMi42CisgKi8KK2dib29s
ZWFuIHdlYmtpdF9kb3dubG9hZF9nZXRfYWxsb3dfb3ZlcndyaXRlKFdlYktpdERvd25sb2FkKiBk
b3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQo
ZG93bmxvYWQpLCBGQUxTRSk7CisKKyAgICByZXR1cm4gZG93bmxvYWQtPnByaXYtPmFsbG93T3Zl
cndyaXRlOworfQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9hZF9zZXRfYWxsb3dfb3ZlcndyaXRl
OgorICogQGRvd25sb2FkOiBhICNXZWJLaXREb3dubG9hZAorICogQGFsbG93ZWQ6IHRoZSBuZXcg
dmFsdWUgZm9yIHRoZSAjV2ViS2l0RG93bmxvYWQ6YWxsb3ctb3ZlcndyaXRlIHByb3BlcnR5Cisg
KgorICogU2V0cyB0aGUgI1dlYktpdERvd25sb2FkOmFsbG93LW92ZXJ3cml0ZSBwcm9wZXJ0eSwg
d2hpY2ggZGV0ZXJtaW5lcyB3aGV0aGVyCisgKiB0aGUgZG93bmxvYWQgbWF5IG92ZXJ3cml0ZSBh
biBleGlzdGluZyBmaWxlIG9uIGRpc2ssIG9yIGlmIGl0IHdpbGwgZmFpbCBpZgorICogdGhlIGRl
c3RpbmF0aW9uIGFscmVhZHkgZXhpc3RzLgorICoKKyAqIFNpbmNlOiAyLjYKKyAqLwordm9pZCB3
ZWJraXRfZG93bmxvYWRfc2V0X2FsbG93X292ZXJ3cml0ZShXZWJLaXREb3dubG9hZCogZG93bmxv
YWQsIGdib29sZWFuIGFsbG93ZWQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNf
RE9XTkxPQUQoZG93bmxvYWQpKTsKKworICAgIGlmIChhbGxvd2VkID09IGRvd25sb2FkLT5wcml2
LT5hbGxvd092ZXJ3cml0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZG93bmxvYWQtPnByaXYt
PmFsbG93T3ZlcndyaXRlID0gYWxsb3dlZDsKKyAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1Qo
ZG93bmxvYWQpLCAiYWxsb3ctb3ZlcndyaXRlIik7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuaAppbmRleCA0OTNiZmVhNDAyMmM5ZTA2
ZGEwZDUwZGUyODczN2U0NzEwMDdhOWIzLi43ZTZiZmViNDZkY2JiMjJjZWFkMGU4YmRhNzMxODZk
MTZjMTgxMDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXREb3dubG9hZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdERvd25sb2FkLmgKQEAgLTkyLDYgKzkyLDEzIEBAIHdlYmtpdF9kb3dubG9hZF9nZXRfcmVj
ZWl2ZWRfZGF0YV9sZW5ndGggKFdlYktpdERvd25sb2FkICpkb3dubG9hZCk7CiBXRUJLSVRfQVBJ
IFdlYktpdFdlYlZpZXcgKgogd2Via2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyAgICAgICAgICAg
ICAoV2ViS2l0RG93bmxvYWQgKmRvd25sb2FkKTsKIAorV0VCS0lUX0FQSSBnYm9vbGVhbgord2Vi
a2l0X2Rvd25sb2FkX2dldF9hbGxvd19vdmVyd3JpdGUgICAgICAoV2ViS2l0RG93bmxvYWQgKmRv
d25sb2FkKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG93bmxvYWRfc2V0X2FsbG93X292
ZXJ3cml0ZSAgICAgIChXZWJLaXREb3dubG9hZCAqZG93bmxvYWQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgYWxsb3dlZCk7CisKIEdf
RU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RG93bmxvYWRDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRDbGllbnQuY3BwCmluZGV4IDE5N2I2YjViNGNjMDUz
YjY5MmM1NjZjOTQxNmViMTJhYWM3MzFkNTEuLjBmNGNlODY4YzEzOTA5N2I4MTM1MzY1NDg1Mzkz
ZDVkMjM0NGY2NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdERvd25sb2FkQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXREb3dubG9hZENsaWVudC5jcHAKQEAgLTU0LDExICs1NCwxMCBAQCBzdGF0
aWMgdm9pZCBkaWRSZWNlaXZlRGF0YShXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3du
bG9hZCwgdWludDY0X3QgbGVuZwogICAgIHdlYmtpdERvd25sb2FkTm90aWZ5UHJvZ3Jlc3MoZG93
bmxvYWQuZ2V0KCksIGxlbmd0aCk7CiB9CiAKLXN0YXRpYyBXS1N0cmluZ1JlZiBkZWNpZGVEZXN0
aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYg
d2tEb3dubG9hZCwgV0tTdHJpbmdSZWYgZmlsZW5hbWUsIGJvb2wqIC8qIGFsbG93T3ZlcndyaXRl
ICovLCBjb25zdCB2b2lkKiAvKiBjbGllbnRJbmZvICovKQorc3RhdGljIFdLU3RyaW5nUmVmIGRl
Y2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKFdLQ29udGV4dFJlZiwgV0tEb3du
bG9hZFJlZiB3a0Rvd25sb2FkLCBXS1N0cmluZ1JlZiBmaWxlbmFtZSwgYm9vbCogYWxsb3dPdmVy
d3JpdGUsIGNvbnN0IHZvaWQqIC8qIGNsaWVudEluZm8gKi8pCiB7CiAgICAgR1JlZlB0cjxXZWJL
aXREb3dubG9hZD4gZG93bmxvYWQgPSB3ZWJraXRXZWJDb250ZXh0R2V0T3JDcmVhdGVEb3dubG9h
ZCh0b0ltcGwod2tEb3dubG9hZCkpOwotICAgIENTdHJpbmcgZGVzdGluYXRpb25VUkkgPSB3ZWJr
aXREb3dubG9hZERlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKGRvd25sb2Fk
LmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvSW1wbChmaWxlbmFtZSktPnN0cmlu
ZygpLnV0ZjgoKSk7CisgICAgQ1N0cmluZyBkZXN0aW5hdGlvblVSSSA9IHdlYmtpdERvd25sb2Fk
RGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoZG93bmxvYWQuZ2V0KCksIHRv
SW1wbChmaWxlbmFtZSktPnN0cmluZygpLnV0ZjgoKSwgKmFsbG93T3ZlcndyaXRlKTsKICAgICBy
ZXR1cm4gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZGVzdGluYXRpb25VUkkuZGF0YSgp
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RG93bmxvYWRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXREb3dubG9hZFByaXZhdGUuaAppbmRleCA5ODBhZDczMmI0YWMwYWVkY2JjMzE1NjE1YzU3
MjVjMmRiNjFlNDQwLi5iOTg2Y2EyMzE4ZTczYTY1MjVlMzY2NTg1MWRlNTEzMmQxMjkyYjFjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9h
ZFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRE
b3dubG9hZFByaXZhdGUuaApAQCAtMzUsNyArMzUsNyBAQCB2b2lkIHdlYmtpdERvd25sb2FkTm90
aWZ5UHJvZ3Jlc3MoV2ViS2l0RG93bmxvYWQqLCBndWludDY0IGJ5dGVzUmVjZWl2ZWQpOwogdm9p
ZCB3ZWJraXREb3dubG9hZEZhaWxlZChXZWJLaXREb3dubG9hZCosIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlRXJyb3ImKTsKIHZvaWQgd2Via2l0RG93bmxvYWRDYW5jZWxsZWQoV2ViS2l0RG93bmxv
YWQqKTsKIHZvaWQgd2Via2l0RG93bmxvYWRGaW5pc2hlZChXZWJLaXREb3dubG9hZCopOwotQ1N0
cmluZyB3ZWJraXREb3dubG9hZERlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1l
KFdlYktpdERvd25sb2FkKiwgY29uc3QgQ1N0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpOworQ1N0
cmluZyB3ZWJraXREb3dubG9hZERlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1l
KFdlYktpdERvd25sb2FkKiwgY29uc3QgQ1N0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGJvb2wm
IGFsbG93T3ZlcndyaXRlKTsKIHZvaWQgd2Via2l0RG93bmxvYWREZXN0aW5hdGlvbkNyZWF0ZWQo
V2ViS2l0RG93bmxvYWQqLCBjb25zdCBDU3RyaW5nJiBkZXN0aW5hdGlvblVSSSk7CiAKICNlbmRp
ZiAvLyBXZWJLaXREb3dubG9hZFByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKaW5k
ZXggODVlY2Y3MTFkNDQwZDhiM2ViOGJjMTZjZGRjYjExOGI0NTMwNDliMS4uZDU2M2YzM2M0NzBj
ZjNiN2IzNzBlZDZhMWFmMGM3YTE2YmQyMmNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0
CkBAIC01MjIsNiArNTIyLDggQEAgd2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jl
c3MKIHdlYmtpdF9kb3dubG9hZF9nZXRfZWxhcHNlZF90aW1lCiB3ZWJraXRfZG93bmxvYWRfZ2V0
X3JlY2VpdmVkX2RhdGFfbGVuZ3RoCiB3ZWJraXRfZG93bmxvYWRfZ2V0X3dlYl92aWV3Cit3ZWJr
aXRfZG93bmxvYWRfZ2V0X2FsbG93X292ZXJ3cml0ZQord2Via2l0X2Rvd25sb2FkX3NldF9hbGxv
d19vdmVyd3JpdGUKIAogPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CiBXZWJLaXREb3dubG9hZENsYXNz
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYmJk
YzMwNTI2NWFlYWI0ZDQzODNkZDkxYzdkYmU4MmE5NzE1OThiOC4uZjg5ZGZlNzE1Y2UxZmRhYzY3
MGU3NTk5ZDE4M2I4YWU0MWJmMmNlZSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBi
L1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE0LTA5LTA2ICBNaWNoYWVsIENh
dGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBhbGxvdyBv
dmVyd3JpdGluZyBkZXN0aW5hdGlvbiBvZiBkb3dubG9hZAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MzcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJH
dGsvVGVzdERvd25sb2Fkcy5jcHA6CisgICAgICAgIChkb3dubG9hZExvY2FsRmlsZVN1Y2Nlc3Nm
dWxseSk6IFNwbGl0IGZyb20gdGVzdERvd25sb2FkTG9jYWxGaWxlCisgICAgICAgICh0ZXN0RG93
bmxvYWRMb2NhbEZpbGUpOiBTcGxpdCBvZmYgZG93bmxvYWRMb2NhbEZpbGVTdWNjZXNzZnVsbHkK
KyAgICAgICAgKGNyZWF0ZUZpbGVBdERlc3RpbmF0aW9uKTogQWRkZWQKKyAgICAgICAgKHRlc3RE
b3dubG9hZE92ZXJ3cml0ZURlc3RpbmF0aW9uQWxsb3dlZCk6IEFkZGVkCisgICAgICAgICh0ZXN0
RG93bmxvYWRPdmVyd3JpdGVEZXN0aW5hdGlvbkRpc2FsbG93ZWQpOiBBZGRlZAorICAgICAgICAo
dGVzdERvd25sb2FkTG9jYWxGaWxlRXJyb3IpOiBVc2UgbmV3IERvd25sb2FkRXJyb3JUZXN0OjpF
eHBlY3RlZEVycm9yCisgICAgICAgICh0ZXN0RG93bmxvYWRSZW1vdGVGaWxlRXJyb3IpOiBVc2Ug
bmV3IERvd25sb2FkRXJyb3JUZXN0OjpFeHBlY3RlZEVycm9yCisgICAgICAgIChiZWZvcmVBbGwp
OiBOZXcgdGVzdHMKKwogMjAxNC0wOS0wNiAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHNh
bXN1bmcuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIEVGTCBidWlsZCBmaXggd2hlbiBTSEFS
RURfQ09SRSBpcyBvbi4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mkd0ay9UZXN0RG93bmxvYWRzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mkd0ay9UZXN0RG93bmxvYWRzLmNwcAppbmRleCBjOWIzMGQzMWZiMWRmZWUwZTAzOTZiMDY1
MTkwYzNmMzg5MmM5OWI0Li5hNGU0OTY2ODZkYWE3MDE2MTU5MzFjZjg0YTUzZWRkZWVkODNiOWIx
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdERv
d25sb2Fkcy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rl
c3REb3dubG9hZHMuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IElnYWxpYSBTLkwuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTU2LDYgKzU2LDggQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgZ19hc3NlcnQod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9hZCkpOwog
ICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihk
b3dubG9hZCksID09LCBkZXN0aW5hdGlvbik7CisgICAgICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUg
PSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfdXJpKGRlc3RpbmF0aW9uKSk7CisgICAgICAgIGdf
YXNzZXJ0KGdfZmlsZV9xdWVyeV9leGlzdHMoZmlsZS5nZXQoKSwgbnVsbHB0cikpOwogICAgICAg
ICB0ZXN0LT5jcmVhdGVkRGVzdGluYXRpb24oZG93bmxvYWQsIGRlc3RpbmF0aW9uKTsKICAgICB9
CiAKQEAgLTcyLDYgKzc0LDE0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBmYWlsZWRDYWxs
YmFjayhXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIEdFcnJvciogZXJyb3IsIERvd25sb2FkVGVz
dCogdGVzdCkKICAgICB7CiAgICAgICAgIGdfYXNzZXJ0KGVycm9yKTsKKworICAgICAgICBjb25z
dCBjaGFyKiBkZXN0aW5hdGlvblVSSSA9IHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24o
ZG93bmxvYWQpOworICAgICAgICBpZiAoZGVzdGluYXRpb25VUkkpIHsKKyAgICAgICAgICAgIEdV
bmlxdWVQdHI8Y2hhcj4gdGVtcEZpbGVVUkkoZ19zdHJjb25jYXQoZGVzdGluYXRpb25VUkksICIu
d2tkb3dubG9hZCIsIG51bGxwdHIpKTsKKyAgICAgICAgICAgIEdSZWZQdHI8R0ZpbGU+IHRlbXBG
aWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3VyaSh0ZW1wRmlsZVVSSS5nZXQoKSkpOwor
ICAgICAgICAgICAgZ19hc3NlcnQoIWdfZmlsZV9xdWVyeV9leGlzdHModGVtcEZpbGUuZ2V0KCks
IG51bGxwdHIpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHRlc3QtPmZhaWxlZChkb3dubG9hZCwg
ZXJyb3IpOwogICAgIH0KIApAQCAtOTgsNiArMTA4LDcgQEAgcHVibGljOgogICAgICAgICA6IG1f
d2ViQ29udGV4dCh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSkKICAgICAgICAgLCBt
X21haW5Mb29wKGdfbWFpbl9sb29wX25ldygwLCBUUlVFKSkKICAgICAgICAgLCBtX2Rvd25sb2Fk
U2l6ZSgwKQorICAgICAgICAsIG1fYWxsb3dPdmVyd3JpdGUoZmFsc2UpCiAgICAgewogICAgICAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViQ29udGV4dCwgImRvd25sb2FkLXN0YXJ0ZWQiLCBHX0NB
TExCQUNLKGRvd25sb2FkU3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7CiAgICAgfQpAQCAtMTEwLDYg
KzEyMSw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzdGFydGVkKFdlYktpdERvd25s
b2FkKiBkb3dubG9hZCkKICAgICB7CisgICAgICAgIG1fZG93bmxvYWRTaXplID0gMDsKKyAgICAg
ICAgbV9kb3dubG9hZEV2ZW50cy5jbGVhcigpOwogICAgICAgICBtX2Rvd25sb2FkRXZlbnRzLmFw
cGVuZChTdGFydGVkKTsKICAgICB9CiAKQEAgLTE1NCw2ICsxNjcsMTAgQEAgcHVibGljOgogICAg
ICAgICBXZWJLaXREb3dubG9hZCogZG93bmxvYWQgPSB3ZWJraXRfd2ViX2NvbnRleHRfZG93bmxv
YWRfdXJpKG1fd2ViQ29udGV4dCwgcmVxdWVzdFVSSS5kYXRhKCkpOwogICAgICAgICBhc3NlcnRP
YmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGRvd25sb2FkKSk7CiAKKyAg
ICAgICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfYWxsb3dfb3ZlcndyaXRlKGRvd25s
b2FkKSk7CisgICAgICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfYWxsb3dfb3ZlcndyaXRlKGRvd25s
b2FkLCBtX2FsbG93T3ZlcndyaXRlKTsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2Rvd25sb2Fk
X2dldF9hbGxvd19vdmVyd3JpdGUoZG93bmxvYWQpID09IG1fYWxsb3dPdmVyd3JpdGUpOworCiAg
ICAgICAgIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRfZG93bmxvYWRfZ2V0X3Jl
cXVlc3QoZG93bmxvYWQpOwogICAgICAgICBnX2Fzc2VydChyZXF1ZXN0KTsKICAgICAgICAgQVNT
RVJUX0NNUF9DU1RSSU5HKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwg
cmVxdWVzdFVSSSk7CkBAIC0xNzgsMTEgKzE5NSwxMiBAQCBwdWJsaWM6CiAgICAgR01haW5Mb29w
KiBtX21haW5Mb29wOwogICAgIFZlY3RvcjxEb3dubG9hZEV2ZW50PiBtX2Rvd25sb2FkRXZlbnRz
OwogICAgIGd1aW50NjQgbV9kb3dubG9hZFNpemU7CisgICAgYm9vbCBtX2FsbG93T3ZlcndyaXRl
OwogfTsKIAotc3RhdGljIHZvaWQgdGVzdERvd25sb2FkTG9jYWxGaWxlKERvd25sb2FkVGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKK3N0YXRpYyBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3du
bG9hZExvY2FsRmlsZVN1Y2Nlc3NmdWxseShEb3dubG9hZFRlc3QqIHRlc3QsIGNvbnN0IGNoYXIq
IGZpbGVuYW1lKQogewotICAgIEdVbmlxdWVQdHI8Y2hhcj4gc291cmNlUGF0aChnX2J1aWxkX2Zp
bGVuYW1lKFRlc3Q6OmdldFJlc291cmNlc0RpcigpLmRhdGEoKSwgInRlc3QucGRmIiwgbnVsbHB0
cikpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gc291cmNlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKFRl
c3Q6OmdldFJlc291cmNlc0RpcigpLmRhdGEoKSwgZmlsZW5hbWUsIG51bGxwdHIpKTsKICAgICBH
UmVmUHRyPEdGaWxlPiBzb3VyY2UgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChzb3Vy
Y2VQYXRoLmdldCgpKSk7CiAgICAgR1JlZlB0cjxHRmlsZUluZm8+IHNvdXJjZUluZm8gPSBhZG9w
dEdSZWYoZ19maWxlX3F1ZXJ5X2luZm8oc291cmNlLmdldCgpLCBHX0ZJTEVfQVRUUklCVVRFX1NU
QU5EQVJEX1NJWkUsIHN0YXRpY19jYXN0PEdGaWxlUXVlcnlJbmZvRmxhZ3M+KDApLCAwLCAwKSk7
CiAgICAgR1VuaXF1ZVB0cjxjaGFyPiBzb3VyY2VVUkkoZ19maWxlX2dldF91cmkoc291cmNlLmdl
dCgpKSk7CkBAIC0yMDQsMTUgKzIyMiw1MCBAQCBzdGF0aWMgdm9pZCB0ZXN0RG93bmxvYWRMb2Nh
bEZpbGUoRG93bmxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0X2Nt
cGludCh0ZXN0LT5tX2Rvd25sb2FkU2l6ZSwgPT0sIGdfZmlsZV9pbmZvX2dldF9zaXplKHNvdXJj
ZUluZm8uZ2V0KCkpKTsKICAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0
aW9uKGRvd25sb2FkLmdldCgpKSk7CiAgICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rvd25s
b2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA9PSwgMSk7Ci0gICAg
dGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksICJ0ZXN0
LnBkZiIpOworCisgICAgcmV0dXJuIGRvd25sb2FkOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RG93
bmxvYWRMb2NhbEZpbGUoRG93bmxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBmaWxlbmFtZSA9ICJ0ZXN0LnBkZiI7CisgICAgR1JlZlB0cjxX
ZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSBkb3dubG9hZExvY2FsRmlsZVN1Y2Nlc3NmdWxseSh0
ZXN0LCBmaWxlbmFtZSk7CisgICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUo
ZG93bmxvYWQuZ2V0KCksIGZpbGVuYW1lKTsKK30KKworc3RhdGljIHZvaWQgY3JlYXRlRmlsZUF0
RGVzdGluYXRpb24oY29uc3QgY2hhciogZmlsZW5hbWUpCit7CisgICAgR1VuaXF1ZVB0cjxjaGFy
PiBwYXRoKGdfYnVpbGRfZmlsZW5hbWUoa1RlbXBEaXJlY3RvcnksIGZpbGVuYW1lLCBudWxscHRy
KSk7CisgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9w
YXRoKHBhdGguZ2V0KCkpKTsKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAg
Z19maWxlX2NyZWF0ZShmaWxlLmdldCgpLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIG51bGxwdHIsICZl
cnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoIWVycm9yKTsKKyAgICBnX2Fzc2VydChnX2Zp
bGVfcXVlcnlfZXhpc3RzKGZpbGUuZ2V0KCksIG51bGxwdHIpKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdERvd25sb2FkT3ZlcndyaXRlRGVzdGluYXRpb25BbGxvd2VkKERvd25sb2FkVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZmlsZW5hbWUgPSAi
dGVzdC5wZGYiOworICAgIGNyZWF0ZUZpbGVBdERlc3RpbmF0aW9uKGZpbGVuYW1lKTsKKworICAg
IHRlc3QtPm1fYWxsb3dPdmVyd3JpdGUgPSB0cnVlOworICAgIEdSZWZQdHI8V2ViS2l0RG93bmxv
YWQ+IGRvd25sb2FkID0gZG93bmxvYWRMb2NhbEZpbGVTdWNjZXNzZnVsbHkodGVzdCwgZmlsZW5h
bWUpOworICAgIHRlc3QtPmNoZWNrRGVzdGluYXRpb25BbmREZWxldGVGaWxlKGRvd25sb2FkLmdl
dCgpLCBmaWxlbmFtZSk7CiB9CiAKIGNsYXNzIERvd25sb2FkRXJyb3JUZXN0OiBwdWJsaWMgRG93
bmxvYWRUZXN0IHsKIHB1YmxpYzoKICAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKERvd25sb2Fk
RXJyb3JUZXN0KTsKIAorICAgIGVudW0gRXhwZWN0ZWRFcnJvciB7CisgICAgICAgIE5ldHdvcmtF
cnJvciwKKyAgICAgICAgRG93bmxvYWRDYW5jZWxsZWQsCisgICAgICAgIEludmFsaWREZXN0aW5h
dGlvbiwKKyAgICAgICAgRGVzdGluYXRpb25FeGlzdHMKKyAgICB9OworCiAgICAgRG93bmxvYWRF
cnJvclRlc3QoKQotICAgICAgICA6IG1fZXhwZWN0ZWRFcnJvcihXRUJLSVRfRE9XTkxPQURfRVJS
T1JfTkVUV09SSykKKyAgICAgICAgOiBtX2V4cGVjdGVkRXJyb3IoTmV0d29ya0Vycm9yKQogICAg
IHsKICAgICB9CiAKQEAgLTIyMyw3ICsyNzYsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNyZWF0
ZWREZXN0aW5hdGlvbihXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGNoYXIqIGRlc3Rp
bmF0aW9uKQogICAgIHsKLSAgICAgICAgaWYgKG1fZXhwZWN0ZWRFcnJvciA9PSBXRUJLSVRfRE9X
TkxPQURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVIpCisgICAgICAgIGlmIChtX2V4cGVjdGVkRXJy
b3IgPT0gRG93bmxvYWRDYW5jZWxsZWQpCiAgICAgICAgICAgICB3ZWJraXRfZG93bmxvYWRfY2Fu
Y2VsKGRvd25sb2FkKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZ19hc3NlcnRfbm90X3Jl
YWNoZWQoKTsKQEAgLTIzMSwyNSArMjg0LDY0IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZmFpbGVk
KFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgR0Vycm9yKiBlcnJvcikKICAgICB7Ci0gICAgICAg
IGdfYXNzZXJ0KGdfZXJyb3JfbWF0Y2hlcyhlcnJvciwgV0VCS0lUX0RPV05MT0FEX0VSUk9SLCBt
X2V4cGVjdGVkRXJyb3IpKTsKKyAgICAgICAgZ19hc3NlcnQoZ19lcnJvcl9tYXRjaGVzKGVycm9y
LCBXRUJLSVRfRE9XTkxPQURfRVJST1IsIGV4cGVjdGVkRXJyb3JUb1dlYktpdERvd25sb2FkRXJy
b3IobV9leHBlY3RlZEVycm9yKSkpOwogICAgICAgICBEb3dubG9hZFRlc3Q6OmZhaWxlZChkb3du
bG9hZCwgZXJyb3IpOwogICAgIH0KIAogICAgIHZvaWQgZGVjaWRlRGVzdGluYXRpb24oV2ViS2l0
RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogc3VnZ2VzdGVkRmlsZW5hbWUpCiAgICAg
ewotICAgICAgICBpZiAobV9leHBlY3RlZEVycm9yICE9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9E
RVNUSU5BVElPTikgeworICAgICAgICBpZiAobV9leHBlY3RlZEVycm9yICE9IEludmFsaWREZXN0
aW5hdGlvbikgewogICAgICAgICAgICAgRG93bmxvYWRUZXN0OjpkZWNpZGVEZXN0aW5hdGlvbihk
b3dubG9hZCwgc3VnZ2VzdGVkRmlsZW5hbWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb24oZG93bmxvYWQsICJm
aWxlOi8vL2Zvby9iYXIiKTsKICAgICB9CiAKLSAgICBXZWJLaXREb3dubG9hZEVycm9yIG1fZXhw
ZWN0ZWRFcnJvcjsKKyAgICBzdGF0aWMgV2ViS2l0RG93bmxvYWRFcnJvciBleHBlY3RlZEVycm9y
VG9XZWJLaXREb3dubG9hZEVycm9yKEV4cGVjdGVkRXJyb3IgZXhwZWN0ZWQpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKGV4cGVjdGVkKSB7CisgICAgICAgIGNhc2UgTmV0d29ya0Vycm9yOgorICAg
ICAgICAgICAgcmV0dXJuIFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ORVRXT1JLOworICAgICAgICBj
YXNlIERvd25sb2FkQ2FuY2VsbGVkOgorICAgICAgICAgICAgcmV0dXJuIFdFQktJVF9ET1dOTE9B
RF9FUlJPUl9DQU5DRUxMRURfQllfVVNFUjsKKyAgICAgICAgY2FzZSBJbnZhbGlkRGVzdGluYXRp
b246CisgICAgICAgICAgICByZXR1cm4gV0VCS0lUX0RPV05MT0FEX0VSUk9SX0RFU1RJTkFUSU9O
OworICAgICAgICBjYXNlIERlc3RpbmF0aW9uRXhpc3RzOgorICAgICAgICAgICAgcmV0dXJuIFdF
QktJVF9ET1dOTE9BRF9FUlJPUl9ERVNUSU5BVElPTjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBF
eHBlY3RlZEVycm9yIG1fZXhwZWN0ZWRFcnJvcjsKIH07CiAKK3N0YXRpYyB2b2lkIHRlc3REb3du
bG9hZE92ZXJ3cml0ZURlc3RpbmF0aW9uRGlzYWxsb3dlZChEb3dubG9hZEVycm9yVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZmlsZW5hbWUgPSAi
dGVzdC5wZGYiOworICAgIGNyZWF0ZUZpbGVBdERlc3RpbmF0aW9uKGZpbGVuYW1lKTsKKworICAg
IHRlc3QtPm1fZXhwZWN0ZWRFcnJvciA9IERvd25sb2FkRXJyb3JUZXN0OjpEZXN0aW5hdGlvbkV4
aXN0czsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHNvdXJjZVBhdGgoZ19idWlsZF9maWxlbmFtZShU
ZXN0OjpnZXRSZXNvdXJjZXNEaXIoKS5kYXRhKCksIGZpbGVuYW1lLCBudWxscHRyKSk7CisgICAg
R1JlZlB0cjxHRmlsZT4gc291cmNlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoc291
cmNlUGF0aC5nZXQoKSkpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gc291cmNlVVJJKGdfZmlsZV9n
ZXRfdXJpKHNvdXJjZS5nZXQoKSkpOworICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25s
b2FkID0gYWRvcHRHUmVmKHRlc3QtPmRvd25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXMoc291
cmNlVVJJLmdldCgpKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3Zp
ZXcoZG93bmxvYWQuZ2V0KCkpKTsKKworICAgIFZlY3RvcjxEb3dubG9hZFRlc3Q6OkRvd25sb2Fk
RXZlbnQ+JiBldmVudHMgPSB0ZXN0LT5tX2Rvd25sb2FkRXZlbnRzOworICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHMuc2l6ZSgpLCA9PSwgNCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sw
XSwgPT0sIERvd25sb2FkVGVzdDo6U3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1sxXSwgPT0sIERvd25sb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7CisgICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1syXSwgPT0sIERvd25sb2FkVGVzdDo6RmFpbGVkKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRUZXN0OjpGaW5pc2hlZCk7CisgICAgZ19h
c3NlcnRfY21wZmxvYXQod2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93
bmxvYWQuZ2V0KCkpLCA9PSwgMCk7CisKKyAgICB0ZXN0LT5jaGVja0Rlc3RpbmF0aW9uQW5kRGVs
ZXRlRmlsZShkb3dubG9hZC5nZXQoKSwgZmlsZW5hbWUpOworfQorCiBzdGF0aWMgdm9pZCB0ZXN0
RG93bmxvYWRMb2NhbEZpbGVFcnJvcihEb3dubG9hZEVycm9yVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKIHsKLSAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxPQURfRVJS
T1JfTkVUV09SSzsKKyAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBEb3dubG9hZEVycm9yVGVz
dDo6TmV0d29ya0Vycm9yOwogICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0g
YWRvcHRHUmVmKHRlc3QtPmRvd25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXMoImZpbGU6Ly8v
Zm9vL2JhciIpKTsKICAgICBnX2Fzc2VydCghd2Via2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyhk
b3dubG9hZC5nZXQoKSkpOwogCkBAIC0yNjEsNyArMzUzLDcgQEAgc3RhdGljIHZvaWQgdGVzdERv
d25sb2FkTG9jYWxGaWxlRXJyb3IoRG93bmxvYWRFcnJvclRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCiAgICAgZXZlbnRzLmNsZWFyKCk7CiAgICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rv
d25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA8LCAxKTsKIAot
ICAgIHRlc3QtPm1fZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ERVNUSU5B
VElPTjsKKyAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBEb3dubG9hZEVycm9yVGVzdDo6SW52
YWxpZERlc3RpbmF0aW9uOwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gcGF0aChnX2J1aWxkX2ZpbGVu
YW1lKFRlc3Q6OmdldFJlc291cmNlc0RpcigpLmRhdGEoKSwgInRlc3QucGRmIiwgbnVsbHB0cikp
OwogICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0
aChwYXRoLmdldCgpKSk7CiAgICAgR1VuaXF1ZVB0cjxjaGFyPiB1cmkoZ19maWxlX2dldF91cmko
ZmlsZS5nZXQoKSkpOwpAQCAtMjc3LDcgKzM2OSw3IEBAIHN0YXRpYyB2b2lkIHRlc3REb3dubG9h
ZExvY2FsRmlsZUVycm9yKERvd25sb2FkRXJyb3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQog
ICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dy
ZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMSk7CiAgICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFu
ZERlbGV0ZUZpbGUoZG93bmxvYWQuZ2V0KCksICJiYXIiKTsKIAotICAgIHRlc3QtPm1fZXhwZWN0
ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9DQU5DRUxMRURfQllfVVNFUjsKKyAgICB0
ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBEb3dubG9hZEVycm9yVGVzdDo6RG93bmxvYWRDYW5jZWxs
ZWQ7CiAgICAgZG93bmxvYWQgPSBhZG9wdEdSZWYodGVzdC0+ZG93bmxvYWRVUklBbmRXYWl0VW50
aWxGaW5pc2hlcyh1cmkuZ2V0KCkpKTsKICAgICBnX2Fzc2VydCghd2Via2l0X2Rvd25sb2FkX2dl
dF93ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkpOwogCkBAIC0zNjksNyArNDYxLDcgQEAgc3RhdGlj
IHZvaWQgdGVzdERvd25sb2FkUmVtb3RlRmlsZShEb3dubG9hZFRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCiAKIHN0YXRpYyB2b2lkIHRlc3REb3dubG9hZFJlbW90ZUZpbGVFcnJvcihEb3dubG9h
ZEVycm9yVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsKLSAgICB0ZXN0LT5tX2V4cGVjdGVk
RXJyb3IgPSBXRUJLSVRfRE9XTkxPQURfRVJST1JfTkVUV09SSzsKKyAgICB0ZXN0LT5tX2V4cGVj
dGVkRXJyb3IgPSBEb3dubG9hZEVycm9yVGVzdDo6TmV0d29ya0Vycm9yOwogICAgIEdSZWZQdHI8
V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gYWRvcHRHUmVmKHRlc3QtPmRvd25sb2FkVVJJQW5k
V2FpdFVudGlsRmluaXNoZXMoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpKSk7CiAgICAg
Z19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfd2ViX3ZpZXcoZG93bmxvYWQuZ2V0KCkpKTsK
IApAQCAtMzg0LDcgKzQ3Niw3IEBAIHN0YXRpYyB2b2lkIHRlc3REb3dubG9hZFJlbW90ZUZpbGVF
cnJvcihEb3dubG9hZEVycm9yVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2Vy
dF9jbXB1aW50KHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N0YXR1c19jb2RlKHJlc3BvbnNlKSwg
PT0sIDQwNCk7CiAgICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rvd25sb2FkX2dldF9lc3Rp
bWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA8LCAxKTsKIAotICAgIHRlc3QtPm1fZXhw
ZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ERVNUSU5BVElPTjsKKyAgICB0ZXN0
LT5tX2V4cGVjdGVkRXJyb3IgPSBEb3dubG9hZEVycm9yVGVzdDo6SW52YWxpZERlc3RpbmF0aW9u
OwogICAgIGRvd25sb2FkID0gYWRvcHRHUmVmKHRlc3QtPmRvd25sb2FkVVJJQW5kV2FpdFVudGls
RmluaXNoZXMoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3QucGRmIikpKTsKICAgICBnX2Fz
c2VydCghd2Via2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkpOwogCkBA
IC0zOTcsNyArNDg5LDcgQEAgc3RhdGljIHZvaWQgdGVzdERvd25sb2FkUmVtb3RlRmlsZUVycm9y
KERvd25sb2FkRXJyb3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0X2Nt
cGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdl
dCgpKSwgPCwgMSk7CiAgICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZUZpbGUoZG93
bmxvYWQuZ2V0KCksICJiYXIiKTsKIAotICAgIHRlc3QtPm1fZXhwZWN0ZWRFcnJvciA9IFdFQktJ
VF9ET1dOTE9BRF9FUlJPUl9DQU5DRUxMRURfQllfVVNFUjsKKyAgICB0ZXN0LT5tX2V4cGVjdGVk
RXJyb3IgPSBEb3dubG9hZEVycm9yVGVzdDo6RG93bmxvYWRDYW5jZWxsZWQ7CiAgICAgZG93bmxv
YWQgPSBhZG9wdEdSZWYodGVzdC0+ZG93bmxvYWRVUklBbmRXYWl0VW50aWxGaW5pc2hlcyhrU2Vy
dmVyLT5nZXRVUklGb3JQYXRoKCIvY2FuY2VsLWFmdGVyLWRlc3RpbmF0aW9uIikpKTsKICAgICBn
X2Fzc2VydCghd2Via2l0X2Rvd25sb2FkX2dldF93ZWJfdmlldyhkb3dubG9hZC5nZXQoKSkpOwog
CkBAIC01MzMsNiArNjI1LDggQEAgdm9pZCBiZWZvcmVBbGwoKQogICAgIGdfYXNzZXJ0KGtUZW1w
RGlyZWN0b3J5KTsKIAogICAgIERvd25sb2FkVGVzdDo6YWRkKCJEb3dubG9hZHMiLCAibG9jYWwt
ZmlsZSIsIHRlc3REb3dubG9hZExvY2FsRmlsZSk7CisgICAgRG93bmxvYWRUZXN0OjphZGQoIkRv
d25sb2FkcyIsICJvdmVyd3JpdGUtZGVzdGluYXRpb24tYWxsb3dlZCIsIHRlc3REb3dubG9hZE92
ZXJ3cml0ZURlc3RpbmF0aW9uQWxsb3dlZCk7CisgICAgRG93bmxvYWRFcnJvclRlc3Q6OmFkZCgi
RG93bmxvYWRzIiwgIm92ZXJ3cml0ZS1kZXN0aW5hdGlvbi1kaXNhbGxvd2VkIiwgdGVzdERvd25s
b2FkT3ZlcndyaXRlRGVzdGluYXRpb25EaXNhbGxvd2VkKTsKICAgICBEb3dubG9hZEVycm9yVGVz
dDo6YWRkKCJEb3dubG9hZHMiLCAibG9jYWwtZmlsZS1lcnJvciIsIHRlc3REb3dubG9hZExvY2Fs
RmlsZUVycm9yKTsKICAgICBEb3dubG9hZFRlc3Q6OmFkZCgiRG93bmxvYWRzIiwgInJlbW90ZS1m
aWxlIiwgdGVzdERvd25sb2FkUmVtb3RlRmlsZSk7CiAgICAgRG93bmxvYWRFcnJvclRlc3Q6OmFk
ZCgiRG93bmxvYWRzIiwgInJlbW90ZS1maWxlLWVycm9yIiwgdGVzdERvd25sb2FkUmVtb3RlRmls
ZUVycm9yKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>