<?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>48144</bug_id>
          
          <creation_ts>2010-10-22 11:58:00 -0700</creation_ts>
          <short_desc>webkitpy: need a filesystem wrapper object for either mocking and dependency isolation</short_desc>
          <delta_ts>2010-11-04 19:52:18 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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>
          
          <blocked>48280</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>298098</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-22 11:58:00 -0700</bug_when>
    <thetext>webkitpy: need a filesystem wrapper object for either mocking and dependency isolation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298100</commentid>
    <comment_count>1</comment_count>
      <attachid>71582</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-22 11:59:19 -0700</bug_when>
    <thetext>Created attachment 71582
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298104</commentid>
    <comment_count>2</comment_count>
      <attachid>71582</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-22 12:04:40 -0700</bug_when>
    <thetext>Comment on attachment 71582
Patch

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

Generally, I like the approach.  I&apos;m sad about have a second way to find the checkout_root.  There should only be one.

&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem.py:54
&gt; +    def path_from_webkit_base(self, *comps):
&gt; +        &quot;&quot;&quot;Returns the absolute path for webkit_base_dir() + comps.&quot;&quot;&quot;
&gt; +        return os.path.join(self.webkit_base_dir(), *comps)

Hum...  I wonder if we should put webkit-specific knowledge in a separate layer.

&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem.py:74
&gt; +    def read_file(self, filename, encoding=None):

Do we want different methods for reading binary and reading text?

&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem.py:103
&gt; +    def webkit_base_dir(self):
&gt; +        &quot;&quot;&quot;Returns the absolute path to the top of the WebKit tree.
&gt; +
&gt; +        Raises an AssertionError if the top dir can&apos;t be determined.
&gt; +
&gt; +        &quot;&quot;&quot;
&gt; +        # Note that we don&apos;t use common/checkout/scm for this in order to
&gt; +        # allow the layout tests to be run without being in an actual checkout.
&gt; +        if not self._webkit_base_dir:
&gt; +            try:
&gt; +                this_dir = os.path.abspath(sys.path[0])
&gt; +                index = this_dir.index(&quot;WebKitTools&quot;)
&gt; +                self._webkit_base_dir = this_dir[0:index]
&gt; +            except ValueError:
&gt; +                raise AssertionError(&quot;could not determine webkit_base_dir()&quot;)

This seems to duplicate logic from scm.checkout_root.  However, this code is wrong if you randomly have a folder named WebKitTools somewhere.  It seems better to put think knowledge at a higher level that can use scm to figure out the checkout_root.

&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_unittest.py:58
&gt; +    def test_isdir__true(self):

why the double __ ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298107</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-22 12:14:02 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 71582 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=71582&amp;action=review
&gt; 
&gt; Generally, I like the approach.  I&apos;m sad about have a second way to find the checkout_root.  There should only be one.
&gt; 

There seems to be a need/desire to be able to run stuff without an actual checkout (meaning, you don&apos;t have .git or .svn directories) and so we can&apos;t use scm.checkout_root. I&apos;ve discussed this w/ Eric and Tony before, but this might be new to you. 

My thinking was that scm.checkout would subclass this class and either override the webkit_base_dir method to key off of the SCM stuff, or just use whatever we do here.

&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/filesystem.py:54
&gt; &gt; +    def path_from_webkit_base(self, *comps):
&gt; &gt; +        &quot;&quot;&quot;Returns the absolute path for webkit_base_dir() + comps.&quot;&quot;&quot;
&gt; &gt; +        return os.path.join(self.webkit_base_dir(), *comps)
&gt; 
&gt; Hum...  I wonder if we should put webkit-specific knowledge in a separate layer.
&gt;

I don&apos;t think so. This code isn&apos;t intended to be used outside of webkit, and everything inside webkit will need this.
 
&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/filesystem.py:74
&gt; &gt; +    def read_file(self, filename, encoding=None):
&gt; 
&gt; Do we want different methods for reading binary and reading text?
&gt;

I thought about that; the port class does have different methods for getting image data, text data, and checksums, for example. But I think it&apos;s perhaps better to have a generic method here and tighter data type binding at the next layer up.
 
&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/filesystem.py:103
&gt; &gt; +    def webkit_base_dir(self):
&gt; &gt; +        &quot;&quot;&quot;Returns the absolute path to the top of the WebKit tree.
&gt; &gt; +
&gt; &gt; +        Raises an AssertionError if the top dir can&apos;t be determined.
&gt; &gt; +
&gt; &gt; +        &quot;&quot;&quot;
&gt; &gt; +        # Note that we don&apos;t use common/checkout/scm for this in order to
&gt; &gt; +        # allow the layout tests to be run without being in an actual checkout.
&gt; &gt; +        if not self._webkit_base_dir:
&gt; &gt; +            try:
&gt; &gt; +                this_dir = os.path.abspath(sys.path[0])
&gt; &gt; +                index = this_dir.index(&quot;WebKitTools&quot;)
&gt; &gt; +                self._webkit_base_dir = this_dir[0:index]
&gt; &gt; +            except ValueError:
&gt; &gt; +                raise AssertionError(&quot;could not determine webkit_base_dir()&quot;)
&gt; 
&gt; This seems to duplicate logic from scm.checkout_root.  However, this code is wrong if you randomly have a folder named WebKitTools somewhere.  It seems better to put think knowledge at a higher level that can use scm to figure out the checkout_root.
&gt; 

See above. I can tighten this to more of the path name (e.g., WebkitTools/Scripts/webkitpy) to make it quite unlikely to find duplicates.

&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_unittest.py:58
&gt; &gt; +    def test_isdir__true(self):
&gt; 
&gt; why the double __ ?

Just a convention I use sometimes to separate the routine I&apos;m testing from the type of test or what I expect the test to be doing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298250</commentid>
    <comment_count>4</comment_count>
      <attachid>71609</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-22 16:32:34 -0700</bug_when>
    <thetext>Created attachment 71609
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298251</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-22 16:33:11 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Created an attachment (id=71609) [details]
&gt; Patch

This rev removes any knowledge of webkit&apos;isms or base directories. It&apos;s a pure wrapper class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299181</commentid>
    <comment_count>6</comment_count>
      <attachid>71814</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-25 16:29:56 -0700</bug_when>
    <thetext>Created attachment 71814
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300711</commentid>
    <comment_count>7</comment_count>
      <attachid>71814</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-27 17:00:00 -0700</bug_when>
    <thetext>Comment on attachment 71814
Patch

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

r- for the nits and the seeming touching of the source dir.

&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem.py:1
&gt; +#!/usr/bin/env python

Not needed.

&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem.py:68
&gt; +    def maybe_make_directory(self, *path):
&gt; +        &quot;&quot;&quot;Creates the specified directory if it doesn&apos;t already exist.&quot;&quot;&quot;

It&apos;s pretty lame that python doesn&apos;t have this already.

&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem.py:77
&gt; +    def path_to_uri(self, path):
&gt; +        &quot;Converts path to an absolute path and turns it into a filename URI.&quot;
&gt; +        return path_module.abspath_to_uri(os.path.abspath(path))

I&apos;m confused why this is here?

&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_unittest.py:68
&gt; +        # FIXME: Theoretically this might not be writable.
&gt; +        base_path = tempfile.mktemp(prefix=&apos;filesystem_unittest_&apos;,
&gt; +                                    dir=self._this_dir)

I&apos;m confused. Does this use the current directory?  Shouldn&apos;t it use the standard temp directory location?

I recently added a TemporaryDirectory() class which might be useful here.  It needs to move to a shared location, but it allows you to use temporary directories with with_statement so they self-delete.

&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_unittest.py:91
&gt; +        # FIXME: Make this work under cygwin, win32.
&gt; +        if sys.platform in (&apos;darwin&apos;, &apos;linux2&apos;):
&gt; +            self.assertRaises(OSError, fs.maybe_make_directory,
&gt; +                              &quot;/bin/foo&quot;)

Is it that the test doesn&apos;t work on cygwin/win32? or does the maybe_make_direcotry code not?

&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_unittest.py:100
&gt; +        contents = fs.read_file(self._this_file, encoding=&quot;utf-8&quot;)
&gt; +        self.assertTrue(&apos;SOME_REALLY_UNLIKELY_STRING&apos; in contents)
&gt; +

Seems we should test unicode here?  Or is that out of scope?  We&apos;d have to write a unicode file and then read it back.

&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_unittest.py:103
&gt; +        fs = FileSystem()
&gt; +        self.assertRaises(IOError, fs.read_file, self._missing_file)

Probably makes sense to have a setUp() call which sets self.file_system to FileSystem() instead of creating a new fs manually in every test.

&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_unittest.py:112
&gt; +            # FIXME: Theoretically this might not be writable.
&gt; +            path = tempfile.mktemp(prefix=&apos;tree_unittest_&apos;,
&gt; +                                   dir=self._this_dir)
&gt; +            fs.write_file(path, &apos;hello&apos;)

I&apos;m confused again.  We should never be touching the source directory during tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300743</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-27 17:48:40 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 71814 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=71814&amp;action=review
&gt; 
&gt; r- for the nits and the seeming touching of the source dir.
&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/filesystem.py:1
&gt; &gt; +#!/usr/bin/env python
&gt; 
&gt; Not needed.
&gt; 

Okay. It was cut&amp;paste from a template ;)


&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/filesystem.py:68
&gt; &gt; +    def maybe_make_directory(self, *path):
&gt; &gt; +        &quot;&quot;&quot;Creates the specified directory if it doesn&apos;t already exist.&quot;&quot;&quot;
&gt; 
&gt; It&apos;s pretty lame that python doesn&apos;t have this already.
&gt;

eh. Ignoring the error seems like a fairly non-standard thing, so I&apos;m not too surprised by this.
 
&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/filesystem.py:77
&gt; &gt; +    def path_to_uri(self, path):
&gt; &gt; +        &quot;Converts path to an absolute path and turns it into a filename URI.&quot;
&gt; &gt; +        return path_module.abspath_to_uri(os.path.abspath(path))
&gt; 
&gt; I&apos;m confused why this is here?
&gt;

I&apos;m inclined to roll the path module directly into this to reduce the number of filesystem and path-related modules the programmer needs to know about. I don&apos;t feel strongly about it, though, so I could leave this out.
 
&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_unittest.py:68
&gt; &gt; +        # FIXME: Theoretically this might not be writable.
&gt; &gt; +        base_path = tempfile.mktemp(prefix=&apos;filesystem_unittest_&apos;,
&gt; &gt; +                                    dir=self._this_dir)
&gt; 
&gt; I&apos;m confused. Does this use the current directory?  Shouldn&apos;t it use the standard temp directory location?
&gt; 

Will fix. See below.

&gt; I recently added a TemporaryDirectory() class which might be useful here.  It needs to move to a shared location, but it allows you to use temporary directories with with_statement so they self-delete.
&gt;

Will take a look.
 
&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_unittest.py:91
&gt; &gt; +        # FIXME: Make this work under cygwin, win32.
&gt; &gt; +        if sys.platform in (&apos;darwin&apos;, &apos;linux2&apos;):
&gt; &gt; +            self.assertRaises(OSError, fs.maybe_make_directory,
&gt; &gt; +                              &quot;/bin/foo&quot;)
&gt; 
&gt; Is it that the test doesn&apos;t work on cygwin/win32? or does the maybe_make_direcotry code not?
&gt;

The test doesn&apos;t work (hardcoded unix-style path). I will clarify the comment.

&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_unittest.py:100
&gt; &gt; +        contents = fs.read_file(self._this_file, encoding=&quot;utf-8&quot;)
&gt; &gt; +        self.assertTrue(&apos;SOME_REALLY_UNLIKELY_STRING&apos; in contents)
&gt; &gt; +
&gt; 
&gt; Seems we should test unicode here?  Or is that out of scope?  We&apos;d have to write a unicode file and then read it back.
&gt;

Seems out of scope to me. I am trusting that the underlying codecs.open() implementation does the right thing. It&apos;s conceivable that one could implement read_file on top of file() and not codecs, in which case this would be broken, but that seems like more trouble than it is worth.
 
&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_unittest.py:103
&gt; &gt; +        fs = FileSystem()
&gt; &gt; +        self.assertRaises(IOError, fs.read_file, self._missing_file)
&gt; 
&gt; Probably makes sense to have a setUp() call which sets self.file_system to FileSystem() instead of creating a new fs manually in every test.
&gt; 

To me it feels clearer and more explicit to create the filesystem as a local variable in the routine. Otherwise I have to stop and think about where the variable came from, was it left in a clean state (which it should be from the teardown), etc.

&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_unittest.py:112
&gt; &gt; +            # FIXME: Theoretically this might not be writable.
&gt; &gt; +            path = tempfile.mktemp(prefix=&apos;tree_unittest_&apos;,
&gt; &gt; +                                   dir=self._this_dir)
&gt; &gt; +            fs.write_file(path, &apos;hello&apos;)
&gt; 
&gt; I&apos;m confused again.  We should never be touching the source directory during tests.

For some reason I think I was thinking that by specifying the prefix we might get conflicts when running multiple concurrent tests. I don&apos;t know why I was thinking that. Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300809</commentid>
    <comment_count>9</comment_count>
      <attachid>72131</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-27 19:18:29 -0700</bug_when>
    <thetext>Created attachment 72131
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300810</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-27 19:20:04 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=72131) [details]
&gt; Patch

Patch uploaded w/ changes made due to review feedback. 

I&apos;ve incorporated the TemporaryDirectory class as a new FileSystem.mkdtemp() method.

I added some more comments/fixme&apos;s about merging the path modules into this module as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302871</commentid>
    <comment_count>11</comment_count>
      <attachid>72131</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-11-01 13:19:41 -0700</bug_when>
    <thetext>Comment on attachment 72131
Patch

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

The general direction of this patch looks good.  However, I&apos;m concerned about the the test that writes to the /bin directory.  Also, I&apos;d like to see this class used in at least one place.

&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem.py:51
&gt; +        &quot;&quot;&quot;Returns whether the path exists or not.
&gt; +
&gt; +        Args:
&gt; +            path: can be absolute or relative.
&gt; +
&gt; +        This is just a wrapper around os.path.exists().
&gt; +
&gt; +        &quot;&quot;&quot;

These docstrings takes up a ton of space and add very little value.

&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_unittest.py:105
&gt; +    def test_maybe_make_directory__failure(self):
&gt; +        fs = FileSystem()
&gt; +
&gt; +        # FIXME: I&apos;m not sure how to make this test work under cygwin or
&gt; +        # win32 since the whole filesystem is usually writeable.
&gt; +        if sys.platform in (&apos;darwin&apos;, &apos;linux2&apos;):
&gt; +            self.assertRaises(OSError, fs.maybe_make_directory,
&gt; +                              &quot;/bin/foo&quot;)

This tests seems harmful when running test-webkitpy as root.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302956</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-01 14:48:12 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 72131 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=72131&amp;action=review
&gt; 
&gt; The general direction of this patch looks good.  However, I&apos;m concerned about the the test that writes to the /bin directory.  Also, I&apos;d like to see this class used in at least one place.
&gt; 

The code is used by the patch to 48280. For the comment about the /bin directory, see below.

&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/filesystem.py:51
&gt; &gt; +        &quot;&quot;&quot;Returns whether the path exists or not.
&gt; &gt; +
&gt; &gt; +        Args:
&gt; &gt; +            path: can be absolute or relative.
&gt; &gt; +
&gt; &gt; +        This is just a wrapper around os.path.exists().
&gt; &gt; +
&gt; &gt; +        &quot;&quot;&quot;
&gt; 
&gt; These docstrings takes up a ton of space and add very little value.
&gt; 

I&apos;m not sure if this is a comment about a few specific docstrings, or all of them. I will tighten up the ones I think can/should be tighter. Let me know if you want to see more.

&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_unittest.py:105
&gt; &gt; +    def test_maybe_make_directory__failure(self):
&gt; &gt; +        fs = FileSystem()
&gt; &gt; +
&gt; &gt; +        # FIXME: I&apos;m not sure how to make this test work under cygwin or
&gt; &gt; +        # win32 since the whole filesystem is usually writeable.
&gt; &gt; +        if sys.platform in (&apos;darwin&apos;, &apos;linux2&apos;):
&gt; &gt; +            self.assertRaises(OSError, fs.maybe_make_directory,
&gt; &gt; +                              &quot;/bin/foo&quot;)
&gt; 
&gt; This tests seems harmful when running test-webkitpy as root.

