<?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>39409</bug_id>
          
          <creation_ts>2010-05-19 23:31:10 -0700</creation_ts>
          <short_desc>Enable executable support for svn-apply and svn-unapply</short_desc>
          <delta_ts>2010-07-11 23:29:30 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>38885</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>abarth</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>228211</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-05-19 23:31:10 -0700</bug_when>
    <thetext>Towards adding svn executable bit support, we need to modify function VCSUtils::parseDiff to recognize an SVN footer and call the appropriate parsing routine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229590</commentid>
    <comment_count>1</comment_count>
      <attachid>56846</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-05-23 21:05:25 -0700</bug_when>
    <thetext>Created attachment 56846
Patch with unit tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229591</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-23 21:07:26 -0700</bug_when>
    <thetext>Attachment 56846 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:243:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:244:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:261:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:262:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:284:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:285:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:302:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:303:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:329:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:330:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:351:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:352:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:498:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:499:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:535:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:536:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:559:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:560:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:584:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:585:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:599:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:600:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:611:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:612:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 24 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229592</commentid>
    <comment_count>3</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-05-23 21:09:59 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 56846 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
&gt; WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:243:  Line contains tab character.  [whitespace/tab] [5]
&gt; WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:244:  Line contains tab character.  [whitespace/tab] [5]
&gt; WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:261:  Line contains tab character.  [whitespace/tab] [5]
&gt; WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:262:  Line contains tab character.  [whitespace/tab] [5]
&gt; WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:284:  Line contains tab character. 
&gt; [...]
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

These tabs are expected as they occur in the example input text for some of the unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230236</commentid>
    <comment_count>4</comment_count>
      <attachid>56846</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-05-25 06:01:12 -0700</bug_when>
    <thetext>Comment on attachment 56846
Patch with unit tests

Some initial comments on the first part of the patch:

&gt; Index: WebKitTools/ChangeLog
&gt; +        Make VCSUtils::parseDiff recognize an SVN footer
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=39409

It seems like a better summary would be to say that you are adding executable-bit
support to svn-apply and svn-unapply, since that&apos;s the end result people would
care about more.  SVN footer support is just a means to that end in this patch.
By the way, since you stopped using the word &quot;footer&quot; in the code, you might
want to change that terminology in the ChangeLog as well.

&gt; +        Connect up the Git, and SVN executable bit support in the function parseDiff

&quot;Connect up Git and SVN executable-bit support in parseDiff() so that...&quot;
(no &quot;the&quot; and no comma).

A suggestion: I usually append &quot;()&quot; to function names in my ChangeLog descriptions so
I don&apos;t have to type the word &quot;function.&quot;

&gt; +          - Modified function parseDiff to call parseSvnDiffProperties when
&gt; +            it find the start of an SVN property change diff.

finds

&gt; Index: WebKitTools/Scripts/VCSUtils.pm
&gt;  my $svnDiffStartRegEx = qr#^Index: ([^\r\n]+)#;
&gt; +my $svnDiffPropertiesStartRegEx = qr#Property changes on: ([^\r\n]+)#; # $1 is normally the same as the index path.
&gt;  my $svnPropertyStartRegEx = qr#^(Modified|Name|Added|Deleted): ([^\r\n]+)#; # $2 is the name of the property.
&gt;  my $svnPropertyValueStartRegEx = qr#^   (\+|-) ([^\r\n]+)#; # $2 is the start of the property&apos;s value (which may span multiple lines).

It seems $svnPropertiesStartRegEx would be more consistent with the other
regex variables here (even though the function it&apos;s actually used in is called
parseSvnDiffProperties()).  If you think the other regexes should be changed to
begin with $svnDiff..., you might want to add a FIXME.

&gt; +#   executableBitDelta: the value 1 or -1 if the executable bit was added or
&gt; +#                       removed from the target file, respectively.

By the way, are you maintaining in your code the convention that
deleted executable files have delta = -1?  I think I did that for the 
Git code.  That will help for unapplying since adding the file back
should have delta = +1.

&gt;      my $headerHashRef; # Last header found, as returned by parseDiffHeader().
&gt; +    my $propertyHashRef; # Last SVN properties diff found, as returned by parseSvnDiffProperties().

Would $svnPropertiesHashRef be a better name?

&gt; +        if ($line =~ $svnDiffPropertiesStartRegEx) {
&gt; +            if ($propertyHashRef) {
&gt; +                # This is the start of the second consecutive property diff of
&gt; +                # this while loop (i.e. we just processed a property diff and
&gt; +                # just encountered the start of another property diff).
&gt; +                last;
&gt; +            }
&gt; +            if ($headerHashRef &amp;&amp; ($1 ne $headerHashRef-&gt;{indexPath})) {

Could you perhaps read $1 much closer to the regex (possibly setting a variable)?

&gt; +                # This is the start of the second diff of this while loop.
&gt; +                # In particular, this is the start of a property diff for
&gt; +                # a file that only has property changes.
&gt; +                last;

It seems like it would be better to combine these two if blocks that both call &quot;last&quot;.

&gt; +            }
&gt; +            ($propertyHashRef, $line) = parseSvnDiffProperties($fileHandle, $line);
&gt; +            next;
&gt; +        }
&gt;          if ($line !~ $headerStartRegEx) {
&gt;              # Then we are in the body of the diff.
&gt;              $svnText .= $line;
&gt; @@ -789,8 +809,9 @@ sub parseDiff($$)
&gt;              next;
&gt;          } # Otherwise, we found a diff header.
&gt;  
&gt; -        if ($headerHashRef) {
&gt; -            # Then this is the second diff header of this while loop.
&gt; +        if ($propertyHashRef || $headerHashRef) {
&gt; +            # Then either we just processed an SVN property change or this
&gt; +            # is the start of the second diff header of this while loop.
&gt;              last;
&gt;          }

Something tells me the &quot;if&quot; logic in the while loop can be made simpler somehow...
For example, if either property changes or a header can begin the diff, then
why is parseDiffHeader() called at the end of the while loop, whereas
parseSvnDiffProperties() is called towards the beginning of the loop.
There&apos;s an asymmetry here.  Can this be made simpler?

&gt;  
&gt; @@ -812,12 +833,30 @@ sub parseDiff($$)
&gt;          $copyHash{copiedFromPath} = $headerHashRef-&gt;{copiedFromPath};
&gt;          $copyHash{indexPath} = $headerHashRef-&gt;{indexPath};
&gt;          $copyHash{sourceRevision} = $headerHashRef-&gt;{sourceRevision} if $headerHashRef-&gt;{sourceRevision};
&gt; +        if ($headerHashRef-&gt;{isSvn}) {
&gt; +            # SVN represents a copy of a file with an executable bit as two distinct diffs: the actual copy, and setting the executable bit.
&gt; +            $copyHash{executableBitDelta} = $propertyHashRef-&gt;{executableBitDelta} if $propertyHashRef-&gt;{executableBitDelta};
&gt; +        }

If this is the case, then why would this not cause a problem for parseDiff()?
If svn-create-patch creates two diffs for that case, then wouldn&apos;t this result
in two calls to parseDiff() -- which would throw off your logic here?
Is parseDiff() treating the &quot;Property Changes&quot; section as a separate diff
or part of the same diff?  We need to clarify what we are calling a &quot;diff&quot;.

It might be worth putting a comment somewhere explaining the relationship/ordering
between the header and property changes section (and possibly also contents and
binary contents).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231733</commentid>
    <comment_count>5</comment_count>
      <attachid>56846</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-05-28 09:02:03 -0700</bug_when>
    <thetext>Comment on attachment 56846
Patch with unit tests

Marking r- to remove from review queue.  My initial review comments are in the previous comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232512</commentid>
    <comment_count>6</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-05-31 14:00:41 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 56846 [details])
&gt; Some initial comments on the first part of the patch:
&gt; 
&gt; &gt; Index: WebKitTools/ChangeLog
&gt; &gt; +        Make VCSUtils::parseDiff recognize an SVN footer
&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=39409
&gt; 
&gt; It seems like a better summary would be to say that you are adding executable-bit
&gt; support to svn-apply and svn-unapply, since that&apos;s the end result people would
&gt; care about more.  SVN footer support is just a means to that end in this patch.
&gt; By the way, since you stopped using the word &quot;footer&quot; in the code, you might
&gt; want to change that terminology in the ChangeLog as well.
&gt; 
&gt; &gt; +        Connect up the Git, and SVN executable bit support in the function parseDiff
&gt; 
&gt; &quot;Connect up Git and SVN executable-bit support in parseDiff() so that...&quot;
&gt; (no &quot;the&quot; and no comma).
&gt; 
&gt; A suggestion: I usually append &quot;()&quot; to function names in my ChangeLog descriptions so
&gt; I don&apos;t have to type the word &quot;function.&quot;

Will change.

&gt; 
&gt; &gt; +          - Modified function parseDiff to call parseSvnDiffProperties when
&gt; &gt; +            it find the start of an SVN property change diff.
&gt; 
&gt; finds

Will change.

&gt; 
&gt; &gt; Index: WebKitTools/Scripts/VCSUtils.pm
&gt; &gt;  my $svnDiffStartRegEx = qr#^Index: ([^\r\n]+)#;
&gt; &gt; +my $svnDiffPropertiesStartRegEx = qr#Property changes on: ([^\r\n]+)#; # $1 is normally the same as the index path.
&gt; &gt;  my $svnPropertyStartRegEx = qr#^(Modified|Name|Added|Deleted): ([^\r\n]+)#; # $2 is the name of the property.
&gt; &gt;  my $svnPropertyValueStartRegEx = qr#^   (\+|-) ([^\r\n]+)#; # $2 is the start of the property&apos;s value (which may span multiple lines).
&gt; 
&gt; It seems $svnPropertiesStartRegEx would be more consistent with the other
&gt; regex variables here (even though the function it&apos;s actually used in is called
&gt; parseSvnDiffProperties()).  If you think the other regexes should be changed to
&gt; begin with $svnDiff..., you might want to add a FIXME.

Will change.

&gt; 
&gt; &gt; +#   executableBitDelta: the value 1 or -1 if the executable bit was added or
&gt; &gt; +#                       removed from the target file, respectively.
&gt; 
&gt; By the way, are you maintaining in your code the convention that
&gt; deleted executable files have delta = -1?  I think I did that for the 
&gt; Git code.  That will help for unapplying since adding the file back
&gt; should have delta = +1.

SVN deleted file diffs don&apos;t include a property change entry. When you unapply a deleted file diff then we perform an svn revert, which restores the file mode.

&gt; 
&gt; &gt;      my $headerHashRef; # Last header found, as returned by parseDiffHeader().
&gt; &gt; +    my $propertyHashRef; # Last SVN properties diff found, as returned by parseSvnDiffProperties().
&gt; 
&gt; Would $svnPropertiesHashRef be a better name?

Will change.

