<?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>68094</bug_id>
          
          <creation_ts>2011-09-14 11:21:15 -0700</creation_ts>
          <short_desc>xssauditor - script block ending in comment can bypass auditor.</short_desc>
          <delta_ts>2011-09-22 19:27:46 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>XSSAuditor</keywords>
          <priority>P2</priority>
          <bug_severity>Minor</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>66579</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Thomas Sepez">tsepez</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>dbates</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>467161</commentid>
    <comment_count>0</comment_count>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2011-09-14 11:21:15 -0700</bug_when>
    <thetext>Second part of https://bugs.webkit.org/show_bug.cgi?id=27895.

This is for the situation where the page contains a naturally-occurring close script tag on the same line as the injecton, e.g.

&lt;img src=&quot;$q&quot;&gt;&lt;script&gt;foo()&lt;/script&gt;

where $q is the injected vector from the URL, typically ?q=&quot;&gt;&lt;script&gt;alert(0)//, yeilding

&lt;img src=&quot;&quot;&gt;&lt;script&gt;alert(0)//&quot;&gt;&lt;script&gt;foo()&lt;/script&gt;

and the comment removes the unparseable fragment from consideration by JS. xssauditor looking at the entire script block will fail to match because the &quot;&gt;&lt;script&gt;foo() fragment isn&apos;t in the URL.
Unlike the inline case, entities aren&apos;t an issue here, but because of false positives, stopping on the first comment isn&apos;t likely to be acceptable.  Many script blocks will begin with a comment, eg.

&lt;script&gt;
// Copyright (c) 2001 by some guy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467333</commentid>
    <comment_count>1</comment_count>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2011-09-14 14:14:44 -0700</bug_when>
    <thetext>Copy some of dbates&apos;s additional details from the original bug:

We may want to file a separate bug to fix comments within script tags such as:

