<?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>7169</bug_id>
          
          <creation_ts>2006-02-09 19:39:45 -0800</creation_ts>
          <short_desc>Support exporting of MHTML web archives</short_desc>
          <delta_ts>2011-06-02 14:59:50 -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>WebKit Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.faqs.org/rfcs/rfc2557.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P3</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>61856</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David Kilzer (:ddkilzer)">ddkilzer</reporter>
          <assigned_to name="Jay Civelli">jcivelli</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dpranke</cc>
    
    <cc>jcivelli</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>31988</commentid>
    <comment_count>0</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2006-02-09 19:39:45 -0800</bug_when>
    <thetext>MSIE uses the MHTML format (based on RFC 2557) to save &quot;web archives&quot; of web pages.  It would be nice if WebKit supported exporting complete web pages in this format.

Note that because the MHTML format is essentially a mail message with a content-type of &quot;multipart/related&quot;, a MIME encoder which supports quoted-printable and base64 encoding will be needed.  Mail.app probably contains usable encoding methods, but until they are moved to system libraries, a third-party library would have to be used or that wheel would have to be re-invented.  Pantomime is an example of such a third-party library.

http://www.collaboration-world.com/cgi-bin/project/index.cgi?pid=3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31990</commentid>
    <comment_count>1</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2006-02-09 19:57:35 -0800</bug_when>
    <thetext>Created a Radar bug for a system-level APIs for MIME encoding and decoding in Mac OS X.
&lt;rdar://problem/4440559&gt;
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89920</commentid>
    <comment_count>2</comment_count>
    <who name="Marco Barisione">marco.barisione</who>
    <bug_when>2008-09-02 10:44:05 -0700</bug_when>
    <thetext>My patch for bug #7168 handle both loading and exporting MHTML files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409136</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-05-24 12:52:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/9495321&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411752</commentid>
    <comment_count>4</comment_count>
      <attachid>95240</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-05-27 18:26:23 -0700</bug_when>
    <thetext>Created attachment 95240
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411753</commentid>
    <comment_count>5</comment_count>
      <attachid>95240</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-05-27 18:26:56 -0700</bug_when>
    <thetext>Comment on attachment 95240
Patch

Just an initial patch, not ready for review quite yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412078</commentid>
    <comment_count>6</comment_count>
      <attachid>95313</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-05-29 18:11:56 -0700</bug_when>
    <thetext>Created attachment 95313
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412080</commentid>
    <comment_count>7</comment_count>
      <attachid>95313</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-29 18:29:45 -0700</bug_when>
    <thetext>Comment on attachment 95313
Patch

Attachment 95313 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/8741960</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412082</commentid>
    <comment_count>8</comment_count>
      <attachid>95313</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-29 18:37:31 -0700</bug_when>
    <thetext>Comment on attachment 95313
Patch

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

Looks reasonable, but R- for the misplaced date code!

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:63
&gt; +    md5.addBytes(reinterpret_cast&lt;const uint8_t*&gt;(&amp;number), sizeof(double));

Yuck.  Why not cryptographicallyRandomValues ?  That will give you nicely distributed bytes of whatever length you like.

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:65
&gt; +    md5.checksum(md5Bytes);

What&apos;s the point of using MD5?  Just generate however many random bytes you want.

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:87
&gt; +static String currentDate()

This code really doesn&apos;t belong in this file.  Doesn&apos;t WTF have notions of date and time?

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:158
&gt; +PassRefPtr&lt;SharedBuffer&gt; MHTMLArchive::generateMHTMLData(const Frame&amp; frame)

We usually pass Frame by pointer, not reference.

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:170
&gt; +    CString asciiTitle = frame.document()-&gt;title().ascii();

What if the title contains \r\n ?

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:176
&gt; +    stringBuilder.append(&quot;\ttype=\&quot;text/html\&quot;;\r\n&quot;);

What if the frame contains something besides text/html, such as image/svg?

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:181
&gt; +    // We use utf8() below instead of ascii() as ascii() replaces CRLFs with ?? (we still only have put ASCII characters in it).

I see.  ascii() will protect the title.  That seems fragile.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:208
&gt; +    RefPtr&lt;SharedBuffer&gt; mhtml = MHTMLArchive::generateMHTMLData(*frame);

Notice the goofy *frame here.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:210
&gt; +    // FIXME: we are copying all the data here. Idealy we would have a WebSharedData().
&gt; +    return WebCString(mhtml-&gt;data(), mhtml-&gt;size());

Ouch.  That seems expensive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412119</commentid>
    <comment_count>9</comment_count>
      <attachid>95313</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-05-29 22:15:11 -0700</bug_when>
    <thetext>Comment on attachment 95313
Patch

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

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:56
&gt; +static const char* const quotedPrintable = &quot;quoted-printable&quot;;
&gt; +static const char* const base64 = &quot;base64&quot;;
&gt; +
&gt; +static const char* const daysOfWeek[] = { &quot;Sun&quot;, &quot;Mon&quot;, &quot;Tue&quot;, &quot;Wed&quot;, &quot;Thu&quot;, &quot;Fri&quot;, &quot;Sat&quot; };
&gt; +static const char* const monthsOfYear[] = { &quot;Jan&quot;, &quot;Feb&quot;, &quot;Mar&quot;, &quot;Apr&quot;, &quot;May&quot;, &quot;Jun&quot;, &quot;Jul&quot;, &quot;Aug&quot;, &quot;Sep&quot;, &quot;Oct&quot;, &quot;Nov&quot;, &quot;Dec&quot; };

There is no need for the leftmost &quot;static&quot; in C++.

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:79
&gt; +static String numberToSize2String(int number)

What&apos; is a &quot;Size2&quot; string? I can&apos;t figure out what this function should be doing not only from the name, but even form the code.

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:81
&gt; +    number = abs(number);

Note that INT_MIN remains negative here.

&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:87
&gt;&gt; +static String currentDate()
&gt; 
&gt; This code really doesn&apos;t belong in this file.  Doesn&apos;t WTF have notions of date and time?

Getting the time and serializing it into a string (what&apos;s the standard specifying this particular serialization?) should be in separate functions (but why does MHTML saving take into account current time at all?)

&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:158
&gt;&gt; +PassRefPtr&lt;SharedBuffer&gt; MHTMLArchive::generateMHTMLData(const Frame&amp; frame)
&gt; 
&gt; We usually pass Frame by pointer, not reference.

And no const, ideally.

&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:170
&gt;&gt; +    CString asciiTitle = frame.document()-&gt;title().ascii();
&gt; 
&gt; What if the title contains \r\n ?

And what if it&apos;s not all ASCII??? But really, do we even need to write out From and Subject, and do we care what&apos;s in these header fields?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412818</commentid>
    <comment_count>10</comment_count>
      <attachid>95469</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-05-31 13:22:48 -0700</bug_when>
    <thetext>Created attachment 95469
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412824</commentid>
    <comment_count>11</comment_count>
      <attachid>95313</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-05-31 13:30:42 -0700</bug_when>
    <thetext>Comment on attachment 95313
Patch

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

&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:56
&gt;&gt; +static const char* const monthsOfYear[] = { &quot;Jan&quot;, &quot;Feb&quot;, &quot;Mar&quot;, &quot;Apr&quot;, &quot;May&quot;, &quot;Jun&quot;, &quot;Jul&quot;, &quot;Aug&quot;, &quot;Sep&quot;, &quot;Oct&quot;, &quot;Nov&quot;, &quot;Dec&quot; };
&gt; 
&gt; There is no need for the leftmost &quot;static&quot; in C++.

Removed.

&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:63
&gt;&gt; +    md5.addBytes(reinterpret_cast&lt;const uint8_t*&gt;(&amp;number), sizeof(double));
&gt; 
&gt; Yuck.  Why not cryptographicallyRandomValues ?  That will give you nicely distributed bytes of whatever length you like.

Ah! That&apos;s what I was looking for.

&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:65
&gt;&gt; +    md5.checksum(md5Bytes);
&gt; 
&gt; What&apos;s the point of using MD5?  Just generate however many random bytes you want.

Done.

&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:79
&gt;&gt; +static String numberToSize2String(int number)
&gt; 
&gt; What&apos; is a &quot;Size2&quot; string? I can&apos;t figure out what this function should be doing not only from the name, but even form the code.

This function returns a string 2 characters long:
2 -&gt; 02
10 -&gt; 10
Renamed to something hopefully clearer.

&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:81
&gt;&gt; +    number = abs(number);
&gt; 
&gt; Note that INT_MIN remains negative here.

Input is expected to be positive. Added ASSERTs.

&gt;&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:87
&gt;&gt;&gt; +static String currentDate()
&gt;&gt; 
&gt;&gt; This code really doesn&apos;t belong in this file.  Doesn&apos;t WTF have notions of date and time?
&gt; 
&gt; Getting the time and serializing it into a string (what&apos;s the standard specifying this particular serialization?) should be in separate functions (but why does MHTML saving take into account current time at all?)

Added that with some non math related function to DateMath.h.
Made it take the time as input values and renamed the function to make clear it is RFC 2822 format.

&gt;&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:158
&gt;&gt;&gt; +PassRefPtr&lt;SharedBuffer&gt; MHTMLArchive::generateMHTMLData(const Frame&amp; frame)
&gt;&gt; 
&gt;&gt; We usually pass Frame by pointer, not reference.
&gt; 
&gt; And no const, ideally.

Now Frame*.

&gt;&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:170
&gt;&gt;&gt; +    CString asciiTitle = frame.document()-&gt;title().ascii();
&gt;&gt; 
&gt;&gt; What if the title contains \r\n ?
&gt; 
&gt; And what if it&apos;s not all ASCII??? But really, do we even need to write out From and Subject, and do we care what&apos;s in these header fields?

Other browsers do specify a From, Subject and Date. I include it for consistency with their behavior.
In the case of non ASCII text in the title, I replace these characters with ?s (that&apos;s what IE does).

&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:176
&gt;&gt; +    stringBuilder.append(&quot;\ttype=\&quot;text/html\&quot;;\r\n&quot;);
&gt; 
&gt; What if the frame contains something besides text/html, such as image/svg?

This type here is not important (the one that matters is the one for each resource).
Added it to be the right type anyway for good measure.

&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:181
&gt;&gt; +    // We use utf8() below instead of ascii() as ascii() replaces CRLFs with ?? (we still only have put ASCII characters in it).
&gt; 
&gt; I see.  ascii() will protect the title.  That seems fragile.

OK, added a function to do that explicitly.

&gt;&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:210
&gt;&gt; +    return WebCString(mhtml-&gt;data(), mhtml-&gt;size());
&gt; 
&gt; Ouch.  That seems expensive.

I&apos;ll address that in a follow up patch more Chromium WebKit API specific if you don&apos;t mind.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412832</commentid>
    <comment_count>12</comment_count>
      <attachid>95469</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-31 13:38:01 -0700</bug_when>
    <thetext>Comment on attachment 95469
Patch

Attachment 95469 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/8753442</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412862</commentid>
    <comment_count>13</comment_count>
      <attachid>95469</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-31 14:27:59 -0700</bug_when>
    <thetext>Comment on attachment 95469
Patch

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

This looks great.  A bunch of minor nits below.

&gt; Source/JavaScriptCore/wtf/DateMath.cpp:1041
&gt; +String toRFC2822DateString(int dayOfWeek, int day, int month, int year, int hours, int minutes, int seconds, int utcOffset)

Much nicer!  Thanks.

&gt; Source/JavaScriptCore/wtf/DateMath.h:65
&gt; +String toRFC2822DateString(int dayOfWeek, int day, int month, int year, int hours, int minutes, int seconds, int utcOffset);

Is it worth saying which of these are zero-based and which are one-based?  I remember that being fairly confusing in POSIX.

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:59
&gt; +    char randomValues[10];
&gt; +    cryptographicallyRandomValues(&amp;randomValues, 10);

I&apos;d make the 10 a named constant (local to this function).

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:122
&gt; +    pageSerializer.serialize(frame-&gt;page());

Should MHTMLArchive::generateMHTMLData take a Page rather than a Frame?

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:133
&gt; +          dateString = toRFC2822DateString(tm-&gt;tm_wday, tm-&gt;tm_mday, tm-&gt;tm_mon, 1900 + tm-&gt;tm_year, tm-&gt;tm_hour, tm-&gt;tm_min, tm-&gt;tm_sec, timeZone.tz_minuteswest);

bad indent

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:135
&gt; +          LOG_ERROR(&quot;Failed to retrieve time.&quot;);

In what situations could these fail?  Should these have ASSERT_NOT_REACHED?

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:156
&gt; +    // We use utf8() below instead of ascii() as ascii() replaces CRLFs with ?? (we still only have put ASCII characters in it).

Should we assert that asciiString is all ASCII?

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:169
&gt; +        const char* contentEncoding = resource.mimeType.startsWith(&quot;text/&quot;) ? quotedPrintable : base64;

So application/xml will get base64, but text/html will get quotedPrintable.  Maybe that&apos;s ok...  There&apos;s probably a helper function somewhere that will tell you if a MIME type is XML.

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:194
&gt; +                size_t lineLength = std::min(encodedDataLength - index, static_cast&lt;size_t&gt;(76));

I&apos;d store 76 in a named constant (which will also let you avoid the static_cast).

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:197
&gt; +                index += 76;

... because 76 recurs here.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:208
&gt; +    WebFrame* webFrame = static_cast&lt;WebViewImpl*&gt;(view)-&gt;mainFrame();
&gt; +    Frame* frame = static_cast&lt;WebFrameImpl*&gt;(webFrame)-&gt;frame();
&gt; +    RefPtr&lt;SharedBuffer&gt; mhtml = MHTMLArchive::generateMHTMLData(frame);

Yeah, see you&apos;re using mainFrame here.  That&apos;s a sign that you should really be dealing with Pages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412879</commentid>
    <comment_count>14</comment_count>
      <attachid>95469</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-05-31 14:45:00 -0700</bug_when>
    <thetext>Comment on attachment 95469
Patch

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

&gt; Source/JavaScriptCore/wtf/DateMath.cpp:183
&gt; +static String numberTo2CharacterLongString(int number)

I&apos;d suggest twoDigitStringFromNumber().

&gt; Source/JavaScriptCore/wtf/DateMath.h:65
&gt; +String toRFC2822DateString(int dayOfWeek, int day, int month, int year, int hours, int minutes, int seconds, int utcOffset);

I&apos;d say &quot;make&quot;, not &quot;to&quot;.

Why are all the arguments int, not unsigned?

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:129
&gt; +    struct timeval timeValue;
&gt; +    struct timezone timeZone;

No need for &quot;struct&quot; in C++.

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:131
&gt; +        struct tm* tm = gmtime(&amp;(timeValue.tv_sec));

No need for &quot;struct&quot; in C++. Please use a full name for the variable itself.

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:137
&gt; +          LOG_ERROR(&quot;Failed to retrieve time.&quot;);
&gt; +    } else
&gt; +        LOG_ERROR(&quot;Failed to retrieve time and time zone.&quot;);

There is no early return, so the values should be initialized to avoid having random data in them.

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:142
&gt; +    stringBuilder.append(replaceNonPrintableCharacters(frame-&gt;document()-&gt;title()));