Yes, it would be. I would have thought that running test-webkitpy as root would not be a good idea. I can put in a check on setuid to bail out if necessary.

That said, this was the only way I could think of to be guaranteed that trying to create a directory would fail (without mocking out the underlying implementation and making the test case too white-box-ish). 

Can you think of some other way to test this, or would you go ahead with the os-level mocking, or would you just not test this at all?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302961</commentid>
    <comment_count>13</comment_count>
      <attachid>72568</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-01 14:51:42 -0700</bug_when>
    <thetext>Created attachment 72568
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305023</commentid>
    <comment_count>14</comment_count>
      <attachid>73010</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-04 17:22:30 -0700</bug_when>
    <thetext>Created attachment 73010
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305036</commentid>
    <comment_count>15</comment_count>
      <attachid>73010</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-11-04 17:34:49 -0700</bug_when>
    <thetext>Comment on attachment 73010
Patch

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

Thanks Dirk.  This looks great.

&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_unittest.py:99
&gt; +            # Clean up.
&gt; +            os.rmdir(sub_path)

Do we want to use a finally here to make sure we clean up?  I&apos;m not sure if this is covered by the with statement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305041</commentid>
    <comment_count>16</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-04 17:38:25 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_unittest.py:99
&gt; &gt; +            # Clean up.
&gt; &gt; +            os.rmdir(sub_path)
&gt; 
&gt; Do we want to use a finally here to make sure we clean up?  I&apos;m not sure if this is covered by the with statement.

The with statement covers it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305066</commentid>
    <comment_count>17</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-04 18:07:13 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; &gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_unittest.py:99
&gt; &gt; &gt; +            # Clean up.
&gt; &gt; &gt; +            os.rmdir(sub_path)
&gt; &gt; 
&gt; &gt; Do we want to use a finally here to make sure we clean up?  I&apos;m not sure if this is covered by the with statement.
&gt; 
&gt; The with statement covers it.

Whoops. I was confused by the comments into thinking the os.rmdir was in test_maybe_make_directories__failure rather than the previous routine. Yes, if the test fails and the sub_path is actually created, then we won&apos;t clean up properly. I will fix this before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305109</commentid>
    <comment_count>18</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-04 19:52:18 -0700</bug_when>
    <thetext>Committed r71383: &lt;http://trac.webkit.org/changeset/71383&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71582</attachid>
            <date>2010-10-22 11:59:19 -0700</date>
            <delta_ts>2010-10-22 16:32:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48144-20101022115917.patch</filename>
            <type>text/plain</type>
            <size>11544</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAzZjNhYTA4NjdjODk2YWNmMzY5ZTA3NjEzMzk5ZGY0ZDVlZDg2NjZiLi45MmNlYmU2
OGY4MzlmMjMzZGQ0YTg2ZDEzNWQ2NTgwM2NlNmM3Zjg0IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTAtMTAtMjIgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRlIGEgZmlsZXN5
c3RlbSB3cmFwcGVyIHRoYXQgd2UgY2FuIHVzZSB0byBlbmZvcmNlCisgICAgICAgIHBhcnRpY3Vs
YXIgY29udmVudGlvbnMgYW5kIHVzZSBmb3IgbW9ja2luZyBhbmQgZGVwZW5kZW5jeQorICAgICAg
ICBpbmplY3Rpb24gZG93biB0aGUgbGluZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgxNDQKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV91bml0dGVzdC5weTogQWRkZWQuCisKIDIw
MTAtMTAtMjEgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgVW5yZXZpZXdlZC4gUmUtZW5hYmxlIHRlc3QgdGhhdCB3YXMgbWlzdGFrZW5seSBkaXNhYmxl
ZCBieSByNjc5NzQuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4MGMxYmQxNTBmYmZlNmQ2
MTc0Y2IxMzhmMWFlNTViNjYwMzk3NmYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weQpAQCAtMCwwICsxLDEy
MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisj
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiV3JhcHBl
ciBvYmplY3QgZm9yIHRoZSBmaWxlIHN5c3RlbSAvIHNvdXJjZSB0cmVlLiIiIgorCitmcm9tIF9f
ZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CisKK2ltcG9ydCBjb2RlY3MKK2ltcG9ydCBl
cnJubworaW1wb3J0IG9zCitpbXBvcnQgc3lzCisKKworY2xhc3MgRmlsZVN5c3RlbShvYmplY3Qp
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fd2Via2l0X2Jhc2VfZGly
ID0gTm9uZQorCisgICAgZGVmIG1heWJlX21ha2VfZGlyZWN0b3J5KHNlbGYsICpwYXRoKToKKyAg
ICAgICAgIiIiQ3JlYXRlcyB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGFs
cmVhZHkgZXhpc3QuIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKG9z
LnBhdGguam9pbigqcGF0aCkpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgICAg
ICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICAgICAgcmFpc2UKKwor
ICAgIGRlZiBwYXRoX2Zyb21fd2Via2l0X2Jhc2Uoc2VsZiwgKmNvbXBzKToKKyAgICAgICAgIiIi
UmV0dXJucyB0aGUgYWJzb2x1dGUgcGF0aCBmb3Igd2Via2l0X2Jhc2VfZGlyKCkgKyBjb21wcy4i
IiIKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLndlYmtpdF9iYXNlX2RpcigpLCAq
Y29tcHMpCisKKyAgICBkZWYgZXhpc3RzKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJSZXR1cm5z
IHdoZXRoZXIgdGhlIHBhdGggZXhpc3RzIG9yIG5vdC4KKworICAgICAgICBBcmdzOgorICAgICAg
ICAgICAgcGF0aDogY2FuIGJlIGFic29sdXRlIG9yIHJlbGF0aXZlLgorCisgICAgICAgIFRoaXMg
aXMganVzdCBhIHdyYXBwZXIgYXJvdW5kIG9zLnBhdGguZXhpc3RzKCkuCisKKyAgICAgICAgIiIi
CisgICAgICAgICMgRklYTUU6IGFzc2VydCB0aGF0IHRoZSBmaWxlcyBhcmUgdW5kZXIgdGhlIHRv
cCBvZiB0aGUgdHJlZT8KKyAgICAgICAgcmV0dXJuIG9zLnBhdGguZXhpc3RzKHBhdGgpCisKKyAg
ICBkZWYgaXNkaXIoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIlJldHVybnMgd2hldGhlciB0aGUg
cGF0aCByZWZlcnMgdG8gYSBkaXJlY3Rvcnkgb2YgdGVzdHMuCisKKyAgICAgICAgVXNlZCBieSB0
ZXN0X2V4cGVjdGF0aW9ucy5weSB0byBhcHBseSBydWxlcyB0byB3aG9sZSBkaXJlY3Rvcmllcy4i
IiIKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguaXNkaXIocGF0aCkKKworICAgIGRlZiByZWFkX2Zp
bGUoc2VsZiwgZmlsZW5hbWUsIGVuY29kaW5nPU5vbmUpOgorICAgICAgICAiIiJSZXR1cm5zIHRo
ZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhdCB0aGUgZ2l2ZW4gbG9jYXRpb24uCisKKyAgICAgICAg
QXJnczoKKyAgICAgICAgICAgIGZpbGVuYW1lOiBjYW4gYmUgYWJzb2x1dGUgb3IgcmVsYXRpdmUu
CisgICAgICAgICAgICBlbmNvZGluZzogcGFzc2VkIHRvIGNvZGVjLm9wZW4gKGRlZmF1bHRzIHRv
IE5vbmUpCisgICAgICAgIFJhaXNlcyBJT0Vycm9yIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3Qg
b3IgYW5vdGhlciBlcnJvciBvY2N1cnMuCisKKyAgICAgICAgIiIiCisgICAgICAgIG1vZGUgPSAi
ciIKKyAgICAgICAgaWYgZW5jb2RpbmcgaXMgTm9uZToKKyAgICAgICAgICAgIG1vZGUgPSAiciti
IgorICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKGZpbGVuYW1lLCBtb2RlLCBlbmNvZGluZykgYXMg
ZjoKKyAgICAgICAgICAgIHJldHVybiBmLnJlYWQoKQorCisgICAgZGVmIHdlYmtpdF9iYXNlX2Rp
cihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdG9w
IG9mIHRoZSBXZWJLaXQgdHJlZS4KKworICAgICAgICBSYWlzZXMgYW4gQXNzZXJ0aW9uRXJyb3Ig
aWYgdGhlIHRvcCBkaXIgY2FuJ3QgYmUgZGV0ZXJtaW5lZC4KKworICAgICAgICAiIiIKKyAgICAg
ICAgIyBOb3RlIHRoYXQgd2UgZG9uJ3QgdXNlIGNvbW1vbi9jaGVja291dC9zY20gZm9yIHRoaXMg
aW4gb3JkZXIgdG8KKyAgICAgICAgIyBhbGxvdyB0aGUgbGF5b3V0IHRlc3RzIHRvIGJlIHJ1biB3
aXRob3V0IGJlaW5nIGluIGFuIGFjdHVhbCBjaGVja291dC4KKyAgICAgICAgaWYgbm90IHNlbGYu
X3dlYmtpdF9iYXNlX2RpcjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0aGlz
X2RpciA9IG9zLnBhdGguYWJzcGF0aChzeXMucGF0aFswXSkKKyAgICAgICAgICAgICAgICBpbmRl
eCA9IHRoaXNfZGlyLmluZGV4KCJXZWJLaXRUb29scyIpCisgICAgICAgICAgICAgICAgc2VsZi5f
d2Via2l0X2Jhc2VfZGlyID0gdGhpc19kaXJbMDppbmRleF0KKyAgICAgICAgICAgIGV4Y2VwdCBW
YWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJjb3VsZCBu
b3QgZGV0ZXJtaW5lIHdlYmtpdF9iYXNlX2RpcigpIikKKworICAgICAgICByZXR1cm4gc2VsZi5f
d2Via2l0X2Jhc2VfZGlyCisKKyAgICBkZWYgd3JpdGVfZmlsZShzZWxmLCBmaWxlbmFtZSwgY29u
dGVudHMsIGVuY29kaW5nPU5vbmUpOgorICAgICAgICAiIiJXcml0ZSB0aGUgY29udGVudHMgdG8g
dGhlIGZpbGUgYXQgdGhlIGdpdmVuIGxvY2F0aW9uLgorCisgICAgICAgIEFyZ3M6CisgICAgICAg
ICAgICBmaWxlbmFtZTogY2FuIGJlIGFic29sdXRlIG9yIHJlbGF0aXZlLgorICAgICAgICAgICAg
Y29udGVudHM6IHN0dWZmIHRvIHdyaXRlCisgICAgICAgICAgICBlbmNvZGluZzogcGFzc2VkIHRv
IGNvZGVjLm9wZW4gKGRlZmF1bHRzIHRvIE5vbmUpCisgICAgICAgIFJhaXNlcyBJT0Vycm9yIGlm
IHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3Qgb3IgYW5vdGhlciBlcnJvciBvY2N1cnMuCisKKyAgICAg
ICAgIiIiCisgICAgICAgIG1vZGUgPSAidyIKKyAgICAgICAgaWYgZW5jb2RpbmcgaXMgTm9uZToK
KyAgICAgICAgICAgIG1vZGUgPSAidytiIgorICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKGZpbGVu
YW1lLCBtb2RlLCBlbmNvZGluZykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoY29udGVudHMp
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
ZmlsZXN5c3RlbV91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS9maWxlc3lzdGVtX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2YWZmOWM2NDg4
YjQxODdiZTNlODc5MWE0Y2FiZjQ1OGU2OWMxY2UKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV91bml0dGVzdC5w
eQpAQCAtMCwwICsxLDE0MiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0
OgorIworIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorIyBkaXN0cmlidXRpb24uCisjICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcworaW1wb3J0IHN5
cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBmaWxlc3lzdGVtIGlt
cG9ydCBGaWxlU3lzdGVtCisKKworY2xhc3MgRmlsZVN5c3RlbVRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgorICAgIGRlZiBwYXRoX3RvX21pc3NpbmdfZmlsZShzZWxmLCBmcyk6CisgICAgICAgIHJl
dHVybiBmcy5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoJ1dlYktpdFRvb2xzJywgJ1NjcmlwdHMnLCAn
d2Via2l0cHknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21t
b24nLCAnc3lzdGVtJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
bWlzc2luZ19maWxlLnR4dCcpCisKKyAgICBkZWYgcGF0aF90b190aGlzX2ZpbGUoc2VsZiwgZnMp
OgorICAgICAgICByZXR1cm4gZnMucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdXZWJLaXRUb29scycs
ICdTY3JpcHRzJywgJ3dlYmtpdHB5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnY29tbW9uJywgJ3N5c3RlbScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ2ZpbGVzeXN0ZW1fdW5pdHRlc3QucHknKQorCisgICAgZGVmIHRlc3RfZXhp
c3RzX190cnVlKHNlbGYpOgorICAgICAgICBmcyA9IEZpbGVTeXN0ZW0oKQorICAgICAgICBwYXRo
ID0gc2VsZi5wYXRoX3RvX3RoaXNfZmlsZShmcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZz
LmV4aXN0cyhwYXRoKSkKKworICAgIGRlZiB0ZXN0X2V4aXN0c19fZmFsc2Uoc2VsZik6CisgICAg
ICAgIGZzID0gRmlsZVN5c3RlbSgpCisgICAgICAgIHBhdGggPSBzZWxmLnBhdGhfdG9fbWlzc2lu
Z19maWxlKGZzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZzLmV4aXN0cyhwYXRoKSkKKwor
ICAgIGRlZiB0ZXN0X2lzZGlyX190cnVlKHNlbGYpOgorICAgICAgICBmcyA9IEZpbGVTeXN0ZW0o
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnMuaXNkaXIoZnMud2Via2l0X2Jhc2VfZGlyKCkp
KQorCisgICAgZGVmIHRlc3RfaXNkaXJfX2ZhbHNlKHNlbGYpOgorICAgICAgICBmcyA9IEZpbGVT
eXN0ZW0oKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZzLmlzZGlyKHNlbGYucGF0aF90b190
aGlzX2ZpbGUoZnMpKSkKKworICAgIGRlZiB0ZXN0X21heWJlX21ha2VfZGlyZWN0b3J5X19zdWNj
ZXNzKHNlbGYpOgorICAgICAgICBmcyA9IEZpbGVTeXN0ZW0oKQorICAgICAgICAjIEZJWE1FOiB0
aGVvcmV0aWNhbGx5IHRoaXMgbWlnaHQgbm90IGJlIHdyaXRhYmxlLgorICAgICAgICBiYXNlX3Bh
dGggPSB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PSdmaWxlc3lzdGVtX3VuaXR0ZXN0XycsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXI9ZnMud2Via2l0X2Jhc2VfZGlyKCkp
CisgICAgICAgIHN1Yl9wYXRoID0gb3MucGF0aC5qb2luKGJhc2VfcGF0aCwgIm5ld2RpciIpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoc3ViX3BhdGgpKQorCisgICAg
ICAgIGZzLm1heWJlX21ha2VfZGlyZWN0b3J5KHN1Yl9wYXRoKQorICAgICAgICBzZWxmLmFzc2Vy
dFRydWUob3MucGF0aC5leGlzdHMoc3ViX3BhdGgpKQorCisgICAgICAgICMgTWFrZSBzdXJlIHdl
IGNhbiByZS1jcmVhdGUgaXQuCisgICAgICAgIGZzLm1heWJlX21ha2VfZGlyZWN0b3J5KHN1Yl9w
YXRoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc3ViX3BhdGgpKQor
CisgICAgICAgICMgQ2xlYW4gdXAgZXZlcnl0aGluZy4KKyAgICAgICAgb3Mucm1kaXIoc3ViX3Bh
dGgpCisgICAgICAgIG9zLnJtZGlyKGJhc2VfcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZShvcy5wYXRoLmV4aXN0cyhzdWJfcGF0aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3Mu
cGF0aC5leGlzdHMoYmFzZV9wYXRoKSkKKworICAgIGRlZiB0ZXN0X21heWJlX21ha2VfZGlyZWN0
b3J5X19mYWlsdXJlKHNlbGYpOgorICAgICAgICBmcyA9IEZpbGVTeXN0ZW0oKQorCisgICAgICAg
ICMgRklYTUU6IG1ha2UgdGhpcyB3b3JrIHVuZGVyIGN5Z3dpbiwgd2luMzIKKyAgICAgICAgaWYg
c3lzLnBsYXRmb3JtIGluICgnZGFyd2luJywgJ2xpbnV4MicpOgorICAgICAgICAgICAgc2VsZi5h
c3NlcnRSYWlzZXMoT1NFcnJvciwgZnMubWF5YmVfbWFrZV9kaXJlY3RvcnksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiL2Jpbi9mb28iKQorCisgICAgZGVmIHRlc3RfcGF0aF9mcm9t
X3dlYmtpdF9iYXNlKHNlbGYpOgorICAgICAgICBmcyA9IEZpbGVTeXN0ZW0oKQorICAgICAgICBz
ZWxmLmFzc2VydFRydWUoZnMucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdmb28nKSkKKworICAgIGRl
ZiB0ZXN0X3JlYWRfZmlsZShzZWxmKToKKyAgICAgICAgZnMgPSBGaWxlU3lzdGVtKCkKKyAgICAg
ICAgcGF0aCA9IHNlbGYucGF0aF90b190aGlzX2ZpbGUoZnMpCisgICAgICAgIGNvbnRlbnRzID0g
ZnMucmVhZF9maWxlKHBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnU09NRV9SRUFMTFlf
VU5MSUtFTFlfU1RSSU5HJyBpbiBjb250ZW50cykKKworICAgICAgICBjb250ZW50cyA9IGZzLnJl
YWRfZmlsZShwYXRoLCBlbmNvZGluZz0idXRmLTgiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUo
J1NPTUVfUkVBTExZX1VOTElLRUxZX1NUUklORycgaW4gY29udGVudHMpCisKKyAgICBkZWYgdGVz
dF9yZWFkX0ZpbGVfX21pc3Npbmcoc2VsZik6CisgICAgICAgIGZzID0gRmlsZVN5c3RlbSgpCisg
ICAgICAgIHBhdGggPSBzZWxmLnBhdGhfdG9fbWlzc2luZ19maWxlKGZzKQorICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhJT0Vycm9yLCBmcy5yZWFkX2ZpbGUsIHBhdGgpCisKKyAgICBkZWYgdGVz
dF93cml0ZV9maWxlKHNlbGYpOgorICAgICAgICBmcyA9IEZpbGVTeXN0ZW0oKQorICAgICAgICBw
YXRoID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIEZJWE1FOiB0aGVvcmV0aWNh
bGx5IHRoaXMgbWlnaHQgbm90IGJlIHdyaXRhYmxlLgorICAgICAgICAgICAgcGF0aCA9IHRlbXBm
aWxlLm1rdGVtcChwcmVmaXg9J3RyZWVfdW5pdHRlc3RfJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGlyPWZzLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgpKQorICAgICAgICAg
ICAgZnMud3JpdGVfZmlsZShwYXRoLCAnaGVsbG8nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChmcy5yZWFkX2ZpbGUocGF0aCksICdoZWxsbycpCisgICAgICAgICAgICBzZWxmLmFzc2Vy
dFRydWUob3MucGF0aC5leGlzdHMocGF0aCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAg
ICBpZiBwYXRoOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShwYXRoKQorCisgICAgZGVmIHRl
c3Rfd2Via2l0X2Jhc2VfZGlyKHNlbGYpOgorICAgICAgICBmcyA9IEZpbGVTeXN0ZW0oKQorICAg
ICAgICBzZWxmLmFzc2VydFRydWUoZnMud2Via2l0X2Jhc2VfZGlyKCkpCisKKyAgICBkZWYgdGVz
dF93ZWJraXRfYmFzZV9kaXJfX3JhaXNlKHNlbGYpOgorICAgICAgICBmcyA9IEZpbGVTeXN0ZW0o
KQorICAgICAgICBvcmlnX3BhdGggPSBzeXMucGF0aFswXQorICAgICAgICB0cnk6CisgICAgICAg
ICAgICBzeXMucGF0aFswXSA9ICcvdG1wJworICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMo
QXNzZXJ0aW9uRXJyb3IsIGZzLndlYmtpdF9iYXNlX2RpcikKKyAgICAgICAgZmluYWxseToKKyAg
ICAgICAgICAgIHN5cy5wYXRoWzBdID0gb3JpZ19wYXRoCisKKworaWYgX19uYW1lX18gPT0gJ19f
bWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71609</attachid>
            <date>2010-10-22 16:32:34 -0700</date>
            <delta_ts>2010-10-25 16:29:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48144-20101022163233.patch</filename>
            <type>text/plain</type>
            <size>10054</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA1YWI0Yzc2MzVhZDg1MWUxYmRiZmI3NDVhNTk1ZjIxY2NkYzRmNDM0Li45ODA3MTcx