&lt;script&gt;alert(1);/*&lt;!--
Example: http://good.webblaze.org/dbates/xsstest-script-comment.php?q=%3Cscript%3Ealert%28/XSS/%29%3B/*%3C%21--

&lt;script&gt;alert(1);/*
Example: http://good.webblaze.org/dbates/xsstest-script-comment.php?q=%3Cscript%3Ealert%28/XSS/%29%3B/*

&lt;script&gt;alert(1);//
Example: http://good.webblaze.org/dbates/xsstest-script-comment.php?q=%3Cscript%3Ealert%28/XSS/%29%3B//

&lt;script&gt;alert(1);&lt;!--
Example: http://good.webblaze.org/dbates/xsstest-script-comment.php?q=%3Cscript%3Ealert%28/XSS/%29%3B%3C%21--</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467499</commentid>
    <comment_count>2</comment_count>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2011-09-14 17:53:09 -0700</bug_when>
    <thetext>Even worse case is when attacker controls two injections on the page, and can escape the intervening page content with /* in one injection and */ in the other.  Not sure if we want to tackle this case [chromium bug http://code.google.com/p/chromium/issues/detail?id=96616 closed as wontfix for this case].

Consider a page

print &apos;&lt;img src=&quot;&apos; . $q1 . &apos;&quot;&gt;&lt;foo&gt;bar&lt;baz/&gt;&lt;img src=&quot;&apos; . $q2 . &apos;&quot;&gt;&apos;;

?q1=&quot;&gt;&lt;script&gt;/*&amp;other=clutter&amp;q2=bam*//**/alert(0)//foo%0a&lt;/script&gt;

One rule I can think of that might catch this is something like this is:
- verify a &lt;script&gt; tag in the URL, else do nothing.
- without further decoding, parse the script block in the page, skipping over leading comments, and find the first actual code fragment, stopping at the next place a comment is introduced.
- reduce/canonicalize the fragment
- check if that fragment is present anywhere in the reduced/canonicalized URL.

so:

&lt;img src=&quot;&quot;&gt;&lt;script&gt;/*&quot;&gt;&lt;foo&gt;bar&lt;baz/&gt;&lt;img src=&quot;bam*//**/alert(0)//foo
&lt;/script&gt;

- verify &lt;script&gt; in URL.
- skip first comment /*&quot;&gt;&lt;foo&gt;bar&lt;baz/&gt;&lt;img src=&quot;bam*/
- skip second comment /**/
- extract code fragment alert(0) up to next comment.
- decode and then find in URL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467910</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-15 11:07:54 -0700</bug_when>
    <thetext>Multiple injections are explicitly out of scope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470347</commentid>
    <comment_count>4</comment_count>
      <attachid>108052</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2011-09-20 14:30:46 -0700</bug_when>
    <thetext>Created attachment 108052
Patch + test cases.  

Rough cut at code to lex out the relevant portions of the script block for comparison.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470353</commentid>
    <comment_count>5</comment_count>
      <attachid>108054</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2011-09-20 14:36:28 -0700</bug_when>
    <thetext>Created attachment 108054
Patch - unrelated files picked up by mistake.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470358</commentid>
    <comment_count>6</comment_count>
      <attachid>108054</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-20 14:38:14 -0700</bug_when>
    <thetext>Comment on attachment 108054
Patch - unrelated files picked up by mistake.

Woah there.  I don&apos;t think we should be lexing JavaScript.  That&apos;s way too complicated.  Isn&apos;t there something simpler we can do?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470927</commentid>
    <comment_count>7</comment_count>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2011-09-21 10:48:29 -0700</bug_when>
    <thetext>I still think we can&apos;t stop at the first comment as we do for inline handlers, since it is so common for legitimate script blocks to start with comments; doing so would cause any &lt;script&gt; in the URL to match, making it too noisy.  And having found the code, comparing it and the script tag in two comparisons against the URL seems to do a good job here (as it turns out, it happens to catch the case in the &quot;wontfix bug&quot; but that was not the intent).

I&apos;m thinking that it is OK to eliminate the quote balancing when looking for the end of the code fragment.  I wanted to avoid stopping on something like &quot;http://&quot;, but since legitimate code will have something before the string literal, we probably have enough signal even if we do stop there.  If you throw that requirement out, then it becomes more practical to do this via a series of finds() since you&apos;re not worried about the context. Simpler, in some sense, but less elegant and slower.  I&apos;d expect that most of the code in here would reduce to state machines if we wanted to grease it ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470968</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-21 11:20:53 -0700</bug_when>
    <thetext>For the &quot;starts with a comment&quot; case, we could notice that there&apos;s only whitespace in the snippet and keep going.

Having a whole JavaScript lexer here is way more complexity that we want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470977</commentid>
    <comment_count>9</comment_count>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2011-09-21 11:23:55 -0700</bug_when>
    <thetext>Well, as you can see, its not a full lexer, it only understands quotes and comment.  But point taken.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471055</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-21 12:42:52 -0700</bug_when>
    <thetext>The main reason to grab more of the snippet is to reduce false positives.  In the case where you have a string, we&apos;ve probably already got a good enough snippet to avoid false positives:

&lt;script&gt;
var x = &quot;http://

It seems fine to terminate the snippet there. It&apos;s not super important that it&apos;s not really the beginning of a comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471151</commentid>
    <comment_count>11</comment_count>
      <attachid>108232</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2011-09-21 14:14:48 -0700</bug_when>
    <thetext>Created attachment 108232
Simpler patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471164</commentid>
    <comment_count>12</comment_count>
      <attachid>108232</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-21 14:42:10 -0700</bug_when>
    <thetext>Comment on attachment 108232
Simpler patch

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

&gt; Source/WebCore/html/parser/XSSAuditor.cpp:311
&gt; +        int start = 0;
&gt; +        int end = token.endIndex() - token.startIndex();

snippetForRange doesn&apos;t use the same indicies as token.startIndex?  I guess this is the same way the code used to work.  (Also, these indicies should probably all be size_t, but that&apos;s a yak for another day.)

&gt; Source/WebCore/html/parser/XSSAuditor.cpp:313
&gt; +        if (isContainedInRequest(fullyDecodeString(snippet, decoder))) {

I see, we&apos;re not requiring the two pieces to be contiguous in the request.  Is that intentional?   I guess the code fragment isn&apos;t necessarily at the beginning of the script.

&gt; Source/WebCore/html/parser/XSSAuditor.cpp:542
&gt; +String XSSAuditor::extractCodeFragment(const String&amp; string)

If this is specific to JavaScript, maybe we should call it snippetForJavaScript ?

&gt; Source/WebCore/html/parser/XSSAuditor.cpp:548
&gt; +    size_t foundPosition;

I would initialize this scalar with notFound, but that&apos;s just because I&apos;m paranoid.

&gt; Source/WebCore/html/parser/XSSAuditor.cpp:561
&gt; +    if (string.substring(startPosition, 4) == &quot;&lt;!--&quot;) {
&gt; +        while (startPosition &lt; endPosition &amp;&amp; string[startPosition] != &apos;\r&apos; &amp;&amp; string[startPosition] != &apos;\n&apos;)
&gt; +            startPosition++;
&gt; +        while (startPosition &lt; endPosition &amp;&amp; isHTMLSpace(string[startPosition]))
&gt; +            startPosition++;
&gt; +    }

I&apos;m not sure why this is a special case.  It seems like we could just fold this into the following loop.  &lt;!-- is really the same thing as //.

&gt; Source/WebCore/html/parser/XSSAuditor.cpp:566
&gt; +        if (string.substring(startPosition, 2) == &quot;//&quot;) {

Here too we&apos;re doing a malloc for each character we scan.  This might be worth adding to WTFString.

&gt; Source/WebCore/html/parser/XSSAuditor.cpp:568
&gt; +            while (startPosition &lt; endPosition &amp;&amp; string[startPosition] != &apos;\r&apos; &amp;&amp; string[startPosition] != &apos;\n&apos;)
&gt; +                startPosition++;

Maybe have an inline function to test for isLinebreak ?

&gt; Source/WebCore/html/parser/XSSAuditor.cpp:584
&gt; +    foundPosition = startPosition + kMaximumFragmentLength;

So, kMaximumFragmentLength isn&apos;t really the maximum.  It&apos;s some sort of target for the maximum.

&gt; Source/WebCore/html/parser/XSSAuditor.cpp:595
&gt; +    // Stop at next comment.
&gt; +    if ((foundPosition = string.find(&quot;//&quot;, startPosition, endPosition - startPosition)) != notFound)
&gt; +        endPosition = foundPosition;
&gt; +    if ((foundPosition = string.find(&quot;/*&quot;, startPosition, endPosition - startPosition)) != notFound)
&gt; +        endPosition = foundPosition;

We should probably stop at the first &lt;!-- too.  In JavaScript &lt;!-- is just like //.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471165</commentid>
    <comment_count>13</comment_count>
      <attachid>108232</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-21 14:43:35 -0700</bug_when>
    <thetext>Comment on attachment 108232
Simpler patch

This looks great.  I&apos;d like to see another iteration of extractCodeFragment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471182</commentid>
    <comment_count>14</comment_count>
      <attachid>108232</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2011-09-21 14:57:13 -0700</bug_when>
    <thetext>Comment on attachment 108232
Simpler patch

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

&gt;&gt; Source/WebCore/html/parser/XSSAuditor.cpp:311
&gt;&gt; +        int end = token.endIndex() - token.startIndex();
&gt; 
&gt; snippetForRange doesn&apos;t use the same indicies as token.startIndex?  I guess this is the same way the code used to work.  (Also, these indicies should probably all be size_t, but that&apos;s a yak for another day.)

Will leave as is.

&gt;&gt; Source/WebCore/html/parser/XSSAuditor.cpp:313
&gt;&gt; +        if (isContainedInRequest(fullyDecodeString(snippet, decoder))) {
&gt; 
&gt; I see, we&apos;re not requiring the two pieces to be contiguous in the request.  Is that intentional?   I guess the code fragment isn&apos;t necessarily at the beginning of the script.

Yes, we need to deal with an injection like &lt;script&gt;// comment to trick you %0a alert(0) &lt;/script&gt; now.  We won&apos;t include the comment in the snippet we extract.

&gt;&gt; Source/WebCore/html/parser/XSSAuditor.cpp:542
&gt;&gt; +String XSSAuditor::extractCodeFragment(const String&amp; string)
&gt; 
&gt; If this is specific to JavaScript, maybe we should call it snippetForJavaScript ?

Sure.  Will rename.

&gt;&gt; Source/WebCore/html/parser/XSSAuditor.cpp:548
&gt;&gt; +    size_t foundPosition;
&gt; 
&gt; I would initialize this scalar with notFound, but that&apos;s just because I&apos;m paranoid.

Sure.  would like an uninit reference to lead to string[notFound] taking an exception.

&gt;&gt; Source/WebCore/html/parser/XSSAuditor.cpp:561
&gt;&gt; +    }
&gt; 
&gt; I&apos;m not sure why this is a special case.  It seems like we could just fold this into the following loop.  &lt;!-- is really the same thing as //.

Ok.  My recollection of the spec was that the first instance of &lt;!-- was a comment, but that subsequent ones were &lt;!-- , as in if (a&lt;!--b) {}  but I may be wrong here.

&gt;&gt; Source/WebCore/html/parser/XSSAuditor.cpp:566
&gt;&gt; +        if (string.substring(startPosition, 2) == &quot;//&quot;) {
&gt; 
&gt; Here too we&apos;re doing a malloc for each character we scan.  This might be worth adding to WTFString.

Or just  sp + 1 &lt; ep &amp;&amp; string[sp] == &apos;/&apos; &amp;&amp; string[sp+1] == &apos;/&apos;

&gt;&gt; Source/WebCore/html/parser/XSSAuditor.cpp:568
&gt;&gt; +                startPosition++;
&gt; 
&gt; Maybe have an inline function to test for isLinebreak ?

Sure.

&gt;&gt; Source/WebCore/html/parser/XSSAuditor.cpp:584
&gt;&gt; +    foundPosition = startPosition + kMaximumFragmentLength;
&gt; 
&gt; So, kMaximumFragmentLength isn&apos;t really the maximum.  It&apos;s some sort of target for the maximum.

Ok, I&apos;ll call it kMaximumFragmentLengthTarget.

&gt;&gt; Source/WebCore/html/parser/XSSAuditor.cpp:595
&gt;&gt; +        endPosition = foundPosition;
&gt; 
&gt; We should probably stop at the first &lt;!-- too.  In JavaScript &lt;!-- is just like //.

Yes, see above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471188</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-21 14:59:55 -0700</bug_when>
    <thetext>You&apos;re probably right w.r.t. &lt;!-- only being a comment the first time.  Maybe run a quick test?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471197</commentid>
    <comment_count>16</comment_count>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2011-09-21 15:15:08 -0700</bug_when>
    <thetext>&lt;script&gt; &lt;!-- this is a comment                                                 
alert(0) &lt;!-- this may not be a comment                                         
// --&gt;
&lt;/script&gt;
&lt;script&gt;a=1;alert(&quot;case 1: &quot; + (false&lt;!--a));&lt;/script&gt;                          
&lt;script&gt;a=1;alert(&quot;case 2: &quot; + (false&lt;! --a));&lt;/script&gt;                         
&lt;script&gt;a=1;alert(&quot;case 3: &quot; + (false&lt; !--a));&lt;/script&gt;                         

gives an alert: 0, syntax error, alert: case2:true, and alert: case3 true.  This implies that &lt;!-- is always a comment.  At least on webkit and FF (6.0.2).

So will fold all those into the loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471198</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-21 15:16:16 -0700</bug_when>
    <thetext>&gt; So will fold all those into the loop.

Great.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471278</commentid>
    <comment_count>18</comment_count>
      <attachid>108232</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2011-09-21 17:00:13 -0700</bug_when>
    <thetext>Comment on attachment 108232
Simpler patch

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

&gt;&gt;&gt; Source/WebCore/html/parser/XSSAuditor.cpp:595
&gt;&gt;&gt; +        endPosition = foundPosition;
&gt;&gt; 
&gt;&gt; We should probably stop at the first &lt;!-- too.  In JavaScript &lt;!-- is just like //.
&gt; 
&gt; Yes, see above.

Argh, as it turns out the 3-arg versions of these calls don&apos;t do what I expected them to do.  Will fix this too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471302</commentid>
    <comment_count>19</comment_count>
      <attachid>108261</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2011-09-21 17:52:33 -0700</bug_when>
    <thetext>Created attachment 108261
Patch + changes for previous comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471305</commentid>
    <comment_count>20</comment_count>
      <attachid>108261</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-21 18:03:46 -0700</bug_when>
    <thetext>Comment on attachment 108261
Patch + changes for previous comments.

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

Fantastic.

&gt; Source/WebCore/html/parser/XSSAuditor.cpp:561
&gt; +

Looks like there&apos;s an extra line here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471315</commentid>
    <comment_count>21</comment_count>
      <attachid>108261</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2011-09-21 18:38:00 -0700</bug_when>
    <thetext>Comment on attachment 108261
Patch + changes for previous comments.

It dawns on me :There&apos;s a subtle hole I introduced when I merged the two loops together in the end.  I&apos;ll retry tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471660</commentid>
    <comment_count>22</comment_count>
      <attachid>108353</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2011-09-22 10:17:53 -0700</bug_when>
    <thetext>Created attachment 108353
Revised patch closing hole with truncation case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471672</commentid>
    <comment_count>23</comment_count>
      <attachid>108261</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-22 10:28:27 -0700</bug_when>
    <thetext>Comment on attachment 108261
Patch + changes for previous comments.

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

&gt; Source/WebCore/html/parser/XSSAuditor.cpp:600
&gt; +            while (foundPosition &lt; endPosition &amp;&amp; !isHTMLSpace(string[foundPosition]))
&gt; +                foundPosition++;

I see.  This could walk over a carefully-placed comment that was just after position kMaximumFragmentLengthTarget.  Good catch sir.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472020</commentid>
    <comment_count>24</comment_count>
      <attachid>108353</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-22 19:27:40 -0700</bug_when>
    <thetext>Comment on attachment 108353
Revised patch closing hole with truncation case.

Clearing flags on attachment: 108353

Committed r95774: &lt;http://trac.webkit.org/changeset/95774&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472021</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-22 19:27:46 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108052</attachid>
            <date>2011-09-20 14:30:46 -0700</date>
            <delta_ts>2011-09-20 14:36:28 -0700</delta_ts>
            <desc>Patch + test cases.  </desc>
            <filename>patch_68094.txt</filename>
            <type>text/plain</type>
            <size>26328</size>
            <attacher name="Thomas Sepez">tsepez</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk1NTY5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDktMjAgIFRvbSBTZXBl
eiAgPHRzZXBlekBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRXh0cmFjdCBhIG1lYW5pbmdmdWwg
Y29kZSBzbmlwcGV0IGZyb20gYSBzY3JpcHQgYmxvY2tzLCB0YWtpbmcgY2FyZSBub3QgdG8KKyAg
ICAgICAgaW5jbHVkZSBjb21tZW50cywgZm9yIHVzZSBieSB0aGUgWFNTIGF1ZGl0b3IuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODA5NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiBodHRwL3Rl
c3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLWludmFsaWQtY2xvc2luZy10
YWcuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Nj
cmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50Lmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVu
dDIuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Nj
cmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50My5odG1sCisKKyAgICAgICAgKiBodG1sL3Bh
cnNlci9IVE1MU291cmNlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU291cmNl
VHJhY2tlcjo6ZW5kKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVG9rZW5pemVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6Om5leHRUb2tlbik6CisgICAgICAgICog
aHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9y
OjpmaWx0ZXJUb2tlbkFmdGVyU2NyaXB0U3RhcnRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6WFNT
QXVkaXRvcjo6ZXh0cmFjdENvZGVGcmFnbWVudCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvWFNT
QXVkaXRvci5oOgorCiAyMDExLTA5LTIwICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1lbmFyZEBv
cGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFtRdF0gW1dLMl0gSW1wbGVtZW50IGEgcGVyc2lzdGVu
dCBjb29raWUgc3RvcmFnZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxT
b3VyY2VUcmFja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MU291cmNlVHJhY2tlci5jcHAJKHJldmlzaW9uIDk1NDI2KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFNvdXJjZVRyYWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Myw4ICs0MywxMiBAQCB2b2lkIEhUTUxTb3VyY2VUcmFja2VyOjpzdGFydChjb25zdCBIVE1MCiB2
b2lkIEhUTUxTb3VyY2VUcmFja2VyOjplbmQoY29uc3QgSFRNTElucHV0U3RyZWFtJiBpbnB1dCwg
SFRNTFRva2VuJiB0b2tlbikKIHsKICAgICBtX2NhY2hlZFNvdXJjZUZvclRva2VuID0gU3RyaW5n
KCk7Ci0gICAgLy8gRklYTUU6IFRoaXMgd29yayBzaG91bGQgcmVhbGx5IGJlIGRvbmUgYnkgdGhl
IEhUTUxUb2tlbml6ZXIuCi0gICAgdG9rZW4uZW5kKGlucHV0LmN1cnJlbnQoKS5udW1iZXJPZkNo
YXJhY3RlcnNDb25zdW1lZCgpKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIHdvcmsgc2hvdWxkIHJl
YWxseSBiZSBkb25lIGJ5IHRoZSBIVE1MVG9rZW5pemVyIGluIGFsbCBjYXNlcywKKyAgICAvLyBp
bnN0ZWFkIG9mIHRoZSBmZXcgY2FzZXMgd2hlcmUgaXQgZXhwbGljaXRseSBzdGVwcyBpbiB0byBj
b3JyZWN0IHZhbHVlcworICAgIC8vIGtub3duIHRvIGJlIHdyb25nIGluIGZhY2Ugb2YgaXRzIGlu
dGVybmFsIGJ1ZmZlcmluZy4KKyAgICBpZiAoIXRva2VuLmVuZEluZGV4KCkpCisgICAgICAgIHRv
a2VuLmVuZChpbnB1dC5jdXJyZW50KCkubnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKSk7CiB9
CiAKIFN0cmluZyBIVE1MU291cmNlVHJhY2tlcjo6c291cmNlRm9yVG9rZW4oY29uc3QgSFRNTFRv
a2VuJiB0b2tlbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tl
bml6ZXIuY3BwCShyZXZpc2lvbiA5NTQyNikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTcsOCArMjk3LDEyIEBAIGJv
b2wgSFRNTFRva2VuaXplcjo6bmV4dFRva2VuKFNlZ21lbnRlZFMKICAgICBFTkRfU1RBVEUoKQog
CiAgICAgSFRNTF9CRUdJTl9TVEFURShTY3JpcHREYXRhU3RhdGUpIHsKLSAgICAgICAgaWYgKGNj
ID09ICc8JykKKyAgICAgICAgaWYgKGNjID09ICc8JykgeworICAgICAgICAgICAgLy8gVG9rZW4g
bWlnaHQgZW5kIGhlcmUuIElmIG5vdCwgd2UnbGwgY29tZSB0aHJvdWdoIGhlcmUgYWdhaW4KKyAg
ICAgICAgICAgIC8vIGFuZCB1cGRhdGUgdGhlIGVuZCBsb2NhdGlvbiBhZ2Fpbi4KKyAgICAgICAg
ICAgIG1fdG9rZW4tPmVuZChzb3VyY2UubnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKSk7CiAg
ICAgICAgICAgICBIVE1MX0FEVkFOQ0VfVE8oU2NyaXB0RGF0YUxlc3NUaGFuU2lnblN0YXRlKTsK
KyAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjYyA9PSBJbnB1dFN0cmVhbVByZXByb2Nlc3Nv
cjo6ZW5kT2ZGaWxlTWFya2VyKQogICAgICAgICAgICAgcmV0dXJuIGVtaXRFbmRPZkZpbGUoc291
cmNlKTsKICAgICAgICAgZWxzZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9Y
U1NBdWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9Y
U1NBdWRpdG9yLmNwcAkocmV2aXNpb24gOTU0MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9YU1NBdWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMjAzIEBACiAK
ICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKK25hbWVzcGFjZSB7CisKKyNkZWZpbmUg
REVDTEFSRV9MRVhFUl9DSEFSQUNURVJfQ0xBU1NFUygpIFwKKyAgICBYKE5MKSwgICAgICAgICAg
LyogU29tZSBmb3JtIG9mIG5ld2xpbmUuICovIFwKKyAgICBYKFdTKSwgICAgICAgICAgLyogU29t
ZSBvdGhlciBmb3JtIG9mIHdoaXRlc3BhY2UuICovIFwKKyAgICBYKEJBTkcpLCAgICAgICAgLyog
RXhjbGFtYXRpb24gcG9pbnQuICovIFwKKyAgICBYKFFVT1QpLCAgICAgICAgLyogRG91YmxlIHF1
b3RlIGNoYXJhY3Rlci4gKi8gXAorICAgIFgoVElDSyksICAgICAgICAvKiBTaW5nbGUgcXVvdGUg
Y2hhcmFjdGVyLiAqLyBcCisgICAgWChTVEFSKSwgICAgICAgIC8qIEFzdGVyaXNrLiAqLyBcCisg
ICAgWChEQVNIKSwgICAgICAgIC8qIE1pbnVzIHNpZ24uICovIFwKKyAgICBYKExUKSwgICAgICAg
ICAgLyogTGVzcy10aGFuIHNpZ24uICovIFwKKyAgICBYKEdUKSwgICAgICAgICAgLyogR3JlYXRl
ci10aGFuIHNpZ24uICovIFwKKyAgICBYKFNMQVNIKSwgICAgICAgLyogRm9yd2FyZCBzbGFzaC4g
Ki8gXAorICAgIFgoQlNMQVNIKSwgICAgICAvKiBCYWNrc2xhc2guICovIFwKKyAgICBYKE9USEVS
KSAgICAgICAgLyogQW55IG90aGVyIGNoYXJhY3Rlci4gKi8KKworI2RlZmluZSBERUNMQVJFX0xF
WEVSX1NUQVRFUygpIFwKKyAgICBYKFNUQVJUKSwgICAgICAgLyogU3RhcnQsIG5vIGNvZGUgeWV0
IGVuY291bnRlcmVkLiAqLyBcCisgICAgWChTTFQpLCAgICAgICAgIC8qIFN0YXJ0IExlc3MtdGhh
biBzaWduLCBubyBjb2RlIGVuY291bnRlcmVkLiAqLyBcCisgICAgWChTTUQpLCAgICAgICAgIC8q
IFN0YXJ0IE1hcmt1cCBkZWNsYXJhdGlvbiBtb2RlLCBubyBjb2RlIGVuY291bnRlcmVkLiAqLyBc
CisgICAgWChTTUREQVNIKSwgICAgIC8qIFN0YXJ0IE1hcmt1cCBkZWNsYXJhdGlvbiBtb2RlIGZp
cnN0IGRhc2ggbm8gY29kZSBlbmNvdW50ZXJlZC4gKi8gXAorICAgIFgoU01EQ01OVCksICAgICAv
KiBTdGFydCBNYXJrdXAgZGVjbGFyYXRpb24gbW9kZSBjb21tZW50IG1vZGUgbm8gY29kZSBlbmRj
b3VudGVyZWQuICovIFwKKyAgICBYKFNNRENNREgpLCAgICAgLyogU3RhcnQgTWFya3VwIGRlY2xh
cmF0aW9uIG1vZGUgY29tbWVudCBtb2RlIGZpcnN0IGRhc2gsIG5vIGNvZGUgZW5jb3VudGVyZWQu
ICovIFwKKyAgICBYKFNTTEFTSCksICAgICAgLyogU3RhcnQgU2xhc2gsIG5vIGNvZGUgZW5jb3Vu
dGVyZWQuICovIFwKKyAgICBYKFNTTENNTlQpLCAgICAgLyogU3RhcnQgU2luZ2xlLWxpbmUgY29t
bWVudCwgbm8gY29kZSBlbmNvdXRlcmVkLiAqLyBcCisgICAgWChTTUxDTU5UKSwgICAgIC8qIFN0
YXJ0IE11bHRpLWxpbmUgY29tbWVudCwgbm8gY29kZSBlbmNvdW50ZXJlZC4gKi8gXAorICAgIFgo
U01MU1RBUiksICAgICAvKiBTdGFydCBNdWx0aS1saW5lIGNvbW1lbnQgc3Rhciwgbm8gY29kZSBl
bmNvdW50ZXJlZC4gKi8gXAorICAgIFgoQ09ERSksICAgICAgICAvKiBDb2RlIGVuY291bnRlcmVk
LCBsb29raW5nIGZvciB0cnVuY2F0aW9uIHBvaW50LiAqLyBcCisgICAgWChRVU9UKSwgICAgICAg
IC8qIFF1b3RlZCBzdHJpbmcgZW50ZXJlZC4gKi8gXAorICAgIFgoVElDSyksICAgICAgICAvKiBT
aW5nbGUtcXVvdGVkIHN0cmluZyBlbnRlcmVkLiAqLyBcCisgICAgWChFU0NPREUpLCAgICAgIC8q
IEVzY2FwZWQgc3RhdGUgaW4gY29kZS4gKi8gXAorICAgIFgoRVNRVU9UKSwgICAgICAvKiBFc2Nh
cGVkIHN0YXRlIGluIHF1b3RlZCBzdHJpbmcuICovIFwKKyAgICBYKEVTVElDSyksICAgICAgLyog
RXNjYWNwZSBzdGF0ZSBpbiBzaW5nbGUtcXVvdGVkIHN0cmluZy4gKi8gXAorICAgIFgoTFQpLCAg
ICAgICAgICAvKiBMZXNzLXRoYW4gc2lnbiBlbmNvdW50ZWQgaW4gY29kZS4gKi8gXAorICAgIFgo
U0xBU0gpLCAgICAgICAvKiBTbGFzaCBlbmNvdW50ZWQgaW4gY29kZS4gKi8gXAorICAgIFgoRE9O
RSkgICAgICAgICAvKiBTdG9wIHN0YXRlLiAqLworCisjZGVmaW5lIERFQ0xBUkVfTEVYRVJfQUNU
SU9OUygpIFwKKyAgICBYKE5PTkUpLCAgICAgICAgLyogTm8gYWN0aW9uLiAqLyBcCisgICAgWChT
QVZFUE9TKSwgICAgIC8qIFNhdmUgY3VycmVudCBwb3NpdGlvbiBhcyBzdGFydCBvZiBjb2RlIGZy
YWdtZW50LiAqLyBcCisgICAgWChDSEVDS0xOKSAgICAgIC8qIENoZWNrIHRvdGFsIGxlbmdodCBv
ZiBjb2RlIGZyYWdtZW50LiAqLworCisjdW5kZWYgWAorI2RlZmluZSBYKGFyZykgTEVYRVJfQ0hB
UkFDVEVSX0NMQVNTXyMjYXJnCisKK2VudW0gTGV4ZXJDaGFyYWN0ZXJDbGFzcyB7CisgICAgREVD
TEFSRV9MRVhFUl9DSEFSQUNURVJfQ0xBU1NFUygpLAorICAgIExFWEVSX0NIQVJBQ1RFUl9DTEFT
U19NQVgKK307CisKKyN1bmRlZiBYCisjdW5kZWYgWQorI2RlZmluZSBYKGFyZykgKHVuc2lnbmVk
IGNoYXIpTEVYRVJfQ0hBUkFDVEVSX0NMQVNTXyMjYXJnCisjZGVmaW5lIFkoYSwgYiwgYywgZCwg
ZSwgZiwgZywgaCkgWChhKSwgWChiKSwgWChjKSwgWChkKSwgWChlKSwgWChmKSwgWChnKSwgWCho
KQorCisvKiBQYWNrIGludG8gc2luZ2xlIGJ5dGUgcGVyIGVsZW1lbnQsIHJhdGhlciB0aGFuIDQg
Ynl0ZXMgZm9yIGVudW1zLiAqLworY29uc3QgdW5zaWduZWQgY2hhciBsZXhlckNoYXJhY3RlckNs
YXNzVGFibGVbMTI4XSA9IHsKKyAgICAvKiBudWwgICAgc29oICAgIHN0eCAgICBldHggICAgZW90
ICAgIGVucSAgICBhY2sgICAgYmVsICovCisgICAgWShPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhF
UiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIpLAorICAgIC8qIGJzICAgICBodCAgICAgbmwg
ICAgIHZ0ICAgICBucCAgICAgY3IgICAgIHNvICAgICBzaSAgKi8KKyAgICBZKE9USEVSLCBXUywg
ICAgTkwsICAgIE9USEVSLCBPVEhFUiwgTkwsICAgIE9USEVSLCBPVEhFUiksCisgICAgLyogZGxl
ICAgIGRjMSAgICBkYzIgICAgZGMzICAgIGRjNCAgICBuYWsgICAgc3luICAgIGV0YiAqLworICAg
IFkoT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVS
KSwKKyAgICAvKiBjYW4gICAgZW0gICAgIHN1YiAgICBlc2MgICAgZnMgICAgIGdzICAgICBycyAg
ICAgdXMgICovCisgICAgWShPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVS
LCBPVEhFUiwgT1RIRVIpLAorICAgIC8qIHNwICAgICAgISAgICAgICIgICAgICAjICAgICAgJCAg
ICAgICUgICAgICAmICAgICAgJyAgKi8KKyAgICBZKFdTLCAgICBCQU5HLCAgUVVPVCwgIE9USEVS
LCBPVEhFUiwgT1RIRVIsIE9USEVSLCBUSUNLKSwKKyAgICAvKiAgKCAgICAgICkgICAgICAqICAg
ICAgKyAgICAgICwgICAgICAtICAgICAgLiAgICAgIC8gICovCisgICAgWShPVEhFUiwgT1RIRVIs
IFNUQVIsICBPVEhFUiwgT1RIRVIsIERBU0gsICBPVEhFUiwgU0xBU0gpLAorICAgIC8qICAwICAg
ICAgMSAgICAgIDIgICAgICAzICAgICAgNCAgICAgIDUgICAgICA2ICAgICAgNyAgKi8KKyAgICBZ
KE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiks
CisgICAgLyogIDggICAgICA5ICAgICAgOiAgICAgIDsgICAgICA8ICAgICAgPSAgICAgID4gICAg
ICA/ICAqLworICAgIFkoT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIExULCAgICBPVEhFUiwg
R1QsICAgIE9USEVSKSwKKyAgICAvKiAgQCAgICAgIEEgICAgICBCICAgICAgQyAgICAgIEQgICAg
ICBFICAgICAgRiAgICAgIEcgICovCisgICAgWShPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwg
T1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIpLAorICAgIC8qICBIICAgICAgSSAgICAgIEogICAg
ICBLICAgICAgTCAgICAgIE0gICAgICBOICAgICAgTyAgKi8KKyAgICBZKE9USEVSLCBPVEhFUiwg
T1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiksCisgICAgLyogIFAgICAg
ICBRICAgICAgUiAgICAgIFMgICAgICBUICAgICAgVSAgICAgIFYgICAgICBXICAqLworICAgIFko
T1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSKSwK
KyAgICAvKiAgWCAgICAgIFkgICAgICBaICAgICAgWyAgICAgIFwgICAgICBdICAgICAgXiAgICAg
IF8gICovCisgICAgWShPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgQlNMQVNILCBPVEhFUiwg
T1RIRVIsIE9USEVSKSwKKyAgICAvKiAgYCAgICAgIGEgICAgICBiICAgICAgYyAgICAgIGQgICAg
ICBlICAgICAgZiAgICAgIGcgICovCisgICAgWShPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwg
T1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIpLAorICAgIC8qICBoICAgICAgaSAgICAgIGogICAg
ICBrICAgICAgbCAgICAgIG0gICAgICBuICAgICAgbyAgKi8KKyAgICBZKE9USEVSLCBPVEhFUiwg
T1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiksCisgICAgLyogIHAgICAg
ICBxICAgICAgciAgICAgIHMgICAgICB0ICAgICAgdSAgICAgIHYgICAgICB3ICAqLworICAgIFko
T1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSKSwK
KyAgICAvKiAgeCAgICAgIHkgICAgICB6ICAgICAgeyAgICAgIHwgICAgICB9ICAgICAgfiAgICAg
ZGVsICovCisgICAgWShPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBP
VEhFUiwgT1RIRVIpLAorfTsKKworI3VuZGVmIFgKKyNkZWZpbmUgWChhcmcpIExFWEVSX1NUQVRF
XyMjYXJnCisKK2VudW0gTGV4ZXJTdGF0ZSB7CisgICAgREVDTEFSRV9MRVhFUl9TVEFURVMoKSwK
KyAgICBMRVhFUl9TVEFURV9NQVgKK307CisKKyN1bmRlZiBYCisjdW5kZWYgWQorI2RlZmluZSBY
KGFyZykgKHVuc2lnbmVkIGNoYXIpTEVYRVJfU1RBVEVfIyNhcmcKKyNkZWZpbmUgWShhLCBiLCBj
LCBkLCBlLCBmLCBnLCBoLCBpLCBqLCBrLCBsKSB7IFgoYSksIFgoYiksIFgoYyksIFgoZCksIFgo
ZSksIFgoZiksIFgoZyksIFgoaCksIFgoaSksIFgoaiksIFgoayksIFgobCkgfQorCisvKiBQYWNr
IGludG8gc2luZ2xlIGJ5dGUgcGVyIGVsZW1lbnQsIHJhdGhlciB0aGFuIDQgYnl0ZXMgZm9yIGVu
dW1zLiAqLworY29uc3QgdW5zaWduZWQgY2hhciBsZXhlclN0YXRlVGFibGVbTEVYRVJfU1RBVEVf
TUFYXVtMRVhFUl9DSEFSQUNURVJfQ0xBU1NfTUFYXSA9IHsgCisgICAgLyogICAgICAgICAgICAg
IE5MICAgICAgICBXUyAgICAgICAgQkFORyAgICAgIFFVT1QgICAgICBUSUNLICAgICAgU1RBUiAg
ICAgIERBU0ggICAgICBMVCAgICAgICAgR1QgICAgICAgIFNMQVNIICAgICBCU0xBU0ggICAgT1RI
RVIgICovCisgICAgLyogICAgICAgICAgICAgIC0tLS0tLS0gICAtLS0tLS0tICAgLS0tLS0tLSAg
IC0tLS0tLS0gICAtLS0tLS0tICAgLS0tLS0tLSAgIC0tLS0tLS0gICAtLS0tLS0tICAgLS0tLS0t
LSAgIC0tLS0tLS0gICAtLS0tLS0tICAgLS0tLS0tLSovCisgICAgLyogU1RBUlQgICAqLyBZKFNU
QVJUICAgLCBTVEFSVCAgICwgQ09ERSAgICAsIFFVT1QgICAgLCBUSUNLICAgICwgQ09ERSAgICAs
IENPREUgICAgLCBTTFQgICAgICwgQ09ERSAgICAsIFNTTEFTSCAgLCBFU0NPREUgICwgQ09ERSks
CisgICAgLyogU0xUICAgICAqLyBZKENPREUgICAgLCBDT0RFICAgICwgU01EICAgICAsIFFVT1Qg
ICAgLCBUSUNLICAgICwgQ09ERSAgICAsIENPREUgICAgLCBMVCAgICAgICwgU1RBUlQgICAsIENP
REUgICAgLCBFU0NPREUgICwgQ09ERSksCisgICAgLyogU01EICAgICAqLyBZKFNNRCAgICAgLCBT
TUQgICAgICwgU01EICAgICAsIFNNRCAgICAgLCBTTUQgICAgICwgU01EICAgICAsIFNNRERBU0gg
LCBTTUQgICAgICwgU1RBUlQgICAsIFNNRCAgICAgLCBTTUQgICAgICwgU01EKSwKKyAgICAvKiBT
TUREQVNIICovIFkoU01EICAgICAsIFNNRCAgICAgLCBTTUQgICAgICwgU01EICAgICAsIFNNRCAg
ICAgLCBTTUQgICAgICwgU01EQ01OVCAsIFNNRCAgICAgLCBTTUQgICAgICwgU01EICAgICAsIFNN
RCAgICAgLCBTTUQpLAorICAgIC8qIFNNRENNTlQgKi8gWShTVEFSVCAgICwgU01EQ01OVCAsIFNN
RENNTlQgLCBTTURDTU5UICwgU01EQ01OVCAsIFNNRENNTlQgLCBTTURDTURIICwgU01EQ01OVCAs
IFNNRENNTlQgLCBTTURDTU5UICwgU01EQ01OVCAsIFNNRENNTlQpLAorICAgIC8qIFNNRENNREgg
Ki8gWShTTURDTU5UICwgU01EQ01OVCAsIFNNRENNTlQgLCBTTURDTU5UICwgU01EQ01OVCAsIFNN
RENNTlQgLCBTTUQgICAgICwgU01EQ01OVCAsIFNNRENNTlQgLCBTTURDTU5UICwgU01EQ01OVCAs
IFNNRENNTlQpLAorICAgIC8qIFNTTEFTSCAgKi8gWShDT0RFICAgICwgQ09ERSAgICAsIENPREUg
ICAgLCBDT0RFICAgICwgQ09ERSAgICAsIFNNTENNTlQgLCBDT0RFICAgICwgQ09ERSAgICAsIENP
REUgICAgLCBTU0xDTU5UICwgQ09ERSAgICAsIENPREUpLAorICAgIC8qIFNTTENNTlQgKi8gWShT
VEFSVCAgICwgU1NMQ01OVCAsIFNTTENNTlQgLCBTU0xDTU5UICwgU1NMQ01OVCAsIFNTTENNTlQg
LCBTU0xDTU5UICwgU1NMQ01OVCAsIFNTTENNTlQgLCBTU0xDTU5UICwgU1NMQ01OVCAsIFNTTENN
TlQpLAorICAgIC8qIFNNTENNTlQgKi8gWShTTUxDTU5UICwgU01MQ01OVCAsIFNNTENNTlQgLCBT
TUxDTU5UICwgU01MQ01OVCAsIFNNTFNUQVIgLCBTTUxDTU5UICwgU01MQ01OVCAsIFNNTENNTlQg
LCBTTUxDTU5UICwgU01MQ01OVCAsIFNNTENNTlQpLCAKKyAgICAvKiBTTUxTVEFSICovIFkoU01M
Q01OVCAsIFNNTENNTlQgLCBTTUxDTU5UICwgU01MQ01OVCAsIFNNTENNTlQgLCBTTUxDTU5UICwg
U01MQ01OVCAsIFNNTENNTlQgLCBTTUxDTU5UICwgU1RBUlQgICAsIFNNTENNTlQgLCBTTUxDTU5U
KSwgICAgIAorICAgIC8qIENPREUgICAgKi8gWShDT0RFICAgICwgQ09ERSAgICAsIENPREUgICAg
LCBRVU9UICAgICwgVElDSyAgICAsIENPREUgICAgLCBDT0RFICAgICwgTFQgICAgICAsIENPREUg
ICAgLCBTTEFTSCAgICwgRVNDT0RFICAsIENPREUpLAorICAgIC8qIFFVT1QgICAgKi8gWShRVU9U
ICAgICwgUVVPVCAgICAsIFFVT1QgICAgLCBDT0RFICAgICwgUVVPVCAgICAsIFFVT1QgICAgLCBR
VU9UICAgICwgUVVPVCAgICAsIFFVT1QgICAgLCBRVU9UICAgICwgRVNRVU9UICAsIFFVT1QpLAor
ICAgIC8qIFRJQ0sgICAgKi8gWShUSUNLICAgICwgVElDSyAgICAsIFRJQ0sgICAgLCBUSUNLICAg
ICwgQ09ERSAgICAsIFRJQ0sgICAgLCBUSUNLICAgICwgVElDSyAgICAsIFRJQ0sgICAgLCBUSUNL
ICAgICwgRVNUSUNLICAsIFRJQ0spLAorICAgIC8qIEVTQ09ERSAgKi8gWShDT0RFICAgICwgQ09E
RSAgICAsIENPREUgICAgLCBDT0RFICAgICwgQ09ERSAgICAsIENPREUgICAgLCBDT0RFICAgICwg
TFQgICAgICAsIENPREUgICAgLCBTTEFTSCAgICwgQ09ERSAgICAsIENPREUpLAorICAgIC8qIEVT
UVVPVCAgKi8gWShRVU9UICAgICwgUVVPVCAgICAsIFFVT1QgICAgLCBRVU9UICAgICwgUVVPVCAg
ICAsIFFVT1QgICAgLCBRVU9UICAgICwgUVVPVCAgICAsIFFVT1QgICAgLCBRVU9UICAgICwgUVVP
VCAgICAsIFFVT1QpLAorICAgIC8qIEVTVElDSyAgKi8gWShUSUNLICAgICwgVElDSyAgICAsIFRJ
Q0sgICAgLCBUSUNLICAgICwgVElDSyAgICAsIFRJQ0sgICAgLCBUSUNLICAgICwgVElDSyAgICAs
IFRJQ0sgICAgLCBUSUNLICAgICwgVElDSyAgICAsIFRJQ0spLAorICAgIC8qIExUICAgICAgKi8g
WShDT0RFICAgICwgQ09ERSAgICAsIERPTkUgICAgLCBDT0RFICAgICwgQ09ERSAgICAsIENPREUg
ICAgLCBDT0RFICAgICwgTFQgICAgICAsIENPREUgICAgLCBDT0RFICAgICwgRVNDT0RFICAsIENP
REUpLAorICAgIC8qIFNMQVNIICAgKi8gWShDT0RFICAgICwgQ09ERSAgICAsIENPREUgICAgLCBD
T0RFICAgICwgQ09ERSAgICAsIERPTkUgICAgLCBDT0RFICAgICwgQ09ERSAgICAsIENPREUgICAg
LCBET05FICAgICwgRVNDT0RFICAsIENPREUpLAorICAgIC8qIERPTkUgICAgKi8gWShET05FICAg
ICwgRE9ORSAgICAsIERPTkUgICAgLCBET05FICAgICwgRE9ORSAgICAsIERPTkUgICAgLCBET05F
ICAgICwgRE9ORSAgICAsIERPTkUgICAgLCBET05FICAgICwgRE9ORSAgICAsIERPTkUpLCAKK307
CisKKyN1bmRlZiBYCisjZGVmaW5lIFgoYXJnKSBMRVhFUl9BQ1RJT05fIyNhcmcKKworZW51bSBM
ZXhlckFjdGlvbiB7CisgICAgREVDTEFSRV9MRVhFUl9BQ1RJT05TKCksCisgICAgTEVYRVJfQUNU
SU9OX01BWAorfTsKKworI3VuZGVmIFgKKyN1bmRlZiBZCisjZGVmaW5lIFgoYXJnKSAodW5zaWdu
ZWQgY2hhcilMRVhFUl9BQ1RJT05fIyNhcmcgCisjZGVmaW5lIFkoYSwgYiwgYywgZCwgZSwgZiwg
ZywgaCwgaSwgaiwgaywgbCkgeyBYKGEpLCBYKGIpLCBYKGMpLCBYKGQpLCBYKGUpLCBYKGYpLCBY
KGcpLCBYKGgpLCBYKGkpLCBYKGopLCBYKGspLCBYKGwpIH0KKworLyogUGFjayBpbnRvIHNpbmds
ZSBieXRlIHBlciBlbGVtZW50LCByYXRoZXIgdGhhbiA0IGJ5dGVzIGZvciBlbnVtcy4gKi8KK2Nv
bnN0IHVuc2lnbmVkIGNoYXIgbGV4ZXJBY3Rpb25UYWJsZVtMRVhFUl9TVEFURV9NQVhdW0xFWEVS
X0NIQVJBQ1RFUl9DTEFTU19NQVhdID0geyAKKyAgICAvKiAgICAgICAgICAgICAgTkwgICAgICAg
IFdTICAgICAgICBCQU5HICAgICAgUVVPVCAgICAgIFRJQ0sgICAgICBTVEFSICAgICAgREFTSCAg
ICAgIExUICAgICAgICBHVCAgICAgICAgU0xBU0ggICAgIEJTTEFTSCAgICBPVEhFUiAgKi8KKyAg
ICAvKiAgICAgICAgICAgICAgLS0tLS0tLSAgIC0tLS0tLS0gICAtLS0tLS0tICAgLS0tLS0tLSAg
IC0tLS0tLS0gICAtLS0tLS0tICAgLS0tLS0tLSAgIC0tLS0tLS0gICAtLS0tLS0tICAgLS0tLS0t
LSAgIC0tLS0tLS0gICAtLS0tLS0tKi8KKyAgICAvKiBTVEFSVCAgICovIFkoTk9ORSAgICAsIE5P
TkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAs
IE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FKSwgICAgCisgICAg
LyogU0xUICAgICAqLyBZKE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBO
T05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAg
LCBOT05FICAgICwgTk9ORSksICAgIAorICAgIC8qIFNNRCAgICAgKi8gWShOT05FICAgICwgTk9O
RSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwg
Tk9ORSAgICAsIFNBVkVQT1MgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUpLCAgICAKKyAgICAv
KiBTTUREQVNIICovIFkoTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5P
TkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAs
IE5PTkUgICAgLCBOT05FKSwgICAgCisgICAgLyogU01EQ01OVCAqLyBZKFNBVkVQT1MgLCBOT05F
ICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBO
T05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSksICAgIAorICAgIC8q
IFNNRENNRCAgKi8gWShOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9O
RSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwg
Tk9ORSAgICAsIE5PTkUpLCAgICAKKyAgICAvKiBTU0xBU0ggICovIFkoTk9ORSAgICAsIE5PTkUg
ICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5P
TkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FKSwgICAgCisgICAgLyog
U1NMQ01OVCAqLyBZKFNBVkVQT1MgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05F
ICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBO
T05FICAgICwgTk9ORSksICAgIAorICAgIC8qIFNNTENNTlQgKi8gWShOT05FICAgICwgTk9ORSAg
ICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9O
RSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUpLCAgICAKKyAgICAvKiBT
TUxTVEFSICovIFkoTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUg
ICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgU0FWRVBPUyAsIE5P
TkUgICAgLCBOT05FKSwgICAgCisgICAgLyogQ09ERSAgICAqLyBZKENIRUNLTE4gLCBDSEVDS0xO
ICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVD
S0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiksCisgICAgLyogUVVP
VCAgICAqLyBZKENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xO
ICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVD
S0xOICwgQ0hFQ0tMTiksCisgICAgLyogVElDSyAgICAqLyBZKENIRUNLTE4gLCBDSEVDS0xOICwg
Q0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xO
ICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiksCisgICAgLyogRVNDT0RF
ICAqLyBZKENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwg
Q0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xO
ICwgQ0hFQ0tMTiksCisgICAgLyogRVNRVU9UICAqLyBZKENIRUNLTE4gLCBDSEVDS0xOICwgQ0hF
Q0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwg
Q0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiksCisgICAgLyogRVNUSUNLICAq
LyBZKENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hF
Q0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwg
Q0hFQ0tMTiksCisgICAgLyogTFQgICAgICAqLyBZKENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tM
TiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hF
Q0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiksCisgICAgLyogU0xBU0ggICAqLyBZ
KENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tM
TiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hF
Q0tMTiksCisgICAgLyogRE9ORSAgICAqLyBZKE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAs
IE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAg
ICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSksICAgIAorfTsKKworI2lmbmRlZiBOREVCVUcK
KyN1bmRlZiBYCisjZGVmaW5lIFgoYXJnKSAjYXJnCitjb25zdCBib29sIGxleGVyVHJhY2UgPSBm
YWxzZTsKK2NvbnN0IGNoYXIqIGxleGVyQ2hhcmFjdGVyQ2xhc3NOYW1lc1tMRVhFUl9DSEFSQUNU
RVJfQ0xBU1NfTUFYXSA9IHsgREVDTEFSRV9MRVhFUl9DSEFSQUNURVJfQ0xBU1NFUygpIH07Citj
b25zdCBjaGFyKiBsZXhlclN0YXRlTmFtZXNbTEVYRVJfU1RBVEVfTUFYXSA9IHsgREVDTEFSRV9M
RVhFUl9TVEFURVMoKSB9OworY29uc3QgY2hhciogbGV4ZXJBY3Rpb25OYW1lc1tMRVhFUl9BQ1RJ
T05fTUFYXSA9IHsgREVDTEFSRV9MRVhFUl9BQ1RJT05TKCkgfTsKKyNlbmRpZgorCitpbmxpbmUg
TGV4ZXJDaGFyYWN0ZXJDbGFzcyBsZXhlckNoYXJhY3RlckNsYXNzRm9yKFVDaGFyIGMpCit7Cisg
ICAgcmV0dXJuIGMgPCAxMjggPyAoTGV4ZXJDaGFyYWN0ZXJDbGFzcylsZXhlckNoYXJhY3RlckNs
YXNzVGFibGVbY10gOiBMRVhFUl9DSEFSQUNURVJfQ0xBU1NfT1RIRVI7Cit9CisKK2lubGluZSBM
ZXhlclN0YXRlIGxleGVyU3RhdGVGb3IoTGV4ZXJTdGF0ZSBzdGF0ZSwgIExleGVyQ2hhcmFjdGVy
Q2xhc3MgY2MpCit7CisgICAgQVNTRVJUKHN0YXRlIDwgTEVYRVJfU1RBVEVfTUFYKTsKKyAgICBB
U1NFUlQoY2MgPCBMRVhFUl9DSEFSQUNURVJfQ0xBU1NfTUFYKTsKKyAgICByZXR1cm4gKExleGVy
U3RhdGUpbGV4ZXJTdGF0ZVRhYmxlW3N0YXRlXVtjY107Cit9CisKK2lubGluZSBMZXhlckFjdGlv
biBsZXhlckFjdGlvbkZvcihMZXhlclN0YXRlIHN0YXRlLCAgTGV4ZXJDaGFyYWN0ZXJDbGFzcyBj
YykKK3sKKyAgICBBU1NFUlQoc3RhdGUgPCBMRVhFUl9TVEFURV9NQVgpOworICAgIEFTU0VSVChj
YyA8IExFWEVSX0NIQVJBQ1RFUl9DTEFTU19NQVgpOworICAgIHJldHVybiAoTGV4ZXJBY3Rpb24p
bGV4ZXJBY3Rpb25UYWJsZVtzdGF0ZV1bY2NdOworfQorCit9IC8vIG5hbWVzcGFjZQorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CkBAIC0zMDUsMTUg
KzUwMiwxNiBAQCBib29sIFhTU0F1ZGl0b3I6OmZpbHRlclRva2VuQWZ0ZXJTY3JpcHRTCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpbnQgc3RhcnQgPSAwOwotICAgIC8vIEZJ
WE1FOiBXZSBwcm9iYWJseSB3YW50IHRvIGdyYWIgb25seSB0aGUgZmlyc3QgZmV3IGNoYXJhY3Rl
cnMgb2YgdGhlCi0gICAgLy8gICAgICAgIGNvbnRlbnRzIG9mIHRoZSBzY3JpcHQgZWxlbWVudC4K
LSAgICBpbnQgZW5kID0gdG9rZW4uZW5kSW5kZXgoKSAtIHRva2VuLnN0YXJ0SW5kZXgoKTsKLSAg
ICBTdHJpbmcgc25pcHBldCA9IG1fY2FjaGVkU25pcHBldCArIHNuaXBwZXRGb3JSYW5nZSh0b2tl
biwgc3RhcnQsIGVuZCk7Ci0gICAgaWYgKGlzQ29udGFpbmVkSW5SZXF1ZXN0KGZ1bGx5RGVjb2Rl
U3RyaW5nKHNuaXBwZXQsIG1fcGFyc2VyLT5kb2N1bWVudCgpLT5kZWNvZGVyKCkpKSkgewotICAg
ICAgICB0b2tlbi5lcmFzZUNoYXJhY3RlcnMoKTsKLSAgICAgICAgdG9rZW4uYXBwZW5kVG9DaGFy
YWN0ZXIoJyAnKTsgLy8gVGVjaG5pY2FsbHksIGNoYXJhY3RlciB0b2tlbnMgY2FuJ3QgYmUgZW1w
dHkuCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIFRleHRSZXNvdXJjZURlY29kZXIqIGRlY29k
ZXIgPSBtX3BhcnNlci0+ZG9jdW1lbnQoKS0+ZGVjb2RlcigpOworICAgIGlmIChpc0NvbnRhaW5l
ZEluUmVxdWVzdChmdWxseURlY29kZVN0cmluZyhtX2NhY2hlZFNuaXBwZXQsIGRlY29kZXIpKSkg
eworICAgICAgICBpbnQgc3RhcnQgPSAwOworICAgICAgICBpbnQgZW5kID0gdG9rZW4uZW5kSW5k
ZXgoKSAtIHRva2VuLnN0YXJ0SW5kZXgoKTsKKyAgICAgICAgU3RyaW5nIHNuaXBwZXQgPSBleHRy
YWN0Q29kZUZyYWdtZW50KHNuaXBwZXRGb3JSYW5nZSh0b2tlbiwgc3RhcnQsIGVuZCkpOworICAg
ICAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3QoZnVsbHlEZWNvZGVTdHJpbmcoc25pcHBldCwg
ZGVjb2RlcikpKSB7CisgICAgICAgICAgICB0b2tlbi5lcmFzZUNoYXJhY3RlcnMoKTsKKyAgICAg
ICAgICAgIHRva2VuLmFwcGVuZFRvQ2hhcmFjdGVyKCcgJyk7IC8vIFRlY2huaWNhbGx5LCBjaGFy
YWN0ZXIgdG9rZW5zIGNhbid0IGJlIGVtcHR5LgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNTM3LDQgKzczNSwzOSBA
QCBib29sIFhTU0F1ZGl0b3I6OmlzU2FtZU9yaWdpblJlc291cmNlKGNvCiAgICAgcmV0dXJuICht
X3BhcnNlci0+ZG9jdW1lbnQoKS0+dXJsKCkuaG9zdCgpID09IHJlc291cmNlVVJMLmhvc3QoKSAm
JiByZXNvdXJjZVVSTC5xdWVyeSgpLmlzRW1wdHkoKSk7CiB9CiAKK1N0cmluZyBYU1NBdWRpdG9y
OjpleHRyYWN0Q29kZUZyYWdtZW50KGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIGNvbnN0
IHNpemVfdCBrTWF4aW11bUZyYWdtZW50TGVuZ3RoID0gMTAwOworICAgIHNpemVfdCBpOworICAg
IHNpemVfdCBzdGFydFBvc2l0aW9uID0gMDsKKyAgICBzaXplX3QgZnJhZ21lbnRMZW5ndGggPSAw
OworICAgIExleGVyU3RhdGUgc3RhdGUgPSBMRVhFUl9TVEFURV9TVEFSVDsKKworICAgIGZvciAo
aSA9IDAgOyBpIDwgc3RyaW5nLmxlbmd0aCgpICYmIHN0YXRlICE9IExFWEVSX1NUQVRFX0RPTkU7
IGkrKykgeworICAgICAgICBMZXhlckNoYXJhY3RlckNsYXNzIGNjID0gbGV4ZXJDaGFyYWN0ZXJD
bGFzc0ZvcihzdHJpbmdbaV0pOworICAgICAgICBMZXhlclN0YXRlIG5ld1N0YXRlID0gbGV4ZXJT
dGF0ZUZvcihzdGF0ZSwgY2MpOworICAgICAgICBMZXhlckFjdGlvbiBhY3Rpb24gPSBsZXhlckFj
dGlvbkZvcihzdGF0ZSwgY2MpOworICAgICAgICBzd2l0Y2ggKGFjdGlvbikgeworICAgICAgICBj
YXNlIExFWEVSX0FDVElPTl9TQVZFUE9TOgorICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IGk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMRVhFUl9BQ1RJT05fQ0hFQ0tMTjoK
KyAgICAgICAgICAgIGlmIChmcmFnbWVudExlbmd0aCsrID4ga01heGltdW1GcmFnbWVudExlbmd0
aCkKKyAgICAgICAgICAgICAgICBuZXdTdGF0ZSA9IExFWEVSX1NUQVRFX0RPTkU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisjaWZuZGVmIE5ERUJVRworICAgICAgICBpZiAobGV4ZXJUcmFjZSkgeworICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJzdGF0ZTogJXMsIGM6ICVjICgweCUwMngpLCBjYzogJXMgLS0+
IG5ldyBzdGF0ZTogJXMsIGFjdGlvbjogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGxleGVy
U3RhdGVOYW1lc1tzdGF0ZV0sIHN0cmluZ1tpXSwgc3RyaW5nW2ldLCBsZXhlckNoYXJhY3RlckNs
YXNzTmFtZXNbY2NdLAorICAgICAgICAgICAgICAgICAgICBsZXhlclN0YXRlTmFtZXNbbmV3U3Rh
dGVdLCBsZXhlckFjdGlvbk5hbWVzW2FjdGlvbl0pOworICAgICAgICB9CisjZW5kaWYKKyAgICAg
ICAgc3RhdGUgPSBuZXdTdGF0ZTsKKyAgICB9CisgICAgcmV0dXJuIHN0cmluZy5zdWJzdHJpbmco
c3RhcnRQb3NpdGlvbiwgaSAtIHN0YXJ0UG9zaXRpb24pOwogfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRpdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5oCShyZXZp
c2lvbiA5NTQyNikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBpc0Nv
bnRhaW5lZEluUmVxdWVzdChjb25zdCBTdHJpbmcmKTsKICAgICBib29sIGlzU2FtZU9yaWdpblJl
c291cmNlKGNvbnN0IFN0cmluZyYgdXJsKTsKKyAgICBTdHJpbmcgZXh0cmFjdENvZGVGcmFnbWVu
dChjb25zdCBTdHJpbmcmKTsKIAogICAgIEhUTUxEb2N1bWVudFBhcnNlciogbV9wYXJzZXI7CiAg
ICAgYm9vbCBtX2lzRW5hYmxlZDsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDk1NTY5KQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDkt
MjAgIFRvbSBTZXBleiAgPHRzZXBlekBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRXh0cmFjdCBh
IG1lYW5pbmdmdWwgY29kZSBzbmlwcGV0IGZyb20gYSBzY3JpcHQgYmxvY2tzLCB0YWtpbmcgY2Fy
ZSBub3QgdG8KKyAgICAgICAgaW5jbHVkZSBjb21tZW50cywgZm9yIHVzZSBieSB0aGUgWFNTIGF1
ZGl0b3IuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
ODA5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
aHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLnBs
OgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdp
dGgtaW52YWxpZC1jbG9zaW5nLXRhZy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtaW52YWxpZC1jbG9z
aW5nLXRhZy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1
ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRyYWlsaW5nLWNvbW1lbnQtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13
aXRoLXRyYWlsaW5nLWNvbW1lbnQuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9z
ZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50Mi1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRv
ci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudDIuaHRtbDogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGlu
Zy1jb21tZW50My1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2Vj
dXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudDMuaHRtbDog
QWRkZWQuCisKIDIwMTEtMDktMjAgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODMxNApJbmRl
eDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWct
d2l0aC1pbnZhbGlkLWNsb3NpbmctdGFnLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLWlu
dmFsaWQtY2xvc2luZy10YWctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC1pbnZhbGlk
LWNsb3NpbmctdGFnLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitD
T05TT0xFIE1FU1NBR0U6IGxpbmUgMTogUmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlwdCBz
Y3JpcHQuIFNvdXJjZSBjb2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKworCklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRh
Zy13aXRoLWludmFsaWQtY2xvc2luZy10YWcuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLWludmFsaWQt
Y2xvc2luZy10YWcuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
c2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtaW52YWxpZC1jbG9zaW5nLXRhZy5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewor
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgIGxheW91dFRlc3RDb250cm9s
bGVyLnNldFhTU0F1ZGl0b3JFbmFibGVkKHRydWUpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxpZnJhbWUgc3JjPSJodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkveHNzQXVk
aXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy5wbD9jbHV0dGVyPSUyMDxpPjxiPiZxPTxzY3Jp
cHQ+YWxlcnQoU3RyaW5nLmZyb21DaGFyQ29kZSgweDU4LDB4NTMsMHg1MykpPC9zY3JpcHQiPgor
PC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRyYWlsaW5nLWNvbW1lbnQyLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRyYWlsaW5nLWNvbW1lbnQyLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVk
aXRvci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudDItZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBSZWZ1c2Vk
IHRvIGV4ZWN1dGUgYSBKYXZhU2NyaXB0IHNjcmlwdC4gU291cmNlIGNvZGUgb2Ygc2NyaXB0IGZv
dW5kIHdpdGhpbiByZXF1ZXN0LgorCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2Vj
dXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudDIuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
c2NyaXB0LXRhZy13aXRoLXRyYWlsaW5nLWNvbW1lbnQyLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRo
LXRyYWlsaW5nLWNvbW1lbnQyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7CisgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0WFNTQXVkaXRvckVuYWJsZWQodHJ1ZSk7Cit9Cis8
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGlmcmFtZSBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6
ODAwMC9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLnBsP2NsdXR0
ZXI9JTIwPGk+PGI+JnE9PHNjcmlwdD4vLyZxMj0lMGFhbGVydChTdHJpbmcuZnJvbUNoYXJDb2Rl
KDB4NTgsMHg1MywweDUzKSk8L3NjcmlwdD4iPgorPC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0
LXRhZy13aXRoLXRyYWlsaW5nLWNvbW1lbnQzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRo
LXRyYWlsaW5nLWNvbW1lbnQzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxp
bmctY29tbWVudDMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK0NP
TlNPTEUgTUVTU0FHRTogbGluZSAxOiBSZWZ1c2VkIHRvIGV4ZWN1dGUgYSBKYXZhU2NyaXB0IHNj
cmlwdC4gU291cmNlIGNvZGUgb2Ygc2NyaXB0IGZvdW5kIHdpdGhpbiByZXF1ZXN0LgorCisKSW5k
ZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFn
LXdpdGgtdHJhaWxpbmctY29tbWVudDMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRyYWlsaW5nLWNv
bW1lbnQzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3Vy
aXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRyYWlsaW5nLWNvbW1lbnQzLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0
WFNTQXVkaXRvckVuYWJsZWQodHJ1ZSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PGlmcmFtZSBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS94c3NBdWRpdG9yL3Jl
c291cmNlcy9lY2hvLWludGVydGFnLnBsP2NsdXR0ZXI9JTIwPGk+PGI+JnE9PHNjcmlwdD4lMjAl
MGE8IS0tJnEyPSUwYWFsZXJ0KFN0cmluZy5mcm9tQ2hhckNvZGUoMHg1OCwweDUzLDB4NTMpKS8v
LS0+PC9zY3JpcHQ+Ij4KKzwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFp
bGluZy1jb21tZW50LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRyYWlsaW5nLWNvbW1l
bnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9z
ZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50LWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitDT05TT0xFIE1FU1NBR0U6IGxp
bmUgMTogUmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlwdCBzY3JpcHQuIFNvdXJjZSBjb2Rl
IG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKworCkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRyYWlsaW5nLWNv
bW1lbnQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRyYWlsaW5nLWNvbW1lbnQuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3Jp
cHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QXNUZXh0KCk7CisgIGxheW91dFRlc3RDb250cm9sbGVyLnNldFhTU0F1ZGl0b3JFbmFibGVkKHRy
dWUpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxpZnJhbWUgc3JjPSJodHRwOi8v
bG9jYWxob3N0OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRh
Zy5wbD9jbHV0dGVyPSUyMDxpPjxiPiZxPTxzY3JpcHQ+LyomcTI9Ki9hbGVydChTdHJpbmcuZnJv
bUNoYXJDb2RlKDB4NTgsMHg1MywweDUzKSk8L3NjcmlwdD4iPgorPC9pZnJhbWU+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0
b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLnBs
CShyZXZpc2lvbiA5NTQyNikKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNz
QXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy5wbAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NiArMzIsMTIgQEAgaWYgKCRjZ2ktPnBhcmFtKCdyZWxheS10YXJnZXQtaWRzLWZvci1ldgogfQog
cHJpbnQgIjxib2R5PlxuIjsKIHByaW50ICRjZ2ktPnBhcmFtKCdxJyk7CitpZiAoJGNnaS0+cGFy
YW0oJ2NsdXR0ZXInKSkgeworICAgIHByaW50ICRjZ2ktPnBhcmFtKCdjbHV0dGVyJyk7Cit9Citp
ZiAoJGNnaS0+cGFyYW0oJ3EyJykpIHsKKyAgICBwcmludCAkY2dpLT5wYXJhbSgncTInKTsKK30K
IGlmICgkY2dpLT5wYXJhbSgnbm90aWZ5RG9uZScpKSB7CiAgICAgcHJpbnQgIjxzY3JpcHQ+XG4i
OwogICAgIHByaW50ICJpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKVxuIjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108054</attachid>
            <date>2011-09-20 14:36:28 -0700</date>
            <delta_ts>2011-09-21 14:14:48 -0700</delta_ts>
            <desc>Patch - unrelated files picked up by mistake.</desc>
            <filename>patch_68094.txt</filename>
            <type>text/plain</type>
            <size>24379</size>
            <attacher name="Thomas Sepez">tsepez</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk1NTY5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDktMjAgIFRvbSBTZXBl
eiAgPHRzZXBlekBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRXh0cmFjdCBhIG1lYW5pbmdmdWwg
Y29kZSBzbmlwcGV0IGZyb20gYSBzY3JpcHQgYmxvY2tzLCB0YWtpbmcgY2FyZSBub3QgdG8KKyAg
ICAgICAgaW5jbHVkZSBjb21tZW50cywgZm9yIHVzZSBieSB0aGUgWFNTIGF1ZGl0b3IuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODA5NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiBodHRwL3Rl
c3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLWludmFsaWQtY2xvc2luZy10
YWcuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Nj
cmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50Lmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVu
dDIuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Nj
cmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50My5odG1sCisKKyAgICAgICAgKiBodG1sL3Bh
cnNlci9YU1NBdWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZpbHRl
clRva2VuQWZ0ZXJTY3JpcHRTdGFydFRhZyk6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9y
OjpleHRyYWN0Q29kZUZyYWdtZW50KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9YU1NBdWRpdG9y
Lmg6CisKIDIwMTEtMDktMjAgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9wZW5ib3Nz
YS5vcmc+CiAKICAgICAgICAgW1F0XSBbV0syXSBJbXBsZW1lbnQgYSBwZXJzaXN0ZW50IGNvb2tp
ZSBzdG9yYWdlLgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5j
cHAJKHJldmlzaW9uIDk1NDI2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVk
aXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDIwMyBAQAogCiAjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgogCituYW1lc3BhY2UgeworCisjZGVmaW5lIERFQ0xBUkVfTEVY
RVJfQ0hBUkFDVEVSX0NMQVNTRVMoKSBcCisgICAgWChOTCksICAgICAgICAgIC8qIFNvbWUgZm9y
bSBvZiBuZXdsaW5lLiAqLyBcCisgICAgWChXUyksICAgICAgICAgIC8qIFNvbWUgb3RoZXIgZm9y
bSBvZiB3aGl0ZXNwYWNlLiAqLyBcCisgICAgWChCQU5HKSwgICAgICAgIC8qIEV4Y2xhbWF0aW9u
IHBvaW50LiAqLyBcCisgICAgWChRVU9UKSwgICAgICAgIC8qIERvdWJsZSBxdW90ZSBjaGFyYWN0
ZXIuICovIFwKKyAgICBYKFRJQ0spLCAgICAgICAgLyogU2luZ2xlIHF1b3RlIGNoYXJhY3Rlci4g
Ki8gXAorICAgIFgoU1RBUiksICAgICAgICAvKiBBc3Rlcmlzay4gKi8gXAorICAgIFgoREFTSCks
ICAgICAgICAvKiBNaW51cyBzaWduLiAqLyBcCisgICAgWChMVCksICAgICAgICAgIC8qIExlc3Mt
dGhhbiBzaWduLiAqLyBcCisgICAgWChHVCksICAgICAgICAgIC8qIEdyZWF0ZXItdGhhbiBzaWdu
LiAqLyBcCisgICAgWChTTEFTSCksICAgICAgIC8qIEZvcndhcmQgc2xhc2guICovIFwKKyAgICBY
KEJTTEFTSCksICAgICAgLyogQmFja3NsYXNoLiAqLyBcCisgICAgWChPVEhFUikgICAgICAgIC8q
IEFueSBvdGhlciBjaGFyYWN0ZXIuICovCisKKyNkZWZpbmUgREVDTEFSRV9MRVhFUl9TVEFURVMo
KSBcCisgICAgWChTVEFSVCksICAgICAgIC8qIFN0YXJ0LCBubyBjb2RlIHlldCBlbmNvdW50ZXJl
ZC4gKi8gXAorICAgIFgoU0xUKSwgICAgICAgICAvKiBTdGFydCBMZXNzLXRoYW4gc2lnbiwgbm8g
Y29kZSBlbmNvdW50ZXJlZC4gKi8gXAorICAgIFgoU01EKSwgICAgICAgICAvKiBTdGFydCBNYXJr
dXAgZGVjbGFyYXRpb24gbW9kZSwgbm8gY29kZSBlbmNvdW50ZXJlZC4gKi8gXAorICAgIFgoU01E
REFTSCksICAgICAvKiBTdGFydCBNYXJrdXAgZGVjbGFyYXRpb24gbW9kZSBmaXJzdCBkYXNoIG5v
IGNvZGUgZW5jb3VudGVyZWQuICovIFwKKyAgICBYKFNNRENNTlQpLCAgICAgLyogU3RhcnQgTWFy
a3VwIGRlY2xhcmF0aW9uIG1vZGUgY29tbWVudCBtb2RlIG5vIGNvZGUgZW5kY291bnRlcmVkLiAq
LyBcCisgICAgWChTTURDTURIKSwgICAgIC8qIFN0YXJ0IE1hcmt1cCBkZWNsYXJhdGlvbiBtb2Rl
IGNvbW1lbnQgbW9kZSBmaXJzdCBkYXNoLCBubyBjb2RlIGVuY291bnRlcmVkLiAqLyBcCisgICAg
WChTU0xBU0gpLCAgICAgIC8qIFN0YXJ0IFNsYXNoLCBubyBjb2RlIGVuY291bnRlcmVkLiAqLyBc
CisgICAgWChTU0xDTU5UKSwgICAgIC8qIFN0YXJ0IFNpbmdsZS1saW5lIGNvbW1lbnQsIG5vIGNv
ZGUgZW5jb3V0ZXJlZC4gKi8gXAorICAgIFgoU01MQ01OVCksICAgICAvKiBTdGFydCBNdWx0aS1s
aW5lIGNvbW1lbnQsIG5vIGNvZGUgZW5jb3VudGVyZWQuICovIFwKKyAgICBYKFNNTFNUQVIpLCAg
ICAgLyogU3RhcnQgTXVsdGktbGluZSBjb21tZW50IHN0YXIsIG5vIGNvZGUgZW5jb3VudGVyZWQu
ICovIFwKKyAgICBYKENPREUpLCAgICAgICAgLyogQ29kZSBlbmNvdW50ZXJlZCwgbG9va2luZyBm
b3IgdHJ1bmNhdGlvbiBwb2ludC4gKi8gXAorICAgIFgoUVVPVCksICAgICAgICAvKiBRdW90ZWQg
c3RyaW5nIGVudGVyZWQuICovIFwKKyAgICBYKFRJQ0spLCAgICAgICAgLyogU2luZ2xlLXF1b3Rl
ZCBzdHJpbmcgZW50ZXJlZC4gKi8gXAorICAgIFgoRVNDT0RFKSwgICAgICAvKiBFc2NhcGVkIHN0
YXRlIGluIGNvZGUuICovIFwKKyAgICBYKEVTUVVPVCksICAgICAgLyogRXNjYXBlZCBzdGF0ZSBp
biBxdW90ZWQgc3RyaW5nLiAqLyBcCisgICAgWChFU1RJQ0spLCAgICAgIC8qIEVzY2FjcGUgc3Rh
dGUgaW4gc2luZ2xlLXF1b3RlZCBzdHJpbmcuICovIFwKKyAgICBYKExUKSwgICAgICAgICAgLyog
TGVzcy10aGFuIHNpZ24gZW5jb3VudGVkIGluIGNvZGUuICovIFwKKyAgICBYKFNMQVNIKSwgICAg
ICAgLyogU2xhc2ggZW5jb3VudGVkIGluIGNvZGUuICovIFwKKyAgICBYKERPTkUpICAgICAgICAg
LyogU3RvcCBzdGF0ZS4gKi8KKworI2RlZmluZSBERUNMQVJFX0xFWEVSX0FDVElPTlMoKSBcCisg
ICAgWChOT05FKSwgICAgICAgIC8qIE5vIGFjdGlvbi4gKi8gXAorICAgIFgoU0FWRVBPUyksICAg
ICAvKiBTYXZlIGN1cnJlbnQgcG9zaXRpb24gYXMgc3RhcnQgb2YgY29kZSBmcmFnbWVudC4gKi8g
XAorICAgIFgoQ0hFQ0tMTikgICAgICAvKiBDaGVjayB0b3RhbCBsZW5naHQgb2YgY29kZSBmcmFn
bWVudC4gKi8KKworI3VuZGVmIFgKKyNkZWZpbmUgWChhcmcpIExFWEVSX0NIQVJBQ1RFUl9DTEFT
U18jI2FyZworCitlbnVtIExleGVyQ2hhcmFjdGVyQ2xhc3MgeworICAgIERFQ0xBUkVfTEVYRVJf
Q0hBUkFDVEVSX0NMQVNTRVMoKSwKKyAgICBMRVhFUl9DSEFSQUNURVJfQ0xBU1NfTUFYCit9Owor
CisjdW5kZWYgWAorI3VuZGVmIFkKKyNkZWZpbmUgWChhcmcpICh1bnNpZ25lZCBjaGFyKUxFWEVS
X0NIQVJBQ1RFUl9DTEFTU18jI2FyZworI2RlZmluZSBZKGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgp
IFgoYSksIFgoYiksIFgoYyksIFgoZCksIFgoZSksIFgoZiksIFgoZyksIFgoaCkKKworLyogUGFj
ayBpbnRvIHNpbmdsZSBieXRlIHBlciBlbGVtZW50LCByYXRoZXIgdGhhbiA0IGJ5dGVzIGZvciBl
bnVtcy4gKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgbGV4ZXJDaGFyYWN0ZXJDbGFzc1RhYmxlWzEy
OF0gPSB7CisgICAgLyogbnVsICAgIHNvaCAgICBzdHggICAgZXR4ICAgIGVvdCAgICBlbnEgICAg
YWNrICAgIGJlbCAqLworICAgIFkoT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBP
VEhFUiwgT1RIRVIsIE9USEVSKSwKKyAgICAvKiBicyAgICAgaHQgICAgIG5sICAgICB2dCAgICAg
bnAgICAgIGNyICAgICBzbyAgICAgc2kgICovCisgICAgWShPVEhFUiwgV1MsICAgIE5MLCAgICBP
VEhFUiwgT1RIRVIsIE5MLCAgICBPVEhFUiwgT1RIRVIpLAorICAgIC8qIGRsZSAgICBkYzEgICAg
ZGMyICAgIGRjMyAgICBkYzQgICAgbmFrICAgIHN5biAgICBldGIgKi8KKyAgICBZKE9USEVSLCBP
VEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiksCisgICAgLyog
Y2FuICAgIGVtICAgICBzdWIgICAgZXNjICAgIGZzICAgICBncyAgICAgcnMgICAgIHVzICAqLwor
ICAgIFkoT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9U
SEVSKSwKKyAgICAvKiBzcCAgICAgICEgICAgICAiICAgICAgIyAgICAgICQgICAgICAlICAgICAg
JiAgICAgICcgICovCisgICAgWShXUywgICAgQkFORywgIFFVT1QsICBPVEhFUiwgT1RIRVIsIE9U
SEVSLCBPVEhFUiwgVElDSyksCisgICAgLyogICggICAgICApICAgICAgKiAgICAgICsgICAgICAs
ICAgICAgLSAgICAgIC4gICAgICAvICAqLworICAgIFkoT1RIRVIsIE9USEVSLCBTVEFSLCAgT1RI
RVIsIE9USEVSLCBEQVNILCAgT1RIRVIsIFNMQVNIKSwKKyAgICAvKiAgMCAgICAgIDEgICAgICAy
ICAgICAgMyAgICAgIDQgICAgICA1ICAgICAgNiAgICAgIDcgICovCisgICAgWShPVEhFUiwgT1RI
RVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIpLAorICAgIC8qICA4
ICAgICAgOSAgICAgIDogICAgICA7ICAgICAgPCAgICAgID0gICAgICA+ICAgICAgPyAgKi8KKyAg
ICBZKE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBMVCwgICAgT1RIRVIsIEdULCAgICBPVEhF
UiksCisgICAgLyogIEAgICAgICBBICAgICAgQiAgICAgIEMgICAgICBEICAgICAgRSAgICAgIEYg
ICAgICBHICAqLworICAgIFkoT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhF
UiwgT1RIRVIsIE9USEVSKSwKKyAgICAvKiAgSCAgICAgIEkgICAgICBKICAgICAgSyAgICAgIEwg
ICAgICBNICAgICAgTiAgICAgIE8gICovCisgICAgWShPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhF
UiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIpLAorICAgIC8qICBQICAgICAgUSAgICAgIFIg
ICAgICBTICAgICAgVCAgICAgIFUgICAgICBWICAgICAgVyAgKi8KKyAgICBZKE9USEVSLCBPVEhF
UiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiksCisgICAgLyogIFgg
ICAgICBZICAgICAgWiAgICAgIFsgICAgICBcICAgICAgXSAgICAgIF4gICAgICBfICAqLworICAg
IFkoT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIEJTTEFTSCwgT1RIRVIsIE9USEVSLCBPVEhF
UiksCisgICAgLyogIGAgICAgICBhICAgICAgYiAgICAgIGMgICAgICBkICAgICAgZSAgICAgIGYg
ICAgICBnICAqLworICAgIFkoT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhF
UiwgT1RIRVIsIE9USEVSKSwKKyAgICAvKiAgaCAgICAgIGkgICAgICBqICAgICAgayAgICAgIGwg
ICAgICBtICAgICAgbiAgICAgIG8gICovCisgICAgWShPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhF
UiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIpLAorICAgIC8qICBwICAgICAgcSAgICAgIHIg
ICAgICBzICAgICAgdCAgICAgIHUgICAgICB2ICAgICAgdyAgKi8KKyAgICBZKE9USEVSLCBPVEhF
UiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiksCisgICAgLyogIHgg
ICAgICB5ICAgICAgeiAgICAgIHsgICAgICB8ICAgICAgfSAgICAgIH4gICAgIGRlbCAqLworICAg
IFkoT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVS
KSwKK307CisKKyN1bmRlZiBYCisjZGVmaW5lIFgoYXJnKSBMRVhFUl9TVEFURV8jI2FyZworCitl
bnVtIExleGVyU3RhdGUgeworICAgIERFQ0xBUkVfTEVYRVJfU1RBVEVTKCksCisgICAgTEVYRVJf
U1RBVEVfTUFYCit9OworCisjdW5kZWYgWAorI3VuZGVmIFkKKyNkZWZpbmUgWChhcmcpICh1bnNp
Z25lZCBjaGFyKUxFWEVSX1NUQVRFXyMjYXJnCisjZGVmaW5lIFkoYSwgYiwgYywgZCwgZSwgZiwg
ZywgaCwgaSwgaiwgaywgbCkgeyBYKGEpLCBYKGIpLCBYKGMpLCBYKGQpLCBYKGUpLCBYKGYpLCBY
KGcpLCBYKGgpLCBYKGkpLCBYKGopLCBYKGspLCBYKGwpIH0KKworLyogUGFjayBpbnRvIHNpbmds
ZSBieXRlIHBlciBlbGVtZW50LCByYXRoZXIgdGhhbiA0IGJ5dGVzIGZvciBlbnVtcy4gKi8KK2Nv
bnN0IHVuc2lnbmVkIGNoYXIgbGV4ZXJTdGF0ZVRhYmxlW0xFWEVSX1NUQVRFX01BWF1bTEVYRVJf
Q0hBUkFDVEVSX0NMQVNTX01BWF0gPSB7IAorICAgIC8qICAgICAgICAgICAgICBOTCAgICAgICAg
V1MgICAgICAgIEJBTkcgICAgICBRVU9UICAgICAgVElDSyAgICAgIFNUQVIgICAgICBEQVNIICAg
ICAgTFQgICAgICAgIEdUICAgICAgICBTTEFTSCAgICAgQlNMQVNIICAgIE9USEVSICAqLworICAg
IC8qICAgICAgICAgICAgICAtLS0tLS0tICAgLS0tLS0tLSAgIC0tLS0tLS0gICAtLS0tLS0tICAg
LS0tLS0tLSAgIC0tLS0tLS0gICAtLS0tLS0tICAgLS0tLS0tLSAgIC0tLS0tLS0gICAtLS0tLS0t
ICAgLS0tLS0tLSAgIC0tLS0tLS0qLworICAgIC8qIFNUQVJUICAgKi8gWShTVEFSVCAgICwgU1RB
UlQgICAsIENPREUgICAgLCBRVU9UICAgICwgVElDSyAgICAsIENPREUgICAgLCBDT0RFICAgICwg
U0xUICAgICAsIENPREUgICAgLCBTU0xBU0ggICwgRVNDT0RFICAsIENPREUpLAorICAgIC8qIFNM
VCAgICAgKi8gWShDT0RFICAgICwgQ09ERSAgICAsIFNNRCAgICAgLCBRVU9UICAgICwgVElDSyAg
ICAsIENPREUgICAgLCBDT0RFICAgICwgTFQgICAgICAsIFNUQVJUICAgLCBDT0RFICAgICwgRVND
T0RFICAsIENPREUpLAorICAgIC8qIFNNRCAgICAgKi8gWShTTUQgICAgICwgU01EICAgICAsIFNN
RCAgICAgLCBTTUQgICAgICwgU01EICAgICAsIFNNRCAgICAgLCBTTUREQVNIICwgU01EICAgICAs
IFNUQVJUICAgLCBTTUQgICAgICwgU01EICAgICAsIFNNRCksCisgICAgLyogU01EREFTSCAqLyBZ
KFNNRCAgICAgLCBTTUQgICAgICwgU01EICAgICAsIFNNRCAgICAgLCBTTUQgICAgICwgU01EICAg
ICAsIFNNRENNTlQgLCBTTUQgICAgICwgU01EICAgICAsIFNNRCAgICAgLCBTTUQgICAgICwgU01E
KSwKKyAgICAvKiBTTURDTU5UICovIFkoU1RBUlQgICAsIFNNRENNTlQgLCBTTURDTU5UICwgU01E
Q01OVCAsIFNNRENNTlQgLCBTTURDTU5UICwgU01EQ01ESCAsIFNNRENNTlQgLCBTTURDTU5UICwg
U01EQ01OVCAsIFNNRENNTlQgLCBTTURDTU5UKSwKKyAgICAvKiBTTURDTURIICovIFkoU01EQ01O
VCAsIFNNRENNTlQgLCBTTURDTU5UICwgU01EQ01OVCAsIFNNRENNTlQgLCBTTURDTU5UICwgU01E
ICAgICAsIFNNRENNTlQgLCBTTURDTU5UICwgU01EQ01OVCAsIFNNRENNTlQgLCBTTURDTU5UKSwK
KyAgICAvKiBTU0xBU0ggICovIFkoQ09ERSAgICAsIENPREUgICAgLCBDT0RFICAgICwgQ09ERSAg
ICAsIENPREUgICAgLCBTTUxDTU5UICwgQ09ERSAgICAsIENPREUgICAgLCBDT0RFICAgICwgU1NM
Q01OVCAsIENPREUgICAgLCBDT0RFKSwKKyAgICAvKiBTU0xDTU5UICovIFkoU1RBUlQgICAsIFNT
TENNTlQgLCBTU0xDTU5UICwgU1NMQ01OVCAsIFNTTENNTlQgLCBTU0xDTU5UICwgU1NMQ01OVCAs
IFNTTENNTlQgLCBTU0xDTU5UICwgU1NMQ01OVCAsIFNTTENNTlQgLCBTU0xDTU5UKSwKKyAgICAv
KiBTTUxDTU5UICovIFkoU01MQ01OVCAsIFNNTENNTlQgLCBTTUxDTU5UICwgU01MQ01OVCAsIFNN
TENNTlQgLCBTTUxTVEFSICwgU01MQ01OVCAsIFNNTENNTlQgLCBTTUxDTU5UICwgU01MQ01OVCAs
IFNNTENNTlQgLCBTTUxDTU5UKSwgCisgICAgLyogU01MU1RBUiAqLyBZKFNNTENNTlQgLCBTTUxD
TU5UICwgU01MQ01OVCAsIFNNTENNTlQgLCBTTUxDTU5UICwgU01MQ01OVCAsIFNNTENNTlQgLCBT
TUxDTU5UICwgU01MQ01OVCAsIFNUQVJUICAgLCBTTUxDTU5UICwgU01MQ01OVCksICAgICAKKyAg
ICAvKiBDT0RFICAgICovIFkoQ09ERSAgICAsIENPREUgICAgLCBDT0RFICAgICwgUVVPVCAgICAs
IFRJQ0sgICAgLCBDT0RFICAgICwgQ09ERSAgICAsIExUICAgICAgLCBDT0RFICAgICwgU0xBU0gg
ICAsIEVTQ09ERSAgLCBDT0RFKSwKKyAgICAvKiBRVU9UICAgICovIFkoUVVPVCAgICAsIFFVT1Qg
ICAgLCBRVU9UICAgICwgQ09ERSAgICAsIFFVT1QgICAgLCBRVU9UICAgICwgUVVPVCAgICAsIFFV
T1QgICAgLCBRVU9UICAgICwgUVVPVCAgICAsIEVTUVVPVCAgLCBRVU9UKSwKKyAgICAvKiBUSUNL
ICAgICovIFkoVElDSyAgICAsIFRJQ0sgICAgLCBUSUNLICAgICwgVElDSyAgICAsIENPREUgICAg
LCBUSUNLICAgICwgVElDSyAgICAsIFRJQ0sgICAgLCBUSUNLICAgICwgVElDSyAgICAsIEVTVElD
SyAgLCBUSUNLKSwKKyAgICAvKiBFU0NPREUgICovIFkoQ09ERSAgICAsIENPREUgICAgLCBDT0RF
ICAgICwgQ09ERSAgICAsIENPREUgICAgLCBDT0RFICAgICwgQ09ERSAgICAsIExUICAgICAgLCBD
T0RFICAgICwgU0xBU0ggICAsIENPREUgICAgLCBDT0RFKSwKKyAgICAvKiBFU1FVT1QgICovIFko
UVVPVCAgICAsIFFVT1QgICAgLCBRVU9UICAgICwgUVVPVCAgICAsIFFVT1QgICAgLCBRVU9UICAg
ICwgUVVPVCAgICAsIFFVT1QgICAgLCBRVU9UICAgICwgUVVPVCAgICAsIFFVT1QgICAgLCBRVU9U
KSwKKyAgICAvKiBFU1RJQ0sgICovIFkoVElDSyAgICAsIFRJQ0sgICAgLCBUSUNLICAgICwgVElD
SyAgICAsIFRJQ0sgICAgLCBUSUNLICAgICwgVElDSyAgICAsIFRJQ0sgICAgLCBUSUNLICAgICwg
VElDSyAgICAsIFRJQ0sgICAgLCBUSUNLKSwKKyAgICAvKiBMVCAgICAgICovIFkoQ09ERSAgICAs
IENPREUgICAgLCBET05FICAgICwgQ09ERSAgICAsIENPREUgICAgLCBDT0RFICAgICwgQ09ERSAg
ICAsIExUICAgICAgLCBDT0RFICAgICwgQ09ERSAgICAsIEVTQ09ERSAgLCBDT0RFKSwKKyAgICAv
KiBTTEFTSCAgICovIFkoQ09ERSAgICAsIENPREUgICAgLCBDT0RFICAgICwgQ09ERSAgICAsIENP
REUgICAgLCBET05FICAgICwgQ09ERSAgICAsIENPREUgICAgLCBDT0RFICAgICwgRE9ORSAgICAs
IEVTQ09ERSAgLCBDT0RFKSwKKyAgICAvKiBET05FICAgICovIFkoRE9ORSAgICAsIERPTkUgICAg
LCBET05FICAgICwgRE9ORSAgICAsIERPTkUgICAgLCBET05FICAgICwgRE9ORSAgICAsIERPTkUg
ICAgLCBET05FICAgICwgRE9ORSAgICAsIERPTkUgICAgLCBET05FKSwgCit9OworCisjdW5kZWYg
WAorI2RlZmluZSBYKGFyZykgTEVYRVJfQUNUSU9OXyMjYXJnCisKK2VudW0gTGV4ZXJBY3Rpb24g
eworICAgIERFQ0xBUkVfTEVYRVJfQUNUSU9OUygpLAorICAgIExFWEVSX0FDVElPTl9NQVgKK307
CisKKyN1bmRlZiBYCisjdW5kZWYgWQorI2RlZmluZSBYKGFyZykgKHVuc2lnbmVkIGNoYXIpTEVY
RVJfQUNUSU9OXyMjYXJnIAorI2RlZmluZSBZKGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIGksIGos
IGssIGwpIHsgWChhKSwgWChiKSwgWChjKSwgWChkKSwgWChlKSwgWChmKSwgWChnKSwgWChoKSwg
WChpKSwgWChqKSwgWChrKSwgWChsKSB9CisKKy8qIFBhY2sgaW50byBzaW5nbGUgYnl0ZSBwZXIg
ZWxlbWVudCwgcmF0aGVyIHRoYW4gNCBieXRlcyBmb3IgZW51bXMuICovCitjb25zdCB1bnNpZ25l
ZCBjaGFyIGxleGVyQWN0aW9uVGFibGVbTEVYRVJfU1RBVEVfTUFYXVtMRVhFUl9DSEFSQUNURVJf
Q0xBU1NfTUFYXSA9IHsgCisgICAgLyogICAgICAgICAgICAgIE5MICAgICAgICBXUyAgICAgICAg
QkFORyAgICAgIFFVT1QgICAgICBUSUNLICAgICAgU1RBUiAgICAgIERBU0ggICAgICBMVCAgICAg
ICAgR1QgICAgICAgIFNMQVNIICAgICBCU0xBU0ggICAgT1RIRVIgICovCisgICAgLyogICAgICAg
ICAgICAgIC0tLS0tLS0gICAtLS0tLS0tICAgLS0tLS0tLSAgIC0tLS0tLS0gICAtLS0tLS0tICAg
LS0tLS0tLSAgIC0tLS0tLS0gICAtLS0tLS0tICAgLS0tLS0tLSAgIC0tLS0tLS0gICAtLS0tLS0t
ICAgLS0tLS0tLSovCisgICAgLyogU1RBUlQgICAqLyBZKE5PTkUgICAgLCBOT05FICAgICwgTk9O
RSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwg
Tk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSksICAgIAorICAgIC8qIFNMVCAgICAg
Ki8gWShOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5P
TkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAs
IE5PTkUpLCAgICAKKyAgICAvKiBTTUQgICAgICovIFkoTk9ORSAgICAsIE5PTkUgICAgLCBOT05F
ICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBT
QVZFUE9TICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FKSwgICAgCisgICAgLyogU01EREFTSCAq
LyBZKE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9O
RSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwg
Tk9ORSksICAgIAorICAgIC8qIFNNRENNTlQgKi8gWShTQVZFUE9TICwgTk9ORSAgICAsIE5PTkUg
ICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5P
TkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUpLCAgICAKKyAgICAvKiBTTURDTUQgICov
IFkoTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05F
ICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBO
T05FKSwgICAgCisgICAgLyogU1NMQVNIICAqLyBZKE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAg
ICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9O
RSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSksICAgIAorICAgIC8qIFNTTENNTlQgKi8g
WShTQVZFUE9TICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUg
ICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5P
TkUpLCAgICAKKyAgICAvKiBTTUxDTU5UICovIFkoTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAg
ICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05F
ICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FKSwgICAgCisgICAgLyogU01MU1RBUiAqLyBZ
KE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAg
ICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIFNBVkVQT1MgLCBOT05FICAgICwgTk9O
RSksICAgIAorICAgIC8qIENPREUgICAgKi8gWShDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4g
LCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNL
TE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4pLAorICAgIC8qIFFVT1QgICAgKi8gWShD
SEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4g
LCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNL
TE4pLAorICAgIC8qIFRJQ0sgICAgKi8gWShDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBD
SEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4g
LCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4pLAorICAgIC8qIEVTQ09ERSAgKi8gWShDSEVD
S0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBD
SEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4p
LAorICAgIC8qIEVTUVVPVCAgKi8gWShDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVD
S0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBD
SEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4pLAorICAgIC8qIEVTVElDSyAgKi8gWShDSEVDS0xO
ICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVD
S0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4pLAor
ICAgIC8qIExUICAgICAgKi8gWShDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xO
ICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVD
S0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4pLAorICAgIC8qIFNMQVNIICAgKi8gWShDSEVDS0xOICwg
Q0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xO
ICwgQ0hFQ0tMTiAsIENIRUNLTE4gLCBDSEVDS0xOICwgQ0hFQ0tMTiAsIENIRUNLTE4pLAorICAg
IC8qIERPTkUgICAgKi8gWShOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwg
Tk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAgICwgTk9ORSAgICAsIE5PTkUgICAgLCBOT05FICAg
ICwgTk9ORSAgICAsIE5PTkUpLCAgICAKK307CisKKyNpZm5kZWYgTkRFQlVHCisjdW5kZWYgWAor
I2RlZmluZSBYKGFyZykgI2FyZworY29uc3QgYm9vbCBsZXhlclRyYWNlID0gZmFsc2U7Citjb25z
dCBjaGFyKiBsZXhlckNoYXJhY3RlckNsYXNzTmFtZXNbTEVYRVJfQ0hBUkFDVEVSX0NMQVNTX01B
WF0gPSB7IERFQ0xBUkVfTEVYRVJfQ0hBUkFDVEVSX0NMQVNTRVMoKSB9OworY29uc3QgY2hhciog
bGV4ZXJTdGF0ZU5hbWVzW0xFWEVSX1NUQVRFX01BWF0gPSB7IERFQ0xBUkVfTEVYRVJfU1RBVEVT
KCkgfTsKK2NvbnN0IGNoYXIqIGxleGVyQWN0aW9uTmFtZXNbTEVYRVJfQUNUSU9OX01BWF0gPSB7
IERFQ0xBUkVfTEVYRVJfQUNUSU9OUygpIH07CisjZW5kaWYKKworaW5saW5lIExleGVyQ2hhcmFj
dGVyQ2xhc3MgbGV4ZXJDaGFyYWN0ZXJDbGFzc0ZvcihVQ2hhciBjKQoreworICAgIHJldHVybiBj
IDwgMTI4ID8gKExleGVyQ2hhcmFjdGVyQ2xhc3MpbGV4ZXJDaGFyYWN0ZXJDbGFzc1RhYmxlW2Nd
IDogTEVYRVJfQ0hBUkFDVEVSX0NMQVNTX09USEVSOworfQorCitpbmxpbmUgTGV4ZXJTdGF0ZSBs
ZXhlclN0YXRlRm9yKExleGVyU3RhdGUgc3RhdGUsICBMZXhlckNoYXJhY3RlckNsYXNzIGNjKQor
eworICAgIEFTU0VSVChzdGF0ZSA8IExFWEVSX1NUQVRFX01BWCk7CisgICAgQVNTRVJUKGNjIDwg
TEVYRVJfQ0hBUkFDVEVSX0NMQVNTX01BWCk7CisgICAgcmV0dXJuIChMZXhlclN0YXRlKWxleGVy
U3RhdGVUYWJsZVtzdGF0ZV1bY2NdOworfQorCitpbmxpbmUgTGV4ZXJBY3Rpb24gbGV4ZXJBY3Rp
b25Gb3IoTGV4ZXJTdGF0ZSBzdGF0ZSwgIExleGVyQ2hhcmFjdGVyQ2xhc3MgY2MpCit7CisgICAg
QVNTRVJUKHN0YXRlIDwgTEVYRVJfU1RBVEVfTUFYKTsKKyAgICBBU1NFUlQoY2MgPCBMRVhFUl9D
SEFSQUNURVJfQ0xBU1NfTUFYKTsKKyAgICByZXR1cm4gKExleGVyQWN0aW9uKWxleGVyQWN0aW9u
VGFibGVbc3RhdGVdW2NjXTsKK30KKworfSAvLyBuYW1lc3BhY2UKKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpAQCAtMzA1LDE1ICs1MDIsMTYgQEAg
Ym9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJUb2tlbkFmdGVyU2NyaXB0UwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgaW50IHN0YXJ0ID0gMDsKLSAgICAvLyBGSVhNRTogV2UgcHJv
YmFibHkgd2FudCB0byBncmFiIG9ubHkgdGhlIGZpcnN0IGZldyBjaGFyYWN0ZXJzIG9mIHRoZQot
ICAgIC8vICAgICAgICBjb250ZW50cyBvZiB0aGUgc2NyaXB0IGVsZW1lbnQuCi0gICAgaW50IGVu
ZCA9IHRva2VuLmVuZEluZGV4KCkgLSB0b2tlbi5zdGFydEluZGV4KCk7Ci0gICAgU3RyaW5nIHNu
aXBwZXQgPSBtX2NhY2hlZFNuaXBwZXQgKyBzbmlwcGV0Rm9yUmFuZ2UodG9rZW4sIHN0YXJ0LCBl
bmQpOwotICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdChmdWxseURlY29kZVN0cmluZyhzbmlw
cGV0LCBtX3BhcnNlci0+ZG9jdW1lbnQoKS0+ZGVjb2RlcigpKSkpIHsKLSAgICAgICAgdG9rZW4u
ZXJhc2VDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIHRva2VuLmFwcGVuZFRvQ2hhcmFjdGVyKCcgJyk7
IC8vIFRlY2huaWNhbGx5LCBjaGFyYWN0ZXIgdG9rZW5zIGNhbid0IGJlIGVtcHR5LgotICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBUZXh0UmVzb3VyY2VEZWNvZGVyKiBkZWNvZGVyID0gbV9wYXJz
ZXItPmRvY3VtZW50KCktPmRlY29kZXIoKTsKKyAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3Qo
ZnVsbHlEZWNvZGVTdHJpbmcobV9jYWNoZWRTbmlwcGV0LCBkZWNvZGVyKSkpIHsKKyAgICAgICAg
aW50IHN0YXJ0ID0gMDsKKyAgICAgICAgaW50IGVuZCA9IHRva2VuLmVuZEluZGV4KCkgLSB0b2tl
bi5zdGFydEluZGV4KCk7CisgICAgICAgIFN0cmluZyBzbmlwcGV0ID0gZXh0cmFjdENvZGVGcmFn
bWVudChzbmlwcGV0Rm9yUmFuZ2UodG9rZW4sIHN0YXJ0LCBlbmQpKTsKKyAgICAgICAgaWYgKGlz
Q29udGFpbmVkSW5SZXF1ZXN0KGZ1bGx5RGVjb2RlU3RyaW5nKHNuaXBwZXQsIGRlY29kZXIpKSkg
eworICAgICAgICAgICAgdG9rZW4uZXJhc2VDaGFyYWN0ZXJzKCk7CisgICAgICAgICAgICB0b2tl
bi5hcHBlbmRUb0NoYXJhY3RlcignICcpOyAvLyBUZWNobmljYWxseSwgY2hhcmFjdGVyIHRva2Vu
cyBjYW4ndCBiZSBlbXB0eS4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAg
ICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTUzNyw0ICs3MzUsMzkgQEAgYm9vbCBYU1NB
dWRpdG9yOjppc1NhbWVPcmlnaW5SZXNvdXJjZShjbwogICAgIHJldHVybiAobV9wYXJzZXItPmRv
Y3VtZW50KCktPnVybCgpLmhvc3QoKSA9PSByZXNvdXJjZVVSTC5ob3N0KCkgJiYgcmVzb3VyY2VV
UkwucXVlcnkoKS5pc0VtcHR5KCkpOwogfQogCitTdHJpbmcgWFNTQXVkaXRvcjo6ZXh0cmFjdENv
ZGVGcmFnbWVudChjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBjb25zdCBzaXplX3Qga01h
eGltdW1GcmFnbWVudExlbmd0aCA9IDEwMDsKKyAgICBzaXplX3QgaTsKKyAgICBzaXplX3Qgc3Rh
cnRQb3NpdGlvbiA9IDA7CisgICAgc2l6ZV90IGZyYWdtZW50TGVuZ3RoID0gMDsKKyAgICBMZXhl
clN0YXRlIHN0YXRlID0gTEVYRVJfU1RBVEVfU1RBUlQ7CisKKyAgICBmb3IgKGkgPSAwIDsgaSA8
IHN0cmluZy5sZW5ndGgoKSAmJiBzdGF0ZSAhPSBMRVhFUl9TVEFURV9ET05FOyBpKyspIHsKKyAg
ICAgICAgTGV4ZXJDaGFyYWN0ZXJDbGFzcyBjYyA9IGxleGVyQ2hhcmFjdGVyQ2xhc3NGb3Ioc3Ry
aW5nW2ldKTsKKyAgICAgICAgTGV4ZXJTdGF0ZSBuZXdTdGF0ZSA9IGxleGVyU3RhdGVGb3Ioc3Rh
dGUsIGNjKTsKKyAgICAgICAgTGV4ZXJBY3Rpb24gYWN0aW9uID0gbGV4ZXJBY3Rpb25Gb3Ioc3Rh
dGUsIGNjKTsKKyAgICAgICAgc3dpdGNoIChhY3Rpb24pIHsKKyAgICAgICAgY2FzZSBMRVhFUl9B
Q1RJT05fU0FWRVBPUzoKKyAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgTEVYRVJfQUNUSU9OX0NIRUNLTE46CisgICAgICAgICAg
ICBpZiAoZnJhZ21lbnRMZW5ndGgrKyA+IGtNYXhpbXVtRnJhZ21lbnRMZW5ndGgpCisgICAgICAg
ICAgICAgICAgbmV3U3RhdGUgPSBMRVhFUl9TVEFURV9ET05FOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2lmbmRl
ZiBOREVCVUcKKyAgICAgICAgaWYgKGxleGVyVHJhY2UpIHsKKyAgICAgICAgICAgIGZwcmludGYo
c3RkZXJyLCAic3RhdGU6ICVzLCBjOiAlYyAoMHglMDJ4KSwgY2M6ICVzIC0tPiBuZXcgc3RhdGU6
ICVzLCBhY3Rpb246ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBsZXhlclN0YXRlTmFtZXNb
c3RhdGVdLCBzdHJpbmdbaV0sIHN0cmluZ1tpXSwgbGV4ZXJDaGFyYWN0ZXJDbGFzc05hbWVzW2Nj
XSwKKyAgICAgICAgICAgICAgICAgICAgbGV4ZXJTdGF0ZU5hbWVzW25ld1N0YXRlXSwgbGV4ZXJB
Y3Rpb25OYW1lc1thY3Rpb25dKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIHN0YXRlID0g
bmV3U3RhdGU7CisgICAgfQorICAgIHJldHVybiBzdHJpbmcuc3Vic3RyaW5nKHN0YXJ0UG9zaXRp
b24sIGkgLSBzdGFydFBvc2l0aW9uKTsKIH0KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuaAkocmV2aXNpb24gOTU0MjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRpdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTcxLDYgKzcxLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgaXNDb250YWluZWRJblJl
cXVlc3QoY29uc3QgU3RyaW5nJik7CiAgICAgYm9vbCBpc1NhbWVPcmlnaW5SZXNvdXJjZShjb25z
dCBTdHJpbmcmIHVybCk7CisgICAgU3RyaW5nIGV4dHJhY3RDb2RlRnJhZ21lbnQoY29uc3QgU3Ry
aW5nJik7CiAKICAgICBIVE1MRG9jdW1lbnRQYXJzZXIqIG1fcGFyc2VyOwogICAgIGJvb2wgbV9p
c0VuYWJsZWQ7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NTU2OSkKKysrIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDExLTA5LTIwICBUb20gU2Vw
ZXogIDx0c2VwZXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEV4dHJhY3QgYSBtZWFuaW5nZnVs
IGNvZGUgc25pcHBldCBmcm9tIGEgc2NyaXB0IGJsb2NrcywgdGFraW5nIGNhcmUgbm90IHRvCisg
ICAgICAgIGluY2x1ZGUgY29tbWVudHMsIGZvciB1c2UgYnkgdGhlIFhTUyBhdWRpdG9yLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgwOTQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0dHAvdGVzdHMv
c2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy5wbDoKKyAgICAgICAg
KiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLWludmFsaWQt
Y2xvc2luZy10YWctZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3Nl
Y3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLWludmFsaWQtY2xvc2luZy10YWcuaHRt
bDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Njcmlw
dC10YWctd2l0aC10cmFpbGluZy1jb21tZW50LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGlu
Zy1jb21tZW50Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNz
QXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudDItZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRh
Zy13aXRoLXRyYWlsaW5nLWNvbW1lbnQyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVz
dHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudDMt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1
ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRyYWlsaW5nLWNvbW1lbnQzLmh0bWw6IEFkZGVkLgorCiAy
MDExLTA5LTIwICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgzMTQKSW5kZXg6IExheW91dFRl
c3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtaW52YWxp
ZC1jbG9zaW5nLXRhZy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC1pbnZhbGlkLWNsb3Np
bmctdGFnLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtaW52YWxpZC1jbG9zaW5nLXRh
Zy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorQ09OU09MRSBNRVNT
QUdFOiBsaW5lIDE6IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBTb3Vy
Y2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGluIHJlcXVlc3QuCisKKwpJbmRleDogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC1pbnZh
bGlkLWNsb3NpbmctdGFnLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC1pbnZhbGlkLWNsb3NpbmctdGFn
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hz
c0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLWludmFsaWQtY2xvc2luZy10YWcuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NB
dWRpdG9yRW5hYmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZy
YW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3Vy
Y2VzL2VjaG8taW50ZXJ0YWcucGw/Y2x1dHRlcj0lMjA8aT48Yj4mcT08c2NyaXB0PmFsZXJ0KFN0
cmluZy5mcm9tQ2hhckNvZGUoMHg1OCwweDUzLDB4NTMpKTwvc2NyaXB0Ij4KKzwvaWZyYW1lPgor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94
c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50Mi1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9y
L3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50Mi1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0
LXRhZy13aXRoLXRyYWlsaW5nLWNvbW1lbnQyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzIEBACitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTogUmVmdXNlZCB0byBleGVjdXRl
IGEgSmF2YVNjcmlwdCBzY3JpcHQuIFNvdXJjZSBjb2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4g
cmVxdWVzdC4KKworCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1
ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRyYWlsaW5nLWNvbW1lbnQyLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWct
d2l0aC10cmFpbGluZy1jb21tZW50Mi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1j
b21tZW50Mi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikgeworICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgIGxheW91dFRl
c3RDb250cm9sbGVyLnNldFhTU0F1ZGl0b3JFbmFibGVkKHRydWUpOworfQorPC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxpZnJhbWUgc3JjPSJodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJp
dHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy5wbD9jbHV0dGVyPSUyMDxpPjxi
PiZxPTxzY3JpcHQ+Ly8mcTI9JTBhYWxlcnQoU3RyaW5nLmZyb21DaGFyQ29kZSgweDU4LDB4NTMs
MHg1MykpPC9zY3JpcHQ+Ij4KKzwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10
cmFpbGluZy1jb21tZW50My1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1j
b21tZW50My1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRyYWlsaW5nLWNvbW1lbnQz
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitDT05TT0xFIE1FU1NB
R0U6IGxpbmUgMTogUmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlwdCBzY3JpcHQuIFNvdXJj
ZSBjb2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKworCkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRyYWls
aW5nLWNvbW1lbnQzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9z
ZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50My5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRp
dG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50My5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0
PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQXNUZXh0KCk7CisgIGxheW91dFRlc3RDb250cm9sbGVyLnNldFhTU0F1ZGl0b3JF
bmFibGVkKHRydWUpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxpZnJhbWUgc3Jj
PSJodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNo
by1pbnRlcnRhZy5wbD9jbHV0dGVyPSUyMDxpPjxiPiZxPTxzY3JpcHQ+JTIwJTBhPCEtLSZxMj0l
MGFhbGVydChTdHJpbmcuZnJvbUNoYXJDb2RlKDB4NTgsMHg1MywweDUzKSkvLy0tPjwvc2NyaXB0
PiI+Cis8L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVu
dC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50LWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNz
QXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudC1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFJlZnVz
ZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQg
Zm91bmQgd2l0aGluIHJlcXVlc3QuCisKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9z
ZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50Lmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9y
L3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50Lmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRo
LXRyYWlsaW5nLWNvbW1lbnQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwor
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVlKTsKK30KKzwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4
MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGw/Y2x1dHRl
cj0lMjA8aT48Yj4mcT08c2NyaXB0Pi8qJnEyPSovYWxlcnQoU3RyaW5nLmZyb21DaGFyQ29kZSgw
eDU4LDB4NTMsMHg1MykpPC9zY3JpcHQ+Ij4KKzwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNl
cy9lY2hvLWludGVydGFnLnBsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
c2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy5wbAkocmV2aXNpb24g
OTU0MjYpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVz
b3VyY2VzL2VjaG8taW50ZXJ0YWcucGwJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDEyIEBA
IGlmICgkY2dpLT5wYXJhbSgncmVsYXktdGFyZ2V0LWlkcy1mb3ItZXYKIH0KIHByaW50ICI8Ym9k
eT5cbiI7CiBwcmludCAkY2dpLT5wYXJhbSgncScpOworaWYgKCRjZ2ktPnBhcmFtKCdjbHV0dGVy
JykpIHsKKyAgICBwcmludCAkY2dpLT5wYXJhbSgnY2x1dHRlcicpOworfQoraWYgKCRjZ2ktPnBh
cmFtKCdxMicpKSB7CisgICAgcHJpbnQgJGNnaS0+cGFyYW0oJ3EyJyk7Cit9CiBpZiAoJGNnaS0+
cGFyYW0oJ25vdGlmeURvbmUnKSkgewogICAgIHByaW50ICI8c2NyaXB0PlxuIjsKICAgICBwcmlu
dCAiaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcilcbiI7Cg==
</data>
<flag name="review"
          id="104919"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108232</attachid>
            <date>2011-09-21 14:14:48 -0700</date>
            <delta_ts>2011-09-21 17:52:33 -0700</delta_ts>
            <desc>Simpler patch</desc>
            <filename>patch_68094.txt</filename>
            <type>text/plain</type>
            <size>11511</size>
            <attacher name="Thomas Sepez">tsepez</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk1NjY4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDktMjEgIFRvbSBTZXBl
eiAgPHRzZXBlekBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgTWFrZSBYU1NBdWRpdG9yIGV4dHJh
Y3QgbWVhbmluZ2Z1bCBzbmlwcGV0IGZyb20gc2NyaXB0IGJsb2NrcyBmb3IgY29tcGFyaXNvbgor
ICAgICAgICBhZ2FpbnN0IHRoZSBVUkwgd2hlbiBjaGVja2luZyBmb3IgcmVmbGVjdGlvbi4gIEF2
b2lkcyBnZXR0aW5nIGNhdWdoIHVwIGluCisgICAgICAgIHRyYWlsaW5nIGNvbW1lbnRzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgwOTQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogaHR0cC90
ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50
Lmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3Jp
cHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudDIuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90
ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50
My5odG1sCisKKyAgICAgICAgKiBodG1sL3BhcnNlci9YU1NBdWRpdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZpbHRlclRva2VuQWZ0ZXJTY3JpcHRTdGFydFRhZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpleHRyYWN0Q29kZUZyYWdtZW50KToKKyAgICAg
ICAgKiBodG1sL3BhcnNlci9YU1NBdWRpdG9yLmg6CisKIDIwMTEtMDktMjEgIEphbWVzIFJvYmlu
c29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEJ3MgY29udGV4dCBzaG91bGQgbm90IGJlIGRlc3Ryb3llZCBkdXJpbmcg
YXRleGl0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRpdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRpdG9yLmNwcAko
cmV2aXNpb24gOTU2NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRpdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA1LDE1ICszMDUsMTYgQEAgYm9vbCBYU1NBdWRpdG9y
OjpmaWx0ZXJUb2tlbkFmdGVyU2NyaXB0UwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgaW50IHN0YXJ0ID0gMDsKLSAgICAvLyBGSVhNRTogV2UgcHJvYmFibHkgd2FudCB0byBn
cmFiIG9ubHkgdGhlIGZpcnN0IGZldyBjaGFyYWN0ZXJzIG9mIHRoZQotICAgIC8vICAgICAgICBj
b250ZW50cyBvZiB0aGUgc2NyaXB0IGVsZW1lbnQuCi0gICAgaW50IGVuZCA9IHRva2VuLmVuZElu
ZGV4KCkgLSB0b2tlbi5zdGFydEluZGV4KCk7Ci0gICAgU3RyaW5nIHNuaXBwZXQgPSBtX2NhY2hl
ZFNuaXBwZXQgKyBzbmlwcGV0Rm9yUmFuZ2UodG9rZW4sIHN0YXJ0LCBlbmQpOwotICAgIGlmIChp
c0NvbnRhaW5lZEluUmVxdWVzdChmdWxseURlY29kZVN0cmluZyhzbmlwcGV0LCBtX3BhcnNlci0+
ZG9jdW1lbnQoKS0+ZGVjb2RlcigpKSkpIHsKLSAgICAgICAgdG9rZW4uZXJhc2VDaGFyYWN0ZXJz
KCk7Ci0gICAgICAgIHRva2VuLmFwcGVuZFRvQ2hhcmFjdGVyKCcgJyk7IC8vIFRlY2huaWNhbGx5
LCBjaGFyYWN0ZXIgdG9rZW5zIGNhbid0IGJlIGVtcHR5LgotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBUZXh0UmVzb3VyY2VEZWNvZGVyKiBkZWNvZGVyID0gbV9wYXJzZXItPmRvY3VtZW50KCkt
PmRlY29kZXIoKTsKKyAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3QoZnVsbHlEZWNvZGVTdHJp
bmcobV9jYWNoZWRTbmlwcGV0LCBkZWNvZGVyKSkpIHsKKyAgICAgICAgaW50IHN0YXJ0ID0gMDsK
KyAgICAgICAgaW50IGVuZCA9IHRva2VuLmVuZEluZGV4KCkgLSB0b2tlbi5zdGFydEluZGV4KCk7
CisgICAgICAgIFN0cmluZyBzbmlwcGV0ID0gZXh0cmFjdENvZGVGcmFnbWVudChzbmlwcGV0Rm9y
UmFuZ2UodG9rZW4sIHN0YXJ0LCBlbmQpKTsKKyAgICAgICAgaWYgKGlzQ29udGFpbmVkSW5SZXF1
ZXN0KGZ1bGx5RGVjb2RlU3RyaW5nKHNuaXBwZXQsIGRlY29kZXIpKSkgeworICAgICAgICAgICAg
dG9rZW4uZXJhc2VDaGFyYWN0ZXJzKCk7CisgICAgICAgICAgICB0b2tlbi5hcHBlbmRUb0NoYXJh
Y3RlcignICcpOyAvLyBUZWNobmljYWxseSwgY2hhcmFjdGVyIHRva2VucyBjYW4ndCBiZSBlbXB0
eS4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgfQogICAgIHJldHVy
biBmYWxzZTsKIH0KQEAgLTUzNyw0ICs1MzgsNjMgQEAgYm9vbCBYU1NBdWRpdG9yOjppc1NhbWVP
cmlnaW5SZXNvdXJjZShjbwogICAgIHJldHVybiAobV9wYXJzZXItPmRvY3VtZW50KCktPnVybCgp
Lmhvc3QoKSA9PSByZXNvdXJjZVVSTC5ob3N0KCkgJiYgcmVzb3VyY2VVUkwucXVlcnkoKS5pc0Vt
cHR5KCkpOwogfQogCisKK1N0cmluZyBYU1NBdWRpdG9yOjpleHRyYWN0Q29kZUZyYWdtZW50KGNv
bnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIGNvbnN0IHNpemVfdCBrTWF4aW11bUZyYWdtZW50
TGVuZ3RoID0gMTAwOworCisgICAgc2l6ZV90IHN0YXJ0UG9zaXRpb24gPSAwOworICAgIHNpemVf
dCBlbmRQb3NpdGlvbiA9IHN0cmluZy5sZW5ndGgoKTsKKyAgICBzaXplX3QgZm91bmRQb3NpdGlv
bjsKKworICAgIC8vIElmIGFuIEhUTUwgY29tbWVudCBpcyB0aGUgZmlyc3QgdGhpbmcgaW4gdGhl
IHNjcmlwdCBibG9jaywgdHJlYXQgaXQgYXMgCisgICAgLy8gYSBqYXZhc2NyaXB0IGNvbW1lbnQg
ZW5kaW5nIGF0IHRoZSBmaXJzdCBuZXdsaW5lLCBub3QgYXQgdGhlIGNvcnJlc3BvbmRpbmcKKyAg
ICAvLyBIVE1MIGNsb3NlIGNvbW1lbnQgc2VxdWVuY2UuCisgICAgd2hpbGUgKHN0YXJ0UG9zaXRp
b24gPCBlbmRQb3NpdGlvbiAmJiBpc0hUTUxTcGFjZShzdHJpbmdbc3RhcnRQb3NpdGlvbl0pKQor
ICAgICAgICBzdGFydFBvc2l0aW9uKys7CisKKyAgICBpZiAoc3RyaW5nLnN1YnN0cmluZyhzdGFy
dFBvc2l0aW9uLCA0KSA9PSAiPCEtLSIpIHsKKyAgICAgICAgd2hpbGUgKHN0YXJ0UG9zaXRpb24g
PCBlbmRQb3NpdGlvbiAmJiBzdHJpbmdbc3RhcnRQb3NpdGlvbl0gIT0gJ1xyJyAmJiBzdHJpbmdb
c3RhcnRQb3NpdGlvbl0gIT0gJ1xuJykKKyAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24rKzsKKyAg
ICAgICAgd2hpbGUgKHN0YXJ0UG9zaXRpb24gPCBlbmRQb3NpdGlvbiAmJiBpc0hUTUxTcGFjZShz
dHJpbmdbc3RhcnRQb3NpdGlvbl0pKQorICAgICAgICAgICAgc3RhcnRQb3NpdGlvbisrOworICAg
IH0KKworICAgIC8vIFNraXAgb3ZlciBpbml0aWFsIGNvbW1lbnRzIHRvIGZpbmQgc3RhcnQgb2Yg
Y29kZS4KKyAgICB3aGlsZSAoc3RhcnRQb3NpdGlvbiA8IGVuZFBvc2l0aW9uKSB7CisgICAgICAg
IEFTU0VSVCghaXNIVE1MU3BhY2Uoc3RyaW5nW3N0YXJ0UG9zaXRpb25dKSk7CisgICAgICAgIGlm
IChzdHJpbmcuc3Vic3RyaW5nKHN0YXJ0UG9zaXRpb24sIDIpID09ICIvLyIpIHsKKyAgICAgICAg
ICAgIHdoaWxlIChzdGFydFBvc2l0aW9uIDwgZW5kUG9zaXRpb24gJiYgc3RyaW5nW3N0YXJ0UG9z
aXRpb25dICE9ICdccicgJiYgc3RyaW5nW3N0YXJ0UG9zaXRpb25dICE9ICdcbicpCisgICAgICAg
ICAgICAgICAgc3RhcnRQb3NpdGlvbisrOworICAgICAgICB9IGVsc2UgaWYgKHN0cmluZy5zdWJz
dHJpbmcoc3RhcnRQb3NpdGlvbiwgMikgPT0gIi8qIikgeworICAgICAgICAgICAgaWYgKChmb3Vu
ZFBvc2l0aW9uID0gc3RyaW5nLmZpbmQoIiovIiwgc3RhcnRQb3NpdGlvbikpICE9IG5vdEZvdW5k
KQorICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBmb3VuZFBvc2l0aW9uICsgMjsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gZW5kUG9zaXRp
b247CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgd2hpbGUg
KHN0YXJ0UG9zaXRpb24gPCBlbmRQb3NpdGlvbiAmJiBpc0hUTUxTcGFjZShzdHJpbmdbc3RhcnRQ
b3NpdGlvbl0pKQorICAgICAgICAgICAgc3RhcnRQb3NpdGlvbisrOworICAgIH0KKworICAgIC8v
IFNldCB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIGNvZGUgZnJhZ21lbnQsIGJ1dCBvbmx5IHN0
b3BwaW5nIGF0IGEgcG9pbnQgd2hlcmUKKyAgICAvLyB3ZSBrbm93IHdlIGFyZSBub3QgYnJlYWtp
bmcgaW4gdGhlIG1pZGRsZSBvZiBhICUtZXNjYXBlIHNlcXVlbmNlLiBBIHNpbXBsZSB3YXkgdG8K
KyAgICAvLyBkbyB0aGlzIGlzIHRvIGJyZWFrIG9uIHdoaXRlc3BhY2Ugb25seS4KKyAgICBmb3Vu
ZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIGtNYXhpbXVtRnJhZ21lbnRMZW5ndGg7CisgICAg
aWYgKGZvdW5kUG9zaXRpb24gPCBlbmRQb3NpdGlvbikgeworICAgICAgICB3aGlsZSAoZm91bmRQ
b3NpdGlvbiA8IGVuZFBvc2l0aW9uICYmICFpc0hUTUxTcGFjZShzdHJpbmdbZm91bmRQb3NpdGlv
bl0pKQorICAgICAgICAgICAgZm91bmRQb3NpdGlvbisrOworICAgICAgICBlbmRQb3NpdGlvbiA9
IGZvdW5kUG9zaXRpb247CisgICAgfQorCisgICAgLy8gU3RvcCBhdCBuZXh0IGNvbW1lbnQuCisg
ICAgaWYgKChmb3VuZFBvc2l0aW9uID0gc3RyaW5nLmZpbmQoIi8vIiwgc3RhcnRQb3NpdGlvbiwg
ZW5kUG9zaXRpb24gLSBzdGFydFBvc2l0aW9uKSkgIT0gbm90Rm91bmQpCisgICAgICAgIGVuZFBv
c2l0aW9uID0gZm91bmRQb3NpdGlvbjsKKyAgICBpZiAoKGZvdW5kUG9zaXRpb24gPSBzdHJpbmcu
ZmluZCgiLyoiLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb24pKSAh
PSBub3RGb3VuZCkKKyAgICAgICAgZW5kUG9zaXRpb24gPSBmb3VuZFBvc2l0aW9uOworCisgICAg
cmV0dXJuIHN0cmluZy5zdWJzdHJpbmcoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24gLSBzdGFy
dFBvc2l0aW9uKTsKIH0KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuaAkocmV2aXNpb24gOTU2NjMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYg
KzcxLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgaXNDb250YWluZWRJblJlcXVlc3QoY29uc3Qg
U3RyaW5nJik7CiAgICAgYm9vbCBpc1NhbWVPcmlnaW5SZXNvdXJjZShjb25zdCBTdHJpbmcmIHVy
bCk7CisgICAgU3RyaW5nIGV4dHJhY3RDb2RlRnJhZ21lbnQoY29uc3QgU3RyaW5nJik7CiAKICAg
ICBIVE1MRG9jdW1lbnRQYXJzZXIqIG1fcGFyc2VyOwogICAgIGJvb2wgbV9pc0VuYWJsZWQ7Cklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA5NTY2OCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDExLTA5LTIxICBUb20gU2VwZXogIDx0c2VwZXpA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIE1ha2UgWFNTQXVkaXRvciBleHRyYWN0IG1lYW5pbmdm
dWwgc25pcHBldCBmcm9tIHNjcmlwdCBibG9ja3MgZm9yIGNvbXBhcmlzb24KKyAgICAgICAgYWdh
aW5zdCB0aGUgVVJMIHdoZW4gY2hlY2tpbmcgZm9yIHJlZmxlY3Rpb24uICBBdm9pZHMgZ2V0dGlu
ZyBjYXVnaCB1cCBpbgorICAgICAgICB0cmFpbGluZyBjb21tZW50cy4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MDk0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hz
c0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGw6CisgICAgICAgICogaHR0cC90ZXN0
cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50LWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRp
dG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50Lmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxp
bmctY29tbWVudDItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3Nl
Y3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRyYWlsaW5nLWNvbW1lbnQyLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQt
dGFnLXdpdGgtdHJhaWxpbmctY29tbWVudDMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRyYWlsaW5n
LWNvbW1lbnQzLmh0bWw6IEFkZGVkLgorCiAyMDExLTA5LTIxICBTZXJnZXkgR2xhenVub3YgIDxz
ZXJnLmdsYXp1bm92QGdtYWlsLmNvbT4KIAogICAgICAgICBbQ2hyb21pdW1dIFByb3RlY3QgdGhl
IEZyYW1lIGluIFY4SFRNTERvY3VtZW50OjpvcGVuQ2FsbGJhY2sKSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxpbmct
Y29tbWVudDItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudDIt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50Mi1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5l
IDE6IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBv
ZiBzY3JpcHQgZm91bmQgd2l0aGluIHJlcXVlc3QuCisKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21t
ZW50Mi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
eHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudDIuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3Jp
cHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudDIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0
cnVlKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDov
L2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0
YWcucGw/Y2x1dHRlcj0lMjA8aT48Yj4mcT08c2NyaXB0Pi8vJnEyPSUwYWFsZXJ0KFN0cmluZy5m
cm9tQ2hhckNvZGUoMHg1OCwweDUzLDB4NTMpKTwvc2NyaXB0PiI+Cis8L2lmcmFtZT4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVk
aXRvci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudDMtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3Jp
cHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudDMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWct
d2l0aC10cmFpbGluZy1jb21tZW50My1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMyBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEph
dmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGluIHJlcXVl
c3QuCisKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9y
L3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50My5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgt
dHJhaWxpbmctY29tbWVudDMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVu
dDMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3hz
c0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGw/Y2x1dHRlcj0lMjA8aT48Yj4mcT08
c2NyaXB0PiUyMCUwYTwhLS0mcTI9JTBhYWxlcnQoU3RyaW5nLmZyb21DaGFyQ29kZSgweDU4LDB4
NTMsMHg1MykpLy8tLT48L3NjcmlwdD4iPgorPC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRh
Zy13aXRoLXRyYWlsaW5nLWNvbW1lbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJh
aWxpbmctY29tbWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRyYWlsaW5nLWNv
bW1lbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK0NPTlNPTEUg
TUVTU0FHRTogbGluZSAxOiBSZWZ1c2VkIHRvIGV4ZWN1dGUgYSBKYXZhU2NyaXB0IHNjcmlwdC4g
U291cmNlIGNvZGUgb2Ygc2NyaXB0IGZvdW5kIHdpdGhpbiByZXF1ZXN0LgorCisKSW5kZXg6IExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgt
dHJhaWxpbmctY29tbWVudC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudC5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NB
dWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50Lmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0WFNTQXVkaXRv
ckVuYWJsZWQodHJ1ZSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGlmcmFtZSBz
cmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9l
Y2hvLWludGVydGFnLnBsP2NsdXR0ZXI9JTIwPGk+PGI+JnE9PHNjcmlwdD4vKiZxMj0qL2FsZXJ0
KFN0cmluZy5mcm9tQ2hhckNvZGUoMHg1OCwweDUzLDB4NTMpKTwvc2NyaXB0PiI+Cis8L2lmcmFt
ZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJp
dHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy5wbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8t
aW50ZXJ0YWcucGwJKHJldmlzaW9uIDk1NjYzKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9z
ZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLnBsCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw2ICszNSw5IEBAIHByaW50ICRjZ2ktPnBhcmFtKCdxJyk7CiBpZiAoJGNnaS0+
cGFyYW0oJ2NsdXR0ZXInKSkgewogICAgIHByaW50ICRjZ2ktPnBhcmFtKCdjbHV0dGVyJyk7CiB9
CitpZiAoJGNnaS0+cGFyYW0oJ3EyJykpIHsKKyAgICBwcmludCAkY2dpLT5wYXJhbSgncTInKTsK
K30KIGlmICgkY2dpLT5wYXJhbSgnbm90aWZ5RG9uZScpKSB7CiAgICAgcHJpbnQgIjxzY3JpcHQ+
XG4iOwogICAgIHByaW50ICJpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKVxuIjsK
</data>
<flag name="review"
          id="105148"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108261</attachid>
            <date>2011-09-21 17:52:33 -0700</date>
            <delta_ts>2011-09-22 10:28:27 -0700</delta_ts>
            <desc>Patch + changes for previous comments.</desc>
            <filename>patch_68094.txt</filename>
            <type>text/plain</type>
            <size>12153</size>
            <attacher name="Thomas Sepez">tsepez</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk1NjY4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDktMjEgIFRvbSBTZXBl
eiAgPHRzZXBlekBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgTWFrZSBYU1NBdWRpdG9yIGV4dHJh
Y3QgbWVhbmluZ2Z1bCBzbmlwcGV0IGZyb20gc2NyaXB0IGJsb2NrcyBmb3IgY29tcGFyaXNvbgor
ICAgICAgICBhZ2FpbnN0IHRoZSBVUkwgd2hlbiBjaGVja2luZyBmb3IgcmVmbGVjdGlvbi4gIEF2
b2lkcyBnZXR0aW5nIGNhdWdoIHVwIGluCisgICAgICAgIHRyYWlsaW5nIGNvbW1lbnRzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgwOTQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogaHR0cC90
ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50
Lmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3Jp
cHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudDIuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90
ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50
My5odG1sCisKKyAgICAgICAgKiBodG1sL3BhcnNlci9YU1NBdWRpdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZpbHRlclRva2VuQWZ0ZXJTY3JpcHRTdGFydFRhZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpleHRyYWN0Q29kZUZyYWdtZW50KToKKyAgICAg
ICAgKiBodG1sL3BhcnNlci9YU1NBdWRpdG9yLmg6CisKIDIwMTEtMDktMjEgIEphbWVzIFJvYmlu
c29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEJ3MgY29udGV4dCBzaG91bGQgbm90IGJlIGRlc3Ryb3llZCBkdXJpbmcg
YXRleGl0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRpdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRpdG9yLmNwcAko
cmV2aXNpb24gOTU2NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRpdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsMjYgQEAgc3RhdGljIGJvb2wgaXNIVE1M
UXVvdGUoVUNoYXIgYykKICAgICByZXR1cm4gKGMgPT0gJyInIHx8IGMgPT0gJ1wnJyk7CiB9CiAK
K3N0YXRpYyBib29sIGlzSFRNTE5ld2xpbmUoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gKGMgPT0g
J1xuJyB8fCBjID09ICdccicpOworfQorCitzdGF0aWMgYm9vbCBzdGFydHNIVE1MQ29tbWVudEF0
KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBzaXplX3Qgc3RhcnQpCit7CisgICAgcmV0dXJuIChzdGFy
dCArIDMgPCBzdHJpbmcubGVuZ3RoKCkgJiYgc3RyaW5nW3N0YXJ0XSA9PSAnPCcgJiYgc3RyaW5n
W3N0YXJ0KzFdID09ICchJyAmJiBzdHJpbmdbc3RhcnQrMl0gPT0gJy0nICYmIHN0cmluZ1tzdGFy
dCszXSA9PSAnLScpOworfSAgICAKKworc3RhdGljIGJvb2wgc3RhcnRzU2luZ2xlTGluZUNvbW1l
bnRBdChjb25zdCBTdHJpbmcmIHN0cmluZywgc2l6ZV90IHN0YXJ0KQoreworICAgIHJldHVybiAo
c3RhcnQgKyAxIDwgc3RyaW5nLmxlbmd0aCgpICYmIHN0cmluZ1tzdGFydF0gPT0gJy8nICYmIHN0
cmluZ1tzdGFydCsxXSA9PSAnLycpOworfSAgICAKKworc3RhdGljIGJvb2wgc3RhcnRzTXVsdGlM
aW5lQ29tbWVudEF0KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBzaXplX3Qgc3RhcnQpCit7CisgICAg
cmV0dXJuIChzdGFydCArIDEgPCBzdHJpbmcubGVuZ3RoKCkgJiYgc3RyaW5nW3N0YXJ0XSA9PSAn
LycgJiYgc3RyaW5nW3N0YXJ0KzFdID09ICcqJyk7Cit9CisKIHN0YXRpYyBib29sIGhhc05hbWUo
Y29uc3QgSFRNTFRva2VuJiB0b2tlbiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKIHsKICAg
ICByZXR1cm4gZXF1YWxJZ25vcmluZ051bGxpdHkodG9rZW4ubmFtZSgpLCBzdGF0aWNfY2FzdDxj
b25zdCBTdHJpbmcmPihuYW1lLmxvY2FsTmFtZSgpKSk7CkBAIC0zMDUsMTUgKzMyNSwxNiBAQCBi
b29sIFhTU0F1ZGl0b3I6OmZpbHRlclRva2VuQWZ0ZXJTY3JpcHRTCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBpbnQgc3RhcnQgPSAwOwotICAgIC8vIEZJWE1FOiBXZSBwcm9i
YWJseSB3YW50IHRvIGdyYWIgb25seSB0aGUgZmlyc3QgZmV3IGNoYXJhY3RlcnMgb2YgdGhlCi0g
ICAgLy8gICAgICAgIGNvbnRlbnRzIG9mIHRoZSBzY3JpcHQgZWxlbWVudC4KLSAgICBpbnQgZW5k
ID0gdG9rZW4uZW5kSW5kZXgoKSAtIHRva2VuLnN0YXJ0SW5kZXgoKTsKLSAgICBTdHJpbmcgc25p
cHBldCA9IG1fY2FjaGVkU25pcHBldCArIHNuaXBwZXRGb3JSYW5nZSh0b2tlbiwgc3RhcnQsIGVu
ZCk7Ci0gICAgaWYgKGlzQ29udGFpbmVkSW5SZXF1ZXN0KGZ1bGx5RGVjb2RlU3RyaW5nKHNuaXBw
ZXQsIG1fcGFyc2VyLT5kb2N1bWVudCgpLT5kZWNvZGVyKCkpKSkgewotICAgICAgICB0b2tlbi5l
cmFzZUNoYXJhY3RlcnMoKTsKLSAgICAgICAgdG9rZW4uYXBwZW5kVG9DaGFyYWN0ZXIoJyAnKTsg
Ly8gVGVjaG5pY2FsbHksIGNoYXJhY3RlciB0b2tlbnMgY2FuJ3QgYmUgZW1wdHkuCi0gICAgICAg
IHJldHVybiB0cnVlOworICAgIFRleHRSZXNvdXJjZURlY29kZXIqIGRlY29kZXIgPSBtX3BhcnNl
ci0+ZG9jdW1lbnQoKS0+ZGVjb2RlcigpOworICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdChm
dWxseURlY29kZVN0cmluZyhtX2NhY2hlZFNuaXBwZXQsIGRlY29kZXIpKSkgeworICAgICAgICBp
bnQgc3RhcnQgPSAwOworICAgICAgICBpbnQgZW5kID0gdG9rZW4uZW5kSW5kZXgoKSAtIHRva2Vu
LnN0YXJ0SW5kZXgoKTsKKyAgICAgICAgU3RyaW5nIHNuaXBwZXQgPSBzbmlwcGV0Rm9ySmF2YVNj
cmlwdChzbmlwcGV0Rm9yUmFuZ2UodG9rZW4sIHN0YXJ0LCBlbmQpKTsKKyAgICAgICAgaWYgKGlz
Q29udGFpbmVkSW5SZXF1ZXN0KGZ1bGx5RGVjb2RlU3RyaW5nKHNuaXBwZXQsIGRlY29kZXIpKSkg
eworICAgICAgICAgICAgdG9rZW4uZXJhc2VDaGFyYWN0ZXJzKCk7CisgICAgICAgICAgICB0b2tl
bi5hcHBlbmRUb0NoYXJhY3RlcignICcpOyAvLyBUZWNobmljYWxseSwgY2hhcmFjdGVyIHRva2Vu
cyBjYW4ndCBiZSBlbXB0eS4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAg
ICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTUzNyw0ICs1NTgsNTIgQEAgYm9vbCBYU1NB
dWRpdG9yOjppc1NhbWVPcmlnaW5SZXNvdXJjZShjbwogICAgIHJldHVybiAobV9wYXJzZXItPmRv
Y3VtZW50KCktPnVybCgpLmhvc3QoKSA9PSByZXNvdXJjZVVSTC5ob3N0KCkgJiYgcmVzb3VyY2VV
UkwucXVlcnkoKS5pc0VtcHR5KCkpOwogfQogCisKK1N0cmluZyBYU1NBdWRpdG9yOjpzbmlwcGV0
Rm9ySmF2YVNjcmlwdChjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBjb25zdCBzaXplX3Qg
a01heGltdW1GcmFnbWVudExlbmd0aFRhcmdldCA9IDEwMDsKKworICAgIHNpemVfdCBzdGFydFBv
c2l0aW9uID0gMDsKKyAgICBzaXplX3QgZW5kUG9zaXRpb24gPSBzdHJpbmcubGVuZ3RoKCk7Cisg
ICAgc2l6ZV90IGZvdW5kUG9zaXRpb24gPSBub3RGb3VuZDsKKworICAgIC8vIFNraXAgb3ZlciBp
bml0aWFsIGNvbW1lbnRzIHRvIGZpbmQgc3RhcnQgb2YgY29kZS4KKyAgICB3aGlsZSAoc3RhcnRQ
b3NpdGlvbiA8IGVuZFBvc2l0aW9uKSB7CisgICAgICAgIHdoaWxlIChzdGFydFBvc2l0aW9uIDwg
ZW5kUG9zaXRpb24gJiYgaXNIVE1MU3BhY2Uoc3RyaW5nW3N0YXJ0UG9zaXRpb25dKSkKKyAgICAg
ICAgICAgIHN0YXJ0UG9zaXRpb24rKzsKKyAgICAgICAgaWYgKHN0YXJ0c0hUTUxDb21tZW50QXQo
c3RyaW5nLCBzdGFydFBvc2l0aW9uKSB8fCBzdGFydHNTaW5nbGVMaW5lQ29tbWVudEF0KHN0cmlu
Zywgc3RhcnRQb3NpdGlvbikpIHsKKyAgICAgICAgICAgIHdoaWxlIChzdGFydFBvc2l0aW9uIDwg
ZW5kUG9zaXRpb24gJiYgIWlzSFRNTE5ld2xpbmUoc3RyaW5nW3N0YXJ0UG9zaXRpb25dKSkKKyAg
ICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uKys7CisgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRz
TXVsdGlMaW5lQ29tbWVudEF0KHN0cmluZywgc3RhcnRQb3NpdGlvbikpIHsKKyAgICAgICAgICAg
IGlmICgoZm91bmRQb3NpdGlvbiA9IHN0cmluZy5maW5kKCIqLyIsIHN0YXJ0UG9zaXRpb24pKSAh
PSBub3RGb3VuZCkKKyAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gZm91bmRQb3NpdGlv
biArIDI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9
IGVuZFBvc2l0aW9uOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIC8vIFN0b3AgYXQgbmV4dCBjb21tZW50IG9yIHdoZW4gd2UgZXhjZWVkIHRoZSBtYXhp
bXVtIGxlbmd0aCB0YXJnZXQuIEFmdGVyIGhpdHRpbmcgdGhlCisgICAgLy8gbGVuZ3RoIHRhcmdl
dCwgd2UgY2FuIG9ubHkgc3RvcCBhdCBhIHBvaW50IHdoZXJlIHdlIGtub3cgd2UgYXJlIG5vdCBp
biB0aGUgbWlkZGxlIG9mCisgICAgLy8gYSAlLWVzY2FwZSBzZXF1ZW5jZS4gQSBzaW1wbGUgd2F5
IHRvIGRvIHRoaXMgaXMgdG8gYnJlYWsgb24gd2hpdGVzcGFjZSBvbmx5LiAgICAgICAgICAgICAg
ICAKKyAgICBmb3IgKGZvdW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOyBmb3VuZFBvc2l0aW9u
IDwgZW5kUG9zaXRpb247IGZvdW5kUG9zaXRpb24rKykgeworICAgICAgICBpZiAoc3RhcnRzU2lu
Z2xlTGluZUNvbW1lbnRBdChzdHJpbmcsIGZvdW5kUG9zaXRpb24pIHx8IHN0YXJ0c011bHRpTGlu
ZUNvbW1lbnRBdChzdHJpbmcsIGZvdW5kUG9zaXRpb24pKSB7CisgICAgICAgICAgICBlbmRQb3Np
dGlvbiA9IGZvdW5kUG9zaXRpb24gKyAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHN0YXJ0c0hUTUxDb21tZW50QXQoc3RyaW5nLCBmb3VuZFBvc2l0aW9uKSkg
eworICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBmb3VuZFBvc2l0aW9uICsgNDsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChmb3VuZFBvc2l0aW9uID4gc3RhcnRQ
b3NpdGlvbiArIGtNYXhpbXVtRnJhZ21lbnRMZW5ndGhUYXJnZXQpIHsKKyAgICAgICAgICAgIHdo
aWxlIChmb3VuZFBvc2l0aW9uIDwgZW5kUG9zaXRpb24gJiYgIWlzSFRNTFNwYWNlKHN0cmluZ1tm
b3VuZFBvc2l0aW9uXSkpCisgICAgICAgICAgICAgICAgZm91bmRQb3NpdGlvbisrOworICAgICAg
ICAgICAgZW5kUG9zaXRpb24gPSBmb3VuZFBvc2l0aW9uOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIHN0cmluZy5zdWJzdHJpbmcoc3RhcnRQ
b3NpdGlvbiwgZW5kUG9zaXRpb24gLSBzdGFydFBvc2l0aW9uKTsKIH0KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuaAko
cmV2aXNpb24gOTU2NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRpdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGVy
YXNlQXR0cmlidXRlSWZJbmplY3RlZChIVE1MVG9rZW4mLCBjb25zdCBRdWFsaWZpZWROYW1lJiwg
Y29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFZhbHVlID0gU3RyaW5nKCkpOwogCiAgICAgU3RyaW5n
IHNuaXBwZXRGb3JSYW5nZShjb25zdCBIVE1MVG9rZW4mLCBpbnQgc3RhcnQsIGludCBlbmQpOwor
ICAgIFN0cmluZyBzbmlwcGV0Rm9ySmF2YVNjcmlwdChjb25zdCBTdHJpbmcmKTsKICAgICBTdHJp
bmcgZGVjb2RlZFNuaXBwZXRGb3JBdHRyaWJ1dGUoY29uc3QgSFRNTFRva2VuJiwgY29uc3QgSFRN
TFRva2VuOjpBdHRyaWJ1dGUmKTsKIAogICAgIGJvb2wgaXNDb250YWluZWRJblJlcXVlc3QoY29u
c3QgU3RyaW5nJik7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NTY2OCkKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDExLTA5LTIxICBUb20g
U2VwZXogIDx0c2VwZXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIE1ha2UgWFNTQXVkaXRvciBl
eHRyYWN0IG1lYW5pbmdmdWwgc25pcHBldCBmcm9tIHNjcmlwdCBibG9ja3MgZm9yIGNvbXBhcmlz
b24KKyAgICAgICAgYWdhaW5zdCB0aGUgVVJMIHdoZW4gY2hlY2tpbmcgZm9yIHJlZmxlY3Rpb24u
ICBBdm9pZHMgZ2V0dGluZyBjYXVnaCB1cCBpbgorICAgICAgICB0cmFpbGluZyBjb21tZW50cy4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MDk0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodHRwL3Rl
c3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGw6CisgICAg
ICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFp
bGluZy1jb21tZW50LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9z
ZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50Lmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQt
dGFnLXdpdGgtdHJhaWxpbmctY29tbWVudDItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRyYWlsaW5n
LWNvbW1lbnQyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNz
QXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudDMtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRh
Zy13aXRoLXRyYWlsaW5nLWNvbW1lbnQzLmh0bWw6IEFkZGVkLgorCiAyMDExLTA5LTIxICBTZXJn
ZXkgR2xhenVub3YgIDxzZXJnLmdsYXp1bm92QGdtYWlsLmNvbT4KIAogICAgICAgICBbQ2hyb21p
dW1dIFByb3RlY3QgdGhlIEZyYW1lIGluIFY4SFRNTERvY3VtZW50OjpvcGVuQ2FsbGJhY2sKSW5k
ZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFn
LXdpdGgtdHJhaWxpbmctY29tbWVudDItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJh
aWxpbmctY29tbWVudDItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1j
b21tZW50Mi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorQ09OU09M
RSBNRVNTQUdFOiBsaW5lIDE6IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQgc2NyaXB0
LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGluIHJlcXVlc3QuCisKKwpJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0
aC10cmFpbGluZy1jb21tZW50Mi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVu
dDIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
eHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudDIuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NB
dWRpdG9yRW5hYmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZy
YW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3Vy
Y2VzL2VjaG8taW50ZXJ0YWcucGw/Y2x1dHRlcj0lMjA8aT48Yj4mcT08c2NyaXB0Pi8vJnEyPSUw
YWFsZXJ0KFN0cmluZy5mcm9tQ2hhckNvZGUoMHg1OCwweDUzLDB4NTMpKTwvc2NyaXB0PiI+Cis8
L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMv
c2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudDMtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
eHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudDMtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRp
dG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50My1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMyBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFJlZnVzZWQg
dG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91
bmQgd2l0aGluIHJlcXVlc3QuCisKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50My5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9z
Y3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudDMuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgt
dHJhaWxpbmctY29tbWVudDMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwor
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVlKTsKK30KKzwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4
MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGw/Y2x1dHRl
cj0lMjA8aT48Yj4mcT08c2NyaXB0PiUyMCUwYTwhLS0mcTI9JTBhYWxlcnQoU3RyaW5nLmZyb21D
aGFyQ29kZSgweDU4LDB4NTMsMHg1MykpLy8tLT48L3NjcmlwdD4iPgorPC9pZnJhbWU+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1
ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRyYWlsaW5nLWNvbW1lbnQtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3Jp
cHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13
aXRoLXRyYWlsaW5nLWNvbW1lbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDMgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBSZWZ1c2VkIHRvIGV4ZWN1dGUgYSBKYXZh
U2NyaXB0IHNjcmlwdC4gU291cmNlIGNvZGUgb2Ygc2NyaXB0IGZvdW5kIHdpdGhpbiByZXF1ZXN0
LgorCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9z
Y3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudC5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJh
aWxpbmctY29tbWVudC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50Lmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Cisg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuc2V0WFNTQXVkaXRvckVuYWJsZWQodHJ1ZSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPGlmcmFtZSBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS94c3NBdWRp
dG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLnBsP2NsdXR0ZXI9JTIwPGk+PGI+JnE9PHNjcmlw
dD4vKiZxMj0qL2FsZXJ0KFN0cmluZy5mcm9tQ2hhckNvZGUoMHg1OCwweDUzLDB4NTMpKTwvc2Ny
aXB0PiI+Cis8L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy5wbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
cmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGwJKHJldmlzaW9uIDk1NjYzKQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFn
LnBsCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw5IEBAIHByaW50ICRjZ2ktPnBhcmFtKCdx
Jyk7CiBpZiAoJGNnaS0+cGFyYW0oJ2NsdXR0ZXInKSkgewogICAgIHByaW50ICRjZ2ktPnBhcmFt
KCdjbHV0dGVyJyk7CiB9CitpZiAoJGNnaS0+cGFyYW0oJ3EyJykpIHsKKyAgICBwcmludCAkY2dp
LT5wYXJhbSgncTInKTsKK30KIGlmICgkY2dpLT5wYXJhbSgnbm90aWZ5RG9uZScpKSB7CiAgICAg
cHJpbnQgIjxzY3JpcHQ+XG4iOwogICAgIHByaW50ICJpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKVxuIjsK
</data>
<flag name="review"
          id="105187"
          type_id="1"
          status="-"
          setter="tsepez"
    />
    <flag name="commit-queue"
          id="105188"
          type_id="3"
          status="-"
          setter="tsepez"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108353</attachid>
            <date>2011-09-22 10:17:53 -0700</date>
            <delta_ts>2011-09-22 19:27:40 -0700</delta_ts>
            <desc>Revised patch closing hole with truncation case.</desc>
            <filename>patch_68094.txt</filename>
            <type>text/plain</type>
            <size>12532</size>
            <attacher name="Thomas Sepez">tsepez</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk1NjY4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDktMjEgIFRvbSBTZXBl
eiAgPHRzZXBlekBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgTWFrZSBYU1NBdWRpdG9yIGV4dHJh
Y3QgbWVhbmluZ2Z1bCBzbmlwcGV0IGZyb20gc2NyaXB0IGJsb2NrcyBmb3IgY29tcGFyaXNvbgor
ICAgICAgICBhZ2FpbnN0IHRoZSBVUkwgd2hlbiBjaGVja2luZyBmb3IgcmVmbGVjdGlvbi4gIEF2
b2lkcyBnZXR0aW5nIGNhdWdoIHVwIGluCisgICAgICAgIHRyYWlsaW5nIGNvbW1lbnRzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgwOTQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogaHR0cC90
ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50
Lmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3Jp
cHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudDIuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90
ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50
My5odG1sCisKKyAgICAgICAgKiBodG1sL3BhcnNlci9YU1NBdWRpdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZpbHRlclRva2VuQWZ0ZXJTY3JpcHRTdGFydFRhZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpleHRyYWN0Q29kZUZyYWdtZW50KToKKyAgICAg
ICAgKiBodG1sL3BhcnNlci9YU1NBdWRpdG9yLmg6CisKIDIwMTEtMDktMjEgIEphbWVzIFJvYmlu
c29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEJ3MgY29udGV4dCBzaG91bGQgbm90IGJlIGRlc3Ryb3llZCBkdXJpbmcg
YXRleGl0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRpdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRpdG9yLmNwcAko
cmV2aXNpb24gOTU2NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRpdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsMjYgQEAgc3RhdGljIGJvb2wgaXNIVE1M
UXVvdGUoVUNoYXIgYykKICAgICByZXR1cm4gKGMgPT0gJyInIHx8IGMgPT0gJ1wnJyk7CiB9CiAK
K3N0YXRpYyBib29sIGlzSFRNTE5ld2xpbmUoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gKGMgPT0g
J1xuJyB8fCBjID09ICdccicpOworfQorCitzdGF0aWMgYm9vbCBzdGFydHNIVE1MQ29tbWVudEF0
KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBzaXplX3Qgc3RhcnQpCit7CisgICAgcmV0dXJuIChzdGFy
dCArIDMgPCBzdHJpbmcubGVuZ3RoKCkgJiYgc3RyaW5nW3N0YXJ0XSA9PSAnPCcgJiYgc3RyaW5n
W3N0YXJ0KzFdID09ICchJyAmJiBzdHJpbmdbc3RhcnQrMl0gPT0gJy0nICYmIHN0cmluZ1tzdGFy
dCszXSA9PSAnLScpOworfSAgICAKKworc3RhdGljIGJvb2wgc3RhcnRzU2luZ2xlTGluZUNvbW1l
bnRBdChjb25zdCBTdHJpbmcmIHN0cmluZywgc2l6ZV90IHN0YXJ0KQoreworICAgIHJldHVybiAo
c3RhcnQgKyAxIDwgc3RyaW5nLmxlbmd0aCgpICYmIHN0cmluZ1tzdGFydF0gPT0gJy8nICYmIHN0
cmluZ1tzdGFydCsxXSA9PSAnLycpOworfSAgICAKKworc3RhdGljIGJvb2wgc3RhcnRzTXVsdGlM
aW5lQ29tbWVudEF0KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBzaXplX3Qgc3RhcnQpCit7CisgICAg
cmV0dXJuIChzdGFydCArIDEgPCBzdHJpbmcubGVuZ3RoKCkgJiYgc3RyaW5nW3N0YXJ0XSA9PSAn
LycgJiYgc3RyaW5nW3N0YXJ0KzFdID09ICcqJyk7Cit9CisKIHN0YXRpYyBib29sIGhhc05hbWUo
Y29uc3QgSFRNTFRva2VuJiB0b2tlbiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKIHsKICAg
ICByZXR1cm4gZXF1YWxJZ25vcmluZ051bGxpdHkodG9rZW4ubmFtZSgpLCBzdGF0aWNfY2FzdDxj
b25zdCBTdHJpbmcmPihuYW1lLmxvY2FsTmFtZSgpKSk7CkBAIC0zMDUsMTUgKzMyNSwxNiBAQCBi
b29sIFhTU0F1ZGl0b3I6OmZpbHRlclRva2VuQWZ0ZXJTY3JpcHRTCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBpbnQgc3RhcnQgPSAwOwotICAgIC8vIEZJWE1FOiBXZSBwcm9i
YWJseSB3YW50IHRvIGdyYWIgb25seSB0aGUgZmlyc3QgZmV3IGNoYXJhY3RlcnMgb2YgdGhlCi0g
ICAgLy8gICAgICAgIGNvbnRlbnRzIG9mIHRoZSBzY3JpcHQgZWxlbWVudC4KLSAgICBpbnQgZW5k
ID0gdG9rZW4uZW5kSW5kZXgoKSAtIHRva2VuLnN0YXJ0SW5kZXgoKTsKLSAgICBTdHJpbmcgc25p
cHBldCA9IG1fY2FjaGVkU25pcHBldCArIHNuaXBwZXRGb3JSYW5nZSh0b2tlbiwgc3RhcnQsIGVu
ZCk7Ci0gICAgaWYgKGlzQ29udGFpbmVkSW5SZXF1ZXN0KGZ1bGx5RGVjb2RlU3RyaW5nKHNuaXBw
ZXQsIG1fcGFyc2VyLT5kb2N1bWVudCgpLT5kZWNvZGVyKCkpKSkgewotICAgICAgICB0b2tlbi5l
cmFzZUNoYXJhY3RlcnMoKTsKLSAgICAgICAgdG9rZW4uYXBwZW5kVG9DaGFyYWN0ZXIoJyAnKTsg
Ly8gVGVjaG5pY2FsbHksIGNoYXJhY3RlciB0b2tlbnMgY2FuJ3QgYmUgZW1wdHkuCi0gICAgICAg
IHJldHVybiB0cnVlOworICAgIFRleHRSZXNvdXJjZURlY29kZXIqIGRlY29kZXIgPSBtX3BhcnNl
ci0+ZG9jdW1lbnQoKS0+ZGVjb2RlcigpOworICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdChm
dWxseURlY29kZVN0cmluZyhtX2NhY2hlZFNuaXBwZXQsIGRlY29kZXIpKSkgeworICAgICAgICBp
bnQgc3RhcnQgPSAwOworICAgICAgICBpbnQgZW5kID0gdG9rZW4uZW5kSW5kZXgoKSAtIHRva2Vu
LnN0YXJ0SW5kZXgoKTsKKyAgICAgICAgU3RyaW5nIHNuaXBwZXQgPSBzbmlwcGV0Rm9ySmF2YVNj
cmlwdChzbmlwcGV0Rm9yUmFuZ2UodG9rZW4sIHN0YXJ0LCBlbmQpKTsKKyAgICAgICAgaWYgKGlz
Q29udGFpbmVkSW5SZXF1ZXN0KGZ1bGx5RGVjb2RlU3RyaW5nKHNuaXBwZXQsIGRlY29kZXIpKSkg
eworICAgICAgICAgICAgdG9rZW4uZXJhc2VDaGFyYWN0ZXJzKCk7CisgICAgICAgICAgICB0b2tl
bi5hcHBlbmRUb0NoYXJhY3RlcignICcpOyAvLyBUZWNobmljYWxseSwgY2hhcmFjdGVyIHRva2Vu
cyBjYW4ndCBiZSBlbXB0eS4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAg
ICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTUzNyw0ICs1NTgsNTAgQEAgYm9vbCBYU1NB
dWRpdG9yOjppc1NhbWVPcmlnaW5SZXNvdXJjZShjbwogICAgIHJldHVybiAobV9wYXJzZXItPmRv
Y3VtZW50KCktPnVybCgpLmhvc3QoKSA9PSByZXNvdXJjZVVSTC5ob3N0KCkgJiYgcmVzb3VyY2VV
UkwucXVlcnkoKS5pc0VtcHR5KCkpOwogfQogCisKK1N0cmluZyBYU1NBdWRpdG9yOjpzbmlwcGV0
Rm9ySmF2YVNjcmlwdChjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBjb25zdCBzaXplX3Qg
a01heGltdW1GcmFnbWVudExlbmd0aFRhcmdldCA9IDEwMDsKKworICAgIHNpemVfdCBzdGFydFBv
c2l0aW9uID0gMDsKKyAgICBzaXplX3QgZW5kUG9zaXRpb24gPSBzdHJpbmcubGVuZ3RoKCk7Cisg
ICAgc2l6ZV90IGZvdW5kUG9zaXRpb24gPSBub3RGb3VuZDsKKworICAgIC8vIFNraXAgb3ZlciBp
bml0aWFsIGNvbW1lbnRzIHRvIGZpbmQgc3RhcnQgb2YgY29kZS4KKyAgICB3aGlsZSAoc3RhcnRQ
b3NpdGlvbiA8IGVuZFBvc2l0aW9uKSB7CisgICAgICAgIHdoaWxlIChzdGFydFBvc2l0aW9uIDwg
ZW5kUG9zaXRpb24gJiYgaXNIVE1MU3BhY2Uoc3RyaW5nW3N0YXJ0UG9zaXRpb25dKSkKKyAgICAg
ICAgICAgIHN0YXJ0UG9zaXRpb24rKzsKKyAgICAgICAgaWYgKHN0YXJ0c0hUTUxDb21tZW50QXQo
c3RyaW5nLCBzdGFydFBvc2l0aW9uKSB8fCBzdGFydHNTaW5nbGVMaW5lQ29tbWVudEF0KHN0cmlu
Zywgc3RhcnRQb3NpdGlvbikpIHsKKyAgICAgICAgICAgIHdoaWxlIChzdGFydFBvc2l0aW9uIDwg
ZW5kUG9zaXRpb24gJiYgIWlzSFRNTE5ld2xpbmUoc3RyaW5nW3N0YXJ0UG9zaXRpb25dKSkKKyAg
ICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uKys7CisgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRz
TXVsdGlMaW5lQ29tbWVudEF0KHN0cmluZywgc3RhcnRQb3NpdGlvbikpIHsKKyAgICAgICAgICAg
IGlmICgoZm91bmRQb3NpdGlvbiA9IHN0cmluZy5maW5kKCIqLyIsIHN0YXJ0UG9zaXRpb24pKSAh
PSBub3RGb3VuZCkKKyAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gZm91bmRQb3NpdGlv
biArIDI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9
IGVuZFBvc2l0aW9uOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIC8vIFN0b3AgYXQgbmV4dCBjb21tZW50IG9yIHdoZW4gd2UgZXhjZWVkIHRoZSBtYXhp
bXVtIGxlbmd0aCB0YXJnZXQuIEFmdGVyIGhpdHRpbmcgdGhlCisgICAgLy8gbGVuZ3RoIHRhcmdl
dCwgd2UgY2FuIG9ubHkgc3RvcCBhdCBhIHBvaW50IHdoZXJlIHdlIGtub3cgd2UgYXJlIG5vdCBp
biB0aGUgbWlkZGxlIG9mCisgICAgLy8gYSAlLWVzY2FwZSBzZXF1ZW5jZS4gQSBzaW1wbGUgd2F5
IHRvIGRvIHRoaXMgaXMgdG8gYnJlYWsgb24gd2hpdGVzcGFjZSBvbmx5LiAgICAgICAgICAgICAg
ICAKKyAgICBmb3IgKGZvdW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOyBmb3VuZFBvc2l0aW9u
IDwgZW5kUG9zaXRpb247IGZvdW5kUG9zaXRpb24rKykgeworICAgICAgICBpZiAoc3RhcnRzU2lu
Z2xlTGluZUNvbW1lbnRBdChzdHJpbmcsIGZvdW5kUG9zaXRpb24pIHx8IHN0YXJ0c011bHRpTGlu
ZUNvbW1lbnRBdChzdHJpbmcsIGZvdW5kUG9zaXRpb24pKSB7CisgICAgICAgICAgICBlbmRQb3Np
dGlvbiA9IGZvdW5kUG9zaXRpb24gKyAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHN0YXJ0c0hUTUxDb21tZW50QXQoc3RyaW5nLCBmb3VuZFBvc2l0aW9uKSkg
eworICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBmb3VuZFBvc2l0aW9uICsgNDsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChmb3VuZFBvc2l0aW9uID4gc3RhcnRQ
b3NpdGlvbiArIGtNYXhpbXVtRnJhZ21lbnRMZW5ndGhUYXJnZXQgJiYgaXNIVE1MU3BhY2Uoc3Ry
aW5nW2ZvdW5kUG9zaXRpb25dKSkgeworICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBmb3VuZFBv
c2l0aW9uOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
cmV0dXJuIHN0cmluZy5zdWJzdHJpbmcoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24gLSBzdGFy
dFBvc2l0aW9uKTsKIH0KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuaAkocmV2aXNpb24gOTU2NjMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYg
KzY3LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChIVE1M
VG9rZW4mLCBjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFZh
bHVlID0gU3RyaW5nKCkpOwogCiAgICAgU3RyaW5nIHNuaXBwZXRGb3JSYW5nZShjb25zdCBIVE1M
VG9rZW4mLCBpbnQgc3RhcnQsIGludCBlbmQpOworICAgIFN0cmluZyBzbmlwcGV0Rm9ySmF2YVNj
cmlwdChjb25zdCBTdHJpbmcmKTsKICAgICBTdHJpbmcgZGVjb2RlZFNuaXBwZXRGb3JBdHRyaWJ1
dGUoY29uc3QgSFRNTFRva2VuJiwgY29uc3QgSFRNTFRva2VuOjpBdHRyaWJ1dGUmKTsKIAogICAg
IGJvb2wgaXNDb250YWluZWRJblJlcXVlc3QoY29uc3QgU3RyaW5nJik7CkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA5NTY2OCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDIwIEBACisyMDExLTA5LTIxICBUb20gU2VwZXogIDx0c2VwZXpAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIE1ha2UgWFNTQXVkaXRvciBleHRyYWN0IG1lYW5pbmdmdWwgc25pcHBldCBm
cm9tIHNjcmlwdCBibG9ja3MgZm9yIGNvbXBhcmlzb24KKyAgICAgICAgYWdhaW5zdCB0aGUgVVJM
IHdoZW4gY2hlY2tpbmcgZm9yIHJlZmxlY3Rpb24uICBBdm9pZHMgZ2V0dGluZyBjYXVnaCB1cCBp
bgorICAgICAgICB0cmFpbGluZyBjb21tZW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MDk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVz
b3VyY2VzL2VjaG8taW50ZXJ0YWcucGw6CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94
c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50LWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10
YWctd2l0aC10cmFpbGluZy1jb21tZW50Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVz
dHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudDIt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1
ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRyYWlsaW5nLWNvbW1lbnQyLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJh
aWxpbmctY29tbWVudDMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3Rz
L3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRyYWlsaW5nLWNvbW1lbnQzLmh0
bWw6IEFkZGVkLgorCiAyMDExLTA5LTIxICBTZXJnZXkgR2xhenVub3YgIDxzZXJnLmdsYXp1bm92
QGdtYWlsLmNvbT4KIAogICAgICAgICBbQ2hyb21pdW1dIFByb3RlY3QgdGhlIEZyYW1lIGluIFY4
SFRNTERvY3VtZW50OjpvcGVuQ2FsbGJhY2sKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMv
c2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudDItZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
eHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudDItZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRp
dG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50Mi1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNSBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFJlZnVzZWQg
dG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91
bmQgd2l0aGluIHJlcXVlc3QuCisKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBSZWZ1c2VkIHRv
IGV4ZWN1dGUgYSBKYXZhU2NyaXB0IHNjcmlwdC4gU291cmNlIGNvZGUgb2Ygc2NyaXB0IGZvdW5k
IHdpdGhpbiByZXF1ZXN0LgorCisgCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3Vy
aXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRyYWlsaW5nLWNvbW1lbnQyLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Nj
cmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50Mi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10
cmFpbGluZy1jb21tZW50Mi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3IEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cisg
IGxheW91dFRlc3RDb250cm9sbGVyLnNldFhTU0F1ZGl0b3JFbmFibGVkKHRydWUpOworfQorPC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxpZnJhbWUgc3JjPSJodHRwOi8vbG9jYWxob3N0Ojgw
MDAvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy5wbD9jbHV0dGVy
PTxpPjxiPiZxPTxzY3JpcHQ+Ly8mcTI9JTBhYWxlcnQoU3RyaW5nLmZyb21DaGFyQ29kZSgweDU4
LDB4NTMsMHg1MykpPC9zY3JpcHQ+Ij4KKzwvaWZyYW1lPgorPGlmcmFtZSBzcmM9Imh0dHA6Ly9s
b2NhbGhvc3Q6ODAwMC9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFn
LnBsP2NsdXR0ZXI9PGk+PGI+JnE9PHNjcmlwdD54PTEqMSoxKjEqMSoxKjEqMSoxKjEqMSoxKjEq
MSoxKjEqMSoxKjEqMSoxKjEqMSoxKjEqMSoxKjEqMSoxKjEqMSoxKjEqMSoxKjEqMSoxKjEqMSox
KjEqMSoxKjEqMSoxKjEqMSoxKjEqMSoxKjEqMSoxKjEqMSoxKjEqMSoxKjEqMSoxKjEqMSoxKjEq
MSoxKjEqMSoxKjEqMSoxKjEqMSoxKjEqMSoxKjEvLyZxMj0lMGFhbGVydChTdHJpbmcuZnJvbUNo
YXJDb2RlKDB4NTgsMHg1MywweDUzKSk8L3NjcmlwdD4iPgorPC9pZnJhbWU+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
c2NyaXB0LXRhZy13aXRoLXRyYWlsaW5nLWNvbW1lbnQzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRh
Zy13aXRoLXRyYWlsaW5nLWNvbW1lbnQzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgt
dHJhaWxpbmctY29tbWVudDMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMg
QEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBSZWZ1c2VkIHRvIGV4ZWN1dGUgYSBKYXZhU2Ny
aXB0IHNjcmlwdC4gU291cmNlIGNvZGUgb2Ygc2NyaXB0IGZvdW5kIHdpdGhpbiByZXF1ZXN0Lgor
CisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3Jp
cHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudDMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRyYWls
aW5nLWNvbW1lbnQzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRyYWlsaW5nLWNvbW1lbnQzLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Cisg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuc2V0WFNTQXVkaXRvckVuYWJsZWQodHJ1ZSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPGlmcmFtZSBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS94c3NBdWRp
dG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLnBsP2NsdXR0ZXI9JTIwPGk+PGI+JnE9PHNjcmlw
dD4lMjAlMGE8IS0tJnEyPSUwYWFsZXJ0KFN0cmluZy5mcm9tQ2hhckNvZGUoMHg1OCwweDUzLDB4
NTMpKS8vLS0+PC9zY3JpcHQ+Ij4KKzwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0
aC10cmFpbGluZy1jb21tZW50LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRyYWlsaW5n
LWNvbW1lbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10cmFpbGluZy1jb21tZW50
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitDT05TT0xFIE1FU1NB
R0U6IGxpbmUgMTogUmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlwdCBzY3JpcHQuIFNvdXJj
ZSBjb2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKworCkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRyYWls
aW5nLWNvbW1lbnQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Nl
Y3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRyYWlsaW5nLWNvbW1lbnQuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRv
ci9zY3JpcHQtdGFnLXdpdGgtdHJhaWxpbmctY29tbWVudC5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0Pgor
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CisgIGxheW91dFRlc3RDb250cm9sbGVyLnNldFhTU0F1ZGl0b3JFbmFi
bGVkKHRydWUpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxpZnJhbWUgc3JjPSJo
dHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1p
bnRlcnRhZy5wbD9jbHV0dGVyPSUyMDxpPjxiPiZxPTxzY3JpcHQ+LyomcTI9Ki9hbGVydChTdHJp
bmcuZnJvbUNoYXJDb2RlKDB4NTgsMHg1MywweDUzKSk8L3NjcmlwdD4iPgorPC9pZnJhbWU+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hz
c0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVy
dGFnLnBsCShyZXZpc2lvbiA5NTY2MykKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJp
dHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy5wbAkod29ya2luZyBjb3B5KQpA
QCAtMzUsNiArMzUsOSBAQCBwcmludCAkY2dpLT5wYXJhbSgncScpOwogaWYgKCRjZ2ktPnBhcmFt
KCdjbHV0dGVyJykpIHsKICAgICBwcmludCAkY2dpLT5wYXJhbSgnY2x1dHRlcicpOwogfQoraWYg
KCRjZ2ktPnBhcmFtKCdxMicpKSB7CisgICAgcHJpbnQgJGNnaS0+cGFyYW0oJ3EyJyk7Cit9CiBp
ZiAoJGNnaS0+cGFyYW0oJ25vdGlmeURvbmUnKSkgewogICAgIHByaW50ICI8c2NyaXB0PlxuIjsK
ICAgICBwcmludCAiaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcilcbiI7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>