&gt; 
&gt; &gt; +        if ($line =~ $svnDiffPropertiesStartRegEx) {
&gt; &gt; +            if ($propertyHashRef) {
&gt; &gt; +                # This is the start of the second consecutive property diff of
&gt; &gt; +                # this while loop (i.e. we just processed a property diff and
&gt; &gt; +                # just encountered the start of another property diff).
&gt; &gt; +                last;
&gt; &gt; +            }
&gt; &gt; +            if ($headerHashRef &amp;&amp; ($1 ne $headerHashRef-&gt;{indexPath})) {
&gt; 
&gt; Could you perhaps read $1 much closer to the regex (possibly setting a variable)?

Will change.

&gt; 
&gt; &gt; +                # This is the start of the second diff of this while loop.
&gt; &gt; +                # In particular, this is the start of a property diff for
&gt; &gt; +                # a file that only has property changes.
&gt; &gt; +                last;
&gt; 
&gt; It seems like it would be better to combine these two if blocks that both call &quot;last&quot;.

Will change.

&gt; 
&gt; &gt; +            }
&gt; &gt; +            ($propertyHashRef, $line) = parseSvnDiffProperties($fileHandle, $line);
&gt; &gt; +            next;
&gt; &gt; +        }
&gt; &gt;          if ($line !~ $headerStartRegEx) {
&gt; &gt;              # Then we are in the body of the diff.
&gt; &gt;              $svnText .= $line;
&gt; &gt; @@ -789,8 +809,9 @@ sub parseDiff($$)
&gt; &gt;              next;
&gt; &gt;          } # Otherwise, we found a diff header.
&gt; &gt;  
&gt; &gt; -        if ($headerHashRef) {
&gt; &gt; -            # Then this is the second diff header of this while loop.
&gt; &gt; +        if ($propertyHashRef || $headerHashRef) {
&gt; &gt; +            # Then either we just processed an SVN property change or this
&gt; &gt; +            # is the start of the second diff header of this while loop.
&gt; &gt;              last;
&gt; &gt;          }
&gt; 
&gt; Something tells me the &quot;if&quot; logic in the while loop can be made simpler somehow...
&gt; For example, if either property changes or a header can begin the diff, then
&gt; why is parseDiffHeader() called at the end of the while loop, whereas
&gt; parseSvnDiffProperties() is called towards the beginning of the loop.
&gt; There&apos;s an asymmetry here.  Can this be made simpler?

We can make this simpler. I would suggest we do this in a separate patch as this would requires changes to parseDiffHeader(). In particular, so that it does not die when it does not find a line that begins with &quot;Index&quot; or &quot;diff --git&quot;.

&gt; 
&gt; &gt;  
&gt; &gt; @@ -812,12 +833,30 @@ sub parseDiff($$)
&gt; &gt;          $copyHash{copiedFromPath} = $headerHashRef-&gt;{copiedFromPath};
&gt; &gt;          $copyHash{indexPath} = $headerHashRef-&gt;{indexPath};
&gt; &gt;          $copyHash{sourceRevision} = $headerHashRef-&gt;{sourceRevision} if $headerHashRef-&gt;{sourceRevision};
&gt; &gt; +        if ($headerHashRef-&gt;{isSvn}) {
&gt; &gt; +            # SVN represents a copy of a file with an executable bit as two distinct diffs: the actual copy, and setting the executable bit.
&gt; &gt; +            $copyHash{executableBitDelta} = $propertyHashRef-&gt;{executableBitDelta} if $propertyHashRef-&gt;{executableBitDelta};
&gt; &gt; +        }
&gt; 
&gt; If this is the case, then why would this not cause a problem for parseDiff()?
&gt; If svn-create-patch creates two diffs for that case, then wouldn&apos;t this result
&gt; in two calls to parseDiff() -- which would throw off your logic here?
&gt; Is parseDiff() treating the &quot;Property Changes&quot; section as a separate diff
&gt; or part of the same diff?  We need to clarify what we are calling a &quot;diff&quot;.

This comment was ambiguous, so I removed it.

I was trying to describe the composition of an SVN copy file diff. Our implementation considers a header for file A followed by property change for file A to be part of the same diff (i.e. pass one patch to patch()). Hence, we don&apos;t treat these as separate diffs.

&gt; 
&gt; It might be worth putting a comment somewhere explaining the relationship/ordering
&gt; between the header and property changes section (and possibly also contents and
&gt; binary contents).

Will add.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232513</commentid>
    <comment_count>7</comment_count>
      <attachid>57494</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-05-31 14:04:03 -0700</bug_when>
    <thetext>Created attachment 57494
Patch with unit tests

Updated patch with Chris&apos;s suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232516</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-31 14:06:26 -0700</bug_when>
    <thetext>Attachment 57494 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:243:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:244:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:261:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:262:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:284:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:285:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:302:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:303:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:329:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:330:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:351:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:352:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:498:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:499:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:535:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:536:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:559:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:560:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:584:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:585:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:599:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:600:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:611:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:612:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 24 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248327</commentid>
    <comment_count>9</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-07-08 10:47:20 -0700</bug_when>
    <thetext>Is this a dupe of Bug 27204?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248342</commentid>
    <comment_count>10</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-07-08 10:57:54 -0700</bug_when>
    <thetext>*** Bug 27204 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249348</commentid>
    <comment_count>11</comment_count>
      <attachid>57494</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-07-09 16:42:20 -0700</bug_when>
    <thetext>Comment on attachment 57494
Patch with unit tests

&gt; Index: WebKitTools/Scripts/VCSUtils.pm
&gt; +        &amp;scmToggleExecutableBit

Why is this method exported?  It doesn&apos;t seem to be used anywhere else in the patch.

&gt; +        if ($line =~ $svnPropertiesStartRegEx) {
&gt; +            my $propertyPath = $1;
&gt; +            if ($svnPropertiesHashRef || $headerHashRef &amp;&amp; ($propertyPath ne $headerHashRef-&gt;{indexPath})) {
&gt; +                # This is the start of the second diff of this while loop. In particular, this
&gt; +                # is the start of a property diff for a file that only has property changes.
&gt; +                # Note, if $svnPropertiesHashRef is defined then this is the start the second
&gt; +                # consecutive property diff in this while loop.

This comment reads funny (like it was two separate comments put together).  Please reword.  Maybe:

# This is the start of the second diff in the while loop, which happens to
# be a property diff.  If $svnPropertiesHasRef is defined, then this is the
# second consecutive property diff, otherwise it&apos;s the start of a property
# diff for a file that only has property changes.

&gt; +        if ($headerHashRef-&gt;{isSvn}) {
&gt; +            $copyHash{executableBitDelta} = $svnPropertiesHashRef-&gt;{executableBitDelta} if $svnPropertiesHashRef-&gt;{executableBitDelta};
&gt; +        }

It&apos;s kind of funny to have &quot;if (expr1) { $foo = $bar if expr2; }&quot; instead of &quot;if (expr1 &amp;&amp; expr2) { $foo = $bar; }&quot; or even &quot;$foo = $bar if (expr1 &amp;&amp; expr2);&quot; in Perl.

Was this done in case an {isGit} check is added later?  I&apos;m okay with with it either way, I guess.

&gt; Index: WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl
&gt; @@ -91,10 +91,6 @@ Index: test_file.swf
&gt;  Cannot display: file marked as a binary type.
&gt;  svn:mime-type = application/octet-stream
&gt;  
&gt; -Property changes on: test_file.swf
&gt; -___________________________________________________________________
&gt; -Name: svn:mime-type
&gt; -   + application/octet-stream
&gt;  
&gt;  
&gt;  Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==

Why was this removed?  It should just be ignored.  The new code should be able to parse it but ignore it.  (I guess other tests cover this later, but I still don&apos;t see any reason to remove it.)

&gt; +{
&gt; +    # New test
&gt; +    diffName =&gt; &quot;SVN: copied file with property change&quot;,
&gt; +    inputText =&gt; &lt;&lt;&apos;END&apos;,
&gt; +Index: NMakefile
&gt; +===================================================================
&gt; +--- NMakefile	(revision 60021)	(from Makefile:60021)
&gt; ++++ NMakefile	(working copy)
&gt; +@@ -0,0 +1,17 @@
&gt; ++MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 
&gt; +
&gt; +Property changes on: NMakefile
&gt; +___________________________________________________________________
&gt; +Added: svn:executable
&gt; +   + *
&gt; +END

This is an invalid patch.  There are not 17 new lines added to NMakefile in this patch.  You should change &quot;-0,0 +1,17&quot; to &quot;-0,0 +1,1&quot; above.

r- for unneeded export and questions about the test cases, but this is very close to being an r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249374</commentid>
    <comment_count>12</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-07-09 17:29:29 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 57494 [details])
&gt; &gt; Index: WebKitTools/Scripts/VCSUtils.pm
&gt; &gt; +        &amp;scmToggleExecutableBit
&gt; 
&gt; Why is this method exported?  It doesn&apos;t seem to be used anywhere else in the patch.

I forgot to export this routine when I landed &lt;http://trac.webkit.org/changeset/58637&gt; (but it wasn&apos;t being called yet since we didn&apos;t have the executableBitDelta hash key) . Now that we are adding the executableBitDelta hash key to the patch hash structure we need to expose this method.

I&apos;ll add a note about this to the change log unless you think this is best addressed in a separate bug.

&gt; 
&gt; &gt; +        if ($line =~ $svnPropertiesStartRegEx) {
&gt; &gt; +            my $propertyPath = $1;
&gt; &gt; +            if ($svnPropertiesHashRef || $headerHashRef &amp;&amp; ($propertyPath ne $headerHashRef-&gt;{indexPath})) {
&gt; &gt; +                # This is the start of the second diff of this while loop. In particular, this
&gt; &gt; +                # is the start of a property diff for a file that only has property changes.
&gt; &gt; +                # Note, if $svnPropertiesHashRef is defined then this is the start the second
&gt; &gt; +                # consecutive property diff in this while loop.
&gt; 
&gt; This comment reads funny (like it was two separate comments put together).  Please reword.  Maybe:
&gt; 
&gt; # This is the start of the second diff in the while loop, which happens to
&gt; # be a property diff.  If $svnPropertiesHasRef is defined, then this is the
&gt; # second consecutive property diff, otherwise it&apos;s the start of a property
&gt; # diff for a file that only has property changes.

Will change.

&gt; 
&gt; &gt; +        if ($headerHashRef-&gt;{isSvn}) {
&gt; &gt; +            $copyHash{executableBitDelta} = $svnPropertiesHashRef-&gt;{executableBitDelta} if $svnPropertiesHashRef-&gt;{executableBitDelta};
&gt; &gt; +        }
&gt; 
&gt; It&apos;s kind of funny to have &quot;if (expr1) { $foo = $bar if expr2; }&quot; instead of &quot;if (expr1 &amp;&amp; expr2) { $foo = $bar; }&quot; or even &quot;$foo = $bar if (expr1 &amp;&amp; expr2);&quot; in Perl.
&gt; 
&gt; Was this done in case an {isGit} check is added later?  I&apos;m okay with with it either way, I guess.

I wrote it like this to be consistent with the syntactical form used throughout the parseDiff function.

I can move the $svnPropertiesHashRef-&gt;{executableBitDelta} into the outer if-statement if you want.

&gt; 
&gt; &gt; Index: WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl
&gt; &gt; @@ -91,10 +91,6 @@ Index: test_file.swf
&gt; &gt;  Cannot display: file marked as a binary type.
&gt; &gt;  svn:mime-type = application/octet-stream
&gt; &gt;  
&gt; &gt; -Property changes on: test_file.swf
&gt; &gt; -___________________________________________________________________
&gt; &gt; -Name: svn:mime-type
&gt; &gt; -   + application/octet-stream
&gt; &gt;  
&gt; &gt;  
&gt; &gt;  Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
&gt; 
&gt; Why was this removed?  It should just be ignored.  The new code should be able to parse it but ignore it.  (I guess other tests cover this later, but I still don&apos;t see any reason to remove it.)

Chris and I want to deprecate svnConvertedText and instead use the hash structure returned by parsePatch() to provide all the necessary information about a patch. Towards this, we decided against adding support for svnConvertedText to the property parsing routines (since we plan to remove svnConvertedText).

We have an existing FIXME comment in parseDiff() that explains that we plan to remove svnConvertedText. I further extended this comment in the patch with the text &quot;Note, we may not always have SVN converted text since we intend to deprecate it in the future....&quot;

&gt; 
&gt; &gt; +{
&gt; &gt; +    # New test
&gt; &gt; +    diffName =&gt; &quot;SVN: copied file with property change&quot;,
&gt; &gt; +    inputText =&gt; &lt;&lt;&apos;END&apos;,
&gt; &gt; +Index: NMakefile
&gt; &gt; +===================================================================
&gt; &gt; +--- NMakefile	(revision 60021)	(from Makefile:60021)
&gt; &gt; ++++ NMakefile	(working copy)
&gt; &gt; +@@ -0,0 +1,17 @@
&gt; &gt; ++MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 
&gt; &gt; +
&gt; &gt; +Property changes on: NMakefile
&gt; &gt; +___________________________________________________________________
&gt; &gt; +Added: svn:executable
&gt; &gt; +   + *
&gt; &gt; +END
&gt; 
&gt; This is an invalid patch.  There are not 17 new lines added to NMakefile in this patch.  You should change &quot;-0,0 +1,17&quot; to &quot;-0,0 +1,1&quot; above.

Will change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249403</commentid>
    <comment_count>13</comment_count>
      <attachid>61128</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-07-09 17:56:24 -0700</bug_when>
    <thetext>Created attachment 61128
Patch with unit tests

Updated patch based on David Kilzer&apos;s comments, including updating the change log to mention the exported function scmToggleExecutableBit() and elaborate on the changes to the existing unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249404</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-09 17:58:59 -0700</bug_when>
    <thetext>Attachment 61128 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:243:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:244:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:261:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:262:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:284:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:285:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:302:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:303:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:329:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:330:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:351:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:352:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:498:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:499:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:535:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:536:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:559:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:560:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:584:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:585:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:599:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:600:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:611:  Line contains tab character.  [whitespace/tab] [5]
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl:612:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 24 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249636</commentid>
    <comment_count>15</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-07-11 10:23:07 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; (From update of attachment 57494 [details] [details])
&gt; &gt; &gt; Index: WebKitTools/Scripts/VCSUtils.pm
&gt; &gt; &gt; +        &amp;scmToggleExecutableBit
&gt; &gt; 
&gt; &gt; Why is this method exported?  It doesn&apos;t seem to be used anywhere else in the patch.
&gt; 
&gt; I forgot to export this routine when I landed &lt;http://trac.webkit.org/changeset/58637&gt; (but it wasn&apos;t being called yet since we didn&apos;t have the executableBitDelta hash key) . Now that we are adding the executableBitDelta hash key to the patch hash structure we need to expose this method.
&gt; 
&gt; I&apos;ll add a note about this to the change log unless you think this is best addressed in a separate bug.

No need for a separate bug.  Adding an explanation in the ChangeLog is sufficient.

&gt; &gt; &gt; +        if ($headerHashRef-&gt;{isSvn}) {
&gt; &gt; &gt; +            $copyHash{executableBitDelta} = $svnPropertiesHashRef-&gt;{executableBitDelta} if $svnPropertiesHashRef-&gt;{executableBitDelta};
&gt; &gt; &gt; +        }
&gt; &gt; 
&gt; &gt; It&apos;s kind of funny to have &quot;if (expr1) { $foo = $bar if expr2; }&quot; instead of &quot;if (expr1 &amp;&amp; expr2) { $foo = $bar; }&quot; or even &quot;$foo = $bar if (expr1 &amp;&amp; expr2);&quot; in Perl.
&gt; &gt; 
&gt; &gt; Was this done in case an {isGit} check is added later?  I&apos;m okay with with it either way, I guess.
&gt; 
&gt; I wrote it like this to be consistent with the syntactical form used throughout the parseDiff function.
&gt; 
&gt; I can move the $svnPropertiesHashRef-&gt;{executableBitDelta} into the outer if-statement if you want.

Okay, this is fine as is.

&gt; &gt; &gt; Index: WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl
&gt; &gt; &gt; @@ -91,10 +91,6 @@ Index: test_file.swf
&gt; &gt; &gt;  Cannot display: file marked as a binary type.
&gt; &gt; &gt;  svn:mime-type = application/octet-stream
&gt; &gt; &gt;  
&gt; &gt; &gt; -Property changes on: test_file.swf
&gt; &gt; &gt; -___________________________________________________________________
&gt; &gt; &gt; -Name: svn:mime-type
&gt; &gt; &gt; -   + application/octet-stream
&gt; &gt; &gt;  
&gt; &gt; &gt;  
&gt; &gt; &gt;  Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA==
&gt; &gt; 
&gt; &gt; Why was this removed?  It should just be ignored.  The new code should be able to parse it but ignore it.  (I guess other tests cover this later, but I still don&apos;t see any reason to remove it.)
&gt; 
&gt; Chris and I want to deprecate svnConvertedText and instead use the hash structure returned by parsePatch() to provide all the necessary information about a patch. Towards this, we decided against adding support for svnConvertedText to the property parsing routines (since we plan to remove svnConvertedText).
&gt; 
&gt; We have an existing FIXME comment in parseDiff() that explains that we plan to remove svnConvertedText. I further extended this comment in the patch with the text &quot;Note, we may not always have SVN converted text since we intend to deprecate it in the future....&quot;

Thanks for the explanation--it didn&apos;t fully register the first time through.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249637</commentid>
    <comment_count>16</comment_count>
      <attachid>61128</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-07-11 10:24:19 -0700</bug_when>
    <thetext>Comment on attachment 61128
Patch with unit tests

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249691</commentid>
    <comment_count>17</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-07-11 23:29:30 -0700</bug_when>
    <thetext>Committed r63062: &lt;http://trac.webkit.org/changeset/63062&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56846</attachid>
            <date>2010-05-23 21:05:25 -0700</date>
            <delta_ts>2010-05-31 14:04:03 -0700</delta_ts>
            <desc>Patch with unit tests</desc>
            <filename>Bug39409.patch</filename>
            <type>text/plain</type>
            <size>21062</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDYwMDU2KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTAtMDUtMjMgIERhbmllbCBCYXRlcyAgPGRi
YXRlc0ByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE1ha2UgVkNTVXRpbHM6OnBhcnNlRGlmZiByZWNvZ25pemUgYW4gU1ZOIGZvb3Rlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0MDkKKwor
ICAgICAgICBDb25uZWN0IHVwIHRoZSBHaXQsIGFuZCBTVk4gZXhlY3V0YWJsZSBiaXQgc3VwcG9y
dCBpbiB0aGUgZnVuY3Rpb24gcGFyc2VEaWZmCisgICAgICAgIHNvIHRoYXQgZXhlY3V0YWJsZSBi
aXQgY2hhbmdlcyBhcmUgcHJvcGFnYXRlZCB2aWEgdGhlIHJldHVybmVkIGRpZmYgaGFzaCB0bwor
ICAgICAgICB0aGUgcGF0Y2ggZnVuY3Rpb24gaW4gc3ZuLWFwcGx5IGFuZCBzdm4tdW5hcHBseS4K
KworICAgICAgICAqIFNjcmlwdHMvVkNTVXRpbHMucG06CisgICAgICAgICAgLSBNb2RpZmllZCBm
dW5jdGlvbiBwYXJzZURpZmYgdG8gY2FsbCBwYXJzZVN2bkRpZmZQcm9wZXJ0aWVzIHdoZW4KKyAg
ICAgICAgICAgIGl0IGZpbmQgdGhlIHN0YXJ0IG9mIGFuIFNWTiBwcm9wZXJ0eSBjaGFuZ2UgZGlm
Zi4KKyAgICAgICAgICAtIFJlbW92ZWQgRklYTUUgY29tbWVudCBhYm92ZSBmdW5jdGlvbiBwYXJz
ZVN2bkRpZmZQcm9wZXJ0aWVzIHNpbmNlCisgICAgICAgICAgICB0aGlzIGZ1bmN0aW9uIGlzIG5v
dyBiZWluZyB1c2VkIGJ5IHBhcnNlRGlmZi4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHBlcmwv
VkNTVXRpbHNfdW5pdHRlc3QvcGFyc2VEaWZmLnBsOgorICAgICAgICAgIC0gVXBkYXRlZCByZXN1
bHRzIGZvcjoKKyAgICAgICAgICAgICJyZW5hbWUgKHdpdGggZXhlY3V0YWJsZSBiaXQgY2hhbmdl
KSIKKyAgICAgICAgICAgICJTVk46IGJpbmFyeSBmaWxlIChpc0JpbmFyeSB0cnVlKSIKKyAgICAg
ICAgICAtIEFkZGVkIHVuaXQgdGVzdHM6CisgICAgICAgICAgICAiU1ZOOiBmaWxlIGNoYW5nZSBk
aWZmIHdpdGggcHJvcGVydHkgY2hhbmdlIGRpZmYiCisgICAgICAgICAgICAiU1ZOOiBmaWxlIGNo
YW5nZSBkaWZmLCBmb2xsb3dlZCBieSBwcm9wZXJ0eSBjaGFuZ2UgZGlmZiBvbiBkaWZmZXJlbnQg
ZmlsZSIKKyAgICAgICAgICAgICJTVk46IHByb3BlcnR5IGRpZmYsIGZvbGxvd2VkIGJ5IGZpbGUg
Y2hhbmdlIGRpZmYiCisgICAgICAgICAgICAiU1ZOOiBjb3BpZWQgZmlsZSB3aXRoIHByb3BlcnR5
IGNoYW5nZSIKKyAgICAgICAgICAgICJTVk46IHR3byBjb25zZWN1dGl2ZSBwcm9wZXJ0eSBkaWZm
cyIKKyAgICAgICAgICAgICJTVk46IGJpbmFyeSBmaWxlIHdpdGggZXhlY3V0YWJsZSBiaXQgY2hh
bmdlIgorICAgICAgICAgICAgIlNWTjogYmluYXJ5IGZpbGUgZm9sbG93ZWQgYnkgcHJvcGVydHkg
Y2hhbmdlIG9uIGRpZmZlcmVudCBmaWxlIgorICAgICAgICAgICAgIlNWTjogYmluYXJ5IGZpbGUg
Zm9sbG93ZWQgYnkgZmlsZSBjaGFuZ2Ugb24gZGlmZmVyZW50IGZpbGUiCisgICAgICAgICAgICAi
U1ZOOiBmaWxlIGNoYW5nZSBkaWZmIHdpdGggcHJvcGVydHkgY2hhbmdlLCBmb2xsb3dlZCBieSBw
cm9wZXJ0eSBjaGFuZ2UgZGlmZiIKKyAgICAgICAgICAgICJTVk46IGZpbGUgY2hhbmdlIGRpZmYg
d2l0aCBwcm9wZXJ0eSBjaGFuZ2UsIGZvbGxvd2VkIGJ5IGZpbGUgY2hhbmdlIGRpZmYiCisKIDIw
MTAtMDUtMjMgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhbmllbCBCYXRlcy4KSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHMu
cG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGlscy5wbQkocmV2aXNp
b24gNjAwMjEpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzLnBtCSh3b3JraW5nIGNv
cHkpCkBAIC05MCw2ICs5MCw3IEBAIG15ICRjaGFuZ2VMb2dUaW1lWm9uZSA9ICJQU1Q4UERUIjsK
IAogbXkgJGdpdERpZmZTdGFydFJlZ0V4ID0gcXIjXmRpZmYgLS1naXQgKFx3Lyk/KC4rKSAoXHcv
KT8oW15cclxuXSspIzsKIG15ICRzdm5EaWZmU3RhcnRSZWdFeCA9IHFyI15JbmRleDogKFteXHJc
bl0rKSM7CitteSAkc3ZuRGlmZlByb3BlcnRpZXNTdGFydFJlZ0V4ID0gcXIjUHJvcGVydHkgY2hh
bmdlcyBvbjogKFteXHJcbl0rKSM7ICMgJDEgaXMgbm9ybWFsbHkgdGhlIHNhbWUgYXMgdGhlIGlu
ZGV4IHBhdGguCiBteSAkc3ZuUHJvcGVydHlTdGFydFJlZ0V4ID0gcXIjXihNb2RpZmllZHxOYW1l
fEFkZGVkfERlbGV0ZWQpOiAoW15cclxuXSspIzsgIyAkMiBpcyB0aGUgbmFtZSBvZiB0aGUgcHJv
cGVydHkuCiBteSAkc3ZuUHJvcGVydHlWYWx1ZVN0YXJ0UmVnRXggPSBxciNeICAgKFwrfC0pIChb
XlxyXG5dKykjOyAjICQyIGlzIHRoZSBzdGFydCBvZiB0aGUgcHJvcGVydHkncyB2YWx1ZSAod2hp
Y2ggbWF5IHNwYW4gbXVsdGlwbGUgbGluZXMpLgogCkBAIC03MzUsNiArNzM2LDggQEAgc3ViIHBh
cnNlRGlmZkhlYWRlcigkJCkKICMKICMgICBjb3BpZWRGcm9tUGF0aDogdGhlIHBhdGggZnJvbSB3
aGljaCB0aGUgZmlsZSB3YXMgY29waWVkIGlmIHRoZSBkaWZmCiAjICAgICAgICAgICAgICAgICAg
IGlzIGEgY29weS4KKyMgICBleGVjdXRhYmxlQml0RGVsdGE6IHRoZSB2YWx1ZSAxIG9yIC0xIGlm
IHRoZSBleGVjdXRhYmxlIGJpdCB3YXMgYWRkZWQgb3IKKyMgICAgICAgICAgICAgICAgICAgICAg
IHJlbW92ZWQgZnJvbSB0aGUgdGFyZ2V0IGZpbGUsIHJlc3BlY3RpdmVseS4KICMgICBpbmRleFBh
dGg6IHRoZSBwYXRoIG9mIHRoZSB0YXJnZXQgZmlsZS4gIEZvciBTVk4tZm9ybWF0dGVkIGRpZmZz
LAogIyAgICAgICAgICAgICAgdGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgcGF0aCBpbiB0aGUgIklu
ZGV4OiIgbGluZS4KICMgICBpc0JpbmFyeTogdGhlIHZhbHVlIDEgaWYgdGhlIGRpZmYgaXMgZm9y
IGEgYmluYXJ5IGZpbGUuCkBAIC03NzMsNiArNzc2LDcgQEAgc3ViIHBhcnNlRGlmZigkJCkKICAg
ICBteSAkaGVhZGVyU3RhcnRSZWdFeCA9ICRzdm5EaWZmU3RhcnRSZWdFeDsgIyBTVk4tc3R5bGUg
aGVhZGVyIGZvciB0aGUgZGVmYXVsdAogCiAgICAgbXkgJGhlYWRlckhhc2hSZWY7ICMgTGFzdCBo
ZWFkZXIgZm91bmQsIGFzIHJldHVybmVkIGJ5IHBhcnNlRGlmZkhlYWRlcigpLgorICAgIG15ICRw
cm9wZXJ0eUhhc2hSZWY7ICMgTGFzdCBTVk4gcHJvcGVydGllcyBkaWZmIGZvdW5kLCBhcyByZXR1
cm5lZCBieSBwYXJzZVN2bkRpZmZQcm9wZXJ0aWVzKCkuCiAgICAgbXkgJHN2blRleHQ7CiAgICAg
d2hpbGUgKGRlZmluZWQoJGxpbmUpKSB7CiAgICAgICAgIGlmICghJGhlYWRlckhhc2hSZWYgJiYg
KCRsaW5lID1+ICRnaXREaWZmU3RhcnRSZWdFeCkpIHsKQEAgLTc4Miw2ICs3ODYsMjIgQEAgc3Vi
IHBhcnNlRGlmZigkJCkKICAgICAgICAgICAgICRoZWFkZXJTdGFydFJlZ0V4ID0gJGdpdERpZmZT
dGFydFJlZ0V4OwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKCRsaW5lID1+ICRzdm5EaWZmUHJv
cGVydGllc1N0YXJ0UmVnRXgpIHsKKyAgICAgICAgICAgIGlmICgkcHJvcGVydHlIYXNoUmVmKSB7
CisgICAgICAgICAgICAgICAgIyBUaGlzIGlzIHRoZSBzdGFydCBvZiB0aGUgc2Vjb25kIGNvbnNl
Y3V0aXZlIHByb3BlcnR5IGRpZmYgb2YKKyAgICAgICAgICAgICAgICAjIHRoaXMgd2hpbGUgbG9v
cCAoaS5lLiB3ZSBqdXN0IHByb2Nlc3NlZCBhIHByb3BlcnR5IGRpZmYgYW5kCisgICAgICAgICAg
ICAgICAgIyBqdXN0IGVuY291bnRlcmVkIHRoZSBzdGFydCBvZiBhbm90aGVyIHByb3BlcnR5IGRp
ZmYpLgorICAgICAgICAgICAgICAgIGxhc3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoJGhlYWRlckhhc2hSZWYgJiYgKCQxIG5lICRoZWFkZXJIYXNoUmVmLT57aW5kZXhQYXRofSkp
IHsKKyAgICAgICAgICAgICAgICAjIFRoaXMgaXMgdGhlIHN0YXJ0IG9mIHRoZSBzZWNvbmQgZGlm
ZiBvZiB0aGlzIHdoaWxlIGxvb3AuCisgICAgICAgICAgICAgICAgIyBJbiBwYXJ0aWN1bGFyLCB0
aGlzIGlzIHRoZSBzdGFydCBvZiBhIHByb3BlcnR5IGRpZmYgZm9yCisgICAgICAgICAgICAgICAg
IyBhIGZpbGUgdGhhdCBvbmx5IGhhcyBwcm9wZXJ0eSBjaGFuZ2VzLgorICAgICAgICAgICAgICAg
IGxhc3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAoJHByb3BlcnR5SGFzaFJlZiwgJGxp
bmUpID0gcGFyc2VTdm5EaWZmUHJvcGVydGllcygkZmlsZUhhbmRsZSwgJGxpbmUpOworICAgICAg
ICAgICAgbmV4dDsKKyAgICAgICAgfQogICAgICAgICBpZiAoJGxpbmUgIX4gJGhlYWRlclN0YXJ0
UmVnRXgpIHsKICAgICAgICAgICAgICMgVGhlbiB3ZSBhcmUgaW4gdGhlIGJvZHkgb2YgdGhlIGRp
ZmYuCiAgICAgICAgICAgICAkc3ZuVGV4dCAuPSAkbGluZTsKQEAgLTc4OSw4ICs4MDksOSBAQCBz
dWIgcGFyc2VEaWZmKCQkKQogICAgICAgICAgICAgbmV4dDsKICAgICAgICAgfSAjIE90aGVyd2lz
ZSwgd2UgZm91bmQgYSBkaWZmIGhlYWRlci4KIAotICAgICAgICBpZiAoJGhlYWRlckhhc2hSZWYp
IHsKLSAgICAgICAgICAgICMgVGhlbiB0aGlzIGlzIHRoZSBzZWNvbmQgZGlmZiBoZWFkZXIgb2Yg
dGhpcyB3aGlsZSBsb29wLgorICAgICAgICBpZiAoJHByb3BlcnR5SGFzaFJlZiB8fCAkaGVhZGVy
SGFzaFJlZikgeworICAgICAgICAgICAgIyBUaGVuIGVpdGhlciB3ZSBqdXN0IHByb2Nlc3NlZCBh
biBTVk4gcHJvcGVydHkgY2hhbmdlIG9yIHRoaXMKKyAgICAgICAgICAgICMgaXMgdGhlIHN0YXJ0
IG9mIHRoZSBzZWNvbmQgZGlmZiBoZWFkZXIgb2YgdGhpcyB3aGlsZSBsb29wLgogICAgICAgICAg
ICAgbGFzdDsKICAgICAgICAgfQogCkBAIC04MTIsMTIgKzgzMywzMCBAQCBzdWIgcGFyc2VEaWZm
KCQkKQogICAgICAgICAkY29weUhhc2h7Y29waWVkRnJvbVBhdGh9ID0gJGhlYWRlckhhc2hSZWYt
Pntjb3BpZWRGcm9tUGF0aH07CiAgICAgICAgICRjb3B5SGFzaHtpbmRleFBhdGh9ID0gJGhlYWRl
ckhhc2hSZWYtPntpbmRleFBhdGh9OwogICAgICAgICAkY29weUhhc2h7c291cmNlUmV2aXNpb259
ID0gJGhlYWRlckhhc2hSZWYtPntzb3VyY2VSZXZpc2lvbn0gaWYgJGhlYWRlckhhc2hSZWYtPntz
b3VyY2VSZXZpc2lvbn07CisgICAgICAgIGlmICgkaGVhZGVySGFzaFJlZi0+e2lzU3ZufSkgewor
ICAgICAgICAgICAgIyBTVk4gcmVwcmVzZW50cyBhIGNvcHkgb2YgYSBmaWxlIHdpdGggYW4gZXhl
Y3V0YWJsZSBiaXQgYXMgdHdvIGRpc3RpbmN0IGRpZmZzOiB0aGUgYWN0dWFsIGNvcHksIGFuZCBz
ZXR0aW5nIHRoZSBleGVjdXRhYmxlIGJpdC4KKyAgICAgICAgICAgICRjb3B5SGFzaHtleGVjdXRh
YmxlQml0RGVsdGF9ID0gJHByb3BlcnR5SGFzaFJlZi0+e2V4ZWN1dGFibGVCaXREZWx0YX0gaWYg
JHByb3BlcnR5SGFzaFJlZi0+e2V4ZWN1dGFibGVCaXREZWx0YX07CisgICAgICAgIH0KICAgICAg
ICAgcHVzaCBAZGlmZkhhc2hSZWZzLCBcJWNvcHlIYXNoOwogICAgIH0KLSAgICBpZiAoISRoZWFk
ZXJIYXNoUmVmLT57Y29waWVkRnJvbVBhdGh9IHx8ICRoZWFkZXJIYXNoUmVmLT57aXNDb3B5V2l0
aENoYW5nZXN9KSB7CisKKyAgICAjIE5vdGUsIHRoZSBvcmRlciBvZiBldmFsdWF0aW9uIGZvciB0
aGUgZm9sbG93aW5nIGlmIGNvbmRpdGlvbmFsIGhhcyBiZWVuIGV4cGxpY2l0bHkgY2hvc2VuIHNv
IHRoYXQKKyAgICAjIGl0IGV2YWx1YXRlcyB0byBmYWxzZSB3aGVuIHRoZXJlIGlzIG5vIGhlYWRl
ckhhc2hSZWYgKGUuZy4gYSBwcm9wZXJ0eSBjaGFuZ2UgZGlmZiBmb3IgYSBmaWxlIHRoYXQKKyAg
ICAjIG9ubHkgaGFzIHByb3BlcnR5IGNoYW5nZXMpLgorICAgIGlmICgkaGVhZGVySGFzaFJlZi0+
e2lzQ29weVdpdGhDaGFuZ2VzfSB8fCAoJSRoZWFkZXJIYXNoUmVmICYmICEkaGVhZGVySGFzaFJl
Zi0+e2NvcGllZEZyb21QYXRofSkpIHsKICAgICAgICAgIyBUaGVuIGFkZCB0aGUgdXN1YWwgZmls
ZSBtb2RpZmljYXRpb24uCiAgICAgICAgIG15ICVkaWZmSGFzaDsKLSAgICAgICAgIyBGSVhNRTog
QWRkIGV4ZWN1dGFibGVCaXREZWx0YSBhcyBhIGtleS4KKyAgICAgICAgIyBGSVhNRTogV2Ugc2hv
dWxkIGV4cGFuZCB0aGlzIGNvZGUgdG8gc3VwcG9ydCBvdGhlciBwcm9wZXJ0aWVzLiAgSW4gdGhl
IGZ1dHVyZSwKKyAgICAgICAgIyAgICAgICAgcGFyc2VTdm5EaWZmUHJvcGVydGllcyBtYXkgcmV0
dXJuIGEgaGFzaCB3aG9zZSBrZXlzIGFyZSB0aGUgcHJvcGVydGllcy4KKyAgICAgICAgaWYgKCRo
ZWFkZXJIYXNoUmVmLT57aXNTdm59KSB7CisgICAgICAgICAgICAjIFNWTiByZWNvcmRzIHRoZSBj
aGFuZ2UgdG8gdGhlIGV4ZWN1dGFibGUgYml0IGluIGEgc2VwYXJhdGUgcHJvcGVydHkgY2hhbmdl
IGRpZmYKKyAgICAgICAgICAgICMgdGhhdCBmb2xsb3dzIHRoZSBjb250ZW50cyBvZiB0aGUgZGlm
ZiwgZXhjZXB0IGZvciBiaW5hcnkgZGlmZnMuICBGb3IgYmluYXJ5CisgICAgICAgICAgICAjIGRp
ZmZzLCB0aGUgcHJvcGVydHkgY2hhbmdlIGRpZmYgZm9sbG93cyB0aGUgZGlmZiBoZWFkZXIuCisg
ICAgICAgICAgICAkZGlmZkhhc2h7ZXhlY3V0YWJsZUJpdERlbHRhfSA9ICRwcm9wZXJ0eUhhc2hS
ZWYtPntleGVjdXRhYmxlQml0RGVsdGF9IGlmICRwcm9wZXJ0eUhhc2hSZWYtPntleGVjdXRhYmxl
Qml0RGVsdGF9OworICAgICAgICB9IGVsc2lmICgkaGVhZGVySGFzaFJlZi0+e2lzR2l0fSkgewor
ICAgICAgICAgICAgIyBHaXQgcmVjb3JkcyB0aGUgY2hhbmdlIHRvIHRoZSBleGVjdXRhYmxlIGJp
dCBpbiB0aGUgaGVhZGVyIG9mIGEgZGlmZi4KKyAgICAgICAgICAgICRkaWZmSGFzaHtleGVjdXRh
YmxlQml0RGVsdGF9ID0gJGhlYWRlckhhc2hSZWYtPntleGVjdXRhYmxlQml0RGVsdGF9IGlmICRo
ZWFkZXJIYXNoUmVmLT57ZXhlY3V0YWJsZUJpdERlbHRhfTsKKyAgICAgICAgfQogICAgICAgICAk
ZGlmZkhhc2h7aW5kZXhQYXRofSA9ICRoZWFkZXJIYXNoUmVmLT57aW5kZXhQYXRofTsKICAgICAg
ICAgJGRpZmZIYXNoe2lzQmluYXJ5fSA9ICRoZWFkZXJIYXNoUmVmLT57aXNCaW5hcnl9IGlmICRo
ZWFkZXJIYXNoUmVmLT57aXNCaW5hcnl9OwogICAgICAgICAkZGlmZkhhc2h7aXNEZWxldGlvbn0g
PSAkaGVhZGVySGFzaFJlZi0+e2lzRGVsZXRpb259IGlmICRoZWFkZXJIYXNoUmVmLT57aXNEZWxl
dGlvbn07CkBAIC04MzEsMTAgKzg3MCwyNCBAQCBzdWIgcGFyc2VEaWZmKCQkKQogICAgICAgICB9
CiAgICAgICAgICMgRklYTUU6IFJlbW92ZSB0aGUgbmVlZCBmb3Igc3ZuQ29udmVydGVkVGV4dC4g
IFNlZSB0aGUgJWRpZmZIYXNoCiAgICAgICAgICMgICAgICAgIGNvZGUgY29tbWVudHMgYWJvdmUg
Zm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAgICAgICRkaWZmSGFzaHtzdm5Db252ZXJ0ZWRUZXh0
fSA9ICRzdm5UZXh0OworICAgICAgICAjCisgICAgICAgICMgTm90ZSwgd2UgbWF5IG5vdCBhbHdh
eXMgaGF2ZSBTVk4gY29udmVydGVkIHRleHQgc2luY2Ugd2UgaW50ZW5kCisgICAgICAgICMgdG8g
ZGVwcmVjYXRlIGl0IGluIHRoZSBmdXR1cmUuICBGb3IgZXhhbXBsZSwgYSBwcm9wZXJ0eSBjaGFu
Z2UKKyAgICAgICAgIyBkaWZmIGZvciBhIGZpbGUgdGhhdCBvbmx5IGhhcyBwcm9wZXJ0eSBjaGFu
Z2VzIHdpbGwgbm90IHJldHVybgorICAgICAgICAjIGFueSBTVk4gY29udmVydGVkIHRleHQuCisg
ICAgICAgICRkaWZmSGFzaHtzdm5Db252ZXJ0ZWRUZXh0fSA9ICRzdm5UZXh0IGlmICRzdm5UZXh0
OwogICAgICAgICBwdXNoIEBkaWZmSGFzaFJlZnMsIFwlZGlmZkhhc2g7CiAgICAgfQogCisgICAg
aWYgKCElJGhlYWRlckhhc2hSZWYgJiYgJHByb3BlcnR5SGFzaFJlZikgeworICAgICAgICAjIEEg
cHJvcGVydHkgY2hhbmdlIGRpZmYgZm9yIGEgZmlsZSB0aGF0IG9ubHkgaGFzIHByb3BlcnR5IGNo
YW5nZXMuCisgICAgICAgIG15ICVwcm9wZXJ0eUNoYW5nZUhhc2g7CisgICAgICAgICRwcm9wZXJ0
eUNoYW5nZUhhc2h7ZXhlY3V0YWJsZUJpdERlbHRhfSA9ICRwcm9wZXJ0eUhhc2hSZWYtPntleGVj
dXRhYmxlQml0RGVsdGF9IGlmICRwcm9wZXJ0eUhhc2hSZWYtPntleGVjdXRhYmxlQml0RGVsdGF9
OworICAgICAgICAkcHJvcGVydHlDaGFuZ2VIYXNoe2luZGV4UGF0aH0gPSAkcHJvcGVydHlIYXNo
UmVmLT57cHJvcGVydHlQYXRofTsKKyAgICAgICAgJHByb3BlcnR5Q2hhbmdlSGFzaHtpc1N2bn0g
PSAxOworICAgICAgICBwdXNoIEBkaWZmSGFzaFJlZnMsIFwlcHJvcGVydHlDaGFuZ2VIYXNoOwor
ICAgIH0KKwogICAgIHJldHVybiAoXEBkaWZmSGFzaFJlZnMsICRsaW5lKTsKIH0KIApAQCAtODU5
LDE5ICs5MTIsMTQgQEAgc3ViIHBhcnNlRGlmZigkJCkKICMgICAgIGV4ZWN1dGFibGVCaXREZWx0
YTogdGhlIHZhbHVlIDEgb3IgLTEgaWYgdGhlIGV4ZWN1dGFibGUgYml0IHdhcyBhZGRlZCBvcgog
IyAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkIGZyb20gdGhlIHRhcmdldCBmaWxlLCBy
ZXNwZWN0aXZlbHkuCiAjICAgJGxhc3RSZWFkTGluZTogdGhlIGxpbmUgbGFzdCByZWFkIGZyb20g
JGZpbGVIYW5kbGUuCi0jCi0jIEZJWE1FOiBUaGlzIG1ldGhvZCBpcyB1bnVzZWQgYXMgb2YgKDA1
LzIyLzIwMTApLiAgV2Ugd2lsbCBjYWxsIHRoaXMgZnVuY3Rpb24KLSMgICAgICAgIGFzIHBhcnQg
b2YgcGFyc2luZyBhIGRpZmYuICBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zOTQwOT4uCiBzdWIgcGFyc2VTdm5EaWZmUHJvcGVydGllcygkJCkKIHsKICAgICBt
eSAoJGZpbGVIYW5kbGUsICRsaW5lKSA9IEBfOwogCiAgICAgJF8gPSAkbGluZTsKIAotICAgIG15
ICRzdm5Gb290ZXJEaWZmU3RhcnRSZWdFeCA9IHFyI1Byb3BlcnR5IGNoYW5nZXMgb246IChbXlxy
XG5dKykjOyAjICQxIGlzIG5vcm1hbGx5IHRoZSBzYW1lIGFzIHRoZSBpbmRleCBwYXRoLgotCiAg
ICAgbXkgJWZvb3RlcjsKLSAgICBpZiAoLyRzdm5Gb290ZXJEaWZmU3RhcnRSZWdFeC8pIHsKKyAg
ICBpZiAoLyRzdm5EaWZmUHJvcGVydGllc1N0YXJ0UmVnRXgvKSB7CiAgICAgICAgICRmb290ZXJ7
cHJvcGVydHlQYXRofSA9ICQxOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGRpZSgiRmFpbGVkIHRv
IGZpbmQgc3RhcnQgb2YgU1ZOIHByb3BlcnR5IGNoYW5nZSwgXCJQcm9wZXJ0eSBjaGFuZ2VzIG9u
IFwiOiBcIiRfXCIiKTsKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9WQ1NV
dGlsc191bml0dGVzdC9wYXJzZURpZmYucGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRwZXJsL1ZDU1V0aWxzX3VuaXR0ZXN0L3BhcnNlRGlmZi5wbAkocmV2aXNpb24g
NjAwMjEpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvVkNTVXRpbHNfdW5pdHRl
c3QvcGFyc2VEaWZmLnBsCSh3b3JraW5nIGNvcHkpCkBAIC05MSwxMCArOTEsNiBAQCBJbmRleDog
dGVzdF9maWxlLnN3ZgogQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5
cGUuCiBzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCiAKLVByb3BlcnR5
IGNoYW5nZXMgb246IHRlc3RfZmlsZS5zd2YKLV9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KLU5hbWU6IHN2bjptaW1lLXR5
cGUKLSAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCiAKIAogUTFkVEJ4MEFBQUI0Mml0ZzRH
bGdZSmpHd01ERHlPRE14TUR3MzRHQmdRRUFKUFFESkE9PQpAQCAtMjM2LDYgKzIzMiw0MDEgQEAg
dW5kZWZdLAogICAgIGV4cGVjdGVkTmV4dExpbmUgPT4gdW5kZWYsCiB9LAogIyMjIworIyBQcm9w
ZXJ0eSBDaGFuZ2VzOiBTaW1wbGUKKyMjCit7CisgICAgIyBOZXcgdGVzdAorICAgIGRpZmZOYW1l
ID0+ICJTVk46IGZpbGUgY2hhbmdlIGRpZmYgd2l0aCBwcm9wZXJ0eSBjaGFuZ2UgZGlmZiIsCisg
ICAgaW5wdXRUZXh0ID0+IDw8J0VORCcsCitJbmRleDogTWFrZWZpbGUKKz09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0t
LSBNYWtlZmlsZQkocmV2aXNpb24gNjAwMjEpCisrKysgTWFrZWZpbGUJKHdvcmtpbmcgY29weSkK
K0BAIC0xLDMgKzEsNCBAQAorKworIE1PRFVMRVMgPSBKYXZhU2NyaXB0Q29yZSBKYXZhU2NyaXB0
R2x1ZSBXZWJDb3JlIFdlYktpdCBXZWJLaXQyIFdlYktpdFRvb2xzIAorCisgYWxsOgorCitQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBNYWtlZmlsZQorX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworTmFtZTogc3ZuOmV4ZWN1dGFi
bGUKKyAgICsgKgorRU5ECisgICAgZXhwZWN0ZWRSZXR1cm4gPT4gWworW3sKKyAgICBzdm5Db252
ZXJ0ZWRUZXh0ID0+ICA8PCdFTkQnLCAjIFNhbWUgYXMgaW5wdXQgdGV4dAorSW5kZXg6IE1ha2Vm
aWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CistLS0gTWFrZWZpbGUJKHJldmlzaW9uIDYwMDIxKQorKysrIE1ha2Vm
aWxlCSh3b3JraW5nIGNvcHkpCitAQCAtMSwzICsxLDQgQEAKKysKKyBNT0RVTEVTID0gSmF2YVNj
cmlwdENvcmUgSmF2YVNjcmlwdEdsdWUgV2ViQ29yZSBXZWJLaXQgV2ViS2l0MiBXZWJLaXRUb29s
cyAKKworIGFsbDoKKworRU5ECisgICAgZXhlY3V0YWJsZUJpdERlbHRhID0+IDEsCisgICAgaW5k
ZXhQYXRoID0+ICJNYWtlZmlsZSIsCisgICAgaXNTdm4gPT4gMSwKKyAgICBzb3VyY2VSZXZpc2lv
biA9PiAiNjAwMjEiLAorfV0sCit1bmRlZl0sCisgICAgZXhwZWN0ZWROZXh0TGluZSA9PiB1bmRl
ZiwKK30sCit7CisgICAgIyBOZXcgdGVzdAorICAgIGRpZmZOYW1lID0+ICJTVk46IGZpbGUgY2hh
bmdlIGRpZmYsIGZvbGxvd2VkIGJ5IHByb3BlcnR5IGNoYW5nZSBkaWZmIG9uIGRpZmZlcmVudCBm
aWxlIiwKKyAgICBpbnB1dFRleHQgPT4gPDwnRU5EJywKK0luZGV4OiBNYWtlZmlsZQorPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQorLS0tIE1ha2VmaWxlCShyZXZpc2lvbiA2MDAyMSkKKysrKyBNYWtlZmlsZQkod29ya2lu
ZyBjb3B5KQorQEAgLTEsMyArMSw0IEBACisrCisgTU9EVUxFUyA9IEphdmFTY3JpcHRDb3JlIEph
dmFTY3JpcHRHbHVlIFdlYkNvcmUgV2ViS2l0IFdlYktpdDIgV2ViS2l0VG9vbHMgCisKKyBhbGw6
CisKK1Byb3BlcnR5IGNoYW5nZXMgb246IE1ha2VmaWxlLnNoYXJlZAorX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworTmFt
ZTogc3ZuOmV4ZWN1dGFibGUKKyAgICsgKgorRU5ECisgICAgZXhwZWN0ZWRSZXR1cm4gPT4gWwor
W3sKKyAgICBzdm5Db252ZXJ0ZWRUZXh0ID0+ICA8PCdFTkQnLCAjIFNhbWUgYXMgaW5wdXQgdGV4
dAorSW5kZXg6IE1ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gTWFrZWZpbGUJKHJldmlzaW9uIDYw
MDIxKQorKysrIE1ha2VmaWxlCSh3b3JraW5nIGNvcHkpCitAQCAtMSwzICsxLDQgQEAKKysKKyBN
T0RVTEVTID0gSmF2YVNjcmlwdENvcmUgSmF2YVNjcmlwdEdsdWUgV2ViQ29yZSBXZWJLaXQgV2Vi
S2l0MiBXZWJLaXRUb29scyAKKworIGFsbDoKKworRU5ECisgICAgaW5kZXhQYXRoID0+ICJNYWtl
ZmlsZSIsCisgICAgaXNTdm4gPT4gMSwKKyAgICBzb3VyY2VSZXZpc2lvbiA9PiAiNjAwMjEiLAor
fV0sCisiUHJvcGVydHkgY2hhbmdlcyBvbjogTWFrZWZpbGUuc2hhcmVkXG4iXSwKKyAgICBleHBl
Y3RlZE5leHRMaW5lID0+ICJfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXG4iLAorfSwKK3sKKyAgICAjIE5ldyB0ZXN0Cisg
ICAgZGlmZk5hbWUgPT4gIlNWTjogcHJvcGVydHkgZGlmZiwgZm9sbG93ZWQgYnkgZmlsZSBjaGFu
Z2UgZGlmZiIsCisgICAgaW5wdXRUZXh0ID0+IDw8J0VORCcsCitQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBNYWtlZmlsZQorX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXworRGVsZXRlZDogc3ZuOmV4ZWN1dGFibGUKKyAgIC0gKgor
CitJbmRleDogTWFrZWZpbGUuc2hhcmVkCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gTWFrZWZpbGUuc2hhcmVk
CShyZXZpc2lvbiA2MDAyMSkKKysrKyBNYWtlZmlsZS5zaGFyZWQJKHdvcmtpbmcgY29weSkKK0BA
IC0xLDMgKzEsNCBAQAorKworU0NSSVBUU19QQVRIID89IC4uL1dlYktpdFRvb2xzL1NjcmlwdHMK
K1hDT0RFX09QVElPTlMgPSBgcGVybCAtSSQoU0NSSVBUU19QQVRIKSAtTXdlYmtpdGRpcnMgLWUg
J3ByaW50IFhjb2RlT3B0aW9uU3RyaW5nKCknYCAkKEFSR1MpCitFTkQKKyAgICBleHBlY3RlZFJl
dHVybiA9PiBbCitbeworICAgIGV4ZWN1dGFibGVCaXREZWx0YSA9PiAtMSwKKyAgICBpbmRleFBh
dGggPT4gIk1ha2VmaWxlIiwKKyAgICBpc1N2biA9PiAxLAorfV0sCisiSW5kZXg6IE1ha2VmaWxl
LnNoYXJlZFxuIl0sCisgICAgZXhwZWN0ZWROZXh0TGluZSA9PiAiPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIiwKK30s
Cit7CisgICAgIyBOZXcgdGVzdAorICAgIGRpZmZOYW1lID0+ICJTVk46IGNvcGllZCBmaWxlIHdp
dGggcHJvcGVydHkgY2hhbmdlIiwKKyAgICBpbnB1dFRleHQgPT4gPDwnRU5EJywKK0luZGV4OiBO
TWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KKy0tLSBOTWFrZWZpbGUJKHJldmlzaW9uIDYwMDIxKQkoZnJv
bSBNYWtlZmlsZTo2MDAyMSkKKysrKyBOTWFrZWZpbGUJKHdvcmtpbmcgY29weSkKK0BAIC0wLDAg
KzEsMTcgQEAKKytNT0RVTEVTID0gSmF2YVNjcmlwdENvcmUgSmF2YVNjcmlwdEdsdWUgV2ViQ29y
ZSBXZWJLaXQgV2ViS2l0MiBXZWJLaXRUb29scyAKKworUHJvcGVydHkgY2hhbmdlcyBvbjogTk1h
a2VmaWxlCitfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCitBZGRlZDogc3ZuOmV4ZWN1dGFibGUKKyAgICsgKgorRU5ECisg
ICAgZXhwZWN0ZWRSZXR1cm4gPT4gWworW3sKKyAgICBjb3BpZWRGcm9tUGF0aCA9PiAiTWFrZWZp
bGUiLAorICAgIGV4ZWN1dGFibGVCaXREZWx0YSA9PiAxLAorICAgIGluZGV4UGF0aCA9PiAiTk1h
a2VmaWxlIiwKKyAgICBzb3VyY2VSZXZpc2lvbiA9PiAiNjAwMjEiLAorfV0sCit1bmRlZl0sCisg
ICAgZXhwZWN0ZWROZXh0TGluZSA9PiB1bmRlZiwKK30sCit7CisgICAgIyBOZXcgdGVzdAorICAg
IGRpZmZOYW1lID0+ICJTVk46IHR3byBjb25zZWN1dGl2ZSBwcm9wZXJ0eSBkaWZmcyIsCisgICAg
aW5wdXRUZXh0ID0+IDw8J0VORCcsCitQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBNYWtlZmlsZQorX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXworQWRkZWQ6IHN2bjpleGVjdXRhYmxlCisgICArICoKKworCitQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBNYWtlZmlsZS5zaGFyZWQKK19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KK0FkZGVkOiBzdm46ZXhlY3V0YWJs
ZQorICAgKyAqCitFTkQKKyAgICBleHBlY3RlZFJldHVybiA9PiBbCitbeworICAgIGV4ZWN1dGFi
bGVCaXREZWx0YSA9PiAxLAorICAgIGluZGV4UGF0aCA9PiAiTWFrZWZpbGUiLAorICAgIGlzU3Zu
ID0+IDEsCit9XSwKKyJQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBNYWtlZmlsZS5zaGFyZWRcbiJdLAor
ICAgIGV4cGVjdGVkTmV4dExpbmUgPT4gIl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19cbiIsCit9LAorIyMjIworIyBQcm9w
ZXJ0eSBDaGFuZ2VzOiBCaW5hcnkgZmlsZXMKKyMjCit7CisgICAgIyBOZXcgdGVzdAorICAgIGRp
ZmZOYW1lID0+ICJTVk46IGJpbmFyeSBmaWxlIHdpdGggZXhlY3V0YWJsZSBiaXQgY2hhbmdlIiwK
KyAgICBpbnB1dFRleHQgPT4gPDwnRU5EJywKK0luZGV4OiB0ZXN0X2ZpbGUuc3dmCis9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CitDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4KK3N2bjpt
aW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KKworUHJvcGVydHkgY2hhbmdlcyBv
bjogdGVzdF9maWxlLnN3ZgorX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXworTmFtZTogc3ZuOm1pbWUtdHlwZQorICAgKyBh
cHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KK05hbWU6IHN2bjpleGVjdXRhYmxlCisgICArICoKKwor
CitRMWRUQngwQUFBQjQyaXRnNEdsZ1lKakd3TUREeU9ETXhNRHczNEdCZ1FFQUpQUURKQT09CitF
TkQKKyAgICBleHBlY3RlZFJldHVybiA9PiBbCitbeworICAgIHN2bkNvbnZlcnRlZFRleHQgPT4g
IDw8J0VORCcsICMgU2FtZSBhcyBpbnB1dCB0ZXh0CitJbmRleDogdGVzdF9maWxlLnN3ZgorPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQorQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCitz
dm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCisKKworCitRMWRUQngwQUFB
QjQyaXRnNEdsZ1lKakd3TUREeU9ETXhNRHczNEdCZ1FFQUpQUURKQT09CitFTkQKKyAgICBleGVj
dXRhYmxlQml0RGVsdGEgPT4gMSwKKyAgICBpbmRleFBhdGggPT4gInRlc3RfZmlsZS5zd2YiLAor
ICAgIGlzQmluYXJ5ID0+IDEsCisgICAgaXNTdm4gPT4gMSwKK31dLAordW5kZWZdLAorICAgIGV4
cGVjdGVkTmV4dExpbmUgPT4gdW5kZWYsCit9LAoreworICAgICMgTmV3IHRlc3QKKyAgICBkaWZm
TmFtZSA9PiAiU1ZOOiBiaW5hcnkgZmlsZSBmb2xsb3dlZCBieSBwcm9wZXJ0eSBjaGFuZ2Ugb24g
ZGlmZmVyZW50IGZpbGUiLAorICAgIGlucHV0VGV4dCA9PiA8PCdFTkQnLAorSW5kZXg6IHRlc3Rf
ZmlsZS5zd2YKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KK0Nhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJp
bmFyeSB0eXBlLgorc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQorCitQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiB0ZXN0X2ZpbGUuc3dmCitfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCitOYW1lOiBzdm46
bWltZS10eXBlCisgICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQorCisKK1ExZFRCeDBBQUFC
NDJpdGc0R2xnWUpqR3dNRER5T0RNeE1EdzM0R0JnUUVBSlBRREpBPT0KKworUHJvcGVydHkgY2hh
bmdlcyBvbjogTWFrZWZpbGUKK19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KK0FkZGVkOiBzdm46ZXhlY3V0YWJsZQorICAg
KyAqCitFTkQKKyAgICBleHBlY3RlZFJldHVybiA9PiBbCitbeworICAgIHN2bkNvbnZlcnRlZFRl
eHQgPT4gIDw8J0VORCcsICMgU2FtZSBhcyBpbnB1dCB0ZXh0CitJbmRleDogdGVzdF9maWxlLnN3
ZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQorQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5
cGUuCitzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCisKKworCitRMWRU
QngwQUFBQjQyaXRnNEdsZ1lKakd3TUREeU9ETXhNRHczNEdCZ1FFQUpQUURKQT09CisKK0VORAor
ICAgIGluZGV4UGF0aCA9PiAidGVzdF9maWxlLnN3ZiIsCisgICAgaXNCaW5hcnkgPT4gMSwKKyAg
ICBpc1N2biA9PiAxLAorfV0sCisiUHJvcGVydHkgY2hhbmdlcyBvbjogTWFrZWZpbGVcbiJdLAor
ICAgIGV4cGVjdGVkTmV4dExpbmUgPT4gIl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19cbiIsCit9LAoreworICAgICMgTmV3
IHRlc3QKKyAgICBkaWZmTmFtZSA9PiAiU1ZOOiBiaW5hcnkgZmlsZSBmb2xsb3dlZCBieSBmaWxl
IGNoYW5nZSBvbiBkaWZmZXJlbnQgZmlsZSIsCisgICAgaW5wdXRUZXh0ID0+IDw8J0VORCcsCitJ
bmRleDogdGVzdF9maWxlLnN3ZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFy
a2VkIGFzIGEgYmluYXJ5IHR5cGUuCitzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQt
c3RyZWFtCisKK1Byb3BlcnR5IGNoYW5nZXMgb246IHRlc3RfZmlsZS5zd2YKK19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
K05hbWU6IHN2bjptaW1lLXR5cGUKKyAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCisKKwor
UTFkVEJ4MEFBQUI0Mml0ZzRHbGdZSmpHd01ERHlPRE14TUR3MzRHQmdRRUFKUFFESkE9PQorCitJ
bmRleDogTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBNYWtlZmlsZQkocmV2aXNpb24gNjAwMjEp
CisrKysgTWFrZWZpbGUJKHdvcmtpbmcgY29weSkKK0BAIC0xLDMgKzEsNCBAQAorKworIE1PRFVM
RVMgPSBKYXZhU2NyaXB0Q29yZSBKYXZhU2NyaXB0R2x1ZSBXZWJDb3JlIFdlYktpdCBXZWJLaXQy
IFdlYktpdFRvb2xzIAorCisgYWxsOgorRU5ECisgICAgZXhwZWN0ZWRSZXR1cm4gPT4gWworW3sK
KyAgICBzdm5Db252ZXJ0ZWRUZXh0ID0+ICA8PCdFTkQnLCAjIFNhbWUgYXMgaW5wdXQgdGV4dAor
SW5kZXg6IHRlc3RfZmlsZS5zd2YKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0Nhbm5vdCBkaXNwbGF5OiBmaWxlIG1h
cmtlZCBhcyBhIGJpbmFyeSB0eXBlLgorc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0
LXN0cmVhbQorCisKKworUTFkVEJ4MEFBQUI0Mml0ZzRHbGdZSmpHd01ERHlPRE14TUR3MzRHQmdR
RUFKUFFESkE9PQorCitFTkQKKyAgICBpbmRleFBhdGggPT4gInRlc3RfZmlsZS5zd2YiLAorICAg
IGlzQmluYXJ5ID0+IDEsCisgICAgaXNTdm4gPT4gMSwKK31dLAorIkluZGV4OiBNYWtlZmlsZVxu
Il0sCisgICAgZXhwZWN0ZWROZXh0TGluZSA9PiAiPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIiwKK30sCisjIyMjCisj
IFByb3BlcnR5IENoYW5nZXM6IEZpbGUgY2hhbmdlIHdpdGggcHJvcGVydHkgY2hhbmdlCisjIwor
eworICAgICMgTmV3IHRlc3QKKyAgICBkaWZmTmFtZSA9PiAiU1ZOOiBmaWxlIGNoYW5nZSBkaWZm
IHdpdGggcHJvcGVydHkgY2hhbmdlLCBmb2xsb3dlZCBieSBwcm9wZXJ0eSBjaGFuZ2UgZGlmZiIs
CisgICAgaW5wdXRUZXh0ID0+IDw8J0VORCcsCitJbmRleDogTWFrZWZpbGUKKz09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
Ky0tLSBNYWtlZmlsZQkocmV2aXNpb24gNjAwMjEpCisrKysgTWFrZWZpbGUJKHdvcmtpbmcgY29w
eSkKK0BAIC0xLDMgKzEsNCBAQAorKworIE1PRFVMRVMgPSBKYXZhU2NyaXB0Q29yZSBKYXZhU2Ny
aXB0R2x1ZSBXZWJDb3JlIFdlYktpdCBXZWJLaXQyIFdlYktpdFRvb2xzIAorCisgYWxsOgorCitQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBNYWtlZmlsZQorX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworQWRkZWQ6IHN2bjpleGVj
dXRhYmxlCisgICArICoKKworCitQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBNYWtlZmlsZS5zaGFyZWQK
K19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KK0RlbGV0ZWQ6IHN2bjpleGVjdXRhYmxlCisgICAtICoKK0VORAorICAgIGV4
cGVjdGVkUmV0dXJuID0+IFsKK1t7CisgICAgc3ZuQ29udmVydGVkVGV4dCA9PiAgPDwnRU5EJywg
IyBTYW1lIGFzIGlucHV0IHRleHQKK0luZGV4OiBNYWtlZmlsZQorPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIE1h
a2VmaWxlCShyZXZpc2lvbiA2MDAyMSkKKysrKyBNYWtlZmlsZQkod29ya2luZyBjb3B5KQorQEAg
LTEsMyArMSw0IEBACisrCisgTU9EVUxFUyA9IEphdmFTY3JpcHRDb3JlIEphdmFTY3JpcHRHbHVl
IFdlYkNvcmUgV2ViS2l0IFdlYktpdDIgV2ViS2l0VG9vbHMgCisKKyBhbGw6CisKKworCitFTkQK
KyAgICBleGVjdXRhYmxlQml0RGVsdGEgPT4gMSwKKyAgICBpbmRleFBhdGggPT4gIk1ha2VmaWxl
IiwKKyAgICBpc1N2biA9PiAxLAorICAgIHNvdXJjZVJldmlzaW9uID0+ICI2MDAyMSIsCit9XSwK
KyJQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBNYWtlZmlsZS5zaGFyZWRcbiJdLAorICAgIGV4cGVjdGVk
TmV4dExpbmUgPT4gIl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19cbiIsCit9LAoreworICAgICMgTmV3IHRlc3QKKyAgICBk
aWZmTmFtZSA9PiAiU1ZOOiBmaWxlIGNoYW5nZSBkaWZmIHdpdGggcHJvcGVydHkgY2hhbmdlLCBm
b2xsb3dlZCBieSBmaWxlIGNoYW5nZSBkaWZmIiwKKyAgICBpbnB1dFRleHQgPT4gPDwnRU5EJywK
K0luZGV4OiBNYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIE1ha2VmaWxlCShyZXZpc2lvbiA2MDAy
MSkKKysrKyBNYWtlZmlsZQkod29ya2luZyBjb3B5KQorQEAgLTEsMyArMSw0IEBACisrCisgTU9E
VUxFUyA9IEphdmFTY3JpcHRDb3JlIEphdmFTY3JpcHRHbHVlIFdlYkNvcmUgV2ViS2l0IFdlYktp
dDIgV2ViS2l0VG9vbHMgCisKKyBhbGw6CisKK1Byb3BlcnR5IGNoYW5nZXMgb246IE1ha2VmaWxl
CitfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCitOYW1lOiBzdm46ZXhlY3V0YWJsZQorICAgLSAqCisKK0luZGV4OiBNYWtl
ZmlsZS5zaGFyZWQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBNYWtlZmlsZS5zaGFyZWQJKHJldmlzaW9uIDYw
MDIxKQorKysrIE1ha2VmaWxlLnNoYXJlZAkod29ya2luZyBjb3B5KQorQEAgLTEsMyArMSw0IEBA
CisrCitTQ1JJUFRTX1BBVEggPz0gLi4vV2ViS2l0VG9vbHMvU2NyaXB0cworWENPREVfT1BUSU9O
UyA9IGBwZXJsIC1JJChTQ1JJUFRTX1BBVEgpIC1Nd2Via2l0ZGlycyAtZSAncHJpbnQgWGNvZGVP
cHRpb25TdHJpbmcoKSdgICQoQVJHUykKK0VORAorICAgIGV4cGVjdGVkUmV0dXJuID0+IFsKK1t7
CisgICAgc3ZuQ29udmVydGVkVGV4dCA9PiAgPDwnRU5EJywgIyBTYW1lIGFzIGlucHV0IHRleHQK
K0luZGV4OiBNYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIE1ha2VmaWxlCShyZXZpc2lvbiA2MDAy
MSkKKysrKyBNYWtlZmlsZQkod29ya2luZyBjb3B5KQorQEAgLTEsMyArMSw0IEBACisrCisgTU9E
VUxFUyA9IEphdmFTY3JpcHRDb3JlIEphdmFTY3JpcHRHbHVlIFdlYkNvcmUgV2ViS2l0IFdlYktp
dDIgV2ViS2l0VG9vbHMgCisKKyBhbGw6CisKKworRU5ECisgICAgZXhlY3V0YWJsZUJpdERlbHRh
ID0+IC0xLAorICAgIGluZGV4UGF0aCA9PiAiTWFrZWZpbGUiLAorICAgIGlzU3ZuID0+IDEsCisg
ICAgc291cmNlUmV2aXNpb24gPT4gIjYwMDIxIiwKK31dLAorIkluZGV4OiBNYWtlZmlsZS5zaGFy
ZWRcbiJdLAorICAgIGV4cGVjdGVkTmV4dExpbmUgPT4gIj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIsCit9LAorIyMj
IwogIyAgICBHaXQgdGVzdCBjYXNlcwogIyMKIHsKQEAgLTQ1MSw2ICs4NDIsNyBAQCBFTkQKICAg
ICBpbmRleFBhdGggPT4gImZvb19uZXciLAogfSwKIHsKKyAgICBleGVjdXRhYmxlQml0RGVsdGEg
PT4gMSwKICAgICBpbmRleFBhdGggPT4gImZvb19uZXciLAogICAgIGlzR2l0ID0+IDEsCiAgICAg
c3ZuQ29udmVydGVkVGV4dCA9PiA8PCdFTkQnLAo=
</data>
<flag name="review"
          id="41327"
          type_id="1"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57494</attachid>
            <date>2010-05-31 14:04:03 -0700</date>
            <delta_ts>2010-07-09 17:56:24 -0700</delta_ts>
            <desc>Patch with unit tests</desc>
            <filename>Bug34909_3.patch</filename>
            <type>text/plain</type>
            <size>21658</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDYwNDQ5KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTAtMDUtMzEgIERhbmllbCBCYXRlcyAgPGRi
YXRlc0ByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEVuYWJsZSBleGVjdXRhYmxlIHN1cHBvcnQgZm9yIHN2bi1hcHBseSBhbmQgc3ZuLXVu
YXBwbHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5
NDA5CisKKyAgICAgICAgQ29ubmVjdCB1cCB0aGUgR2l0IGFuZCBTVk4gZXhlY3V0YWJsZSBiaXQg
c3VwcG9ydCBpbiBwYXJzZURpZmYoKSBzbyB0aGF0CisgICAgICAgIGV4ZWN1dGFibGUgYml0IGNo
YW5nZXMgYXJlIHByb3BhZ2F0ZWQgdmlhIHRoZSByZXR1cm5lZCBkaWZmIGhhc2ggdG8gdGhlCisg
ICAgICAgIHBhdGNoIGZ1bmN0aW9uIGluIHN2bi1hcHBseSBhbmQgc3ZuLXVuYXBwbHkuCisKKyAg
ICAgICAgKiBTY3JpcHRzL1ZDU1V0aWxzLnBtOgorICAgICAgICAgIC0gTW9kaWZpZWQgcGFyc2VE
aWZmKCkgdG8gY2FsbCBwYXJzZVN2bkRpZmZQcm9wZXJ0aWVzIHdoZW4KKyAgICAgICAgICAgIGl0
IGZpbmRzIHRoZSBzdGFydCBvZiBhbiBTVk4gcHJvcGVydHkgY2hhbmdlIGRpZmYuCisgICAgICAg
ICAgLSBSZW1vdmVkIEZJWE1FIGNvbW1lbnQgYWJvdmUgcGFyc2VTdm5EaWZmUHJvcGVydGllcygp
IHNpbmNlCisgICAgICAgICAgICBpdCBpcyBub3cgYmVpbmcgdXNlZCBieSBwYXJzZURpZmYoKS4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHBlcmwvVkNTVXRpbHNfdW5pdHRlc3QvcGFyc2VEaWZm
LnBsOgorICAgICAgICAgIC0gVXBkYXRlZCByZXN1bHRzIGZvcjoKKyAgICAgICAgICAgICJyZW5h
bWUgKHdpdGggZXhlY3V0YWJsZSBiaXQgY2hhbmdlKSIKKyAgICAgICAgICAgICJTVk46IGJpbmFy
eSBmaWxlIChpc0JpbmFyeSB0cnVlKSIKKyAgICAgICAgICAtIEFkZGVkIHVuaXQgdGVzdHM6Cisg
ICAgICAgICAgICAiU1ZOOiBmaWxlIGNoYW5nZSBkaWZmIHdpdGggcHJvcGVydHkgY2hhbmdlIGRp
ZmYiCisgICAgICAgICAgICAiU1ZOOiBmaWxlIGNoYW5nZSBkaWZmLCBmb2xsb3dlZCBieSBwcm9w
ZXJ0eSBjaGFuZ2UgZGlmZiBvbiBkaWZmZXJlbnQgZmlsZSIKKyAgICAgICAgICAgICJTVk46IHBy
b3BlcnR5IGRpZmYsIGZvbGxvd2VkIGJ5IGZpbGUgY2hhbmdlIGRpZmYiCisgICAgICAgICAgICAi
U1ZOOiBjb3BpZWQgZmlsZSB3aXRoIHByb3BlcnR5IGNoYW5nZSIKKyAgICAgICAgICAgICJTVk46
IHR3byBjb25zZWN1dGl2ZSBwcm9wZXJ0eSBkaWZmcyIKKyAgICAgICAgICAgICJTVk46IGJpbmFy
eSBmaWxlIHdpdGggZXhlY3V0YWJsZSBiaXQgY2hhbmdlIgorICAgICAgICAgICAgIlNWTjogYmlu
YXJ5IGZpbGUgZm9sbG93ZWQgYnkgcHJvcGVydHkgY2hhbmdlIG9uIGRpZmZlcmVudCBmaWxlIgor
ICAgICAgICAgICAgIlNWTjogYmluYXJ5IGZpbGUgZm9sbG93ZWQgYnkgZmlsZSBjaGFuZ2Ugb24g
ZGlmZmVyZW50IGZpbGUiCisgICAgICAgICAgICAiU1ZOOiBmaWxlIGNoYW5nZSBkaWZmIHdpdGgg
cHJvcGVydHkgY2hhbmdlLCBmb2xsb3dlZCBieSBwcm9wZXJ0eSBjaGFuZ2UgZGlmZiIKKyAgICAg
ICAgICAgICJTVk46IGZpbGUgY2hhbmdlIGRpZmYgd2l0aCBwcm9wZXJ0eSBjaGFuZ2UsIGZvbGxv
d2VkIGJ5IGZpbGUgY2hhbmdlIGRpZmYiCisKIDIwMTAtMDUtMzAgIEtlbnQgVGFtdXJhICA8dGtl
bnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4K
SW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHMucG0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGlscy5wbQkocmV2aXNpb24gNjA0NDkpCisrKyBXZWJLaXRU
b29scy9TY3JpcHRzL1ZDU1V0aWxzLnBtCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw3IEBA
IEJFR0lOIHsKICAgICAgICAgJnBhdGhSZWxhdGl2ZVRvU1ZOUmVwb3NpdG9yeVJvb3RGb3JQYXRo
CiAgICAgICAgICZwcmVwYXJlUGFyc2VkUGF0Y2gKICAgICAgICAgJnJ1blBhdGNoQ29tbWFuZAor
ICAgICAgICAmc2NtVG9nZ2xlRXhlY3V0YWJsZUJpdAogICAgICAgICAmc2V0Q2hhbmdlTG9nRGF0
ZUFuZFJldmlld2VyCiAgICAgICAgICZzdm5SZXZpc2lvbkZvckRpcmVjdG9yeQogICAgICAgICAm
c3ZuU3RhdHVzCkBAIC05MCw2ICs5MSw3IEBAIG15ICRjaGFuZ2VMb2dUaW1lWm9uZSA9ICJQU1Q4
UERUIjsKIAogbXkgJGdpdERpZmZTdGFydFJlZ0V4ID0gcXIjXmRpZmYgLS1naXQgKFx3Lyk/KC4r
KSAoXHcvKT8oW15cclxuXSspIzsKIG15ICRzdm5EaWZmU3RhcnRSZWdFeCA9IHFyI15JbmRleDog
KFteXHJcbl0rKSM7CitteSAkc3ZuUHJvcGVydGllc1N0YXJ0UmVnRXggPSBxciNeUHJvcGVydHkg
Y2hhbmdlcyBvbjogKFteXHJcbl0rKSM7ICMgJDEgaXMgbm9ybWFsbHkgdGhlIHNhbWUgYXMgdGhl
IGluZGV4IHBhdGguCiBteSAkc3ZuUHJvcGVydHlTdGFydFJlZ0V4ID0gcXIjXihNb2RpZmllZHxO
YW1lfEFkZGVkfERlbGV0ZWQpOiAoW15cclxuXSspIzsgIyAkMiBpcyB0aGUgbmFtZSBvZiB0aGUg
cHJvcGVydHkuCiBteSAkc3ZuUHJvcGVydHlWYWx1ZVN0YXJ0UmVnRXggPSBxciNeICAgKFwrfC0p
IChbXlxyXG5dKykjOyAjICQyIGlzIHRoZSBzdGFydCBvZiB0aGUgcHJvcGVydHkncyB2YWx1ZSAo
d2hpY2ggbWF5IHNwYW4gbXVsdGlwbGUgbGluZXMpLgogCkBAIC03MzUsNiArNzM3LDggQEAgc3Vi
IHBhcnNlRGlmZkhlYWRlcigkJCkKICMKICMgICBjb3BpZWRGcm9tUGF0aDogdGhlIHBhdGggZnJv
bSB3aGljaCB0aGUgZmlsZSB3YXMgY29waWVkIGlmIHRoZSBkaWZmCiAjICAgICAgICAgICAgICAg
ICAgIGlzIGEgY29weS4KKyMgICBleGVjdXRhYmxlQml0RGVsdGE6IHRoZSB2YWx1ZSAxIG9yIC0x
IGlmIHRoZSBleGVjdXRhYmxlIGJpdCB3YXMgYWRkZWQgb3IKKyMgICAgICAgICAgICAgICAgICAg
ICAgIHJlbW92ZWQgZnJvbSB0aGUgdGFyZ2V0IGZpbGUsIHJlc3BlY3RpdmVseS4KICMgICBpbmRl
eFBhdGg6IHRoZSBwYXRoIG9mIHRoZSB0YXJnZXQgZmlsZS4gIEZvciBTVk4tZm9ybWF0dGVkIGRp
ZmZzLAogIyAgICAgICAgICAgICAgdGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgcGF0aCBpbiB0aGUg
IkluZGV4OiIgbGluZS4KICMgICBpc0JpbmFyeTogdGhlIHZhbHVlIDEgaWYgdGhlIGRpZmYgaXMg
Zm9yIGEgYmluYXJ5IGZpbGUuCkBAIC03NTQsNiArNzU4LDEzIEBAIHN1YiBwYXJzZURpZmZIZWFk
ZXIoJCQpCiAjCiAjIFRoaXMgc3Vicm91dGluZSBwcmVzZXJ2ZXMgYW55IGxlYWRpbmcganVuayBl
bmNvdW50ZXJlZCBiZWZvcmUgdGhlIGhlYWRlci4KICMKKyMgQ29tcG9zaXRpb24gb2YgYW4gU1ZO
IGRpZmYKKyMKKyMgVGhlcmUgYXJlIHRocmVlIHBhcnRzIHRvIGFuIFNWTiBkaWZmOiB0aGUgaGVh
ZGVyLCB0aGUgcHJvcGVydHkgY2hhbmdlLCBhbmQKKyMgdGhlIGJpbmFyeSBjb250ZW50cywgaW4g
dGhhdCBvcmRlci4gRWl0aGVyIHRoZSBoZWFkZXIgb3IgdGhlIHByb3BlcnR5IGNoYW5nZQorIyBt
YXkgYmUgb21taXR0ZWQsIGJ1dCBub3QgYm90aC4gSWYgdGhlcmUgYXJlIGJpbmFyeSBjaGFuZ2Vz
LCB0aGVuIHlvdSBhbHdheXMKKyMgaGF2ZSBhbGwgdGhyZWUuCisjCiAjIEFyZ3M6CiAjICAgJGZp
bGVIYW5kbGU6IGEgZmlsZSBoYW5kbGUgYWR2YW5jZWQgdG8gdGhlIGZpcnN0IGxpbmUgb2YgdGhl
IG5leHQKICMgICAgICAgICAgICAgICAgaGVhZGVyIGJsb2NrLiBMZWFkaW5nIGp1bmsgaXMgb2th
eS4KQEAgLTc3Myw2ICs3ODQsNyBAQCBzdWIgcGFyc2VEaWZmKCQkKQogICAgIG15ICRoZWFkZXJT
dGFydFJlZ0V4ID0gJHN2bkRpZmZTdGFydFJlZ0V4OyAjIFNWTi1zdHlsZSBoZWFkZXIgZm9yIHRo
ZSBkZWZhdWx0CiAKICAgICBteSAkaGVhZGVySGFzaFJlZjsgIyBMYXN0IGhlYWRlciBmb3VuZCwg
YXMgcmV0dXJuZWQgYnkgcGFyc2VEaWZmSGVhZGVyKCkuCisgICAgbXkgJHN2blByb3BlcnRpZXNI
YXNoUmVmOyAjIExhc3QgU1ZOIHByb3BlcnRpZXMgZGlmZiBmb3VuZCwgYXMgcmV0dXJuZWQgYnkg
cGFyc2VTdm5EaWZmUHJvcGVydGllcygpLgogICAgIG15ICRzdm5UZXh0OwogICAgIHdoaWxlIChk
ZWZpbmVkKCRsaW5lKSkgewogICAgICAgICBpZiAoISRoZWFkZXJIYXNoUmVmICYmICgkbGluZSA9
fiAkZ2l0RGlmZlN0YXJ0UmVnRXgpKSB7CkBAIC03ODIsNiArNzk0LDE4IEBAIHN1YiBwYXJzZURp
ZmYoJCQpCiAgICAgICAgICAgICAkaGVhZGVyU3RhcnRSZWdFeCA9ICRnaXREaWZmU3RhcnRSZWdF
eDsKICAgICAgICAgfQogCisgICAgICAgIGlmICgkbGluZSA9fiAkc3ZuUHJvcGVydGllc1N0YXJ0
UmVnRXgpIHsKKyAgICAgICAgICAgIG15ICRwcm9wZXJ0eVBhdGggPSAkMTsKKyAgICAgICAgICAg
IGlmICgkc3ZuUHJvcGVydGllc0hhc2hSZWYgfHwgJGhlYWRlckhhc2hSZWYgJiYgKCRwcm9wZXJ0
eVBhdGggbmUgJGhlYWRlckhhc2hSZWYtPntpbmRleFBhdGh9KSkgeworICAgICAgICAgICAgICAg
ICMgVGhpcyBpcyB0aGUgc3RhcnQgb2YgdGhlIHNlY29uZCBkaWZmIG9mIHRoaXMgd2hpbGUgbG9v
cC4gSW4gcGFydGljdWxhciwgdGhpcworICAgICAgICAgICAgICAgICMgaXMgdGhlIHN0YXJ0IG9m
IGEgcHJvcGVydHkgZGlmZiBmb3IgYSBmaWxlIHRoYXQgb25seSBoYXMgcHJvcGVydHkgY2hhbmdl
cy4KKyAgICAgICAgICAgICAgICAjIE5vdGUsIGlmICRzdm5Qcm9wZXJ0aWVzSGFzaFJlZiBpcyBk
ZWZpbmVkIHRoZW4gdGhpcyBpcyB0aGUgc3RhcnQgdGhlIHNlY29uZAorICAgICAgICAgICAgICAg
ICMgY29uc2VjdXRpdmUgcHJvcGVydHkgZGlmZiBpbiB0aGlzIHdoaWxlIGxvb3AuCisgICAgICAg
ICAgICAgICAgbGFzdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICgkc3ZuUHJvcGVydGll
c0hhc2hSZWYsICRsaW5lKSA9IHBhcnNlU3ZuRGlmZlByb3BlcnRpZXMoJGZpbGVIYW5kbGUsICRs
aW5lKTsKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KICAgICAgICAgaWYgKCRsaW5lICF+
ICRoZWFkZXJTdGFydFJlZ0V4KSB7CiAgICAgICAgICAgICAjIFRoZW4gd2UgYXJlIGluIHRoZSBi
b2R5IG9mIHRoZSBkaWZmLgogICAgICAgICAgICAgJHN2blRleHQgLj0gJGxpbmU7CkBAIC03ODks
OCArODEzLDkgQEAgc3ViIHBhcnNlRGlmZigkJCkKICAgICAgICAgICAgIG5leHQ7CiAgICAgICAg
IH0gIyBPdGhlcndpc2UsIHdlIGZvdW5kIGEgZGlmZiBoZWFkZXIuCiAKLSAgICAgICAgaWYgKCRo
ZWFkZXJIYXNoUmVmKSB7Ci0gICAgICAgICAgICAjIFRoZW4gdGhpcyBpcyB0aGUgc2Vjb25kIGRp
ZmYgaGVhZGVyIG9mIHRoaXMgd2hpbGUgbG9vcC4KKyAgICAgICAgaWYgKCRzdm5Qcm9wZXJ0aWVz
SGFzaFJlZiB8fCAkaGVhZGVySGFzaFJlZikgeworICAgICAgICAgICAgIyBUaGVuIGVpdGhlciB3
ZSBqdXN0IHByb2Nlc3NlZCBhbiBTVk4gcHJvcGVydHkgY2hhbmdlIG9yIHRoaXMKKyAgICAgICAg
ICAgICMgaXMgdGhlIHN0YXJ0IG9mIHRoZSBzZWNvbmQgZGlmZiBoZWFkZXIgb2YgdGhpcyB3aGls
ZSBsb29wLgogICAgICAgICAgICAgbGFzdDsKICAgICAgICAgfQogCkBAIC04MTIsMTIgKzgzNywy
OSBAQCBzdWIgcGFyc2VEaWZmKCQkKQogICAgICAgICAkY29weUhhc2h7Y29waWVkRnJvbVBhdGh9
ID0gJGhlYWRlckhhc2hSZWYtPntjb3BpZWRGcm9tUGF0aH07CiAgICAgICAgICRjb3B5SGFzaHtp
bmRleFBhdGh9ID0gJGhlYWRlckhhc2hSZWYtPntpbmRleFBhdGh9OwogICAgICAgICAkY29weUhh
c2h7c291cmNlUmV2aXNpb259ID0gJGhlYWRlckhhc2hSZWYtPntzb3VyY2VSZXZpc2lvbn0gaWYg
JGhlYWRlckhhc2hSZWYtPntzb3VyY2VSZXZpc2lvbn07CisgICAgICAgIGlmICgkaGVhZGVySGFz
aFJlZi0+e2lzU3ZufSkgeworICAgICAgICAgICAgJGNvcHlIYXNoe2V4ZWN1dGFibGVCaXREZWx0
YX0gPSAkc3ZuUHJvcGVydGllc0hhc2hSZWYtPntleGVjdXRhYmxlQml0RGVsdGF9IGlmICRzdm5Q
cm9wZXJ0aWVzSGFzaFJlZi0+e2V4ZWN1dGFibGVCaXREZWx0YX07CisgICAgICAgIH0KICAgICAg
ICAgcHVzaCBAZGlmZkhhc2hSZWZzLCBcJWNvcHlIYXNoOwogICAgIH0KLSAgICBpZiAoISRoZWFk
ZXJIYXNoUmVmLT57Y29waWVkRnJvbVBhdGh9IHx8ICRoZWFkZXJIYXNoUmVmLT57aXNDb3B5V2l0
aENoYW5nZXN9KSB7CisKKyAgICAjIE5vdGUsIHRoZSBvcmRlciBvZiBldmFsdWF0aW9uIGZvciB0
aGUgZm9sbG93aW5nIGlmIGNvbmRpdGlvbmFsIGhhcyBiZWVuIGV4cGxpY2l0bHkgY2hvc2VuIHNv
IHRoYXQKKyAgICAjIGl0IGV2YWx1YXRlcyB0byBmYWxzZSB3aGVuIHRoZXJlIGlzIG5vIGhlYWRl
ckhhc2hSZWYgKGUuZy4gYSBwcm9wZXJ0eSBjaGFuZ2UgZGlmZiBmb3IgYSBmaWxlIHRoYXQKKyAg
ICAjIG9ubHkgaGFzIHByb3BlcnR5IGNoYW5nZXMpLgorICAgIGlmICgkaGVhZGVySGFzaFJlZi0+
e2lzQ29weVdpdGhDaGFuZ2VzfSB8fCAoJSRoZWFkZXJIYXNoUmVmICYmICEkaGVhZGVySGFzaFJl
Zi0+e2NvcGllZEZyb21QYXRofSkpIHsKICAgICAgICAgIyBUaGVuIGFkZCB0aGUgdXN1YWwgZmls
ZSBtb2RpZmljYXRpb24uCiAgICAgICAgIG15ICVkaWZmSGFzaDsKLSAgICAgICAgIyBGSVhNRTog
QWRkIGV4ZWN1dGFibGVCaXREZWx0YSBhcyBhIGtleS4KKyAgICAgICAgIyBGSVhNRTogV2Ugc2hv
dWxkIGV4cGFuZCB0aGlzIGNvZGUgdG8gc3VwcG9ydCBvdGhlciBwcm9wZXJ0aWVzLiAgSW4gdGhl
IGZ1dHVyZSwKKyAgICAgICAgIyAgICAgICAgcGFyc2VTdm5EaWZmUHJvcGVydGllcyBtYXkgcmV0
dXJuIGEgaGFzaCB3aG9zZSBrZXlzIGFyZSB0aGUgcHJvcGVydGllcy4KKyAgICAgICAgaWYgKCRo
ZWFkZXJIYXNoUmVmLT57aXNTdm59KSB7CisgICAgICAgICAgICAjIFNWTiByZWNvcmRzIHRoZSBj
aGFuZ2UgdG8gdGhlIGV4ZWN1dGFibGUgYml0IGluIGEgc2VwYXJhdGUgcHJvcGVydHkgY2hhbmdl
IGRpZmYKKyAgICAgICAgICAgICMgdGhhdCBmb2xsb3dzIHRoZSBjb250ZW50cyBvZiB0aGUgZGlm
ZiwgZXhjZXB0IGZvciBiaW5hcnkgZGlmZnMuICBGb3IgYmluYXJ5CisgICAgICAgICAgICAjIGRp
ZmZzLCB0aGUgcHJvcGVydHkgY2hhbmdlIGRpZmYgZm9sbG93cyB0aGUgZGlmZiBoZWFkZXIuCisg
ICAgICAgICAgICAkZGlmZkhhc2h7ZXhlY3V0YWJsZUJpdERlbHRhfSA9ICRzdm5Qcm9wZXJ0aWVz
SGFzaFJlZi0+e2V4ZWN1dGFibGVCaXREZWx0YX0gaWYgJHN2blByb3BlcnRpZXNIYXNoUmVmLT57
ZXhlY3V0YWJsZUJpdERlbHRhfTsKKyAgICAgICAgfSBlbHNpZiAoJGhlYWRlckhhc2hSZWYtPntp
c0dpdH0pIHsKKyAgICAgICAgICAgICMgR2l0IHJlY29yZHMgdGhlIGNoYW5nZSB0byB0aGUgZXhl
Y3V0YWJsZSBiaXQgaW4gdGhlIGhlYWRlciBvZiBhIGRpZmYuCisgICAgICAgICAgICAkZGlmZkhh
c2h7ZXhlY3V0YWJsZUJpdERlbHRhfSA9ICRoZWFkZXJIYXNoUmVmLT57ZXhlY3V0YWJsZUJpdERl
bHRhfSBpZiAkaGVhZGVySGFzaFJlZi0+e2V4ZWN1dGFibGVCaXREZWx0YX07CisgICAgICAgIH0K
ICAgICAgICAgJGRpZmZIYXNoe2luZGV4UGF0aH0gPSAkaGVhZGVySGFzaFJlZi0+e2luZGV4UGF0
aH07CiAgICAgICAgICRkaWZmSGFzaHtpc0JpbmFyeX0gPSAkaGVhZGVySGFzaFJlZi0+e2lzQmlu
YXJ5fSBpZiAkaGVhZGVySGFzaFJlZi0+e2lzQmluYXJ5fTsKICAgICAgICAgJGRpZmZIYXNoe2lz
RGVsZXRpb259ID0gJGhlYWRlckhhc2hSZWYtPntpc0RlbGV0aW9ufSBpZiAkaGVhZGVySGFzaFJl
Zi0+e2lzRGVsZXRpb259OwpAQCAtODMxLDEwICs4NzMsMjQgQEAgc3ViIHBhcnNlRGlmZigkJCkK
ICAgICAgICAgfQogICAgICAgICAjIEZJWE1FOiBSZW1vdmUgdGhlIG5lZWQgZm9yIHN2bkNvbnZl
cnRlZFRleHQuICBTZWUgdGhlICVkaWZmSGFzaAogICAgICAgICAjICAgICAgICBjb2RlIGNvbW1l
bnRzIGFib3ZlIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICAgICAgICAkZGlmZkhhc2h7c3ZuQ29u
dmVydGVkVGV4dH0gPSAkc3ZuVGV4dDsKKyAgICAgICAgIworICAgICAgICAjIE5vdGUsIHdlIG1h
eSBub3QgYWx3YXlzIGhhdmUgU1ZOIGNvbnZlcnRlZCB0ZXh0IHNpbmNlIHdlIGludGVuZAorICAg
ICAgICAjIHRvIGRlcHJlY2F0ZSBpdCBpbiB0aGUgZnV0dXJlLiAgRm9yIGV4YW1wbGUsIGEgcHJv
cGVydHkgY2hhbmdlCisgICAgICAgICMgZGlmZiBmb3IgYSBmaWxlIHRoYXQgb25seSBoYXMgcHJv
cGVydHkgY2hhbmdlcyB3aWxsIG5vdCByZXR1cm4KKyAgICAgICAgIyBhbnkgU1ZOIGNvbnZlcnRl
ZCB0ZXh0LgorICAgICAgICAkZGlmZkhhc2h7c3ZuQ29udmVydGVkVGV4dH0gPSAkc3ZuVGV4dCBp
ZiAkc3ZuVGV4dDsKICAgICAgICAgcHVzaCBAZGlmZkhhc2hSZWZzLCBcJWRpZmZIYXNoOwogICAg
IH0KIAorICAgIGlmICghJSRoZWFkZXJIYXNoUmVmICYmICRzdm5Qcm9wZXJ0aWVzSGFzaFJlZikg
eworICAgICAgICAjIEEgcHJvcGVydHkgY2hhbmdlIGRpZmYgZm9yIGEgZmlsZSB0aGF0IG9ubHkg
aGFzIHByb3BlcnR5IGNoYW5nZXMuCisgICAgICAgIG15ICVwcm9wZXJ0eUNoYW5nZUhhc2g7Cisg
ICAgICAgICRwcm9wZXJ0eUNoYW5nZUhhc2h7ZXhlY3V0YWJsZUJpdERlbHRhfSA9ICRzdm5Qcm9w
ZXJ0aWVzSGFzaFJlZi0+e2V4ZWN1dGFibGVCaXREZWx0YX0gaWYgJHN2blByb3BlcnRpZXNIYXNo
UmVmLT57ZXhlY3V0YWJsZUJpdERlbHRhfTsKKyAgICAgICAgJHByb3BlcnR5Q2hhbmdlSGFzaHtp
bmRleFBhdGh9ID0gJHN2blByb3BlcnRpZXNIYXNoUmVmLT57cHJvcGVydHlQYXRofTsKKyAgICAg
ICAgJHByb3BlcnR5Q2hhbmdlSGFzaHtpc1N2bn0gPSAxOworICAgICAgICBwdXNoIEBkaWZmSGFz
aFJlZnMsIFwlcHJvcGVydHlDaGFuZ2VIYXNoOworICAgIH0KKwogICAgIHJldHVybiAoXEBkaWZm
SGFzaFJlZnMsICRsaW5lKTsKIH0KIApAQCAtODU5LDE5ICs5MTUsMTQgQEAgc3ViIHBhcnNlRGlm
ZigkJCkKICMgICAgIGV4ZWN1dGFibGVCaXREZWx0YTogdGhlIHZhbHVlIDEgb3IgLTEgaWYgdGhl
IGV4ZWN1dGFibGUgYml0IHdhcyBhZGRlZCBvcgogIyAgICAgICAgICAgICAgICAgICAgICAgICBy
ZW1vdmVkIGZyb20gdGhlIHRhcmdldCBmaWxlLCByZXNwZWN0aXZlbHkuCiAjICAgJGxhc3RSZWFk
TGluZTogdGhlIGxpbmUgbGFzdCByZWFkIGZyb20gJGZpbGVIYW5kbGUuCi0jCi0jIEZJWE1FOiBU
aGlzIG1ldGhvZCBpcyB1bnVzZWQgYXMgb2YgKDA1LzIyLzIwMTApLiAgV2Ugd2lsbCBjYWxsIHRo
aXMgZnVuY3Rpb24KLSMgICAgICAgIGFzIHBhcnQgb2YgcGFyc2luZyBhIGRpZmYuICBTZWUgPGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQwOT4uCiBzdWIgcGFyc2VT
dm5EaWZmUHJvcGVydGllcygkJCkKIHsKICAgICBteSAoJGZpbGVIYW5kbGUsICRsaW5lKSA9IEBf
OwogCiAgICAgJF8gPSAkbGluZTsKIAotICAgIG15ICRzdm5Gb290ZXJEaWZmU3RhcnRSZWdFeCA9
IHFyI1Byb3BlcnR5IGNoYW5nZXMgb246IChbXlxyXG5dKykjOyAjICQxIGlzIG5vcm1hbGx5IHRo
ZSBzYW1lIGFzIHRoZSBpbmRleCBwYXRoLgotCiAgICAgbXkgJWZvb3RlcjsKLSAgICBpZiAoLyRz
dm5Gb290ZXJEaWZmU3RhcnRSZWdFeC8pIHsKKyAgICBpZiAoLyRzdm5Qcm9wZXJ0aWVzU3RhcnRS
ZWdFeC8pIHsKICAgICAgICAgJGZvb3Rlcntwcm9wZXJ0eVBhdGh9ID0gJDE7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgZGllKCJGYWlsZWQgdG8gZmluZCBzdGFydCBvZiBTVk4gcHJvcGVydHkgY2hh
bmdlLCBcIlByb3BlcnR5IGNoYW5nZXMgb24gXCI6IFwiJF9cIiIpOwpJbmRleDogV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRwZXJsL1ZDU1V0aWxzX3VuaXR0ZXN0L3BhcnNlRGlmZi5wbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvVkNTVXRpbHNfdW5pdHRl
c3QvcGFyc2VEaWZmLnBsCShyZXZpc2lvbiA2MDQ0OSkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cGVybC9WQ1NVdGlsc191bml0dGVzdC9wYXJzZURpZmYucGwJKHdvcmtpbmcgY29weSkK
QEAgLTkxLDEwICs5MSw2IEBAIEluZGV4OiB0ZXN0X2ZpbGUuc3dmCiBDYW5ub3QgZGlzcGxheTog
ZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4KIHN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlv
bi9vY3RldC1zdHJlYW0KIAotUHJvcGVydHkgY2hhbmdlcyBvbjogdGVzdF9maWxlLnN3ZgotX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwotTmFtZTogc3ZuOm1pbWUtdHlwZQotICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJl
YW0KIAogCiBRMWRUQngwQUFBQjQyaXRnNEdsZ1lKakd3TUREeU9ETXhNRHczNEdCZ1FFQUpQUURK
QT09CkBAIC0yMzYsNiArMjMyLDQwMSBAQCB1bmRlZl0sCiAgICAgZXhwZWN0ZWROZXh0TGluZSA9
PiB1bmRlZiwKIH0sCiAjIyMjCisjIFByb3BlcnR5IENoYW5nZXM6IFNpbXBsZQorIyMKK3sKKyAg
ICAjIE5ldyB0ZXN0CisgICAgZGlmZk5hbWUgPT4gIlNWTjogZmlsZSBjaGFuZ2UgZGlmZiB3aXRo
IHByb3BlcnR5IGNoYW5nZSBkaWZmIiwKKyAgICBpbnB1dFRleHQgPT4gPDwnRU5EJywKK0luZGV4
OiBNYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQorLS0tIE1ha2VmaWxlCShyZXZpc2lvbiA2MDAyMSkKKysr
KyBNYWtlZmlsZQkod29ya2luZyBjb3B5KQorQEAgLTEsMyArMSw0IEBACisrCisgTU9EVUxFUyA9
IEphdmFTY3JpcHRDb3JlIEphdmFTY3JpcHRHbHVlIFdlYkNvcmUgV2ViS2l0IFdlYktpdDIgV2Vi
S2l0VG9vbHMgCisKKyBhbGw6CisKK1Byb3BlcnR5IGNoYW5nZXMgb246IE1ha2VmaWxlCitfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCitOYW1lOiBzdm46ZXhlY3V0YWJsZQorICAgKyAqCitFTkQKKyAgICBleHBlY3RlZFJl
dHVybiA9PiBbCitbeworICAgIHN2bkNvbnZlcnRlZFRleHQgPT4gIDw8J0VORCcsICMgU2FtZSBh
cyBpbnB1dCB0ZXh0CitJbmRleDogTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBNYWtlZmlsZQko
cmV2aXNpb24gNjAwMjEpCisrKysgTWFrZWZpbGUJKHdvcmtpbmcgY29weSkKK0BAIC0xLDMgKzEs
NCBAQAorKworIE1PRFVMRVMgPSBKYXZhU2NyaXB0Q29yZSBKYXZhU2NyaXB0R2x1ZSBXZWJDb3Jl
IFdlYktpdCBXZWJLaXQyIFdlYktpdFRvb2xzIAorCisgYWxsOgorCitFTkQKKyAgICBleGVjdXRh
YmxlQml0RGVsdGEgPT4gMSwKKyAgICBpbmRleFBhdGggPT4gIk1ha2VmaWxlIiwKKyAgICBpc1N2
biA9PiAxLAorICAgIHNvdXJjZVJldmlzaW9uID0+ICI2MDAyMSIsCit9XSwKK3VuZGVmXSwKKyAg
ICBleHBlY3RlZE5leHRMaW5lID0+IHVuZGVmLAorfSwKK3sKKyAgICAjIE5ldyB0ZXN0CisgICAg
ZGlmZk5hbWUgPT4gIlNWTjogZmlsZSBjaGFuZ2UgZGlmZiwgZm9sbG93ZWQgYnkgcHJvcGVydHkg
Y2hhbmdlIGRpZmYgb24gZGlmZmVyZW50IGZpbGUiLAorICAgIGlucHV0VGV4dCA9PiA8PCdFTkQn
LAorSW5kZXg6IE1ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gTWFrZWZpbGUJKHJldmlzaW9uIDYw
MDIxKQorKysrIE1ha2VmaWxlCSh3b3JraW5nIGNvcHkpCitAQCAtMSwzICsxLDQgQEAKKysKKyBN
T0RVTEVTID0gSmF2YVNjcmlwdENvcmUgSmF2YVNjcmlwdEdsdWUgV2ViQ29yZSBXZWJLaXQgV2Vi
S2l0MiBXZWJLaXRUb29scyAKKworIGFsbDoKKworUHJvcGVydHkgY2hhbmdlcyBvbjogTWFrZWZp
bGUuc2hhcmVkCitfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCitOYW1lOiBzdm46ZXhlY3V0YWJsZQorICAgKyAqCitFTkQK
KyAgICBleHBlY3RlZFJldHVybiA9PiBbCitbeworICAgIHN2bkNvbnZlcnRlZFRleHQgPT4gIDw8
J0VORCcsICMgU2FtZSBhcyBpbnB1dCB0ZXh0CitJbmRleDogTWFrZWZpbGUKKz09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
Ky0tLSBNYWtlZmlsZQkocmV2aXNpb24gNjAwMjEpCisrKysgTWFrZWZpbGUJKHdvcmtpbmcgY29w
eSkKK0BAIC0xLDMgKzEsNCBAQAorKworIE1PRFVMRVMgPSBKYXZhU2NyaXB0Q29yZSBKYXZhU2Ny
aXB0R2x1ZSBXZWJDb3JlIFdlYktpdCBXZWJLaXQyIFdlYktpdFRvb2xzIAorCisgYWxsOgorCitF
TkQKKyAgICBpbmRleFBhdGggPT4gIk1ha2VmaWxlIiwKKyAgICBpc1N2biA9PiAxLAorICAgIHNv
dXJjZVJldmlzaW9uID0+ICI2MDAyMSIsCit9XSwKKyJQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBNYWtl
ZmlsZS5zaGFyZWRcbiJdLAorICAgIGV4cGVjdGVkTmV4dExpbmUgPT4gIl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19cbiIs
Cit9LAoreworICAgICMgTmV3IHRlc3QKKyAgICBkaWZmTmFtZSA9PiAiU1ZOOiBwcm9wZXJ0eSBk
aWZmLCBmb2xsb3dlZCBieSBmaWxlIGNoYW5nZSBkaWZmIiwKKyAgICBpbnB1dFRleHQgPT4gPDwn
RU5EJywKK1Byb3BlcnR5IGNoYW5nZXMgb246IE1ha2VmaWxlCitfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCitEZWxldGVk
OiBzdm46ZXhlY3V0YWJsZQorICAgLSAqCisKK0luZGV4OiBNYWtlZmlsZS5zaGFyZWQKKz09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KKy0tLSBNYWtlZmlsZS5zaGFyZWQJKHJldmlzaW9uIDYwMDIxKQorKysrIE1ha2VmaWxl
LnNoYXJlZAkod29ya2luZyBjb3B5KQorQEAgLTEsMyArMSw0IEBACisrCitTQ1JJUFRTX1BBVEgg
Pz0gLi4vV2ViS2l0VG9vbHMvU2NyaXB0cworWENPREVfT1BUSU9OUyA9IGBwZXJsIC1JJChTQ1JJ
UFRTX1BBVEgpIC1Nd2Via2l0ZGlycyAtZSAncHJpbnQgWGNvZGVPcHRpb25TdHJpbmcoKSdgICQo
QVJHUykKK0VORAorICAgIGV4cGVjdGVkUmV0dXJuID0+IFsKK1t7CisgICAgZXhlY3V0YWJsZUJp
dERlbHRhID0+IC0xLAorICAgIGluZGV4UGF0aCA9PiAiTWFrZWZpbGUiLAorICAgIGlzU3ZuID0+
IDEsCit9XSwKKyJJbmRleDogTWFrZWZpbGUuc2hhcmVkXG4iXSwKKyAgICBleHBlY3RlZE5leHRM
aW5lID0+ICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09XG4iLAorfSwKK3sKKyAgICAjIE5ldyB0ZXN0CisgICAgZGlmZk5h
bWUgPT4gIlNWTjogY29waWVkIGZpbGUgd2l0aCBwcm9wZXJ0eSBjaGFuZ2UiLAorICAgIGlucHV0
VGV4dCA9PiA8PCdFTkQnLAorSW5kZXg6IE5NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIE5NYWtl
ZmlsZQkocmV2aXNpb24gNjAwMjEpCShmcm9tIE1ha2VmaWxlOjYwMDIxKQorKysrIE5NYWtlZmls
ZQkod29ya2luZyBjb3B5KQorQEAgLTAsMCArMSwxNyBAQAorK01PRFVMRVMgPSBKYXZhU2NyaXB0
Q29yZSBKYXZhU2NyaXB0R2x1ZSBXZWJDb3JlIFdlYktpdCBXZWJLaXQyIFdlYktpdFRvb2xzIAor
CitQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBOTWFrZWZpbGUKK19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KK0FkZGVkOiBzdm46
ZXhlY3V0YWJsZQorICAgKyAqCitFTkQKKyAgICBleHBlY3RlZFJldHVybiA9PiBbCitbeworICAg
IGNvcGllZEZyb21QYXRoID0+ICJNYWtlZmlsZSIsCisgICAgZXhlY3V0YWJsZUJpdERlbHRhID0+
IDEsCisgICAgaW5kZXhQYXRoID0+ICJOTWFrZWZpbGUiLAorICAgIHNvdXJjZVJldmlzaW9uID0+
ICI2MDAyMSIsCit9XSwKK3VuZGVmXSwKKyAgICBleHBlY3RlZE5leHRMaW5lID0+IHVuZGVmLAor
fSwKK3sKKyAgICAjIE5ldyB0ZXN0CisgICAgZGlmZk5hbWUgPT4gIlNWTjogdHdvIGNvbnNlY3V0
aXZlIHByb3BlcnR5IGRpZmZzIiwKKyAgICBpbnB1dFRleHQgPT4gPDwnRU5EJywKK1Byb3BlcnR5
IGNoYW5nZXMgb246IE1ha2VmaWxlCitfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCitBZGRlZDogc3ZuOmV4ZWN1dGFibGUK
KyAgICsgKgorCisKK1Byb3BlcnR5IGNoYW5nZXMgb246IE1ha2VmaWxlLnNoYXJlZAorX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXworQWRkZWQ6IHN2bjpleGVjdXRhYmxlCisgICArICoKK0VORAorICAgIGV4cGVjdGVkUmV0
dXJuID0+IFsKK1t7CisgICAgZXhlY3V0YWJsZUJpdERlbHRhID0+IDEsCisgICAgaW5kZXhQYXRo
ID0+ICJNYWtlZmlsZSIsCisgICAgaXNTdm4gPT4gMSwKK31dLAorIlByb3BlcnR5IGNoYW5nZXMg
b246IE1ha2VmaWxlLnNoYXJlZFxuIl0sCisgICAgZXhwZWN0ZWROZXh0TGluZSA9PiAiX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX1xuIiwKK30sCisjIyMjCisjIFByb3BlcnR5IENoYW5nZXM6IEJpbmFyeSBmaWxlcworIyMK
K3sKKyAgICAjIE5ldyB0ZXN0CisgICAgZGlmZk5hbWUgPT4gIlNWTjogYmluYXJ5IGZpbGUgd2l0
aCBleGVjdXRhYmxlIGJpdCBjaGFuZ2UiLAorICAgIGlucHV0VGV4dCA9PiA8PCdFTkQnLAorSW5k
ZXg6IHRlc3RfZmlsZS5zd2YKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0Nhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtl
ZCBhcyBhIGJpbmFyeSB0eXBlLgorc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbQorCitQcm9wZXJ0eSBjaGFuZ2VzIG9uOiB0ZXN0X2ZpbGUuc3dmCitfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCitO
YW1lOiBzdm46bWltZS10eXBlCisgICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQorTmFtZTog
c3ZuOmV4ZWN1dGFibGUKKyAgICsgKgorCisKK1ExZFRCeDBBQUFCNDJpdGc0R2xnWUpqR3dNRER5
T0RNeE1EdzM0R0JnUUVBSlBRREpBPT0KK0VORAorICAgIGV4cGVjdGVkUmV0dXJuID0+IFsKK1t7
CisgICAgc3ZuQ29udmVydGVkVGV4dCA9PiAgPDwnRU5EJywgIyBTYW1lIGFzIGlucHV0IHRleHQK
K0luZGV4OiB0ZXN0X2ZpbGUuc3dmCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDYW5ub3QgZGlzcGxheTogZmlsZSBt
YXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4KK3N2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3Rl
dC1zdHJlYW0KKworCisKK1ExZFRCeDBBQUFCNDJpdGc0R2xnWUpqR3dNRER5T0RNeE1EdzM0R0Jn
UUVBSlBRREpBPT0KK0VORAorICAgIGV4ZWN1dGFibGVCaXREZWx0YSA9PiAxLAorICAgIGluZGV4
UGF0aCA9PiAidGVzdF9maWxlLnN3ZiIsCisgICAgaXNCaW5hcnkgPT4gMSwKKyAgICBpc1N2biA9
PiAxLAorfV0sCit1bmRlZl0sCisgICAgZXhwZWN0ZWROZXh0TGluZSA9PiB1bmRlZiwKK30sCit7
CisgICAgIyBOZXcgdGVzdAorICAgIGRpZmZOYW1lID0+ICJTVk46IGJpbmFyeSBmaWxlIGZvbGxv
d2VkIGJ5IHByb3BlcnR5IGNoYW5nZSBvbiBkaWZmZXJlbnQgZmlsZSIsCisgICAgaW5wdXRUZXh0
ID0+IDw8J0VORCcsCitJbmRleDogdGVzdF9maWxlLnN3ZgorPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2Fubm90IGRp
c3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCitzdm46bWltZS10eXBlID0gYXBw
bGljYXRpb24vb2N0ZXQtc3RyZWFtCisKK1Byb3BlcnR5IGNoYW5nZXMgb246IHRlc3RfZmlsZS5z
d2YKK19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KK05hbWU6IHN2bjptaW1lLXR5cGUKKyAgICsgYXBwbGljYXRpb24vb2N0
ZXQtc3RyZWFtCisKKworUTFkVEJ4MEFBQUI0Mml0ZzRHbGdZSmpHd01ERHlPRE14TUR3MzRHQmdR
RUFKUFFESkE9PQorCitQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBNYWtlZmlsZQorX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwor
QWRkZWQ6IHN2bjpleGVjdXRhYmxlCisgICArICoKK0VORAorICAgIGV4cGVjdGVkUmV0dXJuID0+
IFsKK1t7CisgICAgc3ZuQ29udmVydGVkVGV4dCA9PiAgPDwnRU5EJywgIyBTYW1lIGFzIGlucHV0
IHRleHQKK0luZGV4OiB0ZXN0X2ZpbGUuc3dmCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDYW5ub3QgZGlzcGxheTog
ZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4KK3N2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlv
bi9vY3RldC1zdHJlYW0KKworCisKK1ExZFRCeDBBQUFCNDJpdGc0R2xnWUpqR3dNRER5T0RNeE1E
dzM0R0JnUUVBSlBRREpBPT0KKworRU5ECisgICAgaW5kZXhQYXRoID0+ICJ0ZXN0X2ZpbGUuc3dm
IiwKKyAgICBpc0JpbmFyeSA9PiAxLAorICAgIGlzU3ZuID0+IDEsCit9XSwKKyJQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBNYWtlZmlsZVxuIl0sCisgICAgZXhwZWN0ZWROZXh0TGluZSA9PiAiX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX1xuIiwKK30sCit7CisgICAgIyBOZXcgdGVzdAorICAgIGRpZmZOYW1lID0+ICJTVk46IGJp
bmFyeSBmaWxlIGZvbGxvd2VkIGJ5IGZpbGUgY2hhbmdlIG9uIGRpZmZlcmVudCBmaWxlIiwKKyAg
ICBpbnB1dFRleHQgPT4gPDwnRU5EJywKK0luZGV4OiB0ZXN0X2ZpbGUuc3dmCis9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CitDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4KK3N2bjptaW1l
LXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KKworUHJvcGVydHkgY2hhbmdlcyBvbjog
dGVzdF9maWxlLnN3ZgorX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXworTmFtZTogc3ZuOm1pbWUtdHlwZQorICAgKyBhcHBs
aWNhdGlvbi9vY3RldC1zdHJlYW0KKworCitRMWRUQngwQUFBQjQyaXRnNEdsZ1lKakd3TUREeU9E
TXhNRHczNEdCZ1FFQUpQUURKQT09CisKK0luZGV4OiBNYWtlZmlsZQorPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0t
IE1ha2VmaWxlCShyZXZpc2lvbiA2MDAyMSkKKysrKyBNYWtlZmlsZQkod29ya2luZyBjb3B5KQor
QEAgLTEsMyArMSw0IEBACisrCisgTU9EVUxFUyA9IEphdmFTY3JpcHRDb3JlIEphdmFTY3JpcHRH
bHVlIFdlYkNvcmUgV2ViS2l0IFdlYktpdDIgV2ViS2l0VG9vbHMgCisKKyBhbGw6CitFTkQKKyAg
ICBleHBlY3RlZFJldHVybiA9PiBbCitbeworICAgIHN2bkNvbnZlcnRlZFRleHQgPT4gIDw8J0VO
RCcsICMgU2FtZSBhcyBpbnB1dCB0ZXh0CitJbmRleDogdGVzdF9maWxlLnN3ZgorPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQorQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCitzdm46bWlt
ZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCisKKworCitRMWRUQngwQUFBQjQyaXRn
NEdsZ1lKakd3TUREeU9ETXhNRHczNEdCZ1FFQUpQUURKQT09CisKK0VORAorICAgIGluZGV4UGF0
aCA9PiAidGVzdF9maWxlLnN3ZiIsCisgICAgaXNCaW5hcnkgPT4gMSwKKyAgICBpc1N2biA9PiAx
LAorfV0sCisiSW5kZXg6IE1ha2VmaWxlXG4iXSwKKyAgICBleHBlY3RlZE5leHRMaW5lID0+ICI9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09XG4iLAorfSwKKyMjIyMKKyMgUHJvcGVydHkgQ2hhbmdlczogRmlsZSBjaGFuZ2Ug
d2l0aCBwcm9wZXJ0eSBjaGFuZ2UKKyMjCit7CisgICAgIyBOZXcgdGVzdAorICAgIGRpZmZOYW1l
ID0+ICJTVk46IGZpbGUgY2hhbmdlIGRpZmYgd2l0aCBwcm9wZXJ0eSBjaGFuZ2UsIGZvbGxvd2Vk
IGJ5IHByb3BlcnR5IGNoYW5nZSBkaWZmIiwKKyAgICBpbnB1dFRleHQgPT4gPDwnRU5EJywKK0lu
ZGV4OiBNYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIE1ha2VmaWxlCShyZXZpc2lvbiA2MDAyMSkK
KysrKyBNYWtlZmlsZQkod29ya2luZyBjb3B5KQorQEAgLTEsMyArMSw0IEBACisrCisgTU9EVUxF
UyA9IEphdmFTY3JpcHRDb3JlIEphdmFTY3JpcHRHbHVlIFdlYkNvcmUgV2ViS2l0IFdlYktpdDIg
V2ViS2l0VG9vbHMgCisKKyBhbGw6CisKK1Byb3BlcnR5IGNoYW5nZXMgb246IE1ha2VmaWxlCitf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCitBZGRlZDogc3ZuOmV4ZWN1dGFibGUKKyAgICsgKgorCisKK1Byb3BlcnR5IGNo
YW5nZXMgb246IE1ha2VmaWxlLnNoYXJlZAorX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworRGVsZXRlZDogc3ZuOmV4ZWN1
dGFibGUKKyAgIC0gKgorRU5ECisgICAgZXhwZWN0ZWRSZXR1cm4gPT4gWworW3sKKyAgICBzdm5D
b252ZXJ0ZWRUZXh0ID0+ICA8PCdFTkQnLCAjIFNhbWUgYXMgaW5wdXQgdGV4dAorSW5kZXg6IE1h
a2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CistLS0gTWFrZWZpbGUJKHJldmlzaW9uIDYwMDIxKQorKysrIE1h
a2VmaWxlCSh3b3JraW5nIGNvcHkpCitAQCAtMSwzICsxLDQgQEAKKysKKyBNT0RVTEVTID0gSmF2
YVNjcmlwdENvcmUgSmF2YVNjcmlwdEdsdWUgV2ViQ29yZSBXZWJLaXQgV2ViS2l0MiBXZWJLaXRU
b29scyAKKworIGFsbDoKKworCisKK0VORAorICAgIGV4ZWN1dGFibGVCaXREZWx0YSA9PiAxLAor
ICAgIGluZGV4UGF0aCA9PiAiTWFrZWZpbGUiLAorICAgIGlzU3ZuID0+IDEsCisgICAgc291cmNl
UmV2aXNpb24gPT4gIjYwMDIxIiwKK31dLAorIlByb3BlcnR5IGNoYW5nZXMgb246IE1ha2VmaWxl
LnNoYXJlZFxuIl0sCisgICAgZXhwZWN0ZWROZXh0TGluZSA9PiAiX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1xuIiwKK30s
Cit7CisgICAgIyBOZXcgdGVzdAorICAgIGRpZmZOYW1lID0+ICJTVk46IGZpbGUgY2hhbmdlIGRp
ZmYgd2l0aCBwcm9wZXJ0eSBjaGFuZ2UsIGZvbGxvd2VkIGJ5IGZpbGUgY2hhbmdlIGRpZmYiLAor
ICAgIGlucHV0VGV4dCA9PiA8PCdFTkQnLAorSW5kZXg6IE1ha2VmaWxlCis9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cist
LS0gTWFrZWZpbGUJKHJldmlzaW9uIDYwMDIxKQorKysrIE1ha2VmaWxlCSh3b3JraW5nIGNvcHkp
CitAQCAtMSwzICsxLDQgQEAKKysKKyBNT0RVTEVTID0gSmF2YVNjcmlwdENvcmUgSmF2YVNjcmlw
dEdsdWUgV2ViQ29yZSBXZWJLaXQgV2ViS2l0MiBXZWJLaXRUb29scyAKKworIGFsbDoKKworUHJv
cGVydHkgY2hhbmdlcyBvbjogTWFrZWZpbGUKK19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KK05hbWU6IHN2bjpleGVjdXRh
YmxlCisgICAtICoKKworSW5kZXg6IE1ha2VmaWxlLnNoYXJlZAorPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIE1h
a2VmaWxlLnNoYXJlZAkocmV2aXNpb24gNjAwMjEpCisrKysgTWFrZWZpbGUuc2hhcmVkCSh3b3Jr
aW5nIGNvcHkpCitAQCAtMSwzICsxLDQgQEAKKysKK1NDUklQVFNfUEFUSCA/PSAuLi9XZWJLaXRU
b29scy9TY3JpcHRzCitYQ09ERV9PUFRJT05TID0gYHBlcmwgLUkkKFNDUklQVFNfUEFUSCkgLU13
ZWJraXRkaXJzIC1lICdwcmludCBYY29kZU9wdGlvblN0cmluZygpJ2AgJChBUkdTKQorRU5ECisg
ICAgZXhwZWN0ZWRSZXR1cm4gPT4gWworW3sKKyAgICBzdm5Db252ZXJ0ZWRUZXh0ID0+ICA8PCdF
TkQnLCAjIFNhbWUgYXMgaW5wdXQgdGV4dAorSW5kZXg6IE1ha2VmaWxlCis9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cist
LS0gTWFrZWZpbGUJKHJldmlzaW9uIDYwMDIxKQorKysrIE1ha2VmaWxlCSh3b3JraW5nIGNvcHkp
CitAQCAtMSwzICsxLDQgQEAKKysKKyBNT0RVTEVTID0gSmF2YVNjcmlwdENvcmUgSmF2YVNjcmlw
dEdsdWUgV2ViQ29yZSBXZWJLaXQgV2ViS2l0MiBXZWJLaXRUb29scyAKKworIGFsbDoKKworCitF
TkQKKyAgICBleGVjdXRhYmxlQml0RGVsdGEgPT4gLTEsCisgICAgaW5kZXhQYXRoID0+ICJNYWtl
ZmlsZSIsCisgICAgaXNTdm4gPT4gMSwKKyAgICBzb3VyY2VSZXZpc2lvbiA9PiAiNjAwMjEiLAor
fV0sCisiSW5kZXg6IE1ha2VmaWxlLnNoYXJlZFxuIl0sCisgICAgZXhwZWN0ZWROZXh0TGluZSA9
PiAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PVxuIiwKK30sCisjIyMjCiAjICAgIEdpdCB0ZXN0IGNhc2VzCiAjIwogewpA
QCAtNDUxLDYgKzg0Miw3IEBAIEVORAogICAgIGluZGV4UGF0aCA9PiAiZm9vX25ldyIsCiB9LAog
eworICAgIGV4ZWN1dGFibGVCaXREZWx0YSA9PiAxLAogICAgIGluZGV4UGF0aCA9PiAiZm9vX25l
dyIsCiAgICAgaXNHaXQgPT4gMSwKICAgICBzdm5Db252ZXJ0ZWRUZXh0ID0+IDw8J0VORCcsCg==
</data>
<flag name="review"
          id="42093"
          type_id="1"
          status="-"
          setter="ddkilzer"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61128</attachid>
            <date>2010-07-09 17:56:24 -0700</date>
            <delta_ts>2010-07-11 10:24:19 -0700</delta_ts>
            <desc>Patch with unit tests</desc>
            <filename>Bug39409.patch</filename>
            <type>text/plain</type>
            <size>22373</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDYyOTU4KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTAtMDctMDkgIERhbmllbCBCYXRlcyAgPGRi
YXRlc0ByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEVuYWJsZSBleGVjdXRhYmxlIHN1cHBvcnQgZm9yIHN2bi1hcHBseSBhbmQgc3ZuLXVu
YXBwbHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5
NDA5CisKKyAgICAgICAgQ29ubmVjdCB1cCB0aGUgR2l0IGFuZCBTVk4gZXhlY3V0YWJsZSBiaXQg
c3VwcG9ydCBpbiBwYXJzZURpZmYoKSBzbyB0aGF0CisgICAgICAgIGV4ZWN1dGFibGUgYml0IGNo
YW5nZXMgYXJlIHByb3BhZ2F0ZWQgdmlhIHRoZSByZXR1cm5lZCBkaWZmIGhhc2ggdG8gdGhlCisg
ICAgICAgIHBhdGNoIGZ1bmN0aW9uIGluIHN2bi1hcHBseSBhbmQgc3ZuLXVuYXBwbHkuCisKKyAg
ICAgICAgKiBTY3JpcHRzL1ZDU1V0aWxzLnBtOgorICAgICAgICAgIC0gTW9kaWZpZWQgcGFyc2VE
aWZmKCkgdG8gY2FsbCBwYXJzZVN2bkRpZmZQcm9wZXJ0aWVzIHdoZW4KKyAgICAgICAgICAgIGl0
IGZpbmRzIHRoZSBzdGFydCBvZiBhbiBTVk4gcHJvcGVydHkgY2hhbmdlIGRpZmYuCisgICAgICAg
ICAgLSBSZW1vdmVkIEZJWE1FIGNvbW1lbnQgYWJvdmUgcGFyc2VTdm5EaWZmUHJvcGVydGllcygp
IHNpbmNlCisgICAgICAgICAgICBpdCBpcyBub3cgYmVpbmcgdXNlZCBieSBwYXJzZURpZmYoKS4K
KyAgICAgICAgICAtIEV4cG9ydCBtZXRob2Qgc2NtVG9nZ2xlRXhlY3V0YWJsZUJpdCgpIG5vdyB0
aGF0IHdlIGFkZGVkIHRoZQorICAgICAgICAgICAgZXhlY3V0YWJsZUJpdERlbHRhIGhhc2gga2V5
LiAoVGhpcyBzaG91bGQgaGF2ZSBiZWVuIGV4cG9ydGVkCisgICAgICAgICAgICB3aGVuIHdlIGFk
ZGVkIHRoaXMgZnVuY3Rpb24gaW4gQnVnICMzODQyMyA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM4NDIzPikuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRwZXJsL1ZD
U1V0aWxzX3VuaXR0ZXN0L3BhcnNlRGlmZi5wbDoKKyAgICAgICAgICAtIFVwZGF0ZWQgcmVzdWx0
cyBmb3I6CisgICAgICAgICAgICAicmVuYW1lICh3aXRoIGV4ZWN1dGFibGUgYml0IGNoYW5nZSki
CisgICAgICAgICAgICAgIC0gVGVzdCB2YWx1ZSBvZiBleGVjdXRhYmxlQml0RGVsdGEgKG5vdyB0
aGF0IHdlIGhhdmUgc3VwcG9ydCkuCisgICAgICAgICAgICAiU1ZOOiBiaW5hcnkgZmlsZSAoaXNC
aW5hcnkgdHJ1ZSkiCisgICAgICAgICAgICAgIC0gUmVtb3ZlIHRoZSBwcm9wZXJ0eSBjaGFuZ2Ug
ZGlmZiBmcm9tIHN2bkNvbnZlcnRlZFRleHQuIFdlIHBsYW4KKyAgICAgICAgICAgICAgICB0byBy
ZW1vdmUgc3ZuQ29udmVydGVkVGV4dCBpbiB0aGUgZnV0dXJlLiBTbywgd2UgZGVjaWRlZAorICAg
ICAgICAgICAgICAgIGFnYWluc3QgYWRkaW5nIHN1Y2ggc3VwcG9ydCB0byBhbnkgbmV3IGNvZGUs
IHN1Y2ggYXMgdGhlCisgICAgICAgICAgICAgICAgcHJvcGVydHkgcGFyc2luZyByb3V0aW5lcy4g
VGhlcmVmb3JlLCB3ZSBkbyBub3Qga2VlcCBTVk4KKyAgICAgICAgICAgICAgICBjb252ZXJ0ZWQg
dGV4dCBmb3IgcHJvcGVydHkgY2hhbmdlIGRpZmZzLgorICAgICAgICAgIC0gQWRkZWQgdW5pdCB0
ZXN0czoKKyAgICAgICAgICAgICJTVk46IGZpbGUgY2hhbmdlIGRpZmYgd2l0aCBwcm9wZXJ0eSBj
aGFuZ2UgZGlmZiIKKyAgICAgICAgICAgICJTVk46IGZpbGUgY2hhbmdlIGRpZmYsIGZvbGxvd2Vk
IGJ5IHByb3BlcnR5IGNoYW5nZSBkaWZmIG9uIGRpZmZlcmVudCBmaWxlIgorICAgICAgICAgICAg
IlNWTjogcHJvcGVydHkgZGlmZiwgZm9sbG93ZWQgYnkgZmlsZSBjaGFuZ2UgZGlmZiIKKyAgICAg
ICAgICAgICJTVk46IGNvcGllZCBmaWxlIHdpdGggcHJvcGVydHkgY2hhbmdlIgorICAgICAgICAg
ICAgIlNWTjogdHdvIGNvbnNlY3V0aXZlIHByb3BlcnR5IGRpZmZzIgorICAgICAgICAgICAgIlNW
TjogYmluYXJ5IGZpbGUgd2l0aCBleGVjdXRhYmxlIGJpdCBjaGFuZ2UiCisgICAgICAgICAgICAi
U1ZOOiBiaW5hcnkgZmlsZSBmb2xsb3dlZCBieSBwcm9wZXJ0eSBjaGFuZ2Ugb24gZGlmZmVyZW50
IGZpbGUiCisgICAgICAgICAgICAiU1ZOOiBiaW5hcnkgZmlsZSBmb2xsb3dlZCBieSBmaWxlIGNo
YW5nZSBvbiBkaWZmZXJlbnQgZmlsZSIKKyAgICAgICAgICAgICJTVk46IGZpbGUgY2hhbmdlIGRp
ZmYgd2l0aCBwcm9wZXJ0eSBjaGFuZ2UsIGZvbGxvd2VkIGJ5IHByb3BlcnR5IGNoYW5nZSBkaWZm
IgorICAgICAgICAgICAgIlNWTjogZmlsZSBjaGFuZ2UgZGlmZiB3aXRoIHByb3BlcnR5IGNoYW5n
ZSwgZm9sbG93ZWQgYnkgZmlsZSBjaGFuZ2UgZGlmZiIKKwogMjAxMC0wNy0wOSAgS2VubmV0aCBS
b2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoLmNocmlzdGlhbnNlbkBvcGVuYm9zc2Eub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgpJbmRleDogV2ViS2l0VG9vbHMv
U2NyaXB0cy9WQ1NVdGlscy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL1ZD
U1V0aWxzLnBtCShyZXZpc2lvbiA2Mjk1OCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRp
bHMucG0JKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDcgQEAgQkVHSU4gewogICAgICAgICAm
cGF0aFJlbGF0aXZlVG9TVk5SZXBvc2l0b3J5Um9vdEZvclBhdGgKICAgICAgICAgJnByZXBhcmVQ
YXJzZWRQYXRjaAogICAgICAgICAmcnVuUGF0Y2hDb21tYW5kCisgICAgICAgICZzY21Ub2dnbGVF
eGVjdXRhYmxlQml0CiAgICAgICAgICZzZXRDaGFuZ2VMb2dEYXRlQW5kUmV2aWV3ZXIKICAgICAg
ICAgJnN2blJldmlzaW9uRm9yRGlyZWN0b3J5CiAgICAgICAgICZzdm5TdGF0dXMKQEAgLTkwLDYg
KzkxLDcgQEAgbXkgJGNoYW5nZUxvZ1RpbWVab25lID0gIlBTVDhQRFQiOwogCiBteSAkZ2l0RGlm
ZlN0YXJ0UmVnRXggPSBxciNeZGlmZiAtLWdpdCAoXHcvKT8oLispIChcdy8pPyhbXlxyXG5dKykj
OwogbXkgJHN2bkRpZmZTdGFydFJlZ0V4ID0gcXIjXkluZGV4OiAoW15cclxuXSspIzsKK215ICRz
dm5Qcm9wZXJ0aWVzU3RhcnRSZWdFeCA9IHFyI15Qcm9wZXJ0eSBjaGFuZ2VzIG9uOiAoW15cclxu
XSspIzsgIyAkMSBpcyBub3JtYWxseSB0aGUgc2FtZSBhcyB0aGUgaW5kZXggcGF0aC4KIG15ICRz
dm5Qcm9wZXJ0eVN0YXJ0UmVnRXggPSBxciNeKE1vZGlmaWVkfE5hbWV8QWRkZWR8RGVsZXRlZCk6
IChbXlxyXG5dKykjOyAjICQyIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eS4KIG15ICRzdm5Q
cm9wZXJ0eVZhbHVlU3RhcnRSZWdFeCA9IHFyI14gICAoXCt8LSkgKFteXHJcbl0rKSM7ICMgJDIg
aXMgdGhlIHN0YXJ0IG9mIHRoZSBwcm9wZXJ0eSdzIHZhbHVlICh3aGljaCBtYXkgc3BhbiBtdWx0
aXBsZSBsaW5lcykuCiAKQEAgLTczNSw2ICs3MzcsOCBAQCBzdWIgcGFyc2VEaWZmSGVhZGVyKCQk
KQogIwogIyAgIGNvcGllZEZyb21QYXRoOiB0aGUgcGF0aCBmcm9tIHdoaWNoIHRoZSBmaWxlIHdh
cyBjb3BpZWQgaWYgdGhlIGRpZmYKICMgICAgICAgICAgICAgICAgICAgaXMgYSBjb3B5LgorIyAg
IGV4ZWN1dGFibGVCaXREZWx0YTogdGhlIHZhbHVlIDEgb3IgLTEgaWYgdGhlIGV4ZWN1dGFibGUg
Yml0IHdhcyBhZGRlZCBvcgorIyAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCBmcm9tIHRo
ZSB0YXJnZXQgZmlsZSwgcmVzcGVjdGl2ZWx5LgogIyAgIGluZGV4UGF0aDogdGhlIHBhdGggb2Yg
dGhlIHRhcmdldCBmaWxlLiAgRm9yIFNWTi1mb3JtYXR0ZWQgZGlmZnMsCiAjICAgICAgICAgICAg
ICB0aGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBwYXRoIGluIHRoZSAiSW5kZXg6IiBsaW5lLgogIyAg
IGlzQmluYXJ5OiB0aGUgdmFsdWUgMSBpZiB0aGUgZGlmZiBpcyBmb3IgYSBiaW5hcnkgZmlsZS4K
QEAgLTc1NCw2ICs3NTgsMTMgQEAgc3ViIHBhcnNlRGlmZkhlYWRlcigkJCkKICMKICMgVGhpcyBz
dWJyb3V0aW5lIHByZXNlcnZlcyBhbnkgbGVhZGluZyBqdW5rIGVuY291bnRlcmVkIGJlZm9yZSB0
aGUgaGVhZGVyLgogIworIyBDb21wb3NpdGlvbiBvZiBhbiBTVk4gZGlmZgorIworIyBUaGVyZSBh
cmUgdGhyZWUgcGFydHMgdG8gYW4gU1ZOIGRpZmY6IHRoZSBoZWFkZXIsIHRoZSBwcm9wZXJ0eSBj
aGFuZ2UsIGFuZAorIyB0aGUgYmluYXJ5IGNvbnRlbnRzLCBpbiB0aGF0IG9yZGVyLiBFaXRoZXIg
dGhlIGhlYWRlciBvciB0aGUgcHJvcGVydHkgY2hhbmdlCisjIG1heSBiZSBvbW1pdHRlZCwgYnV0
IG5vdCBib3RoLiBJZiB0aGVyZSBhcmUgYmluYXJ5IGNoYW5nZXMsIHRoZW4geW91IGFsd2F5cwor
IyBoYXZlIGFsbCB0aHJlZS4KKyMKICMgQXJnczoKICMgICAkZmlsZUhhbmRsZTogYSBmaWxlIGhh
bmRsZSBhZHZhbmNlZCB0byB0aGUgZmlyc3QgbGluZSBvZiB0aGUgbmV4dAogIyAgICAgICAgICAg
ICAgICBoZWFkZXIgYmxvY2suIExlYWRpbmcganVuayBpcyBva2F5LgpAQCAtNzczLDYgKzc4NCw3
IEBAIHN1YiBwYXJzZURpZmYoJCQpCiAgICAgbXkgJGhlYWRlclN0YXJ0UmVnRXggPSAkc3ZuRGlm
ZlN0YXJ0UmVnRXg7ICMgU1ZOLXN0eWxlIGhlYWRlciBmb3IgdGhlIGRlZmF1bHQKIAogICAgIG15
ICRoZWFkZXJIYXNoUmVmOyAjIExhc3QgaGVhZGVyIGZvdW5kLCBhcyByZXR1cm5lZCBieSBwYXJz
ZURpZmZIZWFkZXIoKS4KKyAgICBteSAkc3ZuUHJvcGVydGllc0hhc2hSZWY7ICMgTGFzdCBTVk4g
cHJvcGVydGllcyBkaWZmIGZvdW5kLCBhcyByZXR1cm5lZCBieSBwYXJzZVN2bkRpZmZQcm9wZXJ0
aWVzKCkuCiAgICAgbXkgJHN2blRleHQ7CiAgICAgd2hpbGUgKGRlZmluZWQoJGxpbmUpKSB7CiAg
ICAgICAgIGlmICghJGhlYWRlckhhc2hSZWYgJiYgKCRsaW5lID1+ICRnaXREaWZmU3RhcnRSZWdF
eCkpIHsKQEAgLTc4Miw2ICs3OTQsMTggQEAgc3ViIHBhcnNlRGlmZigkJCkKICAgICAgICAgICAg
ICRoZWFkZXJTdGFydFJlZ0V4ID0gJGdpdERpZmZTdGFydFJlZ0V4OwogICAgICAgICB9CiAKKyAg
ICAgICAgaWYgKCRsaW5lID1+ICRzdm5Qcm9wZXJ0aWVzU3RhcnRSZWdFeCkgeworICAgICAgICAg
ICAgbXkgJHByb3BlcnR5UGF0aCA9ICQxOworICAgICAgICAgICAgaWYgKCRzdm5Qcm9wZXJ0aWVz
SGFzaFJlZiB8fCAkaGVhZGVySGFzaFJlZiAmJiAoJHByb3BlcnR5UGF0aCBuZSAkaGVhZGVySGFz
aFJlZi0+e2luZGV4UGF0aH0pKSB7CisgICAgICAgICAgICAgICAgIyBUaGlzIGlzIHRoZSBzdGFy
dCBvZiB0aGUgc2Vjb25kIGRpZmYgaW4gdGhlIHdoaWxlIGxvb3AsIHdoaWNoIGhhcHBlbnMgdG8K
KyAgICAgICAgICAgICAgICAjIGJlIGEgcHJvcGVydHkgZGlmZi4gIElmICRzdm5Qcm9wZXJ0aWVz
SGFzUmVmIGlzIGRlZmluZWQsIHRoZW4gdGhpcyBpcyB0aGUKKyAgICAgICAgICAgICAgICAjIHNl
Y29uZCBjb25zZWN1dGl2ZSBwcm9wZXJ0eSBkaWZmLCBvdGhlcndpc2UgaXQncyB0aGUgc3RhcnQg
b2YgYSBwcm9wZXJ0eQorICAgICAgICAgICAgICAgICMgZGlmZiBmb3IgYSBmaWxlIHRoYXQgb25s
eSBoYXMgcHJvcGVydHkgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICBsYXN0OworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgKCRzdm5Qcm9wZXJ0aWVzSGFzaFJlZiwgJGxpbmUpID0gcGFyc2VT
dm5EaWZmUHJvcGVydGllcygkZmlsZUhhbmRsZSwgJGxpbmUpOworICAgICAgICAgICAgbmV4dDsK
KyAgICAgICAgfQogICAgICAgICBpZiAoJGxpbmUgIX4gJGhlYWRlclN0YXJ0UmVnRXgpIHsKICAg
ICAgICAgICAgICMgVGhlbiB3ZSBhcmUgaW4gdGhlIGJvZHkgb2YgdGhlIGRpZmYuCiAgICAgICAg
ICAgICAkc3ZuVGV4dCAuPSAkbGluZTsKQEAgLTc4OSw4ICs4MTMsOSBAQCBzdWIgcGFyc2VEaWZm
KCQkKQogICAgICAgICAgICAgbmV4dDsKICAgICAgICAgfSAjIE90aGVyd2lzZSwgd2UgZm91bmQg
YSBkaWZmIGhlYWRlci4KIAotICAgICAgICBpZiAoJGhlYWRlckhhc2hSZWYpIHsKLSAgICAgICAg
ICAgICMgVGhlbiB0aGlzIGlzIHRoZSBzZWNvbmQgZGlmZiBoZWFkZXIgb2YgdGhpcyB3aGlsZSBs
b29wLgorICAgICAgICBpZiAoJHN2blByb3BlcnRpZXNIYXNoUmVmIHx8ICRoZWFkZXJIYXNoUmVm
KSB7CisgICAgICAgICAgICAjIFRoZW4gZWl0aGVyIHdlIGp1c3QgcHJvY2Vzc2VkIGFuIFNWTiBw
cm9wZXJ0eSBjaGFuZ2Ugb3IgdGhpcworICAgICAgICAgICAgIyBpcyB0aGUgc3RhcnQgb2YgdGhl
IHNlY29uZCBkaWZmIGhlYWRlciBvZiB0aGlzIHdoaWxlIGxvb3AuCiAgICAgICAgICAgICBsYXN0
OwogICAgICAgICB9CiAKQEAgLTgxMiwxMiArODM3LDI5IEBAIHN1YiBwYXJzZURpZmYoJCQpCiAg
ICAgICAgICRjb3B5SGFzaHtjb3BpZWRGcm9tUGF0aH0gPSAkaGVhZGVySGFzaFJlZi0+e2NvcGll
ZEZyb21QYXRofTsKICAgICAgICAgJGNvcHlIYXNoe2luZGV4UGF0aH0gPSAkaGVhZGVySGFzaFJl
Zi0+e2luZGV4UGF0aH07CiAgICAgICAgICRjb3B5SGFzaHtzb3VyY2VSZXZpc2lvbn0gPSAkaGVh
ZGVySGFzaFJlZi0+e3NvdXJjZVJldmlzaW9ufSBpZiAkaGVhZGVySGFzaFJlZi0+e3NvdXJjZVJl
dmlzaW9ufTsKKyAgICAgICAgaWYgKCRoZWFkZXJIYXNoUmVmLT57aXNTdm59ICYmICRzdm5Qcm9w
ZXJ0aWVzSGFzaFJlZi0+e2V4ZWN1dGFibGVCaXREZWx0YX0pIHsKKyAgICAgICAgICAgICRjb3B5
SGFzaHtleGVjdXRhYmxlQml0RGVsdGF9ID0gJHN2blByb3BlcnRpZXNIYXNoUmVmLT57ZXhlY3V0
YWJsZUJpdERlbHRhfTsKKyAgICAgICAgfQogICAgICAgICBwdXNoIEBkaWZmSGFzaFJlZnMsIFwl
Y29weUhhc2g7CiAgICAgfQotICAgIGlmICghJGhlYWRlckhhc2hSZWYtPntjb3BpZWRGcm9tUGF0
aH0gfHwgJGhlYWRlckhhc2hSZWYtPntpc0NvcHlXaXRoQ2hhbmdlc30pIHsKKworICAgICMgTm90
ZSwgdGhlIG9yZGVyIG9mIGV2YWx1YXRpb24gZm9yIHRoZSBmb2xsb3dpbmcgaWYgY29uZGl0aW9u
YWwgaGFzIGJlZW4gZXhwbGljaXRseSBjaG9zZW4gc28gdGhhdAorICAgICMgaXQgZXZhbHVhdGVz
IHRvIGZhbHNlIHdoZW4gdGhlcmUgaXMgbm8gaGVhZGVySGFzaFJlZiAoZS5nLiBhIHByb3BlcnR5
IGNoYW5nZSBkaWZmIGZvciBhIGZpbGUgdGhhdAorICAgICMgb25seSBoYXMgcHJvcGVydHkgY2hh
bmdlcykuCisgICAgaWYgKCRoZWFkZXJIYXNoUmVmLT57aXNDb3B5V2l0aENoYW5nZXN9IHx8ICgl
JGhlYWRlckhhc2hSZWYgJiYgISRoZWFkZXJIYXNoUmVmLT57Y29waWVkRnJvbVBhdGh9KSkgewog
ICAgICAgICAjIFRoZW4gYWRkIHRoZSB1c3VhbCBmaWxlIG1vZGlmaWNhdGlvbi4KICAgICAgICAg
bXkgJWRpZmZIYXNoOwotICAgICAgICAjIEZJWE1FOiBBZGQgZXhlY3V0YWJsZUJpdERlbHRhIGFz
IGEga2V5LgorICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgZXhwYW5kIHRoaXMgY29kZSB0byBz
dXBwb3J0IG90aGVyIHByb3BlcnRpZXMuICBJbiB0aGUgZnV0dXJlLAorICAgICAgICAjICAgICAg
ICBwYXJzZVN2bkRpZmZQcm9wZXJ0aWVzIG1heSByZXR1cm4gYSBoYXNoIHdob3NlIGtleXMgYXJl
IHRoZSBwcm9wZXJ0aWVzLgorICAgICAgICBpZiAoJGhlYWRlckhhc2hSZWYtPntpc1N2bn0pIHsK
KyAgICAgICAgICAgICMgU1ZOIHJlY29yZHMgdGhlIGNoYW5nZSB0byB0aGUgZXhlY3V0YWJsZSBi
aXQgaW4gYSBzZXBhcmF0ZSBwcm9wZXJ0eSBjaGFuZ2UgZGlmZgorICAgICAgICAgICAgIyB0aGF0
IGZvbGxvd3MgdGhlIGNvbnRlbnRzIG9mIHRoZSBkaWZmLCBleGNlcHQgZm9yIGJpbmFyeSBkaWZm
cy4gIEZvciBiaW5hcnkKKyAgICAgICAgICAgICMgZGlmZnMsIHRoZSBwcm9wZXJ0eSBjaGFuZ2Ug
ZGlmZiBmb2xsb3dzIHRoZSBkaWZmIGhlYWRlci4KKyAgICAgICAgICAgICRkaWZmSGFzaHtleGVj
dXRhYmxlQml0RGVsdGF9ID0gJHN2blByb3BlcnRpZXNIYXNoUmVmLT57ZXhlY3V0YWJsZUJpdERl
bHRhfSBpZiAkc3ZuUHJvcGVydGllc0hhc2hSZWYtPntleGVjdXRhYmxlQml0RGVsdGF9OworICAg
ICAgICB9IGVsc2lmICgkaGVhZGVySGFzaFJlZi0+e2lzR2l0fSkgeworICAgICAgICAgICAgIyBH
aXQgcmVjb3JkcyB0aGUgY2hhbmdlIHRvIHRoZSBleGVjdXRhYmxlIGJpdCBpbiB0aGUgaGVhZGVy
IG9mIGEgZGlmZi4KKyAgICAgICAgICAgICRkaWZmSGFzaHtleGVjdXRhYmxlQml0RGVsdGF9ID0g
JGhlYWRlckhhc2hSZWYtPntleGVjdXRhYmxlQml0RGVsdGF9IGlmICRoZWFkZXJIYXNoUmVmLT57
ZXhlY3V0YWJsZUJpdERlbHRhfTsKKyAgICAgICAgfQogICAgICAgICAkZGlmZkhhc2h7aW5kZXhQ
YXRofSA9ICRoZWFkZXJIYXNoUmVmLT57aW5kZXhQYXRofTsKICAgICAgICAgJGRpZmZIYXNoe2lz
QmluYXJ5fSA9ICRoZWFkZXJIYXNoUmVmLT57aXNCaW5hcnl9IGlmICRoZWFkZXJIYXNoUmVmLT57
aXNCaW5hcnl9OwogICAgICAgICAkZGlmZkhhc2h7aXNEZWxldGlvbn0gPSAkaGVhZGVySGFzaFJl
Zi0+e2lzRGVsZXRpb259IGlmICRoZWFkZXJIYXNoUmVmLT57aXNEZWxldGlvbn07CkBAIC04MzEs
MTAgKzg3MywyNCBAQCBzdWIgcGFyc2VEaWZmKCQkKQogICAgICAgICB9CiAgICAgICAgICMgRklY
TUU6IFJlbW92ZSB0aGUgbmVlZCBmb3Igc3ZuQ29udmVydGVkVGV4dC4gIFNlZSB0aGUgJWRpZmZI
YXNoCiAgICAgICAgICMgICAgICAgIGNvZGUgY29tbWVudHMgYWJvdmUgZm9yIG1vcmUgaW5mb3Jt
YXRpb24uCi0gICAgICAgICRkaWZmSGFzaHtzdm5Db252ZXJ0ZWRUZXh0fSA9ICRzdm5UZXh0Owor
ICAgICAgICAjCisgICAgICAgICMgTm90ZSwgd2UgbWF5IG5vdCBhbHdheXMgaGF2ZSBTVk4gY29u
dmVydGVkIHRleHQgc2luY2Ugd2UgaW50ZW5kCisgICAgICAgICMgdG8gZGVwcmVjYXRlIGl0IGlu
IHRoZSBmdXR1cmUuICBGb3IgZXhhbXBsZSwgYSBwcm9wZXJ0eSBjaGFuZ2UKKyAgICAgICAgIyBk
aWZmIGZvciBhIGZpbGUgdGhhdCBvbmx5IGhhcyBwcm9wZXJ0eSBjaGFuZ2VzIHdpbGwgbm90IHJl
dHVybgorICAgICAgICAjIGFueSBTVk4gY29udmVydGVkIHRleHQuCisgICAgICAgICRkaWZmSGFz
aHtzdm5Db252ZXJ0ZWRUZXh0fSA9ICRzdm5UZXh0IGlmICRzdm5UZXh0OwogICAgICAgICBwdXNo
IEBkaWZmSGFzaFJlZnMsIFwlZGlmZkhhc2g7CiAgICAgfQogCisgICAgaWYgKCElJGhlYWRlckhh
c2hSZWYgJiYgJHN2blByb3BlcnRpZXNIYXNoUmVmKSB7CisgICAgICAgICMgQSBwcm9wZXJ0eSBj
aGFuZ2UgZGlmZiBmb3IgYSBmaWxlIHRoYXQgb25seSBoYXMgcHJvcGVydHkgY2hhbmdlcy4KKyAg
ICAgICAgbXkgJXByb3BlcnR5Q2hhbmdlSGFzaDsKKyAgICAgICAgJHByb3BlcnR5Q2hhbmdlSGFz
aHtleGVjdXRhYmxlQml0RGVsdGF9ID0gJHN2blByb3BlcnRpZXNIYXNoUmVmLT57ZXhlY3V0YWJs
ZUJpdERlbHRhfSBpZiAkc3ZuUHJvcGVydGllc0hhc2hSZWYtPntleGVjdXRhYmxlQml0RGVsdGF9
OworICAgICAgICAkcHJvcGVydHlDaGFuZ2VIYXNoe2luZGV4UGF0aH0gPSAkc3ZuUHJvcGVydGll
c0hhc2hSZWYtPntwcm9wZXJ0eVBhdGh9OworICAgICAgICAkcHJvcGVydHlDaGFuZ2VIYXNoe2lz
U3ZufSA9IDE7CisgICAgICAgIHB1c2ggQGRpZmZIYXNoUmVmcywgXCVwcm9wZXJ0eUNoYW5nZUhh
c2g7CisgICAgfQorCiAgICAgcmV0dXJuIChcQGRpZmZIYXNoUmVmcywgJGxpbmUpOwogfQogCkBA
IC04NTksMTkgKzkxNSwxNCBAQCBzdWIgcGFyc2VEaWZmKCQkKQogIyAgICAgZXhlY3V0YWJsZUJp
dERlbHRhOiB0aGUgdmFsdWUgMSBvciAtMSBpZiB0aGUgZXhlY3V0YWJsZSBiaXQgd2FzIGFkZGVk
IG9yCiAjICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQgZnJvbSB0aGUgdGFyZ2V0IGZp
bGUsIHJlc3BlY3RpdmVseS4KICMgICAkbGFzdFJlYWRMaW5lOiB0aGUgbGluZSBsYXN0IHJlYWQg
ZnJvbSAkZmlsZUhhbmRsZS4KLSMKLSMgRklYTUU6IFRoaXMgbWV0aG9kIGlzIHVudXNlZCBhcyBv
ZiAoMDUvMjIvMjAxMCkuICBXZSB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbgotIyAgICAgICAgYXMg
cGFydCBvZiBwYXJzaW5nIGEgZGlmZi4gIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM5NDA5Pi4KIHN1YiBwYXJzZVN2bkRpZmZQcm9wZXJ0aWVzKCQkKQogewog
ICAgIG15ICgkZmlsZUhhbmRsZSwgJGxpbmUpID0gQF87CiAKICAgICAkXyA9ICRsaW5lOwogCi0g
ICAgbXkgJHN2bkZvb3RlckRpZmZTdGFydFJlZ0V4ID0gcXIjUHJvcGVydHkgY2hhbmdlcyBvbjog
KFteXHJcbl0rKSM7ICMgJDEgaXMgbm9ybWFsbHkgdGhlIHNhbWUgYXMgdGhlIGluZGV4IHBhdGgu
Ci0KICAgICBteSAlZm9vdGVyOwotICAgIGlmICgvJHN2bkZvb3RlckRpZmZTdGFydFJlZ0V4Lykg
eworICAgIGlmICgvJHN2blByb3BlcnRpZXNTdGFydFJlZ0V4LykgewogICAgICAgICAkZm9vdGVy
e3Byb3BlcnR5UGF0aH0gPSAkMTsKICAgICB9IGVsc2UgewogICAgICAgICBkaWUoIkZhaWxlZCB0
byBmaW5kIHN0YXJ0IG9mIFNWTiBwcm9wZXJ0eSBjaGFuZ2UsIFwiUHJvcGVydHkgY2hhbmdlcyBv
biBcIjogXCIkX1wiIik7CkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvVkNT
VXRpbHNfdW5pdHRlc3QvcGFyc2VEaWZmLnBsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cGVybC9WQ1NVdGlsc191bml0dGVzdC9wYXJzZURpZmYucGwJKHJldmlzaW9u
IDYyOTU4KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL1ZDU1V0aWxzX3VuaXR0
ZXN0L3BhcnNlRGlmZi5wbAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTAgKzkxLDYgQEAgSW5kZXg6
IHRlc3RfZmlsZS5zd2YKIENhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0
eXBlLgogc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQogCi1Qcm9wZXJ0
eSBjaGFuZ2VzIG9uOiB0ZXN0X2ZpbGUuc3dmCi1fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCi1OYW1lOiBzdm46bWltZS10
eXBlCi0gICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQogCiAKIFExZFRCeDBBQUFCNDJpdGc0
R2xnWUpqR3dNRER5T0RNeE1EdzM0R0JnUUVBSlBRREpBPT0KQEAgLTIzNiw2ICsyMzIsNDAxIEBA
IHVuZGVmXSwKICAgICBleHBlY3RlZE5leHRMaW5lID0+IHVuZGVmLAogfSwKICMjIyMKKyMgUHJv
cGVydHkgQ2hhbmdlczogU2ltcGxlCisjIworeworICAgICMgTmV3IHRlc3QKKyAgICBkaWZmTmFt
ZSA9PiAiU1ZOOiBmaWxlIGNoYW5nZSBkaWZmIHdpdGggcHJvcGVydHkgY2hhbmdlIGRpZmYiLAor
ICAgIGlucHV0VGV4dCA9PiA8PCdFTkQnLAorSW5kZXg6IE1ha2VmaWxlCis9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cist
LS0gTWFrZWZpbGUJKHJldmlzaW9uIDYwMDIxKQorKysrIE1ha2VmaWxlCSh3b3JraW5nIGNvcHkp
CitAQCAtMSwzICsxLDQgQEAKKysKKyBNT0RVTEVTID0gSmF2YVNjcmlwdENvcmUgSmF2YVNjcmlw
dEdsdWUgV2ViQ29yZSBXZWJLaXQgV2ViS2l0MiBXZWJLaXRUb29scyAKKworIGFsbDoKKworUHJv
cGVydHkgY2hhbmdlcyBvbjogTWFrZWZpbGUKK19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KK05hbWU6IHN2bjpleGVjdXRh
YmxlCisgICArICoKK0VORAorICAgIGV4cGVjdGVkUmV0dXJuID0+IFsKK1t7CisgICAgc3ZuQ29u
dmVydGVkVGV4dCA9PiAgPDwnRU5EJywgIyBTYW1lIGFzIGlucHV0IHRleHQKK0luZGV4OiBNYWtl
ZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQorLS0tIE1ha2VmaWxlCShyZXZpc2lvbiA2MDAyMSkKKysrKyBNYWtl
ZmlsZQkod29ya2luZyBjb3B5KQorQEAgLTEsMyArMSw0IEBACisrCisgTU9EVUxFUyA9IEphdmFT
Y3JpcHRDb3JlIEphdmFTY3JpcHRHbHVlIFdlYkNvcmUgV2ViS2l0IFdlYktpdDIgV2ViS2l0VG9v
bHMgCisKKyBhbGw6CisKK0VORAorICAgIGV4ZWN1dGFibGVCaXREZWx0YSA9PiAxLAorICAgIGlu
ZGV4UGF0aCA9PiAiTWFrZWZpbGUiLAorICAgIGlzU3ZuID0+IDEsCisgICAgc291cmNlUmV2aXNp
b24gPT4gIjYwMDIxIiwKK31dLAordW5kZWZdLAorICAgIGV4cGVjdGVkTmV4dExpbmUgPT4gdW5k
ZWYsCit9LAoreworICAgICMgTmV3IHRlc3QKKyAgICBkaWZmTmFtZSA9PiAiU1ZOOiBmaWxlIGNo
YW5nZSBkaWZmLCBmb2xsb3dlZCBieSBwcm9wZXJ0eSBjaGFuZ2UgZGlmZiBvbiBkaWZmZXJlbnQg
ZmlsZSIsCisgICAgaW5wdXRUZXh0ID0+IDw8J0VORCcsCitJbmRleDogTWFrZWZpbGUKKz09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KKy0tLSBNYWtlZmlsZQkocmV2aXNpb24gNjAwMjEpCisrKysgTWFrZWZpbGUJKHdvcmtp
bmcgY29weSkKK0BAIC0xLDMgKzEsNCBAQAorKworIE1PRFVMRVMgPSBKYXZhU2NyaXB0Q29yZSBK
YXZhU2NyaXB0R2x1ZSBXZWJDb3JlIFdlYktpdCBXZWJLaXQyIFdlYktpdFRvb2xzIAorCisgYWxs
OgorCitQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBNYWtlZmlsZS5zaGFyZWQKK19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KK05h
bWU6IHN2bjpleGVjdXRhYmxlCisgICArICoKK0VORAorICAgIGV4cGVjdGVkUmV0dXJuID0+IFsK
K1t7CisgICAgc3ZuQ29udmVydGVkVGV4dCA9PiAgPDwnRU5EJywgIyBTYW1lIGFzIGlucHV0IHRl
eHQKK0luZGV4OiBNYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIE1ha2VmaWxlCShyZXZpc2lvbiA2
MDAyMSkKKysrKyBNYWtlZmlsZQkod29ya2luZyBjb3B5KQorQEAgLTEsMyArMSw0IEBACisrCisg
TU9EVUxFUyA9IEphdmFTY3JpcHRDb3JlIEphdmFTY3JpcHRHbHVlIFdlYkNvcmUgV2ViS2l0IFdl
YktpdDIgV2ViS2l0VG9vbHMgCisKKyBhbGw6CisKK0VORAorICAgIGluZGV4UGF0aCA9PiAiTWFr
ZWZpbGUiLAorICAgIGlzU3ZuID0+IDEsCisgICAgc291cmNlUmV2aXNpb24gPT4gIjYwMDIxIiwK
K31dLAorIlByb3BlcnR5IGNoYW5nZXMgb246IE1ha2VmaWxlLnNoYXJlZFxuIl0sCisgICAgZXhw
ZWN0ZWROZXh0TGluZSA9PiAiX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX1xuIiwKK30sCit7CisgICAgIyBOZXcgdGVzdAor
ICAgIGRpZmZOYW1lID0+ICJTVk46IHByb3BlcnR5IGRpZmYsIGZvbGxvd2VkIGJ5IGZpbGUgY2hh
bmdlIGRpZmYiLAorICAgIGlucHV0VGV4dCA9PiA8PCdFTkQnLAorUHJvcGVydHkgY2hhbmdlcyBv
bjogTWFrZWZpbGUKK19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KK0RlbGV0ZWQ6IHN2bjpleGVjdXRhYmxlCisgICAtICoK
KworSW5kZXg6IE1ha2VmaWxlLnNoYXJlZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIE1ha2VmaWxlLnNoYXJl
ZAkocmV2aXNpb24gNjAwMjEpCisrKysgTWFrZWZpbGUuc2hhcmVkCSh3b3JraW5nIGNvcHkpCitA
QCAtMSwzICsxLDQgQEAKKysKK1NDUklQVFNfUEFUSCA/PSAuLi9XZWJLaXRUb29scy9TY3JpcHRz
CitYQ09ERV9PUFRJT05TID0gYHBlcmwgLUkkKFNDUklQVFNfUEFUSCkgLU13ZWJraXRkaXJzIC1l
ICdwcmludCBYY29kZU9wdGlvblN0cmluZygpJ2AgJChBUkdTKQorRU5ECisgICAgZXhwZWN0ZWRS
ZXR1cm4gPT4gWworW3sKKyAgICBleGVjdXRhYmxlQml0RGVsdGEgPT4gLTEsCisgICAgaW5kZXhQ
YXRoID0+ICJNYWtlZmlsZSIsCisgICAgaXNTdm4gPT4gMSwKK31dLAorIkluZGV4OiBNYWtlZmls
ZS5zaGFyZWRcbiJdLAorICAgIGV4cGVjdGVkTmV4dExpbmUgPT4gIj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIsCit9
LAoreworICAgICMgTmV3IHRlc3QKKyAgICBkaWZmTmFtZSA9PiAiU1ZOOiBjb3BpZWQgZmlsZSB3
aXRoIHByb3BlcnR5IGNoYW5nZSIsCisgICAgaW5wdXRUZXh0ID0+IDw8J0VORCcsCitJbmRleDog
Tk1ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CistLS0gTk1ha2VmaWxlCShyZXZpc2lvbiA2MDAyMSkJKGZy
b20gTWFrZWZpbGU6NjAwMjEpCisrKysgTk1ha2VmaWxlCSh3b3JraW5nIGNvcHkpCitAQCAtMCww
ICsxLDEgQEAKKytNT0RVTEVTID0gSmF2YVNjcmlwdENvcmUgSmF2YVNjcmlwdEdsdWUgV2ViQ29y
ZSBXZWJLaXQgV2ViS2l0MiBXZWJLaXRUb29scyAKKworUHJvcGVydHkgY2hhbmdlcyBvbjogTk1h
a2VmaWxlCitfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCitBZGRlZDogc3ZuOmV4ZWN1dGFibGUKKyAgICsgKgorRU5ECisg
ICAgZXhwZWN0ZWRSZXR1cm4gPT4gWworW3sKKyAgICBjb3BpZWRGcm9tUGF0aCA9PiAiTWFrZWZp
bGUiLAorICAgIGV4ZWN1dGFibGVCaXREZWx0YSA9PiAxLAorICAgIGluZGV4UGF0aCA9PiAiTk1h
a2VmaWxlIiwKKyAgICBzb3VyY2VSZXZpc2lvbiA9PiAiNjAwMjEiLAorfV0sCit1bmRlZl0sCisg
ICAgZXhwZWN0ZWROZXh0TGluZSA9PiB1bmRlZiwKK30sCit7CisgICAgIyBOZXcgdGVzdAorICAg
IGRpZmZOYW1lID0+ICJTVk46IHR3byBjb25zZWN1dGl2ZSBwcm9wZXJ0eSBkaWZmcyIsCisgICAg
aW5wdXRUZXh0ID0+IDw8J0VORCcsCitQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBNYWtlZmlsZQorX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXworQWRkZWQ6IHN2bjpleGVjdXRhYmxlCisgICArICoKKworCitQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBNYWtlZmlsZS5zaGFyZWQKK19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KK0FkZGVkOiBzdm46ZXhlY3V0YWJs
ZQorICAgKyAqCitFTkQKKyAgICBleHBlY3RlZFJldHVybiA9PiBbCitbeworICAgIGV4ZWN1dGFi
bGVCaXREZWx0YSA9PiAxLAorICAgIGluZGV4UGF0aCA9PiAiTWFrZWZpbGUiLAorICAgIGlzU3Zu
ID0+IDEsCit9XSwKKyJQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBNYWtlZmlsZS5zaGFyZWRcbiJdLAor
ICAgIGV4cGVjdGVkTmV4dExpbmUgPT4gIl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19cbiIsCit9LAorIyMjIworIyBQcm9w
ZXJ0eSBDaGFuZ2VzOiBCaW5hcnkgZmlsZXMKKyMjCit7CisgICAgIyBOZXcgdGVzdAorICAgIGRp
ZmZOYW1lID0+ICJTVk46IGJpbmFyeSBmaWxlIHdpdGggZXhlY3V0YWJsZSBiaXQgY2hhbmdlIiwK
KyAgICBpbnB1dFRleHQgPT4gPDwnRU5EJywKK0luZGV4OiB0ZXN0X2ZpbGUuc3dmCis9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CitDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4KK3N2bjpt
aW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KKworUHJvcGVydHkgY2hhbmdlcyBv
bjogdGVzdF9maWxlLnN3ZgorX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXworTmFtZTogc3ZuOm1pbWUtdHlwZQorICAgKyBh
cHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KK05hbWU6IHN2bjpleGVjdXRhYmxlCisgICArICoKKwor
CitRMWRUQngwQUFBQjQyaXRnNEdsZ1lKakd3TUREeU9ETXhNRHczNEdCZ1FFQUpQUURKQT09CitF
TkQKKyAgICBleHBlY3RlZFJldHVybiA9PiBbCitbeworICAgIHN2bkNvbnZlcnRlZFRleHQgPT4g
IDw8J0VORCcsICMgU2FtZSBhcyBpbnB1dCB0ZXh0CitJbmRleDogdGVzdF9maWxlLnN3ZgorPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQorQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCitz
dm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCisKKworCitRMWRUQngwQUFB
QjQyaXRnNEdsZ1lKakd3TUREeU9ETXhNRHczNEdCZ1FFQUpQUURKQT09CitFTkQKKyAgICBleGVj
dXRhYmxlQml0RGVsdGEgPT4gMSwKKyAgICBpbmRleFBhdGggPT4gInRlc3RfZmlsZS5zd2YiLAor
ICAgIGlzQmluYXJ5ID0+IDEsCisgICAgaXNTdm4gPT4gMSwKK31dLAordW5kZWZdLAorICAgIGV4
cGVjdGVkTmV4dExpbmUgPT4gdW5kZWYsCit9LAoreworICAgICMgTmV3IHRlc3QKKyAgICBkaWZm
TmFtZSA9PiAiU1ZOOiBiaW5hcnkgZmlsZSBmb2xsb3dlZCBieSBwcm9wZXJ0eSBjaGFuZ2Ugb24g
ZGlmZmVyZW50IGZpbGUiLAorICAgIGlucHV0VGV4dCA9PiA8PCdFTkQnLAorSW5kZXg6IHRlc3Rf
ZmlsZS5zd2YKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KK0Nhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJp
bmFyeSB0eXBlLgorc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQorCitQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiB0ZXN0X2ZpbGUuc3dmCitfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCitOYW1lOiBzdm46
bWltZS10eXBlCisgICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQorCisKK1ExZFRCeDBBQUFC
NDJpdGc0R2xnWUpqR3dNRER5T0RNeE1EdzM0R0JnUUVBSlBRREpBPT0KKworUHJvcGVydHkgY2hh
bmdlcyBvbjogTWFrZWZpbGUKK19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KK0FkZGVkOiBzdm46ZXhlY3V0YWJsZQorICAg
KyAqCitFTkQKKyAgICBleHBlY3RlZFJldHVybiA9PiBbCitbeworICAgIHN2bkNvbnZlcnRlZFRl
eHQgPT4gIDw8J0VORCcsICMgU2FtZSBhcyBpbnB1dCB0ZXh0CitJbmRleDogdGVzdF9maWxlLnN3
ZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQorQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5
cGUuCitzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCisKKworCitRMWRU
QngwQUFBQjQyaXRnNEdsZ1lKakd3TUREeU9ETXhNRHczNEdCZ1FFQUpQUURKQT09CisKK0VORAor
ICAgIGluZGV4UGF0aCA9PiAidGVzdF9maWxlLnN3ZiIsCisgICAgaXNCaW5hcnkgPT4gMSwKKyAg
ICBpc1N2biA9PiAxLAorfV0sCisiUHJvcGVydHkgY2hhbmdlcyBvbjogTWFrZWZpbGVcbiJdLAor
ICAgIGV4cGVjdGVkTmV4dExpbmUgPT4gIl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19cbiIsCit9LAoreworICAgICMgTmV3
IHRlc3QKKyAgICBkaWZmTmFtZSA9PiAiU1ZOOiBiaW5hcnkgZmlsZSBmb2xsb3dlZCBieSBmaWxl
IGNoYW5nZSBvbiBkaWZmZXJlbnQgZmlsZSIsCisgICAgaW5wdXRUZXh0ID0+IDw8J0VORCcsCitJ
bmRleDogdGVzdF9maWxlLnN3ZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFy
a2VkIGFzIGEgYmluYXJ5IHR5cGUuCitzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQt
c3RyZWFtCisKK1Byb3BlcnR5IGNoYW5nZXMgb246IHRlc3RfZmlsZS5zd2YKK19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
K05hbWU6IHN2bjptaW1lLXR5cGUKKyAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCisKKwor
UTFkVEJ4MEFBQUI0Mml0ZzRHbGdZSmpHd01ERHlPRE14TUR3MzRHQmdRRUFKUFFESkE9PQorCitJ
bmRleDogTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBNYWtlZmlsZQkocmV2aXNpb24gNjAwMjEp
CisrKysgTWFrZWZpbGUJKHdvcmtpbmcgY29weSkKK0BAIC0xLDMgKzEsNCBAQAorKworIE1PRFVM
RVMgPSBKYXZhU2NyaXB0Q29yZSBKYXZhU2NyaXB0R2x1ZSBXZWJDb3JlIFdlYktpdCBXZWJLaXQy
IFdlYktpdFRvb2xzIAorCisgYWxsOgorRU5ECisgICAgZXhwZWN0ZWRSZXR1cm4gPT4gWworW3sK
KyAgICBzdm5Db252ZXJ0ZWRUZXh0ID0+ICA8PCdFTkQnLCAjIFNhbWUgYXMgaW5wdXQgdGV4dAor
SW5kZXg6IHRlc3RfZmlsZS5zd2YKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0Nhbm5vdCBkaXNwbGF5OiBmaWxlIG1h
cmtlZCBhcyBhIGJpbmFyeSB0eXBlLgorc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0
LXN0cmVhbQorCisKKworUTFkVEJ4MEFBQUI0Mml0ZzRHbGdZSmpHd01ERHlPRE14TUR3MzRHQmdR
RUFKUFFESkE9PQorCitFTkQKKyAgICBpbmRleFBhdGggPT4gInRlc3RfZmlsZS5zd2YiLAorICAg
IGlzQmluYXJ5ID0+IDEsCisgICAgaXNTdm4gPT4gMSwKK31dLAorIkluZGV4OiBNYWtlZmlsZVxu
Il0sCisgICAgZXhwZWN0ZWROZXh0TGluZSA9PiAiPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIiwKK30sCisjIyMjCisj
IFByb3BlcnR5IENoYW5nZXM6IEZpbGUgY2hhbmdlIHdpdGggcHJvcGVydHkgY2hhbmdlCisjIwor
eworICAgICMgTmV3IHRlc3QKKyAgICBkaWZmTmFtZSA9PiAiU1ZOOiBmaWxlIGNoYW5nZSBkaWZm
IHdpdGggcHJvcGVydHkgY2hhbmdlLCBmb2xsb3dlZCBieSBwcm9wZXJ0eSBjaGFuZ2UgZGlmZiIs
CisgICAgaW5wdXRUZXh0ID0+IDw8J0VORCcsCitJbmRleDogTWFrZWZpbGUKKz09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
Ky0tLSBNYWtlZmlsZQkocmV2aXNpb24gNjAwMjEpCisrKysgTWFrZWZpbGUJKHdvcmtpbmcgY29w
eSkKK0BAIC0xLDMgKzEsNCBAQAorKworIE1PRFVMRVMgPSBKYXZhU2NyaXB0Q29yZSBKYXZhU2Ny
aXB0R2x1ZSBXZWJDb3JlIFdlYktpdCBXZWJLaXQyIFdlYktpdFRvb2xzIAorCisgYWxsOgorCitQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBNYWtlZmlsZQorX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworQWRkZWQ6IHN2bjpleGVj
dXRhYmxlCisgICArICoKKworCitQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBNYWtlZmlsZS5zaGFyZWQK
K19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KK0RlbGV0ZWQ6IHN2bjpleGVjdXRhYmxlCisgICAtICoKK0VORAorICAgIGV4
cGVjdGVkUmV0dXJuID0+IFsKK1t7CisgICAgc3ZuQ29udmVydGVkVGV4dCA9PiAgPDwnRU5EJywg
IyBTYW1lIGFzIGlucHV0IHRleHQKK0luZGV4OiBNYWtlZmlsZQorPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIE1h
a2VmaWxlCShyZXZpc2lvbiA2MDAyMSkKKysrKyBNYWtlZmlsZQkod29ya2luZyBjb3B5KQorQEAg
LTEsMyArMSw0IEBACisrCisgTU9EVUxFUyA9IEphdmFTY3JpcHRDb3JlIEphdmFTY3JpcHRHbHVl
IFdlYkNvcmUgV2ViS2l0IFdlYktpdDIgV2ViS2l0VG9vbHMgCisKKyBhbGw6CisKKworCitFTkQK
KyAgICBleGVjdXRhYmxlQml0RGVsdGEgPT4gMSwKKyAgICBpbmRleFBhdGggPT4gIk1ha2VmaWxl
IiwKKyAgICBpc1N2biA9PiAxLAorICAgIHNvdXJjZVJldmlzaW9uID0+ICI2MDAyMSIsCit9XSwK
KyJQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBNYWtlZmlsZS5zaGFyZWRcbiJdLAorICAgIGV4cGVjdGVk
TmV4dExpbmUgPT4gIl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19cbiIsCit9LAoreworICAgICMgTmV3IHRlc3QKKyAgICBk
aWZmTmFtZSA9PiAiU1ZOOiBmaWxlIGNoYW5nZSBkaWZmIHdpdGggcHJvcGVydHkgY2hhbmdlLCBm
b2xsb3dlZCBieSBmaWxlIGNoYW5nZSBkaWZmIiwKKyAgICBpbnB1dFRleHQgPT4gPDwnRU5EJywK
K0luZGV4OiBNYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIE1ha2VmaWxlCShyZXZpc2lvbiA2MDAy
MSkKKysrKyBNYWtlZmlsZQkod29ya2luZyBjb3B5KQorQEAgLTEsMyArMSw0IEBACisrCisgTU9E
VUxFUyA9IEphdmFTY3JpcHRDb3JlIEphdmFTY3JpcHRHbHVlIFdlYkNvcmUgV2ViS2l0IFdlYktp
dDIgV2ViS2l0VG9vbHMgCisKKyBhbGw6CisKK1Byb3BlcnR5IGNoYW5nZXMgb246IE1ha2VmaWxl
CitfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCitOYW1lOiBzdm46ZXhlY3V0YWJsZQorICAgLSAqCisKK0luZGV4OiBNYWtl
ZmlsZS5zaGFyZWQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBNYWtlZmlsZS5zaGFyZWQJKHJldmlzaW9uIDYw
MDIxKQorKysrIE1ha2VmaWxlLnNoYXJlZAkod29ya2luZyBjb3B5KQorQEAgLTEsMyArMSw0IEBA
CisrCitTQ1JJUFRTX1BBVEggPz0gLi4vV2ViS2l0VG9vbHMvU2NyaXB0cworWENPREVfT1BUSU9O
UyA9IGBwZXJsIC1JJChTQ1JJUFRTX1BBVEgpIC1Nd2Via2l0ZGlycyAtZSAncHJpbnQgWGNvZGVP
cHRpb25TdHJpbmcoKSdgICQoQVJHUykKK0VORAorICAgIGV4cGVjdGVkUmV0dXJuID0+IFsKK1t7
CisgICAgc3ZuQ29udmVydGVkVGV4dCA9PiAgPDwnRU5EJywgIyBTYW1lIGFzIGlucHV0IHRleHQK
K0luZGV4OiBNYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIE1ha2VmaWxlCShyZXZpc2lvbiA2MDAy
MSkKKysrKyBNYWtlZmlsZQkod29ya2luZyBjb3B5KQorQEAgLTEsMyArMSw0IEBACisrCisgTU9E
VUxFUyA9IEphdmFTY3JpcHRDb3JlIEphdmFTY3JpcHRHbHVlIFdlYkNvcmUgV2ViS2l0IFdlYktp
dDIgV2ViS2l0VG9vbHMgCisKKyBhbGw6CisKKworRU5ECisgICAgZXhlY3V0YWJsZUJpdERlbHRh
ID0+IC0xLAorICAgIGluZGV4UGF0aCA9PiAiTWFrZWZpbGUiLAorICAgIGlzU3ZuID0+IDEsCisg
ICAgc291cmNlUmV2aXNpb24gPT4gIjYwMDIxIiwKK31dLAorIkluZGV4OiBNYWtlZmlsZS5zaGFy
ZWRcbiJdLAorICAgIGV4cGVjdGVkTmV4dExpbmUgPT4gIj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIsCit9LAorIyMj
IwogIyAgICBHaXQgdGVzdCBjYXNlcwogIyMKIHsKQEAgLTQ1MSw2ICs4NDIsNyBAQCBFTkQKICAg
ICBpbmRleFBhdGggPT4gImZvb19uZXciLAogfSwKIHsKKyAgICBleGVjdXRhYmxlQml0RGVsdGEg
PT4gMSwKICAgICBpbmRleFBhdGggPT4gImZvb19uZXciLAogICAgIGlzR2l0ID0+IDEsCiAgICAg
c3ZuQ29udmVydGVkVGV4dCA9PiA8PCdFTkQnLAo=
</data>
<flag name="review"
          id="49108"
          type_id="1"
          status="+"
          setter="ddkilzer"
    />
          </attachment>
      

    </bug>

</bugzilla>