OTBiYTE0OGYyMDUwZjdhNmI0MTBjZWM2ZGM4ZGYzNDc1IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTggQEAK
IDIwMTAtMTAtMjIgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRlIGEgZmlsZXN5
c3RlbSB3cmFwcGVyIHRoYXQgd2UgY2FuIHVzZSB0byBlbmZvcmNlCisgICAgICAgIHBhcnRpY3Vs
YXIgY29udmVudGlvbnMgYW5kIHVzZSBmb3IgbW9ja2luZyBhbmQgZGVwZW5kZW5jeQorICAgICAg
ICBpbmplY3Rpb24gZG93biB0aGUgbGluZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgxNDQKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV91bml0dGVzdC5weTogQWRkZWQuCisKKzIw
MTAtMTAtMjIgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKICAgICAgICAg
UmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCiAKICAgICAgICAgdGVzdC13ZWJraXRweSBmYWlscyB3
aGVuIHBhc3NlZCAtdiAob3IgYW55IG90aGVyIG9wdGlvbikKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5IGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW0ucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uODYxMzMyMzVhNmYxMTVlMTk2ZTJmMzMzZDA0ODNiYTcyMGE0ZTIxZAotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxl
c3lzdGVtLnB5CkBAIC0wLDAgKzEsOTkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
IyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKyIiIldyYXBwZXIgb2JqZWN0IGZvciB0aGUgZmlsZSBzeXN0ZW0gLyBzb3Vy
Y2UgdHJlZS4iIiIKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAorCitp
bXBvcnQgY29kZWNzCitpbXBvcnQgZXJybm8KK2ltcG9ydCBvcworaW1wb3J0IHN5cworCisKK2Ns
YXNzIEZpbGVTeXN0ZW0ob2JqZWN0KToKKyAgICBkZWYgbWF5YmVfbWFrZV9kaXJlY3Rvcnkoc2Vs
ZiwgKnBhdGgpOgorICAgICAgICAiIiJDcmVhdGVzIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGlm
IGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
b3MubWFrZWRpcnMob3MucGF0aC5qb2luKCpwYXRoKSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3Is
IGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKKyAgICAgICAgICAg
ICAgICByYWlzZQorCisgICAgZGVmIGV4aXN0cyhzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiUmV0
dXJucyB3aGV0aGVyIHRoZSBwYXRoIGV4aXN0cyBvciBub3QuCisKKyAgICAgICAgQXJnczoKKyAg
ICAgICAgICAgIHBhdGg6IGNhbiBiZSBhYnNvbHV0ZSBvciByZWxhdGl2ZS4KKworICAgICAgICBU
aGlzIGlzIGp1c3QgYSB3cmFwcGVyIGFyb3VuZCBvcy5wYXRoLmV4aXN0cygpLgorCisgICAgICAg
ICIiIgorICAgICAgICByZXR1cm4gb3MucGF0aC5leGlzdHMocGF0aCkKKworICAgIGRlZiBpc2Rp
cihzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSBwYXRoIHJlZmVy
cyB0byBhIGRpcmVjdG9yeSBvZiB0ZXN0cy4KKworICAgICAgICBVc2VkIGJ5IHRlc3RfZXhwZWN0
YXRpb25zLnB5IHRvIGFwcGx5IHJ1bGVzIHRvIHdob2xlIGRpcmVjdG9yaWVzLiIiIgorICAgICAg
ICByZXR1cm4gb3MucGF0aC5pc2RpcihwYXRoKQorCisgICAgZGVmIHJlYWRfZmlsZShzZWxmLCBm
aWxlbmFtZSwgZW5jb2Rpbmc9Tm9uZSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGNvbnRlbnRz
IG9mIHRoZSBmaWxlIGF0IHRoZSBnaXZlbiBsb2NhdGlvbi4KKworICAgICAgICBBcmdzOgorICAg
ICAgICAgICAgZmlsZW5hbWU6IGNhbiBiZSBhYnNvbHV0ZSBvciByZWxhdGl2ZS4KKyAgICAgICAg
ICAgIGVuY29kaW5nOiBwYXNzZWQgdG8gY29kZWMub3BlbiAoZGVmYXVsdHMgdG8gTm9uZSkuIEZp
bGVzCisgICAgICAgICAgICAgICAgZW5jb2RlZCB3aXRoIE5vbmUgYXJlIGFzc3VtZWQgdG8gYmUg
YmluYXJ5IGZpbGVzIG9uCisgICAgICAgICAgICAgICAgcGxhdGZvcm1zIHdoZXJlIHRoYXQgZGlz
dGluY3Rpb24gbWF0dGVycy4KKyAgICAgICAgUmFpc2VzIElPRXJyb3IgaWYgdGhlIGZpbGUgZG9l
c24ndCBleGlzdCBvciBhbm90aGVyIGVycm9yIG9jY3Vycy4KKworICAgICAgICAiIiIKKyAgICAg
ICAgbW9kZSA9ICJyIgorICAgICAgICBpZiBlbmNvZGluZyBpcyBOb25lOgorICAgICAgICAgICAg
bW9kZSA9ICJyK2IiCisgICAgICAgIHdpdGggY29kZWNzLm9wZW4oZmlsZW5hbWUsIG1vZGUsIGVu
Y29kaW5nKSBhcyBmOgorICAgICAgICAgICAgcmV0dXJuIGYucmVhZCgpCisKKyAgICBkZWYgd3Jp
dGVfZmlsZShzZWxmLCBmaWxlbmFtZSwgY29udGVudHMsIGVuY29kaW5nPU5vbmUpOgorICAgICAg
ICAiIiJXcml0ZSB0aGUgY29udGVudHMgdG8gdGhlIGZpbGUgYXQgdGhlIGdpdmVuIGxvY2F0aW9u
LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBmaWxlbmFtZTogY2FuIGJlIGFic29sdXRl
IG9yIHJlbGF0aXZlLgorICAgICAgICAgICAgY29udGVudHM6IHN0dWZmIHRvIHdyaXRlCisgICAg
ICAgICAgICBlbmNvZGluZzogcGFzc2VkIHRvIGNvZGVjLm9wZW4gKGRlZmF1bHRzIHRvIE5vbmUp
LiBGaWxlcworICAgICAgICAgICAgICAgIGVuY29kZWQgd2l0aCBOb25lIGFyZSBhc3N1bWVkIHRv
IGJlIGJpbmFyeSBmaWxlcyBvbgorICAgICAgICAgICAgICAgIHBsYXRmb3JtcyB3aGVyZSB0aGF0
IGRpc3RpbmN0aW9uIG1hdHRlcnMuCisgICAgICAgIFJhaXNlcyBJT0Vycm9yIGlmIHRoZSBmaWxl
IGRvZXNuJ3QgZXhpc3Qgb3IgYW5vdGhlciBlcnJvciBvY2N1cnMuCisKKyAgICAgICAgIiIiCisg
ICAgICAgIG1vZGUgPSAidyIKKyAgICAgICAgaWYgZW5jb2RpbmcgaXMgTm9uZToKKyAgICAgICAg
ICAgIG1vZGUgPSAidytiIgorICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKGZpbGVuYW1lLCBtb2Rl
LCBlbmNvZGluZykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoY29udGVudHMpCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3Rl
bV91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9maWxlc3lzdGVtX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiNGIyMjI0N2NjOTM0ZmYyMDg4
MzMyYzE4Zjg2MDk2NDc2NmMxMmMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV91bml0dGVzdC5weQpAQCAtMCww
ICsxLDEyMiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0
cmlidXRpb24uCisjICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0
IHRlbXBmaWxlCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBmaWxlc3lzdGVtIGltcG9ydCBGaWxl
U3lzdGVtCisKKworY2xhc3MgRmlsZVN5c3RlbVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAg
IGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fdGhpc19kaXIgPSBzeXMucGF0aFswXQor
CisgICAgICAgICMgRklYTUU6IGNvdmVyYWdlIHNlZW1zIHRvIG1lc3Mgd2l0aCB0aGlzLCBzbyB0
aGlzIGlzIGEKKyAgICAgICAgIyB3b3JrYXJvdW5kLiBJJ20gbm90IHN1cmUgaWYgaXQgd29ya3Mg
aW4gYWxsIGNhc2VzLgorICAgICAgICBpZiBzZWxmLl90aGlzX2RpciA9PSAnJzoKKyAgICAgICAg
ICAgIHNlbGYuX3RoaXNfZGlyID0gJy4nCisKKyAgICAgICAgc2VsZi5fbWlzc2luZ19maWxlID0g
b3MucGF0aC5qb2luKHNlbGYuX3RoaXNfZGlyLCAnbWlzc2luZ19maWxlLnB5JykKKyAgICAgICAg
c2VsZi5fdGhpc19maWxlID0gb3MucGF0aC5qb2luKHNlbGYuX3RoaXNfZGlyLCAnZmlsZXN5c3Rl
bV91bml0dGVzdC5weScpCisKKyAgICBkZWYgdGVzdF9leGlzdHNfX3RydWUoc2VsZik6CisgICAg
ICAgIGZzID0gRmlsZVN5c3RlbSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmcy5leGlzdHMo
c2VsZi5fdGhpc19maWxlKSkKKworICAgIGRlZiB0ZXN0X2V4aXN0c19fZmFsc2Uoc2VsZik6Cisg
ICAgICAgIGZzID0gRmlsZVN5c3RlbSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnMuZXhp
c3RzKHNlbGYuX21pc3NpbmdfZmlsZSkpCisKKyAgICBkZWYgdGVzdF9pc2Rpcl9fdHJ1ZShzZWxm
KToKKyAgICAgICAgZnMgPSBGaWxlU3lzdGVtKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZz
LmlzZGlyKHNlbGYuX3RoaXNfZGlyKSkKKworICAgIGRlZiB0ZXN0X2lzZGlyX19mYWxzZShzZWxm
KToKKyAgICAgICAgZnMgPSBGaWxlU3lzdGVtKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShm
cy5pc2RpcihzZWxmLl90aGlzX2ZpbGUpKQorCisgICAgZGVmIHRlc3RfbWF5YmVfbWFrZV9kaXJl
Y3RvcnlfX3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIGZzID0gRmlsZVN5c3RlbSgpCisgICAgICAg
ICMgRklYTUU6IFRoZW9yZXRpY2FsbHkgdGhpcyBtaWdodCBub3QgYmUgd3JpdGFibGUuCisgICAg
ICAgIGJhc2VfcGF0aCA9IHRlbXBmaWxlLm1rdGVtcChwcmVmaXg9J2ZpbGVzeXN0ZW1fdW5pdHRl
c3RfJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcj1zZWxmLl90aGlz
X2RpcikKKyAgICAgICAgc3ViX3BhdGggPSBvcy5wYXRoLmpvaW4oYmFzZV9wYXRoLCAibmV3ZGly
IikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhzdWJfcGF0aCkpCisK
KyAgICAgICAgZnMubWF5YmVfbWFrZV9kaXJlY3Rvcnkoc3ViX3BhdGgpCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzdWJfcGF0aCkpCisKKyAgICAgICAgIyBNYWtlIHN1
cmUgd2UgY2FuIHJlLWNyZWF0ZSBpdC4KKyAgICAgICAgZnMubWF5YmVfbWFrZV9kaXJlY3Rvcnko
c3ViX3BhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzdWJfcGF0
aCkpCisKKyAgICAgICAgIyBDbGVhbiB1cCBldmVyeXRoaW5nLgorICAgICAgICBvcy5ybWRpcihz
dWJfcGF0aCkKKyAgICAgICAgb3Mucm1kaXIoYmFzZV9wYXRoKQorICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKG9zLnBhdGguZXhpc3RzKHN1Yl9wYXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZShvcy5wYXRoLmV4aXN0cyhiYXNlX3BhdGgpKQorCisgICAgZGVmIHRlc3RfbWF5YmVfbWFrZV9k
aXJlY3RvcnlfX2ZhaWx1cmUoc2VsZik6CisgICAgICAgIGZzID0gRmlsZVN5c3RlbSgpCisKKyAg
ICAgICAgIyBGSVhNRTogTWFrZSB0aGlzIHdvcmsgdW5kZXIgY3lnd2luLCB3aW4zMi4KKyAgICAg
ICAgaWYgc3lzLnBsYXRmb3JtIGluICgnZGFyd2luJywgJ2xpbnV4MicpOgorICAgICAgICAgICAg
c2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgZnMubWF5YmVfbWFrZV9kaXJlY3RvcnksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiL2Jpbi9mb28iKQorCisgICAgZGVmIHRlc3RfcmVh
ZF9maWxlKHNlbGYpOgorICAgICAgICBmcyA9IEZpbGVTeXN0ZW0oKQorICAgICAgICBjb250ZW50
cyA9IGZzLnJlYWRfZmlsZShzZWxmLl90aGlzX2ZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZSgnU09NRV9SRUFMTFlfVU5MSUtFTFlfU1RSSU5HJyBpbiBjb250ZW50cykKKworICAgICAgICBj
b250ZW50cyA9IGZzLnJlYWRfZmlsZShzZWxmLl90aGlzX2ZpbGUsIGVuY29kaW5nPSJ1dGYtOCIp
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnU09NRV9SRUFMTFlfVU5MSUtFTFlfU1RSSU5HJyBp
biBjb250ZW50cykKKworICAgIGRlZiB0ZXN0X3JlYWRfRmlsZV9fbWlzc2luZyhzZWxmKToKKyAg
ICAgICAgZnMgPSBGaWxlU3lzdGVtKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJv
ciwgZnMucmVhZF9maWxlLCBzZWxmLl9taXNzaW5nX2ZpbGUpCisKKyAgICBkZWYgdGVzdF93cml0
ZV9maWxlKHNlbGYpOgorICAgICAgICBmcyA9IEZpbGVTeXN0ZW0oKQorICAgICAgICBwYXRoID0g
Tm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIEZJWE1FOiBUaGVvcmV0aWNhbGx5IHRo
aXMgbWlnaHQgbm90IGJlIHdyaXRhYmxlLgorICAgICAgICAgICAgcGF0aCA9IHRlbXBmaWxlLm1r
dGVtcChwcmVmaXg9J3RyZWVfdW5pdHRlc3RfJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGlyPXNlbGYuX3RoaXNfZGlyKQorICAgICAgICAgICAgZnMud3JpdGVfZmlsZShw
YXRoLCAnaGVsbG8nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcy5yZWFkX2ZpbGUo
cGF0aCksICdoZWxsbycpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlz
dHMocGF0aCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBwYXRoOgorICAgICAg
ICAgICAgICAgIG9zLnJlbW92ZShwYXRoKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6
CisgICAgdW5pdHRlc3QubWFpbigpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71814</attachid>
            <date>2010-10-25 16:29:56 -0700</date>
            <delta_ts>2010-10-27 19:18:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48144-20101025162955.patch</filename>
            <type>text/plain</type>
            <size>10516</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA1YWI0Yzc2MzVhZDg1MWUxYmRiZmI3NDVhNTk1ZjIxY2NkYzRmNDM0Li45ODA3MTcx