Please add a comment here, explaining that IE replaces these with question marks.

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:161
&gt; +    for (Vector&lt;PageSerializer::Resource&gt;::const_iterator iterator = resources.begin(); iterator != resources.end(); ++iterator) {

As a matter of coding style, we don&apos;t use iterators on vectors. Please just use an unsigned index.

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:188
&gt; +            ASSERT(contentEncoding == base64);

Although it&apos;s correct in this case, comparing C strings for pointer equality raises red flags, and is better to avoid.

&gt; Source/WebCore/page/PageSerializer.cpp:212
&gt; +        // FIXME: it seems iframe used as image trigger this. We should deal with them correctly.

If these (among) others trigger the assertion, there is no need to say that they &quot;seem&quot; to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412885</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-05-31 14:52:56 -0700</bug_when>
    <thetext>When marking r-, I thought that I re-asserted Adam&apos;s r- that got clobbered, but now I see that he said r+. I still think that with so many comments, another quick review round is appropriate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412896</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-31 15:02:07 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; When marking r-, I thought that I re-asserted Adam&apos;s r- that got clobbered, but now I see that he said r+. I still think that with so many comments, another quick review round is appropriate.

Yeah, that&apos;s fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412999</commentid>
    <comment_count>17</comment_count>
      <attachid>95469</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-05-31 16:58:55 -0700</bug_when>
    <thetext>Comment on attachment 95469
Patch

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

&gt;&gt; Source/JavaScriptCore/wtf/DateMath.cpp:183
&gt;&gt; +static String numberTo2CharacterLongString(int number)
&gt; 
&gt; I&apos;d suggest twoDigitStringFromNumber().

Done.

&gt;&gt;&gt; Source/JavaScriptCore/wtf/DateMath.h:65
&gt;&gt;&gt; +String toRFC2822DateString(int dayOfWeek, int day, int month, int year, int hours, int minutes, int seconds, int utcOffset);
&gt;&gt; 
&gt;&gt; Is it worth saying which of these are zero-based and which are one-based?  I remember that being fairly confusing in POSIX.
&gt; 
&gt; I&apos;d say &quot;make&quot;, not &quot;to&quot;.
&gt; 
&gt; Why are all the arguments int, not unsigned?

renamed to makeRFC2822DateString, added comment describing parameters&apos; range, modified parameters to be unsigned (but for utfOffset which can be negative).

&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:59
&gt;&gt; +    cryptographicallyRandomValues(&amp;randomValues, 10);
&gt; 
&gt; I&apos;d make the 10 a named constant (local to this function).

Done.

&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:122
&gt;&gt; +    pageSerializer.serialize(frame-&gt;page());
&gt; 
&gt; Should MHTMLArchive::generateMHTMLData take a Page rather than a Frame?

Good idea, done.

&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:129
&gt;&gt; +    struct timezone timeZone;
&gt; 
&gt; No need for &quot;struct&quot; in C++.

Removed.

&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:131
&gt;&gt; +        struct tm* tm = gmtime(&amp;(timeValue.tv_sec));
&gt; 
&gt; No need for &quot;struct&quot; in C++. Please use a full name for the variable itself.

Removed struct, renamed variable.

&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:133
&gt;&gt; +          dateString = toRFC2822DateString(tm-&gt;tm_wday, tm-&gt;tm_mday, tm-&gt;tm_mon, 1900 + tm-&gt;tm_year, tm-&gt;tm_hour, tm-&gt;tm_min, tm-&gt;tm_sec, timeZone.tz_minuteswest);
&gt; 
&gt; bad indent

Fixed indent.

&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:135
&gt;&gt; +          LOG_ERROR(&quot;Failed to retrieve time.&quot;);
&gt; 
&gt; In what situations could these fail?  Should these have ASSERT_NOT_REACHED?

It&apos;s not exactly clear from the docs in which cases these would fail, but we should probably assert if they do.
Now asserting.

&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:137
&gt;&gt; +        LOG_ERROR(&quot;Failed to retrieve time and time zone.&quot;);
&gt; 
&gt; There is no early return, so the values should be initialized to avoid having random data in them.

Done.

&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:142
&gt;&gt; +    stringBuilder.append(replaceNonPrintableCharacters(frame-&gt;document()-&gt;title()));
&gt; 
&gt; Please add a comment here, explaining that IE replaces these with question marks.

Done.

&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:156
&gt;&gt; +    // We use utf8() below instead of ascii() as ascii() replaces CRLFs with ?? (we still only have put ASCII characters in it).
&gt; 
&gt; Should we assert that asciiString is all ASCII?

Done.

&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:161
&gt;&gt; +    for (Vector&lt;PageSerializer::Resource&gt;::const_iterator iterator = resources.begin(); iterator != resources.end(); ++iterator) {
&gt; 
&gt; As a matter of coding style, we don&apos;t use iterators on vectors. Please just use an unsigned index.

Done.

&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:169
&gt;&gt; +        const char* contentEncoding = resource.mimeType.startsWith(&quot;text/&quot;) ? quotedPrintable : base64;
&gt; 
&gt; So application/xml will get base64, but text/html will get quotedPrintable.  Maybe that&apos;s ok...  There&apos;s probably a helper function somewhere that will tell you if a MIME type is XML.

OK, now using MIMERegistry code. Scripts and non-image types now use QuotedPrintable.

&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:188
&gt;&gt; +            ASSERT(contentEncoding == base64);
&gt; 
&gt; Although it&apos;s correct in this case, comparing C strings for pointer equality raises red flags, and is better to avoid.

OK, replaced with strcmp.

&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:194
&gt;&gt; +                size_t lineLength = std::min(encodedDataLength - index, static_cast&lt;size_t&gt;(76));
&gt; 
&gt; I&apos;d store 76 in a named constant (which will also let you avoid the static_cast).

Done.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:212
&gt;&gt; +        // FIXME: it seems iframe used as image trigger this. We should deal with them correctly.
&gt; 
&gt; If these (among) others trigger the assertion, there is no need to say that they &quot;seem&quot; to.

Changed comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413000</commentid>
    <comment_count>18</comment_count>
      <attachid>95512</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-05-31 17:00:37 -0700</bug_when>
    <thetext>Created attachment 95512
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413004</commentid>
    <comment_count>19</comment_count>
      <attachid>95512</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-31 17:10:10 -0700</bug_when>
    <thetext>Comment on attachment 95512
Patch

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

Looks good to me, but give Alexey a chance to take another look.

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:132
&gt; +        tm* timeAndDate = gmtime(&amp;(timeValue.tv_sec));

Sorry for the dumb question, but do we need to free timeAndDate?

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:208
&gt; +    WebFrame* webFrame = static_cast&lt;WebViewImpl*&gt;(view)-&gt;mainFrame();
&gt; +    Frame* frame = static_cast&lt;WebFrameImpl*&gt;(webFrame)-&gt;frame();
&gt; +    RefPtr&lt;SharedBuffer&gt; mhtml = MHTMLArchive::generateMHTMLData(frame-&gt;page());

There&apos;s no way to get directly from a WebViewImpl to a Page?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413012</commentid>
    <comment_count>20</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-05-31 17:21:29 -0700</bug_when>
    <thetext>I don&apos;t have further comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413017</commentid>
    <comment_count>21</comment_count>
      <attachid>95512</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-05-31 17:35:12 -0700</bug_when>
    <thetext>Comment on attachment 95512
Patch

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

&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:132
&gt;&gt; +        tm* timeAndDate = gmtime(&amp;(timeValue.tv_sec));
&gt; 
&gt; Sorry for the dumb question, but do we need to free timeAndDate?

Actually it is a pretty good question! :-)
I was using the non-reentrant version, which is bad.
Now using the reentrant version and the localtime instead of gmtime (as we want the local time, not the UTC time).

&gt;&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:208
&gt;&gt; +    RefPtr&lt;SharedBuffer&gt; mhtml = MHTMLArchive::generateMHTMLData(frame-&gt;page());
&gt; 
&gt; There&apos;s no way to get directly from a WebViewImpl to a Page?

Ah, yes, there is. Thanks for pointing that out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413018</commentid>
    <comment_count>22</comment_count>
      <attachid>95519</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-05-31 17:35:26 -0700</bug_when>
    <thetext>Created attachment 95519
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413019</commentid>
    <comment_count>23</comment_count>
      <attachid>95519</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-31 17:37:47 -0700</bug_when>
    <thetext>Comment on attachment 95519
Patch

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

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:206
&gt; +    RefPtr&lt;SharedBuffer&gt; mhtml = MHTMLArchive::generateMHTMLData(static_cast&lt;WebViewImpl*&gt;(view)-&gt;page());

Ah, that&apos;s much nicer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413239</commentid>
    <comment_count>24</comment_count>
      <attachid>95519</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-06-01 02:18:07 -0700</bug_when>
    <thetext>Comment on attachment 95519
Patch

Clearing flags on attachment: 95519

Committed r87788: &lt;http://trac.webkit.org/changeset/87788&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413240</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-06-01 02:18:14 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413268</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-06-01 03:47:31 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 95519:

http/tests/inspector/console-websocket-error.html bug 57392 (authors: pfeldman@chromium.org and yutak@chromium.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413530</commentid>
    <comment_count>27</comment_count>
      <attachid>95633</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-06-01 11:24:56 -0700</bug_when>
    <thetext>Created attachment 95633
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413533</commentid>
    <comment_count>28</comment_count>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-06-01 11:26:09 -0700</bug_when>
    <thetext>Fixed the Windows bustage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413637</commentid>
    <comment_count>29</comment_count>
      <attachid>95633</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-01 13:57:52 -0700</bug_when>
    <thetext>Comment on attachment 95633
Patch

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

&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:144
&gt; +#if OS(WINDOWS)
&gt; +    __time64_t time;
&gt; +    _time64(&amp;time); 
&gt; +    if (_localtime64_s(&amp;timeAndDate, &amp;time))
&gt; +        ASSERT_NOT_REACHED();
&gt; +#else
&gt; +    timeval timeValue = { 0 };
&gt; +    if (gettimeofday(&amp;timeValue, 0) || !localtime_r(&amp;(timeValue.tv_sec), &amp;timeAndDate))
&gt; +        ASSERT_NOT_REACHED();
&gt; +#endif

We shouldn&apos;t have platform-specific code in this file.  Maybe move this stuff to WTF?  Are you sure there isn&apos;t already a way to do this in WTF?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413702</commentid>
    <comment_count>30</comment_count>
      <attachid>95673</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-06-01 15:19:49 -0700</bug_when>
    <thetext>Created attachment 95673
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413703</commentid>
    <comment_count>31</comment_count>
      <attachid>95633</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-06-01 15:21:28 -0700</bug_when>
    <thetext>Comment on attachment 95633
Patch

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

&gt;&gt; Source/WebCore/loader/archive/mhtml/MHTMLArchive.cpp:144
&gt;&gt; +#endif
&gt; 
&gt; We shouldn&apos;t have platform-specific code in this file.  Maybe move this stuff to WTF?  Are you sure there isn&apos;t already a way to do this in WTF?

I could not find code that already does that in WTF.
I created a new method retrieveDateAndTime in DateMath.h to get that info.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413705</commentid>
    <comment_count>32</comment_count>
      <attachid>95673</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-01 15:26:58 -0700</bug_when>
    <thetext>Comment on attachment 95673
Patch

Great.  I&apos;m surprised we don&apos;t have this already, but I believe you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413707</commentid>
    <comment_count>33</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-06-01 15:34:04 -0700</bug_when>
    <thetext>Can&apos;t you just use functions from wtf/CurrentTime.h? Even if not, that&apos;s where the new function should go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413765</commentid>
    <comment_count>34</comment_count>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-06-01 16:47:44 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; Can&apos;t you just use functions from wtf/CurrentTime.h? Even if not, that&apos;s where the new function should go.

Thanks Alexey, I somehow missed CurrentTime.h (I was grepping for gettimeofday).
Everything I need is already in there.
New patch coming shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413768</commentid>
    <comment_count>35</comment_count>
      <attachid>95687</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-06-01 16:55:19 -0700</bug_when>
    <thetext>Created attachment 95687
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414480</commentid>
    <comment_count>36</comment_count>
      <attachid>95687</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-06-02 14:59:42 -0700</bug_when>
    <thetext>Comment on attachment 95687
Patch

Clearing flags on attachment: 95687

Committed r87958: &lt;http://trac.webkit.org/changeset/87958&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414482</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-06-02 14:59:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95240</attachid>
            <date>2011-05-27 18:26:23 -0700</date>
            <delta_ts>2011-05-29 18:11:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-7169-20110527182622.patch</filename>
            <type>text/plain</type>
            <size>14847</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODc1NjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxMjY4YTI5Y2Y4YzRmNmI0
OTUxNmU0NWY1ZmE5MGQ2NWNmNWUwYmIzLi45ZTQ1Y2E4ZTRmOWRhZWQxZjk1ZjdmODgwZmI1MDJh
ZWM4Yjc3YzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMDUtMjcgIEpheSBD
aXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBNSFRNTCBnZW5lcmF0aW9uIHN1cHBvcnQg
dG8gTUhUTUxBcmNoaXZlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzE2OQorCisgICAgICAgICogbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNo
aXZlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRlbnRFbmNvZGluZ0Zvck1JTUVUeXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlUmFuZG9tQm91bmRhcnkpOgorICAgICAgICAoV2Vi
Q29yZTo6bnVtYmVyVG9TaXplMlN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpjdXJyZW50RGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNSFRNTEFyY2hpdmU6OmNyZWF0ZU1IVE1MRGF0YSk6Cisg
ICAgICAgICogbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZlLmg6CisgICAgICAgICog
cGFnZS9QYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXpl
cjo6c2VyaWFsaXplRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnNl
cmlhbGl6ZUNTU1N0eWxlU2hlZXQpOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmFwcGVuZCk6CisgICAgICAgICog
cGxhdGZvcm0vU2hhcmVkQnVmZmVyLmg6CisKIDIwMTEtMDUtMjcgIEJyYWR5IEVpZHNvbiAgPGJl
aWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5j
cHAKaW5kZXggMGQzMzIzN2I3MGY4MGVlZDcwMDc5Yzk4NmNlMDRiYmUzNTg5MjFlMC4uN2U3MzJk
Njg4ZTBiYTllNTJlYzkyYjYwOTkwOTFkN2YzNDUyMjcwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCkBAIC0zMywxMSAr
MzMsODYgQEAKICNpZiBFTkFCTEUoTUhUTUwpCiAjaW5jbHVkZSAiTUhUTUxBcmNoaXZlLmgiCiAK
KyNpbmNsdWRlICJCYXNlNjQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiTUhUTUxQYXJzZXIuaCIKICNpbmNsdWRlICJNSU1FSGVhZGVyLmgi
CisjaW5jbHVkZSAiUGFnZVNlcmlhbGl6ZXIuaCIKKyNpbmNsdWRlICJRdW90ZWRQcmludGFibGUu
aCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgcXVv
dGVkUHJpbnRhYmxlID0gInF1b3RlZC1wcmludGFibGUiOworc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IGJhc2U2NCA9ICJiYXNlNjQiOworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGJpbmFyeSA9
ICJiaW5hcnkiOworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZGF5c09mV2Vla1tdID0geyAi
U3VuIiwgIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0IiB9Oworc3RhdGlj
IGNvbnN0IGNoYXIqIGNvbnN0IG1vbnRoc09mWWVhcltdID0geyAiSmFuIiwgIkZlYiIsICJNYXIi
LCAiQXByIiwgIk1heSIsICJKdW4iLCAiSnVsIiwgIkF1ZyIsICJTZXAiLCAiT2N0IiwgIk5vdiIs
ICJEZWMiIH07CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb250ZW50RW5jb2RpbmdGb3JNSU1FVHlw
ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIHVzZUJpbmFyeSkKK3sKKyAgICBpZiAobWlt
ZVR5cGUuc3RhcnRzV2l0aCgidGV4dC8iKSkKKyAgICAgICAgcmV0dXJuIHF1b3RlZFByaW50YWJs
ZTsKKyAgICByZXR1cm4gdXNlQmluYXJ5ID8gYmluYXJ5OiBiYXNlNjQ7Cit9CisKK3N0YXRpYyBT
dHJpbmcgZ2VuZXJhdGVSYW5kb21Cb3VuZGFyeSgpCit7CisgICAgLy8gRklYTUU6IGdlbmVyYXRl
IGEgcmVhbCByYW5kb20gb25lLgorICAgIHJldHVybiAiLS0tLT1fTmV4dFBhcnRfMDAwXzAwMUJf
MDFDQzE1N0IuOTZGODA4QTAiOworfQorCitzdGF0aWMgU3RyaW5nIG51bWJlclRvU2l6ZTJTdHJp
bmcoaW50IG51bWJlcikKK3sKKyAgICBudW1iZXIgPSBhYnMobnVtYmVyKTsKKyAgICBpZiAobnVt
YmVyID4gOSkKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6bnVtYmVyKG51bWJlcik7CisgICAgcmV0
dXJuIG1ha2VTdHJpbmcoIjAiLCBTdHJpbmc6Om51bWJlcihudW1iZXIpKTsKK30KKworc3RhdGlj
IFN0cmluZyBjdXJyZW50RGF0ZSgpCit7CisgICAgc3RydWN0IHRpbWV2YWwgdGltZVZhbHVlOwor
ICAgIHN0cnVjdCB0aW1lem9uZSB0aW1lWm9uZTsKKyAgICBpZiAoZ2V0dGltZW9mZGF5KCZ0aW1l
VmFsdWUsICZ0aW1lWm9uZSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmll
dmUgdGltZSBhbmQgdGltZSB6b25lLiIpOworICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAg
fQorICAgIHN0cnVjdCB0bSogdG0gPSBnbXRpbWUoJih0aW1lVmFsdWUudHZfc2VjKSk7CisgICAg
aWYgKCF0bSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSB0aW1lLiIp
OworICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorICAgIFN0cmluZ0J1aWxkZXIgc3Ry
aW5nQnVpbGRlcjsKKworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGRheXNPZldlZWtbdG0tPnRt
X3dkYXldKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCAiKTsKKyAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChTdHJpbmc6Om51bWJlcih0bS0+dG1fbWRheSkpOworICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCIgIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobW9udGhzT2ZZZWFyW3Rt
LT50bV9tb25dKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICIpOworICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKFN0cmluZzo6bnVtYmVyKDE5MDAgKyB0bS0+dG1feWVhcikpOworICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCIgIik7CisKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChudW1i
ZXJUb1NpemUyU3RyaW5nKHRtLT50bV9ob3VyKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
JzonKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChudW1iZXJUb1NpemUyU3RyaW5nKHRtLT50
bV9taW4pKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnOicpOworICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKG51bWJlclRvU2l6ZTJTdHJpbmcodG0tPnRtX3NlYykpOworICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCcgJyk7CisKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0aW1lWm9uZS50
el9taW51dGVzd2VzdCA+IDAgPyAiLSIgOiAiKyIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KG51bWJlclRvU2l6ZTJTdHJpbmcodGltZVpvbmUudHpfbWludXRlc3dlc3QgLyA2MCkpOworICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKG51bWJlclRvU2l6ZTJTdHJpbmcodGltZVpvbmUudHpfbWlu
dXRlc3dlc3QgJSA2MCkpOworCisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsK
K30KKwogTUhUTUxBcmNoaXZlOjpNSFRNTEFyY2hpdmUoKQogewogfQpAQCAtNzEsNSArMTQ2LDg0
IEBAIFBhc3NSZWZQdHI8TUhUTUxBcmNoaXZlPiBNSFRNTEFyY2hpdmU6OmNyZWF0ZShjb25zdCBL
VVJMJiB1cmwsIFNoYXJlZEJ1ZmZlciogZGF0CiAgICAgcmV0dXJuIG1haW5BcmNoaXZlLnJlbGVh
c2UoKTsKIH0KIAorUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IE1IVE1MQXJjaGl2ZTo6Y3JlYXRl
TUhUTUxEYXRhKGNvbnN0IEZyYW1lJiBmcmFtZSwgYm9vbCB1c2VCaW5hcnlFbmNvZGluZykKK3sK
KyAgICBWZWN0b3I8UGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlPiByZXNvdXJjZXM7CisgICAgUGFn
ZVNlcmlhbGl6ZXIgcGFnZVNlcmlhbGl6ZXIoJnJlc291cmNlcyk7CisgICAgcGFnZVNlcmlhbGl6
ZXIuc2VyaWFsaXplKGZyYW1lLnBhZ2UoKSk7CisKKyAgICBTdHJpbmcgYm91bmRhcnkgPSBnZW5l
cmF0ZVJhbmRvbUJvdW5kYXJ5KCk7CisgICAgU3RyaW5nIGVuZE9mUmVzb3VyY2VCb3VuZGFyeSA9
IG1ha2VTdHJpbmcoIi0tIiwgYm91bmRhcnksICJcclxuIik7CisKKyAgICBTdHJpbmdCdWlsZGVy
IHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIkZyb206IDxTYXZlZCBi
eSBXZWJLaXQ+XHJcbiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJTdWJqZWN0OiAiKTsK
KyAgICBDU3RyaW5nIGFzY2lpVGl0bGUgPSBmcmFtZS5kb2N1bWVudCgpLT50aXRsZSgpLmFzY2lp
KCk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoYXNjaWlUaXRsZS5kYXRhKCksIGFzY2lpVGl0
bGUubGVuZ3RoKCkpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcclxuRGF0ZTogIik7Cisg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoY3VycmVudERhdGUoKSk7CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIlxyXG5NSU1FLVZlcnNpb246IDEuMFxyXG4iKTsKKyAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgiQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvcmVsYXRlZDtcclxuIik7CisgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIlx0dHlwZT1cInRleHQvaHRtbFwiO1xyXG4iKTsKKyAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgiXHRib3VuZGFyeT1cIiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKGJvdW5kYXJ5KTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXCJcclxuXHJcbiIpOwor
CisgICAgLy8gV2UgdXNlIHV0ZjgoKSBiZWxvdyBpbnN0ZWFkIG9mIGFzY2lpKCkgYXMgYXNjaWko
KSByZXBsYWNlcyBDUkxGcyB3aXRoID8/LiBUaGUgc3RyaW5nIGlzIHN0aWxsIG9ubHkgQVNDSUku
CisgICAgQ1N0cmluZyBhc2NpaVN0cmluZyA9IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKS51dGY4
KCk7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbWh0bWxEYXRhID0gU2hhcmVkQnVmZmVyOjpj
cmVhdGUoKTsKKyAgICBtaHRtbERhdGEtPmFwcGVuZChhc2NpaVN0cmluZy5kYXRhKCksIGFzY2lp
U3RyaW5nLmxlbmd0aCgpKTsKKworICAgIGZvciAoVmVjdG9yPFBhZ2VTZXJpYWxpemVyOjpSZXNv
dXJjZT46OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yID0gcmVzb3VyY2VzLmJlZ2luKCk7IGl0ZXJh
dG9yICE9IHJlc291cmNlcy5lbmQoKTsgKytpdGVyYXRvcikgeworICAgICAgICBjb25zdCBQYWdl
U2VyaWFsaXplcjo6UmVzb3VyY2UmIHJlc291cmNlID0gKml0ZXJhdG9yOworCisgICAgICAgIHN0
cmluZ0J1aWxkZXIuY2xlYXIoKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZW5kT2ZS
ZXNvdXJjZUJvdW5kYXJ5KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIkNvbnRlbnQt
VHlwZTogIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJlc291cmNlLm1pbWVUeXBl
KTsKKworICAgICAgICBjb25zdCBjaGFyKiBjb250ZW50RW5jb2RpbmcgPSBjb250ZW50RW5jb2Rp
bmdGb3JNSU1FVHlwZShyZXNvdXJjZS5taW1lVHlwZSwgdXNlQmluYXJ5RW5jb2RpbmcpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcbkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6
ICIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChjb250ZW50RW5jb2RpbmcpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcbkNvbnRlbnQtTG9jYXRpb246ICIpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyZXNvdXJjZS51cmwpOworICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgiXHJcblxyXG4iKTsKKworICAgICAgICBhc2NpaVN0cmluZyA9IHN0cmlu
Z0J1aWxkZXIudG9TdHJpbmcoKS51dGY4KCk7CisgICAgICAgIG1odG1sRGF0YS0+YXBwZW5kKGFz
Y2lpU3RyaW5nLmRhdGEoKSwgYXNjaWlTdHJpbmcubGVuZ3RoKCkpOworCisgICAgICAgIGlmIChj
b250ZW50RW5jb2RpbmcgPT0gYmluYXJ5KQorICAgICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQo
cmVzb3VyY2UuZGF0YS5nZXQoKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gRklY
TUU6IGlkZWFsbHkgd2Ugd291bGQgZW5jb2RlIHRoZSBjb250ZW50IGFzIGEgc3RyZWFtIHdpdGhv
dXQgaGF2aW5nIHRvIGZldGNoIGl0IGFsbC4KKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRhdGEg
PSByZXNvdXJjZS5kYXRhLT5kYXRhKCk7CisgICAgICAgICAgICBzaXplX3QgZGF0YUxlbmd0aCA9
IHJlc291cmNlLmRhdGEtPnNpemUoKTsKKyAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBlbmNvZGVk
RGF0YTsKKyAgICAgICAgICAgIGlmIChjb250ZW50RW5jb2RpbmcgPT0gcXVvdGVkUHJpbnRhYmxl
KSB7CisgICAgICAgICAgICAgICAgcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGRhdGEsIGRhdGFMZW5n
dGgsIGVuY29kZWREYXRhKTsKKyAgICAgICAgICAgICAgICBtaHRtbERhdGEtPmFwcGVuZChlbmNv
ZGVkRGF0YS5kYXRhKCksIGVuY29kZWREYXRhLnNpemUoKSk7CisgICAgICAgICAgICAgICAgbWh0
bWxEYXRhLT5hcHBlbmQoIlxyXG4iLCAyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKGNvbnRlbnRFbmNvZGluZyA9PSBiYXNlNjQpOworICAgICAgICAgICAg
ICAgIC8vIFdlIGFyZSBub3Qgc3BlY2lmeWluZyBpbnNlcnRMRnMgPSB0cnVlIGJlbG93IGFzIHdl
IHdhbnQgbGluZSB0byBiZSBjdXQgYnV0IHdpdGggQ1JMRnMsIG5vdCBqdXN0IExGcworICAgICAg
ICAgICAgICAgIGJhc2U2NEVuY29kZShkYXRhLCBkYXRhTGVuZ3RoLCBlbmNvZGVkRGF0YSk7Cisg
ICAgICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICBzaXplX3Qg
ZW5jb2RlZERhdGFMZW5ndGggPSBlbmNvZGVkRGF0YS5zaXplKCk7CisgICAgICAgICAgICAgICAg
ZG8geworICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGluZUxlbmd0aCA9IHN0ZDo6bWluKGVu
Y29kZWREYXRhTGVuZ3RoIC0gaW5kZXgsIHN0YXRpY19jYXN0PHNpemVfdD4oNzYpKTsKKyAgICAg
ICAgICAgICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoZW5jb2RlZERhdGEuZGF0YSgpICsgaW5k
ZXgsIGxpbmVMZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBtaHRtbERhdGEtPmFwcGVuZCgi
XHJcbiIsIDIpOworICAgICAgICAgICAgICAgICAgICBpbmRleCArPSA3NjsKKyAgICAgICAgICAg
ICAgICB9IHdoaWxlIChpbmRleCA8IGVuY29kZWREYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIGFzY2lpU3RyaW5nID0gbWFrZVN0cmluZygiLS0iLCBi
b3VuZGFyeSwgIi0tXHJcbiIpLnV0ZjgoKTsKKyAgICBtaHRtbERhdGEtPmFwcGVuZChhc2NpaVN0
cmluZy5kYXRhKCksIGFzY2lpU3RyaW5nLmxlbmd0aCgpKTsKKworICAgIHJldHVybiBtaHRtbERh
dGEucmVsZWFzZSgpOworfQorCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5oIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZlLmgKaW5kZXggMWIzMWRjMzE1YmFiOGIxM2Zl
MjM4MTIwYTQzYjNiMDJkOTg0YTc3OS4uM2ZmZDRhNDM2YWQ2MTVhZjQwMDk0ZmE4ZDM2ZWRjYjVk
YWU2NzVhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwv
TUhUTUxBcmNoaXZlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwv
TUhUTUxBcmNoaXZlLmgKQEAgLTM3LDcgKzM3LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitjbGFzcyBGcmFtZTsKIGNsYXNzIE1IVE1MUGFyc2VyOworY2xhc3MgU2hhcmVkQnVmZmVyOwog
CiBjbGFzcyBNSFRNTEFyY2hpdmUgOiBwdWJsaWMgQXJjaGl2ZSB7CiBwdWJsaWM6CkBAIC00Niw2
ICs0OCw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNSFRNTEFyY2hpdmU+IGNy
ZWF0ZSgpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1IVE1MQXJjaGl2ZT4gY3JlYXRlKGNvbnN0
IEtVUkwmLCBTaGFyZWRCdWZmZXIqKTsKIAorICAgIC8vIEJpbmFyeSBlbmNvZGluZyBnZW5lcmF0
ZXMgc21hbGxlciBmaWxlcywgYnV0IHRoZXNlIGZpbGVzIG1pZ2h0IG5vdCBiZSBzdXBwb3J0ZWQg
Ynkgb3RoZXIgYnJvd3NlcnMuCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBj
cmVhdGVNSFRNTERhdGEoY29uc3QgRnJhbWUmLCBib29sIHVzZUJpbmFyeUVuY29kaW5nKTsKKwog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTUhUTUxQYXJzZXI7CiAgICAgTUhUTUxBcmNoaXZl
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCmluZGV4IGQ1NjkyNmZhMTVh
YzI0OTliZjE2OTYwZGZkNzEyMWJmMWQ1NjQxMGMuLjJmMmFlMTJkMTc0NTRkZmMyMTUxZWMwZjk3
MTc0OTVkOThiZjU2MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlh
bGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCkBA
IC0yMDYsOCArMjA2LDEyIEBAIHZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKEZy
YW1lKiBmcmFtZSkKIAogICAgIFZlY3RvcjxOb2RlKj4gbm9kZXM7CiAgICAgU2VyaWFsaXplck1h
cmt1cEFjY3VtdWxhdG9yIGFjY3VtdWxhdG9yKHRoaXMsIGRvY3VtZW50LCAmbm9kZXMpOwotICAg
IFRleHRFbmNvZGluZyB0ZXh0RW5jb2RpbmcoVGV4dEVuY29kaW5nKGRvY3VtZW50LT5jaGFyc2V0
KCkpKTsKLSAgICBBU1NFUlQodGV4dEVuY29kaW5nLmlzVmFsaWQoKSk7CisgICAgVGV4dEVuY29k
aW5nIHRleHRFbmNvZGluZyhkb2N1bWVudC0+Y2hhcnNldCgpKTsKKyAgICBDU3RyaW5nIGRhdGE7
CisgICAgaWYgKCF0ZXh0RW5jb2RpbmcuaXNWYWxpZCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBp
dCBzZWVtcyBpZnJhbWUgdXNlZCBhcyBpbWFnZSB0cmlnZ2VyIHRoaXMuIFdlIHNob3VsZCBkZWFs
IHdpdGggdGhlbSBjb3JyZWN0bHkuCisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgU3RyaW5n
IHRleHQgPSBhY2N1bXVsYXRvci5zZXJpYWxpemVOb2Rlcyhkb2N1bWVudC0+ZG9jdW1lbnRFbGVt
ZW50KCksIDAsIEluY2x1ZGVOb2RlKTsKICAgICBDU3RyaW5nIGZyYW1lSFRNTCA9IHRleHRFbmNv
ZGluZy5lbmNvZGUodGV4dC5jaGFyYWN0ZXJzKCksIHRleHQubGVuZ3RoKCksIEVudGl0aWVzRm9y
VW5lbmNvZGFibGVzKTsKICAgICBtX3Jlc291cmNlcy0+YXBwZW5kKFJlc291cmNlKHVybCwgZG9j
dW1lbnQtPnN1Z2dlc3RlZE1JTUVUeXBlKCksIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGZyYW1lSFRN
TC5kYXRhKCksIGZyYW1lSFRNTC5sZW5ndGgoKSkpKTsKQEAgLTI3NCw3ICsyNzgsNyBAQCB2b2lk
IFBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVDU1NTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqIHN0
eWxlU2hlZXQsIGNvbnN0IEtVUgogCiAgICAgaWYgKHVybC5pc1ZhbGlkKCkgJiYgIW1fcmVzb3Vy
Y2VVUkxzLmNvbnRhaW5zKHVybCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjaGVj
ayB3aGV0aGVyIGEgY2hhcnNldCBoYXMgYmVlbiBzcGVjaWZpZWQgYW5kIGlmIG5vbmUgd2FzIGZv
dW5kIGFkZCBvbmUuCi0gICAgICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2RpbmcgPSBUZXh0RW5j
b2Rpbmcoc3R5bGVTaGVldC0+Y2hhcnNldCgpKTsKKyAgICAgICAgVGV4dEVuY29kaW5nIHRleHRF
bmNvZGluZyhzdHlsZVNoZWV0LT5jaGFyc2V0KCkpOwogICAgICAgICBBU1NFUlQodGV4dEVuY29k
aW5nLmlzVmFsaWQoKSk7CiAgICAgICAgIFN0cmluZyB0ZXh0U3RyaW5nID0gY3NzVGV4dC50b1N0
cmluZygpOwogICAgICAgICBDU3RyaW5nIHRleHQgPSB0ZXh0RW5jb2RpbmcuZW5jb2RlKHRleHRT
dHJpbmcuY2hhcmFjdGVycygpLCB0ZXh0U3RyaW5nLmxlbmd0aCgpLCBFbnRpdGllc0ZvclVuZW5j
b2RhYmxlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZm
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAppbmRleCAw
OTAwYWU0MjFlMzc2NGZkMmRhOWFiM2Y0NzM4OGFkMzZiM2M4OGNhLi5hZDg2MThlYjRjOTNjYTg5
OGFkMTEyY2NlNDMyMjA2ODIwMzc0ZWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJl
ZEJ1ZmZlci5jcHAKQEAgLTExNyw2ICsxMTcsMTYgQEAgY29uc3QgY2hhciogU2hhcmVkQnVmZmVy
OjpkYXRhKCkgY29uc3QKICAgICByZXR1cm4gYnVmZmVyKCkuZGF0YSgpOwogfQogCit2b2lkIFNo
YXJlZEJ1ZmZlcjo6YXBwZW5kKFNoYXJlZEJ1ZmZlciogZGF0YSkKK3sKKyAgICBjb25zdCBjaGFy
KiBzZWdtZW50OworICAgIHNpemVfdCBwb3NpdGlvbiA9IDA7CisgICAgd2hpbGUgKHNpemVfdCBs
ZW5ndGggPSBkYXRhLT5nZXRTb21lRGF0YShzZWdtZW50LCBwb3NpdGlvbikpIHsKKyAgICAgICAg
YXBwZW5kKHNlZ21lbnQsIGxlbmd0aCk7CisgICAgICAgIHBvc2l0aW9uICs9IGxlbmd0aDsKKyAg
ICB9Cit9CisKIHZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoY29uc3QgY2hhciogZGF0YSwgdW5z
aWduZWQgbGVuZ3RoKQogewogICAgIEFTU0VSVCghbV9wdXJnZWFibGVCdWZmZXIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAppbmRleCA0ZjFkNjI5NmIyNDJmZTRkOTliMjIw
NjNiN2NiMTA4ZjFmNWFiY2ZlLi42OGQ5OTNhMzA3NTRhNzlmM2Q4YjU4NGFkMzg5NDhiYmRmMDM0
NDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaApAQCAtODQsNiArODQs
NyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgp
OyB9CiAKKyAgICB2b2lkIGFwcGVuZChTaGFyZWRCdWZmZXIqKTsKICAgICB2b2lkIGFwcGVuZChj
b25zdCBjaGFyKiwgdW5zaWduZWQpOwogICAgIHZvaWQgY2xlYXIoKTsKICAgICBjb25zdCBjaGFy
KiBwbGF0Zm9ybURhdGEoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYjJi
NzAzYTUzMzM4YWI3NTE1MTU3ZTAxODUyYzhjMTM2MzY4OTY3ZS4uZDBkNjZiMjA0NmRkN2Q1NGQz
OGMwOTIyMWM3ZTA0NzE5OTI4ZjRhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAxMS0wNS0yNyAgSmF5IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
aW5nIE1IVE1MIGdlbmVyYXRpb24gc3VwcG9ydCB0byBNSFRNTEFyY2hpdmUuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTY5CisKKyAgICAgICAgKiBw
dWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaDoKKyAgICAgICAgKiBzcmMvV2ViUGFnZVNlcmlhbGl6
ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplVG9N
SFRNTCk6CisKIDIwMTEtMDUtMjcgIEpvY2hlbiBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgKaW5kZXggYTEwOGE2MmMw
NmU0M2NhYzhhMTFmZDM1NGNjMjQ1YjY3ZGY1MDhjMy4uNjk3NGUzOTg5YThlODUwOTVmMjViYmU1
NmE1ODQzYTg0MzRlZmM2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViUGFnZVNlcmlhbGl6ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJQYWdlU2VyaWFsaXplci5oCkBAIC01OCw2ICs1OCwxMyBAQCBwdWJsaWM6CiAgICAgLy8g
Tm90ZSB0aGF0IHRoaXMgYWxzbyBzdHJpcHMtb3V0IGFueSBzY3JpcHQgdGFnIG9yIGxpbmsgdG8g
SmF2YVNjcmlwdC4KICAgICBXRUJLSVRfQVBJIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZShXZWJWaWV3
KiwgV2ViVmVjdG9yPFJlc291cmNlPiopOwogCisgICAgLy8gU2VyaWFsaXplcyB0aGUgV2ViVmll
dyBjb250ZW50cyB0byBNSFRNTC4gU2V0dGluZyB1c2VCaW5hcnkgdG8gdHJ1ZQorICAgIC8vIGNh
dXNlcyB0aGUgYmluYXJ5IGNvbnRlbnQgdG8gYmUgaW5jbHVkZWQgYXMgaXMgaW4gdGhlIGZpbGUg
KHdpdGggbm8KKyAgICAvLyBiYXNlNjQgZW5jb2RpbmcgYXMgd291bGQgbm9ybWFsbHkgYmUgdGhl
IGNhc2UpLiBUaGlzIGNyZWF0ZXMgc21hbGxlcgorICAgIC8vIGZpbGVzIHRoYXQgYXJlIGFsc28g
ZmFzdGVyIHRvIHJlYWQuIEhvd2V2ZXIgb3RoZXIgYnJvd3NlciB0eXBpY2FsbHkKKyAgICAvLyBk
b24ndCBzdXBwb3J0IHRoYXQgZm9ybWF0LgorICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYkNTdHJp
bmcgc2VyaWFsaXplVG9NSFRNTChXZWJWaWV3KiwgYm9vbCB1c2VCaW5hcnkpOworCiAgICAgLy8g
SU1QT1JUQU5UOgogICAgIC8vIFRoZSBBUEkgYmVsb3cgaXMgYW4gb2xkZXIgaW1wbGVtZW50YXRp
b24gb2YgYSBwYWdlc2VyaWFsaXphdGlvbiB0aGF0CiAgICAgLy8gd2lsbCBiZSByZW1vdmVkIHNv
b24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFs
aXplci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5j
cHAKaW5kZXggMjMyZTIxMTYwMTU5Yzg4NmQ4ZTRlZDE0MDA4NGM2YjVjZjczMWU1MS4uYTFlNjc4
YmZiNzY3ZjFiNjI3ZmIxMTA1MDAxMTVkMWVkOTUwOTI0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcApAQCAtMzksNiArMzksNyBAQAog
I2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNp
bmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTUhUTUxBcmNoaXZlLmgiCiAjaW5jbHVkZSAiUGFn
ZVNlcmlhbGl6ZXIuaCIKICNpbmNsdWRlICJWZWN0b3IuaCIKIApAQCAtMjAwLDYgKzIwMSwxNSBA
QCB2b2lkIFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUoV2ViVmlldyogdmlldywgV2ViVmVj
dG9yPFdlYlBhZ2VTZXJpYWxpemVyOjpSZQogICAgICpyZXNvdXJjZXNQYXJhbSA9IHJlc3VsdDsg
ICAgICAgICAKIH0KIAorV2ViQ1N0cmluZyBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplVG9N
SFRNTChXZWJWaWV3KiB2aWV3LCBib29sIHVzZUJpbmFyeUVuY29kaW5nKQoreworICAgIFdlYkZy
YW1lKiB3ZWJGcmFtZSA9IHN0YXRpY19jYXN0PFdlYlZpZXdJbXBsKj4odmlldyktPm1haW5GcmFt
ZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IHN0YXRpY19jYXN0PFdlYkZyYW1lSW1wbCo+KHdlYkZy
YW1lKS0+ZnJhbWUoKTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtaHRtbCA9IE1IVE1MQXJj
aGl2ZTo6Y3JlYXRlTUhUTUxEYXRhKCpmcmFtZSwgdXNlQmluYXJ5RW5jb2RpbmcpOworICAgIC8v
IEZJWE1FOiB3ZSBhcmUgY29weWluZyBhbGwgdGhlIGRhdGEgaGVyZS4gSWRlYWx5IHdlIHdvdWxk
IGhhdmUgYSBXZWJTaGFyZWREYXRhKCkuCisgICAgcmV0dXJuIFdlYkNTdHJpbmcobWh0bWwtPmRh
dGEoKSwgbWh0bWwtPnNpemUoKSk7Cit9CisKIGJvb2wgV2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlh
bGl6ZShXZWJGcmFtZSogZnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCByZWN1cnNpdmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViUGFn
ZVNlcmlhbGl6ZXJDbGllbnQqIGNsaWVudCwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95313</attachid>
            <date>2011-05-29 18:11:56 -0700</date>
            <delta_ts>2011-05-31 13:30:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-7169-20110529181155.patch</filename>
            <type>text/plain</type>
            <size>14633</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODc1OTgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjY2RkMDU3NmUyODRmMTk1
MThlMWQ0MjkwYzc2NmJmMDM2ZTcxNWNjLi45ZjRjMTE5OWMyZjc2NTlkMTZiNjRhNzIzYmRlYzVk
ODQ0YzJkMDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMDUtMjcgIEpheSBD
aXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBNSFRNTCBnZW5lcmF0aW9uIHN1cHBvcnQg
dG8gTUhUTUxBcmNoaXZlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzE2OQorCisgICAgICAgICogbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNo
aXZlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRlbnRFbmNvZGluZ0Zvck1JTUVUeXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlUmFuZG9tQm91bmRhcnkpOgorICAgICAgICAoV2Vi
Q29yZTo6bnVtYmVyVG9TaXplMlN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpjdXJyZW50RGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNSFRNTEFyY2hpdmU6OmNyZWF0ZU1IVE1MRGF0YSk6Cisg
ICAgICAgICogbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZlLmg6CisgICAgICAgICog
cGFnZS9QYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXpl
cjo6c2VyaWFsaXplRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnNl
cmlhbGl6ZUNTU1N0eWxlU2hlZXQpOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmFwcGVuZCk6CisgICAgICAgICog
cGxhdGZvcm0vU2hhcmVkQnVmZmVyLmg6CisKIDIwMTEtMDUtMjcgIFNpbW9uIEZyYXNlciAgPHNp
bW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVp
bi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1M
QXJjaGl2ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFy
Y2hpdmUuY3BwCmluZGV4IDBkMzMyMzdiNzBmODBlZWQ3MDA3OWM5ODZjZTA0YmJlMzU4OTIxZTAu
LjRkZjNkOTU4NGExZTFlNTQ1YTljODVkNjg2Y2ZiZWQ5YjM4M2I3YWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZlLmNwcApAQCAt
MzMsMTEgKzMzLDk1IEBACiAjaWYgRU5BQkxFKE1IVE1MKQogI2luY2x1ZGUgIk1IVE1MQXJjaGl2
ZS5oIgogCisjaW5jbHVkZSAiQmFzZTY0LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIk1ENS5oIgogI2luY2x1ZGUgIk1IVE1MUGFyc2VyLmgi
CiAjaW5jbHVkZSAiTUlNRUhlYWRlci5oIgorI2luY2x1ZGUgIlBhZ2VTZXJpYWxpemVyLmgiCisj
aW5jbHVkZSAiUXVvdGVkUHJpbnRhYmxlLmgiCisjaW5jbHVkZSAiUmFuZG9tTnVtYmVyLmgiCisj
aW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHF1b3RlZFBy
aW50YWJsZSA9ICJxdW90ZWQtcHJpbnRhYmxlIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBi
YXNlNjQgPSAiYmFzZTY0IjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRheXNPZldlZWtb
XSA9IHsgIlN1biIsICJNb24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNhdCIgfTsK
K3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBtb250aHNPZlllYXJbXSA9IHsgIkphbiIsICJGZWIi
LCAiTWFyIiwgIkFwciIsICJNYXkiLCAiSnVuIiwgIkp1bCIsICJBdWciLCAiU2VwIiwgIk9jdCIs
ICJOb3YiLCAiRGVjIiB9OworCitzdGF0aWMgU3RyaW5nIGdlbmVyYXRlUmFuZG9tQm91bmRhcnko
KQoreworICAgIC8vIFRyeWluZyB0byBnZW5lcmF0ZSByYW5kb20gYm91bmRhcmllcyBzaW1pbGFy
IHRvIElFL1VuTUhUIChleDogLS0tLT1fTmV4dFBhcnRfMDAwXzAwMUJfMDFDQzE1N0IuOTZGODA4
QTApLgorICAgIGNvbnN0IGRvdWJsZSBudW1iZXIgPSByYW5kb21OdW1iZXIoKTsKKyAgICBNRDUg
bWQ1OworICAgIG1kNS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigm
bnVtYmVyKSwgc2l6ZW9mKGRvdWJsZSkpOworICAgIFZlY3Rvcjx1aW50OF90LCAxNj4gbWQ1Qnl0
ZXM7CisgICAgbWQ1LmNoZWNrc3VtKG1kNUJ5dGVzKTsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmlu
Z0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIi0tLS09X05leHRQYXJ0XzAwMF8i
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwOyArK2kpIHsKKyAgICAgICAgaWYgKGkg
PT0gMikKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdfJyk7CisgICAgICAgIGVs
c2UgaWYgKGkgPT0gNikKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCcuJyk7Cisg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGxvd2VyTmliYmxlVG9BU0NJSUhleERpZ2l0KG1k
NUJ5dGVzW2ldKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHVwcGVyTmliYmxlVG9B
U0NJSUhleERpZ2l0KG1kNUJ5dGVzW2ldKSk7CisgICAgfQorICAgIHJldHVybiBzdHJpbmdCdWls
ZGVyLnRvU3RyaW5nKCk7Cit9CisKK3N0YXRpYyBTdHJpbmcgbnVtYmVyVG9TaXplMlN0cmluZyhp
bnQgbnVtYmVyKQoreworICAgIG51bWJlciA9IGFicyhudW1iZXIpOworICAgIGlmIChudW1iZXIg
PiA5KQorICAgICAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIobnVtYmVyKTsKKyAgICByZXR1cm4g
bWFrZVN0cmluZygiMCIsIFN0cmluZzo6bnVtYmVyKG51bWJlcikpOworfQorCitzdGF0aWMgU3Ry
aW5nIGN1cnJlbnREYXRlKCkKK3sKKyAgICBzdHJ1Y3QgdGltZXZhbCB0aW1lVmFsdWU7CisgICAg
c3RydWN0IHRpbWV6b25lIHRpbWVab25lOworICAgIGlmIChnZXR0aW1lb2ZkYXkoJnRpbWVWYWx1
ZSwgJnRpbWVab25lKSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSB0
aW1lIGFuZCB0aW1lIHpvbmUuIik7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9Cisg
ICAgc3RydWN0IHRtKiB0bSA9IGdtdGltZSgmKHRpbWVWYWx1ZS50dl9zZWMpKTsKKyAgICBpZiAo
IXRtKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIHRpbWUuIik7Cisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdC
dWlsZGVyOworCisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZGF5c09mV2Vla1t0bS0+dG1fd2Rh
eV0pOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIsICIpOworICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKFN0cmluZzo6bnVtYmVyKHRtLT50bV9tZGF5KSk7CisgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoIiAiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtb250aHNPZlllYXJbdG0tPnRt
X21vbl0pOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgIik7CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoU3RyaW5nOjpudW1iZXIoMTkwMCArIHRtLT50bV95ZWFyKSk7CisgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoIiAiKTsKKworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG51bWJlclRv
U2l6ZTJTdHJpbmcodG0tPnRtX2hvdXIpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnOicp
OworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG51bWJlclRvU2l6ZTJTdHJpbmcodG0tPnRtX21p
bikpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCc6Jyk7CisgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQobnVtYmVyVG9TaXplMlN0cmluZyh0bS0+dG1fc2VjKSk7CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoJyAnKTsKKworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRpbWVab25lLnR6X21p
bnV0ZXN3ZXN0ID4gMCA/ICItIiA6ICIrIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobnVt
YmVyVG9TaXplMlN0cmluZyh0aW1lWm9uZS50el9taW51dGVzd2VzdCAvIDYwKSk7CisgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQobnVtYmVyVG9TaXplMlN0cmluZyh0aW1lWm9uZS50el9taW51dGVz
d2VzdCAlIDYwKSk7CisKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQor
CiBNSFRNTEFyY2hpdmU6Ok1IVE1MQXJjaGl2ZSgpCiB7CiB9CkBAIC03MSw1ICsxNTUsODAgQEAg
UGFzc1JlZlB0cjxNSFRNTEFyY2hpdmU+IE1IVE1MQXJjaGl2ZTo6Y3JlYXRlKGNvbnN0IEtVUkwm
IHVybCwgU2hhcmVkQnVmZmVyKiBkYXQKICAgICByZXR1cm4gbWFpbkFyY2hpdmUucmVsZWFzZSgp
OwogfQogCitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gTUhUTUxBcmNoaXZlOjpnZW5lcmF0ZU1I
VE1MRGF0YShjb25zdCBGcmFtZSYgZnJhbWUpCit7CisgICAgVmVjdG9yPFBhZ2VTZXJpYWxpemVy
OjpSZXNvdXJjZT4gcmVzb3VyY2VzOworICAgIFBhZ2VTZXJpYWxpemVyIHBhZ2VTZXJpYWxpemVy
KCZyZXNvdXJjZXMpOworICAgIHBhZ2VTZXJpYWxpemVyLnNlcmlhbGl6ZShmcmFtZS5wYWdlKCkp
OworCisgICAgU3RyaW5nIGJvdW5kYXJ5ID0gZ2VuZXJhdGVSYW5kb21Cb3VuZGFyeSgpOworICAg
IFN0cmluZyBlbmRPZlJlc291cmNlQm91bmRhcnkgPSBtYWtlU3RyaW5nKCItLSIsIGJvdW5kYXJ5
LCAiXHJcbiIpOworCisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCJGcm9tOiA8U2F2ZWQgYnkgV2ViS2l0PlxyXG4iKTsKKyAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgiU3ViamVjdDogIik7CisgICAgQ1N0cmluZyBhc2NpaVRpdGxlID0g
ZnJhbWUuZG9jdW1lbnQoKS0+dGl0bGUoKS5hc2NpaSgpOworICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKGFzY2lpVGl0bGUuZGF0YSgpLCBhc2NpaVRpdGxlLmxlbmd0aCgpKTsKKyAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgiXHJcbkRhdGU6ICIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGN1
cnJlbnREYXRlKCkpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcclxuTUlNRS1WZXJzaW9u
OiAxLjBcclxuIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIkNvbnRlbnQtVHlwZTogbXVs
dGlwYXJ0L3JlbGF0ZWQ7XHJcbiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcdHR5cGU9
XCJ0ZXh0L2h0bWxcIjtcclxuIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlx0Ym91bmRh
cnk9XCIiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChib3VuZGFyeSk7CisgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoIlwiXHJcblxyXG4iKTsKKworICAgIC8vIFdlIHVzZSB1dGY4KCkgYmVs
b3cgaW5zdGVhZCBvZiBhc2NpaSgpIGFzIGFzY2lpKCkgcmVwbGFjZXMgQ1JMRnMgd2l0aCA/PyAo
d2Ugc3RpbGwgb25seSBoYXZlIHB1dCBBU0NJSSBjaGFyYWN0ZXJzIGluIGl0KS4KKyAgICBDU3Ry
aW5nIGFzY2lpU3RyaW5nID0gc3RyaW5nQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsKKyAgICBS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBtaHRtbERhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpOwor
ICAgIG1odG1sRGF0YS0+YXBwZW5kKGFzY2lpU3RyaW5nLmRhdGEoKSwgYXNjaWlTdHJpbmcubGVu
Z3RoKCkpOworCisgICAgZm9yIChWZWN0b3I8UGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlPjo6Y29u
c3RfaXRlcmF0b3IgaXRlcmF0b3IgPSByZXNvdXJjZXMuYmVnaW4oKTsgaXRlcmF0b3IgIT0gcmVz
b3VyY2VzLmVuZCgpOyArK2l0ZXJhdG9yKSB7CisgICAgICAgIGNvbnN0IFBhZ2VTZXJpYWxpemVy
OjpSZXNvdXJjZSYgcmVzb3VyY2UgPSAqaXRlcmF0b3I7CisKKyAgICAgICAgc3RyaW5nQnVpbGRl
ci5jbGVhcigpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChlbmRPZlJlc291cmNlQm91
bmRhcnkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiQ29udGVudC1UeXBlOiAiKTsK
KyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocmVzb3VyY2UubWltZVR5cGUpOworCisgICAg
ICAgIGNvbnN0IGNoYXIqIGNvbnRlbnRFbmNvZGluZyA9IHJlc291cmNlLm1pbWVUeXBlLnN0YXJ0
c1dpdGgoInRleHQvIikgPyBxdW90ZWRQcmludGFibGUgOiBiYXNlNjQ7CisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCJcclxuQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogIik7CisgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGNvbnRlbnRFbmNvZGluZyk7CisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCJcclxuQ29udGVudC1Mb2NhdGlvbjogIik7CisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHJlc291cmNlLnVybCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCJcclxuXHJcbiIpOworCisgICAgICAgIGFzY2lpU3RyaW5nID0gc3RyaW5nQnVpbGRlci50
b1N0cmluZygpLnV0ZjgoKTsKKyAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoYXNjaWlTdHJpbmcu
ZGF0YSgpLCBhc2NpaVN0cmluZy5sZW5ndGgoKSk7CisKKyAgICAgICAgLy8gRklYTUU6IGlkZWFs
bHkgd2Ugd291bGQgZW5jb2RlIHRoZSBjb250ZW50IGFzIGEgc3RyZWFtIHdpdGhvdXQgaGF2aW5n
IHRvIGZldGNoIGl0IGFsbC4KKyAgICAgICAgY29uc3QgY2hhciogZGF0YSA9IHJlc291cmNlLmRh
dGEtPmRhdGEoKTsKKyAgICAgICAgc2l6ZV90IGRhdGFMZW5ndGggPSByZXNvdXJjZS5kYXRhLT5z
aXplKCk7CisgICAgICAgIFZlY3RvcjxjaGFyPiBlbmNvZGVkRGF0YTsKKyAgICAgICAgaWYgKGNv
bnRlbnRFbmNvZGluZyA9PSBxdW90ZWRQcmludGFibGUpIHsKKyAgICAgICAgICAgIHF1b3RlZFBy
aW50YWJsZUVuY29kZShkYXRhLCBkYXRhTGVuZ3RoLCBlbmNvZGVkRGF0YSk7CisgICAgICAgICAg
ICBtaHRtbERhdGEtPmFwcGVuZChlbmNvZGVkRGF0YS5kYXRhKCksIGVuY29kZWREYXRhLnNpemUo
KSk7CisgICAgICAgICAgICBtaHRtbERhdGEtPmFwcGVuZCgiXHJcbiIsIDIpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRlbnRFbmNvZGluZyA9PSBiYXNlNjQpOwor
ICAgICAgICAgICAgLy8gV2UgYXJlIG5vdCBzcGVjaWZ5aW5nIGluc2VydExGcyA9IHRydWUgYmVs
b3cgYXMgaXQgd291bGQgY3V0IHRoZSBsaW5lcyB3aXRoIExGcyBhbmQgTUhUTUwgcmVxdWlyZXMg
Q1JMRnMuCisgICAgICAgICAgICBiYXNlNjRFbmNvZGUoZGF0YSwgZGF0YUxlbmd0aCwgZW5jb2Rl
ZERhdGEpOworICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKKyAgICAgICAgICAgIHNpemVf
dCBlbmNvZGVkRGF0YUxlbmd0aCA9IGVuY29kZWREYXRhLnNpemUoKTsKKyAgICAgICAgICAgIGRv
IHsKKyAgICAgICAgICAgICAgICBzaXplX3QgbGluZUxlbmd0aCA9IHN0ZDo6bWluKGVuY29kZWRE
YXRhTGVuZ3RoIC0gaW5kZXgsIHN0YXRpY19jYXN0PHNpemVfdD4oNzYpKTsKKyAgICAgICAgICAg
ICAgICBtaHRtbERhdGEtPmFwcGVuZChlbmNvZGVkRGF0YS5kYXRhKCkgKyBpbmRleCwgbGluZUxl
bmd0aCk7CisgICAgICAgICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoIlxyXG4iLCAyKTsKKyAg
ICAgICAgICAgICAgICBpbmRleCArPSA3NjsKKyAgICAgICAgICAgIH0gd2hpbGUgKGluZGV4IDwg
ZW5jb2RlZERhdGFMZW5ndGgpOworICAgICAgICB9CisgICAgfQorCisgICAgYXNjaWlTdHJpbmcg
PSBtYWtlU3RyaW5nKCItLSIsIGJvdW5kYXJ5LCAiLS1cclxuIikudXRmOCgpOworICAgIG1odG1s
RGF0YS0+YXBwZW5kKGFzY2lpU3RyaW5nLmRhdGEoKSwgYXNjaWlTdHJpbmcubGVuZ3RoKCkpOwor
CisgICAgcmV0dXJuIG1odG1sRGF0YS5yZWxlYXNlKCk7Cit9CisKIH0KICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuaAppbmRl
eCAxYjMxZGMzMTViYWI4YjEzZmUyMzgxMjBhNDNiM2IwMmQ5ODRhNzc5Li44MmI2YzcxOTA1NzUx
M2Q0ZWMxY2JjMGJkMzFhMGViNzJiYTkzNTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuaApAQCAtMzcsNyArMzcsOSBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZyYW1lOwogY2xhc3MgTUhUTUxQYXJzZXI7Citj
bGFzcyBTaGFyZWRCdWZmZXI7CiAKIGNsYXNzIE1IVE1MQXJjaGl2ZSA6IHB1YmxpYyBBcmNoaXZl
IHsKIHB1YmxpYzoKQEAgLTQ2LDYgKzQ4LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPE1IVE1MQXJjaGl2ZT4gY3JlYXRlKCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TUhUTUxB
cmNoaXZlPiBjcmVhdGUoY29uc3QgS1VSTCYsIFNoYXJlZEJ1ZmZlciopOwogCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBnZW5lcmF0ZU1IVE1MRGF0YShjb25zdCBGcmFtZSYp
OworCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNSFRNTFBhcnNlcjsKICAgICBNSFRNTEFy
Y2hpdmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKaW5kZXggZDU2OTI2
ZmExNWFjMjQ5OWJmMTY5NjBkZmQ3MTIxYmYxZDU2NDEwYy4uMmYyYWUxMmQxNzQ1NGRmYzIxNTFl
YzBmOTcxNzQ5NWQ5OGJmNTYxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
U2VyaWFsaXplci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5j
cHAKQEAgLTIwNiw4ICsyMDYsMTIgQEAgdm9pZCBQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplRnJh
bWUoRnJhbWUqIGZyYW1lKQogCiAgICAgVmVjdG9yPE5vZGUqPiBub2RlczsKICAgICBTZXJpYWxp
emVyTWFya3VwQWNjdW11bGF0b3IgYWNjdW11bGF0b3IodGhpcywgZG9jdW1lbnQsICZub2Rlcyk7
Ci0gICAgVGV4dEVuY29kaW5nIHRleHRFbmNvZGluZyhUZXh0RW5jb2RpbmcoZG9jdW1lbnQtPmNo
YXJzZXQoKSkpOwotICAgIEFTU0VSVCh0ZXh0RW5jb2RpbmcuaXNWYWxpZCgpKTsKKyAgICBUZXh0
RW5jb2RpbmcgdGV4dEVuY29kaW5nKGRvY3VtZW50LT5jaGFyc2V0KCkpOworICAgIENTdHJpbmcg
ZGF0YTsKKyAgICBpZiAoIXRleHRFbmNvZGluZy5pc1ZhbGlkKCkpIHsKKyAgICAgICAgLy8gRklY
TUU6IGl0IHNlZW1zIGlmcmFtZSB1c2VkIGFzIGltYWdlIHRyaWdnZXIgdGhpcy4gV2Ugc2hvdWxk
IGRlYWwgd2l0aCB0aGVtIGNvcnJlY3RseS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBT
dHJpbmcgdGV4dCA9IGFjY3VtdWxhdG9yLnNlcmlhbGl6ZU5vZGVzKGRvY3VtZW50LT5kb2N1bWVu
dEVsZW1lbnQoKSwgMCwgSW5jbHVkZU5vZGUpOwogICAgIENTdHJpbmcgZnJhbWVIVE1MID0gdGV4
dEVuY29kaW5nLmVuY29kZSh0ZXh0LmNoYXJhY3RlcnMoKSwgdGV4dC5sZW5ndGgoKSwgRW50aXRp
ZXNGb3JVbmVuY29kYWJsZXMpOwogICAgIG1fcmVzb3VyY2VzLT5hcHBlbmQoUmVzb3VyY2UodXJs
LCBkb2N1bWVudC0+c3VnZ2VzdGVkTUlNRVR5cGUoKSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUoZnJh
bWVIVE1MLmRhdGEoKSwgZnJhbWVIVE1MLmxlbmd0aCgpKSkpOwpAQCAtMjc0LDcgKzI3OCw3IEBA
IHZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoQ1NTU3R5bGVTaGVl
dCogc3R5bGVTaGVldCwgY29uc3QgS1VSCiAKICAgICBpZiAodXJsLmlzVmFsaWQoKSAmJiAhbV9y
ZXNvdXJjZVVSTHMuY29udGFpbnModXJsKSkgewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGNoZWNrIHdoZXRoZXIgYSBjaGFyc2V0IGhhcyBiZWVuIHNwZWNpZmllZCBhbmQgaWYgbm9uZSB3
YXMgZm91bmQgYWRkIG9uZS4KLSAgICAgICAgVGV4dEVuY29kaW5nIHRleHRFbmNvZGluZyA9IFRl
eHRFbmNvZGluZyhzdHlsZVNoZWV0LT5jaGFyc2V0KCkpOworICAgICAgICBUZXh0RW5jb2Rpbmcg
dGV4dEVuY29kaW5nKHN0eWxlU2hlZXQtPmNoYXJzZXQoKSk7CiAgICAgICAgIEFTU0VSVCh0ZXh0
RW5jb2RpbmcuaXNWYWxpZCgpKTsKICAgICAgICAgU3RyaW5nIHRleHRTdHJpbmcgPSBjc3NUZXh0
LnRvU3RyaW5nKCk7CiAgICAgICAgIENTdHJpbmcgdGV4dCA9IHRleHRFbmNvZGluZy5lbmNvZGUo
dGV4dFN0cmluZy5jaGFyYWN0ZXJzKCksIHRleHRTdHJpbmcubGVuZ3RoKCksIEVudGl0aWVzRm9y
VW5lbmNvZGFibGVzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJl
ZEJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCmlu
ZGV4IDA5MDBhZTQyMWUzNzY0ZmQyZGE5YWIzZjQ3Mzg4YWQzNmIzYzg4Y2EuLmFkODYxOGViNGM5
M2NhODk4YWQxMTJjY2U0MzIyMDY4MjAzNzRlYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2hhcmVkQnVmZmVyLmNwcApAQCAtMTE3LDYgKzExNywxNiBAQCBjb25zdCBjaGFyKiBTaGFyZWRC
dWZmZXI6OmRhdGEoKSBjb25zdAogICAgIHJldHVybiBidWZmZXIoKS5kYXRhKCk7CiB9CiAKK3Zv
aWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoU2hhcmVkQnVmZmVyKiBkYXRhKQoreworICAgIGNvbnN0
IGNoYXIqIHNlZ21lbnQ7CisgICAgc2l6ZV90IHBvc2l0aW9uID0gMDsKKyAgICB3aGlsZSAoc2l6
ZV90IGxlbmd0aCA9IGRhdGEtPmdldFNvbWVEYXRhKHNlZ21lbnQsIHBvc2l0aW9uKSkgeworICAg
ICAgICBhcHBlbmQoc2VnbWVudCwgbGVuZ3RoKTsKKyAgICAgICAgcG9zaXRpb24gKz0gbGVuZ3Ro
OworICAgIH0KK30KKwogdm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25zdCBjaGFyKiBkYXRh
LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgQVNTRVJUKCFtX3B1cmdlYWJsZUJ1ZmZlcik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCmluZGV4IDRmMWQ2Mjk2YjI0MmZlNGQ5
OWIyMjA2M2I3Y2IxMDhmMWY1YWJjZmUuLjY4ZDk5M2EzMDc1NGE3OWYzZDhiNTg0YWQzODk0OGJi
ZGYwMzQ0MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCkBAIC04NCw2
ICs4NCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFz
aXplKCk7IH0KIAorICAgIHZvaWQgYXBwZW5kKFNoYXJlZEJ1ZmZlciopOwogICAgIHZvaWQgYXBw
ZW5kKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CiAgICAgdm9pZCBjbGVhcigpOwogICAgIGNvbnN0
IGNoYXIqIHBsYXRmb3JtRGF0YSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRl
eCA4YzBmMjAwY2ZlMjc3N2YzNWM1MzA1MTVlZjlkZWQwYzEzMGNjYTdkLi4yZTc2ZGViODg3Y2Ri
ZDgzODZjYjg2M2JmMzg3ZGY3ZjQ4ZTVmOTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE0IEBACisyMDExLTA1LTI3ICBKYXkgQ2l2ZWxsaSAgPGpjaXZlbGxpQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRpbmcgTUhUTUwgZ2VuZXJhdGlvbiBzdXBwb3J0IHRvIE1IVE1MQXJjaGl2ZS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNjkKKworICAgICAg
ICAqIHB1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oOgorICAgICAgICAqIHNyYy9XZWJQYWdlU2Vy
aWFsaXplci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxp
emVUb01IVE1MKToKKwogMjAxMS0wNS0yNyAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgKaW5kZXggYTEwOGE2
MmMwNmU0M2NhYzhhMTFmZDM1NGNjMjQ1YjY3ZGY1MDhjMy4uZTJkYjA3YmU0MTgwNTdiMGU4NmQy
YTVjODA2ODc4N2RkMGJjZmU3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oCkBAIC01OCw2ICs1OCw5IEBAIHB1YmxpYzoKICAgICAv
LyBOb3RlIHRoYXQgdGhpcyBhbHNvIHN0cmlwcy1vdXQgYW55IHNjcmlwdCB0YWcgb3IgbGluayB0
byBKYXZhU2NyaXB0LgogICAgIFdFQktJVF9BUEkgc3RhdGljIHZvaWQgc2VyaWFsaXplKFdlYlZp
ZXcqLCBXZWJWZWN0b3I8UmVzb3VyY2U+Kik7CiAKKyAgICAvLyBTZXJpYWxpemVzIHRoZSBXZWJW
aWV3IGNvbnRlbnRzIHRvIGEgTUhUTUwgcmVwcmVzZW50YXRpb24uCisgICAgV0VCS0lUX0FQSSBz
dGF0aWMgV2ViQ1N0cmluZyBzZXJpYWxpemVUb01IVE1MKFdlYlZpZXcqKTsKKwogICAgIC8vIElN
UE9SVEFOVDoKICAgICAvLyBUaGUgQVBJIGJlbG93IGlzIGFuIG9sZGVyIGltcGxlbWVudGF0aW9u
IG9mIGEgcGFnZXNlcmlhbGl6YXRpb24gdGhhdAogICAgIC8vIHdpbGwgYmUgcmVtb3ZlZCBzb29u
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6
ZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3Bw
CmluZGV4IDIzMmUyMTE2MDE1OWM4ODZkOGU0ZWQxNDAwODRjNmI1Y2Y3MzFlNTEuLjFjMDUxNDg5
MzMzMzdhZWYyOGYwOGMzNDUyMTQ3MGY5ODJiNzM4ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNp
bmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk1IVE1MQXJjaGl2ZS5oIgogI2luY2x1ZGUgIlBhZ2VT
ZXJpYWxpemVyLmgiCiAjaW5jbHVkZSAiVmVjdG9yLmgiCiAKQEAgLTIwMCw2ICsyMDEsMTUgQEAg
dm9pZCBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKFdlYlZpZXcqIHZpZXcsIFdlYlZlY3Rv
cjxXZWJQYWdlU2VyaWFsaXplcjo6UmUKICAgICAqcmVzb3VyY2VzUGFyYW0gPSByZXN1bHQ7ICAg
ICAgICAgCiB9CiAKK1dlYkNTdHJpbmcgV2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZVRvTUhU
TUwoV2ViVmlldyogdmlldykKK3sKKyAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSBzdGF0aWNfY2Fz
dDxXZWJWaWV3SW1wbCo+KHZpZXcpLT5tYWluRnJhbWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBz
dGF0aWNfY2FzdDxXZWJGcmFtZUltcGwqPih3ZWJGcmFtZSktPmZyYW1lKCk7CisgICAgUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gbWh0bWwgPSBNSFRNTEFyY2hpdmU6OmdlbmVyYXRlTUhUTUxEYXRhKCpm
cmFtZSk7CisgICAgLy8gRklYTUU6IHdlIGFyZSBjb3B5aW5nIGFsbCB0aGUgZGF0YSBoZXJlLiBJ
ZGVhbHkgd2Ugd291bGQgaGF2ZSBhIFdlYlNoYXJlZERhdGEoKS4KKyAgICByZXR1cm4gV2ViQ1N0
cmluZyhtaHRtbC0+ZGF0YSgpLCBtaHRtbC0+c2l6ZSgpKTsKK30KKwogYm9vbCBXZWJQYWdlU2Vy
aWFsaXplcjo6c2VyaWFsaXplKFdlYkZyYW1lKiBmcmFtZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIHJlY3Vyc2l2ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJQYWdlU2VyaWFsaXplckNsaWVudCogY2xpZW50LAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95469</attachid>
            <date>2011-05-31 13:22:48 -0700</date>
            <delta_ts>2011-05-31 17:00:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-7169-20110531132247.patch</filename>
            <type>text/plain</type>
            <size>17594</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODc3NDcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDlh
NjA2MjY2NDQ1Y2VmMmZiNWI4Yzg2ZThiNTQ4NTgyNTJkMmZjMzYuLjk5NmRjYmEzNGRhYTlkZmEy
YWJkNDAyYzBhZjk5YWE1ZWY3N2FmYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDExLTA1LTMxICBKYXkgQ2l2ZWxsaSAgPGpjaXZlbGxpQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRl
ZCBhIG1ldGhvZCB0byBnZW5lcmF0ZSBSRkMgMjgyMiBjb21wbGlhbnQgZGF0ZSBzdHJpbmdzLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE2OQorCisg
ICAgICAgICogd3RmL0RhdGVNYXRoLmNwcDoKKyAgICAgICAgKFdURjo6bnVtYmVyVG8yQ2hhcmFj
dGVyTG9uZ1N0cmluZyk6CisgICAgICAgIChXVEY6OnRvUkZDMjgyMkRhdGVTdHJpbmcpOgorICAg
ICAgICAqIHd0Zi9EYXRlTWF0aC5oOgorCiAyMDExLTA1LTMwICBIb2pvbmcgSGFuICA8aG9qb25n
LmhhbkBzYW1zdW5nLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EYXRlTWF0aC5jcHAKaW5kZXggNzBjMGNmNDdmNWY3OWNi
ZmMzMzFmN2ExN2ZhOTdlOWE3Y2JjNjdkYy4uYzcyNzVlMGVlNWVmOGRlNzM3Mzg1OTdhYWQzNWE0
MGRmYTM1ODdkOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EYXRlTWF0
aC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EYXRlTWF0aC5jcHAKQEAgLTkw
LDcgKzkwLDcgQEAKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5j
bHVkZSA8dGltZS5oPgotCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAj
aWYgSEFWRShFUlJOT19IKQogI2luY2x1ZGUgPGVycm5vLmg+CkBAIC0xODAsNiArMTgwLDE0IEBA
IHN0YXRpYyBpbmxpbmUgZG91YmxlIG1zVG9EYXlzKGRvdWJsZSBtcykKICAgICByZXR1cm4gZmxv
b3IobXMgLyBtc1BlckRheSk7CiB9CiAKK3N0YXRpYyBTdHJpbmcgbnVtYmVyVG8yQ2hhcmFjdGVy
TG9uZ1N0cmluZyhpbnQgbnVtYmVyKQoreworICAgIEFTU0VSVChudW1iZXIgPj0gMCAmJiBudW1i
ZXIgPCAxMDApOworICAgIGlmIChudW1iZXIgPiA5KQorICAgICAgICByZXR1cm4gU3RyaW5nOjpu
dW1iZXIobnVtYmVyKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygiMCIsIFN0cmluZzo6bnVtYmVy
KG51bWJlcikpOworfQorCiBpbnQgbXNUb1llYXIoZG91YmxlIG1zKQogewogICAgIGludCBhcHBy
b3hZZWFyID0gc3RhdGljX2Nhc3Q8aW50PihmbG9vcihtcyAvIChtc1BlckRheSAqIDM2NS4yNDI1
KSkgKyAxOTcwKTsKQEAgLTEwMjgsNiArMTAzNiwzNCBAQCBkb3VibGUgdGltZUNsaXAoZG91Ymxl
IHQpCiAgICAgICAgIHJldHVybiBOYU47CiAgICAgcmV0dXJuIHRydW5jKHQpOwogfQorCisvLyBT
ZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNzZWN0aW9uLTMuMyBmb3IgbW9y
ZSBpbmZvcm1hdGlvbi4KK1N0cmluZyB0b1JGQzI4MjJEYXRlU3RyaW5nKGludCBkYXlPZldlZWss
IGludCBkYXksIGludCBtb250aCwgaW50IHllYXIsIGludCBob3VycywgaW50IG1pbnV0ZXMsIGlu
dCBzZWNvbmRzLCBpbnQgdXRjT2Zmc2V0KQoreworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVp
bGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh3ZWVrZGF5TmFtZVtkYXlPZldlZWtdKTsK
KyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCAiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChTdHJpbmc6Om51bWJlcihkYXkpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICIpOwor
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1vbnRoTmFtZVttb250aF0pOworICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCIgIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpudW1i
ZXIoeWVhcikpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgIik7CisKKyAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChudW1iZXJUbzJDaGFyYWN0ZXJMb25nU3RyaW5nKGhvdXJzKSk7CisgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoJzonKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChudW1i
ZXJUbzJDaGFyYWN0ZXJMb25nU3RyaW5nKG1pbnV0ZXMpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgnOicpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG51bWJlclRvMkNoYXJhY3Rlckxv
bmdTdHJpbmcoc2Vjb25kcykpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCcgJyk7CisKKyAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh1dGNPZmZzZXQgPiAwID8gIi0iIDogIisiKTsKKyAgICBp
bnQgYWJzb2x1dGVVVENPZmZzZXQgPSBhYnModXRjT2Zmc2V0KTsKKyAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChudW1iZXJUbzJDaGFyYWN0ZXJMb25nU3RyaW5nKGFic29sdXRlVVRDT2Zmc2V0IC8g
NjApKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChudW1iZXJUbzJDaGFyYWN0ZXJMb25nU3Ry
aW5nKGFic29sdXRlVVRDT2Zmc2V0ICUgNjApKTsKKworICAgIHJldHVybiBzdHJpbmdCdWlsZGVy
LnRvU3RyaW5nKCk7Cit9CiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2lmIFVTRShKU0MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmgKaW5kZXggMmFjMjg0ZTdkOGUxNTk4NWQ2MmUzMzQy
YTk1Zjg3Y2RmYWU1NzM3Ni4uMTllNmZkZGY0ZGQwNzA3YjZhNTFmZDM0YzYzYjA1YzQ4N2E0OGJh
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EYXRlTWF0aC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguaApAQCAtNTEsNiArNTEsNyBAQAog
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duQXJyYXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAogbmFtZXNwYWNlIFdU
RiB7CkBAIC02MSw2ICs2Miw3IEBAIGludCBlcXVpdmFsZW50WWVhckZvckRTVChpbnQgeWVhcik7
CiBkb3VibGUgcGFyc2VFUzVEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVycyhjb25zdCBj
aGFyKiBkYXRlU3RyaW5nKTsKIGRvdWJsZSBwYXJzZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFy
YWN0ZXJzKGNvbnN0IGNoYXIqIGRhdGVTdHJpbmcpOwogZG91YmxlIHRpbWVDbGlwKGRvdWJsZSk7
CitTdHJpbmcgdG9SRkMyODIyRGF0ZVN0cmluZyhpbnQgZGF5T2ZXZWVrLCBpbnQgZGF5LCBpbnQg
bW9udGgsIGludCB5ZWFyLCBpbnQgaG91cnMsIGludCBtaW51dGVzLCBpbnQgc2Vjb25kcywgaW50
IHV0Y09mZnNldCk7CiAKIGlubGluZSBkb3VibGUganNDdXJyZW50VGltZSgpCiB7CkBAIC0xMDYs
NiArMTA4LDcgQEAgdXNpbmcgV1RGOjptc1BlclNlY29uZDsKIHVzaW5nIFdURjo6bXNUb1llYXI7
CiB1c2luZyBXVEY6OnNlY29uZHNQZXJNaW51dGU7CiB1c2luZyBXVEY6OnBhcnNlRGF0ZUZyb21O
dWxsVGVybWluYXRlZENoYXJhY3RlcnM7Cit1c2luZyBXVEY6OnRvUkZDMjgyMkRhdGVTdHJpbmc7
CiB1c2luZyBXVEY6OmNhbGN1bGF0ZVVUQ09mZnNldDsKIHVzaW5nIFdURjo6Y2FsY3VsYXRlRFNU
T2Zmc2V0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWFmNWFmYTFkMzJkNWE2ZTFiYWRjZmEyZmJlNGVlMDY4
M2RjMmNkZi4uZWMxNmI0NTViNTU2NDRmYjFmMjAxNGY0N2QxMGZhN2U1NjkxMGMyYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDExLTA1LTMxICBKYXkgQ2l2ZWxsaSAgPGpjaXZlbGxp
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGRpbmcgTUhUTUwgZ2VuZXJhdGlvbiBzdXBwb3J0IHRvIE1IVE1MQXJjaGl2ZS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNjkKKwor
ICAgICAgICAqIGxvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpnZW5lcmF0ZVJhbmRvbUJvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OnJl
cGxhY2VOb25QcmludGFibGVDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1IVE1MQXJj
aGl2ZTo6Z2VuZXJhdGVNSFRNTERhdGEpOgorICAgICAgICAqIGxvYWRlci9hcmNoaXZlL21odG1s
L01IVE1MQXJjaGl2ZS5oOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVDU1NTdHlsZVNoZWV0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVk
QnVmZmVyOjphcHBlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oOgorCiAy
MDExLTA1LTMxICBSb2IgQnVpcyAgPHJidWlzQHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGlyayBTY2h1bHplLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hp
dmUvbWh0bWwvTUhUTUxBcmNoaXZlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZl
L21odG1sL01IVE1MQXJjaGl2ZS5jcHAKaW5kZXggMGQzMzIzN2I3MGY4MGVlZDcwMDc5Yzk4NmNl
MDRiYmUzNTg5MjFlMC4uYTE0NTUzYjhhZjU2ZWJlM2I0NzZlYjJkYzMxMDk5NzI1ODJiOTk1YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNo
aXZlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFy
Y2hpdmUuY3BwCkBAIC0zMywxMSArMzMsNTUgQEAKICNpZiBFTkFCTEUoTUhUTUwpCiAjaW5jbHVk
ZSAiTUhUTUxBcmNoaXZlLmgiCiAKKyNpbmNsdWRlICJCYXNlNjQuaCIKKyNpbmNsdWRlICJDcnlw
dG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oIgorI2luY2x1ZGUgIkRhdGVNYXRoLmgiCisjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIk1IVE1MUGFy
c2VyLmgiCiAjaW5jbHVkZSAiTUlNRUhlYWRlci5oIgorI2luY2x1ZGUgIlBhZ2VTZXJpYWxpemVy
LmgiCisjaW5jbHVkZSAiUXVvdGVkUHJpbnRhYmxlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorY29uc3QgY2hhciogY29uc3QgcXVvdGVkUHJpbnRhYmxlID0gInF1b3RlZC1wcmludGFibGUi
OworY29uc3QgY2hhciogY29uc3QgYmFzZTY0ID0gImJhc2U2NCI7CisKK3N0YXRpYyBTdHJpbmcg
Z2VuZXJhdGVSYW5kb21Cb3VuZGFyeSgpCit7CisgICAgLy8gVHJ5aW5nIHRvIGdlbmVyYXRlIHJh
bmRvbSBib3VuZGFyaWVzIHNpbWlsYXIgdG8gSUUvVW5NSFQgKGV4OiAtLS0tPV9OZXh0UGFydF8w
MDBfMDAxQl8wMUNDMTU3Qi45NkY4MDhBMCkuCisgICAgY2hhciByYW5kb21WYWx1ZXNbMTBdOwor
ICAgIGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzKCZyYW5kb21WYWx1ZXMsIDEwKTsKKyAg
ICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
Ii0tLS09X05leHRQYXJ0XzAwMF8iKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwOyAr
K2kpIHsKKyAgICAgICAgaWYgKGkgPT0gMikKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCdfJyk7CisgICAgICAgIGVsc2UgaWYgKGkgPT0gNikKKyAgICAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCcuJyk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGxvd2VyTmli
YmxlVG9BU0NJSUhleERpZ2l0KHJhbmRvbVZhbHVlc1tpXSkpOworICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCh1cHBlck5pYmJsZVRvQVNDSUlIZXhEaWdpdChyYW5kb21WYWx1ZXNbaV0pKTsK
KyAgICB9CisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKworc3RhdGlj
IFN0cmluZyByZXBsYWNlTm9uUHJpbnRhYmxlQ2hhcmFjdGVycyhjb25zdCBTdHJpbmcmIHRleHQp
Cit7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdGV4dC5sZW5ndGgoKTsgKytpKSB7CisgICAgICBpZiAoaXNBU0NJSVByaW50YWJs
ZSh0ZXh0W2ldKSkKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodGV4dFtpXSk7CisgICAg
ICBlbHNlCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCc/Jyk7CisgICAgfQorICAgIHJl
dHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKIE1IVE1MQXJjaGl2ZTo6TUhUTUxB
cmNoaXZlKCkKIHsKIH0KQEAgLTcxLDUgKzExNSw5NSBAQCBQYXNzUmVmUHRyPE1IVE1MQXJjaGl2
ZT4gTUhUTUxBcmNoaXZlOjpjcmVhdGUoY29uc3QgS1VSTCYgdXJsLCBTaGFyZWRCdWZmZXIqIGRh
dAogICAgIHJldHVybiBtYWluQXJjaGl2ZS5yZWxlYXNlKCk7CiB9CiAKK1Bhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPiBNSFRNTEFyY2hpdmU6OmdlbmVyYXRlTUhUTUxEYXRhKEZyYW1lKiBmcmFtZSkK
K3sKKyAgICBWZWN0b3I8UGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlPiByZXNvdXJjZXM7CisgICAg
UGFnZVNlcmlhbGl6ZXIgcGFnZVNlcmlhbGl6ZXIoJnJlc291cmNlcyk7CisgICAgcGFnZVNlcmlh
bGl6ZXIuc2VyaWFsaXplKGZyYW1lLT5wYWdlKCkpOworCisgICAgU3RyaW5nIGJvdW5kYXJ5ID0g
Z2VuZXJhdGVSYW5kb21Cb3VuZGFyeSgpOworICAgIFN0cmluZyBlbmRPZlJlc291cmNlQm91bmRh
cnkgPSBtYWtlU3RyaW5nKCItLSIsIGJvdW5kYXJ5LCAiXHJcbiIpOworCisgICAgU3RyaW5nIGRh
dGVTdHJpbmc7CisgICAgc3RydWN0IHRpbWV2YWwgdGltZVZhbHVlOworICAgIHN0cnVjdCB0aW1l
em9uZSB0aW1lWm9uZTsKKyAgICBpZiAoIWdldHRpbWVvZmRheSgmdGltZVZhbHVlLCAmdGltZVpv
bmUpKSB7CisgICAgICAgIHN0cnVjdCB0bSogdG0gPSBnbXRpbWUoJih0aW1lVmFsdWUudHZfc2Vj
KSk7CisgICAgICAgIGlmICh0bSkKKyAgICAgICAgICBkYXRlU3RyaW5nID0gdG9SRkMyODIyRGF0
ZVN0cmluZyh0bS0+dG1fd2RheSwgdG0tPnRtX21kYXksIHRtLT50bV9tb24sIDE5MDAgKyB0bS0+
dG1feWVhciwgdG0tPnRtX2hvdXIsIHRtLT50bV9taW4sIHRtLT50bV9zZWMsIHRpbWVab25lLnR6
X21pbnV0ZXN3ZXN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIHJldHJpZXZlIHRpbWUuIik7CisgICAgfSBlbHNlCisgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIHJldHJpZXZlIHRpbWUgYW5kIHRpbWUgem9uZS4iKTsKKworICAgIFN0cmluZ0J1aWxk
ZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiRnJvbTogPFNhdmVk
IGJ5IFdlYktpdD5cclxuIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlN1YmplY3Q6ICIp
OworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJlcGxhY2VOb25QcmludGFibGVDaGFyYWN0ZXJz
KGZyYW1lLT5kb2N1bWVudCgpLT50aXRsZSgpKSk7CisgICAgaWYgKCFkYXRlU3RyaW5nLmlzRW1w
dHkoKSkgeworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcbkRhdGU6ICIpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChkYXRlU3RyaW5nKTsKKyAgICB9CisgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoIlxyXG5NSU1FLVZlcnNpb246IDEuMFxyXG4iKTsKKyAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgiQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvcmVsYXRlZDtcclxuIik7Cisg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlx0dHlwZT1cIiIpOworICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKGZyYW1lLT5kb2N1bWVudCgpLT5zdWdnZXN0ZWRNSU1FVHlwZSgpKTsKKyAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgiXCI7XHJcbiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJc
dGJvdW5kYXJ5PVwiIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoYm91bmRhcnkpOworICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcIlxyXG5cclxuIik7CisKKyAgICAvLyBXZSB1c2UgdXRm
OCgpIGJlbG93IGluc3RlYWQgb2YgYXNjaWkoKSBhcyBhc2NpaSgpIHJlcGxhY2VzIENSTEZzIHdp
dGggPz8gKHdlIHN0aWxsIG9ubHkgaGF2ZSBwdXQgQVNDSUkgY2hhcmFjdGVycyBpbiBpdCkuCisg
ICAgQ1N0cmluZyBhc2NpaVN0cmluZyA9IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKS51dGY4KCk7
CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbWh0bWxEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVh
dGUoKTsKKyAgICBtaHRtbERhdGEtPmFwcGVuZChhc2NpaVN0cmluZy5kYXRhKCksIGFzY2lpU3Ry
aW5nLmxlbmd0aCgpKTsKKworICAgIGZvciAoVmVjdG9yPFBhZ2VTZXJpYWxpemVyOjpSZXNvdXJj
ZT46OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yID0gcmVzb3VyY2VzLmJlZ2luKCk7IGl0ZXJhdG9y
ICE9IHJlc291cmNlcy5lbmQoKTsgKytpdGVyYXRvcikgeworICAgICAgICBjb25zdCBQYWdlU2Vy
aWFsaXplcjo6UmVzb3VyY2UmIHJlc291cmNlID0gKml0ZXJhdG9yOworCisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuY2xlYXIoKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZW5kT2ZSZXNv
dXJjZUJvdW5kYXJ5KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIkNvbnRlbnQtVHlw
ZTogIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJlc291cmNlLm1pbWVUeXBlKTsK
KworICAgICAgICBjb25zdCBjaGFyKiBjb250ZW50RW5jb2RpbmcgPSByZXNvdXJjZS5taW1lVHlw
ZS5zdGFydHNXaXRoKCJ0ZXh0LyIpID8gcXVvdGVkUHJpbnRhYmxlIDogYmFzZTY0OworICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcbkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6ICIp
OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChjb250ZW50RW5jb2RpbmcpOworICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcbkNvbnRlbnQtTG9jYXRpb246ICIpOworICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyZXNvdXJjZS51cmwpOworICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgiXHJcblxyXG4iKTsKKworICAgICAgICBhc2NpaVN0cmluZyA9IHN0cmluZ0J1
aWxkZXIudG9TdHJpbmcoKS51dGY4KCk7CisgICAgICAgIG1odG1sRGF0YS0+YXBwZW5kKGFzY2lp
U3RyaW5nLmRhdGEoKSwgYXNjaWlTdHJpbmcubGVuZ3RoKCkpOworCisgICAgICAgIC8vIEZJWE1F
OiBpZGVhbGx5IHdlIHdvdWxkIGVuY29kZSB0aGUgY29udGVudCBhcyBhIHN0cmVhbSB3aXRob3V0
IGhhdmluZyB0byBmZXRjaCBpdCBhbGwuCisgICAgICAgIGNvbnN0IGNoYXIqIGRhdGEgPSByZXNv
dXJjZS5kYXRhLT5kYXRhKCk7CisgICAgICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gcmVzb3VyY2Uu
ZGF0YS0+c2l6ZSgpOworICAgICAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlZERhdGE7CisgICAgICAg
IGlmIChjb250ZW50RW5jb2RpbmcgPT0gcXVvdGVkUHJpbnRhYmxlKSB7CisgICAgICAgICAgICBx
dW90ZWRQcmludGFibGVFbmNvZGUoZGF0YSwgZGF0YUxlbmd0aCwgZW5jb2RlZERhdGEpOworICAg
ICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoZW5jb2RlZERhdGEuZGF0YSgpLCBlbmNvZGVkRGF0
YS5zaXplKCkpOworICAgICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoIlxyXG4iLCAyKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChjb250ZW50RW5jb2RpbmcgPT0gYmFz
ZTY0KTsKKyAgICAgICAgICAgIC8vIFdlIGFyZSBub3Qgc3BlY2lmeWluZyBpbnNlcnRMRnMgPSB0
cnVlIGJlbG93IGFzIGl0IHdvdWxkIGN1dCB0aGUgbGluZXMgd2l0aCBMRnMgYW5kIE1IVE1MIHJl
cXVpcmVzIENSTEZzLgorICAgICAgICAgICAgYmFzZTY0RW5jb2RlKGRhdGEsIGRhdGFMZW5ndGgs
IGVuY29kZWREYXRhKTsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IDA7CisgICAgICAgICAg
ICBzaXplX3QgZW5jb2RlZERhdGFMZW5ndGggPSBlbmNvZGVkRGF0YS5zaXplKCk7CisgICAgICAg
ICAgICBkbyB7CisgICAgICAgICAgICAgICAgc2l6ZV90IGxpbmVMZW5ndGggPSBzdGQ6Om1pbihl
bmNvZGVkRGF0YUxlbmd0aCAtIGluZGV4LCBzdGF0aWNfY2FzdDxzaXplX3Q+KDc2KSk7CisgICAg
ICAgICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoZW5jb2RlZERhdGEuZGF0YSgpICsgaW5kZXgs
IGxpbmVMZW5ndGgpOworICAgICAgICAgICAgICAgIG1odG1sRGF0YS0+YXBwZW5kKCJcclxuIiwg
Mik7CisgICAgICAgICAgICAgICAgaW5kZXggKz0gNzY7CisgICAgICAgICAgICB9IHdoaWxlIChp
bmRleCA8IGVuY29kZWREYXRhTGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFzY2lp
U3RyaW5nID0gbWFrZVN0cmluZygiLS0iLCBib3VuZGFyeSwgIi0tXHJcbiIpLnV0ZjgoKTsKKyAg
ICBtaHRtbERhdGEtPmFwcGVuZChhc2NpaVN0cmluZy5kYXRhKCksIGFzY2lpU3RyaW5nLmxlbmd0
aCgpKTsKKworICAgIHJldHVybiBtaHRtbERhdGEucmVsZWFzZSgpOworfQorCiB9CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJj
aGl2ZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZl
LmgKaW5kZXggMWIzMWRjMzE1YmFiOGIxM2ZlMjM4MTIwYTQzYjNiMDJkOTg0YTc3OS4uNzUwNjUy
MDYyODkwOTM2ODNhMjE1ZDQxYThhYTM5YTQzNzNlMTY1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZlLmgKQEAgLTM3LDcgKzM3LDkg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGcmFtZTsKIGNsYXNzIE1IVE1MUGFy
c2VyOworY2xhc3MgU2hhcmVkQnVmZmVyOwogCiBjbGFzcyBNSFRNTEFyY2hpdmUgOiBwdWJsaWMg
QXJjaGl2ZSB7CiBwdWJsaWM6CkBAIC00Niw2ICs0OCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxNSFRNTEFyY2hpdmU+IGNyZWF0ZSgpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PE1IVE1MQXJjaGl2ZT4gY3JlYXRlKGNvbnN0IEtVUkwmLCBTaGFyZWRCdWZmZXIqKTsKIAorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZ2VuZXJhdGVNSFRNTERhdGEoRnJhbWUq
KTsKKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTUhUTUxQYXJzZXI7CiAgICAgTUhUTUxB
cmNoaXZlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCmluZGV4IGQ1Njky
NmZhMTVhYzI0OTliZjE2OTYwZGZkNzEyMWJmMWQ1NjQxMGMuLjJmMmFlMTJkMTc0NTRkZmMyMTUx
ZWMwZjk3MTc0OTVkOThiZjU2MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZVNlcmlhbGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIu
Y3BwCkBAIC0yMDYsOCArMjA2LDEyIEBAIHZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZy
YW1lKEZyYW1lKiBmcmFtZSkKIAogICAgIFZlY3RvcjxOb2RlKj4gbm9kZXM7CiAgICAgU2VyaWFs
aXplck1hcmt1cEFjY3VtdWxhdG9yIGFjY3VtdWxhdG9yKHRoaXMsIGRvY3VtZW50LCAmbm9kZXMp
OwotICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2RpbmcoVGV4dEVuY29kaW5nKGRvY3VtZW50LT5j
aGFyc2V0KCkpKTsKLSAgICBBU1NFUlQodGV4dEVuY29kaW5nLmlzVmFsaWQoKSk7CisgICAgVGV4
dEVuY29kaW5nIHRleHRFbmNvZGluZyhkb2N1bWVudC0+Y2hhcnNldCgpKTsKKyAgICBDU3RyaW5n
IGRhdGE7CisgICAgaWYgKCF0ZXh0RW5jb2RpbmcuaXNWYWxpZCgpKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBpdCBzZWVtcyBpZnJhbWUgdXNlZCBhcyBpbWFnZSB0cmlnZ2VyIHRoaXMuIFdlIHNob3Vs
ZCBkZWFsIHdpdGggdGhlbSBjb3JyZWN0bHkuCisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAg
U3RyaW5nIHRleHQgPSBhY2N1bXVsYXRvci5zZXJpYWxpemVOb2Rlcyhkb2N1bWVudC0+ZG9jdW1l
bnRFbGVtZW50KCksIDAsIEluY2x1ZGVOb2RlKTsKICAgICBDU3RyaW5nIGZyYW1lSFRNTCA9IHRl
eHRFbmNvZGluZy5lbmNvZGUodGV4dC5jaGFyYWN0ZXJzKCksIHRleHQubGVuZ3RoKCksIEVudGl0
aWVzRm9yVW5lbmNvZGFibGVzKTsKICAgICBtX3Jlc291cmNlcy0+YXBwZW5kKFJlc291cmNlKHVy
bCwgZG9jdW1lbnQtPnN1Z2dlc3RlZE1JTUVUeXBlKCksIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGZy
YW1lSFRNTC5kYXRhKCksIGZyYW1lSFRNTC5sZW5ndGgoKSkpKTsKQEAgLTI3NCw3ICsyNzgsNyBA
QCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVDU1NTdHlsZVNoZWV0KENTU1N0eWxlU2hl
ZXQqIHN0eWxlU2hlZXQsIGNvbnN0IEtVUgogCiAgICAgaWYgKHVybC5pc1ZhbGlkKCkgJiYgIW1f
cmVzb3VyY2VVUkxzLmNvbnRhaW5zKHVybCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBjaGVjayB3aGV0aGVyIGEgY2hhcnNldCBoYXMgYmVlbiBzcGVjaWZpZWQgYW5kIGlmIG5vbmUg
d2FzIGZvdW5kIGFkZCBvbmUuCi0gICAgICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2RpbmcgPSBU
ZXh0RW5jb2Rpbmcoc3R5bGVTaGVldC0+Y2hhcnNldCgpKTsKKyAgICAgICAgVGV4dEVuY29kaW5n
IHRleHRFbmNvZGluZyhzdHlsZVNoZWV0LT5jaGFyc2V0KCkpOwogICAgICAgICBBU1NFUlQodGV4
dEVuY29kaW5nLmlzVmFsaWQoKSk7CiAgICAgICAgIFN0cmluZyB0ZXh0U3RyaW5nID0gY3NzVGV4
dC50b1N0cmluZygpOwogICAgICAgICBDU3RyaW5nIHRleHQgPSB0ZXh0RW5jb2RpbmcuZW5jb2Rl
KHRleHRTdHJpbmcuY2hhcmFjdGVycygpLCB0ZXh0U3RyaW5nLmxlbmd0aCgpLCBFbnRpdGllc0Zv
clVuZW5jb2RhYmxlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFy
ZWRCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcApp
bmRleCAwOTAwYWU0MjFlMzc2NGZkMmRhOWFiM2Y0NzM4OGFkMzZiM2M4OGNhLi5hZDg2MThlYjRj
OTNjYTg5OGFkMTEyY2NlNDMyMjA2ODIwMzc0ZWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1NoYXJlZEJ1ZmZlci5jcHAKQEAgLTExNyw2ICsxMTcsMTYgQEAgY29uc3QgY2hhciogU2hhcmVk
QnVmZmVyOjpkYXRhKCkgY29uc3QKICAgICByZXR1cm4gYnVmZmVyKCkuZGF0YSgpOwogfQogCit2
b2lkIFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKFNoYXJlZEJ1ZmZlciogZGF0YSkKK3sKKyAgICBjb25z
dCBjaGFyKiBzZWdtZW50OworICAgIHNpemVfdCBwb3NpdGlvbiA9IDA7CisgICAgd2hpbGUgKHNp
emVfdCBsZW5ndGggPSBkYXRhLT5nZXRTb21lRGF0YShzZWdtZW50LCBwb3NpdGlvbikpIHsKKyAg
ICAgICAgYXBwZW5kKHNlZ21lbnQsIGxlbmd0aCk7CisgICAgICAgIHBvc2l0aW9uICs9IGxlbmd0
aDsKKyAgICB9Cit9CisKIHZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoY29uc3QgY2hhciogZGF0
YSwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIEFTU0VSVCghbV9wdXJnZWFibGVCdWZmZXIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAppbmRleCA0ZjFkNjI5NmIyNDJmZTRk
OTliMjIwNjNiN2NiMTA4ZjFmNWFiY2ZlLi42OGQ5OTNhMzA3NTRhNzlmM2Q4YjU4NGFkMzg5NDhi
YmRmMDM0NDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZm
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaApAQCAtODQs
NiArODQsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAh
c2l6ZSgpOyB9CiAKKyAgICB2b2lkIGFwcGVuZChTaGFyZWRCdWZmZXIqKTsKICAgICB2b2lkIGFw
cGVuZChjb25zdCBjaGFyKiwgdW5zaWduZWQpOwogICAgIHZvaWQgY2xlYXIoKTsKICAgICBjb25z
dCBjaGFyKiBwbGF0Zm9ybURhdGEoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5k
ZXggZTQ5MWZkZTU5YjJkNDFiMGI2M2RlNmYzZDgyZjliZDAxNjdmZDczZC4uNGMyZGE3NGFhYzhh
OWQwNWFkMTdkNDM4YjcyMTU0MzZmMzA0OThhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNCBAQAorMjAxMS0wNS0zMSAgSmF5IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkaW5nIE1IVE1MIGdlbmVyYXRpb24gc3VwcG9ydCB0byBNSFRNTEFyY2hpdmUuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTY5CisKKyAgICAg
ICAgKiBwdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaDoKKyAgICAgICAgKiBzcmMvV2ViUGFnZVNl
cmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFs
aXplVG9NSFRNTCk6CisKIDIwMTEtMDUtMzEgIENhcnkgQ2xhcmsgIDxjYXJ5Y2xhcmtAZ29vZ2xl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmggYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oCmluZGV4IGExMDhhNjJj
MDZlNDNjYWM4YTExZmQzNTRjYzI0NWI2N2RmNTA4YzMuLmUyZGIwN2JlNDE4MDU3YjBlODZkMmE1
YzgwNjg3ODdkZDBiY2ZlNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYlBhZ2VTZXJpYWxpemVyLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViUGFnZVNlcmlhbGl6ZXIuaApAQCAtNTgsNiArNTgsOSBAQCBwdWJsaWM6CiAgICAgLy8g
Tm90ZSB0aGF0IHRoaXMgYWxzbyBzdHJpcHMtb3V0IGFueSBzY3JpcHQgdGFnIG9yIGxpbmsgdG8g
SmF2YVNjcmlwdC4KICAgICBXRUJLSVRfQVBJIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZShXZWJWaWV3
KiwgV2ViVmVjdG9yPFJlc291cmNlPiopOwogCisgICAgLy8gU2VyaWFsaXplcyB0aGUgV2ViVmll
dyBjb250ZW50cyB0byBhIE1IVE1MIHJlcHJlc2VudGF0aW9uLgorICAgIFdFQktJVF9BUEkgc3Rh
dGljIFdlYkNTdHJpbmcgc2VyaWFsaXplVG9NSFRNTChXZWJWaWV3Kik7CisKICAgICAvLyBJTVBP
UlRBTlQ6CiAgICAgLy8gVGhlIEFQSSBiZWxvdyBpcyBhbiBvbGRlciBpbXBsZW1lbnRhdGlvbiBv
ZiBhIHBhZ2VzZXJpYWxpemF0aW9uIHRoYXQKICAgICAvLyB3aWxsIGJlIHJlbW92ZWQgc29vbi4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVy
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcApp
bmRleCAyMzJlMjExNjAxNTljODg2ZDhlNGVkMTQwMDg0YzZiNWNmNzMxZTUxLi5jZjRlNTdiMjU3
Y2VmMTNjMmM1MjI4ODZmNzNlMjRhYzEyNDZkMTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5j
bHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJNSFRNTEFyY2hpdmUuaCIKICNpbmNsdWRlICJQYWdlU2Vy
aWFsaXplci5oIgogI2luY2x1ZGUgIlZlY3Rvci5oIgogCkBAIC0yMDAsNiArMjAxLDE1IEBAIHZv
aWQgV2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShXZWJWaWV3KiB2aWV3LCBXZWJWZWN0b3I8
V2ViUGFnZVNlcmlhbGl6ZXI6OlJlCiAgICAgKnJlc291cmNlc1BhcmFtID0gcmVzdWx0OyAgICAg
ICAgIAogfQogCitXZWJDU3RyaW5nIFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVUb01IVE1M
KFdlYlZpZXcqIHZpZXcpCit7CisgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gc3RhdGljX2Nhc3Q8
V2ViVmlld0ltcGwqPih2aWV3KS0+bWFpbkZyYW1lKCk7CisgICAgRnJhbWUqIGZyYW1lID0gc3Rh
dGljX2Nhc3Q8V2ViRnJhbWVJbXBsKj4od2ViRnJhbWUpLT5mcmFtZSgpOworICAgIFJlZlB0cjxT
aGFyZWRCdWZmZXI+IG1odG1sID0gTUhUTUxBcmNoaXZlOjpnZW5lcmF0ZU1IVE1MRGF0YShmcmFt
ZSk7CisgICAgLy8gRklYTUU6IHdlIGFyZSBjb3B5aW5nIGFsbCB0aGUgZGF0YSBoZXJlLiBJZGVh
bHkgd2Ugd291bGQgaGF2ZSBhIFdlYlNoYXJlZERhdGEoKS4KKyAgICByZXR1cm4gV2ViQ1N0cmlu
ZyhtaHRtbC0+ZGF0YSgpLCBtaHRtbC0+c2l6ZSgpKTsKK30KKwogYm9vbCBXZWJQYWdlU2VyaWFs
aXplcjo6c2VyaWFsaXplKFdlYkZyYW1lKiBmcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHJlY3Vyc2l2ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXZWJQYWdlU2VyaWFsaXplckNsaWVudCogY2xpZW50LAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95512</attachid>
            <date>2011-05-31 17:00:37 -0700</date>
            <delta_ts>2011-05-31 17:35:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-7169-20110531170036.patch</filename>
            <type>text/plain</type>
            <size>18199</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODc3NDcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDlh
NjA2MjY2NDQ1Y2VmMmZiNWI4Yzg2ZThiNTQ4NTgyNTJkMmZjMzYuLjQwMmViZWNhYWE5ZWI2YTFi
MGNmNDMxNzkyY2JhZTk1MjhhMjVhZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDExLTA1LTMxICBKYXkgQ2l2ZWxsaSAgPGpjaXZlbGxpQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRl
ZCBhIG1ldGhvZCB0byBnZW5lcmF0ZSBSRkMgMjgyMiBjb21wbGlhbnQgZGF0ZSBzdHJpbmdzLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE2OQorCisg
ICAgICAgICogd3RmL0RhdGVNYXRoLmNwcDoKKyAgICAgICAgKFdURjo6dHdvRGlnaXRTdHJpbmdG
cm9tTnVtYmVyKToKKyAgICAgICAgKFdURjo6bWFrZVJGQzI4MjJEYXRlU3RyaW5nKToKKyAgICAg
ICAgKiB3dGYvRGF0ZU1hdGguaDoKKwogMjAxMS0wNS0zMCAgSG9qb25nIEhhbiAgPGhvam9uZy5o
YW5Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguY3BwCmluZGV4IDcwYzBjZjQ3ZjVmNzljYmZj
MzMxZjdhMTdmYTk3ZTlhN2NiYzY3ZGMuLjliMTVhZTExMzAzOWRjYTY2YTRhMTQ5OGNiMjUxZjhj
NWRjMmUwNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGgu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguY3BwCkBAIC05MCw3
ICs5MCw3IEBACiAjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1
ZGUgPHRpbWUuaD4KLQorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogI2lm
IEhBVkUoRVJSTk9fSCkKICNpbmNsdWRlIDxlcnJuby5oPgpAQCAtMTgwLDYgKzE4MCwxNCBAQCBz
dGF0aWMgaW5saW5lIGRvdWJsZSBtc1RvRGF5cyhkb3VibGUgbXMpCiAgICAgcmV0dXJuIGZsb29y
KG1zIC8gbXNQZXJEYXkpOwogfQogCitzdGF0aWMgU3RyaW5nIHR3b0RpZ2l0U3RyaW5nRnJvbU51
bWJlcihpbnQgbnVtYmVyKQoreworICAgIEFTU0VSVChudW1iZXIgPj0gMCAmJiBudW1iZXIgPCAx
MDApOworICAgIGlmIChudW1iZXIgPiA5KQorICAgICAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIo
bnVtYmVyKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygiMCIsIFN0cmluZzo6bnVtYmVyKG51bWJl
cikpOworfQorCiBpbnQgbXNUb1llYXIoZG91YmxlIG1zKQogewogICAgIGludCBhcHByb3hZZWFy
ID0gc3RhdGljX2Nhc3Q8aW50PihmbG9vcihtcyAvIChtc1BlckRheSAqIDM2NS4yNDI1KSkgKyAx
OTcwKTsKQEAgLTEwMjgsNiArMTAzNiwzNCBAQCBkb3VibGUgdGltZUNsaXAoZG91YmxlIHQpCiAg
ICAgICAgIHJldHVybiBOYU47CiAgICAgcmV0dXJuIHRydW5jKHQpOwogfQorCisvLyBTZWUgaHR0
cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNzZWN0aW9uLTMuMyBmb3IgbW9yZSBpbmZv
cm1hdGlvbi4KK1N0cmluZyBtYWtlUkZDMjgyMkRhdGVTdHJpbmcodW5zaWduZWQgZGF5T2ZXZWVr
LCB1bnNpZ25lZCBkYXksIHVuc2lnbmVkIG1vbnRoLCB1bnNpZ25lZCB5ZWFyLCB1bnNpZ25lZCBo
b3VycywgdW5zaWduZWQgbWludXRlcywgdW5zaWduZWQgc2Vjb25kcywgaW50IHV0Y09mZnNldCkK
K3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQod2Vla2RheU5hbWVbZGF5T2ZXZWVrXSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
IiwgIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpudW1iZXIoZGF5KSk7Cisg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
b250aE5hbWVbbW9udGhdKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICIpOworICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKFN0cmluZzo6bnVtYmVyKHllYXIpKTsKKyAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgiICIpOworCisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodHdvRGlnaXRTdHJp
bmdGcm9tTnVtYmVyKGhvdXJzKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJzonKTsKKyAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0d29EaWdpdFN0cmluZ0Zyb21OdW1iZXIobWludXRlcykp
OworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCc6Jyk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQodHdvRGlnaXRTdHJpbmdGcm9tTnVtYmVyKHNlY29uZHMpKTsKKyAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgnICcpOworCisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodXRjT2Zmc2V0ID4gMCA/
ICIrIiA6ICItIik7CisgICAgaW50IGFic29sdXRlVVRDT2Zmc2V0ID0gYWJzKHV0Y09mZnNldCk7
CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodHdvRGlnaXRTdHJpbmdGcm9tTnVtYmVyKGFic29s
dXRlVVRDT2Zmc2V0IC8gNjApKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0d29EaWdpdFN0
cmluZ0Zyb21OdW1iZXIoYWJzb2x1dGVVVENPZmZzZXQgJSA2MCkpOworCisgICAgcmV0dXJuIHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KIH0gLy8gbmFtZXNwYWNlIFdURgogCiAjaWYgVVNF
KEpTQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguaAppbmRleCAyYWMyODRlN2Q4ZTE1
OTg1ZDYyZTMzNDJhOTVmODdjZGZhZTU3Mzc2Li5jYzJlODQyMjZjODBmNTUwZGU3NDFkMTM5NmIw
NTNiMTdiM2QwZmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVN
YXRoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EYXRlTWF0aC5oCkBAIC01MSw2
ICs1MSw3IEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093
bkFycmF5UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25BcnJheVB0ci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBu
YW1lc3BhY2UgV1RGIHsKQEAgLTYxLDYgKzYyLDggQEAgaW50IGVxdWl2YWxlbnRZZWFyRm9yRFNU
KGludCB5ZWFyKTsKIGRvdWJsZSBwYXJzZUVTNURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0
ZXJzKGNvbnN0IGNoYXIqIGRhdGVTdHJpbmcpOwogZG91YmxlIHBhcnNlRGF0ZUZyb21OdWxsVGVy
bWluYXRlZENoYXJhY3RlcnMoY29uc3QgY2hhciogZGF0ZVN0cmluZyk7CiBkb3VibGUgdGltZUNs
aXAoZG91YmxlKTsKKy8vIGRheU9mV2VlazogWzAsIDZdIDAgYmVpbmcgTW9uZGF5LCBkYXk6IFsx
LCAzMV0sIG1vbnRoOiBbMCwgMTFdLCB5ZWFyOiBleDogMjAxMSwgaG91cnM6IFswLCAyM10sIG1p
bnV0ZXM6IFswLCA1OV0sIHNlY29uZHM6IFswLCA1OV0sIHV0Y09mZnNldDogWy03MjAsNzIwXS4g
CitTdHJpbmcgbWFrZVJGQzI4MjJEYXRlU3RyaW5nKHVuc2lnbmVkIGRheU9mV2VlaywgdW5zaWdu
ZWQgZGF5LCB1bnNpZ25lZCBtb250aCwgdW5zaWduZWQgeWVhciwgdW5zaWduZWQgaG91cnMsIHVu
c2lnbmVkIG1pbnV0ZXMsIHVuc2lnbmVkIHNlY29uZHMsIGludCB1dGNPZmZzZXQpOwogCiBpbmxp
bmUgZG91YmxlIGpzQ3VycmVudFRpbWUoKQogewpAQCAtMTA2LDYgKzEwOSw3IEBAIHVzaW5nIFdU
Rjo6bXNQZXJTZWNvbmQ7CiB1c2luZyBXVEY6Om1zVG9ZZWFyOwogdXNpbmcgV1RGOjpzZWNvbmRz
UGVyTWludXRlOwogdXNpbmcgV1RGOjpwYXJzZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0
ZXJzOwordXNpbmcgV1RGOjptYWtlUkZDMjgyMkRhdGVTdHJpbmc7CiB1c2luZyBXVEY6OmNhbGN1
bGF0ZVVUQ09mZnNldDsKIHVzaW5nIFdURjo6Y2FsY3VsYXRlRFNUT2Zmc2V0OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggYWFmNWFmYTFkMzJkNWE2ZTFiYWRjZmEyZmJlNGVlMDY4M2RjMmNkZi4uZWMxNmI0NTVi
NTU2NDRmYjFmMjAxNGY0N2QxMGZhN2U1NjkxMGMyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIy
IEBACisyMDExLTA1LTMxICBKYXkgQ2l2ZWxsaSAgPGpjaXZlbGxpQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgTUhU
TUwgZ2VuZXJhdGlvbiBzdXBwb3J0IHRvIE1IVE1MQXJjaGl2ZS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNjkKKworICAgICAgICAqIGxvYWRlci9h
cmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZW5lcmF0
ZVJhbmRvbUJvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OnJlcGxhY2VOb25QcmludGFibGVD
aGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1IVE1MQXJjaGl2ZTo6Z2VuZXJhdGVNSFRN
TERhdGEpOgorICAgICAgICAqIGxvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5oOgor
ICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJp
YWxpemVyOjpzZXJpYWxpemVDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFy
ZWRCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjphcHBlbmQpOgor
ICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oOgorCiAyMDExLTA1LTMxICBSb2IgQnVp
cyAgPHJidWlzQHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGlyayBTY2h1bHplLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNo
aXZlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2
ZS5jcHAKaW5kZXggMGQzMzIzN2I3MGY4MGVlZDcwMDc5Yzk4NmNlMDRiYmUzNTg5MjFlMC4uOTQ4
YWVjNjBkZTMzOWY5NWE5MWY3Mjc2YjY2YmE4ZTk5MmVkNTQ2NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCkBAIC0zMywx
MSArMzMsNTcgQEAKICNpZiBFTkFCTEUoTUhUTUwpCiAjaW5jbHVkZSAiTUhUTUxBcmNoaXZlLmgi
CiAKKyNpbmNsdWRlICJCYXNlNjQuaCIKKyNpbmNsdWRlICJDcnlwdG9ncmFwaGljYWxseVJhbmRv
bU51bWJlci5oIgorI2luY2x1ZGUgIkRhdGVNYXRoLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
KyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIk1IVE1MUGFyc2VyLmgiCi0jaW5jbHVkZSAi
TUlNRUhlYWRlci5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiUGFnZVNlcmlhbGl6ZXIuaCIKKyNpbmNsdWRlICJRdW90ZWRQcmlu
dGFibGUuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxzeXMvdGltZS5o
PgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY29uc3QgY2hhciogY29uc3Qg
cXVvdGVkUHJpbnRhYmxlID0gInF1b3RlZC1wcmludGFibGUiOworY29uc3QgY2hhciogY29uc3Qg
YmFzZTY0ID0gImJhc2U2NCI7CisKK3N0YXRpYyBTdHJpbmcgZ2VuZXJhdGVSYW5kb21Cb3VuZGFy
eSgpCit7CisgICAgLy8gVHJ5aW5nIHRvIGdlbmVyYXRlIHJhbmRvbSBib3VuZGFyaWVzIHNpbWls
YXIgdG8gSUUvVW5NSFQgKGV4OiAtLS0tPV9OZXh0UGFydF8wMDBfMDAxQl8wMUNDMTU3Qi45NkY4
MDhBMCkuCisgICAgY29uc3Qgc2l6ZV90IHJhbmRvbVZhbHVlc0xlbmd0aCA9IDEwOworICAgIGNo
YXIgcmFuZG9tVmFsdWVzW3JhbmRvbVZhbHVlc0xlbmd0aF07CisgICAgY3J5cHRvZ3JhcGhpY2Fs
bHlSYW5kb21WYWx1ZXMoJnJhbmRvbVZhbHVlcywgcmFuZG9tVmFsdWVzTGVuZ3RoKTsKKyAgICBT
dHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIi0t
LS09X05leHRQYXJ0XzAwMF8iKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJhbmRvbVZh
bHVlc0xlbmd0aDsgKytpKSB7CisgICAgICAgIGlmIChpID09IDIpCisgICAgICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnXycpOworICAgICAgICBlbHNlIGlmIChpID09IDYpCisgICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnLicpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChsb3dlck5pYmJsZVRvQVNDSUlIZXhEaWdpdChyYW5kb21WYWx1ZXNbaV0pKTsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodXBwZXJOaWJibGVUb0FTQ0lJSGV4RGlnaXQocmFuZG9t
VmFsdWVzW2ldKSk7CisgICAgfQorICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7
Cit9CisKK3N0YXRpYyBTdHJpbmcgcmVwbGFjZU5vblByaW50YWJsZUNoYXJhY3RlcnMoY29uc3Qg
U3RyaW5nJiB0ZXh0KQoreworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHRleHQubGVuZ3RoKCk7ICsraSkgeworICAgICAgaWYgKGlz
QVNDSUlQcmludGFibGUodGV4dFtpXSkpCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRl
eHRbaV0pOworICAgICAgZWxzZQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnPycpOwor
ICAgIH0KKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQorCiBNSFRNTEFy
Y2hpdmU6Ok1IVE1MQXJjaGl2ZSgpCiB7CiB9CkBAIC03MSw1ICsxMTcsOTcgQEAgUGFzc1JlZlB0
cjxNSFRNTEFyY2hpdmU+IE1IVE1MQXJjaGl2ZTo6Y3JlYXRlKGNvbnN0IEtVUkwmIHVybCwgU2hh
cmVkQnVmZmVyKiBkYXQKICAgICByZXR1cm4gbWFpbkFyY2hpdmUucmVsZWFzZSgpOwogfQogCitQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gTUhUTUxBcmNoaXZlOjpnZW5lcmF0ZU1IVE1MRGF0YShQ
YWdlKiBwYWdlKQoreworICAgIFZlY3RvcjxQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+IHJlc291
cmNlczsKKyAgICBQYWdlU2VyaWFsaXplciBwYWdlU2VyaWFsaXplcigmcmVzb3VyY2VzKTsKKyAg
ICBwYWdlU2VyaWFsaXplci5zZXJpYWxpemUocGFnZSk7CisKKyAgICBTdHJpbmcgYm91bmRhcnkg
PSBnZW5lcmF0ZVJhbmRvbUJvdW5kYXJ5KCk7CisgICAgU3RyaW5nIGVuZE9mUmVzb3VyY2VCb3Vu
ZGFyeSA9IG1ha2VTdHJpbmcoIi0tIiwgYm91bmRhcnksICJcclxuIik7CisKKyAgICBTdHJpbmcg
ZGF0ZVN0cmluZzsKKyAgICB0aW1ldmFsIHRpbWVWYWx1ZSA9IHsgMCB9OworICAgIGlmICghZ2V0
dGltZW9mZGF5KCZ0aW1lVmFsdWUsIDApKSB7CisgICAgICAgIHRtKiB0aW1lQW5kRGF0ZSA9IGdt
dGltZSgmKHRpbWVWYWx1ZS50dl9zZWMpKTsKKyAgICAgICAgaWYgKHRpbWVBbmREYXRlKQorICAg
ICAgICAgIGRhdGVTdHJpbmcgPSBtYWtlUkZDMjgyMkRhdGVTdHJpbmcodGltZUFuZERhdGUtPnRt
X3dkYXksIHRpbWVBbmREYXRlLT50bV9tZGF5LCB0aW1lQW5kRGF0ZS0+dG1fbW9uLCAxOTAwICsg
dGltZUFuZERhdGUtPnRtX3llYXIsIHRpbWVBbmREYXRlLT50bV9ob3VyLCB0aW1lQW5kRGF0ZS0+
dG1fbWluLCB0aW1lQW5kRGF0ZS0+dG1fc2VjLCBjYWxjdWxhdGVVVENPZmZzZXQoKSAvICgxMDAw
ICogNjApKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfSBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgU3RyaW5n
QnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJGcm9tOiA8
U2F2ZWQgYnkgV2ViS2l0PlxyXG4iKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiU3ViamVj
dDogIik7CisgICAgLy8gV2UgcmVwbGFjZSBub24gQVNDSUkgY2hhcmFjdGVycyB3aXRoICc/JyBj
aGFyYWN0ZXJzIHRvIG1hdGNoIElFJ3MgYmVoYXZpb3IuCisgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQocmVwbGFjZU5vblByaW50YWJsZUNoYXJhY3RlcnMocGFnZS0+bWFpbkZyYW1lKCktPmRvY3Vt
ZW50KCktPnRpdGxlKCkpKTsKKyAgICBpZiAoIWRhdGVTdHJpbmcuaXNFbXB0eSgpKSB7CisgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcclxuRGF0ZTogIik7CisgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKGRhdGVTdHJpbmcpOworICAgIH0KKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgiXHJcbk1JTUUtVmVyc2lvbjogMS4wXHJcbiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCJDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZWxhdGVkO1xyXG4iKTsKKyAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgiXHR0eXBlPVwiIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocGFnZS0+
bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPnN1Z2dlc3RlZE1JTUVUeXBlKCkpOworICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCJcIjtcclxuIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlx0
Ym91bmRhcnk9XCIiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChib3VuZGFyeSk7CisgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoIlwiXHJcblxyXG4iKTsKKworICAgIC8vIFdlIHVzZSB1dGY4
KCkgYmVsb3cgaW5zdGVhZCBvZiBhc2NpaSgpIGFzIGFzY2lpKCkgcmVwbGFjZXMgQ1JMRnMgd2l0
aCA/PyAod2Ugc3RpbGwgb25seSBoYXZlIHB1dCBBU0NJSSBjaGFyYWN0ZXJzIGluIGl0KS4KKyAg
ICBBU1NFUlQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpLmNvbnRhaW5zT25seUFTQ0lJKCkpOwor
ICAgIENTdHJpbmcgYXNjaWlTdHJpbmcgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgp
OworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1odG1sRGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKCk7CisgICAgbWh0bWxEYXRhLT5hcHBlbmQoYXNjaWlTdHJpbmcuZGF0YSgpLCBhc2NpaVN0
cmluZy5sZW5ndGgoKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc291cmNlcy5z
aXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2UmIHJl
c291cmNlID0gcmVzb3VyY2VzW2ldOworCisgICAgICAgIHN0cmluZ0J1aWxkZXIuY2xlYXIoKTsK
KyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZW5kT2ZSZXNvdXJjZUJvdW5kYXJ5KTsKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIkNvbnRlbnQtVHlwZTogIik7CisgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKHJlc291cmNlLm1pbWVUeXBlKTsKKworICAgICAgICBjb25zdCBj
aGFyKiBjb250ZW50RW5jb2RpbmcgPSBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEphdmFT
Y3JpcHRNSU1FVHlwZShyZXNvdXJjZS5taW1lVHlwZSkgfHwgTUlNRVR5cGVSZWdpc3RyeTo6aXNT
dXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlKHJlc291cmNlLm1pbWVUeXBlKSA/IHF1b3RlZFByaW50
YWJsZSA6IGJhc2U2NDsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlxyXG5Db250ZW50
LVRyYW5zZmVyLUVuY29kaW5nOiAiKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoY29u
dGVudEVuY29kaW5nKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlxyXG5Db250ZW50
LUxvY2F0aW9uOiAiKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocmVzb3VyY2UudXJs
KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlxyXG5cclxuIik7CisKKyAgICAgICAg
YXNjaWlTdHJpbmcgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpOworICAgICAgICBt
aHRtbERhdGEtPmFwcGVuZChhc2NpaVN0cmluZy5kYXRhKCksIGFzY2lpU3RyaW5nLmxlbmd0aCgp
KTsKKworICAgICAgICAvLyBGSVhNRTogaWRlYWxseSB3ZSB3b3VsZCBlbmNvZGUgdGhlIGNvbnRl
bnQgYXMgYSBzdHJlYW0gd2l0aG91dCBoYXZpbmcgdG8gZmV0Y2ggaXQgYWxsLgorICAgICAgICBj
b25zdCBjaGFyKiBkYXRhID0gcmVzb3VyY2UuZGF0YS0+ZGF0YSgpOworICAgICAgICBzaXplX3Qg
ZGF0YUxlbmd0aCA9IHJlc291cmNlLmRhdGEtPnNpemUoKTsKKyAgICAgICAgVmVjdG9yPGNoYXI+
IGVuY29kZWREYXRhOworICAgICAgICBpZiAoIXN0cmNtcChjb250ZW50RW5jb2RpbmcsIHF1b3Rl
ZFByaW50YWJsZSkpIHsKKyAgICAgICAgICAgIHF1b3RlZFByaW50YWJsZUVuY29kZShkYXRhLCBk
YXRhTGVuZ3RoLCBlbmNvZGVkRGF0YSk7CisgICAgICAgICAgICBtaHRtbERhdGEtPmFwcGVuZChl
bmNvZGVkRGF0YS5kYXRhKCksIGVuY29kZWREYXRhLnNpemUoKSk7CisgICAgICAgICAgICBtaHRt
bERhdGEtPmFwcGVuZCgiXHJcbiIsIDIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
QVNTRVJUKCFzdHJjbXAoY29udGVudEVuY29kaW5nLCBiYXNlNjQpKTsKKyAgICAgICAgICAgIC8v
IFdlIGFyZSBub3Qgc3BlY2lmeWluZyBpbnNlcnRMRnMgPSB0cnVlIGJlbG93IGFzIGl0IHdvdWxk
IGN1dCB0aGUgbGluZXMgd2l0aCBMRnMgYW5kIE1IVE1MIHJlcXVpcmVzIENSTEZzLgorICAgICAg
ICAgICAgYmFzZTY0RW5jb2RlKGRhdGEsIGRhdGFMZW5ndGgsIGVuY29kZWREYXRhKTsKKyAgICAg
ICAgICAgIGNvbnN0IHNpemVfdCBtYXhpbXVtTGluZUxlbmd0aCA9IDc2OworICAgICAgICAgICAg
c2l6ZV90IGluZGV4ID0gMDsKKyAgICAgICAgICAgIHNpemVfdCBlbmNvZGVkRGF0YUxlbmd0aCA9
IGVuY29kZWREYXRhLnNpemUoKTsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBz
aXplX3QgbGluZUxlbmd0aCA9IHN0ZDo6bWluKGVuY29kZWREYXRhTGVuZ3RoIC0gaW5kZXgsIG1h
eGltdW1MaW5lTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBtaHRtbERhdGEtPmFwcGVuZChlbmNv
ZGVkRGF0YS5kYXRhKCkgKyBpbmRleCwgbGluZUxlbmd0aCk7CisgICAgICAgICAgICAgICAgbWh0
bWxEYXRhLT5hcHBlbmQoIlxyXG4iLCAyKTsKKyAgICAgICAgICAgICAgICBpbmRleCArPSBtYXhp
bXVtTGluZUxlbmd0aDsKKyAgICAgICAgICAgIH0gd2hpbGUgKGluZGV4IDwgZW5jb2RlZERhdGFM
ZW5ndGgpOworICAgICAgICB9CisgICAgfQorCisgICAgYXNjaWlTdHJpbmcgPSBtYWtlU3RyaW5n
KCItLSIsIGJvdW5kYXJ5LCAiLS1cclxuIikudXRmOCgpOworICAgIG1odG1sRGF0YS0+YXBwZW5k
KGFzY2lpU3RyaW5nLmRhdGEoKSwgYXNjaWlTdHJpbmcubGVuZ3RoKCkpOworCisgICAgcmV0dXJu
IG1odG1sRGF0YS5yZWxlYXNlKCk7Cit9CisKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuaAppbmRleCAxYjMxZGMzMTVi
YWI4YjEzZmUyMzgxMjBhNDNiM2IwMmQ5ODRhNzc5Li44NmZlMWM3NWZhZmE5YTY5NjU4ODg4YjFi
ZDcyZTY3OGZkYWFhYzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2
ZS9taHRtbC9NSFRNTEFyY2hpdmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2
ZS9taHRtbC9NSFRNTEFyY2hpdmUuaApAQCAtMzgsNiArMzgsOCBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBNSFRNTFBhcnNlcjsKK2NsYXNzIFBhZ2U7CitjbGFzcyBTaGFyZWRCdWZm
ZXI7CiAKIGNsYXNzIE1IVE1MQXJjaGl2ZSA6IHB1YmxpYyBBcmNoaXZlIHsKIHB1YmxpYzoKQEAg
LTQ2LDYgKzQ4LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1IVE1MQXJjaGl2
ZT4gY3JlYXRlKCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TUhUTUxBcmNoaXZlPiBjcmVhdGUo
Y29uc3QgS1VSTCYsIFNoYXJlZEJ1ZmZlciopOwogCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPiBnZW5lcmF0ZU1IVE1MRGF0YShQYWdlKik7CisKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIE1IVE1MUGFyc2VyOwogICAgIE1IVE1MQXJjaGl2ZSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VTZXJpYWxpemVyLmNwcAppbmRleCBkNTY5MjZmYTE1YWMyNDk5YmYxNjk2MGRmZDcx
MjFiZjFkNTY0MTBjLi5lMTczODc5MThhODUxODY2YTlkYjllYWI0Y2E0MWNjMWQ0MzZlMDk3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcApAQCAtMjA2LDggKzIwNiwxMiBA
QCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVGcmFtZShGcmFtZSogZnJhbWUpCiAKICAg
ICBWZWN0b3I8Tm9kZSo+IG5vZGVzOwogICAgIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvciBh
Y2N1bXVsYXRvcih0aGlzLCBkb2N1bWVudCwgJm5vZGVzKTsKLSAgICBUZXh0RW5jb2RpbmcgdGV4
dEVuY29kaW5nKFRleHRFbmNvZGluZyhkb2N1bWVudC0+Y2hhcnNldCgpKSk7Ci0gICAgQVNTRVJU
KHRleHRFbmNvZGluZy5pc1ZhbGlkKCkpOworICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2Rpbmco
ZG9jdW1lbnQtPmNoYXJzZXQoKSk7CisgICAgQ1N0cmluZyBkYXRhOworICAgIGlmICghdGV4dEVu
Y29kaW5nLmlzVmFsaWQoKSkgeworICAgICAgICAvLyBGSVhNRTogaWZyYW1lcyB1c2VkIGFzIGlt
YWdlcyB0cmlnZ2VyIHRoaXMuIFdlIHNob3VsZCBkZWFsIHdpdGggdGhlbSBjb3JyZWN0bHkuCisg
ICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgU3RyaW5nIHRleHQgPSBhY2N1bXVsYXRvci5zZXJp
YWxpemVOb2Rlcyhkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIDAsIEluY2x1ZGVOb2RlKTsK
ICAgICBDU3RyaW5nIGZyYW1lSFRNTCA9IHRleHRFbmNvZGluZy5lbmNvZGUodGV4dC5jaGFyYWN0
ZXJzKCksIHRleHQubGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKICAgICBtX3Jl
c291cmNlcy0+YXBwZW5kKFJlc291cmNlKHVybCwgZG9jdW1lbnQtPnN1Z2dlc3RlZE1JTUVUeXBl
KCksIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGZyYW1lSFRNTC5kYXRhKCksIGZyYW1lSFRNTC5sZW5n
dGgoKSkpKTsKQEAgLTI3NCw3ICsyNzgsNyBAQCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJpYWxp
emVDU1NTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQsIGNvbnN0IEtVUgogCiAg
ICAgaWYgKHVybC5pc1ZhbGlkKCkgJiYgIW1fcmVzb3VyY2VVUkxzLmNvbnRhaW5zKHVybCkpIHsK
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjaGVjayB3aGV0aGVyIGEgY2hhcnNldCBoYXMg
YmVlbiBzcGVjaWZpZWQgYW5kIGlmIG5vbmUgd2FzIGZvdW5kIGFkZCBvbmUuCi0gICAgICAgIFRl
eHRFbmNvZGluZyB0ZXh0RW5jb2RpbmcgPSBUZXh0RW5jb2Rpbmcoc3R5bGVTaGVldC0+Y2hhcnNl
dCgpKTsKKyAgICAgICAgVGV4dEVuY29kaW5nIHRleHRFbmNvZGluZyhzdHlsZVNoZWV0LT5jaGFy
c2V0KCkpOwogICAgICAgICBBU1NFUlQodGV4dEVuY29kaW5nLmlzVmFsaWQoKSk7CiAgICAgICAg
IFN0cmluZyB0ZXh0U3RyaW5nID0gY3NzVGV4dC50b1N0cmluZygpOwogICAgICAgICBDU3RyaW5n
IHRleHQgPSB0ZXh0RW5jb2RpbmcuZW5jb2RlKHRleHRTdHJpbmcuY2hhcmFjdGVycygpLCB0ZXh0
U3RyaW5nLmxlbmd0aCgpLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAppbmRleCAwOTAwYWU0MjFlMzc2NGZkMmRhOWFiM2Y0
NzM4OGFkMzZiM2M4OGNhLi5hZDg2MThlYjRjOTNjYTg5OGFkMTEyY2NlNDMyMjA2ODIwMzc0ZWE0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKQEAgLTExNyw2ICsx
MTcsMTYgQEAgY29uc3QgY2hhciogU2hhcmVkQnVmZmVyOjpkYXRhKCkgY29uc3QKICAgICByZXR1
cm4gYnVmZmVyKCkuZGF0YSgpOwogfQogCit2b2lkIFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKFNoYXJl
ZEJ1ZmZlciogZGF0YSkKK3sKKyAgICBjb25zdCBjaGFyKiBzZWdtZW50OworICAgIHNpemVfdCBw
b3NpdGlvbiA9IDA7CisgICAgd2hpbGUgKHNpemVfdCBsZW5ndGggPSBkYXRhLT5nZXRTb21lRGF0
YShzZWdtZW50LCBwb3NpdGlvbikpIHsKKyAgICAgICAgYXBwZW5kKHNlZ21lbnQsIGxlbmd0aCk7
CisgICAgICAgIHBvc2l0aW9uICs9IGxlbmd0aDsKKyAgICB9Cit9CisKIHZvaWQgU2hhcmVkQnVm
ZmVyOjphcHBlbmQoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIEFT
U0VSVCghbV9wdXJnZWFibGVCdWZmZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2hhcmVkQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZm
ZXIuaAppbmRleCA0ZjFkNjI5NmIyNDJmZTRkOTliMjIwNjNiN2NiMTA4ZjFmNWFiY2ZlLi42OGQ5
OTNhMzA3NTRhNzlmM2Q4YjU4NGFkMzg5NDhiYmRmMDM0NDI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TaGFyZWRCdWZmZXIuaApAQCAtODQsNiArODQsNyBAQCBwdWJsaWM6CiAKICAgICBib29s
IGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgpOyB9CiAKKyAgICB2b2lkIGFwcGVuZChT
aGFyZWRCdWZmZXIqKTsKICAgICB2b2lkIGFwcGVuZChjb25zdCBjaGFyKiwgdW5zaWduZWQpOwog
ICAgIHZvaWQgY2xlYXIoKTsKICAgICBjb25zdCBjaGFyKiBwbGF0Zm9ybURhdGEoKSBjb25zdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZTQ5MWZkZTU5YjJkNDFiMGI2M2RlNmYzZDgy
ZjliZDAxNjdmZDczZC4uNGMyZGE3NGFhYzhhOWQwNWFkMTdkNDM4YjcyMTU0MzZmMzA0OThhOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMS0wNS0zMSAg
SmF5IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIE1IVE1MIGdlbmVyYXRpb24gc3Vw
cG9ydCB0byBNSFRNTEFyY2hpdmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MTY5CisKKyAgICAgICAgKiBwdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIu
aDoKKyAgICAgICAgKiBzcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplVG9NSFRNTCk6CisKIDIwMTEtMDUtMzEgIENh
cnkgQ2xhcmsgIDxjYXJ5Y2xhcmtAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBF
cmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlBhZ2VTZXJpYWxpemVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdl
U2VyaWFsaXplci5oCmluZGV4IGExMDhhNjJjMDZlNDNjYWM4YTExZmQzNTRjYzI0NWI2N2RmNTA4
YzMuLmUyZGIwN2JlNDE4MDU3YjBlODZkMmE1YzgwNjg3ODdkZDBiY2ZlNzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaApAQCAtNTgs
NiArNTgsOSBAQCBwdWJsaWM6CiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgYWxzbyBzdHJpcHMtb3V0
IGFueSBzY3JpcHQgdGFnIG9yIGxpbmsgdG8gSmF2YVNjcmlwdC4KICAgICBXRUJLSVRfQVBJIHN0
YXRpYyB2b2lkIHNlcmlhbGl6ZShXZWJWaWV3KiwgV2ViVmVjdG9yPFJlc291cmNlPiopOwogCisg
ICAgLy8gU2VyaWFsaXplcyB0aGUgV2ViVmlldyBjb250ZW50cyB0byBhIE1IVE1MIHJlcHJlc2Vu
dGF0aW9uLgorICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYkNTdHJpbmcgc2VyaWFsaXplVG9NSFRN
TChXZWJWaWV3Kik7CisKICAgICAvLyBJTVBPUlRBTlQ6CiAgICAgLy8gVGhlIEFQSSBiZWxvdyBp
cyBhbiBvbGRlciBpbXBsZW1lbnRhdGlvbiBvZiBhIHBhZ2VzZXJpYWxpemF0aW9uIHRoYXQKICAg
ICAvLyB3aWxsIGJlIHJlbW92ZWQgc29vbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcAppbmRleCAyMzJlMjExNjAxNTljODg2ZDhlNGVkMTQw
MDg0YzZiNWNmNzMxZTUxLi5kM2I2MGMxMmU5ZmU4ZjFkODIxOWYyMjEyZDUwYjg5MWY5ODY2ZTM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXpl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIu
Y3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJNSFRNTEFy
Y2hpdmUuaCIKICNpbmNsdWRlICJQYWdlU2VyaWFsaXplci5oIgogI2luY2x1ZGUgIlZlY3Rvci5o
IgogCkBAIC0yMDAsNiArMjAxLDE1IEBAIHZvaWQgV2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6
ZShXZWJWaWV3KiB2aWV3LCBXZWJWZWN0b3I8V2ViUGFnZVNlcmlhbGl6ZXI6OlJlCiAgICAgKnJl
c291cmNlc1BhcmFtID0gcmVzdWx0OyAgICAgICAgIAogfQogCitXZWJDU3RyaW5nIFdlYlBhZ2VT
ZXJpYWxpemVyOjpzZXJpYWxpemVUb01IVE1MKFdlYlZpZXcqIHZpZXcpCit7CisgICAgV2ViRnJh
bWUqIHdlYkZyYW1lID0gc3RhdGljX2Nhc3Q8V2ViVmlld0ltcGwqPih2aWV3KS0+bWFpbkZyYW1l
KCk7CisgICAgRnJhbWUqIGZyYW1lID0gc3RhdGljX2Nhc3Q8V2ViRnJhbWVJbXBsKj4od2ViRnJh
bWUpLT5mcmFtZSgpOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1odG1sID0gTUhUTUxBcmNo
aXZlOjpnZW5lcmF0ZU1IVE1MRGF0YShmcmFtZS0+cGFnZSgpKTsKKyAgICAvLyBGSVhNRTogd2Ug
YXJlIGNvcHlpbmcgYWxsIHRoZSBkYXRhIGhlcmUuIElkZWFseSB3ZSB3b3VsZCBoYXZlIGEgV2Vi
U2hhcmVkRGF0YSgpLgorICAgIHJldHVybiBXZWJDU3RyaW5nKG1odG1sLT5kYXRhKCksIG1odG1s
LT5zaXplKCkpOworfQorCiBib29sIFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUoV2ViRnJh
bWUqIGZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVjdXJz
aXZlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlBhZ2VTZXJpYWxpemVy
Q2xpZW50KiBjbGllbnQsCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95519</attachid>
            <date>2011-05-31 17:35:26 -0700</date>
            <delta_ts>2011-06-01 11:24:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-7169-20110531173525.patch</filename>
            <type>text/plain</type>
            <size>18093</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODc3NDcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDlh
NjA2MjY2NDQ1Y2VmMmZiNWI4Yzg2ZThiNTQ4NTgyNTJkMmZjMzYuLjQwMmViZWNhYWE5ZWI2YTFi
MGNmNDMxNzkyY2JhZTk1MjhhMjVhZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDExLTA1LTMxICBKYXkgQ2l2ZWxsaSAgPGpjaXZlbGxpQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRl
ZCBhIG1ldGhvZCB0byBnZW5lcmF0ZSBSRkMgMjgyMiBjb21wbGlhbnQgZGF0ZSBzdHJpbmdzLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE2OQorCisg
ICAgICAgICogd3RmL0RhdGVNYXRoLmNwcDoKKyAgICAgICAgKFdURjo6dHdvRGlnaXRTdHJpbmdG
cm9tTnVtYmVyKToKKyAgICAgICAgKFdURjo6bWFrZVJGQzI4MjJEYXRlU3RyaW5nKToKKyAgICAg
ICAgKiB3dGYvRGF0ZU1hdGguaDoKKwogMjAxMS0wNS0zMCAgSG9qb25nIEhhbiAgPGhvam9uZy5o
YW5Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguY3BwCmluZGV4IDcwYzBjZjQ3ZjVmNzljYmZj
MzMxZjdhMTdmYTk3ZTlhN2NiYzY3ZGMuLjliMTVhZTExMzAzOWRjYTY2YTRhMTQ5OGNiMjUxZjhj
NWRjMmUwNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGgu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguY3BwCkBAIC05MCw3
ICs5MCw3IEBACiAjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1
ZGUgPHRpbWUuaD4KLQorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogI2lm
IEhBVkUoRVJSTk9fSCkKICNpbmNsdWRlIDxlcnJuby5oPgpAQCAtMTgwLDYgKzE4MCwxNCBAQCBz
dGF0aWMgaW5saW5lIGRvdWJsZSBtc1RvRGF5cyhkb3VibGUgbXMpCiAgICAgcmV0dXJuIGZsb29y
KG1zIC8gbXNQZXJEYXkpOwogfQogCitzdGF0aWMgU3RyaW5nIHR3b0RpZ2l0U3RyaW5nRnJvbU51
bWJlcihpbnQgbnVtYmVyKQoreworICAgIEFTU0VSVChudW1iZXIgPj0gMCAmJiBudW1iZXIgPCAx
MDApOworICAgIGlmIChudW1iZXIgPiA5KQorICAgICAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIo
bnVtYmVyKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygiMCIsIFN0cmluZzo6bnVtYmVyKG51bWJl
cikpOworfQorCiBpbnQgbXNUb1llYXIoZG91YmxlIG1zKQogewogICAgIGludCBhcHByb3hZZWFy
ID0gc3RhdGljX2Nhc3Q8aW50PihmbG9vcihtcyAvIChtc1BlckRheSAqIDM2NS4yNDI1KSkgKyAx
OTcwKTsKQEAgLTEwMjgsNiArMTAzNiwzNCBAQCBkb3VibGUgdGltZUNsaXAoZG91YmxlIHQpCiAg
ICAgICAgIHJldHVybiBOYU47CiAgICAgcmV0dXJuIHRydW5jKHQpOwogfQorCisvLyBTZWUgaHR0
cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNzZWN0aW9uLTMuMyBmb3IgbW9yZSBpbmZv
cm1hdGlvbi4KK1N0cmluZyBtYWtlUkZDMjgyMkRhdGVTdHJpbmcodW5zaWduZWQgZGF5T2ZXZWVr
LCB1bnNpZ25lZCBkYXksIHVuc2lnbmVkIG1vbnRoLCB1bnNpZ25lZCB5ZWFyLCB1bnNpZ25lZCBo
b3VycywgdW5zaWduZWQgbWludXRlcywgdW5zaWduZWQgc2Vjb25kcywgaW50IHV0Y09mZnNldCkK
K3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQod2Vla2RheU5hbWVbZGF5T2ZXZWVrXSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
IiwgIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpudW1iZXIoZGF5KSk7Cisg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
b250aE5hbWVbbW9udGhdKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICIpOworICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKFN0cmluZzo6bnVtYmVyKHllYXIpKTsKKyAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgiICIpOworCisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodHdvRGlnaXRTdHJp
bmdGcm9tTnVtYmVyKGhvdXJzKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJzonKTsKKyAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0d29EaWdpdFN0cmluZ0Zyb21OdW1iZXIobWludXRlcykp
OworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCc6Jyk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQodHdvRGlnaXRTdHJpbmdGcm9tTnVtYmVyKHNlY29uZHMpKTsKKyAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgnICcpOworCisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodXRjT2Zmc2V0ID4gMCA/
ICIrIiA6ICItIik7CisgICAgaW50IGFic29sdXRlVVRDT2Zmc2V0ID0gYWJzKHV0Y09mZnNldCk7
CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodHdvRGlnaXRTdHJpbmdGcm9tTnVtYmVyKGFic29s
dXRlVVRDT2Zmc2V0IC8gNjApKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0d29EaWdpdFN0
cmluZ0Zyb21OdW1iZXIoYWJzb2x1dGVVVENPZmZzZXQgJSA2MCkpOworCisgICAgcmV0dXJuIHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KIH0gLy8gbmFtZXNwYWNlIFdURgogCiAjaWYgVVNF
KEpTQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguaAppbmRleCAyYWMyODRlN2Q4ZTE1
OTg1ZDYyZTMzNDJhOTVmODdjZGZhZTU3Mzc2Li5jYzJlODQyMjZjODBmNTUwZGU3NDFkMTM5NmIw
NTNiMTdiM2QwZmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVN
YXRoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EYXRlTWF0aC5oCkBAIC01MSw2
ICs1MSw3IEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093
bkFycmF5UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25BcnJheVB0ci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBu
YW1lc3BhY2UgV1RGIHsKQEAgLTYxLDYgKzYyLDggQEAgaW50IGVxdWl2YWxlbnRZZWFyRm9yRFNU
KGludCB5ZWFyKTsKIGRvdWJsZSBwYXJzZUVTNURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0
ZXJzKGNvbnN0IGNoYXIqIGRhdGVTdHJpbmcpOwogZG91YmxlIHBhcnNlRGF0ZUZyb21OdWxsVGVy
bWluYXRlZENoYXJhY3RlcnMoY29uc3QgY2hhciogZGF0ZVN0cmluZyk7CiBkb3VibGUgdGltZUNs
aXAoZG91YmxlKTsKKy8vIGRheU9mV2VlazogWzAsIDZdIDAgYmVpbmcgTW9uZGF5LCBkYXk6IFsx
LCAzMV0sIG1vbnRoOiBbMCwgMTFdLCB5ZWFyOiBleDogMjAxMSwgaG91cnM6IFswLCAyM10sIG1p
bnV0ZXM6IFswLCA1OV0sIHNlY29uZHM6IFswLCA1OV0sIHV0Y09mZnNldDogWy03MjAsNzIwXS4g
CitTdHJpbmcgbWFrZVJGQzI4MjJEYXRlU3RyaW5nKHVuc2lnbmVkIGRheU9mV2VlaywgdW5zaWdu
ZWQgZGF5LCB1bnNpZ25lZCBtb250aCwgdW5zaWduZWQgeWVhciwgdW5zaWduZWQgaG91cnMsIHVu
c2lnbmVkIG1pbnV0ZXMsIHVuc2lnbmVkIHNlY29uZHMsIGludCB1dGNPZmZzZXQpOwogCiBpbmxp
bmUgZG91YmxlIGpzQ3VycmVudFRpbWUoKQogewpAQCAtMTA2LDYgKzEwOSw3IEBAIHVzaW5nIFdU
Rjo6bXNQZXJTZWNvbmQ7CiB1c2luZyBXVEY6Om1zVG9ZZWFyOwogdXNpbmcgV1RGOjpzZWNvbmRz
UGVyTWludXRlOwogdXNpbmcgV1RGOjpwYXJzZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0
ZXJzOwordXNpbmcgV1RGOjptYWtlUkZDMjgyMkRhdGVTdHJpbmc7CiB1c2luZyBXVEY6OmNhbGN1
bGF0ZVVUQ09mZnNldDsKIHVzaW5nIFdURjo6Y2FsY3VsYXRlRFNUT2Zmc2V0OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggYWFmNWFmYTFkMzJkNWE2ZTFiYWRjZmEyZmJlNGVlMDY4M2RjMmNkZi4uZWMxNmI0NTVi
NTU2NDRmYjFmMjAxNGY0N2QxMGZhN2U1NjkxMGMyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIy
IEBACisyMDExLTA1LTMxICBKYXkgQ2l2ZWxsaSAgPGpjaXZlbGxpQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgTUhU
TUwgZ2VuZXJhdGlvbiBzdXBwb3J0IHRvIE1IVE1MQXJjaGl2ZS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNjkKKworICAgICAgICAqIGxvYWRlci9h
cmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZW5lcmF0
ZVJhbmRvbUJvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OnJlcGxhY2VOb25QcmludGFibGVD
aGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1IVE1MQXJjaGl2ZTo6Z2VuZXJhdGVNSFRN
TERhdGEpOgorICAgICAgICAqIGxvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5oOgor
ICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJp
YWxpemVyOjpzZXJpYWxpemVDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFy
ZWRCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjphcHBlbmQpOgor
ICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oOgorCiAyMDExLTA1LTMxICBSb2IgQnVp
cyAgPHJidWlzQHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGlyayBTY2h1bHplLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNo
aXZlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2
ZS5jcHAKaW5kZXggMGQzMzIzN2I3MGY4MGVlZDcwMDc5Yzk4NmNlMDRiYmUzNTg5MjFlMC4uMTIy
YjhlZGU1OTRlN2UzZDliZjY1ODlmZThmYjgyMmRkNjNiYWMxNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCkBAIC0zMywx
MSArMzMsNTcgQEAKICNpZiBFTkFCTEUoTUhUTUwpCiAjaW5jbHVkZSAiTUhUTUxBcmNoaXZlLmgi
CiAKKyNpbmNsdWRlICJCYXNlNjQuaCIKKyNpbmNsdWRlICJDcnlwdG9ncmFwaGljYWxseVJhbmRv
bU51bWJlci5oIgorI2luY2x1ZGUgIkRhdGVNYXRoLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
KyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIk1IVE1MUGFyc2VyLmgiCi0jaW5jbHVkZSAi
TUlNRUhlYWRlci5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiUGFnZVNlcmlhbGl6ZXIuaCIKKyNpbmNsdWRlICJRdW90ZWRQcmlu
dGFibGUuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxzeXMvdGltZS5o
PgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY29uc3QgY2hhciogY29uc3Qg
cXVvdGVkUHJpbnRhYmxlID0gInF1b3RlZC1wcmludGFibGUiOworY29uc3QgY2hhciogY29uc3Qg
YmFzZTY0ID0gImJhc2U2NCI7CisKK3N0YXRpYyBTdHJpbmcgZ2VuZXJhdGVSYW5kb21Cb3VuZGFy
eSgpCit7CisgICAgLy8gVHJ5aW5nIHRvIGdlbmVyYXRlIHJhbmRvbSBib3VuZGFyaWVzIHNpbWls
YXIgdG8gSUUvVW5NSFQgKGV4OiAtLS0tPV9OZXh0UGFydF8wMDBfMDAxQl8wMUNDMTU3Qi45NkY4
MDhBMCkuCisgICAgY29uc3Qgc2l6ZV90IHJhbmRvbVZhbHVlc0xlbmd0aCA9IDEwOworICAgIGNo
YXIgcmFuZG9tVmFsdWVzW3JhbmRvbVZhbHVlc0xlbmd0aF07CisgICAgY3J5cHRvZ3JhcGhpY2Fs
bHlSYW5kb21WYWx1ZXMoJnJhbmRvbVZhbHVlcywgcmFuZG9tVmFsdWVzTGVuZ3RoKTsKKyAgICBT
dHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIi0t
LS09X05leHRQYXJ0XzAwMF8iKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJhbmRvbVZh
bHVlc0xlbmd0aDsgKytpKSB7CisgICAgICAgIGlmIChpID09IDIpCisgICAgICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnXycpOworICAgICAgICBlbHNlIGlmIChpID09IDYpCisgICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnLicpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChsb3dlck5pYmJsZVRvQVNDSUlIZXhEaWdpdChyYW5kb21WYWx1ZXNbaV0pKTsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodXBwZXJOaWJibGVUb0FTQ0lJSGV4RGlnaXQocmFuZG9t
VmFsdWVzW2ldKSk7CisgICAgfQorICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7
Cit9CisKK3N0YXRpYyBTdHJpbmcgcmVwbGFjZU5vblByaW50YWJsZUNoYXJhY3RlcnMoY29uc3Qg
U3RyaW5nJiB0ZXh0KQoreworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHRleHQubGVuZ3RoKCk7ICsraSkgeworICAgICAgaWYgKGlz
QVNDSUlQcmludGFibGUodGV4dFtpXSkpCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRl
eHRbaV0pOworICAgICAgZWxzZQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnPycpOwor
ICAgIH0KKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQorCiBNSFRNTEFy
Y2hpdmU6Ok1IVE1MQXJjaGl2ZSgpCiB7CiB9CkBAIC03MSw1ICsxMTcsOTcgQEAgUGFzc1JlZlB0
cjxNSFRNTEFyY2hpdmU+IE1IVE1MQXJjaGl2ZTo6Y3JlYXRlKGNvbnN0IEtVUkwmIHVybCwgU2hh
cmVkQnVmZmVyKiBkYXQKICAgICByZXR1cm4gbWFpbkFyY2hpdmUucmVsZWFzZSgpOwogfQogCitQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gTUhUTUxBcmNoaXZlOjpnZW5lcmF0ZU1IVE1MRGF0YShQ
YWdlKiBwYWdlKQoreworICAgIFZlY3RvcjxQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+IHJlc291
cmNlczsKKyAgICBQYWdlU2VyaWFsaXplciBwYWdlU2VyaWFsaXplcigmcmVzb3VyY2VzKTsKKyAg
ICBwYWdlU2VyaWFsaXplci5zZXJpYWxpemUocGFnZSk7CisKKyAgICBTdHJpbmcgYm91bmRhcnkg
PSBnZW5lcmF0ZVJhbmRvbUJvdW5kYXJ5KCk7CisgICAgU3RyaW5nIGVuZE9mUmVzb3VyY2VCb3Vu
ZGFyeSA9IG1ha2VTdHJpbmcoIi0tIiwgYm91bmRhcnksICJcclxuIik7CisKKyAgICBTdHJpbmcg
ZGF0ZVN0cmluZzsKKyAgICB0aW1ldmFsIHRpbWVWYWx1ZSA9IHsgMCB9OworICAgIGlmICghZ2V0
dGltZW9mZGF5KCZ0aW1lVmFsdWUsIDApKSB7CisgICAgICAgIHRtIHRpbWVBbmREYXRlID0geyAw
IH07CisgICAgICAgIGlmIChsb2NhbHRpbWVfcigmKHRpbWVWYWx1ZS50dl9zZWMpLCAmdGltZUFu
ZERhdGUpKQorICAgICAgICAgICAgZGF0ZVN0cmluZyA9IG1ha2VSRkMyODIyRGF0ZVN0cmluZyh0
aW1lQW5kRGF0ZS50bV93ZGF5LCB0aW1lQW5kRGF0ZS50bV9tZGF5LCB0aW1lQW5kRGF0ZS50bV9t
b24sIDE5MDAgKyB0aW1lQW5kRGF0ZS50bV95ZWFyLCB0aW1lQW5kRGF0ZS50bV9ob3VyLCB0aW1l
QW5kRGF0ZS50bV9taW4sIHRpbWVBbmREYXRlLnRtX3NlYywgY2FsY3VsYXRlVVRDT2Zmc2V0KCkg
LyAoMTAwMCAqIDYwKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0gZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAg
IFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgi
RnJvbTogPFNhdmVkIGJ5IFdlYktpdD5cclxuIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
IlN1YmplY3Q6ICIpOworICAgIC8vIFdlIHJlcGxhY2Ugbm9uIEFTQ0lJIGNoYXJhY3RlcnMgd2l0
aCAnPycgY2hhcmFjdGVycyB0byBtYXRjaCBJRSdzIGJlaGF2aW9yLgorICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHJlcGxhY2VOb25QcmludGFibGVDaGFyYWN0ZXJzKHBhZ2UtPm1haW5GcmFtZSgp
LT5kb2N1bWVudCgpLT50aXRsZSgpKSk7CisgICAgaWYgKCFkYXRlU3RyaW5nLmlzRW1wdHkoKSkg
eworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcbkRhdGU6ICIpOworICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChkYXRlU3RyaW5nKTsKKyAgICB9CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIlxyXG5NSU1FLVZlcnNpb246IDEuMFxyXG4iKTsKKyAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgiQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvcmVsYXRlZDtcclxuIik7CisgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIlx0dHlwZT1cIiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KHBhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5zdWdnZXN0ZWRNSU1FVHlwZSgpKTsKKyAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXCI7XHJcbiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCJcdGJvdW5kYXJ5PVwiIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoYm91bmRhcnkp
OworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcIlxyXG5cclxuIik7CisKKyAgICAvLyBXZSB1
c2UgdXRmOCgpIGJlbG93IGluc3RlYWQgb2YgYXNjaWkoKSBhcyBhc2NpaSgpIHJlcGxhY2VzIENS
TEZzIHdpdGggPz8gKHdlIHN0aWxsIG9ubHkgaGF2ZSBwdXQgQVNDSUkgY2hhcmFjdGVycyBpbiBp
dCkuCisgICAgQVNTRVJUKHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKS5jb250YWluc09ubHlBU0NJ
SSgpKTsKKyAgICBDU3RyaW5nIGFzY2lpU3RyaW5nID0gc3RyaW5nQnVpbGRlci50b1N0cmluZygp
LnV0ZjgoKTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtaHRtbERhdGEgPSBTaGFyZWRCdWZm
ZXI6OmNyZWF0ZSgpOworICAgIG1odG1sRGF0YS0+YXBwZW5kKGFzY2lpU3RyaW5nLmRhdGEoKSwg
YXNjaWlTdHJpbmcubGVuZ3RoKCkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXNv
dXJjZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgUGFnZVNlcmlhbGl6ZXI6OlJlc291
cmNlJiByZXNvdXJjZSA9IHJlc291cmNlc1tpXTsKKworICAgICAgICBzdHJpbmdCdWlsZGVyLmNs
ZWFyKCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGVuZE9mUmVzb3VyY2VCb3VuZGFy
eSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJDb250ZW50LVR5cGU6ICIpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyZXNvdXJjZS5taW1lVHlwZSk7CisKKyAgICAgICAg
Y29uc3QgY2hhciogY29udGVudEVuY29kaW5nID0gTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0
ZWRKYXZhU2NyaXB0TUlNRVR5cGUocmVzb3VyY2UubWltZVR5cGUpIHx8IE1JTUVUeXBlUmVnaXN0
cnk6OmlzU3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZShyZXNvdXJjZS5taW1lVHlwZSkgPyBxdW90
ZWRQcmludGFibGUgOiBiYXNlNjQ7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcclxu
Q29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKGNvbnRlbnRFbmNvZGluZyk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcclxu
Q29udGVudC1Mb2NhdGlvbjogIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJlc291
cmNlLnVybCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcclxuXHJcbiIpOworCisg
ICAgICAgIGFzY2lpU3RyaW5nID0gc3RyaW5nQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsKKyAg
ICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoYXNjaWlTdHJpbmcuZGF0YSgpLCBhc2NpaVN0cmluZy5s
ZW5ndGgoKSk7CisKKyAgICAgICAgLy8gRklYTUU6IGlkZWFsbHkgd2Ugd291bGQgZW5jb2RlIHRo
ZSBjb250ZW50IGFzIGEgc3RyZWFtIHdpdGhvdXQgaGF2aW5nIHRvIGZldGNoIGl0IGFsbC4KKyAg
ICAgICAgY29uc3QgY2hhciogZGF0YSA9IHJlc291cmNlLmRhdGEtPmRhdGEoKTsKKyAgICAgICAg
c2l6ZV90IGRhdGFMZW5ndGggPSByZXNvdXJjZS5kYXRhLT5zaXplKCk7CisgICAgICAgIFZlY3Rv
cjxjaGFyPiBlbmNvZGVkRGF0YTsKKyAgICAgICAgaWYgKCFzdHJjbXAoY29udGVudEVuY29kaW5n
LCBxdW90ZWRQcmludGFibGUpKSB7CisgICAgICAgICAgICBxdW90ZWRQcmludGFibGVFbmNvZGUo
ZGF0YSwgZGF0YUxlbmd0aCwgZW5jb2RlZERhdGEpOworICAgICAgICAgICAgbWh0bWxEYXRhLT5h
cHBlbmQoZW5jb2RlZERhdGEuZGF0YSgpLCBlbmNvZGVkRGF0YS5zaXplKCkpOworICAgICAgICAg
ICAgbWh0bWxEYXRhLT5hcHBlbmQoIlxyXG4iLCAyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIEFTU0VSVCghc3RyY21wKGNvbnRlbnRFbmNvZGluZywgYmFzZTY0KSk7CisgICAgICAg
ICAgICAvLyBXZSBhcmUgbm90IHNwZWNpZnlpbmcgaW5zZXJ0TEZzID0gdHJ1ZSBiZWxvdyBhcyBp
dCB3b3VsZCBjdXQgdGhlIGxpbmVzIHdpdGggTEZzIGFuZCBNSFRNTCByZXF1aXJlcyBDUkxGcy4K
KyAgICAgICAgICAgIGJhc2U2NEVuY29kZShkYXRhLCBkYXRhTGVuZ3RoLCBlbmNvZGVkRGF0YSk7
CisgICAgICAgICAgICBjb25zdCBzaXplX3QgbWF4aW11bUxpbmVMZW5ndGggPSA3NjsKKyAgICAg
ICAgICAgIHNpemVfdCBpbmRleCA9IDA7CisgICAgICAgICAgICBzaXplX3QgZW5jb2RlZERhdGFM
ZW5ndGggPSBlbmNvZGVkRGF0YS5zaXplKCk7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAg
ICAgICAgc2l6ZV90IGxpbmVMZW5ndGggPSBzdGQ6Om1pbihlbmNvZGVkRGF0YUxlbmd0aCAtIGlu
ZGV4LCBtYXhpbXVtTGluZUxlbmd0aCk7CisgICAgICAgICAgICAgICAgbWh0bWxEYXRhLT5hcHBl
bmQoZW5jb2RlZERhdGEuZGF0YSgpICsgaW5kZXgsIGxpbmVMZW5ndGgpOworICAgICAgICAgICAg
ICAgIG1odG1sRGF0YS0+YXBwZW5kKCJcclxuIiwgMik7CisgICAgICAgICAgICAgICAgaW5kZXgg
Kz0gbWF4aW11bUxpbmVMZW5ndGg7CisgICAgICAgICAgICB9IHdoaWxlIChpbmRleCA8IGVuY29k
ZWREYXRhTGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFzY2lpU3RyaW5nID0gbWFr
ZVN0cmluZygiLS0iLCBib3VuZGFyeSwgIi0tXHJcbiIpLnV0ZjgoKTsKKyAgICBtaHRtbERhdGEt
PmFwcGVuZChhc2NpaVN0cmluZy5kYXRhKCksIGFzY2lpU3RyaW5nLmxlbmd0aCgpKTsKKworICAg
IHJldHVybiBtaHRtbERhdGEucmVsZWFzZSgpOworfQorCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5oIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZlLmgKaW5kZXggMWIz
MWRjMzE1YmFiOGIxM2ZlMjM4MTIwYTQzYjNiMDJkOTg0YTc3OS4uODZmZTFjNzVmYWZhOWE2OTY1
ODg4OGIxYmQ3MmU2NzhmZGFhYWMyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZlLmgKQEAgLTM4LDYgKzM4LDggQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgTUhUTUxQYXJzZXI7CitjbGFzcyBQYWdlOworY2xhc3MgU2hh
cmVkQnVmZmVyOwogCiBjbGFzcyBNSFRNTEFyY2hpdmUgOiBwdWJsaWMgQXJjaGl2ZSB7CiBwdWJs
aWM6CkBAIC00Niw2ICs0OCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNSFRN
TEFyY2hpdmU+IGNyZWF0ZSgpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1IVE1MQXJjaGl2ZT4g
Y3JlYXRlKGNvbnN0IEtVUkwmLCBTaGFyZWRCdWZmZXIqKTsKIAorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gZ2VuZXJhdGVNSFRNTERhdGEoUGFnZSopOworCiBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBNSFRNTFBhcnNlcjsKICAgICBNSFRNTEFyY2hpdmUoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKaW5kZXggZDU2OTI2ZmExNWFjMjQ5OWJmMTY5
NjBkZmQ3MTIxYmYxZDU2NDEwYy4uZTE3Mzg3OTE4YTg1MTg2NmE5ZGI5ZWFiNGNhNDFjYzFkNDM2
ZTA5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKQEAgLTIwNiw4ICsy
MDYsMTIgQEAgdm9pZCBQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplRnJhbWUoRnJhbWUqIGZyYW1l
KQogCiAgICAgVmVjdG9yPE5vZGUqPiBub2RlczsKICAgICBTZXJpYWxpemVyTWFya3VwQWNjdW11
bGF0b3IgYWNjdW11bGF0b3IodGhpcywgZG9jdW1lbnQsICZub2Rlcyk7Ci0gICAgVGV4dEVuY29k
aW5nIHRleHRFbmNvZGluZyhUZXh0RW5jb2RpbmcoZG9jdW1lbnQtPmNoYXJzZXQoKSkpOwotICAg
IEFTU0VSVCh0ZXh0RW5jb2RpbmcuaXNWYWxpZCgpKTsKKyAgICBUZXh0RW5jb2RpbmcgdGV4dEVu
Y29kaW5nKGRvY3VtZW50LT5jaGFyc2V0KCkpOworICAgIENTdHJpbmcgZGF0YTsKKyAgICBpZiAo
IXRleHRFbmNvZGluZy5pc1ZhbGlkKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IGlmcmFtZXMgdXNl
ZCBhcyBpbWFnZXMgdHJpZ2dlciB0aGlzLiBXZSBzaG91bGQgZGVhbCB3aXRoIHRoZW0gY29ycmVj
dGx5LgorICAgICAgICByZXR1cm47CisgICAgfQogICAgIFN0cmluZyB0ZXh0ID0gYWNjdW11bGF0
b3Iuc2VyaWFsaXplTm9kZXMoZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLCAwLCBJbmNsdWRl
Tm9kZSk7CiAgICAgQ1N0cmluZyBmcmFtZUhUTUwgPSB0ZXh0RW5jb2RpbmcuZW5jb2RlKHRleHQu
Y2hhcmFjdGVycygpLCB0ZXh0Lmxlbmd0aCgpLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7CiAg
ICAgbV9yZXNvdXJjZXMtPmFwcGVuZChSZXNvdXJjZSh1cmwsIGRvY3VtZW50LT5zdWdnZXN0ZWRN
SU1FVHlwZSgpLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShmcmFtZUhUTUwuZGF0YSgpLCBmcmFtZUhU
TUwubGVuZ3RoKCkpKSk7CkBAIC0yNzQsNyArMjc4LDcgQEAgdm9pZCBQYWdlU2VyaWFsaXplcjo6
c2VyaWFsaXplQ1NTU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0LCBjb25zdCBL
VVIKIAogICAgIGlmICh1cmwuaXNWYWxpZCgpICYmICFtX3Jlc291cmNlVVJMcy5jb250YWlucyh1
cmwpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY2hlY2sgd2hldGhlciBhIGNoYXJz
ZXQgaGFzIGJlZW4gc3BlY2lmaWVkIGFuZCBpZiBub25lIHdhcyBmb3VuZCBhZGQgb25lLgotICAg
ICAgICBUZXh0RW5jb2RpbmcgdGV4dEVuY29kaW5nID0gVGV4dEVuY29kaW5nKHN0eWxlU2hlZXQt
PmNoYXJzZXQoKSk7CisgICAgICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2Rpbmcoc3R5bGVTaGVl
dC0+Y2hhcnNldCgpKTsKICAgICAgICAgQVNTRVJUKHRleHRFbmNvZGluZy5pc1ZhbGlkKCkpOwog
ICAgICAgICBTdHJpbmcgdGV4dFN0cmluZyA9IGNzc1RleHQudG9TdHJpbmcoKTsKICAgICAgICAg
Q1N0cmluZyB0ZXh0ID0gdGV4dEVuY29kaW5nLmVuY29kZSh0ZXh0U3RyaW5nLmNoYXJhY3RlcnMo
KSwgdGV4dFN0cmluZy5sZW5ndGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5kZXggMDkwMGFlNDIxZTM3NjRmZDJk
YTlhYjNmNDczODhhZDM2YjNjODhjYS4uYWQ4NjE4ZWI0YzkzY2E4OThhZDExMmNjZTQzMjIwNjgy
MDM3NGVhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCkBAIC0x
MTcsNiArMTE3LDE2IEBAIGNvbnN0IGNoYXIqIFNoYXJlZEJ1ZmZlcjo6ZGF0YSgpIGNvbnN0CiAg
ICAgcmV0dXJuIGJ1ZmZlcigpLmRhdGEoKTsKIH0KIAordm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVu
ZChTaGFyZWRCdWZmZXIqIGRhdGEpCit7CisgICAgY29uc3QgY2hhciogc2VnbWVudDsKKyAgICBz
aXplX3QgcG9zaXRpb24gPSAwOworICAgIHdoaWxlIChzaXplX3QgbGVuZ3RoID0gZGF0YS0+Z2V0
U29tZURhdGEoc2VnbWVudCwgcG9zaXRpb24pKSB7CisgICAgICAgIGFwcGVuZChzZWdtZW50LCBs
ZW5ndGgpOworICAgICAgICBwb3NpdGlvbiArPSBsZW5ndGg7CisgICAgfQorfQorCiB2b2lkIFNo
YXJlZEJ1ZmZlcjo6YXBwZW5kKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKIHsK
ICAgICBBU1NFUlQoIW1fcHVyZ2VhYmxlQnVmZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hh
cmVkQnVmZmVyLmgKaW5kZXggNGYxZDYyOTZiMjQyZmU0ZDk5YjIyMDYzYjdjYjEwOGYxZjVhYmNm
ZS4uNjhkOTkzYTMwNzU0YTc5ZjNkOGI1ODRhZDM4OTQ4YmJkZjAzNDQyNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKQEAgLTg0LDYgKzg0LDcgQEAgcHVibGljOgogCiAg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQogCisgICAgdm9pZCBh
cHBlbmQoU2hhcmVkQnVmZmVyKik7CiAgICAgdm9pZCBhcHBlbmQoY29uc3QgY2hhciosIHVuc2ln
bmVkKTsKICAgICB2b2lkIGNsZWFyKCk7CiAgICAgY29uc3QgY2hhciogcGxhdGZvcm1EYXRhKCkg
Y29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGU0OTFmZGU1OWIyZDQxYjBiNjNk
ZTZmM2Q4MmY5YmQwMTY3ZmQ3M2QuLjRjMmRhNzRhYWM4YTlkMDVhZDE3ZDQzOGI3MjE1NDM2ZjMw
NDk4YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEt
MDUtMzEgIEpheSBDaXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBNSFRNTCBnZW5lcmF0
aW9uIHN1cHBvcnQgdG8gTUhUTUxBcmNoaXZlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE2OQorCisgICAgICAgICogcHVibGljL1dlYlBhZ2VTZXJp
YWxpemVyLmg6CisgICAgICAgICogc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZVRvTUhUTUwpOgorCiAyMDExLTA1
LTMxICBDYXJ5IENsYXJrICA8Y2FyeWNsYXJrQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViUGFnZVNlcmlhbGl6ZXIuaAppbmRleCBhMTA4YTYyYzA2ZTQzY2FjOGExMWZkMzU0Y2MyNDVi
NjdkZjUwOGMzLi5lMmRiMDdiZTQxODA1N2IwZTg2ZDJhNWM4MDY4Nzg3ZGQwYmNmZTc5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgK
QEAgLTU4LDYgKzU4LDkgQEAgcHVibGljOgogICAgIC8vIE5vdGUgdGhhdCB0aGlzIGFsc28gc3Ry
aXBzLW91dCBhbnkgc2NyaXB0IHRhZyBvciBsaW5rIHRvIEphdmFTY3JpcHQuCiAgICAgV0VCS0lU
X0FQSSBzdGF0aWMgdm9pZCBzZXJpYWxpemUoV2ViVmlldyosIFdlYlZlY3RvcjxSZXNvdXJjZT4q
KTsKIAorICAgIC8vIFNlcmlhbGl6ZXMgdGhlIFdlYlZpZXcgY29udGVudHMgdG8gYSBNSFRNTCBy
ZXByZXNlbnRhdGlvbi4KKyAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJDU3RyaW5nIHNlcmlhbGl6
ZVRvTUhUTUwoV2ViVmlldyopOworCiAgICAgLy8gSU1QT1JUQU5UOgogICAgIC8vIFRoZSBBUEkg
YmVsb3cgaXMgYW4gb2xkZXIgaW1wbGVtZW50YXRpb24gb2YgYSBwYWdlc2VyaWFsaXphdGlvbiB0
aGF0CiAgICAgLy8gd2lsbCBiZSByZW1vdmVkIHNvb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAKaW5kZXggMjMyZTIxMTYwMTU5Yzg4NmQ4
ZTRlZDE0MDA4NGM2YjVjZjczMWU1MS4uNmRmODRiYjZiOTZhOGRkMzRjMjY4NmUyMDY2MTI4ZDdl
MGZmNWJiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNl
cmlhbGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJp
YWxpemVyLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAi
TUhUTUxBcmNoaXZlLmgiCiAjaW5jbHVkZSAiUGFnZVNlcmlhbGl6ZXIuaCIKICNpbmNsdWRlICJW
ZWN0b3IuaCIKIApAQCAtMjAwLDYgKzIwMSwxMyBAQCB2b2lkIFdlYlBhZ2VTZXJpYWxpemVyOjpz
ZXJpYWxpemUoV2ViVmlldyogdmlldywgV2ViVmVjdG9yPFdlYlBhZ2VTZXJpYWxpemVyOjpSZQog
ICAgICpyZXNvdXJjZXNQYXJhbSA9IHJlc3VsdDsgICAgICAgICAKIH0KIAorV2ViQ1N0cmluZyBX
ZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplVG9NSFRNTChXZWJWaWV3KiB2aWV3KQoreworICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1odG1sID0gTUhUTUxBcmNoaXZlOjpnZW5lcmF0ZU1IVE1M
RGF0YShzdGF0aWNfY2FzdDxXZWJWaWV3SW1wbCo+KHZpZXcpLT5wYWdlKCkpOworICAgIC8vIEZJ
WE1FOiB3ZSBhcmUgY29weWluZyBhbGwgdGhlIGRhdGEgaGVyZS4gSWRlYWx5IHdlIHdvdWxkIGhh
dmUgYSBXZWJTaGFyZWREYXRhKCkuCisgICAgcmV0dXJuIFdlYkNTdHJpbmcobWh0bWwtPmRhdGEo
KSwgbWh0bWwtPnNpemUoKSk7Cit9CisKIGJvb2wgV2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6
ZShXZWJGcmFtZSogZnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCByZWN1cnNpdmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViUGFnZVNl
cmlhbGl6ZXJDbGllbnQqIGNsaWVudCwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95633</attachid>
            <date>2011-06-01 11:24:56 -0700</date>
            <delta_ts>2011-06-01 15:21:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-7169-20110601112436.patch</filename>
            <type>text/plain</type>
            <size>18347</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODc4MTQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGZi
MmM3ZDVmNjljODQ3ZTA4NDVkNDU5N2YwYzg0ZTRjYTVmMDQyOGUuLjQ2OTczZDgzMmM2ZjhmNGE1
ZTE3ODFiM2UwODZhMmY0ZDE4OTEwNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDExLTA2LTAxICBKYXkgQ2l2ZWxsaSAgPGpjaXZlbGxpQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRl
ZCBhIG1ldGhvZCB0byBnZW5lcmF0ZSBSRkMgMjgyMiBjb21wbGlhbnQgZGF0ZSBzdHJpbmdzLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE2OQorCisg
ICAgICAgICogd3RmL0RhdGVNYXRoLmNwcDoKKyAgICAgICAgKFdURjo6dHdvRGlnaXRTdHJpbmdG
cm9tTnVtYmVyKToKKyAgICAgICAgKFdURjo6bWFrZVJGQzI4MjJEYXRlU3RyaW5nKToKKyAgICAg
ICAgKiB3dGYvRGF0ZU1hdGguaDoKKwogMjAxMS0wNi0wMSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQu
cmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQg
cjg3Nzg4LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EYXRlTWF0aC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmNwcAppbmRleCA3MGMwY2Y0
N2Y1Zjc5Y2JmYzMzMWY3YTE3ZmE5N2U5YTdjYmM2N2RjLi45YjE1YWUxMTMwMzlkY2E2NmE0YTE0
OThjYjI1MWY4YzVkYzJlMDc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L0RhdGVNYXRoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmNw
cApAQCAtOTAsNyArOTAsNyBAQAogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDxzdGRpbnQu
aD4KICNpbmNsdWRlIDx0aW1lLmg+Ci0KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CiAKICNpZiBIQVZFKEVSUk5PX0gpCiAjaW5jbHVkZSA8ZXJybm8uaD4KQEAgLTE4MCw2ICsx
ODAsMTQgQEAgc3RhdGljIGlubGluZSBkb3VibGUgbXNUb0RheXMoZG91YmxlIG1zKQogICAgIHJl
dHVybiBmbG9vcihtcyAvIG1zUGVyRGF5KTsKIH0KIAorc3RhdGljIFN0cmluZyB0d29EaWdpdFN0
cmluZ0Zyb21OdW1iZXIoaW50IG51bWJlcikKK3sKKyAgICBBU1NFUlQobnVtYmVyID49IDAgJiYg
bnVtYmVyIDwgMTAwKTsKKyAgICBpZiAobnVtYmVyID4gOSkKKyAgICAgICAgcmV0dXJuIFN0cmlu
Zzo6bnVtYmVyKG51bWJlcik7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIjAiLCBTdHJpbmc6Om51
bWJlcihudW1iZXIpKTsKK30KKwogaW50IG1zVG9ZZWFyKGRvdWJsZSBtcykKIHsKICAgICBpbnQg
YXBwcm94WWVhciA9IHN0YXRpY19jYXN0PGludD4oZmxvb3IobXMgLyAobXNQZXJEYXkgKiAzNjUu
MjQyNSkpICsgMTk3MCk7CkBAIC0xMDI4LDYgKzEwMzYsMzQgQEAgZG91YmxlIHRpbWVDbGlwKGRv
dWJsZSB0KQogICAgICAgICByZXR1cm4gTmFOOwogICAgIHJldHVybiB0cnVuYyh0KTsKIH0KKwor
Ly8gU2VlIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI4MjIjc2VjdGlvbi0zLjMgZm9y
IG1vcmUgaW5mb3JtYXRpb24uCitTdHJpbmcgbWFrZVJGQzI4MjJEYXRlU3RyaW5nKHVuc2lnbmVk
IGRheU9mV2VlaywgdW5zaWduZWQgZGF5LCB1bnNpZ25lZCBtb250aCwgdW5zaWduZWQgeWVhciwg
dW5zaWduZWQgaG91cnMsIHVuc2lnbmVkIG1pbnV0ZXMsIHVuc2lnbmVkIHNlY29uZHMsIGludCB1
dGNPZmZzZXQpCit7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHdlZWtkYXlOYW1lW2RheU9mV2Vla10pOworICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCIsICIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKFN0cmluZzo6bnVtYmVy
KGRheSkpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgIik7CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQobW9udGhOYW1lW21vbnRoXSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAi
KTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6Om51bWJlcih5ZWFyKSk7CisgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoIiAiKTsKKworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHR3
b0RpZ2l0U3RyaW5nRnJvbU51bWJlcihob3VycykpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCc6Jyk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodHdvRGlnaXRTdHJpbmdGcm9tTnVtYmVy
KG1pbnV0ZXMpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnOicpOworICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKHR3b0RpZ2l0U3RyaW5nRnJvbU51bWJlcihzZWNvbmRzKSk7CisgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoJyAnKTsKKworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHV0Y09m
ZnNldCA+IDAgPyAiKyIgOiAiLSIpOworICAgIGludCBhYnNvbHV0ZVVUQ09mZnNldCA9IGFicyh1
dGNPZmZzZXQpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHR3b0RpZ2l0U3RyaW5nRnJvbU51
bWJlcihhYnNvbHV0ZVVUQ09mZnNldCAvIDYwKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
dHdvRGlnaXRTdHJpbmdGcm9tTnVtYmVyKGFic29sdXRlVVRDT2Zmc2V0ICUgNjApKTsKKworICAg
IHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Cit9CiB9IC8vIG5hbWVzcGFjZSBXVEYK
IAogI2lmIFVTRShKU0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Rh
dGVNYXRoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmgKaW5kZXggMmFj
Mjg0ZTdkOGUxNTk4NWQ2MmUzMzQyYTk1Zjg3Y2RmYWU1NzM3Ni4uY2MyZTg0MjI2YzgwZjU1MGRl
NzQxZDEzOTZiMDUzYjE3YjNkMGZkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9EYXRlTWF0aC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGgu
aApAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1
ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duQXJyYXlQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFy
YW0uaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC02MSw2ICs2Miw4IEBAIGludCBlcXVpdmFsZW50
WWVhckZvckRTVChpbnQgeWVhcik7CiBkb3VibGUgcGFyc2VFUzVEYXRlRnJvbU51bGxUZXJtaW5h
dGVkQ2hhcmFjdGVycyhjb25zdCBjaGFyKiBkYXRlU3RyaW5nKTsKIGRvdWJsZSBwYXJzZURhdGVG
cm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKGNvbnN0IGNoYXIqIGRhdGVTdHJpbmcpOwogZG91
YmxlIHRpbWVDbGlwKGRvdWJsZSk7CisvLyBkYXlPZldlZWs6IFswLCA2XSAwIGJlaW5nIE1vbmRh
eSwgZGF5OiBbMSwgMzFdLCBtb250aDogWzAsIDExXSwgeWVhcjogZXg6IDIwMTEsIGhvdXJzOiBb
MCwgMjNdLCBtaW51dGVzOiBbMCwgNTldLCBzZWNvbmRzOiBbMCwgNTldLCB1dGNPZmZzZXQ6IFst
NzIwLDcyMF0uIAorU3RyaW5nIG1ha2VSRkMyODIyRGF0ZVN0cmluZyh1bnNpZ25lZCBkYXlPZldl
ZWssIHVuc2lnbmVkIGRheSwgdW5zaWduZWQgbW9udGgsIHVuc2lnbmVkIHllYXIsIHVuc2lnbmVk
IGhvdXJzLCB1bnNpZ25lZCBtaW51dGVzLCB1bnNpZ25lZCBzZWNvbmRzLCBpbnQgdXRjT2Zmc2V0
KTsKIAogaW5saW5lIGRvdWJsZSBqc0N1cnJlbnRUaW1lKCkKIHsKQEAgLTEwNiw2ICsxMDksNyBA
QCB1c2luZyBXVEY6Om1zUGVyU2Vjb25kOwogdXNpbmcgV1RGOjptc1RvWWVhcjsKIHVzaW5nIFdU
Rjo6c2Vjb25kc1Blck1pbnV0ZTsKIHVzaW5nIFdURjo6cGFyc2VEYXRlRnJvbU51bGxUZXJtaW5h
dGVkQ2hhcmFjdGVyczsKK3VzaW5nIFdURjo6bWFrZVJGQzI4MjJEYXRlU3RyaW5nOwogdXNpbmcg
V1RGOjpjYWxjdWxhdGVVVENPZmZzZXQ7CiB1c2luZyBXVEY6OmNhbGN1bGF0ZURTVE9mZnNldDsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMjIxNzA0M2Fm
YzRlZTljNDg3ZWUwMGQ3ZjliNjQyOWMwZjZjOGRmMS4uZDAwNmNhZjMyNGFmYzUwYWRmOGVjYzY4
ZjkyZWY5NGNlZWJlMTM4MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDYtMDEgIEpheSBD
aXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBNSFRNTCBnZW5lcmF0aW9uIHN1cHBvcnQg
dG8gTUhUTUxBcmNoaXZlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzE2OQorCisgICAgICAgICogbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNo
aXZlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlUmFuZG9tQm91bmRhcnkpOgorICAg
ICAgICAoV2ViQ29yZTo6cmVwbGFjZU5vblByaW50YWJsZUNoYXJhY3RlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6TUhUTUxBcmNoaXZlOjpnZW5lcmF0ZU1IVE1MRGF0YSk6CisgICAgICAgICogbG9h
ZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZlLmg6CisgICAgICAgICogcGFnZS9QYWdlU2Vy
aWFsaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXpl
RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNTU1N0
eWxlU2hlZXQpOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmFwcGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vU2hh
cmVkQnVmZmVyLmg6CisKIDIwMTEtMDYtMDEgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCmlu
ZGV4IDBkMzMyMzdiNzBmODBlZWQ3MDA3OWM5ODZjZTA0YmJlMzU4OTIxZTAuLjBmYTE5NDA2MDI1
ZWEyZTI4MGM1MGUwZTA4MmI0NjljOGEwYTg4MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZlLmNwcApAQCAtMzMsMTEgKzMzLDYx
IEBACiAjaWYgRU5BQkxFKE1IVE1MKQogI2luY2x1ZGUgIk1IVE1MQXJjaGl2ZS5oIgogCisjaW5j
bHVkZSAiQmFzZTY0LmgiCisjaW5jbHVkZSAiQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIu
aCIKKyNpbmNsdWRlICJEYXRlTWF0aC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJNSFRNTFBhcnNlci5oIgotI2luY2x1ZGUgIk1JTUVIZWFk
ZXIuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiUGFnZS5oIgor
I2luY2x1ZGUgIlBhZ2VTZXJpYWxpemVyLmgiCisjaW5jbHVkZSAiUXVvdGVkUHJpbnRhYmxlLmgi
CisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaWYgT1MoV0lORE9XUykKKyNpbmNsdWRlIDx0
aW1lLmg+CisjZWxzZQorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NvbnN0IGNoYXIqIGNvbnN0IHF1b3RlZFByaW50YWJs
ZSA9ICJxdW90ZWQtcHJpbnRhYmxlIjsKK2NvbnN0IGNoYXIqIGNvbnN0IGJhc2U2NCA9ICJiYXNl
NjQiOworCitzdGF0aWMgU3RyaW5nIGdlbmVyYXRlUmFuZG9tQm91bmRhcnkoKQoreworICAgIC8v
IFRyeWluZyB0byBnZW5lcmF0ZSByYW5kb20gYm91bmRhcmllcyBzaW1pbGFyIHRvIElFL1VuTUhU
IChleDogLS0tLT1fTmV4dFBhcnRfMDAwXzAwMUJfMDFDQzE1N0IuOTZGODA4QTApLgorICAgIGNv
bnN0IHNpemVfdCByYW5kb21WYWx1ZXNMZW5ndGggPSAxMDsKKyAgICBjaGFyIHJhbmRvbVZhbHVl
c1tyYW5kb21WYWx1ZXNMZW5ndGhdOworICAgIGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVz
KCZyYW5kb21WYWx1ZXMsIHJhbmRvbVZhbHVlc0xlbmd0aCk7CisgICAgU3RyaW5nQnVpbGRlciBz
dHJpbmdCdWlsZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCItLS0tPV9OZXh0UGFydF8w
MDBfIik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByYW5kb21WYWx1ZXNMZW5ndGg7ICsr
aSkgeworICAgICAgICBpZiAoaSA9PSAyKQorICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoJ18nKTsKKyAgICAgICAgZWxzZSBpZiAoaSA9PSA2KQorICAgICAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoJy4nKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobG93ZXJOaWJi
bGVUb0FTQ0lJSGV4RGlnaXQocmFuZG9tVmFsdWVzW2ldKSk7CisgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHVwcGVyTmliYmxlVG9BU0NJSUhleERpZ2l0KHJhbmRvbVZhbHVlc1tpXSkpOwor
ICAgIH0KKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQorCitzdGF0aWMg
U3RyaW5nIHJlcGxhY2VOb25QcmludGFibGVDaGFyYWN0ZXJzKGNvbnN0IFN0cmluZyYgdGV4dCkK
K3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB0ZXh0Lmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKGlzQVNDSUlQcmludGFi
bGUodGV4dFtpXSkpCisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0ZXh0W2ldKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJz8nKTsKKyAg
ICB9CisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKwogTUhUTUxBcmNo
aXZlOjpNSFRNTEFyY2hpdmUoKQogewogfQpAQCAtNzEsNSArMTIxLDEwMSBAQCBQYXNzUmVmUHRy
PE1IVE1MQXJjaGl2ZT4gTUhUTUxBcmNoaXZlOjpjcmVhdGUoY29uc3QgS1VSTCYgdXJsLCBTaGFy
ZWRCdWZmZXIqIGRhdAogICAgIHJldHVybiBtYWluQXJjaGl2ZS5yZWxlYXNlKCk7CiB9CiAKK1Bh
c3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBNSFRNTEFyY2hpdmU6OmdlbmVyYXRlTUhUTUxEYXRhKFBh
Z2UqIHBhZ2UpCit7CisgICAgVmVjdG9yPFBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT4gcmVzb3Vy
Y2VzOworICAgIFBhZ2VTZXJpYWxpemVyIHBhZ2VTZXJpYWxpemVyKCZyZXNvdXJjZXMpOworICAg
IHBhZ2VTZXJpYWxpemVyLnNlcmlhbGl6ZShwYWdlKTsKKworICAgIFN0cmluZyBib3VuZGFyeSA9
IGdlbmVyYXRlUmFuZG9tQm91bmRhcnkoKTsKKyAgICBTdHJpbmcgZW5kT2ZSZXNvdXJjZUJvdW5k
YXJ5ID0gbWFrZVN0cmluZygiLS0iLCBib3VuZGFyeSwgIlxyXG4iKTsKKworICAgIFN0cmluZyBk
YXRlU3RyaW5nOworICAgIHRtIHRpbWVBbmREYXRlID0geyAwIH07CisjaWYgT1MoV0lORE9XUykK
KyAgICBfX3RpbWU2NF90IHRpbWU7CisgICAgX3RpbWU2NCgmdGltZSk7IAorICAgIGlmIChfbG9j
YWx0aW1lNjRfcygmdGltZUFuZERhdGUsICZ0aW1lKSkKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisjZWxzZQorICAgIHRpbWV2YWwgdGltZVZhbHVlID0geyAwIH07CisgICAgaWYgKGdl
dHRpbWVvZmRheSgmdGltZVZhbHVlLCAwKSB8fCAhbG9jYWx0aW1lX3IoJih0aW1lVmFsdWUudHZf
c2VjKSwgJnRpbWVBbmREYXRlKSkKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5k
aWYKKyAgICBpZiAodGltZUFuZERhdGUudG1feWVhcikKKyAgICAgICAgZGF0ZVN0cmluZyA9IG1h
a2VSRkMyODIyRGF0ZVN0cmluZyh0aW1lQW5kRGF0ZS50bV93ZGF5LCB0aW1lQW5kRGF0ZS50bV9t
ZGF5LCB0aW1lQW5kRGF0ZS50bV9tb24sIDE5MDAgKyB0aW1lQW5kRGF0ZS50bV95ZWFyLCB0aW1l
QW5kRGF0ZS50bV9ob3VyLCB0aW1lQW5kRGF0ZS50bV9taW4sIHRpbWVBbmREYXRlLnRtX3NlYywg
Y2FsY3VsYXRlVVRDT2Zmc2V0KCkgLyAoMTAwMCAqIDYwKSk7CisKKyAgICBTdHJpbmdCdWlsZGVy
IHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIkZyb206IDxTYXZlZCBi
eSBXZWJLaXQ+XHJcbiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJTdWJqZWN0OiAiKTsK
KyAgICAvLyBXZSByZXBsYWNlIG5vbiBBU0NJSSBjaGFyYWN0ZXJzIHdpdGggJz8nIGNoYXJhY3Rl
cnMgdG8gbWF0Y2ggSUUncyBiZWhhdmlvci4KKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyZXBs
YWNlTm9uUHJpbnRhYmxlQ2hhcmFjdGVycyhwYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+
dGl0bGUoKSkpOworICAgIGlmICghZGF0ZVN0cmluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIlxyXG5EYXRlOiAiKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoZGF0ZVN0cmluZyk7CisgICAgfQorICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcclxu
TUlNRS1WZXJzaW9uOiAxLjBcclxuIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIkNvbnRl
bnQtVHlwZTogbXVsdGlwYXJ0L3JlbGF0ZWQ7XHJcbiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCJcdHR5cGU9XCIiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChwYWdlLT5tYWluRnJh
bWUoKS0+ZG9jdW1lbnQoKS0+c3VnZ2VzdGVkTUlNRVR5cGUoKSk7CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIlwiO1xyXG4iKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHRib3VuZGFy
eT1cIiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGJvdW5kYXJ5KTsKKyAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgiXCJcclxuXHJcbiIpOworCisgICAgLy8gV2UgdXNlIHV0ZjgoKSBiZWxv
dyBpbnN0ZWFkIG9mIGFzY2lpKCkgYXMgYXNjaWkoKSByZXBsYWNlcyBDUkxGcyB3aXRoID8/ICh3
ZSBzdGlsbCBvbmx5IGhhdmUgcHV0IEFTQ0lJIGNoYXJhY3RlcnMgaW4gaXQpLgorICAgIEFTU0VS
VChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkuY29udGFpbnNPbmx5QVNDSUkoKSk7CisgICAgQ1N0
cmluZyBhc2NpaVN0cmluZyA9IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKS51dGY4KCk7CisgICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbWh0bWxEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoKTsK
KyAgICBtaHRtbERhdGEtPmFwcGVuZChhc2NpaVN0cmluZy5kYXRhKCksIGFzY2lpU3RyaW5nLmxl
bmd0aCgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzb3VyY2VzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGNvbnN0IFBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZSYgcmVzb3VyY2Ug
PSByZXNvdXJjZXNbaV07CisKKyAgICAgICAgc3RyaW5nQnVpbGRlci5jbGVhcigpOworICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChlbmRPZlJlc291cmNlQm91bmRhcnkpOworICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgiQ29udGVudC1UeXBlOiAiKTsKKyAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQocmVzb3VyY2UubWltZVR5cGUpOworCisgICAgICAgIGNvbnN0IGNoYXIqIGNv
bnRlbnRFbmNvZGluZyA9IE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSmF2YVNjcmlwdE1J
TUVUeXBlKHJlc291cmNlLm1pbWVUeXBlKSB8fCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRl
ZE5vbkltYWdlTUlNRVR5cGUocmVzb3VyY2UubWltZVR5cGUpID8gcXVvdGVkUHJpbnRhYmxlIDog
YmFzZTY0OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcbkNvbnRlbnQtVHJhbnNm
ZXItRW5jb2Rpbmc6ICIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChjb250ZW50RW5j
b2RpbmcpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcbkNvbnRlbnQtTG9jYXRp
b246ICIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyZXNvdXJjZS51cmwpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcblxyXG4iKTsKKworICAgICAgICBhc2NpaVN0
cmluZyA9IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKS51dGY4KCk7CisgICAgICAgIG1odG1sRGF0
YS0+YXBwZW5kKGFzY2lpU3RyaW5nLmRhdGEoKSwgYXNjaWlTdHJpbmcubGVuZ3RoKCkpOworCisg
ICAgICAgIC8vIEZJWE1FOiBpZGVhbGx5IHdlIHdvdWxkIGVuY29kZSB0aGUgY29udGVudCBhcyBh
IHN0cmVhbSB3aXRob3V0IGhhdmluZyB0byBmZXRjaCBpdCBhbGwuCisgICAgICAgIGNvbnN0IGNo
YXIqIGRhdGEgPSByZXNvdXJjZS5kYXRhLT5kYXRhKCk7CisgICAgICAgIHNpemVfdCBkYXRhTGVu
Z3RoID0gcmVzb3VyY2UuZGF0YS0+c2l6ZSgpOworICAgICAgICBWZWN0b3I8Y2hhcj4gZW5jb2Rl
ZERhdGE7CisgICAgICAgIGlmICghc3RyY21wKGNvbnRlbnRFbmNvZGluZywgcXVvdGVkUHJpbnRh
YmxlKSkgeworICAgICAgICAgICAgcXVvdGVkUHJpbnRhYmxlRW5jb2RlKGRhdGEsIGRhdGFMZW5n
dGgsIGVuY29kZWREYXRhKTsKKyAgICAgICAgICAgIG1odG1sRGF0YS0+YXBwZW5kKGVuY29kZWRE
YXRhLmRhdGEoKSwgZW5jb2RlZERhdGEuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1odG1sRGF0YS0+
YXBwZW5kKCJcclxuIiwgMik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQo
IXN0cmNtcChjb250ZW50RW5jb2RpbmcsIGJhc2U2NCkpOworICAgICAgICAgICAgLy8gV2UgYXJl
IG5vdCBzcGVjaWZ5aW5nIGluc2VydExGcyA9IHRydWUgYmVsb3cgYXMgaXQgd291bGQgY3V0IHRo
ZSBsaW5lcyB3aXRoIExGcyBhbmQgTUhUTUwgcmVxdWlyZXMgQ1JMRnMuCisgICAgICAgICAgICBi
YXNlNjRFbmNvZGUoZGF0YSwgZGF0YUxlbmd0aCwgZW5jb2RlZERhdGEpOworICAgICAgICAgICAg
Y29uc3Qgc2l6ZV90IG1heGltdW1MaW5lTGVuZ3RoID0gNzY7CisgICAgICAgICAgICBzaXplX3Qg
aW5kZXggPSAwOworICAgICAgICAgICAgc2l6ZV90IGVuY29kZWREYXRhTGVuZ3RoID0gZW5jb2Rl
ZERhdGEuc2l6ZSgpOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIHNpemVfdCBs
aW5lTGVuZ3RoID0gc3RkOjptaW4oZW5jb2RlZERhdGFMZW5ndGggLSBpbmRleCwgbWF4aW11bUxp
bmVMZW5ndGgpOworICAgICAgICAgICAgICAgIG1odG1sRGF0YS0+YXBwZW5kKGVuY29kZWREYXRh
LmRhdGEoKSArIGluZGV4LCBsaW5lTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBtaHRtbERhdGEt
PmFwcGVuZCgiXHJcbiIsIDIpOworICAgICAgICAgICAgICAgIGluZGV4ICs9IG1heGltdW1MaW5l
TGVuZ3RoOworICAgICAgICAgICAgfSB3aGlsZSAoaW5kZXggPCBlbmNvZGVkRGF0YUxlbmd0aCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhc2NpaVN0cmluZyA9IG1ha2VTdHJpbmcoIi0tIiwg
Ym91bmRhcnksICItLVxyXG4iKS51dGY4KCk7CisgICAgbWh0bWxEYXRhLT5hcHBlbmQoYXNjaWlT
dHJpbmcuZGF0YSgpLCBhc2NpaVN0cmluZy5sZW5ndGgoKSk7CisKKyAgICByZXR1cm4gbWh0bWxE
YXRhLnJlbGVhc2UoKTsKK30KKwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuaCBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5oCmluZGV4IDFiMzFkYzMxNWJhYjhiMTNm
ZTIzODEyMGE0M2IzYjAyZDk4NGE3NzkuLjg2ZmUxYzc1ZmFmYTlhNjk2NTg4ODhiMWJkNzJlNjc4
ZmRhYWFjMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1s
L01IVE1MQXJjaGl2ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1s
L01IVE1MQXJjaGl2ZS5oCkBAIC0zOCw2ICszOCw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIE1IVE1MUGFyc2VyOworY2xhc3MgUGFnZTsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKIAog
Y2xhc3MgTUhUTUxBcmNoaXZlIDogcHVibGljIEFyY2hpdmUgewogcHVibGljOgpAQCAtNDYsNiAr
NDgsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TUhUTUxBcmNoaXZlPiBjcmVh
dGUoKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNSFRNTEFyY2hpdmU+IGNyZWF0ZShjb25zdCBL
VVJMJiwgU2hhcmVkQnVmZmVyKik7CiAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+IGdlbmVyYXRlTUhUTUxEYXRhKFBhZ2UqKTsKKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgTUhUTUxQYXJzZXI7CiAgICAgTUhUTUxBcmNoaXZlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZVNlcmlhbGl6ZXIuY3BwCmluZGV4IGQ1NjkyNmZhMTVhYzI0OTliZjE2OTYwZGZkNzEyMWJmMWQ1
NjQxMGMuLmUxNzM4NzkxOGE4NTE4NjZhOWRiOWVhYjRjYTQxY2MxZDQzNmUwOTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC0yMDYsOCArMjA2LDEyIEBAIHZvaWQg
UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKEZyYW1lKiBmcmFtZSkKIAogICAgIFZlY3Rv
cjxOb2RlKj4gbm9kZXM7CiAgICAgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yIGFjY3VtdWxh
dG9yKHRoaXMsIGRvY3VtZW50LCAmbm9kZXMpOwotICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2Rp
bmcoVGV4dEVuY29kaW5nKGRvY3VtZW50LT5jaGFyc2V0KCkpKTsKLSAgICBBU1NFUlQodGV4dEVu
Y29kaW5nLmlzVmFsaWQoKSk7CisgICAgVGV4dEVuY29kaW5nIHRleHRFbmNvZGluZyhkb2N1bWVu
dC0+Y2hhcnNldCgpKTsKKyAgICBDU3RyaW5nIGRhdGE7CisgICAgaWYgKCF0ZXh0RW5jb2Rpbmcu
aXNWYWxpZCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBpZnJhbWVzIHVzZWQgYXMgaW1hZ2VzIHRy
aWdnZXIgdGhpcy4gV2Ugc2hvdWxkIGRlYWwgd2l0aCB0aGVtIGNvcnJlY3RseS4KKyAgICAgICAg
cmV0dXJuOworICAgIH0KICAgICBTdHJpbmcgdGV4dCA9IGFjY3VtdWxhdG9yLnNlcmlhbGl6ZU5v
ZGVzKGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSwgMCwgSW5jbHVkZU5vZGUpOwogICAgIENT
dHJpbmcgZnJhbWVIVE1MID0gdGV4dEVuY29kaW5nLmVuY29kZSh0ZXh0LmNoYXJhY3RlcnMoKSwg
dGV4dC5sZW5ndGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwogICAgIG1fcmVzb3VyY2Vz
LT5hcHBlbmQoUmVzb3VyY2UodXJsLCBkb2N1bWVudC0+c3VnZ2VzdGVkTUlNRVR5cGUoKSwgU2hh
cmVkQnVmZmVyOjpjcmVhdGUoZnJhbWVIVE1MLmRhdGEoKSwgZnJhbWVIVE1MLmxlbmd0aCgpKSkp
OwpAQCAtMjc0LDcgKzI3OCw3IEBAIHZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNTU1N0
eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCwgY29uc3QgS1VSCiAKICAgICBpZiAo
dXJsLmlzVmFsaWQoKSAmJiAhbV9yZXNvdXJjZVVSTHMuY29udGFpbnModXJsKSkgewogICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNoZWNrIHdoZXRoZXIgYSBjaGFyc2V0IGhhcyBiZWVuIHNw
ZWNpZmllZCBhbmQgaWYgbm9uZSB3YXMgZm91bmQgYWRkIG9uZS4KLSAgICAgICAgVGV4dEVuY29k
aW5nIHRleHRFbmNvZGluZyA9IFRleHRFbmNvZGluZyhzdHlsZVNoZWV0LT5jaGFyc2V0KCkpOwor
ICAgICAgICBUZXh0RW5jb2RpbmcgdGV4dEVuY29kaW5nKHN0eWxlU2hlZXQtPmNoYXJzZXQoKSk7
CiAgICAgICAgIEFTU0VSVCh0ZXh0RW5jb2RpbmcuaXNWYWxpZCgpKTsKICAgICAgICAgU3RyaW5n
IHRleHRTdHJpbmcgPSBjc3NUZXh0LnRvU3RyaW5nKCk7CiAgICAgICAgIENTdHJpbmcgdGV4dCA9
IHRleHRFbmNvZGluZy5lbmNvZGUodGV4dFN0cmluZy5jaGFyYWN0ZXJzKCksIHRleHRTdHJpbmcu
bGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TaGFyZWRCdWZmZXIuY3BwCmluZGV4IDA5MDBhZTQyMWUzNzY0ZmQyZGE5YWIzZjQ3Mzg4YWQz
NmIzYzg4Y2EuLmFkODYxOGViNGM5M2NhODk4YWQxMTJjY2U0MzIyMDY4MjAzNzRlYTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcApAQCAtMTE3LDYgKzExNywxNiBA
QCBjb25zdCBjaGFyKiBTaGFyZWRCdWZmZXI6OmRhdGEoKSBjb25zdAogICAgIHJldHVybiBidWZm
ZXIoKS5kYXRhKCk7CiB9CiAKK3ZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoU2hhcmVkQnVmZmVy
KiBkYXRhKQoreworICAgIGNvbnN0IGNoYXIqIHNlZ21lbnQ7CisgICAgc2l6ZV90IHBvc2l0aW9u
ID0gMDsKKyAgICB3aGlsZSAoc2l6ZV90IGxlbmd0aCA9IGRhdGEtPmdldFNvbWVEYXRhKHNlZ21l
bnQsIHBvc2l0aW9uKSkgeworICAgICAgICBhcHBlbmQoc2VnbWVudCwgbGVuZ3RoKTsKKyAgICAg
ICAgcG9zaXRpb24gKz0gbGVuZ3RoOworICAgIH0KK30KKwogdm9pZCBTaGFyZWRCdWZmZXI6OmFw
cGVuZChjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgQVNTRVJUKCFt
X3B1cmdlYWJsZUJ1ZmZlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
aGFyZWRCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCmlu
ZGV4IDRmMWQ2Mjk2YjI0MmZlNGQ5OWIyMjA2M2I3Y2IxMDhmMWY1YWJjZmUuLjY4ZDk5M2EzMDc1
NGE3OWYzZDhiNTg0YWQzODk0OGJiZGYwMzQ0MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1No
YXJlZEJ1ZmZlci5oCkBAIC04NCw2ICs4NCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7IH0KIAorICAgIHZvaWQgYXBwZW5kKFNoYXJlZEJ1
ZmZlciopOwogICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CiAgICAgdm9p
ZCBjbGVhcigpOwogICAgIGNvbnN0IGNoYXIqIHBsYXRmb3JtRGF0YSgpIGNvbnN0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDBh
M2ExZDgwYzgzNWVlM2YzZTllZDI4Y2JjZDZiZWM0ZTNhZTIzMDAuLjhlZDdhOGQ3YTVmMmJkOGM0
M2MxMmQ2N2M4MTQxYjkyYmJmOWM4YjgKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NCBAQAorMjAxMS0wNi0wMSAgSmF5IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIE1I
VE1MIGdlbmVyYXRpb24gc3VwcG9ydCB0byBNSFRNTEFyY2hpdmUuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTY5CisKKyAgICAgICAgKiBwdWJsaWMv
V2ViUGFnZVNlcmlhbGl6ZXIuaDoKKyAgICAgICAgKiBzcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplVG9NSFRNTCk6
CisKIDIwMTEtMDYtMDEgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI4Nzc4OC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmggYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oCmluZGV4IGExMDhh
NjJjMDZlNDNjYWM4YTExZmQzNTRjYzI0NWI2N2RmNTA4YzMuLmUyZGIwN2JlNDE4MDU3YjBlODZk
MmE1YzgwNjg3ODdkZDBiY2ZlNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaApAQCAtNTgsNiArNTgsOSBAQCBwdWJsaWM6CiAgICAg
Ly8gTm90ZSB0aGF0IHRoaXMgYWxzbyBzdHJpcHMtb3V0IGFueSBzY3JpcHQgdGFnIG9yIGxpbmsg
dG8gSmF2YVNjcmlwdC4KICAgICBXRUJLSVRfQVBJIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZShXZWJW
aWV3KiwgV2ViVmVjdG9yPFJlc291cmNlPiopOwogCisgICAgLy8gU2VyaWFsaXplcyB0aGUgV2Vi
VmlldyBjb250ZW50cyB0byBhIE1IVE1MIHJlcHJlc2VudGF0aW9uLgorICAgIFdFQktJVF9BUEkg
c3RhdGljIFdlYkNTdHJpbmcgc2VyaWFsaXplVG9NSFRNTChXZWJWaWV3Kik7CisKICAgICAvLyBJ
TVBPUlRBTlQ6CiAgICAgLy8gVGhlIEFQSSBiZWxvdyBpcyBhbiBvbGRlciBpbXBsZW1lbnRhdGlv
biBvZiBhIHBhZ2VzZXJpYWxpemF0aW9uIHRoYXQKICAgICAvLyB3aWxsIGJlIHJlbW92ZWQgc29v
bi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxp
emVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNw
cAppbmRleCAyMzJlMjExNjAxNTljODg2ZDhlNGVkMTQwMDg0YzZiNWNmNzMxZTUxLi42ZGY4NGJi
NmI5NmE4ZGQzNGMyNjg2ZTIwNjYxMjhkN2UwZmY1YmJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAj
aW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2lu
Y2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJNSFRNTEFyY2hpdmUuaCIKICNpbmNsdWRlICJQYWdl
U2VyaWFsaXplci5oIgogI2luY2x1ZGUgIlZlY3Rvci5oIgogCkBAIC0yMDAsNiArMjAxLDEzIEBA
IHZvaWQgV2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShXZWJWaWV3KiB2aWV3LCBXZWJWZWN0
b3I8V2ViUGFnZVNlcmlhbGl6ZXI6OlJlCiAgICAgKnJlc291cmNlc1BhcmFtID0gcmVzdWx0OyAg
ICAgICAgIAogfQogCitXZWJDU3RyaW5nIFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVUb01I
VE1MKFdlYlZpZXcqIHZpZXcpCit7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbWh0bWwgPSBN
SFRNTEFyY2hpdmU6OmdlbmVyYXRlTUhUTUxEYXRhKHN0YXRpY19jYXN0PFdlYlZpZXdJbXBsKj4o
dmlldyktPnBhZ2UoKSk7CisgICAgLy8gRklYTUU6IHdlIGFyZSBjb3B5aW5nIGFsbCB0aGUgZGF0
YSBoZXJlLiBJZGVhbHkgd2Ugd291bGQgaGF2ZSBhIFdlYlNoYXJlZERhdGEoKS4KKyAgICByZXR1
cm4gV2ViQ1N0cmluZyhtaHRtbC0+ZGF0YSgpLCBtaHRtbC0+c2l6ZSgpKTsKK30KKwogYm9vbCBX
ZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKFdlYkZyYW1lKiBmcmFtZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlY3Vyc2l2ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXZWJQYWdlU2VyaWFsaXplckNsaWVudCogY2xpZW50LAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95673</attachid>
            <date>2011-06-01 15:19:49 -0700</date>
            <delta_ts>2011-06-01 16:55:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-7169-20110601151928.patch</filename>
            <type>text/plain</type>
            <size>19002</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODc4MTQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCm9sZCBtb2Rl
IDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggZmIyYzdkNWY2OWM4NDdlMDg0NWQ0NTk3ZjBj
ODRlNGNhNWYwNDI4ZS4uMTc1ZmM3NGZkY2U2MzNhNGUzMWJkYTliNTNjOWI0MzVhMTlmYTAyNgot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMS0wNi0wMSAgSmF5IENpdmVs
bGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSBtZXRob2QgdG8gZ2VuZXJhdGUgUkZDIDI4MjIg
Y29tcGxpYW50IGRhdGUgc3RyaW5ncy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTcxNjkKKworICAgICAgICAqIHd0Zi9EYXRlTWF0aC5jcHA6CisgICAg
ICAgIChXVEY6OnR3b0RpZ2l0U3RyaW5nRnJvbU51bWJlcik6CisgICAgICAgIChXVEY6OnJldHJp
ZXZlQ3VycmVudERhdGVBbmRUaW1lKToKKyAgICAgICAgKFdURjo6bWFrZVJGQzI4MjJEYXRlU3Ry
aW5nKToKKyAgICAgICAgKiB3dGYvRGF0ZU1hdGguaDoKKwogMjAxMS0wNi0wMSAgU2hlcmlmZiBC
b3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjg3Nzg4LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9EYXRlTWF0aC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmNwcApp
bmRleCA3MGMwY2Y0N2Y1Zjc5Y2JmYzMzMWY3YTE3ZmE5N2U5YTdjYmM2N2RjLi5jOWU1MDJkZGI3
YjY1Yzg4MmY4OTM2NTgxNjcxOTNjZTE0MWU4NjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL0RhdGVNYXRoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L0RhdGVNYXRoLmNwcApAQCAtOTAsNyArOTAsNyBAQAogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNs
dWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDx0aW1lLmg+Ci0KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAKICNpZiBIQVZFKEVSUk5PX0gpCiAjaW5jbHVkZSA8ZXJybm8uaD4K
QEAgLTE4MCw2ICsxODAsMTQgQEAgc3RhdGljIGlubGluZSBkb3VibGUgbXNUb0RheXMoZG91Ymxl
IG1zKQogICAgIHJldHVybiBmbG9vcihtcyAvIG1zUGVyRGF5KTsKIH0KIAorc3RhdGljIFN0cmlu
ZyB0d29EaWdpdFN0cmluZ0Zyb21OdW1iZXIoaW50IG51bWJlcikKK3sKKyAgICBBU1NFUlQobnVt
YmVyID49IDAgJiYgbnVtYmVyIDwgMTAwKTsKKyAgICBpZiAobnVtYmVyID4gOSkKKyAgICAgICAg
cmV0dXJuIFN0cmluZzo6bnVtYmVyKG51bWJlcik7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIjAi
LCBTdHJpbmc6Om51bWJlcihudW1iZXIpKTsKK30KKwogaW50IG1zVG9ZZWFyKGRvdWJsZSBtcykK
IHsKICAgICBpbnQgYXBwcm94WWVhciA9IHN0YXRpY19jYXN0PGludD4oZmxvb3IobXMgLyAobXNQ
ZXJEYXkgKiAzNjUuMjQyNSkpICsgMTk3MCk7CkBAIC0xMDI4LDYgKzEwMzYsNTYgQEAgZG91Ymxl
IHRpbWVDbGlwKGRvdWJsZSB0KQogICAgICAgICByZXR1cm4gTmFOOwogICAgIHJldHVybiB0cnVu
Yyh0KTsKIH0KKwordm9pZCByZXRyaWV2ZUN1cnJlbnREYXRlQW5kVGltZSh1bnNpZ25lZCYgZGF5
T2ZXZWVrLCB1bnNpZ25lZCYgZGF5LCB1bnNpZ25lZCYgbW9udGgsIHVuc2lnbmVkJiB5ZWFyLCB1
bnNpZ25lZCYgaG91cnMsIHVuc2lnbmVkJiBtaW51dGVzLCB1bnNpZ25lZCYgc2Vjb25kcykKK3sK
KyAgICB0bSB0aW1lQW5kRGF0ZSA9IHsgMCB9OworI2lmIE9TKFdJTkRPV1MpCisgICAgX190aW1l
NjRfdCB0aW1lOworICAgIF90aW1lNjQoJnRpbWUpOyAKKyAgICBpZiAoX2xvY2FsdGltZTY0X3Mo
JnRpbWVBbmREYXRlLCAmdGltZSkpCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2Vs
c2UKKyAgICB0aW1ldmFsIHRpbWVWYWx1ZSA9IHsgMCB9OworICAgIGlmIChnZXR0aW1lb2ZkYXko
JnRpbWVWYWx1ZSwgMCkgfHwgIWxvY2FsdGltZV9yKCYodGltZVZhbHVlLnR2X3NlYyksICZ0aW1l
QW5kRGF0ZSkpCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgZGF5
T2ZXZWVrID0gdGltZUFuZERhdGUudG1fd2RheTsKKyAgICBkYXkgPSB0aW1lQW5kRGF0ZS50bV9t
ZGF5OworICAgIG1vbnRoID0gdGltZUFuZERhdGUudG1fbW9uOworICAgIHllYXIgPSAxOTAwICsg
dGltZUFuZERhdGUudG1feWVhcjsKKyAgICBob3VycyA9IHRpbWVBbmREYXRlLnRtX2hvdXI7Cisg
ICAgbWludXRlcyA9IHRpbWVBbmREYXRlLnRtX21pbjsKKyAgICBzZWNvbmRzID0gdGltZUFuZERh
dGUudG1fc2VjOworfQorCisvLyBTZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgy
MiNzZWN0aW9uLTMuMyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KK1N0cmluZyBtYWtlUkZDMjgyMkRh
dGVTdHJpbmcodW5zaWduZWQgZGF5T2ZXZWVrLCB1bnNpZ25lZCBkYXksIHVuc2lnbmVkIG1vbnRo
LCB1bnNpZ25lZCB5ZWFyLCB1bnNpZ25lZCBob3VycywgdW5zaWduZWQgbWludXRlcywgdW5zaWdu
ZWQgc2Vjb25kcywgaW50IHV0Y09mZnNldCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1
aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQod2Vla2RheU5hbWVbZGF5T2ZXZWVrXSk7
CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwgIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoU3RyaW5nOjpudW1iZXIoZGF5KSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAiKTsK
KyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtb250aE5hbWVbbW9udGhdKTsKKyAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgiICIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKFN0cmluZzo6bnVt
YmVyKHllYXIpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICIpOworCisgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQodHdvRGlnaXRTdHJpbmdGcm9tTnVtYmVyKGhvdXJzKSk7CisgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoJzonKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0d29EaWdp
dFN0cmluZ0Zyb21OdW1iZXIobWludXRlcykpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCc6
Jyk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodHdvRGlnaXRTdHJpbmdGcm9tTnVtYmVyKHNl
Y29uZHMpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnICcpOworCisgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQodXRjT2Zmc2V0ID4gMCA/ICIrIiA6ICItIik7CisgICAgaW50IGFic29sdXRl
VVRDT2Zmc2V0ID0gYWJzKHV0Y09mZnNldCk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodHdv
RGlnaXRTdHJpbmdGcm9tTnVtYmVyKGFic29sdXRlVVRDT2Zmc2V0IC8gNjApKTsKKyAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCh0d29EaWdpdFN0cmluZ0Zyb21OdW1iZXIoYWJzb2x1dGVVVENPZmZz
ZXQgJSA2MCkpOworCisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KIH0g
Ly8gbmFtZXNwYWNlIFdURgogCiAjaWYgVVNFKEpTQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0
ZU1hdGguaAppbmRleCAyYWMyODRlN2Q4ZTE1OTg1ZDYyZTMzNDJhOTVmODdjZGZhZTU3Mzc2Li43
ZjhiNDI1NGM1OGE1MzE4ODYwMTY3M2Y4MjgyYjNkNWMyMWQ5NzI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9EYXRlTWF0aC5oCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bh
c3NPd25BcnJheVB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogI2luY2x1
ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTYxLDYgKzYyLDkg
QEAgaW50IGVxdWl2YWxlbnRZZWFyRm9yRFNUKGludCB5ZWFyKTsKIGRvdWJsZSBwYXJzZUVTNURh
dGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKGNvbnN0IGNoYXIqIGRhdGVTdHJpbmcpOwog
ZG91YmxlIHBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3RlcnMoY29uc3QgY2hhciog
ZGF0ZVN0cmluZyk7CiBkb3VibGUgdGltZUNsaXAoZG91YmxlKTsKKy8vIGRheU9mV2VlazogWzAs
IDZdIDAgYmVpbmcgTW9uZGF5LCBkYXk6IFsxLCAzMV0sIG1vbnRoOiBbMCwgMTFdLCB5ZWFyOiBl
eDogMjAxMSwgaG91cnM6IFswLCAyM10sIG1pbnV0ZXM6IFswLCA1OV0sIHNlY29uZHM6IFswLCA1
OV0sIHV0Y09mZnNldDogWy03MjAsNzIwXS4gCit2b2lkIHJldHJpZXZlQ3VycmVudERhdGVBbmRU
aW1lKHVuc2lnbmVkJiBkYXlPZldlZWssIHVuc2lnbmVkJiBkYXksIHVuc2lnbmVkJiBtb250aCwg
dW5zaWduZWQmIHllYXIsIHVuc2lnbmVkJiBob3VycywgdW5zaWduZWQmIG1pbnV0ZXMsIHVuc2ln
bmVkJiBzZWNvbmRzKTsKK1N0cmluZyBtYWtlUkZDMjgyMkRhdGVTdHJpbmcodW5zaWduZWQgZGF5
T2ZXZWVrLCB1bnNpZ25lZCBkYXksIHVuc2lnbmVkIG1vbnRoLCB1bnNpZ25lZCB5ZWFyLCB1bnNp
Z25lZCBob3VycywgdW5zaWduZWQgbWludXRlcywgdW5zaWduZWQgc2Vjb25kcywgaW50IHV0Y09m
ZnNldCk7CiAKIGlubGluZSBkb3VibGUganNDdXJyZW50VGltZSgpCiB7CkBAIC0xMDYsNiArMTEw
LDggQEAgdXNpbmcgV1RGOjptc1BlclNlY29uZDsKIHVzaW5nIFdURjo6bXNUb1llYXI7CiB1c2lu
ZyBXVEY6OnNlY29uZHNQZXJNaW51dGU7CiB1c2luZyBXVEY6OnBhcnNlRGF0ZUZyb21OdWxsVGVy
bWluYXRlZENoYXJhY3RlcnM7Cit1c2luZyBXVEY6OnJldHJpZXZlQ3VycmVudERhdGVBbmRUaW1l
OwordXNpbmcgV1RGOjptYWtlUkZDMjgyMkRhdGVTdHJpbmc7CiB1c2luZyBXVEY6OmNhbGN1bGF0
ZVVUQ09mZnNldDsKIHVzaW5nIFdURjo6Y2FsY3VsYXRlRFNUT2Zmc2V0OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKb2xk
IG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAyMjE3MDQzYWZjNGVlOWM0ODdlZTAw
ZDdmOWI2NDI5YzBmNmM4ZGYxLi5kMDA2Y2FmMzI0YWZjNTBhZGY4ZWNjNjhmOTJlZjk0Y2VlYmUx
MzgwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMS0wNi0wMSAgSmF5IENpdmVsbGkgIDxqY2l2
ZWxsaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkaW5nIE1IVE1MIGdlbmVyYXRpb24gc3VwcG9ydCB0byBNSFRNTEFyY2hp
dmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTY5
CisKKyAgICAgICAgKiBsb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Z2VuZXJhdGVSYW5kb21Cb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3Jl
OjpyZXBsYWNlTm9uUHJpbnRhYmxlQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpNSFRN
TEFyY2hpdmU6OmdlbmVyYXRlTUhUTUxEYXRhKToKKyAgICAgICAgKiBsb2FkZXIvYXJjaGl2ZS9t
aHRtbC9NSFRNTEFyY2hpdmUuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplQ1NTU3R5bGVTaGVldCk6Cisg
ICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlcjo6YXBwZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoK
KwogMjAxMS0wNi0wMSAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHAKaW5kZXggMGQzMzIzN2I3
MGY4MGVlZDcwMDc5Yzk4NmNlMDRiYmUzNTg5MjFlMC4uNDcxZmRjNzYwMDUwZmFjMjEwZDYwOWYz
NWIxNTc1NzE2YjdhMmUyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hp
dmUvbWh0bWwvTUhUTUxBcmNoaXZlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJj
aGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwCkBAIC0zMywxMSArMzMsNTYgQEAKICNpZiBFTkFC
TEUoTUhUTUwpCiAjaW5jbHVkZSAiTUhUTUxBcmNoaXZlLmgiCiAKKyNpbmNsdWRlICJCYXNlNjQu
aCIKKyNpbmNsdWRlICJDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oIgorI2luY2x1ZGUg
IkRhdGVNYXRoLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIk1IVE1MUGFyc2VyLmgiCi0jaW5jbHVkZSAiTUlNRUhlYWRlci5oIgorI2luY2x1
ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFn
ZVNlcmlhbGl6ZXIuaCIKKyNpbmNsdWRlICJRdW90ZWRQcmludGFibGUuaCIKKyNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NvbnN0
IGNoYXIqIGNvbnN0IHF1b3RlZFByaW50YWJsZSA9ICJxdW90ZWQtcHJpbnRhYmxlIjsKK2NvbnN0
IGNoYXIqIGNvbnN0IGJhc2U2NCA9ICJiYXNlNjQiOworCitzdGF0aWMgU3RyaW5nIGdlbmVyYXRl
UmFuZG9tQm91bmRhcnkoKQoreworICAgIC8vIFRyeWluZyB0byBnZW5lcmF0ZSByYW5kb20gYm91
bmRhcmllcyBzaW1pbGFyIHRvIElFL1VuTUhUIChleDogLS0tLT1fTmV4dFBhcnRfMDAwXzAwMUJf
MDFDQzE1N0IuOTZGODA4QTApLgorICAgIGNvbnN0IHNpemVfdCByYW5kb21WYWx1ZXNMZW5ndGgg
PSAxMDsKKyAgICBjaGFyIHJhbmRvbVZhbHVlc1tyYW5kb21WYWx1ZXNMZW5ndGhdOworICAgIGNy
eXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzKCZyYW5kb21WYWx1ZXMsIHJhbmRvbVZhbHVlc0xl
bmd0aCk7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCItLS0tPV9OZXh0UGFydF8wMDBfIik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCByYW5kb21WYWx1ZXNMZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoaSA9PSAyKQorICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ18nKTsKKyAgICAgICAgZWxzZSBpZiAoaSA9
PSA2KQorICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJy4nKTsKKyAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQobG93ZXJOaWJibGVUb0FTQ0lJSGV4RGlnaXQocmFuZG9tVmFsdWVz
W2ldKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHVwcGVyTmliYmxlVG9BU0NJSUhl
eERpZ2l0KHJhbmRvbVZhbHVlc1tpXSkpOworICAgIH0KKyAgICByZXR1cm4gc3RyaW5nQnVpbGRl
ci50b1N0cmluZygpOworfQorCitzdGF0aWMgU3RyaW5nIHJlcGxhY2VOb25QcmludGFibGVDaGFy
YWN0ZXJzKGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1
aWxkZXI7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aCgpOyArK2kpIHsK
KyAgICAgICAgaWYgKGlzQVNDSUlQcmludGFibGUodGV4dFtpXSkpCisgICAgICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCh0ZXh0W2ldKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoJz8nKTsKKyAgICB9CisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKTsKK30KKwogTUhUTUxBcmNoaXZlOjpNSFRNTEFyY2hpdmUoKQogewogfQpAQCAt
NzEsNSArMTE2LDkxIEBAIFBhc3NSZWZQdHI8TUhUTUxBcmNoaXZlPiBNSFRNTEFyY2hpdmU6OmNy
ZWF0ZShjb25zdCBLVVJMJiB1cmwsIFNoYXJlZEJ1ZmZlciogZGF0CiAgICAgcmV0dXJuIG1haW5B
cmNoaXZlLnJlbGVhc2UoKTsKIH0KIAorUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IE1IVE1MQXJj
aGl2ZTo6Z2VuZXJhdGVNSFRNTERhdGEoUGFnZSogcGFnZSkKK3sKKyAgICBWZWN0b3I8UGFnZVNl
cmlhbGl6ZXI6OlJlc291cmNlPiByZXNvdXJjZXM7CisgICAgUGFnZVNlcmlhbGl6ZXIgcGFnZVNl
cmlhbGl6ZXIoJnJlc291cmNlcyk7CisgICAgcGFnZVNlcmlhbGl6ZXIuc2VyaWFsaXplKHBhZ2Up
OworCisgICAgU3RyaW5nIGJvdW5kYXJ5ID0gZ2VuZXJhdGVSYW5kb21Cb3VuZGFyeSgpOworICAg
IFN0cmluZyBlbmRPZlJlc291cmNlQm91bmRhcnkgPSBtYWtlU3RyaW5nKCItLSIsIGJvdW5kYXJ5
LCAiXHJcbiIpOworCisgICAgU3RyaW5nIGRhdGVTdHJpbmc7CisgICAgdW5zaWduZWQgZGF5T2ZX
ZWVrID0gMCwgZGF5ID0wLCBtb250aCA9IDAsIHllYXIgPSAwLCBob3VycyA9IDAsIG1pbnV0ZXMg
PSAwLCBzZWNvbmRzID0gMDsKKyAgICByZXRyaWV2ZUN1cnJlbnREYXRlQW5kVGltZShkYXlPZldl
ZWssIGRheSwgbW9udGgsIHllYXIsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKTsKKyAgICBkYXRl
U3RyaW5nID0gbWFrZVJGQzI4MjJEYXRlU3RyaW5nKGRheU9mV2VlaywgZGF5LCBtb250aCwgeWVh
ciwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGNhbGN1bGF0ZVVUQ09mZnNldCgpIC8gKDEwMDAg
KiA2MCkpOworCisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCJGcm9tOiA8U2F2ZWQgYnkgV2ViS2l0PlxyXG4iKTsKKyAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgiU3ViamVjdDogIik7CisgICAgLy8gV2UgcmVwbGFjZSBub24gQVNDSUkg
Y2hhcmFjdGVycyB3aXRoICc/JyBjaGFyYWN0ZXJzIHRvIG1hdGNoIElFJ3MgYmVoYXZpb3IuCisg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocmVwbGFjZU5vblByaW50YWJsZUNoYXJhY3RlcnMocGFn
ZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPnRpdGxlKCkpKTsKKyAgICBpZiAoIWRhdGVTdHJp
bmcuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcclxuRGF0ZTog
Iik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGRhdGVTdHJpbmcpOworICAgIH0KKyAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHJcbk1JTUUtVmVyc2lvbjogMS4wXHJcbiIpOworICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZWxhdGVkO1xy
XG4iKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXHR0eXBlPVwiIik7CisgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQocGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPnN1Z2dlc3RlZE1J
TUVUeXBlKCkpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcIjtcclxuIik7CisgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIlx0Ym91bmRhcnk9XCIiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChib3VuZGFyeSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlwiXHJcblxyXG4iKTsK
KworICAgIC8vIFdlIHVzZSB1dGY4KCkgYmVsb3cgaW5zdGVhZCBvZiBhc2NpaSgpIGFzIGFzY2lp
KCkgcmVwbGFjZXMgQ1JMRnMgd2l0aCA/PyAod2Ugc3RpbGwgb25seSBoYXZlIHB1dCBBU0NJSSBj
aGFyYWN0ZXJzIGluIGl0KS4KKyAgICBBU1NFUlQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpLmNv
bnRhaW5zT25seUFTQ0lJKCkpOworICAgIENTdHJpbmcgYXNjaWlTdHJpbmcgPSBzdHJpbmdCdWls
ZGVyLnRvU3RyaW5nKCkudXRmOCgpOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1odG1sRGF0
YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCk7CisgICAgbWh0bWxEYXRhLT5hcHBlbmQoYXNjaWlT
dHJpbmcuZGF0YSgpLCBhc2NpaVN0cmluZy5sZW5ndGgoKSk7CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHJlc291cmNlcy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBQYWdlU2Vy
aWFsaXplcjo6UmVzb3VyY2UmIHJlc291cmNlID0gcmVzb3VyY2VzW2ldOworCisgICAgICAgIHN0
cmluZ0J1aWxkZXIuY2xlYXIoKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZW5kT2ZS
ZXNvdXJjZUJvdW5kYXJ5KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIkNvbnRlbnQt
VHlwZTogIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJlc291cmNlLm1pbWVUeXBl
KTsKKworICAgICAgICBjb25zdCBjaGFyKiBjb250ZW50RW5jb2RpbmcgPSBNSU1FVHlwZVJlZ2lz
dHJ5Ojppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZShyZXNvdXJjZS5taW1lVHlwZSkgfHwg
TUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlKHJlc291cmNlLm1p
bWVUeXBlKSA/IHF1b3RlZFByaW50YWJsZSA6IGJhc2U2NDsKKyAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIlxyXG5Db250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiAiKTsKKyAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoY29udGVudEVuY29kaW5nKTsKKyAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIlxyXG5Db250ZW50LUxvY2F0aW9uOiAiKTsKKyAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQocmVzb3VyY2UudXJsKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlxy
XG5cclxuIik7CisKKyAgICAgICAgYXNjaWlTdHJpbmcgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5n
KCkudXRmOCgpOworICAgICAgICBtaHRtbERhdGEtPmFwcGVuZChhc2NpaVN0cmluZy5kYXRhKCks
IGFzY2lpU3RyaW5nLmxlbmd0aCgpKTsKKworICAgICAgICAvLyBGSVhNRTogaWRlYWxseSB3ZSB3
b3VsZCBlbmNvZGUgdGhlIGNvbnRlbnQgYXMgYSBzdHJlYW0gd2l0aG91dCBoYXZpbmcgdG8gZmV0
Y2ggaXQgYWxsLgorICAgICAgICBjb25zdCBjaGFyKiBkYXRhID0gcmVzb3VyY2UuZGF0YS0+ZGF0
YSgpOworICAgICAgICBzaXplX3QgZGF0YUxlbmd0aCA9IHJlc291cmNlLmRhdGEtPnNpemUoKTsK
KyAgICAgICAgVmVjdG9yPGNoYXI+IGVuY29kZWREYXRhOworICAgICAgICBpZiAoIXN0cmNtcChj
b250ZW50RW5jb2RpbmcsIHF1b3RlZFByaW50YWJsZSkpIHsKKyAgICAgICAgICAgIHF1b3RlZFBy
aW50YWJsZUVuY29kZShkYXRhLCBkYXRhTGVuZ3RoLCBlbmNvZGVkRGF0YSk7CisgICAgICAgICAg
ICBtaHRtbERhdGEtPmFwcGVuZChlbmNvZGVkRGF0YS5kYXRhKCksIGVuY29kZWREYXRhLnNpemUo
KSk7CisgICAgICAgICAgICBtaHRtbERhdGEtPmFwcGVuZCgiXHJcbiIsIDIpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKCFzdHJjbXAoY29udGVudEVuY29kaW5nLCBiYXNl
NjQpKTsKKyAgICAgICAgICAgIC8vIFdlIGFyZSBub3Qgc3BlY2lmeWluZyBpbnNlcnRMRnMgPSB0
cnVlIGJlbG93IGFzIGl0IHdvdWxkIGN1dCB0aGUgbGluZXMgd2l0aCBMRnMgYW5kIE1IVE1MIHJl
cXVpcmVzIENSTEZzLgorICAgICAgICAgICAgYmFzZTY0RW5jb2RlKGRhdGEsIGRhdGFMZW5ndGgs
IGVuY29kZWREYXRhKTsKKyAgICAgICAgICAgIGNvbnN0IHNpemVfdCBtYXhpbXVtTGluZUxlbmd0
aCA9IDc2OworICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKKyAgICAgICAgICAgIHNpemVf
dCBlbmNvZGVkRGF0YUxlbmd0aCA9IGVuY29kZWREYXRhLnNpemUoKTsKKyAgICAgICAgICAgIGRv
IHsKKyAgICAgICAgICAgICAgICBzaXplX3QgbGluZUxlbmd0aCA9IHN0ZDo6bWluKGVuY29kZWRE
YXRhTGVuZ3RoIC0gaW5kZXgsIG1heGltdW1MaW5lTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBt
aHRtbERhdGEtPmFwcGVuZChlbmNvZGVkRGF0YS5kYXRhKCkgKyBpbmRleCwgbGluZUxlbmd0aCk7
CisgICAgICAgICAgICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoIlxyXG4iLCAyKTsKKyAgICAgICAg
ICAgICAgICBpbmRleCArPSBtYXhpbXVtTGluZUxlbmd0aDsKKyAgICAgICAgICAgIH0gd2hpbGUg
KGluZGV4IDwgZW5jb2RlZERhdGFMZW5ndGgpOworICAgICAgICB9CisgICAgfQorCisgICAgYXNj
aWlTdHJpbmcgPSBtYWtlU3RyaW5nKCItLSIsIGJvdW5kYXJ5LCAiLS1cclxuIikudXRmOCgpOwor
ICAgIG1odG1sRGF0YS0+YXBwZW5kKGFzY2lpU3RyaW5nLmRhdGEoKSwgYXNjaWlTdHJpbmcubGVu
Z3RoKCkpOworCisgICAgcmV0dXJuIG1odG1sRGF0YS5yZWxlYXNlKCk7Cit9CisKIH0KICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxB
cmNoaXZlLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hp
dmUuaAppbmRleCAxYjMxZGMzMTViYWI4YjEzZmUyMzgxMjBhNDNiM2IwMmQ5ODRhNzc5Li44NmZl
MWM3NWZhZmE5YTY5NjU4ODg4YjFiZDcyZTY3OGZkYWFhYzJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hpdmUuaApAQCAtMzgsNiArMzgs
OCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBNSFRNTFBhcnNlcjsKK2NsYXNzIFBh
Z2U7CitjbGFzcyBTaGFyZWRCdWZmZXI7CiAKIGNsYXNzIE1IVE1MQXJjaGl2ZSA6IHB1YmxpYyBB
cmNoaXZlIHsKIHB1YmxpYzoKQEAgLTQ2LDYgKzQ4LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPE1IVE1MQXJjaGl2ZT4gY3JlYXRlKCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
TUhUTUxBcmNoaXZlPiBjcmVhdGUoY29uc3QgS1VSTCYsIFNoYXJlZEJ1ZmZlciopOwogCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBnZW5lcmF0ZU1IVE1MRGF0YShQYWdlKik7
CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1IVE1MUGFyc2VyOwogICAgIE1IVE1MQXJj
aGl2ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAppbmRleCBkNTY5MjZm
YTE1YWMyNDk5YmYxNjk2MGRmZDcxMjFiZjFkNTY0MTBjLi5lMTczODc5MThhODUxODY2YTlkYjll
YWI0Y2E0MWNjMWQ0MzZlMDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VT
ZXJpYWxpemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNw
cApAQCAtMjA2LDggKzIwNiwxMiBAQCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVGcmFt
ZShGcmFtZSogZnJhbWUpCiAKICAgICBWZWN0b3I8Tm9kZSo+IG5vZGVzOwogICAgIFNlcmlhbGl6
ZXJNYXJrdXBBY2N1bXVsYXRvciBhY2N1bXVsYXRvcih0aGlzLCBkb2N1bWVudCwgJm5vZGVzKTsK
LSAgICBUZXh0RW5jb2RpbmcgdGV4dEVuY29kaW5nKFRleHRFbmNvZGluZyhkb2N1bWVudC0+Y2hh
cnNldCgpKSk7Ci0gICAgQVNTRVJUKHRleHRFbmNvZGluZy5pc1ZhbGlkKCkpOworICAgIFRleHRF
bmNvZGluZyB0ZXh0RW5jb2RpbmcoZG9jdW1lbnQtPmNoYXJzZXQoKSk7CisgICAgQ1N0cmluZyBk
YXRhOworICAgIGlmICghdGV4dEVuY29kaW5nLmlzVmFsaWQoKSkgeworICAgICAgICAvLyBGSVhN
RTogaWZyYW1lcyB1c2VkIGFzIGltYWdlcyB0cmlnZ2VyIHRoaXMuIFdlIHNob3VsZCBkZWFsIHdp
dGggdGhlbSBjb3JyZWN0bHkuCisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgU3RyaW5nIHRl
eHQgPSBhY2N1bXVsYXRvci5zZXJpYWxpemVOb2Rlcyhkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50
KCksIDAsIEluY2x1ZGVOb2RlKTsKICAgICBDU3RyaW5nIGZyYW1lSFRNTCA9IHRleHRFbmNvZGlu
Zy5lbmNvZGUodGV4dC5jaGFyYWN0ZXJzKCksIHRleHQubGVuZ3RoKCksIEVudGl0aWVzRm9yVW5l
bmNvZGFibGVzKTsKICAgICBtX3Jlc291cmNlcy0+YXBwZW5kKFJlc291cmNlKHVybCwgZG9jdW1l
bnQtPnN1Z2dlc3RlZE1JTUVUeXBlKCksIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGZyYW1lSFRNTC5k
YXRhKCksIGZyYW1lSFRNTC5sZW5ndGgoKSkpKTsKQEAgLTI3NCw3ICsyNzgsNyBAQCB2b2lkIFBh
Z2VTZXJpYWxpemVyOjpzZXJpYWxpemVDU1NTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqIHN0eWxl
U2hlZXQsIGNvbnN0IEtVUgogCiAgICAgaWYgKHVybC5pc1ZhbGlkKCkgJiYgIW1fcmVzb3VyY2VV
UkxzLmNvbnRhaW5zKHVybCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjaGVjayB3
aGV0aGVyIGEgY2hhcnNldCBoYXMgYmVlbiBzcGVjaWZpZWQgYW5kIGlmIG5vbmUgd2FzIGZvdW5k
IGFkZCBvbmUuCi0gICAgICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2RpbmcgPSBUZXh0RW5jb2Rp
bmcoc3R5bGVTaGVldC0+Y2hhcnNldCgpKTsKKyAgICAgICAgVGV4dEVuY29kaW5nIHRleHRFbmNv
ZGluZyhzdHlsZVNoZWV0LT5jaGFyc2V0KCkpOwogICAgICAgICBBU1NFUlQodGV4dEVuY29kaW5n
LmlzVmFsaWQoKSk7CiAgICAgICAgIFN0cmluZyB0ZXh0U3RyaW5nID0gY3NzVGV4dC50b1N0cmlu
ZygpOwogICAgICAgICBDU3RyaW5nIHRleHQgPSB0ZXh0RW5jb2RpbmcuZW5jb2RlKHRleHRTdHJp
bmcuY2hhcmFjdGVycygpLCB0ZXh0U3RyaW5nLmxlbmd0aCgpLCBFbnRpdGllc0ZvclVuZW5jb2Rh
Ymxlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAppbmRleCAwOTAw
YWU0MjFlMzc2NGZkMmRhOWFiM2Y0NzM4OGFkMzZiM2M4OGNhLi5hZDg2MThlYjRjOTNjYTg5OGFk
MTEyY2NlNDMyMjA2ODIwMzc0ZWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TaGFyZWRCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1
ZmZlci5jcHAKQEAgLTExNyw2ICsxMTcsMTYgQEAgY29uc3QgY2hhciogU2hhcmVkQnVmZmVyOjpk
YXRhKCkgY29uc3QKICAgICByZXR1cm4gYnVmZmVyKCkuZGF0YSgpOwogfQogCit2b2lkIFNoYXJl
ZEJ1ZmZlcjo6YXBwZW5kKFNoYXJlZEJ1ZmZlciogZGF0YSkKK3sKKyAgICBjb25zdCBjaGFyKiBz
ZWdtZW50OworICAgIHNpemVfdCBwb3NpdGlvbiA9IDA7CisgICAgd2hpbGUgKHNpemVfdCBsZW5n
dGggPSBkYXRhLT5nZXRTb21lRGF0YShzZWdtZW50LCBwb3NpdGlvbikpIHsKKyAgICAgICAgYXBw
ZW5kKHNlZ21lbnQsIGxlbmd0aCk7CisgICAgICAgIHBvc2l0aW9uICs9IGxlbmd0aDsKKyAgICB9
Cit9CisKIHZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoY29uc3QgY2hhciogZGF0YSwgdW5zaWdu
ZWQgbGVuZ3RoKQogewogICAgIEFTU0VSVCghbV9wdXJnZWFibGVCdWZmZXIpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAppbmRleCA0ZjFkNjI5NmIyNDJmZTRkOTliMjIwNjNi
N2NiMTA4ZjFmNWFiY2ZlLi42OGQ5OTNhMzA3NTRhNzlmM2Q4YjU4NGFkMzg5NDhiYmRmMDM0NDI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaApAQCAtODQsNiArODQsNyBA
QCBwdWJsaWM6CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgpOyB9
CiAKKyAgICB2b2lkIGFwcGVuZChTaGFyZWRCdWZmZXIqKTsKICAgICB2b2lkIGFwcGVuZChjb25z
dCBjaGFyKiwgdW5zaWduZWQpOwogICAgIHZvaWQgY2xlYXIoKTsKICAgICBjb25zdCBjaGFyKiBw
bGF0Zm9ybURhdGEoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKb2xkIG1vZGUgMTAw
NjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAwYTNhMWQ4MGM4MzVlZTNmM2U5ZWQyOGNiY2Q2YmVj
NGUzYWUyMzAwLi44ZWQ3YThkN2E1ZjJiZDhjNDNjMTJkNjdjODE0MWI5MmJiZjljOGI4Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDYtMDEgIEpheSBDaXZlbGxp
ICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZGluZyBNSFRNTCBnZW5lcmF0aW9uIHN1cHBvcnQgdG8gTUhU
TUxBcmNoaXZlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzE2OQorCisgICAgICAgICogcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmg6CisgICAgICAg
ICogc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNl
cmlhbGl6ZXI6OnNlcmlhbGl6ZVRvTUhUTUwpOgorCiAyMDExLTA2LTAxICBTaGVyaWZmIEJvdCAg
PHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xs
aW5nIG91dCByODc3ODguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJQYWdlU2VyaWFsaXplci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
UGFnZVNlcmlhbGl6ZXIuaAppbmRleCBhMTA4YTYyYzA2ZTQzY2FjOGExMWZkMzU0Y2MyNDViNjdk
ZjUwOGMzLi5lMmRiMDdiZTQxODA1N2IwZTg2ZDJhNWM4MDY4Nzg3ZGQwYmNmZTc5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgKQEAg
LTU4LDYgKzU4LDkgQEAgcHVibGljOgogICAgIC8vIE5vdGUgdGhhdCB0aGlzIGFsc28gc3RyaXBz
LW91dCBhbnkgc2NyaXB0IHRhZyBvciBsaW5rIHRvIEphdmFTY3JpcHQuCiAgICAgV0VCS0lUX0FQ
SSBzdGF0aWMgdm9pZCBzZXJpYWxpemUoV2ViVmlldyosIFdlYlZlY3RvcjxSZXNvdXJjZT4qKTsK
IAorICAgIC8vIFNlcmlhbGl6ZXMgdGhlIFdlYlZpZXcgY29udGVudHMgdG8gYSBNSFRNTCByZXBy
ZXNlbnRhdGlvbi4KKyAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJDU3RyaW5nIHNlcmlhbGl6ZVRv
TUhUTUwoV2ViVmlldyopOworCiAgICAgLy8gSU1QT1JUQU5UOgogICAgIC8vIFRoZSBBUEkgYmVs
b3cgaXMgYW4gb2xkZXIgaW1wbGVtZW50YXRpb24gb2YgYSBwYWdlc2VyaWFsaXphdGlvbiB0aGF0
CiAgICAgLy8gd2lsbCBiZSByZW1vdmVkIHNvb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAKaW5kZXggMjMyZTIxMTYwMTU5Yzg4NmQ4ZTRl
ZDE0MDA4NGM2YjVjZjczMWU1MS4uNmRmODRiYjZiOTZhOGRkMzRjMjY4NmUyMDY2MTI4ZDdlMGZm
NWJiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlh
bGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxp
emVyLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTUhU
TUxBcmNoaXZlLmgiCiAjaW5jbHVkZSAiUGFnZVNlcmlhbGl6ZXIuaCIKICNpbmNsdWRlICJWZWN0
b3IuaCIKIApAQCAtMjAwLDYgKzIwMSwxMyBAQCB2b2lkIFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJp
YWxpemUoV2ViVmlldyogdmlldywgV2ViVmVjdG9yPFdlYlBhZ2VTZXJpYWxpemVyOjpSZQogICAg
ICpyZXNvdXJjZXNQYXJhbSA9IHJlc3VsdDsgICAgICAgICAKIH0KIAorV2ViQ1N0cmluZyBXZWJQ
YWdlU2VyaWFsaXplcjo6c2VyaWFsaXplVG9NSFRNTChXZWJWaWV3KiB2aWV3KQoreworICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IG1odG1sID0gTUhUTUxBcmNoaXZlOjpnZW5lcmF0ZU1IVE1MRGF0
YShzdGF0aWNfY2FzdDxXZWJWaWV3SW1wbCo+KHZpZXcpLT5wYWdlKCkpOworICAgIC8vIEZJWE1F
OiB3ZSBhcmUgY29weWluZyBhbGwgdGhlIGRhdGEgaGVyZS4gSWRlYWx5IHdlIHdvdWxkIGhhdmUg
YSBXZWJTaGFyZWREYXRhKCkuCisgICAgcmV0dXJuIFdlYkNTdHJpbmcobWh0bWwtPmRhdGEoKSwg
bWh0bWwtPnNpemUoKSk7Cit9CisKIGJvb2wgV2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShX
ZWJGcmFtZSogZnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBy
ZWN1cnNpdmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViUGFnZVNlcmlh
bGl6ZXJDbGllbnQqIGNsaWVudCwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95687</attachid>
            <date>2011-06-01 16:55:19 -0700</date>
            <delta_ts>2011-06-02 14:59:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-7169-20110601165459.patch</filename>
            <type>text/plain</type>
            <size>18019</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODc4MTQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCm9sZCBtb2Rl
IDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggZmIyYzdkNWY2OWM4NDdlMDg0NWQ0NTk3ZjBj
ODRlNGNhNWYwNDI4ZS4uNDY5NzNkODMyYzZmOGY0YTVlMTc4MWIzZTA4NmEyZjRkMTg5MTA1OQot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0wNi0wMSAgSmF5IENpdmVs
bGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSBtZXRob2QgdG8gZ2VuZXJhdGUgUkZDIDI4MjIg
Y29tcGxpYW50IGRhdGUgc3RyaW5ncy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTcxNjkKKworICAgICAgICAqIHd0Zi9EYXRlTWF0aC5jcHA6CisgICAg
ICAgIChXVEY6OnR3b0RpZ2l0U3RyaW5nRnJvbU51bWJlcik6CisgICAgICAgIChXVEY6Om1ha2VS
RkMyODIyRGF0ZVN0cmluZyk6CisgICAgICAgICogd3RmL0RhdGVNYXRoLmg6CisKIDIwMTEtMDYt
MDEgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI4Nzc4OC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9E
YXRlTWF0aC5jcHAKaW5kZXggNzBjMGNmNDdmNWY3OWNiZmMzMzFmN2ExN2ZhOTdlOWE3Y2JjNjdk
Yy4uOWIxNWFlMTEzMDM5ZGNhNjZhNGExNDk4Y2IyNTFmOGM1ZGMyZTA3OSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EYXRlTWF0aC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9EYXRlTWF0aC5jcHAKQEAgLTkwLDcgKzkwLDcgQEAKICNpbmNsdWRlIDxs
aW1pdHM+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8dGltZS5oPgotCisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYgSEFWRShFUlJOT19IKQogI2luY2x1
ZGUgPGVycm5vLmg+CkBAIC0xODAsNiArMTgwLDE0IEBAIHN0YXRpYyBpbmxpbmUgZG91YmxlIG1z
VG9EYXlzKGRvdWJsZSBtcykKICAgICByZXR1cm4gZmxvb3IobXMgLyBtc1BlckRheSk7CiB9CiAK
K3N0YXRpYyBTdHJpbmcgdHdvRGlnaXRTdHJpbmdGcm9tTnVtYmVyKGludCBudW1iZXIpCit7Cisg
ICAgQVNTRVJUKG51bWJlciA+PSAwICYmIG51bWJlciA8IDEwMCk7CisgICAgaWYgKG51bWJlciA+
IDkpCisgICAgICAgIHJldHVybiBTdHJpbmc6Om51bWJlcihudW1iZXIpOworICAgIHJldHVybiBt
YWtlU3RyaW5nKCIwIiwgU3RyaW5nOjpudW1iZXIobnVtYmVyKSk7Cit9CisKIGludCBtc1RvWWVh
cihkb3VibGUgbXMpCiB7CiAgICAgaW50IGFwcHJveFllYXIgPSBzdGF0aWNfY2FzdDxpbnQ+KGZs
b29yKG1zIC8gKG1zUGVyRGF5ICogMzY1LjI0MjUpKSArIDE5NzApOwpAQCAtMTAyOCw2ICsxMDM2
LDM0IEBAIGRvdWJsZSB0aW1lQ2xpcChkb3VibGUgdCkKICAgICAgICAgcmV0dXJuIE5hTjsKICAg
ICByZXR1cm4gdHJ1bmModCk7CiB9CisKKy8vIFNlZSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRt
bC9yZmMyODIyI3NlY3Rpb24tMy4zIGZvciBtb3JlIGluZm9ybWF0aW9uLgorU3RyaW5nIG1ha2VS
RkMyODIyRGF0ZVN0cmluZyh1bnNpZ25lZCBkYXlPZldlZWssIHVuc2lnbmVkIGRheSwgdW5zaWdu
ZWQgbW9udGgsIHVuc2lnbmVkIHllYXIsIHVuc2lnbmVkIGhvdXJzLCB1bnNpZ25lZCBtaW51dGVz
LCB1bnNpZ25lZCBzZWNvbmRzLCBpbnQgdXRjT2Zmc2V0KQoreworICAgIFN0cmluZ0J1aWxkZXIg
c3RyaW5nQnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh3ZWVrZGF5TmFtZVtkYXlP
ZldlZWtdKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCAiKTsKKyAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChTdHJpbmc6Om51bWJlcihkYXkpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgiICIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1vbnRoTmFtZVttb250aF0pOworICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoU3Ry
aW5nOjpudW1iZXIoeWVhcikpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgIik7CisKKyAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0d29EaWdpdFN0cmluZ0Zyb21OdW1iZXIoaG91cnMpKTsK
KyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnOicpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KHR3b0RpZ2l0U3RyaW5nRnJvbU51bWJlcihtaW51dGVzKSk7CisgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoJzonKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0d29EaWdpdFN0cmluZ0Zyb21O
dW1iZXIoc2Vjb25kcykpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCcgJyk7CisKKyAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCh1dGNPZmZzZXQgPiAwID8gIisiIDogIi0iKTsKKyAgICBpbnQg
YWJzb2x1dGVVVENPZmZzZXQgPSBhYnModXRjT2Zmc2V0KTsKKyAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCh0d29EaWdpdFN0cmluZ0Zyb21OdW1iZXIoYWJzb2x1dGVVVENPZmZzZXQgLyA2MCkpOwor
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHR3b0RpZ2l0U3RyaW5nRnJvbU51bWJlcihhYnNvbHV0
ZVVUQ09mZnNldCAlIDYwKSk7CisKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygp
OworfQogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNpZiBVU0UoSlNDKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EYXRlTWF0aC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9EYXRlTWF0aC5oCmluZGV4IDJhYzI4NGU3ZDhlMTU5ODVkNjJlMzM0MmE5NWY4N2NkZmFl
NTczNzYuLmNjMmU4NDIyNmM4MGY1NTBkZTc0MWQxMzk2YjA1M2IxN2IzZDBmZDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmgKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KICNpbmNsdWRl
IDx3dGYvUGFzc093bkFycmF5UHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNjEs
NiArNjIsOCBAQCBpbnQgZXF1aXZhbGVudFllYXJGb3JEU1QoaW50IHllYXIpOwogZG91YmxlIHBh
cnNlRVM1RGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3RlcnMoY29uc3QgY2hhciogZGF0ZVN0
cmluZyk7CiBkb3VibGUgcGFyc2VEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVycyhjb25z
dCBjaGFyKiBkYXRlU3RyaW5nKTsKIGRvdWJsZSB0aW1lQ2xpcChkb3VibGUpOworLy8gZGF5T2ZX
ZWVrOiBbMCwgNl0gMCBiZWluZyBNb25kYXksIGRheTogWzEsIDMxXSwgbW9udGg6IFswLCAxMV0s
IHllYXI6IGV4OiAyMDExLCBob3VyczogWzAsIDIzXSwgbWludXRlczogWzAsIDU5XSwgc2Vjb25k
czogWzAsIDU5XSwgdXRjT2Zmc2V0OiBbLTcyMCw3MjBdLiAKK1N0cmluZyBtYWtlUkZDMjgyMkRh
dGVTdHJpbmcodW5zaWduZWQgZGF5T2ZXZWVrLCB1bnNpZ25lZCBkYXksIHVuc2lnbmVkIG1vbnRo
LCB1bnNpZ25lZCB5ZWFyLCB1bnNpZ25lZCBob3VycywgdW5zaWduZWQgbWludXRlcywgdW5zaWdu
ZWQgc2Vjb25kcywgaW50IHV0Y09mZnNldCk7CiAKIGlubGluZSBkb3VibGUganNDdXJyZW50VGlt
ZSgpCiB7CkBAIC0xMDYsNiArMTA5LDcgQEAgdXNpbmcgV1RGOjptc1BlclNlY29uZDsKIHVzaW5n
IFdURjo6bXNUb1llYXI7CiB1c2luZyBXVEY6OnNlY29uZHNQZXJNaW51dGU7CiB1c2luZyBXVEY6
OnBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3RlcnM7Cit1c2luZyBXVEY6Om1ha2VS
RkMyODIyRGF0ZVN0cmluZzsKIHVzaW5nIFdURjo6Y2FsY3VsYXRlVVRDT2Zmc2V0OwogdXNpbmcg
V1RGOjpjYWxjdWxhdGVEU1RPZmZzZXQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1v
ZGUgMTAwNzU1CmluZGV4IDIyMTcwNDNhZmM0ZWU5YzQ4N2VlMDBkN2Y5YjY0MjljMGY2YzhkZjEu
LmQwMDZjYWYzMjRhZmM1MGFkZjhlY2M2OGY5MmVmOTRjZWViZTEzODAKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIyIEBACisyMDExLTA2LTAxICBKYXkgQ2l2ZWxsaSAgPGpjaXZlbGxpQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcg
TUhUTUwgZ2VuZXJhdGlvbiBzdXBwb3J0IHRvIE1IVE1MQXJjaGl2ZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNjkKKworICAgICAgICAqIGxvYWRl
ci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZW5l
cmF0ZVJhbmRvbUJvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OnJlcGxhY2VOb25QcmludGFi
bGVDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1IVE1MQXJjaGl2ZTo6Z2VuZXJhdGVN
SFRNTERhdGEpOgorICAgICAgICAqIGxvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5o
OgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VT
ZXJpYWxpemVyOjpzZXJpYWxpemVDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9T
aGFyZWRCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjphcHBlbmQp
OgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oOgorCiAyMDExLTA2LTAxICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFBhdmVsIEZlbGRtYW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2
ZS9taHRtbC9NSFRNTEFyY2hpdmUuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUv
bWh0bWwvTUhUTUxBcmNoaXZlLmNwcAppbmRleCAwZDMzMjM3YjcwZjgwZWVkNzAwNzljOTg2Y2Uw
NGJiZTM1ODkyMWUwLi5jY2VmNjQ0ZDliOTA5YjFlODA2MDgyZTMyNzI1YTg1YWQwMDQ5MDM3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTEFyY2hp
dmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJj
aGl2ZS5jcHAKQEAgLTMzLDExICszMyw2MiBAQAogI2lmIEVOQUJMRShNSFRNTCkKICNpbmNsdWRl
ICJNSFRNTEFyY2hpdmUuaCIKIAorI2luY2x1ZGUgIkJhc2U2NC5oIgorI2luY2x1ZGUgIkNyeXB0
b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmgiCisjaW5jbHVkZSAiRGF0ZU1hdGguaCIKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiTUhUTUxQYXJz
ZXIuaCIKLSNpbmNsdWRlICJNSU1FSGVhZGVyLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3Ry
eS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlU2VyaWFsaXplci5oIgorI2lu
Y2x1ZGUgIlF1b3RlZFByaW50YWJsZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2lu
Y2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCisjaWYgSEFWRShTWVNfVElNRV9IKQorI2luY2x1
ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NvbnN0
IGNoYXIqIGNvbnN0IHF1b3RlZFByaW50YWJsZSA9ICJxdW90ZWQtcHJpbnRhYmxlIjsKK2NvbnN0
IGNoYXIqIGNvbnN0IGJhc2U2NCA9ICJiYXNlNjQiOworCitzdGF0aWMgU3RyaW5nIGdlbmVyYXRl
UmFuZG9tQm91bmRhcnkoKQoreworICAgIC8vIFRyeWluZyB0byBnZW5lcmF0ZSByYW5kb20gYm91
bmRhcmllcyBzaW1pbGFyIHRvIElFL1VuTUhUIChleDogLS0tLT1fTmV4dFBhcnRfMDAwXzAwMUJf
MDFDQzE1N0IuOTZGODA4QTApLgorICAgIGNvbnN0IHNpemVfdCByYW5kb21WYWx1ZXNMZW5ndGgg
PSAxMDsKKyAgICBjaGFyIHJhbmRvbVZhbHVlc1tyYW5kb21WYWx1ZXNMZW5ndGhdOworICAgIGNy
eXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzKCZyYW5kb21WYWx1ZXMsIHJhbmRvbVZhbHVlc0xl
bmd0aCk7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCItLS0tPV9OZXh0UGFydF8wMDBfIik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCByYW5kb21WYWx1ZXNMZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoaSA9PSAyKQorICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ18nKTsKKyAgICAgICAgZWxzZSBpZiAoaSA9
PSA2KQorICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJy4nKTsKKyAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQobG93ZXJOaWJibGVUb0FTQ0lJSGV4RGlnaXQocmFuZG9tVmFsdWVz
W2ldKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHVwcGVyTmliYmxlVG9BU0NJSUhl
eERpZ2l0KHJhbmRvbVZhbHVlc1tpXSkpOworICAgIH0KKyAgICByZXR1cm4gc3RyaW5nQnVpbGRl
ci50b1N0cmluZygpOworfQorCitzdGF0aWMgU3RyaW5nIHJlcGxhY2VOb25QcmludGFibGVDaGFy
YWN0ZXJzKGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1
aWxkZXI7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aCgpOyArK2kpIHsK
KyAgICAgICAgaWYgKGlzQVNDSUlQcmludGFibGUodGV4dFtpXSkpCisgICAgICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCh0ZXh0W2ldKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoJz8nKTsKKyAgICB9CisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKTsKK30KKwogTUhUTUxBcmNoaXZlOjpNSFRNTEFyY2hpdmUoKQogewogfQpAQCAt
NzEsNSArMTIyLDkwIEBAIFBhc3NSZWZQdHI8TUhUTUxBcmNoaXZlPiBNSFRNTEFyY2hpdmU6OmNy
ZWF0ZShjb25zdCBLVVJMJiB1cmwsIFNoYXJlZEJ1ZmZlciogZGF0CiAgICAgcmV0dXJuIG1haW5B
cmNoaXZlLnJlbGVhc2UoKTsKIH0KIAorUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IE1IVE1MQXJj
aGl2ZTo6Z2VuZXJhdGVNSFRNTERhdGEoUGFnZSogcGFnZSkKK3sKKyAgICBWZWN0b3I8UGFnZVNl
cmlhbGl6ZXI6OlJlc291cmNlPiByZXNvdXJjZXM7CisgICAgUGFnZVNlcmlhbGl6ZXIgcGFnZVNl
cmlhbGl6ZXIoJnJlc291cmNlcyk7CisgICAgcGFnZVNlcmlhbGl6ZXIuc2VyaWFsaXplKHBhZ2Up
OworCisgICAgU3RyaW5nIGJvdW5kYXJ5ID0gZ2VuZXJhdGVSYW5kb21Cb3VuZGFyeSgpOworICAg
IFN0cmluZyBlbmRPZlJlc291cmNlQm91bmRhcnkgPSBtYWtlU3RyaW5nKCItLSIsIGJvdW5kYXJ5
LCAiXHJcbiIpOworCisgICAgU3RyaW5nIGRhdGVTdHJpbmc7CisgICAgdGltZV90IGxvY2FsVGlt
ZSA9IHRpbWUoMCk7CisgICAgdG0gbG9jYWxUTTsKKyAgICBnZXRMb2NhbFRpbWUoJmxvY2FsVGlt
ZSwgJmxvY2FsVE0pOworICAgIGRhdGVTdHJpbmcgPSBtYWtlUkZDMjgyMkRhdGVTdHJpbmcobG9j
YWxUTS50bV93ZGF5LCBsb2NhbFRNLnRtX21kYXksIGxvY2FsVE0udG1fbW9uLCAxOTAwICsgbG9j
YWxUTS50bV95ZWFyLCBsb2NhbFRNLnRtX2hvdXIsIGxvY2FsVE0udG1fbWluLCBsb2NhbFRNLnRt
X3NlYywgY2FsY3VsYXRlVVRDT2Zmc2V0KCkgLyAoMTAwMCAqIDYwKSk7CisKKyAgICBTdHJpbmdC
dWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIkZyb206IDxT
YXZlZCBieSBXZWJLaXQ+XHJcbiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJTdWJqZWN0
OiAiKTsKKyAgICAvLyBXZSByZXBsYWNlIG5vbiBBU0NJSSBjaGFyYWN0ZXJzIHdpdGggJz8nIGNo
YXJhY3RlcnMgdG8gbWF0Y2ggSUUncyBiZWhhdmlvci4KKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChyZXBsYWNlTm9uUHJpbnRhYmxlQ2hhcmFjdGVycyhwYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1l
bnQoKS0+dGl0bGUoKSkpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcclxuRGF0ZTogIik7
CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZGF0ZVN0cmluZyk7CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIlxyXG5NSU1FLVZlcnNpb246IDEuMFxyXG4iKTsKKyAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgiQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvcmVsYXRlZDtcclxuIik7CisgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIlx0dHlwZT1cIiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KHBhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5zdWdnZXN0ZWRNSU1FVHlwZSgpKTsKKyAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXCI7XHJcbiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCJcdGJvdW5kYXJ5PVwiIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoYm91bmRhcnkp
OworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcIlxyXG5cclxuIik7CisKKyAgICAvLyBXZSB1
c2UgdXRmOCgpIGJlbG93IGluc3RlYWQgb2YgYXNjaWkoKSBhcyBhc2NpaSgpIHJlcGxhY2VzIENS
TEZzIHdpdGggPz8gKHdlIHN0aWxsIG9ubHkgaGF2ZSBwdXQgQVNDSUkgY2hhcmFjdGVycyBpbiBp
dCkuCisgICAgQVNTRVJUKHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKS5jb250YWluc09ubHlBU0NJ
SSgpKTsKKyAgICBDU3RyaW5nIGFzY2lpU3RyaW5nID0gc3RyaW5nQnVpbGRlci50b1N0cmluZygp
LnV0ZjgoKTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtaHRtbERhdGEgPSBTaGFyZWRCdWZm
ZXI6OmNyZWF0ZSgpOworICAgIG1odG1sRGF0YS0+YXBwZW5kKGFzY2lpU3RyaW5nLmRhdGEoKSwg
YXNjaWlTdHJpbmcubGVuZ3RoKCkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXNv
dXJjZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgUGFnZVNlcmlhbGl6ZXI6OlJlc291
cmNlJiByZXNvdXJjZSA9IHJlc291cmNlc1tpXTsKKworICAgICAgICBzdHJpbmdCdWlsZGVyLmNs
ZWFyKCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGVuZE9mUmVzb3VyY2VCb3VuZGFy
eSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJDb250ZW50LVR5cGU6ICIpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyZXNvdXJjZS5taW1lVHlwZSk7CisKKyAgICAgICAg
Y29uc3QgY2hhciogY29udGVudEVuY29kaW5nID0gTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0
ZWRKYXZhU2NyaXB0TUlNRVR5cGUocmVzb3VyY2UubWltZVR5cGUpIHx8IE1JTUVUeXBlUmVnaXN0
cnk6OmlzU3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZShyZXNvdXJjZS5taW1lVHlwZSkgPyBxdW90
ZWRQcmludGFibGUgOiBiYXNlNjQ7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcclxu
Q29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKGNvbnRlbnRFbmNvZGluZyk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcclxu
Q29udGVudC1Mb2NhdGlvbjogIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJlc291
cmNlLnVybCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcclxuXHJcbiIpOworCisg
ICAgICAgIGFzY2lpU3RyaW5nID0gc3RyaW5nQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsKKyAg
ICAgICAgbWh0bWxEYXRhLT5hcHBlbmQoYXNjaWlTdHJpbmcuZGF0YSgpLCBhc2NpaVN0cmluZy5s
ZW5ndGgoKSk7CisKKyAgICAgICAgLy8gRklYTUU6IGlkZWFsbHkgd2Ugd291bGQgZW5jb2RlIHRo
ZSBjb250ZW50IGFzIGEgc3RyZWFtIHdpdGhvdXQgaGF2aW5nIHRvIGZldGNoIGl0IGFsbC4KKyAg
ICAgICAgY29uc3QgY2hhciogZGF0YSA9IHJlc291cmNlLmRhdGEtPmRhdGEoKTsKKyAgICAgICAg
c2l6ZV90IGRhdGFMZW5ndGggPSByZXNvdXJjZS5kYXRhLT5zaXplKCk7CisgICAgICAgIFZlY3Rv
cjxjaGFyPiBlbmNvZGVkRGF0YTsKKyAgICAgICAgaWYgKCFzdHJjbXAoY29udGVudEVuY29kaW5n
LCBxdW90ZWRQcmludGFibGUpKSB7CisgICAgICAgICAgICBxdW90ZWRQcmludGFibGVFbmNvZGUo
ZGF0YSwgZGF0YUxlbmd0aCwgZW5jb2RlZERhdGEpOworICAgICAgICAgICAgbWh0bWxEYXRhLT5h
cHBlbmQoZW5jb2RlZERhdGEuZGF0YSgpLCBlbmNvZGVkRGF0YS5zaXplKCkpOworICAgICAgICAg
ICAgbWh0bWxEYXRhLT5hcHBlbmQoIlxyXG4iLCAyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIEFTU0VSVCghc3RyY21wKGNvbnRlbnRFbmNvZGluZywgYmFzZTY0KSk7CisgICAgICAg
ICAgICAvLyBXZSBhcmUgbm90IHNwZWNpZnlpbmcgaW5zZXJ0TEZzID0gdHJ1ZSBiZWxvdyBhcyBp
dCB3b3VsZCBjdXQgdGhlIGxpbmVzIHdpdGggTEZzIGFuZCBNSFRNTCByZXF1aXJlcyBDUkxGcy4K
KyAgICAgICAgICAgIGJhc2U2NEVuY29kZShkYXRhLCBkYXRhTGVuZ3RoLCBlbmNvZGVkRGF0YSk7
CisgICAgICAgICAgICBjb25zdCBzaXplX3QgbWF4aW11bUxpbmVMZW5ndGggPSA3NjsKKyAgICAg
ICAgICAgIHNpemVfdCBpbmRleCA9IDA7CisgICAgICAgICAgICBzaXplX3QgZW5jb2RlZERhdGFM
ZW5ndGggPSBlbmNvZGVkRGF0YS5zaXplKCk7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAg
ICAgICAgc2l6ZV90IGxpbmVMZW5ndGggPSBzdGQ6Om1pbihlbmNvZGVkRGF0YUxlbmd0aCAtIGlu
ZGV4LCBtYXhpbXVtTGluZUxlbmd0aCk7CisgICAgICAgICAgICAgICAgbWh0bWxEYXRhLT5hcHBl
bmQoZW5jb2RlZERhdGEuZGF0YSgpICsgaW5kZXgsIGxpbmVMZW5ndGgpOworICAgICAgICAgICAg
ICAgIG1odG1sRGF0YS0+YXBwZW5kKCJcclxuIiwgMik7CisgICAgICAgICAgICAgICAgaW5kZXgg
Kz0gbWF4aW11bUxpbmVMZW5ndGg7CisgICAgICAgICAgICB9IHdoaWxlIChpbmRleCA8IGVuY29k
ZWREYXRhTGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFzY2lpU3RyaW5nID0gbWFr
ZVN0cmluZygiLS0iLCBib3VuZGFyeSwgIi0tXHJcbiIpLnV0ZjgoKTsKKyAgICBtaHRtbERhdGEt
PmFwcGVuZChhc2NpaVN0cmluZy5kYXRhKCksIGFzY2lpU3RyaW5nLmxlbmd0aCgpKTsKKworICAg
IHJldHVybiBtaHRtbERhdGEucmVsZWFzZSgpOworfQorCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJjaGl2ZS5oIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZlLmgKaW5kZXggMWIz
MWRjMzE1YmFiOGIxM2ZlMjM4MTIwYTQzYjNiMDJkOTg0YTc3OS4uODZmZTFjNzVmYWZhOWE2OTY1
ODg4OGIxYmQ3MmU2NzhmZGFhYWMyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZlLmgKQEAgLTM4LDYgKzM4LDggQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgTUhUTUxQYXJzZXI7CitjbGFzcyBQYWdlOworY2xhc3MgU2hh
cmVkQnVmZmVyOwogCiBjbGFzcyBNSFRNTEFyY2hpdmUgOiBwdWJsaWMgQXJjaGl2ZSB7CiBwdWJs
aWM6CkBAIC00Niw2ICs0OCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNSFRN
TEFyY2hpdmU+IGNyZWF0ZSgpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1IVE1MQXJjaGl2ZT4g
Y3JlYXRlKGNvbnN0IEtVUkwmLCBTaGFyZWRCdWZmZXIqKTsKIAorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gZ2VuZXJhdGVNSFRNTERhdGEoUGFnZSopOworCiBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBNSFRNTFBhcnNlcjsKICAgICBNSFRNTEFyY2hpdmUoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKaW5kZXggZDU2OTI2ZmExNWFjMjQ5OWJmMTY5
NjBkZmQ3MTIxYmYxZDU2NDEwYy4uZTE3Mzg3OTE4YTg1MTg2NmE5ZGI5ZWFiNGNhNDFjYzFkNDM2
ZTA5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKQEAgLTIwNiw4ICsy
MDYsMTIgQEAgdm9pZCBQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplRnJhbWUoRnJhbWUqIGZyYW1l
KQogCiAgICAgVmVjdG9yPE5vZGUqPiBub2RlczsKICAgICBTZXJpYWxpemVyTWFya3VwQWNjdW11
bGF0b3IgYWNjdW11bGF0b3IodGhpcywgZG9jdW1lbnQsICZub2Rlcyk7Ci0gICAgVGV4dEVuY29k
aW5nIHRleHRFbmNvZGluZyhUZXh0RW5jb2RpbmcoZG9jdW1lbnQtPmNoYXJzZXQoKSkpOwotICAg
IEFTU0VSVCh0ZXh0RW5jb2RpbmcuaXNWYWxpZCgpKTsKKyAgICBUZXh0RW5jb2RpbmcgdGV4dEVu
Y29kaW5nKGRvY3VtZW50LT5jaGFyc2V0KCkpOworICAgIENTdHJpbmcgZGF0YTsKKyAgICBpZiAo
IXRleHRFbmNvZGluZy5pc1ZhbGlkKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IGlmcmFtZXMgdXNl
ZCBhcyBpbWFnZXMgdHJpZ2dlciB0aGlzLiBXZSBzaG91bGQgZGVhbCB3aXRoIHRoZW0gY29ycmVj
dGx5LgorICAgICAgICByZXR1cm47CisgICAgfQogICAgIFN0cmluZyB0ZXh0ID0gYWNjdW11bGF0
b3Iuc2VyaWFsaXplTm9kZXMoZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLCAwLCBJbmNsdWRl
Tm9kZSk7CiAgICAgQ1N0cmluZyBmcmFtZUhUTUwgPSB0ZXh0RW5jb2RpbmcuZW5jb2RlKHRleHQu
Y2hhcmFjdGVycygpLCB0ZXh0Lmxlbmd0aCgpLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7CiAg
ICAgbV9yZXNvdXJjZXMtPmFwcGVuZChSZXNvdXJjZSh1cmwsIGRvY3VtZW50LT5zdWdnZXN0ZWRN
SU1FVHlwZSgpLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShmcmFtZUhUTUwuZGF0YSgpLCBmcmFtZUhU
TUwubGVuZ3RoKCkpKSk7CkBAIC0yNzQsNyArMjc4LDcgQEAgdm9pZCBQYWdlU2VyaWFsaXplcjo6
c2VyaWFsaXplQ1NTU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0LCBjb25zdCBL
VVIKIAogICAgIGlmICh1cmwuaXNWYWxpZCgpICYmICFtX3Jlc291cmNlVVJMcy5jb250YWlucyh1
cmwpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY2hlY2sgd2hldGhlciBhIGNoYXJz
ZXQgaGFzIGJlZW4gc3BlY2lmaWVkIGFuZCBpZiBub25lIHdhcyBmb3VuZCBhZGQgb25lLgotICAg
ICAgICBUZXh0RW5jb2RpbmcgdGV4dEVuY29kaW5nID0gVGV4dEVuY29kaW5nKHN0eWxlU2hlZXQt
PmNoYXJzZXQoKSk7CisgICAgICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2Rpbmcoc3R5bGVTaGVl
dC0+Y2hhcnNldCgpKTsKICAgICAgICAgQVNTRVJUKHRleHRFbmNvZGluZy5pc1ZhbGlkKCkpOwog
ICAgICAgICBTdHJpbmcgdGV4dFN0cmluZyA9IGNzc1RleHQudG9TdHJpbmcoKTsKICAgICAgICAg
Q1N0cmluZyB0ZXh0ID0gdGV4dEVuY29kaW5nLmVuY29kZSh0ZXh0U3RyaW5nLmNoYXJhY3RlcnMo
KSwgdGV4dFN0cmluZy5sZW5ndGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5kZXggMDkwMGFlNDIxZTM3NjRmZDJk
YTlhYjNmNDczODhhZDM2YjNjODhjYS4uYWQ4NjE4ZWI0YzkzY2E4OThhZDExMmNjZTQzMjIwNjgy
MDM3NGVhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCkBAIC0x
MTcsNiArMTE3LDE2IEBAIGNvbnN0IGNoYXIqIFNoYXJlZEJ1ZmZlcjo6ZGF0YSgpIGNvbnN0CiAg
ICAgcmV0dXJuIGJ1ZmZlcigpLmRhdGEoKTsKIH0KIAordm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVu
ZChTaGFyZWRCdWZmZXIqIGRhdGEpCit7CisgICAgY29uc3QgY2hhciogc2VnbWVudDsKKyAgICBz
aXplX3QgcG9zaXRpb24gPSAwOworICAgIHdoaWxlIChzaXplX3QgbGVuZ3RoID0gZGF0YS0+Z2V0
U29tZURhdGEoc2VnbWVudCwgcG9zaXRpb24pKSB7CisgICAgICAgIGFwcGVuZChzZWdtZW50LCBs
ZW5ndGgpOworICAgICAgICBwb3NpdGlvbiArPSBsZW5ndGg7CisgICAgfQorfQorCiB2b2lkIFNo
YXJlZEJ1ZmZlcjo6YXBwZW5kKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKIHsK
ICAgICBBU1NFUlQoIW1fcHVyZ2VhYmxlQnVmZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hh
cmVkQnVmZmVyLmgKaW5kZXggNGYxZDYyOTZiMjQyZmU0ZDk5YjIyMDYzYjdjYjEwOGYxZjVhYmNm
ZS4uNjhkOTkzYTMwNzU0YTc5ZjNkOGI1ODRhZDM4OTQ4YmJkZjAzNDQyNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKQEAgLTg0LDYgKzg0LDcgQEAgcHVibGljOgogCiAg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQogCisgICAgdm9pZCBh
cHBlbmQoU2hhcmVkQnVmZmVyKik7CiAgICAgdm9pZCBhcHBlbmQoY29uc3QgY2hhciosIHVuc2ln
bmVkKTsKICAgICB2b2lkIGNsZWFyKCk7CiAgICAgY29uc3QgY2hhciogcGxhdGZvcm1EYXRhKCkg
Y29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAx
MDA3NTUKaW5kZXggMGEzYTFkODBjODM1ZWUzZjNlOWVkMjhjYmNkNmJlYzRlM2FlMjMwMC4uOGVk
N2E4ZDdhNWYyYmQ4YzQzYzEyZDY3YzgxNDFiOTJiYmY5YzhiOAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE0IEBACisyMDExLTA2LTAxICBKYXkgQ2l2ZWxsaSAgPGpjaXZlbGxpQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGRpbmcgTUhUTUwgZ2VuZXJhdGlvbiBzdXBwb3J0IHRvIE1IVE1MQXJjaGl2ZS4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNjkKKworICAg
ICAgICAqIHB1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oOgorICAgICAgICAqIHNyYy9XZWJQYWdl
U2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVyOjpzZXJp
YWxpemVUb01IVE1MKToKKwogMjAxMS0wNi0wMSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3
LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjg3Nzg4
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlh
bGl6ZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVy
LmgKaW5kZXggYTEwOGE2MmMwNmU0M2NhYzhhMTFmZDM1NGNjMjQ1YjY3ZGY1MDhjMy4uZTJkYjA3
YmU0MTgwNTdiMGU4NmQyYTVjODA2ODc4N2RkMGJjZmU3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oCkBAIC01OCw2ICs1OCw5IEBA
IHB1YmxpYzoKICAgICAvLyBOb3RlIHRoYXQgdGhpcyBhbHNvIHN0cmlwcy1vdXQgYW55IHNjcmlw
dCB0YWcgb3IgbGluayB0byBKYXZhU2NyaXB0LgogICAgIFdFQktJVF9BUEkgc3RhdGljIHZvaWQg
c2VyaWFsaXplKFdlYlZpZXcqLCBXZWJWZWN0b3I8UmVzb3VyY2U+Kik7CiAKKyAgICAvLyBTZXJp
YWxpemVzIHRoZSBXZWJWaWV3IGNvbnRlbnRzIHRvIGEgTUhUTUwgcmVwcmVzZW50YXRpb24uCisg
ICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViQ1N0cmluZyBzZXJpYWxpemVUb01IVE1MKFdlYlZpZXcq
KTsKKwogICAgIC8vIElNUE9SVEFOVDoKICAgICAvLyBUaGUgQVBJIGJlbG93IGlzIGFuIG9sZGVy
IGltcGxlbWVudGF0aW9uIG9mIGEgcGFnZXNlcmlhbGl6YXRpb24gdGhhdAogICAgIC8vIHdpbGwg
YmUgcmVtb3ZlZCBzb29uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViUGFnZVNlcmlhbGl6ZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFn
ZVNlcmlhbGl6ZXIuY3BwCmluZGV4IDIzMmUyMTE2MDE1OWM4ODZkOGU0ZWQxNDAwODRjNmI1Y2Y3
MzFlNTEuLjZkZjg0YmI2Yjk2YThkZDM0YzI2ODZlMjA2NjEyOGQ3ZTBmZjViYmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAKQEAgLTM5
LDYgKzM5LDcgQEAKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk1IVE1MQXJjaGl2ZS5oIgog
I2luY2x1ZGUgIlBhZ2VTZXJpYWxpemVyLmgiCiAjaW5jbHVkZSAiVmVjdG9yLmgiCiAKQEAgLTIw
MCw2ICsyMDEsMTMgQEAgdm9pZCBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKFdlYlZpZXcq
IHZpZXcsIFdlYlZlY3RvcjxXZWJQYWdlU2VyaWFsaXplcjo6UmUKICAgICAqcmVzb3VyY2VzUGFy
YW0gPSByZXN1bHQ7ICAgICAgICAgCiB9CiAKK1dlYkNTdHJpbmcgV2ViUGFnZVNlcmlhbGl6ZXI6
OnNlcmlhbGl6ZVRvTUhUTUwoV2ViVmlldyogdmlldykKK3sKKyAgICBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBtaHRtbCA9IE1IVE1MQXJjaGl2ZTo6Z2VuZXJhdGVNSFRNTERhdGEoc3RhdGljX2Nhc3Q8
V2ViVmlld0ltcGwqPih2aWV3KS0+cGFnZSgpKTsKKyAgICAvLyBGSVhNRTogd2UgYXJlIGNvcHlp
bmcgYWxsIHRoZSBkYXRhIGhlcmUuIElkZWFseSB3ZSB3b3VsZCBoYXZlIGEgV2ViU2hhcmVkRGF0
YSgpLgorICAgIHJldHVybiBXZWJDU3RyaW5nKG1odG1sLT5kYXRhKCksIG1odG1sLT5zaXplKCkp
OworfQorCiBib29sIFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUoV2ViRnJhbWUqIGZyYW1l
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50KiBj
bGllbnQsCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>