OTBiYTE0OGYyMDUwZjdhNmI0MTBjZWM2ZGM4ZGYzNDc1IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTggQEAK
IDIwMTAtMTAtMjIgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRlIGEgZmlsZXN5
c3RlbSB3cmFwcGVyIHRoYXQgd2UgY2FuIHVzZSB0byBlbmZvcmNlCisgICAgICAgIHBhcnRpY3Vs
YXIgY29udmVudGlvbnMgYW5kIHVzZSBmb3IgbW9ja2luZyBhbmQgZGVwZW5kZW5jeQorICAgICAg
ICBpbmplY3Rpb24gZG93biB0aGUgbGluZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgxNDQKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV91bml0dGVzdC5weTogQWRkZWQuCisKKzIw
MTAtMTAtMjIgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKICAgICAgICAg
UmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCiAKICAgICAgICAgdGVzdC13ZWJraXRweSBmYWlscyB3
aGVuIHBhc3NlZCAtdiAob3IgYW55IG90aGVyIG9wdGlvbikKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5IGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW0ucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMWE1OThmZGVhZGIxZTI5NTdlZGI4NjM5M2ZjODRiNWVhMGUyMWM5YgotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxl
c3lzdGVtLnB5CkBAIC0wLDAgKzEsMTEyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisiIiJXcmFwcGVyIG9iamVjdCBmb3IgdGhlIGZpbGUgc3lzdGVtIC8gc291
cmNlIHRyZWUuIiIiCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKKwor
aW1wb3J0IGNvZGVjcworaW1wb3J0IGVycm5vCitpbXBvcnQgb3MKKworaW1wb3J0IHBhdGggYXMg
cGF0aF9tb2R1bGUKKworCitjbGFzcyBGaWxlU3lzdGVtKG9iamVjdCk6CisgICAgZGVmIGV4aXN0
cyhzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSBwYXRoIGV4aXN0
cyBvciBub3QuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHBhdGg6IGNhbiBiZSBhYnNv
bHV0ZSBvciByZWxhdGl2ZS4KKworICAgICAgICBUaGlzIGlzIGp1c3QgYSB3cmFwcGVyIGFyb3Vu
ZCBvcy5wYXRoLmV4aXN0cygpLgorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gb3MucGF0
aC5leGlzdHMocGF0aCkKKworICAgIGRlZiBpc2RpcihzZWxmLCBwYXRoKToKKyAgICAgICAgIiIi
UmV0dXJucyB3aGV0aGVyIHRoZSBwYXRoIHJlZmVycyB0byBhIGRpcmVjdG9yeSBvZiB0ZXN0cy4K
KworICAgICAgICBVc2VkIGJ5IHRlc3RfZXhwZWN0YXRpb25zLnB5IHRvIGFwcGx5IHJ1bGVzIHRv
IHdob2xlIGRpcmVjdG9yaWVzLiIiIgorICAgICAgICByZXR1cm4gb3MucGF0aC5pc2RpcihwYXRo
KQorCisgICAgZGVmIGpvaW4oc2VsZiwgKmNvbXBzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUg
cGF0aCBmb3JtZWQgYnkgam9pbmluZyB0aGUgY29tcG9uZW50cy4iIiIKKyAgICAgICAgcmV0dXJu
IG9zLnBhdGguam9pbigqY29tcHMpCisKKyAgICBkZWYgbGlzdGRpcihzZWxmLCBwYXRoKToKKyAg
ICAgICAgIiIiUmV0dXJucyB0aGUgY29udGVudHMgb2YgdGhlIGRpcmVjdG9yeSBwb2ludGVkIHRv
IGJ5IHBhdGguIiIiCisgICAgICAgIHJldHVybiBvcy5saXN0ZGlyKHBhdGgpCisKKyAgICBkZWYg
bWF5YmVfbWFrZV9kaXJlY3Rvcnkoc2VsZiwgKnBhdGgpOgorICAgICAgICAiIiJDcmVhdGVzIHRo
ZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4iIiIKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgb3MubWFrZWRpcnMob3MucGF0aC5qb2luKCpwYXRoKSkK
KyAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVy
cm5vLkVFWElTVDoKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIHBhdGhfdG9fdXJp
KHNlbGYsIHBhdGgpOgorICAgICAgICAiQ29udmVydHMgcGF0aCB0byBhbiBhYnNvbHV0ZSBwYXRo
IGFuZCB0dXJucyBpdCBpbnRvIGEgZmlsZW5hbWUgVVJJLiIKKyAgICAgICAgcmV0dXJuIHBhdGhf
bW9kdWxlLmFic3BhdGhfdG9fdXJpKG9zLnBhdGguYWJzcGF0aChwYXRoKSkKKworICAgIGRlZiBy
ZWFkX2ZpbGUoc2VsZiwgZmlsZW5hbWUsIGVuY29kaW5nPU5vbmUpOgorICAgICAgICAiIiJSZXR1
cm5zIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhdCB0aGUgZ2l2ZW4gbG9jYXRpb24uCisKKyAg
ICAgICAgQXJnczoKKyAgICAgICAgICAgIGZpbGVuYW1lOiBjYW4gYmUgYWJzb2x1dGUgb3IgcmVs
YXRpdmUuCisgICAgICAgICAgICBlbmNvZGluZzogcGFzc2VkIHRvIGNvZGVjLm9wZW4gKGRlZmF1
bHRzIHRvIE5vbmUpLiBGaWxlcworICAgICAgICAgICAgICAgIGVuY29kZWQgd2l0aCBOb25lIGFy
ZSBhc3N1bWVkIHRvIGJlIGJpbmFyeSBmaWxlcyBvbgorICAgICAgICAgICAgICAgIHBsYXRmb3Jt
cyB3aGVyZSB0aGF0IGRpc3RpbmN0aW9uIG1hdHRlcnMuCisgICAgICAgIFJhaXNlcyBJT0Vycm9y
IGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3Qgb3IgYW5vdGhlciBlcnJvciBvY2N1cnMuCisKKyAg
ICAgICAgIiIiCisgICAgICAgIG1vZGUgPSAiciIKKyAgICAgICAgaWYgZW5jb2RpbmcgaXMgTm9u
ZToKKyAgICAgICAgICAgIG1vZGUgPSAicitiIgorICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKGZp
bGVuYW1lLCBtb2RlLCBlbmNvZGluZykgYXMgZjoKKyAgICAgICAgICAgIHJldHVybiBmLnJlYWQo
KQorCisgICAgZGVmIHdyaXRlX2ZpbGUoc2VsZiwgZmlsZW5hbWUsIGNvbnRlbnRzLCBlbmNvZGlu
Zz1Ob25lKToKKyAgICAgICAgIiIiV3JpdGUgdGhlIGNvbnRlbnRzIHRvIHRoZSBmaWxlIGF0IHRo
ZSBnaXZlbiBsb2NhdGlvbi4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgZmlsZW5hbWU6
IGNhbiBiZSBhYnNvbHV0ZSBvciByZWxhdGl2ZS4KKyAgICAgICAgICAgIGNvbnRlbnRzOiBzdHVm
ZiB0byB3cml0ZQorICAgICAgICAgICAgZW5jb2Rpbmc6IHBhc3NlZCB0byBjb2RlYy5vcGVuIChk
ZWZhdWx0cyB0byBOb25lKS4gRmlsZXMKKyAgICAgICAgICAgICAgICBlbmNvZGVkIHdpdGggTm9u
ZSBhcmUgYXNzdW1lZCB0byBiZSBiaW5hcnkgZmlsZXMgb24KKyAgICAgICAgICAgICAgICBwbGF0
Zm9ybXMgd2hlcmUgdGhhdCBkaXN0aW5jdGlvbiBtYXR0ZXJzLgorICAgICAgICBSYWlzZXMgSU9F
cnJvciBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IG9yIGFub3RoZXIgZXJyb3Igb2NjdXJzLgor
CisgICAgICAgICIiIgorICAgICAgICBtb2RlID0gInciCisgICAgICAgIGlmIGVuY29kaW5nIGlz
IE5vbmU6CisgICAgICAgICAgICBtb2RlID0gIncrYiIKKyAgICAgICAgd2l0aCBjb2RlY3Mub3Bl
bihmaWxlbmFtZSwgbW9kZSwgZW5jb2RpbmcpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGNv
bnRlbnRzKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL2ZpbGVzeXN0ZW1fdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV91bml0dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MzFm
MzA5ZTVjZTQ4ZWQwZWFmNTc1MzBiNWMyZTc5ZDI5NjU0NDZlCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fdW5p
dHRlc3QucHkKQEAgLTAsMCArMSwxMjEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisjIG1ldDoKKyMKKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MKK2lt
cG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gZmlsZXN5
c3RlbSBpbXBvcnQgRmlsZVN5c3RlbQorCisKK2NsYXNzIEZpbGVTeXN0ZW1UZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX3RoaXNfZGly
ID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpCisgICAgICAgIHNl
bGYuX21pc3NpbmdfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLl90aGlzX2RpciwgJ21pc3Npbmdf
ZmlsZS5weScpCisgICAgICAgIHNlbGYuX3RoaXNfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLl90
aGlzX2RpciwgJ2ZpbGVzeXN0ZW1fdW5pdHRlc3QucHknKQorCisgICAgZGVmIHRlc3RfZXhpc3Rz
X190cnVlKHNlbGYpOgorICAgICAgICBmcyA9IEZpbGVTeXN0ZW0oKQorICAgICAgICBzZWxmLmFz
c2VydFRydWUoZnMuZXhpc3RzKHNlbGYuX3RoaXNfZmlsZSkpCisKKyAgICBkZWYgdGVzdF9leGlz
dHNfX2ZhbHNlKHNlbGYpOgorICAgICAgICBmcyA9IEZpbGVTeXN0ZW0oKQorICAgICAgICBzZWxm
LmFzc2VydEZhbHNlKGZzLmV4aXN0cyhzZWxmLl9taXNzaW5nX2ZpbGUpKQorCisgICAgZGVmIHRl
c3RfaXNkaXJfX3RydWUoc2VsZik6CisgICAgICAgIGZzID0gRmlsZVN5c3RlbSgpCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShmcy5pc2RpcihzZWxmLl90aGlzX2RpcikpCisKKyAgICBkZWYgdGVz
dF9pc2Rpcl9fZmFsc2Uoc2VsZik6CisgICAgICAgIGZzID0gRmlsZVN5c3RlbSgpCisgICAgICAg
IHNlbGYuYXNzZXJ0RmFsc2UoZnMuaXNkaXIoc2VsZi5fdGhpc19maWxlKSkKKworICAgIGRlZiB0
ZXN0X2pvaW4oc2VsZik6CisgICAgICAgIGZzID0gRmlsZVN5c3RlbSgpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoZnMuam9pbignZm9vJywgJ2JhcicpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIG9zLnBhdGguam9pbignZm9vJywgJ2JhcicpKQorCisgICAgZGVmIHRlc3RfbWF5YmVfbWFr
ZV9kaXJlY3RvcnlfX3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIGZzID0gRmlsZVN5c3RlbSgpCisg
ICAgICAgICMgRklYTUU6IFRoZW9yZXRpY2FsbHkgdGhpcyBtaWdodCBub3QgYmUgd3JpdGFibGUu
CisgICAgICAgIGJhc2VfcGF0aCA9IHRlbXBmaWxlLm1rdGVtcChwcmVmaXg9J2ZpbGVzeXN0ZW1f
dW5pdHRlc3RfJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcj1zZWxm
Ll90aGlzX2RpcikKKyAgICAgICAgc3ViX3BhdGggPSBvcy5wYXRoLmpvaW4oYmFzZV9wYXRoLCAi
bmV3ZGlyIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhzdWJfcGF0
aCkpCisKKyAgICAgICAgZnMubWF5YmVfbWFrZV9kaXJlY3Rvcnkoc3ViX3BhdGgpCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzdWJfcGF0aCkpCisKKyAgICAgICAgIyBN
YWtlIHN1cmUgd2UgY2FuIHJlLWNyZWF0ZSBpdC4KKyAgICAgICAgZnMubWF5YmVfbWFrZV9kaXJl
Y3Rvcnkoc3ViX3BhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhz
dWJfcGF0aCkpCisKKyAgICAgICAgIyBDbGVhbiB1cCBldmVyeXRoaW5nLgorICAgICAgICBvcy5y
bWRpcihzdWJfcGF0aCkKKyAgICAgICAgb3Mucm1kaXIoYmFzZV9wYXRoKQorICAgICAgICBzZWxm
LmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHN1Yl9wYXRoKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRGYWxzZShvcy5wYXRoLmV4aXN0cyhiYXNlX3BhdGgpKQorCisgICAgZGVmIHRlc3RfbWF5YmVf
bWFrZV9kaXJlY3RvcnlfX2ZhaWx1cmUoc2VsZik6CisgICAgICAgIGZzID0gRmlsZVN5c3RlbSgp
CisKKyAgICAgICAgIyBGSVhNRTogTWFrZSB0aGlzIHdvcmsgdW5kZXIgY3lnd2luLCB3aW4zMi4K
KyAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnZGFyd2luJywgJ2xpbnV4MicpOgorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgZnMubWF5YmVfbWFrZV9kaXJlY3Rvcnks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL2Jpbi9mb28iKQorCisgICAgZGVmIHRl
c3RfcmVhZF9maWxlKHNlbGYpOgorICAgICAgICBmcyA9IEZpbGVTeXN0ZW0oKQorICAgICAgICBj
b250ZW50cyA9IGZzLnJlYWRfZmlsZShzZWxmLl90aGlzX2ZpbGUpCisgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZSgnU09NRV9SRUFMTFlfVU5MSUtFTFlfU1RSSU5HJyBpbiBjb250ZW50cykKKworICAg
ICAgICBjb250ZW50cyA9IGZzLnJlYWRfZmlsZShzZWxmLl90aGlzX2ZpbGUsIGVuY29kaW5nPSJ1
dGYtOCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnU09NRV9SRUFMTFlfVU5MSUtFTFlfU1RS
SU5HJyBpbiBjb250ZW50cykKKworICAgIGRlZiB0ZXN0X3JlYWRfRmlsZV9fbWlzc2luZyhzZWxm
KToKKyAgICAgICAgZnMgPSBGaWxlU3lzdGVtKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMo
SU9FcnJvciwgZnMucmVhZF9maWxlLCBzZWxmLl9taXNzaW5nX2ZpbGUpCisKKyAgICBkZWYgdGVz
dF93cml0ZV9maWxlKHNlbGYpOgorICAgICAgICBmcyA9IEZpbGVTeXN0ZW0oKQorICAgICAgICBw
YXRoID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIEZJWE1FOiBUaGVvcmV0aWNh
bGx5IHRoaXMgbWlnaHQgbm90IGJlIHdyaXRhYmxlLgorICAgICAgICAgICAgcGF0aCA9IHRlbXBm
aWxlLm1rdGVtcChwcmVmaXg9J3RyZWVfdW5pdHRlc3RfJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGlyPXNlbGYuX3RoaXNfZGlyKQorICAgICAgICAgICAgZnMud3JpdGVf
ZmlsZShwYXRoLCAnaGVsbG8nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcy5yZWFk
X2ZpbGUocGF0aCksICdoZWxsbycpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0
aC5leGlzdHMocGF0aCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBwYXRoOgor
ICAgICAgICAgICAgICAgIG9zLnJlbW92ZShwYXRoKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21h
aW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72131</attachid>
            <date>2010-10-27 19:18:29 -0700</date>
            <delta_ts>2010-11-01 14:51:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48144-20101027191828.patch</filename>
            <type>text/plain</type>
            <size>12631</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBlNjcyMTdhNWMzMjI5MTUwNjBiNzQ5OGNmYzYxMDcyZjY1YzA4MTQ0Li44ODc0YzZh
MGI5ZGU3ZGQyNWIwNTY2MGIyYTJiZTQxY2UzMzgxMTkyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTAtMTAtMjIgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRlIGEgZmlsZXN5
c3RlbSB3cmFwcGVyIHRoYXQgd2UgY2FuIHVzZSB0byBlbmZvcmNlCisgICAgICAgIHBhcnRpY3Vs
YXIgY29udmVudGlvbnMgYW5kIHVzZSBmb3IgbW9ja2luZyBhbmQgZGVwZW5kZW5jeQorICAgICAg
ICBpbmplY3Rpb24gZG93biB0aGUgbGluZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgxNDQKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV91bml0dGVzdC5weTogQWRkZWQuCisKIDIw
MTAtMTAtMjcgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IE9qYW4gVmFmYWkuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAwMmE2OTkxMThm
OTQ3N2FiZjgwYTdmODQ2NGI0ZTUyYjE4M2UwMzUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weQpAQCAtMCww
ICsxLDE0MiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRp
c3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIldyYXBwZXIgb2JqZWN0IGZvciB0aGUg
ZmlsZSBzeXN0ZW0gLyBzb3VyY2UgdHJlZS4iIiIKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3
aXRoX3N0YXRlbWVudAorCitpbXBvcnQgY29kZWNzCitpbXBvcnQgZXJybm8KK2ltcG9ydCBvcwor
aW1wb3J0IHRlbXBmaWxlCisKKyMgRklYTUU6IFdlIHNob3VsZCBqdXN0IG1lcmdlIHRoZSBwYXRo
IG1vZHVsZSBpbnRvIHRoaXMgb25lLgoraW1wb3J0IHBhdGggYXMgcGF0aF9tb2R1bGUKKworCitj
bGFzcyBGaWxlU3lzdGVtKG9iamVjdCk6CisgICAgZGVmIGV4aXN0cyhzZWxmLCBwYXRoKToKKyAg
ICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSBwYXRoIGV4aXN0cyBvciBub3QuCisKKyAgICAg
ICAgQXJnczoKKyAgICAgICAgICAgIHBhdGg6IGNhbiBiZSBhYnNvbHV0ZSBvciByZWxhdGl2ZS4K
KworICAgICAgICBUaGlzIGlzIGp1c3QgYSB3cmFwcGVyIGFyb3VuZCBvcy5wYXRoLmV4aXN0cygp
LgorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gb3MucGF0aC5leGlzdHMocGF0aCkKKwor
ICAgIGRlZiBpc2RpcihzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRo
ZSBwYXRoIHJlZmVycyB0byBhIGRpcmVjdG9yeSBvZiB0ZXN0cy4KKworICAgICAgICBVc2VkIGJ5
IHRlc3RfZXhwZWN0YXRpb25zLnB5IHRvIGFwcGx5IHJ1bGVzIHRvIHdob2xlIGRpcmVjdG9yaWVz
LiIiIgorICAgICAgICByZXR1cm4gb3MucGF0aC5pc2RpcihwYXRoKQorCisgICAgZGVmIGpvaW4o
c2VsZiwgKmNvbXBzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgcGF0aCBmb3JtZWQgYnkgam9p
bmluZyB0aGUgY29tcG9uZW50cy4iIiIKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbigqY29t
cHMpCisKKyAgICBkZWYgbGlzdGRpcihzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiUmV0dXJucyB0
aGUgY29udGVudHMgb2YgdGhlIGRpcmVjdG9yeSBwb2ludGVkIHRvIGJ5IHBhdGguIiIiCisgICAg
ICAgIHJldHVybiBvcy5saXN0ZGlyKHBhdGgpCisKKyAgICBkZWYgbWtkdGVtcChzZWxmLCAqKmt3
YXJncyk6CisgICAgICAgICIiIkNyZWF0ZXMgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5LgorCisgICAg
ICAgIFRoaXMgaXMgbGlrZSB0ZW1wZmlsZS5ta2R0ZW1wLCBidXQgaWYgdXNlZCBpbiBhIHdpdGgg
c3RhdGVtZW50CisgICAgICAgIHRoZSBkaXJlY3Rvcnkgd2lsbCBzZWxmLWRlbGV0ZSBhdCB0aGUg
ZW5kIG9mIHRoZSBibG9jayAoaWYgdGhlCisgICAgICAgIGRpcmVjdG9yeSBpcyBlbXB0eTsgbm9u
LWVtcHR5IGRpcmVjdG9yaWVzIHJhaXNlIGVycm9ycykuIFRoZQorICAgICAgICBkaXJlY3Rvcnkg
Y2FuIGJlIHNhZmVseSBkZWxldGVkIGluc2lkZSB0aGUgYmxvY2sgYXMgd2VsbCwgaWYgc28KKyAg
ICAgICAgZGVzaXJlZC4KKworICAgICAgICAiIiIKKyAgICAgICAgY2xhc3MgVGVtcG9yYXJ5RGly
ZWN0b3J5KG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3Mp
OgorICAgICAgICAgICAgICAgIHNlbGYuX2t3YXJncyA9IGt3YXJncworICAgICAgICAgICAgICAg
IHNlbGYuX2RpcmVjdG9yeV9wYXRoID0gTm9uZQorCisgICAgICAgICAgICBkZWYgX19lbnRlcl9f
KHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuX2RpcmVjdG9yeV9wYXRoID0gdGVtcGZpbGUu
bWtkdGVtcCgqKnNlbGYuX2t3YXJncykKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGly
ZWN0b3J5X3BhdGgKKworICAgICAgICAgICAgZGVmIF9fZXhpdF9fKHNlbGYsIHR5cGUsIHZhbHVl
LCB0cmFjZWJhY2spOgorICAgICAgICAgICAgICAgICMgT25seSBzZWxmLWRlbGV0ZSBpZiBuZWNl
c3NhcnkuCisKKyAgICAgICAgICAgICAgICAjIEZJWE1FOiBTaG91bGQgd2UgZGVsZXRlIG5vbi1l
bXB0eSBkaXJlY3Rvcmllcz8KKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxm
Ll9kaXJlY3RvcnlfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIG9zLnJtZGlyKHNlbGYuX2Rp
cmVjdG9yeV9wYXRoKQorCisgICAgICAgIHJldHVybiBUZW1wb3JhcnlEaXJlY3RvcnkoKiprd2Fy
Z3MpCisKKyAgICBkZWYgbWF5YmVfbWFrZV9kaXJlY3Rvcnkoc2VsZiwgKnBhdGgpOgorICAgICAg
ICAiIiJDcmVhdGVzIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgYWxyZWFk
eSBleGlzdC4iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MubWFrZWRpcnMob3MucGF0
aC5qb2luKCpwYXRoKSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgICAgICBp
ZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAg
ZGVmIHBhdGhfdG9fdXJpKHNlbGYsIHBhdGgpOgorICAgICAgICAiQ29udmVydHMgcGF0aCB0byBh
biBhYnNvbHV0ZSBwYXRoIGFuZCB0dXJucyBpdCBpbnRvIGEgZmlsZW5hbWUgVVJJLiIKKyAgICAg
ICAgIyBGSVhNRTogc2VlIGNvbW1lbnQgYXQgdG9wIG9mIHRoZSBmaWxlIHJlOiBwYXRoIG1vZHVs
ZS4KKyAgICAgICAgcmV0dXJuIHBhdGhfbW9kdWxlLmFic3BhdGhfdG9fdXJpKG9zLnBhdGguYWJz
cGF0aChwYXRoKSkKKworICAgIGRlZiByZWFkX2ZpbGUoc2VsZiwgZmlsZW5hbWUsIGVuY29kaW5n
PU5vbmUpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhdCB0
aGUgZ2l2ZW4gbG9jYXRpb24uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGZpbGVuYW1l
OiBjYW4gYmUgYWJzb2x1dGUgb3IgcmVsYXRpdmUuCisgICAgICAgICAgICBlbmNvZGluZzogcGFz
c2VkIHRvIGNvZGVjLm9wZW4gKGRlZmF1bHRzIHRvIE5vbmUpLiBGaWxlcworICAgICAgICAgICAg
ICAgIGVuY29kZWQgd2l0aCBOb25lIGFyZSBhc3N1bWVkIHRvIGJlIGJpbmFyeSBmaWxlcyBvbgor
ICAgICAgICAgICAgICAgIHBsYXRmb3JtcyB3aGVyZSB0aGF0IGRpc3RpbmN0aW9uIG1hdHRlcnMu
CisgICAgICAgIFJhaXNlcyBJT0Vycm9yIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3Qgb3IgYW5v
dGhlciBlcnJvciBvY2N1cnMuCisKKyAgICAgICAgIiIiCisgICAgICAgIG1vZGUgPSAiciIKKyAg
ICAgICAgaWYgZW5jb2RpbmcgaXMgTm9uZToKKyAgICAgICAgICAgIG1vZGUgPSAicitiIgorICAg
ICAgICB3aXRoIGNvZGVjcy5vcGVuKGZpbGVuYW1lLCBtb2RlLCBlbmNvZGluZykgYXMgZjoKKyAg
ICAgICAgICAgIHJldHVybiBmLnJlYWQoKQorCisgICAgZGVmIHdyaXRlX2ZpbGUoc2VsZiwgZmls
ZW5hbWUsIGNvbnRlbnRzLCBlbmNvZGluZz1Ob25lKToKKyAgICAgICAgIiIiV3JpdGUgdGhlIGNv
bnRlbnRzIHRvIHRoZSBmaWxlIGF0IHRoZSBnaXZlbiBsb2NhdGlvbi4KKworICAgICAgICBBcmdz
OgorICAgICAgICAgICAgZmlsZW5hbWU6IGNhbiBiZSBhYnNvbHV0ZSBvciByZWxhdGl2ZS4KKyAg
ICAgICAgICAgIGNvbnRlbnRzOiBzdHVmZiB0byB3cml0ZQorICAgICAgICAgICAgZW5jb2Rpbmc6
IHBhc3NlZCB0byBjb2RlYy5vcGVuIChkZWZhdWx0cyB0byBOb25lKS4gRmlsZXMKKyAgICAgICAg
ICAgICAgICBlbmNvZGVkIHdpdGggTm9uZSBhcmUgYXNzdW1lZCB0byBiZSBiaW5hcnkgZmlsZXMg
b24KKyAgICAgICAgICAgICAgICBwbGF0Zm9ybXMgd2hlcmUgdGhhdCBkaXN0aW5jdGlvbiBtYXR0
ZXJzLgorICAgICAgICBSYWlzZXMgSU9FcnJvciBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IG9y
IGFub3RoZXIgZXJyb3Igb2NjdXJzLgorCisgICAgICAgICIiIgorICAgICAgICBtb2RlID0gInci
CisgICAgICAgIGlmIGVuY29kaW5nIGlzIE5vbmU6CisgICAgICAgICAgICBtb2RlID0gIncrYiIK
KyAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihmaWxlbmFtZSwgbW9kZSwgZW5jb2RpbmcpIGFzIGY6
CisgICAgICAgICAgICBmLndyaXRlKGNvbnRlbnRzKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fdW5pdHRlc3QucHkgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV91bml0
dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42ODI2Y2E2YTkwMTdmOTAxZGRiYzkyNDA2ZGVkODBiNDk2YjFj
YmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL2ZpbGVzeXN0ZW1fdW5pdHRlc3QucHkKQEAgLTAsMCArMSwxNDggQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CisKK2ltcG9y
dCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdW5pdHRlc3QKKworZnJv
bSBmaWxlc3lzdGVtIGltcG9ydCBGaWxlU3lzdGVtCisKKworY2xhc3MgRmlsZVN5c3RlbVRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5f
dGhpc19kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkKKyAg
ICAgICAgc2VsZi5fbWlzc2luZ19maWxlID0gb3MucGF0aC5qb2luKHNlbGYuX3RoaXNfZGlyLCAn
bWlzc2luZ19maWxlLnB5JykKKyAgICAgICAgc2VsZi5fdGhpc19maWxlID0gb3MucGF0aC5qb2lu
KHNlbGYuX3RoaXNfZGlyLCAnZmlsZXN5c3RlbV91bml0dGVzdC5weScpCisKKyAgICBkZWYgdGVz
dF9leGlzdHNfX3RydWUoc2VsZik6CisgICAgICAgIGZzID0gRmlsZVN5c3RlbSgpCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShmcy5leGlzdHMoc2VsZi5fdGhpc19maWxlKSkKKworICAgIGRlZiB0
ZXN0X2V4aXN0c19fZmFsc2Uoc2VsZik6CisgICAgICAgIGZzID0gRmlsZVN5c3RlbSgpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnMuZXhpc3RzKHNlbGYuX21pc3NpbmdfZmlsZSkpCisKKyAg
ICBkZWYgdGVzdF9pc2Rpcl9fdHJ1ZShzZWxmKToKKyAgICAgICAgZnMgPSBGaWxlU3lzdGVtKCkK
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZzLmlzZGlyKHNlbGYuX3RoaXNfZGlyKSkKKworICAg
IGRlZiB0ZXN0X2lzZGlyX19mYWxzZShzZWxmKToKKyAgICAgICAgZnMgPSBGaWxlU3lzdGVtKCkK
KyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmcy5pc2RpcihzZWxmLl90aGlzX2ZpbGUpKQorCisg
ICAgZGVmIHRlc3Rfam9pbihzZWxmKToKKyAgICAgICAgZnMgPSBGaWxlU3lzdGVtKCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChmcy5qb2luKCdmb28nLCAnYmFyJyksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgb3MucGF0aC5qb2luKCdmb28nLCAnYmFyJykpCisKKyAgICBkZWYgdGVzdF9s
aXN0ZGlyKHNlbGYpOgorICAgICAgICBmcyA9IEZpbGVTeXN0ZW0oKQorICAgICAgICB3aXRoIGZz
Lm1rZHRlbXAocHJlZml4PSdmaWxlc3lzdGVtX3VuaXR0ZXN0XycpIGFzIGQ6CisgICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGZzLmxpc3RkaXIoZCksIFtdKQorICAgICAgICAgICAgbmV3X2Zp
bGUgPSBvcy5wYXRoLmpvaW4oZCwgJ2ZvbycpCisgICAgICAgICAgICBmcy53cml0ZV9maWxlKG5l
d19maWxlLCAnZm9vJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnMubGlzdGRpcihk
KSwgWydmb28nXSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShuZXdfZmlsZSkKKworICAgIGRlZiB0
ZXN0X21heWJlX21ha2VfZGlyZWN0b3J5X19zdWNjZXNzKHNlbGYpOgorICAgICAgICBmcyA9IEZp
bGVTeXN0ZW0oKQorCisgICAgICAgIHdpdGggZnMubWtkdGVtcChwcmVmaXg9J2ZpbGVzeXN0ZW1f
dW5pdHRlc3RfJykgYXMgYmFzZV9wYXRoOgorICAgICAgICAgICAgc3ViX3BhdGggPSBvcy5wYXRo
LmpvaW4oYmFzZV9wYXRoLCAibmV3ZGlyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
b3MucGF0aC5leGlzdHMoc3ViX3BhdGgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShm
cy5pc2RpcihzdWJfcGF0aCkpCisKKyAgICAgICAgICAgIGZzLm1heWJlX21ha2VfZGlyZWN0b3J5
KHN1Yl9wYXRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHN1
Yl9wYXRoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmcy5pc2RpcihzdWJfcGF0aCkp
CisKKyAgICAgICAgICAgICMgTWFrZSBzdXJlIHdlIGNhbiByZS1jcmVhdGUgaXQuCisgICAgICAg
ICAgICBmcy5tYXliZV9tYWtlX2RpcmVjdG9yeShzdWJfcGF0aCkKKyAgICAgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzdWJfcGF0aCkpCisgICAgICAgICAgICBzZWxmLmFz
c2VydFRydWUoZnMuaXNkaXIoc3ViX3BhdGgpKQorCisgICAgICAgICAgICAjIENsZWFuIHVwLgor
ICAgICAgICAgICAgb3Mucm1kaXIoc3ViX3BhdGgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZShvcy5wYXRoLmV4aXN0cyhiYXNlX3BhdGgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZz
LmlzZGlyKGJhc2VfcGF0aCkpCisKKyAgICBkZWYgdGVzdF9tYXliZV9tYWtlX2RpcmVjdG9yeV9f
ZmFpbHVyZShzZWxmKToKKyAgICAgICAgZnMgPSBGaWxlU3lzdGVtKCkKKworICAgICAgICAjIEZJ
WE1FOiBJJ20gbm90IHN1cmUgaG93IHRvIG1ha2UgdGhpcyB0ZXN0IHdvcmsgdW5kZXIgY3lnd2lu
IG9yCisgICAgICAgICMgd2luMzIgc2luY2UgdGhlIHdob2xlIGZpbGVzeXN0ZW0gaXMgdXN1YWxs
eSB3cml0ZWFibGUuCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2RhcndpbicsICdsaW51
eDInKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGZzLm1heWJlX21h
a2VfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9iaW4vZm9vIikK
KworICAgIGRlZiB0ZXN0X3BhdGhfdG9fdXJpKHNlbGYpOgorICAgICAgICBmcyA9IEZpbGVTeXN0
ZW0oKQorCisgICAgICAgICMgTm90ZSB0aGF0IHRoZSByZWFsIHVuaXQgdGVzdHMgZm9yIHRoaXMg
cm91dGluZSBhcmUgaW4KKyAgICAgICAgIyBwYXRoX3VuaXR0ZXN0LnB5LgorICAgICAgICBpZiBz
eXMucGxhdGZvcm0gaW4gKCdkYXJ3aW4nLCAnbGludXgyJyk6CisgICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGZzLnBhdGhfdG9fdXJpKCcvYmluL2ZvbycpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnZmlsZTovLy9iaW4vZm9vJykKKyAgICAgICAgZWxpZiBzeXMucGxhdGZvcm0g
PT0gJ2N5Z3dpbic6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZzLnBhdGhfdG9fdXJp
KCcvY3lnZHJpdmUvYy9mb28udHh0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdm
aWxlOi8vL2MvZm9vLnR4dCcpCisgICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6
CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZzLnBhdGhfdG9fdXJpKCdjOlxcZm9vLnR4
dCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZTovLy9jL2Zvby50eHQnKQor
CisgICAgZGVmIHRlc3RfcmVhZF9maWxlKHNlbGYpOgorICAgICAgICBmcyA9IEZpbGVTeXN0ZW0o
KQorICAgICAgICBjb250ZW50cyA9IGZzLnJlYWRfZmlsZShzZWxmLl90aGlzX2ZpbGUpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnU09NRV9SRUFMTFlfVU5MSUtFTFlfU1RSSU5HJyBpbiBjb250
ZW50cykKKworICAgICAgICBjb250ZW50cyA9IGZzLnJlYWRfZmlsZShzZWxmLl90aGlzX2ZpbGUs
IGVuY29kaW5nPSJ1dGYtOCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnU09NRV9SRUFMTFlf
VU5MSUtFTFlfU1RSSU5HJyBpbiBjb250ZW50cykKKworICAgIGRlZiB0ZXN0X3JlYWRfRmlsZV9f
bWlzc2luZyhzZWxmKToKKyAgICAgICAgZnMgPSBGaWxlU3lzdGVtKCkKKyAgICAgICAgc2VsZi5h
c3NlcnRSYWlzZXMoSU9FcnJvciwgZnMucmVhZF9maWxlLCBzZWxmLl9taXNzaW5nX2ZpbGUpCisK
KyAgICBkZWYgdGVzdF93cml0ZV9maWxlKHNlbGYpOgorICAgICAgICBmcyA9IEZpbGVTeXN0ZW0o
KQorICAgICAgICBwYXRoID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXRoID0g
dGVtcGZpbGUubWt0ZW1wKHByZWZpeD0ndHJlZV91bml0dGVzdF8nKQorICAgICAgICAgICAgZnMu
d3JpdGVfZmlsZShwYXRoLCAnaGVsbG8nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChm
cy5yZWFkX2ZpbGUocGF0aCksICdoZWxsbycpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUo
b3MucGF0aC5leGlzdHMocGF0aCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBw
YXRoOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShwYXRoKQorCisKK2lmIF9fbmFtZV9fID09
ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72568</attachid>
            <date>2010-11-01 14:51:42 -0700</date>
            <delta_ts>2010-11-04 17:22:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48144-20101101145141.patch</filename>
            <type>text/plain</type>
            <size>12420</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA3ZjA0NWFkNTcxYWE5NzExMzE4OTliN2NhMDFiMDE4MTRjNDU4ZTkyLi5jMGJlN2E4
NDVlM2I1ZWU4YmRmZjQ3MzFiNGE5NGUyNWE4NDc5NmQ5IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTAtMTAtMjIgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRlIGEgZmlsZXN5
c3RlbSB3cmFwcGVyIHRoYXQgd2UgY2FuIHVzZSB0byBlbmZvcmNlCisgICAgICAgIHBhcnRpY3Vs
YXIgY29udmVudGlvbnMgYW5kIHVzZSBmb3IgbW9ja2luZyBhbmQgZGVwZW5kZW5jeQorICAgICAg
ICBpbmplY3Rpb24gZG93biB0aGUgbGluZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgxNDQKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV91bml0dGVzdC5weTogQWRkZWQuCisKIDIw
MTAtMTAtMzAgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEFudG9uaW8gR29tZXMuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdmYTNm
YzI4NWE0NjQ2ZDgyMmRhMWVmYmU1MWNkMzg3MjE3NzQ3YjEKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weQpA
QCAtMCwwICsxLDEzMCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0Ogor
IworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIldyYXBwZXIgb2JqZWN0IGZv
ciB0aGUgZmlsZSBzeXN0ZW0gLyBzb3VyY2UgdHJlZS4iIiIKKworZnJvbSBfX2Z1dHVyZV9fIGlt
cG9ydCB3aXRoX3N0YXRlbWVudAorCitpbXBvcnQgY29kZWNzCitpbXBvcnQgZXJybm8KK2ltcG9y
dCBvcworaW1wb3J0IHRlbXBmaWxlCisKKyMgRklYTUU6IFdlIHNob3VsZCBqdXN0IG1lcmdlIHRo
ZSBwYXRoIG1vZHVsZSBpbnRvIHRoaXMgb25lLgoraW1wb3J0IHBhdGggYXMgcGF0aF9tb2R1bGUK
KworCitjbGFzcyBGaWxlU3lzdGVtKG9iamVjdCk6CisgICAgZGVmIGV4aXN0cyhzZWxmLCBwYXRo
KToKKyAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSBwYXRoIGV4aXN0cyBpbiB0aGUgZmls
ZXN5c3RlbS4iIiIKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguZXhpc3RzKHBhdGgpCisKKyAgICBk
ZWYgaXNkaXIoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIlJldHVybnMgd2hldGhlciB0aGUgcGF0
aCByZWZlcnMgdG8gYSBkaXJlY3RvcnkuIiIiCisgICAgICAgIHJldHVybiBvcy5wYXRoLmlzZGly
KHBhdGgpCisKKyAgICBkZWYgam9pbihzZWxmLCAqY29tcHMpOgorICAgICAgICAiIiJSZXR1cm5z
IHRoZSBwYXRoIGZvcm1lZCBieSBqb2luaW5nIHRoZSBjb21wb25lbnRzLiIiIgorICAgICAgICBy
ZXR1cm4gb3MucGF0aC5qb2luKCpjb21wcykKKworICAgIGRlZiBsaXN0ZGlyKHNlbGYsIHBhdGgp
OgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBjb250ZW50cyBvZiB0aGUgZGlyZWN0b3J5IHBvaW50
ZWQgdG8gYnkgcGF0aC4iIiIKKyAgICAgICAgcmV0dXJuIG9zLmxpc3RkaXIocGF0aCkKKworICAg
IGRlZiBta2R0ZW1wKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgIiIiQ3JlYXRlcyBhIHRlbXBv
cmFyeSBkaXJlY3RvcnkuCisKKyAgICAgICAgVGhpcyBpcyBsaWtlIHRlbXBmaWxlLm1rZHRlbXAs
IGJ1dCBpZiB1c2VkIGluIGEgd2l0aCBzdGF0ZW1lbnQKKyAgICAgICAgdGhlIGRpcmVjdG9yeSB3
aWxsIHNlbGYtZGVsZXRlIGF0IHRoZSBlbmQgb2YgdGhlIGJsb2NrIChpZiB0aGUKKyAgICAgICAg
ZGlyZWN0b3J5IGlzIGVtcHR5OyBub24tZW1wdHkgZGlyZWN0b3JpZXMgcmFpc2UgZXJyb3JzKS4g
VGhlCisgICAgICAgIGRpcmVjdG9yeSBjYW4gYmUgc2FmZWx5IGRlbGV0ZWQgaW5zaWRlIHRoZSBi
bG9jayBhcyB3ZWxsLCBpZiBzbworICAgICAgICBkZXNpcmVkLgorICAgICAgICAiIiIKKyAgICAg
ICAgY2xhc3MgVGVtcG9yYXJ5RGlyZWN0b3J5KG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19p
bml0X18oc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgIHNlbGYuX2t3YXJncyA9IGt3
YXJncworICAgICAgICAgICAgICAgIHNlbGYuX2RpcmVjdG9yeV9wYXRoID0gTm9uZQorCisgICAg
ICAgICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuX2RpcmVj
dG9yeV9wYXRoID0gdGVtcGZpbGUubWtkdGVtcCgqKnNlbGYuX2t3YXJncykKKyAgICAgICAgICAg
ICAgICByZXR1cm4gc2VsZi5fZGlyZWN0b3J5X3BhdGgKKworICAgICAgICAgICAgZGVmIF9fZXhp
dF9fKHNlbGYsIHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOgorICAgICAgICAgICAgICAgICMgT25s
eSBzZWxmLWRlbGV0ZSBpZiBuZWNlc3NhcnkuCisKKyAgICAgICAgICAgICAgICAjIEZJWE1FOiBT
aG91bGQgd2UgZGVsZXRlIG5vbi1lbXB0eSBkaXJlY3Rvcmllcz8KKyAgICAgICAgICAgICAgICBp
ZiBvcy5wYXRoLmV4aXN0cyhzZWxmLl9kaXJlY3RvcnlfcGF0aCk6CisgICAgICAgICAgICAgICAg
ICAgIG9zLnJtZGlyKHNlbGYuX2RpcmVjdG9yeV9wYXRoKQorCisgICAgICAgIHJldHVybiBUZW1w
b3JhcnlEaXJlY3RvcnkoKiprd2FyZ3MpCisKKyAgICBkZWYgbWF5YmVfbWFrZV9kaXJlY3Rvcnko
c2VsZiwgKnBhdGgpOgorICAgICAgICAiIiJDcmVhdGVzIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5
IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgb3MubWFrZWRpcnMob3MucGF0aC5qb2luKCpwYXRoKSkKKyAgICAgICAgZXhjZXB0IE9TRXJy
b3IsIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKKyAgICAgICAg
ICAgICAgICByYWlzZQorCisgICAgZGVmIHBhdGhfdG9fdXJpKHNlbGYsIHBhdGgpOgorICAgICAg
ICAiQ29udmVydHMgcGF0aCB0byBhbiBhYnNvbHV0ZSBwYXRoIGFuZCB0dXJucyBpdCBpbnRvIGEg
ZmlsZW5hbWUgVVJJLiIKKyAgICAgICAgIyBGSVhNRTogc2VlIGNvbW1lbnQgYXQgdG9wIG9mIHRo
ZSBmaWxlIHJlOiBwYXRoIG1vZHVsZS4KKyAgICAgICAgcmV0dXJuIHBhdGhfbW9kdWxlLmFic3Bh
dGhfdG9fdXJpKG9zLnBhdGguYWJzcGF0aChwYXRoKSkKKworICAgIGRlZiByZWFkX2ZpbGUoc2Vs
ZiwgZmlsZW5hbWUsIGVuY29kaW5nPU5vbmUpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBjb250
ZW50cyBvZiB0aGUgZmlsZSBhdCB0aGUgZ2l2ZW4gbG9jYXRpb24uCisKKyAgICAgICAgQXJnczoK
KyAgICAgICAgICAgIGZpbGVuYW1lOiBjYW4gYmUgYWJzb2x1dGUgb3IgcmVsYXRpdmUuCisgICAg
ICAgICAgICBlbmNvZGluZzogcGFzc2VkIHRvIGNvZGVjLm9wZW4gKGRlZmF1bHRzIHRvIE5vbmUp
LiBGaWxlcworICAgICAgICAgICAgICAgIGVuY29kZWQgd2l0aCBOb25lIGFyZSBhc3N1bWVkIHRv
IGJlIGJpbmFyeSBmaWxlcyBvbgorICAgICAgICAgICAgICAgIHBsYXRmb3JtcyB3aGVyZSB0aGF0
IGRpc3RpbmN0aW9uIG1hdHRlcnMuCisgICAgICAgIFJhaXNlcyBJT0Vycm9yIGlmIHRoZSBmaWxl
IGRvZXNuJ3QgZXhpc3Qgb3IgYW5vdGhlciBlcnJvciBvY2N1cnMuCisgICAgICAgICIiIgorICAg
ICAgICBtb2RlID0gInIiCisgICAgICAgIGlmIGVuY29kaW5nIGlzIE5vbmU6CisgICAgICAgICAg
ICBtb2RlID0gInIrYiIKKyAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihmaWxlbmFtZSwgbW9kZSwg
ZW5jb2RpbmcpIGFzIGY6CisgICAgICAgICAgICByZXR1cm4gZi5yZWFkKCkKKworICAgIGRlZiB3
cml0ZV9maWxlKHNlbGYsIGZpbGVuYW1lLCBjb250ZW50cywgZW5jb2Rpbmc9Tm9uZSk6CisgICAg
ICAgICIiIldyaXRlIHRoZSBjb250ZW50cyB0byB0aGUgZmlsZSBhdCB0aGUgZ2l2ZW4gbG9jYXRp
b24uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGZpbGVuYW1lOiBjYW4gYmUgYWJzb2x1
dGUgb3IgcmVsYXRpdmUuCisgICAgICAgICAgICBjb250ZW50czogc3R1ZmYgdG8gd3JpdGUKKyAg
ICAgICAgICAgIGVuY29kaW5nOiBwYXNzZWQgdG8gY29kZWMub3BlbiAoZGVmYXVsdHMgdG8gTm9u
ZSkuIEZpbGVzCisgICAgICAgICAgICAgICAgZW5jb2RlZCB3aXRoIE5vbmUgYXJlIGFzc3VtZWQg
dG8gYmUgYmluYXJ5IGZpbGVzIG9uCisgICAgICAgICAgICAgICAgcGxhdGZvcm1zIHdoZXJlIHRo
YXQgZGlzdGluY3Rpb24gbWF0dGVycy4KKyAgICAgICAgUmFpc2VzIElPRXJyb3IgaWYgdGhlIGZp
bGUgZG9lc24ndCBleGlzdCBvciBhbm90aGVyIGVycm9yIG9jY3Vycy4KKyAgICAgICAgIiIiCisg
ICAgICAgIG1vZGUgPSAidyIKKyAgICAgICAgaWYgZW5jb2RpbmcgaXMgTm9uZToKKyAgICAgICAg
ICAgIG1vZGUgPSAidytiIgorICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKGZpbGVuYW1lLCBtb2Rl
LCBlbmNvZGluZykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoY29udGVudHMpCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3Rl
bV91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9maWxlc3lzdGVtX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MjZjYTZhOTAxN2Y5MDFkZGJj
OTI0MDZkZWQ4MGI0OTZiMWNiZDUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV91bml0dGVzdC5weQpAQCAtMCww
ICsxLDE0OCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0
cmlidXRpb24uCisjICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9z
dGF0ZW1lbnQKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9y
dCB1bml0dGVzdAorCitmcm9tIGZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KKworCitjbGFz
cyBGaWxlU3lzdGVtVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYp
OgorICAgICAgICBzZWxmLl90aGlzX2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3Bh
dGgoX19maWxlX18pKQorICAgICAgICBzZWxmLl9taXNzaW5nX2ZpbGUgPSBvcy5wYXRoLmpvaW4o
c2VsZi5fdGhpc19kaXIsICdtaXNzaW5nX2ZpbGUucHknKQorICAgICAgICBzZWxmLl90aGlzX2Zp
bGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fdGhpc19kaXIsICdmaWxlc3lzdGVtX3VuaXR0ZXN0LnB5
JykKKworICAgIGRlZiB0ZXN0X2V4aXN0c19fdHJ1ZShzZWxmKToKKyAgICAgICAgZnMgPSBGaWxl
U3lzdGVtKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZzLmV4aXN0cyhzZWxmLl90aGlzX2Zp
bGUpKQorCisgICAgZGVmIHRlc3RfZXhpc3RzX19mYWxzZShzZWxmKToKKyAgICAgICAgZnMgPSBG
aWxlU3lzdGVtKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmcy5leGlzdHMoc2VsZi5fbWlz
c2luZ19maWxlKSkKKworICAgIGRlZiB0ZXN0X2lzZGlyX190cnVlKHNlbGYpOgorICAgICAgICBm
cyA9IEZpbGVTeXN0ZW0oKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnMuaXNkaXIoc2VsZi5f
dGhpc19kaXIpKQorCisgICAgZGVmIHRlc3RfaXNkaXJfX2ZhbHNlKHNlbGYpOgorICAgICAgICBm
cyA9IEZpbGVTeXN0ZW0oKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZzLmlzZGlyKHNlbGYu
X3RoaXNfZmlsZSkpCisKKyAgICBkZWYgdGVzdF9qb2luKHNlbGYpOgorICAgICAgICBmcyA9IEZp
bGVTeXN0ZW0oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZzLmpvaW4oJ2ZvbycsICdiYXIn
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInKSkK
KworICAgIGRlZiB0ZXN0X2xpc3RkaXIoc2VsZik6CisgICAgICAgIGZzID0gRmlsZVN5c3RlbSgp
CisgICAgICAgIHdpdGggZnMubWtkdGVtcChwcmVmaXg9J2ZpbGVzeXN0ZW1fdW5pdHRlc3RfJykg
YXMgZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnMubGlzdGRpcihkKSwgW10pCisg
ICAgICAgICAgICBuZXdfZmlsZSA9IG9zLnBhdGguam9pbihkLCAnZm9vJykKKyAgICAgICAgICAg
IGZzLndyaXRlX2ZpbGUobmV3X2ZpbGUsICdmb28nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChmcy5saXN0ZGlyKGQpLCBbJ2ZvbyddKQorICAgICAgICAgICAgb3MucmVtb3ZlKG5ld19m
aWxlKQorCisgICAgZGVmIHRlc3RfbWF5YmVfbWFrZV9kaXJlY3RvcnlfX3N1Y2Nlc3Moc2VsZik6
CisgICAgICAgIGZzID0gRmlsZVN5c3RlbSgpCisKKyAgICAgICAgd2l0aCBmcy5ta2R0ZW1wKHBy
ZWZpeD0nZmlsZXN5c3RlbV91bml0dGVzdF8nKSBhcyBiYXNlX3BhdGg6CisgICAgICAgICAgICBz
dWJfcGF0aCA9IG9zLnBhdGguam9pbihiYXNlX3BhdGgsICJuZXdkaXIiKQorICAgICAgICAgICAg
c2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhzdWJfcGF0aCkpCisgICAgICAgICAgICBz
ZWxmLmFzc2VydEZhbHNlKGZzLmlzZGlyKHN1Yl9wYXRoKSkKKworICAgICAgICAgICAgZnMubWF5
YmVfbWFrZV9kaXJlY3Rvcnkoc3ViX3BhdGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUo
b3MucGF0aC5leGlzdHMoc3ViX3BhdGgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZz
LmlzZGlyKHN1Yl9wYXRoKSkKKworICAgICAgICAgICAgIyBNYWtlIHN1cmUgd2UgY2FuIHJlLWNy
ZWF0ZSBpdC4KKyAgICAgICAgICAgIGZzLm1heWJlX21ha2VfZGlyZWN0b3J5KHN1Yl9wYXRoKQor
ICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHN1Yl9wYXRoKSkKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmcy5pc2RpcihzdWJfcGF0aCkpCisKKyAgICAgICAg
ICAgICMgQ2xlYW4gdXAuCisgICAgICAgICAgICBvcy5ybWRpcihzdWJfcGF0aCkKKworICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGJhc2VfcGF0aCkpCisgICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2UoZnMuaXNkaXIoYmFzZV9wYXRoKSkKKworICAgIGRlZiB0ZXN0X21heWJl
X21ha2VfZGlyZWN0b3J5X19mYWlsdXJlKHNlbGYpOgorICAgICAgICBmcyA9IEZpbGVTeXN0ZW0o
KQorCisgICAgICAgICMgRklYTUU6IEknbSBub3Qgc3VyZSBob3cgdG8gbWFrZSB0aGlzIHRlc3Qg
d29yayB1bmRlciBjeWd3aW4gb3IKKyAgICAgICAgIyB3aW4zMiBzaW5jZSB0aGUgd2hvbGUgZmls
ZXN5c3RlbSBpcyB1c3VhbGx5IHdyaXRlYWJsZS4KKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGlu
ICgnZGFyd2luJywgJ2xpbnV4MicpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NF
cnJvciwgZnMubWF5YmVfbWFrZV9kaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiL2Jpbi9mb28iKQorCisgICAgZGVmIHRlc3RfcGF0aF90b191cmkoc2VsZik6CisgICAg
ICAgIGZzID0gRmlsZVN5c3RlbSgpCisKKyAgICAgICAgIyBOb3RlIHRoYXQgdGhlIHJlYWwgdW5p
dCB0ZXN0cyBmb3IgdGhpcyByb3V0aW5lIGFyZSBpbgorICAgICAgICAjIHBhdGhfdW5pdHRlc3Qu
cHkuCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2RhcndpbicsICdsaW51eDInKToKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnMucGF0aF90b191cmkoJy9iaW4vZm9vJyksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxlOi8vL2Jpbi9mb28nKQorICAgICAgICBl
bGlmIHN5cy5wbGF0Zm9ybSA9PSAnY3lnd2luJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoZnMucGF0aF90b191cmkoJy9jeWdkcml2ZS9jL2Zvby50eHQnKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ2ZpbGU6Ly8vYy9mb28udHh0JykKKyAgICAgICAgZWxpZiBzeXMucGxh
dGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnMucGF0aF90
b191cmkoJ2M6XFxmb28udHh0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxl
Oi8vL2MvZm9vLnR4dCcpCisKKyAgICBkZWYgdGVzdF9yZWFkX2ZpbGUoc2VsZik6CisgICAgICAg
IGZzID0gRmlsZVN5c3RlbSgpCisgICAgICAgIGNvbnRlbnRzID0gZnMucmVhZF9maWxlKHNlbGYu
X3RoaXNfZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdTT01FX1JFQUxMWV9VTkxJS0VM
WV9TVFJJTkcnIGluIGNvbnRlbnRzKQorCisgICAgICAgIGNvbnRlbnRzID0gZnMucmVhZF9maWxl
KHNlbGYuX3RoaXNfZmlsZSwgZW5jb2Rpbmc9InV0Zi04IikKKyAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKCdTT01FX1JFQUxMWV9VTkxJS0VMWV9TVFJJTkcnIGluIGNvbnRlbnRzKQorCisgICAgZGVm
IHRlc3RfcmVhZF9GaWxlX19taXNzaW5nKHNlbGYpOgorICAgICAgICBmcyA9IEZpbGVTeXN0ZW0o
KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBmcy5yZWFkX2ZpbGUsIHNlbGYu
X21pc3NpbmdfZmlsZSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2ZpbGUoc2VsZik6CisgICAgICAg
IGZzID0gRmlsZVN5c3RlbSgpCisgICAgICAgIHBhdGggPSBOb25lCisgICAgICAgIHRyeToKKyAg
ICAgICAgICAgIHBhdGggPSB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PSd0cmVlX3VuaXR0ZXN0Xycp
CisgICAgICAgICAgICBmcy53cml0ZV9maWxlKHBhdGgsICdoZWxsbycpCisgICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGZzLnJlYWRfZmlsZShwYXRoKSwgJ2hlbGxvJykKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhwYXRoKSkKKyAgICAgICAgZmluYWxseToK
KyAgICAgICAgICAgIGlmIHBhdGg6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHBhdGgpCisK
KworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73010</attachid>
            <date>2010-11-04 17:22:30 -0700</date>
            <delta_ts>2010-11-04 17:34:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48144-20101104172228.patch</filename>
            <type>text/plain</type>
            <size>12060</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBlNGViNGRjMTFhZmYyMzA5YmNiYTQ4YWVkYzQ4OTU0ZTQ4NmI2NGUxLi5kOTY0MzIy
OTYzODIyY2JmZWM3ODMyOGY5ZDA3ZmRlNmEyYzcwMWIxIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTAtMTAtMjIgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRlIGEgZmlsZXN5
c3RlbSB3cmFwcGVyIHRoYXQgd2UgY2FuIHVzZSB0byBlbmZvcmNlCisgICAgICAgIHBhcnRpY3Vs
YXIgY29udmVudGlvbnMgYW5kIHVzZSBmb3IgbW9ja2luZyBhbmQgZGVwZW5kZW5jeQorICAgICAg
ICBpbmplY3Rpb24gZG93biB0aGUgbGluZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgxNDQKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV91bml0dGVzdC5weTogQWRkZWQuCisKIDIw
MTAtMTEtMDQgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weSBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM3
ZWZkZTNhNDI0Y2E0MjY4ZTE2MGFlM2Q1YTMyNjE4YzY0ZmMyM2IKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5w
eQpAQCAtMCwwICsxLDExNyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0
OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIldyYXBwZXIgb2JqZWN0
IGZvciB0aGUgZmlsZSBzeXN0ZW0gLyBzb3VyY2UgdHJlZS4iIiIKKworZnJvbSBfX2Z1dHVyZV9f
IGltcG9ydCB3aXRoX3N0YXRlbWVudAorCitpbXBvcnQgY29kZWNzCitpbXBvcnQgZXJybm8KK2lt
cG9ydCBvcworaW1wb3J0IHRlbXBmaWxlCisKKworY2xhc3MgRmlsZVN5c3RlbShvYmplY3QpOgor
ICAgICIiIkZpbGVTeXN0ZW0gaW50ZXJmYWNlIGZvciB3ZWJraXRweS4KKworICAgIFVubGVzcyBv
dGhlcndpc2Ugbm90ZWQsIGFsbCBwYXRocyBhcmUgYWxsb3dlZCB0byBiZSBlaXRoZXIgYWJzb2x1
dGUKKyAgICBvciByZWxhdGl2ZS4iIiIKKworICAgIGRlZiBleGlzdHMoc2VsZiwgcGF0aCk6Cisg
ICAgICAgICIiIlJldHVybiB3aGV0aGVyIHRoZSBwYXRoIGV4aXN0cyBpbiB0aGUgZmlsZXN5c3Rl
bS4iIiIKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguZXhpc3RzKHBhdGgpCisKKyAgICBkZWYgaXNk
aXIoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIlJldHVybiB3aGV0aGVyIHRoZSBwYXRoIHJlZmVy
cyB0byBhIGRpcmVjdG9yeS4iIiIKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguaXNkaXIocGF0aCkK
KworICAgIGRlZiBqb2luKHNlbGYsICpjb21wcyk6CisgICAgICAgICIiIlJldHVybiB0aGUgcGF0
aCBmb3JtZWQgYnkgam9pbmluZyB0aGUgY29tcG9uZW50cy4iIiIKKyAgICAgICAgcmV0dXJuIG9z
LnBhdGguam9pbigqY29tcHMpCisKKyAgICBkZWYgbGlzdGRpcihzZWxmLCBwYXRoKToKKyAgICAg
ICAgIiIiUmV0dXJuIHRoZSBjb250ZW50cyBvZiB0aGUgZGlyZWN0b3J5IHBvaW50ZWQgdG8gYnkg
cGF0aC4iIiIKKyAgICAgICAgcmV0dXJuIG9zLmxpc3RkaXIocGF0aCkKKworICAgIGRlZiBta2R0
ZW1wKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgIiIiQ3JlYXRlIGFuZCByZXR1cm4gYSB1bmlx
dWVseSBuYW1lZCBkaXJlY3RvcnkuCisKKyAgICAgICAgVGhpcyBpcyBsaWtlIHRlbXBmaWxlLm1r
ZHRlbXAsIGJ1dCBpZiB1c2VkIGluIGEgd2l0aCBzdGF0ZW1lbnQKKyAgICAgICAgdGhlIGRpcmVj
dG9yeSB3aWxsIHNlbGYtZGVsZXRlIGF0IHRoZSBlbmQgb2YgdGhlIGJsb2NrIChpZiB0aGUKKyAg
ICAgICAgZGlyZWN0b3J5IGlzIGVtcHR5OyBub24tZW1wdHkgZGlyZWN0b3JpZXMgcmFpc2UgZXJy
b3JzKS4gVGhlCisgICAgICAgIGRpcmVjdG9yeSBjYW4gYmUgc2FmZWx5IGRlbGV0ZWQgaW5zaWRl
IHRoZSBibG9jayBhcyB3ZWxsLCBpZiBzbworICAgICAgICBkZXNpcmVkLiIiIgorICAgICAgICBj
bGFzcyBUZW1wb3JhcnlEaXJlY3Rvcnkob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRf
XyhzZWxmLCAqKmt3YXJncyk6CisgICAgICAgICAgICAgICAgc2VsZi5fa3dhcmdzID0ga3dhcmdz
CisgICAgICAgICAgICAgICAgc2VsZi5fZGlyZWN0b3J5X3BhdGggPSBOb25lCisKKyAgICAgICAg
ICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5fZGlyZWN0b3J5
X3BhdGggPSB0ZW1wZmlsZS5ta2R0ZW1wKCoqc2VsZi5fa3dhcmdzKQorICAgICAgICAgICAgICAg
IHJldHVybiBzZWxmLl9kaXJlY3RvcnlfcGF0aAorCisgICAgICAgICAgICBkZWYgX19leGl0X18o
c2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CisgICAgICAgICAgICAgICAgIyBPbmx5IHNl
bGYtZGVsZXRlIGlmIG5lY2Vzc2FyeS4KKworICAgICAgICAgICAgICAgICMgRklYTUU6IFNob3Vs
ZCB3ZSBkZWxldGUgbm9uLWVtcHR5IGRpcmVjdG9yaWVzPworICAgICAgICAgICAgICAgIGlmIG9z
LnBhdGguZXhpc3RzKHNlbGYuX2RpcmVjdG9yeV9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAg
b3Mucm1kaXIoc2VsZi5fZGlyZWN0b3J5X3BhdGgpCisKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFy
eURpcmVjdG9yeSgqKmt3YXJncykKKworICAgIGRlZiBtYXliZV9tYWtlX2RpcmVjdG9yeShzZWxm
LCAqcGF0aCk6CisgICAgICAgICIiIkNyZWF0ZSB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBpZiBp
dCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9z
Lm1ha2VkaXJzKG9zLnBhdGguam9pbigqcGF0aCkpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBl
OgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICAg
ICAgcmFpc2UKKworICAgIGRlZiByZWFkX2JpbmFyeV9maWxlKHNlbGYsIHBhdGgpOgorICAgICAg
ICAiIiJSZXR1cm4gdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGF0IHRoZSBnaXZlbiBwYXRoIGFz
IGEgYnl0ZSBzdHJpbmcuIiIiCisgICAgICAgIHdpdGggZmlsZShwYXRoLCAncmInKSBhcyBmOgor
ICAgICAgICAgICAgcmV0dXJuIGYucmVhZCgpCisKKyAgICBkZWYgcmVhZF90ZXh0X2ZpbGUoc2Vs
ZiwgcGF0aCk6CisgICAgICAgICIiIlJldHVybiB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgYXQg
dGhlIGdpdmVuIHBhdGggYXMgYSBVbmljb2RlIHN0cmluZy4KKworICAgICAgICBUaGUgZmlsZSBp
cyByZWFkIGFzc3VtaW5nIGl0IGlzIGEgVVRGLTggZW5jb2RlZCBmaWxlIHdpdGggbm8gQk9NLiIi
IgorICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHBhdGgsICdyJywgJ3V0ZjgnKSBhcyBmOgorICAg
ICAgICAgICAgcmV0dXJuIGYucmVhZCgpCisKKyAgICBkZWYgd3JpdGVfYmluYXJ5X2ZpbGUoc2Vs
ZiwgcGF0aCwgY29udGVudHMpOgorICAgICAgICAiIiJXcml0ZSB0aGUgY29udGVudHMgdG8gdGhl
IGZpbGUgYXQgdGhlIGdpdmVuIGxvY2F0aW9uLiIiIgorICAgICAgICB3aXRoIGZpbGUocGF0aCwg
J3diJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoY29udGVudHMpCisKKyAgICBkZWYgd3Jp
dGVfdGV4dF9maWxlKHNlbGYsIHBhdGgsIGNvbnRlbnRzKToKKyAgICAgICAgIiIiV3JpdGUgdGhl
IGNvbnRlbnRzIHRvIHRoZSBmaWxlIGF0IHRoZSBnaXZlbiBsb2NhdGlvbi4KKworICAgICAgICBU
aGUgZmlsZSBpcyB3cml0dGVuIGVuY29kZWQgYXMgVVRGLTggd2l0aCBubyBCT00uIiIiCisgICAg
ICAgIHdpdGggY29kZWNzLm9wZW4ocGF0aCwgJ3cnLCAndXRmOCcpIGFzIGY6CisgICAgICAgICAg
ICBmLndyaXRlKGNvbnRlbnRzKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV91bml0dGVzdC5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43ZTUwYzU3ODljMGY3YTliMDc2NGJkNzY5YWY4MmNjYzExZjFkYjQyCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2Zp
bGVzeXN0ZW1fdW5pdHRlc3QucHkKQEAgLTAsMCArMSwxNTIgQEAKKyMgdmltOiBzZXQgZmlsZWVu
Y29kaW5nPXV0Zi04IDoKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMK
KyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMg
ZGlzdHJpYnV0aW9uLgorIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisj
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIE5PVEU6IFRoZSBmaWxlZW5jb2Rpbmcg
Y29tbWVudCBvbiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgZmlsZSBpcworIyBpbXBvcnRhbnQ7IHdp
dGhvdXQgaXQsIFB5dGhvbiB3aWxsIGNob2tlIHdoaWxlIHRyeWluZyB0byBwYXJzZSB0aGUgZmls
ZSwKKyMgc2luY2UgaXQgaW5jbHVkZXMgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCisKK2Zyb20gX19m
dXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKKworaW1wb3J0IG9zCitpbXBvcnQgc3RhdAor
aW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBmaWxl
c3lzdGVtIGltcG9ydCBGaWxlU3lzdGVtCisKKworY2xhc3MgRmlsZVN5c3RlbVRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fdGhpc19k
aXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkKKyAgICAgICAg
c2VsZi5fbWlzc2luZ19maWxlID0gb3MucGF0aC5qb2luKHNlbGYuX3RoaXNfZGlyLCAnbWlzc2lu
Z19maWxlLnB5JykKKyAgICAgICAgc2VsZi5fdGhpc19maWxlID0gb3MucGF0aC5qb2luKHNlbGYu
X3RoaXNfZGlyLCAnZmlsZXN5c3RlbV91bml0dGVzdC5weScpCisKKyAgICBkZWYgdGVzdF9leGlz
dHNfX3RydWUoc2VsZik6CisgICAgICAgIGZzID0gRmlsZVN5c3RlbSgpCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShmcy5leGlzdHMoc2VsZi5fdGhpc19maWxlKSkKKworICAgIGRlZiB0ZXN0X2V4
aXN0c19fZmFsc2Uoc2VsZik6CisgICAgICAgIGZzID0gRmlsZVN5c3RlbSgpCisgICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2UoZnMuZXhpc3RzKHNlbGYuX21pc3NpbmdfZmlsZSkpCisKKyAgICBkZWYg
dGVzdF9pc2Rpcl9fdHJ1ZShzZWxmKToKKyAgICAgICAgZnMgPSBGaWxlU3lzdGVtKCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKGZzLmlzZGlyKHNlbGYuX3RoaXNfZGlyKSkKKworICAgIGRlZiB0
ZXN0X2lzZGlyX19mYWxzZShzZWxmKToKKyAgICAgICAgZnMgPSBGaWxlU3lzdGVtKCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRGYWxzZShmcy5pc2RpcihzZWxmLl90aGlzX2ZpbGUpKQorCisgICAgZGVm
IHRlc3Rfam9pbihzZWxmKToKKyAgICAgICAgZnMgPSBGaWxlU3lzdGVtKCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChmcy5qb2luKCdmb28nLCAnYmFyJyksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgb3MucGF0aC5qb2luKCdmb28nLCAnYmFyJykpCisKKyAgICBkZWYgdGVzdF9saXN0ZGly
KHNlbGYpOgorICAgICAgICBmcyA9IEZpbGVTeXN0ZW0oKQorICAgICAgICB3aXRoIGZzLm1rZHRl
bXAocHJlZml4PSdmaWxlc3lzdGVtX3VuaXR0ZXN0XycpIGFzIGQ6CisgICAgICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGZzLmxpc3RkaXIoZCksIFtdKQorICAgICAgICAgICAgbmV3X2ZpbGUgPSBv
cy5wYXRoLmpvaW4oZCwgJ2ZvbycpCisgICAgICAgICAgICBmcy53cml0ZV90ZXh0X2ZpbGUobmV3
X2ZpbGUsIHUnZm9vJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnMubGlzdGRpcihk
KSwgWydmb28nXSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShuZXdfZmlsZSkKKworICAgIGRlZiB0
ZXN0X21heWJlX21ha2VfZGlyZWN0b3J5X19zdWNjZXNzKHNlbGYpOgorICAgICAgICBmcyA9IEZp
bGVTeXN0ZW0oKQorCisgICAgICAgIHdpdGggZnMubWtkdGVtcChwcmVmaXg9J2ZpbGVzeXN0ZW1f
dW5pdHRlc3RfJykgYXMgYmFzZV9wYXRoOgorICAgICAgICAgICAgc3ViX3BhdGggPSBvcy5wYXRo
LmpvaW4oYmFzZV9wYXRoLCAibmV3ZGlyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
b3MucGF0aC5leGlzdHMoc3ViX3BhdGgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShm
cy5pc2RpcihzdWJfcGF0aCkpCisKKyAgICAgICAgICAgIGZzLm1heWJlX21ha2VfZGlyZWN0b3J5
KHN1Yl9wYXRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHN1
Yl9wYXRoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmcy5pc2RpcihzdWJfcGF0aCkp
CisKKyAgICAgICAgICAgICMgTWFrZSBzdXJlIHdlIGNhbiByZS1jcmVhdGUgaXQuCisgICAgICAg
ICAgICBmcy5tYXliZV9tYWtlX2RpcmVjdG9yeShzdWJfcGF0aCkKKyAgICAgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzdWJfcGF0aCkpCisgICAgICAgICAgICBzZWxmLmFz
c2VydFRydWUoZnMuaXNkaXIoc3ViX3BhdGgpKQorCisgICAgICAgICAgICAjIENsZWFuIHVwLgor
ICAgICAgICAgICAgb3Mucm1kaXIoc3ViX3BhdGgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZShvcy5wYXRoLmV4aXN0cyhiYXNlX3BhdGgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZz
LmlzZGlyKGJhc2VfcGF0aCkpCisKKyAgICBkZWYgdGVzdF9tYXliZV9tYWtlX2RpcmVjdG9yeV9f
ZmFpbHVyZShzZWxmKToKKyAgICAgICAgIyBGSVhNRTogb3MuY2htb2QoKSBkb2Vzbid0IHdvcmsg
b24gV2luZG93cyB0byBzZXQgZGlyZWN0b3JpZXMKKyAgICAgICAgIyBhcyByZWFkb25seSwgc28g
d2Ugc2tpcCB0aGlzIHRlc3QgZm9yIG5vdy4KKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgn
d2luMzInLCAnY3lnd2luJyk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBmcyA9IEZp
bGVTeXN0ZW0oKQorICAgICAgICB3aXRoIGZzLm1rZHRlbXAocHJlZml4PSdmaWxlc3lzdGVtX3Vu
aXR0ZXN0XycpIGFzIGQ6CisgICAgICAgICAgICAjIFJlbW92ZSB3cml0ZSBwZXJtaXNzaW9ucyBv
biB0aGUgcGFyZW50IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIG9zLmNobW9kKGQsIHN0YXQuU19J
UlVTUikKKworICAgICAgICAgICAgIyBOb3cgdHJ5IHRvIGNyZWF0ZSBhIHN1YiBkaXJlY3Rvcnkg
LSBzaG91bGQgZmFpbC4KKyAgICAgICAgICAgIHN1Yl9kaXIgPSBmcy5qb2luKGQsICdzdWJkaXIn
KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgZnMubWF5YmVfbWFrZV9k
aXJlY3RvcnksIHN1Yl9kaXIpCisKKyAgICBkZWYgdGVzdF9yZWFkX2FuZF93cml0ZV9maWxlKHNl
bGYpOgorICAgICAgICBmcyA9IEZpbGVTeXN0ZW0oKQorICAgICAgICB0ZXh0X3BhdGggPSBOb25l
CisgICAgICAgIGJpbmFyeV9wYXRoID0gTm9uZQorCisgICAgICAgIHVuaWNvZGVfdGV4dF9zdHJp
bmcgPSB1J8WqbsStY8WNZGXMvScKKyAgICAgICAgaGV4X2VxdWl2YWxlbnQgPSAnXHhDNVx4QUFc
eDZFXHhDNFx4QURceDYzXHhDNVx4OERceDY0XHg2NVx4Q0NceEJEJworICAgICAgICB0cnk6Cisg
ICAgICAgICAgICB0ZXh0X3BhdGggPSB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PSd0cmVlX3VuaXR0
ZXN0XycpCisgICAgICAgICAgICBiaW5hcnlfcGF0aCA9IHRlbXBmaWxlLm1rdGVtcChwcmVmaXg9
J3RyZWVfdW5pdHRlc3RfJykKKyAgICAgICAgICAgIGZzLndyaXRlX3RleHRfZmlsZSh0ZXh0X3Bh
dGgsIHVuaWNvZGVfdGV4dF9zdHJpbmcpCisgICAgICAgICAgICBjb250ZW50cyA9IGZzLnJlYWRf
YmluYXJ5X2ZpbGUodGV4dF9wYXRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250
ZW50cywgaGV4X2VxdWl2YWxlbnQpCisKKyAgICAgICAgICAgIGZzLndyaXRlX3RleHRfZmlsZShi
aW5hcnlfcGF0aCwgaGV4X2VxdWl2YWxlbnQpCisgICAgICAgICAgICB0ZXh0X2NvbnRlbnRzID0g
ZnMucmVhZF90ZXh0X2ZpbGUoYmluYXJ5X3BhdGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHRleHRfY29udGVudHMsIHVuaWNvZGVfdGV4dF9zdHJpbmcpCisgICAgICAgIGV4Y2VwdDoK
KyAgICAgICAgICAgIGlmIHRleHRfcGF0aDoKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUodGV4
dF9wYXRoKQorICAgICAgICAgICAgaWYgYmluYXJ5X3BhdGg6CisgICAgICAgICAgICAgICAgb3Mu
cmVtb3ZlKGJpbmFyeV9wYXRoKQorCisgICAgZGVmIHRlc3RfcmVhZF9iaW5hcnlfZmlsZV9fbWlz
c2luZyhzZWxmKToKKyAgICAgICAgZnMgPSBGaWxlU3lzdGVtKCkKKyAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoSU9FcnJvciwgZnMucmVhZF9iaW5hcnlfZmlsZSwgc2VsZi5fbWlzc2luZ19maWxl
KQorCisgICAgZGVmIHRlc3RfcmVhZF90ZXh0X2ZpbGVfX21pc3Npbmcoc2VsZik6CisgICAgICAg
IGZzID0gRmlsZVN5c3RlbSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGZz
LnJlYWRfdGV4dF9maWxlLCBzZWxmLl9taXNzaW5nX2ZpbGUpCisKKworaWYgX19uYW1lX18gPT0g
J19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkK
</data>
<flag name="review"
          id="63371"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>