<?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>101285</bug_id>
          
          <creation_ts>2012-11-05 17:49:09 -0800</creation_ts>
          <short_desc>webkitpy: integrate pylint into check-webkit-style, part I</short_desc>
          <delta_ts>2012-11-12 16:29:34 -0800</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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>levin</cc>
    
    <cc>ojan</cc>
    
    <cc>rniwa</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>759092</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-05 17:49:09 -0800</bug_when>
    <thetext>webkitpy: integrate pylint into check-webkit-style, part I</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759096</commentid>
    <comment_count>1</comment_count>
      <attachid>172457</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-05 17:51:48 -0800</bug_when>
    <thetext>Created attachment 172457
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759102</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-05 17:55:20 -0800</bug_when>
    <thetext>Attachment 172457 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/Scripts/lint-web...&quot; exit_code: 1
Tools/Scripts/webkitpy/style/checkers/python_unittest_input.py:4:  trailing whitespace  [pep8/W291] [5]
Tools/Scripts/webkitpy/style/checkers/python_unittest_input.py:4:  Undefined variable &apos;error&apos;  [pylint/E0602] [5]
Total errors found: 2 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759110</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-05 18:00:21 -0800</bug_when>
    <thetext>The errors in that file are intentional; the output shows that this change works :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759112</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-05 18:01:59 -0800</bug_when>
    <thetext>Note that the advantage to running pylint in addition to pep8 is that we will catch a *lot* more issues. The downside is that pylint is a lot slower.

We probably don&apos;t need to run both, but I haven&apos;t done enough side-by-side testing to be sure yet. Most (if not all) of the pep8 errors are pylint warnings, so we won&apos;t see duplication of messages, I think, though I&apos;m not sure about actual syntax errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761162</commentid>
    <comment_count>5</comment_count>
      <attachid>172457</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-11-07 16:26:29 -0800</bug_when>
    <thetext>Comment on attachment 172457
Patch

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

&gt; Tools/Scripts/webkitpy/style/checkers/python.py:100
&gt; +        self._script_dir = os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))))

Can we instead walk up the path until we find a known directory and then walk down the the script_dir if the script_dir is not the known directory?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761168</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-07 16:32:17 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Note that the advantage to running pylint in addition to pep8 is that we will catch a *lot* more issues. The downside is that pylint is a lot slower.

Do we really want to run this thing? pep8 is already way too noisy for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761174</commentid>
    <comment_count>7</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-07 16:43:54 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; Note that the advantage to running pylint in addition to pep8 is that we will catch a *lot* more issues. The downside is that pylint is a lot slower.
&gt; 
&gt; Do we really want to run this thing? pep8 is already way too noisy for me.

The way I have it set now, I believe it&apos;ll only report real errors. (see, e.g., the pylint/E0602 warning from the style checker).

It&apos;s hard for me to respond to this comment otherwise as a general stance. If you can point to specific warnings we can discuss them or turn them off. I don&apos;t want to get noise either, but I don&apos;t think we normally do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761176</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-07 16:45:29 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 172457 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=172457&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/style/checkers/python.py:100
&gt; &gt; +        self._script_dir = os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))))
&gt; 
&gt; Can we instead walk up the path until we find a known directory and then walk down the the script_dir if the script_dir is not the known directory?

Yeah, I&apos;ll change it to do something like that. We should really have a common hook for this (this is duplicating work in the layout_tests.port.base classes now and there&apos;s similar code in checkout that relies on the scm as well).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762123</commentid>
    <comment_count>9</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-11-08 13:32:57 -0800</bug_when>
    <thetext>Can you give some examples of the difference in coverage between the pep8 checker and the pylint checker (as currently configured).  Maybe you can run both over all of webkitpy and post the results (and maybe include running time to give a sense of how much slower pylint is)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762292</commentid>
    <comment_count>10</comment_count>
      <attachid>173140</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-08 16:15:12 -0800</bug_when>
    <thetext>Created attachment 173140
output from running pep8 across webkitpy (non-test) code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762293</commentid>
    <comment_count>11</comment_count>
      <attachid>173141</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-08 16:15:36 -0800</bug_when>
    <thetext>Created attachment 173141
output from running pylint across webkitpy (non-test) code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762302</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-08 16:23:09 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Can you give some examples of the difference in coverage between the pep8 checker and the pylint checker (as currently configured).  Maybe you can run both over all of webkitpy and post the results (and maybe include running time to give a sense of how much slower pylint is)?

Sure:

% find . -name &apos;*.py&apos; | egrep -v &apos;thirdparty|_unittest|_integrationtest&apos; | wc -l
294

% time python thirdparty/autoinstalled/pep8.py --ignore=E501 $(find . -name &apos;*.py&apos; | egrep -v &apos;thirdparty|_unittest|_integrationtest&apos;) &gt; pep8_errors.txt
./common/checkout/changelog.py:32:17: E261 at least two spaces before inline comment
./common/checkout/checkout_mock.py:72:1: E302 expected 2 blank lines, found 1
./common/checkout/diff_test_data.py:35:1: W291 trailing whitespace
./common/checkout/scm/scm.py:60:1: E303 too many blank lines (3)
./common/config/irc.py:29:7: E225 missing whitespace around operator
./common/config/ports.py:80:22: W601 .has_key() is deprecated, use &apos;in&apos;
./common/host_mock.py:81:1: W391 blank line at end of file
./common/message_pool.py:292:33: W602 deprecated form of raising exception
./common/net/bugzilla/bugzilla_mock.py:172:34: E241 multiple spaces after &apos;:&apos;
./common/net/buildbot/buildbot.py:70:90: E702 multiple statements on one line (semicolon)
./common/net/buildbot/buildbot.py:146:5: E301 expected 1 blank line, found 0
./common/net/irc/ircbot.py:59:46: E202 whitespace before &apos;)&apos;
./style/checkers/cpp.py:267:7: E111 indentation is not a multiple of four
./style/checkers/cpp.py:597:62: E221 multiple spaces before operator
./style/checkers/cpp.py:3452:42: E262 inline comment should start with &apos;# &apos;
./tool/commands/download.py:186:18: E201 whitespace after &apos;{&apos;

real	0m7.112s
user	0m7.072s
sys	0m0.046s

% time lint-webkitpy -E $(find . -name &apos;*.py&apos; | egrep -v &apos;thirdparty|_unittest|_integrationtest&apos;) | grep -v &quot;Instance of &apos;Popen&apos;&quot; 
common/checkout/scm/scm.py:65: [E1121, SCM.__init__] Too many positional arguments for function call
common/checkout/scm/scm.py:140: [E0213, SCM.find_checkout_root] Method should have &quot;self&quot; as first argument
common/checkout/scm/scm.py:237: [E0211, SCM.remote_merge_base] Method has no argument
common/checkout/scm/scm_mock.py:97: [E0602, MockSCM.commit_message_for_local_commit] Undefined variable &apos;CommitMessage&apos;
common/checkout/scm/scm_mock.py:100: [E0602, MockSCM.commit_message_for_local_commit] Undefined variable &apos;CommitMessage&apos;
common/checkout/scm/svn.py:53: [E1101, SVNRepository.has_authorization_for_realm] Instance of &apos;SVNRepository&apos; has no &apos;run&apos; member
common/checkout/scm/svn.py:60: [E1101, SVNRepository.has_authorization_for_realm] Instance of &apos;SVNRepository&apos; has no &apos;run&apos; member
common/checkout/scm/svn.py:62: [E1101, SVNRepository.has_authorization_for_realm] Instance of &apos;SVNRepository&apos; has no &apos;run&apos; member
common/checkout/scm/svn.py:79: [E0602, SVN.__init__] Undefined variable &apos;svn_info_args&apos;
common/checkout/scm/svn.py:271: [E0602, SVN._bogus_dir_name] Undefined variable &apos;tempfile&apos;
common/config/contributionareas.py:183: [E0102, ContributionAreas.names] method already defined line 180
common/config/ports.py:46: [E1101, DeprecatedPort.flag] Instance of &apos;DeprecatedPort&apos; has no &apos;port_flag_name&apos; member
common/config/ports.py:47: [E1101, DeprecatedPort.flag] Instance of &apos;DeprecatedPort&apos; has no &apos;port_flag_name&apos; member
common/net/buildbot/buildbot.py:138: [E1102, Builder.force_build] self._browser.open is not callable
common/net/buildbot/buildbot.py:139: [E1102, Builder.force_build] self._browser.select_form is not callable
common/net/buildbot/buildbot.py:143: [E1102, Builder.force_build] self._browser.submit is not callable
common/net/buildbot/buildbot_mock.py:56: [E0602, MockBuilder.force_build] Undefined variable &apos;log&apos;
common/newstringio.py:35: [E0102, StringIO] class already defined line 32
common/system/executive_mock.py:171: [E0702, MockExecutive2.run_command] Raising NoneType while only classes, instances or string are allowed
common/system/filesystem_mock.py:111: [E1101, MockFileSystem.copyfile] Module &apos;errno&apos; has no &apos;ISDIR&apos; member
common/system/filesystem_mock.py:113: [E1101, MockFileSystem.copyfile] Module &apos;errno&apos; has no &apos;ISDIR&apos; member
layout_tests/controllers/manager.py:304: [E1101, Manager._websocket_tests] Instance of &apos;Manager&apos; has no &apos;_test_files&apos; member
layout_tests/controllers/manager.py:304: [E1101, Manager._websocket_tests] Instance of &apos;Manager&apos; has no &apos;_is_websocket&apos; member
layout_tests/port/apple.py:77: [E1101, ApplePort.__init__] Instance of &apos;ApplePort&apos; has no &apos;VERSION_FALLBACK_ORDER&apos; member
layout_tests/port/apple.py:85: [E1101, ApplePort._skipped_file_search_paths] Instance of &apos;ApplePort&apos; has no &apos;VERSION_FALLBACK_ORDER&apos; member
layout_tests/port/apple.py:95: [E1101, ApplePort._generate_all_test_configurations] Instance of &apos;ApplePort&apos; has no &apos;VERSION_FALLBACK_ORDER&apos; member
layout_tests/port/apple.py:98: [E1101, ApplePort._generate_all_test_configurations] Instance of &apos;ApplePort&apos; has no &apos;ARCHITECTURES&apos; member
layout_tests/port/base.py:574: [E1103, Port.reference_files] Instance of &apos;list&apos; has no &apos;get&apos; member (but some types could not be inferred)
layout_tests/port/chromium.py:126: [E1101, ChromiumPort.default_baseline_search_path] Instance of &apos;ChromiumPort&apos; has no &apos;FALLBACK_PATHS&apos; member
layout_tests/port/chromium_android.py:491: [E0213, ChromiumAndroidDriver._command_wrapper] Method should have &quot;self&quot; as first argument
layout_tests/port/chromium_port_testcase.py:106: [E1101, ChromiumPortTestCase.TestAndroidPort.__init__] Module &apos;layout_tests.port.chromium_win&apos; has no &apos;ChromiumAndroidPort&apos; member
layout_tests/port/chromium_port_testcase.py:133: [E1101, ChromiumPortTestCase.test_default_configuration] Instance of &apos;MockOptions&apos; has no &apos;configuration&apos; member
layout_tests/port/chromium_port_testcase.py:138: [E1101, ChromiumPortTestCase.test_default_configuration] Instance of &apos;MockOptions&apos; has no &apos;configuration&apos; member
layout_tests/port/port_testcase.py:89: [E1101, PortTestCase.make_port] Instance of &apos;PortTestCase&apos; has no &apos;port_name&apos; member
layout_tests/port/port_testcase.py:438: [E1101, PortTestCase.test_expectations_ordering] Instance of &apos;MockOptions&apos; has no &apos;additional_expectations&apos; member
layout_tests/port/port_testcase.py:505: [E0102, PortTestCase.test_expectations_files] method already defined line 117
layout_tests/servers/http_server_base.py:197: [E1101, HttpServerBase._check_that_all_ports_are_available] Module &apos;errno&apos; has no &apos;WSAEACCES&apos; member
style/checkers/cpp.py:1081: [E0012] Bad option value &apos;C6403&apos;
style/checkers/cpp.py:1796: [E0012] Bad option value &apos;C6403&apos;
tool/commands/abstractlocalservercommand.py:56: [E1102, AbstractLocalServerCommand.execute] self.server is not callable
tool/commands/download.py:160: [E1101, AbstractPatchProcessingCommand.execute] Instance of &apos;AbstractPatchProcessingCommand&apos; has no &apos;_prepare_to_process&apos; member
tool/commands/download.py:161: [E1101, AbstractPatchProcessingCommand.execute] Instance of &apos;AbstractPatchProcessingCommand&apos; has no &apos;_fetch_list_of_patches_to_process&apos; member
tool/commands/download.py:168: [E1101, AbstractPatchProcessingCommand.execute] Instance of &apos;AbstractPatchProcessingCommand&apos; has no &apos;_process_patch&apos; member
tool/commands/earlywarningsystem.py:51: [E1101, AbstractEarlyWarningSystem.__init__] Instance of &apos;AbstractEarlyWarningSystem&apos; has no &apos;port_name&apos; member
tool/commands/earlywarningsystem.py:69: [E1101, AbstractEarlyWarningSystem._post_reject_message_on_bug] Instance of &apos;AbstractEarlyWarningSystem&apos; has no &apos;port_name&apos; member
tool/commands/expectations.py:42: [E1120, OptimizeExpectations.execute] No value passed for parameter &apos;expectations_string&apos; in function call
tool/commands/gardenomatic.py:34: [E1003, GardenOMatic.__init__] Bad first argument &apos;AbstractRebaseliningCommand&apos; given to super class
tool/commands/gardenomatic.py:34: [E0101, GardenOMatic.__init__] Explicit return in __init__
tool/commands/queues.py:355: [E0213, CommitQueue.handle_script_error] Method should have &quot;self&quot; as first argument
tool/multicommandtool.py:154: [E0202, HelpPrintingOptionParser.error] An attribute affected in style.optparser line 343 hide this method
tool/servers/gardeningserver.py:89: [E1120, GardeningHTTPRequestHandler.rollout] No value passed for parameter &apos;input_string&apos; in function call
tool/servers/gardeningserver.py:142: [E1101, GardeningHTTPRequestHandler.localresult] Instance of &apos;GardeningHTTPRequestHandler&apos; has no &apos;_send_response&apos; member

real	0m27.077s
user	0m25.924s
sys	0m1.155s

%

As you can see, pylint is ~4x slower than pep8, but both are pretty fast (I doubt we&apos;ll care about their speed in practice). It is also reporting a significantly more serious class of problem. I suspect most if not virtually all of those complaints are real bugs.

Anecdotally, also, I suspect 50% or more of the cases where I&apos;ve had some problem with a patch I&apos;ve landed recently (last month or two) have been some dumb typo in a case that was hard to catch through unit tests but static analysis like this would&apos;ve caught.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762305</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-08 16:29:59 -0800</bug_when>
    <thetext>Thanks for posting the output. This does indeed looks useful. Maybe we want to make this optional feature at the beginning though to see if we get any false positives.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762308</commentid>
    <comment_count>14</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-08 16:31:53 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Thanks for posting the output. This does indeed looks useful. Maybe we want to make this optional feature at the beginning though to see if we get any false positives.

I think that since I&apos;m posting more python patches than most other people, if there are false positives, I&apos;ll probably trip over them pretty quickly. 

Also, there&apos;s no good way to make checks optional in check-webkit-style AFAIK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762310</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-08 16:34:48 -0800</bug_when>
    <thetext>I guess we can always ignore false positives.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762313</commentid>
    <comment_count>16</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-08 16:37:03 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; I guess we can always ignore false positives.

I would prefer it if people followed the instructions we post when there are (cf comment #2), and have people file bugs.

We have mechanisms for suppressing the false positives; you can me doing some of them in the patch I&apos;ve posted (where I&apos;m suppressing warnings about Popen objects that are happening from what appear to be bugs in pylint).

But, yeah, you can ignore them, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762330</commentid>
    <comment_count>17</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-11-08 16:55:24 -0800</bug_when>
    <thetext>Seems like we&apos;ll want to run both checkers for now since they don&apos;t cover the same type of errors.  Or maybe we can teach pylint to catch the same errors as pep8.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762350</commentid>
    <comment_count>18</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-08 17:16:42 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; Seems like we&apos;ll want to run both checkers for now since they don&apos;t cover the same type of errors.  Or maybe we can teach pylint to catch the same errors as pep8.

I think pylint will report everything that pep8 does, but I haven&apos;t yet been able to go over things warning-by-warning. I expect to eventually cut over to pylint-only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764948</commentid>
    <comment_count>19</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-12 16:29:34 -0800</bug_when>
    <thetext>Change landed as http://trac.webkit.org/changeset/134309 .</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172457</attachid>
            <date>2012-11-05 17:51:48 -0800</date>
            <delta_ts>2012-11-07 16:26:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101285-20121105175001.patch</filename>
            <type>text/plain</type>
            <size>9210</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzNTEwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzg0YTUyOGVmZDMwODQ3ZmYwN2ZiNTc2OTgyMzBlNWY5
ZDk1MWE3MS4uNDRjOTE4Mjk2ZWNkMzhmNThiNzNkZTE0Yzg2OGE5YTk4NDZhOWM1MCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM3
IEBACiAyMDEyLTExLTA1ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCisg
ICAgICAgIHdlYmtpdHB5OiBpbnRlZ3JhdGUgcHlsaW50IGludG8gY2hlY2std2Via2l0LXN0eWxl
LCBwYXJ0IEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwMTI4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggcmUtd29ya3MgbGludC13ZWJraXRweSBzbyB0aGF0IHRoZSBsb2dpYyBpcyBw
dXNoZWQKKyAgICAgICAgaW50byBjaGVjay13ZWJraXQtc3R5bGUgKG1vc3RseSk7IHdlIGRvbid0
IHlldCBjb250cm9sIHdoaWNoCisgICAgICAgIG1lc3NhZ2VzIGFyZSBkaXNwbGF5ZWQgdXNpbmcg
dGhlIHJ1bGVzIGluIHdlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKKyAgICAgICAgKHdlJ3JlIHN0
aWxsIHVzaW5nIHRoZSBweWxpbnRyYyB0byBzdXBwcmVzcyBtZXNzYWdlcyBpbnN0ZWFkKSwKKyAg
ICAgICAgYnV0IG90aGVyd2lzZSB0aGluZ3Mgd29yay4gRm9yIG5vdyB3ZSB3aWxsIG9ubHkgcmVw
b3J0IHB5bGludAorICAgICAgICAiZXJyb3JzIiwgbm90IHdhcm5pbmdzLgorCisgICAgICAgICog
U2NyaXB0cy9saW50LXdlYmtpdHB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL3B5
dGhvbi5weToKKyAgICAgICAgKFB5dGhvbkNoZWNrZXIpOgorICAgICAgICAoUHl0aG9uQ2hlY2tl
ci5jaGVjayk6CisgICAgICAgIChQeXRob25DaGVja2VyLl9jaGVja19wZXA4KToKKyAgICAgICAg
KFB5dGhvbkNoZWNrZXIuX2NoZWNrX3B5bGludCk6CisgICAgICAgIChQeWxpbnRlcik6CisgICAg
ICAgIChQeWxpbnRlci5fX2luaXRfXyk6CisgICAgICAgIChQeWxpbnRlci5ydW4pOgorICAgICAg
ICAoX0ZpbHRlcmVkU3RyaW5nSU8pOgorICAgICAgICAoX0ZpbHRlcmVkU3RyaW5nSU8uX19pbml0
X18pOgorICAgICAgICAoX0ZpbHRlcmVkU3RyaW5nSU8ud3JpdGUpOgorICAgICAgICAoX0ZpbHRl
cmVkU3RyaW5nSU8uX2ZpbHRlcik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9j
aGVja2Vycy9weXRob25fdW5pdHRlc3QucHk6CisgICAgICAgIChQeXRob25DaGVja2VyVGVzdC50
ZXN0X2NoZWNrKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL3B5
dGhvbl91bml0dGVzdF9pbnB1dC5weToKKworMjAxMi0xMS0wNSAgRGlyayBQcmFua2UgIDxkcHJh
bmtlQGNocm9taXVtLm9yZz4KKwogICAgICAgICB3ZWJraXRweTogbGludCwgY2xlYW4gdXAgcmVi
YXNlbGluZS5weQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTAxMjQwCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvbGludC13ZWJraXRweSBiL1Rv
b2xzL1NjcmlwdHMvbGludC13ZWJraXRweQppbmRleCAwZmJiZDczY2FhNjI0NWZjMDUyYzg3NWZl
NzY2MThlZjJiYTNmZGVlLi4yMmRlOTgxZTcyYzdjYzFlZTI4OWQxNTczOGVkYmUxZTYzMjkyYTUx
IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL2xpbnQtd2Via2l0cHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy9saW50LXdlYmtpdHB5CkBAIC0yNywxNCArMjcsOCBAQAogIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KIAotaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiAKLWZyb20gd2Via2l0cHkudGhp
cmRwYXJ0eS5hdXRvaW5zdGFsbGVkLnB5bGludCBpbXBvcnQgbGludAorZnJvbSB3ZWJraXRweS5z
dHlsZS5jaGVja2Vycy5weXRob24gaW1wb3J0IFB5bGludGVyCiAKLXNjcmlwdF9kaXIgPSBvcy5w
YXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKLWlmIG5vdCBzY3JpcHRfZGly
IGluIHN5cy5wYXRoOgotICAgIHN5cy5wYXRoLmFwcGVuZChzY3JpcHRfZGlyKQotCi1weWxpbnRy
YyA9IG9zLnBhdGguam9pbihzY3JpcHRfZGlyLCAnd2Via2l0cHknLCAncHlsaW50cmMnKQotbGlu
dC5SdW4oWyctLXJjZmlsZScsIHB5bGludHJjLCAnLWYnLCAncGFyc2VhYmxlJyBdICsgc3lzLmFy
Z3ZbMTpdKQorc3lzLnN0ZG91dC53cml0ZShQeWxpbnRlcigpLnJ1bihzeXMuYXJndlsxOl0pLmdl
dHZhbHVlKCkpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKaW5kZXggOWYy
N2MzNmRhYmEyY2YyOTI1YWQ4NWNhNTM4MTdiYjA3MmQyZWJlNC4uMjgyYzMzYjcwMzkxOTE5ZGQ1
Yjk4N2UwYTJmYTU4NTRkN2NlOGYwZSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9zdHlsZS9jaGVja2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hl
Y2tlci5weQpAQCAtMTA2LDYgKzEwNiw5IEBAIF9CQVNFX0ZJTFRFUl9SVUxFUyA9IFsKICAgICAj
ICAgICAgICB3aXRoIHRoZSA3OSBjaGFyYWN0ZXIgbGltaXQsIG9yIHNvbWUgaGlnaGVyIGxpbWl0
IHRoYXQgaXMKICAgICAjICAgICAgICBhZ3JlZWFibGUgdG8gdGhlIFdlYktpdCBwcm9qZWN0Lgog
ICAgICctcGVwOC9FNTAxJywKKworICAgICMgRklYTUU6IE1vdmUgdGhlIHB5bGludCBydWxlcyBm
cm9tIHRoZSBweWxpbnRyYyB0byBoZXJlLiBUaGlzIHdpbGwKKyAgICAjIGFsc28gcmVxdWlyZSB1
cyB0byByZS13b3JrIGxpbnQtd2Via2l0cHkgdG8gcHJvZHVjZSB0aGUgZXF1aXZhbGVudCBvdXRw
dXQuCiAgICAgXQogCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlcnMvcHl0aG9uLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vy
cy9weXRob24ucHkKaW5kZXggOGNmZDFiMmQzNWVmMTYxZGVkMDY5YmFiNWU2YjcwODdjN2E5NTI4
My4uMTU3N2FjNmRiY2M0ZWY2M2FkZTQzNzFhYjExNjgxZTk4N2U5MjZkMyAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9weXRob24ucHkKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9weXRob24ucHkKQEAgLTIyLDIzICsy
MiwzMiBAQAogCiAiIiJTdXBwb3J0cyBjaGVja2luZyBXZWJLaXQgc3R5bGUgaW4gUHl0aG9uIGZp
bGVzLiIiIgogCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN5cworZnJvbSBTdHJpbmdJ
TyBpbXBvcnQgU3RyaW5nSU8KKwogZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxs
ZWQgaW1wb3J0IHBlcDgKK2Zyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLnB5
bGludCBpbXBvcnQgbGludAorZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxsZWQu
cHlsaW50LnJlcG9ydGVycy50ZXh0IGltcG9ydCBQYXJzZWFibGVUZXh0UmVwb3J0ZXIKIAogCiBj
bGFzcyBQeXRob25DaGVja2VyKG9iamVjdCk6Ci0KICAgICAiIiJQcm9jZXNzZXMgdGV4dCBsaW5l
cyBmb3IgY2hlY2tpbmcgc3R5bGUuIiIiCi0KICAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZV9w
YXRoLCBoYW5kbGVfc3R5bGVfZXJyb3IpOgogICAgICAgICBzZWxmLl9maWxlX3BhdGggPSBmaWxl
X3BhdGgKICAgICAgICAgc2VsZi5faGFuZGxlX3N0eWxlX2Vycm9yID0gaGFuZGxlX3N0eWxlX2Vy
cm9yCiAKICAgICBkZWYgY2hlY2soc2VsZiwgbGluZXMpOgorICAgICAgICBzZWxmLl9jaGVja19w
ZXA4KGxpbmVzKQorICAgICAgICBzZWxmLl9jaGVja19weWxpbnQobGluZXMpCisKKyAgICBkZWYg
X2NoZWNrX3BlcDgoc2VsZiwgbGluZXMpOgogICAgICAgICAjIEluaXRpYWxpemUgcGVwOC5vcHRp
b25zLCB3aGljaCBpcyBuZWNlc3NhcnkgZm9yCiAgICAgICAgICMgQ2hlY2tlci5jaGVja19hbGwo
KSB0byBleGVjdXRlLgogICAgICAgICBwZXA4LnByb2Nlc3Nfb3B0aW9ucyhhcmdsaXN0PVtzZWxm
Ll9maWxlX3BhdGhdKQogCi0gICAgICAgIGNoZWNrZXIgPSBwZXA4LkNoZWNrZXIoc2VsZi5fZmls
ZV9wYXRoKQorICAgICAgICBwZXA4X2NoZWNrZXIgPSBwZXA4LkNoZWNrZXIoc2VsZi5fZmlsZV9w
YXRoKQogCiAgICAgICAgIGRlZiBfcGVwOF9oYW5kbGVfZXJyb3IobGluZV9udW1iZXIsIG9mZnNl
dCwgdGV4dCwgY2hlY2spOgogICAgICAgICAgICAgIyBGSVhNRTogSW5jb3Jwb3JhdGUgdGhlIGNo
YXJhY3RlciBvZmZzZXQgaW50byB0aGUgZXJyb3Igb3V0cHV0LgpAQCAtNTEsNiArNjAsNjkgQEAg
Y2xhc3MgUHl0aG9uQ2hlY2tlcihvYmplY3QpOgogCiAgICAgICAgICAgICBzZWxmLl9oYW5kbGVf
c3R5bGVfZXJyb3IobGluZV9udW1iZXIsIGNhdGVnb3J5LCA1LCBwZXA4X21lc3NhZ2UpCiAKLSAg
ICAgICAgY2hlY2tlci5yZXBvcnRfZXJyb3IgPSBfcGVwOF9oYW5kbGVfZXJyb3IKKyAgICAgICAg
cGVwOF9jaGVja2VyLnJlcG9ydF9lcnJvciA9IF9wZXA4X2hhbmRsZV9lcnJvcgorICAgICAgICBw
ZXA4X2Vycm9ycyA9IHBlcDhfY2hlY2tlci5jaGVja19hbGwoKQorCisgICAgZGVmIF9jaGVja19w
eWxpbnQoc2VsZiwgbGluZXMpOgorICAgICAgICBweWxpbnRlciA9IFB5bGludGVyKCkKKworICAg
ICAgICAjIEZJWE1FOiBmb3Igbm93LCB3ZSBvbmx5IHJlcG9ydCBweWxpbnQgZXJyb3JzLCBidXQg
d2Ugc2hvdWxkIGJlIGNhdGNoaW5nIGFuZAorICAgICAgICAjIGZpbHRlcmluZyB3YXJuaW5ncyB1
c2luZyB0aGUgcnVsZXMgaW4gc3R5bGUvY2hlY2tlci5weSBpbnN0ZWFkLgorICAgICAgICBvdXRw
dXQgPSBweWxpbnRlci5ydW4oWyctRScsIHNlbGYuX2ZpbGVfcGF0aF0pCisKKyAgICAgICAgbGlu
dF9yZWdleCA9IHJlLmNvbXBpbGUoJyhbXjpdKyk6KFteOl0rKTogXFsoW15dXSspXF0gKC4qKScp
CisgICAgICAgIGZvciBlcnJvciBpbiBvdXRwdXQuZ2V0dmFsdWUoKS5zcGxpdGxpbmVzKCk6Cisg
ICAgICAgICAgICBtYXRjaF9vYmogPSBsaW50X3JlZ2V4Lm1hdGNoKGVycm9yKQorICAgICAgICAg
ICAgYXNzZXJ0KG1hdGNoX29iaikKKyAgICAgICAgICAgIGxpbmVfbnVtYmVyID0gaW50KG1hdGNo
X29iai5ncm91cCgyKSkKKyAgICAgICAgICAgIGNhdGVnb3J5X2FuZF9tZXRob2QgPSBtYXRjaF9v
YmouZ3JvdXAoMykuc3BsaXQoJywgJykKKyAgICAgICAgICAgIGNhdGVnb3J5ID0gJ3B5bGludC8n
ICsgKGNhdGVnb3J5X2FuZF9tZXRob2RbMF0pCisgICAgICAgICAgICBpZiBsZW4oY2F0ZWdvcnlf
YW5kX21ldGhvZCkgPiAxOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnWyVzXSAlcycgJSAo
Y2F0ZWdvcnlfYW5kX21ldGhvZFsxXSwgbWF0Y2hfb2JqLmdyb3VwKDQpKQorICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gbWF0Y2hfb2JqLmdyb3VwKDQpCisgICAg
ICAgICAgICBzZWxmLl9oYW5kbGVfc3R5bGVfZXJyb3IobGluZV9udW1iZXIsIGNhdGVnb3J5LCA1
LCBtZXNzYWdlKQorCisKK2NsYXNzIFB5bGludGVyKG9iamVjdCk6CisgICAgIyBXZSBmaWx0ZXIg
b3V0IHRoZXNlIG1lc3NhZ2VzIGJlY2F1c2UgdGhleSBhcmUgYnVncyBpbiBweWxpbnQgdGhhdCBw
cm9kdWNlIGZhbHNlIHBvc2l0aXZlcy4KKyAgICAjIEZJWE1FOiBEb2VzIGl0IG1ha2Ugc2Vuc2Ug
dG8gY29tYmluZSB0aGVzZSBydWxlcyB3aXRoIHRoZSBydWxlcyBpbiBzdHlsZS9jaGVja2VyLnB5
IHNvbWVob3c/CisgICAgRkFMU0VfUE9TSVRJVkVTID0gWworICAgICAgICAjIHBvc3NpYmx5IGh0
dHA6Ly93d3cubG9naWxhYi5vcmcvdGlja2V0Lzk4NjEzID8KKyAgICAgICAgIkluc3RhbmNlIG9m
ICdQb3BlbicgaGFzIG5vICdyZXR1cm5jb2RlJyBtZW1iZXIiLAorICAgICAgICAiSW5zdGFuY2Ug
b2YgJ1BvcGVuJyBoYXMgbm8gJ3N0ZGluJyBtZW1iZXIiLAorICAgICAgICAiSW5zdGFuY2Ugb2Yg
J1BvcGVuJyBoYXMgbm8gJ3N0ZG91dCcgbWVtYmVyIiwKKyAgICAgICAgIkluc3RhbmNlIG9mICdQ
b3BlbicgaGFzIG5vICdzdGRlcnInIG1lbWJlciIsCisgICAgICAgICJJbnN0YW5jZSBvZiAnUG9w
ZW4nIGhhcyBubyAnd2FpdCcgbWVtYmVyIiwKKyAgICBdCisKKyAgICBkZWYgX19pbml0X18oc2Vs
Zik6CisgICAgICAgIHNlbGYuX3NjcmlwdF9kaXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5k
aXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKF9f
ZmlsZV9fKSkpKSkKKyAgICAgICAgc2VsZi5fcHlsaW50cmMgPSBvcy5wYXRoLmpvaW4oc2VsZi5f
c2NyaXB0X2RpciwgJ3dlYmtpdHB5JywgJ3B5bGludHJjJykKKworICAgIGRlZiBydW4oc2VsZiwg
YXJndik6CisgICAgICAgIG91dHB1dCA9IF9GaWx0ZXJlZFN0cmluZ0lPKHNlbGYuRkFMU0VfUE9T
SVRJVkVTKQorICAgICAgICBsaW50LlJ1bihbJy0tcmNmaWxlJywgc2VsZi5fcHlsaW50cmNdICsg
YXJndiwgcmVwb3J0ZXI9UGFyc2VhYmxlVGV4dFJlcG9ydGVyKG91dHB1dD1vdXRwdXQpLCBleGl0
PUZhbHNlKQorICAgICAgICByZXR1cm4gb3V0cHV0CisKKworY2xhc3MgX0ZpbHRlcmVkU3RyaW5n
SU8oU3RyaW5nSU8pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBiYWRfbWVzc2FnZXMpOgorICAg
ICAgICBTdHJpbmdJTy5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmRyb3BwZWRfbGFzdF9t
c2cgPSBGYWxzZQorICAgICAgICBzZWxmLmJhZF9tZXNzYWdlcyA9IGJhZF9tZXNzYWdlcworCisg
ICAgZGVmIHdyaXRlKHNlbGYsIG1zZz0nJyk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9maWx0ZXIo
bXNnKToKKyAgICAgICAgICAgIFN0cmluZ0lPLndyaXRlKHNlbGYsIG1zZykKIAotICAgICAgICBl
cnJvcnMgPSBjaGVja2VyLmNoZWNrX2FsbCgpCisgICAgZGVmIF9maWx0ZXIoc2VsZiwgbXNnKToK
KyAgICAgICAgaWYgYW55KGJhZF9tZXNzYWdlIGluIG1zZyBmb3IgYmFkX21lc3NhZ2UgaW4gc2Vs
Zi5iYWRfbWVzc2FnZXMpOgorICAgICAgICAgICAgc2VsZi5kcm9wcGVkX2xhc3RfbXNnID0gVHJ1
ZQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYgc2VsZi5kcm9wcGVkX2xhc3Rf
bXNnOgorICAgICAgICAgICAgIyBXZSBkcm9wIHRoZSBuZXdsaW5lIGFmdGVyIGEgZHJvcHBlZCBt
ZXNzYWdlIGFzIHdlbGwuCisgICAgICAgICAgICBzZWxmLmRyb3BwZWRfbGFzdF9tc2cgPSBGYWxz
ZQorICAgICAgICAgICAgaWYgbXNnID09ICdcbic6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRy
dWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL2NoZWNrZXJzL3B5dGhvbl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlcnMvcHl0aG9uX3VuaXR0ZXN0LnB5CmluZGV4IGUwMDNlYjg2ZGVh
MGFiMWYzYzYxOTk3YTlhYmMzMjBkYzM3NzU5NDcuLmQ0ZDA2NDk3MzEzNGM3MjJjZDI3ZDY2YmU0
NzNjZTNkMmQwY2YyOGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlcnMvcHl0aG9uX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3R5bGUvY2hlY2tlcnMvcHl0aG9uX3VuaXR0ZXN0LnB5CkBAIC01Nyw2ICs1Nyw3IEBAIGNsYXNz
IFB5dGhvbkNoZWNrZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgY2hlY2tlciA9
IFB5dGhvbkNoZWNrZXIoZmlsZV9wYXRoLCBfbW9ja19oYW5kbGVfc3R5bGVfZXJyb3IpCiAgICAg
ICAgIGNoZWNrZXIuY2hlY2sobGluZXM9W10pCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
bGVuKGVycm9ycyksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVycm9yc1swXSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgKDIsICJwZXA4L1cyOTEiLCA1LCAidHJhaWxpbmcgd2hp
dGVzcGFjZSIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlcnJvcnMsIFsKKyAgICAgICAg
ICAgICg0LCAicGVwOC9XMjkxIiwgNSwgInRyYWlsaW5nIHdoaXRlc3BhY2UiKSwKKyAgICAgICAg
ICAgICg0LCAicHlsaW50L0UwNjAyIiwgNSwgIlVuZGVmaW5lZCB2YXJpYWJsZSAnZXJyb3InIiks
CisgICAgICAgICAgICBdKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHls
ZS9jaGVja2Vycy9weXRob25fdW5pdHRlc3RfaW5wdXQucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL2NoZWNrZXJzL3B5dGhvbl91bml0dGVzdF9pbnB1dC5weQppbmRleCA5ZjFkMTE4
NDgyOGE0MDkxNzEzMGJlMjk5MDNkOTI5Yzc2MTZlYjMzLi5hZmExZDRlMjI3NjM3MjVlZDFjMmNm
MDkwMzA1NjNjOTRjMTY5NmNkIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL2NoZWNrZXJzL3B5dGhvbl91bml0dGVzdF9pbnB1dC5weQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL3B5dGhvbl91bml0dGVzdF9pbnB1dC5weQpAQCAtMSwy
ICsxLDQgQEAKLSMgVGhpcyBmaWxlIGlzIHNhbXBsZSBpbnB1dCBmb3IgcHl0aG9uX3VuaXR0ZXN0
LnB5IGFuZCBpbmNsdWRlcyBhIHNpbmdsZQotIyBlcnJvciB3aGljaCBpcyBhbiBleHRyYSBzcGFj
ZSBhdCB0aGUgZW5kIG9mIHRoaXMgbGluZS4gCisjIFRoaXMgZmlsZSBpcyBzYW1wbGUgaW5wdXQg
Zm9yIHB5dGhvbl91bml0dGVzdC5weSBhbmQgaW5jbHVkZXMgdHdvCisjIHByb2JsZW1zLCBvbmUg
dGhhdCB3aWxsIGdlbmVyYXRlIGEgUEVQLTggd2FybmluZyBmb3IgdHJhaWxpbmcgd2hpdGVzcGFj
ZQorIyBhbmQgb25lIHRoYXQgd2lsbCBnZW5lcmF0ZSBhIHB5bGludCBlcnJvciBmb3IgYW4gdW5k
ZWZpbmVkIHZhcmlhYmxlLgorcHJpbnQgZXJyb3IoKSAK
</data>
<flag name="review"
          id="186772"
          type_id="1"
          status="+"
          setter="ojan"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>173140</attachid>
            <date>2012-11-08 16:15:12 -0800</date>
            <delta_ts>2012-11-08 16:15:12 -0800</delta_ts>
            <desc>output from running pep8 across webkitpy (non-test) code</desc>
            <filename>pep8_errors.txt</filename>
            <type>text/plain</type>
            <size>1157</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">Li9jb21tb24vY2hlY2tvdXQvY2hhbmdlbG9nLnB5OjMyOjE3OiBFMjYxIGF0IGxlYXN0IHR3byBz
cGFjZXMgYmVmb3JlIGlubGluZSBjb21tZW50Ci4vY29tbW9uL2NoZWNrb3V0L2NoZWNrb3V0X21v
Y2sucHk6NzI6MTogRTMwMiBleHBlY3RlZCAyIGJsYW5rIGxpbmVzLCBmb3VuZCAxCi4vY29tbW9u
L2NoZWNrb3V0L2RpZmZfdGVzdF9kYXRhLnB5OjM1OjE6IFcyOTEgdHJhaWxpbmcgd2hpdGVzcGFj
ZQouL2NvbW1vbi9jaGVja291dC9zY20vc2NtLnB5OjYwOjE6IEUzMDMgdG9vIG1hbnkgYmxhbmsg
bGluZXMgKDMpCi4vY29tbW9uL2NvbmZpZy9pcmMucHk6Mjk6NzogRTIyNSBtaXNzaW5nIHdoaXRl
c3BhY2UgYXJvdW5kIG9wZXJhdG9yCi4vY29tbW9uL2NvbmZpZy9wb3J0cy5weTo4MDoyMjogVzYw
MSAuaGFzX2tleSgpIGlzIGRlcHJlY2F0ZWQsIHVzZSAnaW4nCi4vY29tbW9uL2hvc3RfbW9jay5w
eTo4MToxOiBXMzkxIGJsYW5rIGxpbmUgYXQgZW5kIG9mIGZpbGUKLi9jb21tb24vbWVzc2FnZV9w
b29sLnB5OjI5MjozMzogVzYwMiBkZXByZWNhdGVkIGZvcm0gb2YgcmFpc2luZyBleGNlcHRpb24K
Li9jb21tb24vbmV0L2J1Z3ppbGxhL2J1Z3ppbGxhX21vY2sucHk6MTcyOjM0OiBFMjQxIG11bHRp
cGxlIHNwYWNlcyBhZnRlciAnOicKLi9jb21tb24vbmV0L2J1aWxkYm90L2J1aWxkYm90LnB5Ojcw
OjkwOiBFNzAyIG11bHRpcGxlIHN0YXRlbWVudHMgb24gb25lIGxpbmUgKHNlbWljb2xvbikKLi9j
b21tb24vbmV0L2J1aWxkYm90L2J1aWxkYm90LnB5OjE0Njo1OiBFMzAxIGV4cGVjdGVkIDEgYmxh
bmsgbGluZSwgZm91bmQgMAouL2NvbW1vbi9uZXQvaXJjL2lyY2JvdC5weTo1OTo0NjogRTIwMiB3
aGl0ZXNwYWNlIGJlZm9yZSAnKScKLi9zdHlsZS9jaGVja2Vycy9jcHAucHk6MjY3Ojc6IEUxMTEg
aW5kZW50YXRpb24gaXMgbm90IGEgbXVsdGlwbGUgb2YgZm91cgouL3N0eWxlL2NoZWNrZXJzL2Nw
cC5weTo1OTc6NjI6IEUyMjEgbXVsdGlwbGUgc3BhY2VzIGJlZm9yZSBvcGVyYXRvcgouL3N0eWxl
L2NoZWNrZXJzL2NwcC5weTozNDUyOjQyOiBFMjYyIGlubGluZSBjb21tZW50IHNob3VsZCBzdGFy
dCB3aXRoICcjICcKLi90b29sL2NvbW1hbmRzL2Rvd25sb2FkLnB5OjE4NjoxODogRTIwMSB3aGl0
ZXNwYWNlIGFmdGVyICd7Jwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>173141</attachid>
            <date>2012-11-08 16:15:36 -0800</date>
            <delta_ts>2012-11-08 16:15:36 -0800</delta_ts>
            <desc>output from running pylint across webkitpy (non-test) code</desc>
            <filename>pylint_errors.txt</filename>
            <type>text/plain</type>
            <size>6526</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">Y29tbW9uL2NoZWNrb3V0L3NjbS9zY20ucHk6NjU6IFtFMTEyMSwgU0NNLl9faW5pdF9fXSBUb28g
bWFueSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb24gY2FsbApjb21tb24vY2hlY2tv
dXQvc2NtL3NjbS5weToxNDA6IFtFMDIxMywgU0NNLmZpbmRfY2hlY2tvdXRfcm9vdF0gTWV0aG9k
IHNob3VsZCBoYXZlICJzZWxmIiBhcyBmaXJzdCBhcmd1bWVudApjb21tb24vY2hlY2tvdXQvc2Nt
L3NjbS5weToyMzc6IFtFMDIxMSwgU0NNLnJlbW90ZV9tZXJnZV9iYXNlXSBNZXRob2QgaGFzIG5v
IGFyZ3VtZW50CmNvbW1vbi9jaGVja291dC9zY20vc2NtX21vY2sucHk6OTc6IFtFMDYwMiwgTW9j
a1NDTS5jb21taXRfbWVzc2FnZV9mb3JfbG9jYWxfY29tbWl0XSBVbmRlZmluZWQgdmFyaWFibGUg
J0NvbW1pdE1lc3NhZ2UnCmNvbW1vbi9jaGVja291dC9zY20vc2NtX21vY2sucHk6MTAwOiBbRTA2
MDIsIE1vY2tTQ00uY29tbWl0X21lc3NhZ2VfZm9yX2xvY2FsX2NvbW1pdF0gVW5kZWZpbmVkIHZh
cmlhYmxlICdDb21taXRNZXNzYWdlJwpjb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weTo1MzogW0Ux
MTAxLCBTVk5SZXBvc2l0b3J5Lmhhc19hdXRob3JpemF0aW9uX2Zvcl9yZWFsbV0gSW5zdGFuY2Ug
b2YgJ1NWTlJlcG9zaXRvcnknIGhhcyBubyAncnVuJyBtZW1iZXIKY29tbW9uL2NoZWNrb3V0L3Nj
bS9zdm4ucHk6NjA6IFtFMTEwMSwgU1ZOUmVwb3NpdG9yeS5oYXNfYXV0aG9yaXphdGlvbl9mb3Jf
cmVhbG1dIEluc3RhbmNlIG9mICdTVk5SZXBvc2l0b3J5JyBoYXMgbm8gJ3J1bicgbWVtYmVyCmNv
bW1vbi9jaGVja291dC9zY20vc3ZuLnB5OjYyOiBbRTExMDEsIFNWTlJlcG9zaXRvcnkuaGFzX2F1
dGhvcml6YXRpb25fZm9yX3JlYWxtXSBJbnN0YW5jZSBvZiAnU1ZOUmVwb3NpdG9yeScgaGFzIG5v
ICdydW4nIG1lbWJlcgpjb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weTo3OTogW0UwNjAyLCBTVk4u
X19pbml0X19dIFVuZGVmaW5lZCB2YXJpYWJsZSAnc3ZuX2luZm9fYXJncycKY29tbW9uL2NoZWNr
b3V0L3NjbS9zdm4ucHk6MjcxOiBbRTA2MDIsIFNWTi5fYm9ndXNfZGlyX25hbWVdIFVuZGVmaW5l
ZCB2YXJpYWJsZSAndGVtcGZpbGUnCmNvbW1vbi9jb25maWcvY29udHJpYnV0aW9uYXJlYXMucHk6
MTgzOiBbRTAxMDIsIENvbnRyaWJ1dGlvbkFyZWFzLm5hbWVzXSBtZXRob2QgYWxyZWFkeSBkZWZp
bmVkIGxpbmUgMTgwCmNvbW1vbi9jb25maWcvcG9ydHMucHk6NDY6IFtFMTEwMSwgRGVwcmVjYXRl
ZFBvcnQuZmxhZ10gSW5zdGFuY2Ugb2YgJ0RlcHJlY2F0ZWRQb3J0JyBoYXMgbm8gJ3BvcnRfZmxh
Z19uYW1lJyBtZW1iZXIKY29tbW9uL2NvbmZpZy9wb3J0cy5weTo0NzogW0UxMTAxLCBEZXByZWNh
dGVkUG9ydC5mbGFnXSBJbnN0YW5jZSBvZiAnRGVwcmVjYXRlZFBvcnQnIGhhcyBubyAncG9ydF9m
bGFnX25hbWUnIG1lbWJlcgpjb21tb24vbmV0L2J1aWxkYm90L2J1aWxkYm90LnB5OjEzODogW0Ux
MTAyLCBCdWlsZGVyLmZvcmNlX2J1aWxkXSBzZWxmLl9icm93c2VyLm9wZW4gaXMgbm90IGNhbGxh
YmxlCmNvbW1vbi9uZXQvYnVpbGRib3QvYnVpbGRib3QucHk6MTM5OiBbRTExMDIsIEJ1aWxkZXIu
Zm9yY2VfYnVpbGRdIHNlbGYuX2Jyb3dzZXIuc2VsZWN0X2Zvcm0gaXMgbm90IGNhbGxhYmxlCmNv
bW1vbi9uZXQvYnVpbGRib3QvYnVpbGRib3QucHk6MTQzOiBbRTExMDIsIEJ1aWxkZXIuZm9yY2Vf
YnVpbGRdIHNlbGYuX2Jyb3dzZXIuc3VibWl0IGlzIG5vdCBjYWxsYWJsZQpjb21tb24vbmV0L2J1
aWxkYm90L2J1aWxkYm90X21vY2sucHk6NTY6IFtFMDYwMiwgTW9ja0J1aWxkZXIuZm9yY2VfYnVp
bGRdIFVuZGVmaW5lZCB2YXJpYWJsZSAnbG9nJwpjb21tb24vbmV3c3RyaW5naW8ucHk6MzU6IFtF
MDEwMiwgU3RyaW5nSU9dIGNsYXNzIGFscmVhZHkgZGVmaW5lZCBsaW5lIDMyCmNvbW1vbi9zeXN0
ZW0vZXhlY3V0aXZlX21vY2sucHk6MTcxOiBbRTA3MDIsIE1vY2tFeGVjdXRpdmUyLnJ1bl9jb21t
YW5kXSBSYWlzaW5nIE5vbmVUeXBlIHdoaWxlIG9ubHkgY2xhc3NlcywgaW5zdGFuY2VzIG9yIHN0
cmluZyBhcmUgYWxsb3dlZApjb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5weToxMTE6IFtF
MTEwMSwgTW9ja0ZpbGVTeXN0ZW0uY29weWZpbGVdIE1vZHVsZSAnZXJybm8nIGhhcyBubyAnSVNE
SVInIG1lbWJlcgpjb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5weToxMTM6IFtFMTEwMSwg
TW9ja0ZpbGVTeXN0ZW0uY29weWZpbGVdIE1vZHVsZSAnZXJybm8nIGhhcyBubyAnSVNESVInIG1l
bWJlcgpsYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weTozMDQ6IFtFMTEwMSwgTWFu
YWdlci5fd2Vic29ja2V0X3Rlc3RzXSBJbnN0YW5jZSBvZiAnTWFuYWdlcicgaGFzIG5vICdfdGVz
dF9maWxlcycgbWVtYmVyCmxheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5OjMwNDog
W0UxMTAxLCBNYW5hZ2VyLl93ZWJzb2NrZXRfdGVzdHNdIEluc3RhbmNlIG9mICdNYW5hZ2VyJyBo
YXMgbm8gJ19pc193ZWJzb2NrZXQnIG1lbWJlcgpsYXlvdXRfdGVzdHMvcG9ydC9hcHBsZS5weTo3
NzogW0UxMTAxLCBBcHBsZVBvcnQuX19pbml0X19dIEluc3RhbmNlIG9mICdBcHBsZVBvcnQnIGhh
cyBubyAnVkVSU0lPTl9GQUxMQkFDS19PUkRFUicgbWVtYmVyCmxheW91dF90ZXN0cy9wb3J0L2Fw
cGxlLnB5Ojg1OiBbRTExMDEsIEFwcGxlUG9ydC5fc2tpcHBlZF9maWxlX3NlYXJjaF9wYXRoc10g
SW5zdGFuY2Ugb2YgJ0FwcGxlUG9ydCcgaGFzIG5vICdWRVJTSU9OX0ZBTExCQUNLX09SREVSJyBt
ZW1iZXIKbGF5b3V0X3Rlc3RzL3BvcnQvYXBwbGUucHk6OTU6IFtFMTEwMSwgQXBwbGVQb3J0Ll9n
ZW5lcmF0ZV9hbGxfdGVzdF9jb25maWd1cmF0aW9uc10gSW5zdGFuY2Ugb2YgJ0FwcGxlUG9ydCcg
aGFzIG5vICdWRVJTSU9OX0ZBTExCQUNLX09SREVSJyBtZW1iZXIKbGF5b3V0X3Rlc3RzL3BvcnQv
YXBwbGUucHk6OTg6IFtFMTEwMSwgQXBwbGVQb3J0Ll9nZW5lcmF0ZV9hbGxfdGVzdF9jb25maWd1
cmF0aW9uc10gSW5zdGFuY2Ugb2YgJ0FwcGxlUG9ydCcgaGFzIG5vICdBUkNISVRFQ1RVUkVTJyBt
ZW1iZXIKbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weTo1NzQ6IFtFMTEwMywgUG9ydC5yZWZlcmVu
Y2VfZmlsZXNdIEluc3RhbmNlIG9mICdsaXN0JyBoYXMgbm8gJ2dldCcgbWVtYmVyIChidXQgc29t
ZSB0eXBlcyBjb3VsZCBub3QgYmUgaW5mZXJyZWQpCmxheW91dF90ZXN0cy9wb3J0L2Nocm9taXVt
LnB5OjEyNjogW0UxMTAxLCBDaHJvbWl1bVBvcnQuZGVmYXVsdF9iYXNlbGluZV9zZWFyY2hfcGF0
aF0gSW5zdGFuY2Ugb2YgJ0Nocm9taXVtUG9ydCcgaGFzIG5vICdGQUxMQkFDS19QQVRIUycgbWVt
YmVyCmxheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHk6NDkxOiBbRTAyMTMsIENo
cm9taXVtQW5kcm9pZERyaXZlci5fY29tbWFuZF93cmFwcGVyXSBNZXRob2Qgc2hvdWxkIGhhdmUg
InNlbGYiIGFzIGZpcnN0IGFyZ3VtZW50CmxheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX3BvcnRf
dGVzdGNhc2UucHk6MTA2OiBbRTExMDEsIENocm9taXVtUG9ydFRlc3RDYXNlLlRlc3RBbmRyb2lk
UG9ydC5fX2luaXRfX10gTW9kdWxlICdsYXlvdXRfdGVzdHMucG9ydC5jaHJvbWl1bV93aW4nIGhh
cyBubyAnQ2hyb21pdW1BbmRyb2lkUG9ydCcgbWVtYmVyCmxheW91dF90ZXN0cy9wb3J0L2Nocm9t
aXVtX3BvcnRfdGVzdGNhc2UucHk6MTMzOiBbRTExMDEsIENocm9taXVtUG9ydFRlc3RDYXNlLnRl
c3RfZGVmYXVsdF9jb25maWd1cmF0aW9uXSBJbnN0YW5jZSBvZiAnTW9ja09wdGlvbnMnIGhhcyBu
byAnY29uZmlndXJhdGlvbicgbWVtYmVyCmxheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX3BvcnRf
dGVzdGNhc2UucHk6MTM4OiBbRTExMDEsIENocm9taXVtUG9ydFRlc3RDYXNlLnRlc3RfZGVmYXVs
dF9jb25maWd1cmF0aW9uXSBJbnN0YW5jZSBvZiAnTW9ja09wdGlvbnMnIGhhcyBubyAnY29uZmln
dXJhdGlvbicgbWVtYmVyCmxheW91dF90ZXN0cy9wb3J0L3BvcnRfdGVzdGNhc2UucHk6ODk6IFtF
MTEwMSwgUG9ydFRlc3RDYXNlLm1ha2VfcG9ydF0gSW5zdGFuY2Ugb2YgJ1BvcnRUZXN0Q2FzZScg
aGFzIG5vICdwb3J0X25hbWUnIG1lbWJlcgpsYXlvdXRfdGVzdHMvcG9ydC9wb3J0X3Rlc3RjYXNl
LnB5OjQzODogW0UxMTAxLCBQb3J0VGVzdENhc2UudGVzdF9leHBlY3RhdGlvbnNfb3JkZXJpbmdd
IEluc3RhbmNlIG9mICdNb2NrT3B0aW9ucycgaGFzIG5vICdhZGRpdGlvbmFsX2V4cGVjdGF0aW9u
cycgbWVtYmVyCmxheW91dF90ZXN0cy9wb3J0L3BvcnRfdGVzdGNhc2UucHk6NTA1OiBbRTAxMDIs
IFBvcnRUZXN0Q2FzZS50ZXN0X2V4cGVjdGF0aW9uc19maWxlc10gbWV0aG9kIGFscmVhZHkgZGVm
aW5lZCBsaW5lIDExNwpsYXlvdXRfdGVzdHMvc2VydmVycy9odHRwX3NlcnZlcl9iYXNlLnB5OjE5
NzogW0UxMTAxLCBIdHRwU2VydmVyQmFzZS5fY2hlY2tfdGhhdF9hbGxfcG9ydHNfYXJlX2F2YWls
YWJsZV0gTW9kdWxlICdlcnJubycgaGFzIG5vICdXU0FFQUNDRVMnIG1lbWJlcgpzdHlsZS9jaGVj
a2Vycy9jcHAucHk6MTA4MTogW0UwMDEyXSBCYWQgb3B0aW9uIHZhbHVlICdDNjQwMycKc3R5bGUv
Y2hlY2tlcnMvY3BwLnB5OjE3OTY6IFtFMDAxMl0gQmFkIG9wdGlvbiB2YWx1ZSAnQzY0MDMnCnRv
b2wvY29tbWFuZHMvYWJzdHJhY3Rsb2NhbHNlcnZlcmNvbW1hbmQucHk6NTY6IFtFMTEwMiwgQWJz
dHJhY3RMb2NhbFNlcnZlckNvbW1hbmQuZXhlY3V0ZV0gc2VsZi5zZXJ2ZXIgaXMgbm90IGNhbGxh
YmxlCnRvb2wvY29tbWFuZHMvZG93bmxvYWQucHk6MTYwOiBbRTExMDEsIEFic3RyYWN0UGF0Y2hQ
cm9jZXNzaW5nQ29tbWFuZC5leGVjdXRlXSBJbnN0YW5jZSBvZiAnQWJzdHJhY3RQYXRjaFByb2Nl
c3NpbmdDb21tYW5kJyBoYXMgbm8gJ19wcmVwYXJlX3RvX3Byb2Nlc3MnIG1lbWJlcgp0b29sL2Nv
bW1hbmRzL2Rvd25sb2FkLnB5OjE2MTogW0UxMTAxLCBBYnN0cmFjdFBhdGNoUHJvY2Vzc2luZ0Nv
bW1hbmQuZXhlY3V0ZV0gSW5zdGFuY2Ugb2YgJ0Fic3RyYWN0UGF0Y2hQcm9jZXNzaW5nQ29tbWFu
ZCcgaGFzIG5vICdfZmV0Y2hfbGlzdF9vZl9wYXRjaGVzX3RvX3Byb2Nlc3MnIG1lbWJlcgp0b29s
L2NvbW1hbmRzL2Rvd25sb2FkLnB5OjE2ODogW0UxMTAxLCBBYnN0cmFjdFBhdGNoUHJvY2Vzc2lu
Z0NvbW1hbmQuZXhlY3V0ZV0gSW5zdGFuY2Ugb2YgJ0Fic3RyYWN0UGF0Y2hQcm9jZXNzaW5nQ29t
bWFuZCcgaGFzIG5vICdfcHJvY2Vzc19wYXRjaCcgbWVtYmVyCnRvb2wvY29tbWFuZHMvZWFybHl3
YXJuaW5nc3lzdGVtLnB5OjUxOiBbRTExMDEsIEFic3RyYWN0RWFybHlXYXJuaW5nU3lzdGVtLl9f
aW5pdF9fXSBJbnN0YW5jZSBvZiAnQWJzdHJhY3RFYXJseVdhcm5pbmdTeXN0ZW0nIGhhcyBubyAn
cG9ydF9uYW1lJyBtZW1iZXIKdG9vbC9jb21tYW5kcy9lYXJseXdhcm5pbmdzeXN0ZW0ucHk6Njk6
IFtFMTEwMSwgQWJzdHJhY3RFYXJseVdhcm5pbmdTeXN0ZW0uX3Bvc3RfcmVqZWN0X21lc3NhZ2Vf
b25fYnVnXSBJbnN0YW5jZSBvZiAnQWJzdHJhY3RFYXJseVdhcm5pbmdTeXN0ZW0nIGhhcyBubyAn
cG9ydF9uYW1lJyBtZW1iZXIKdG9vbC9jb21tYW5kcy9leHBlY3RhdGlvbnMucHk6NDI6IFtFMTEy
MCwgT3B0aW1pemVFeHBlY3RhdGlvbnMuZXhlY3V0ZV0gTm8gdmFsdWUgcGFzc2VkIGZvciBwYXJh
bWV0ZXIgJ2V4cGVjdGF0aW9uc19zdHJpbmcnIGluIGZ1bmN0aW9uIGNhbGwKdG9vbC9jb21tYW5k
cy9nYXJkZW5vbWF0aWMucHk6MzQ6IFtFMTAwMywgR2FyZGVuT01hdGljLl9faW5pdF9fXSBCYWQg
Zmlyc3QgYXJndW1lbnQgJ0Fic3RyYWN0UmViYXNlbGluaW5nQ29tbWFuZCcgZ2l2ZW4gdG8gc3Vw
ZXIgY2xhc3MKdG9vbC9jb21tYW5kcy9nYXJkZW5vbWF0aWMucHk6MzQ6IFtFMDEwMSwgR2FyZGVu
T01hdGljLl9faW5pdF9fXSBFeHBsaWNpdCByZXR1cm4gaW4gX19pbml0X18KdG9vbC9jb21tYW5k
cy9xdWV1ZXMucHk6MzU1OiBbRTAyMTMsIENvbW1pdFF1ZXVlLmhhbmRsZV9zY3JpcHRfZXJyb3Jd
IE1ldGhvZCBzaG91bGQgaGF2ZSAic2VsZiIgYXMgZmlyc3QgYXJndW1lbnQKdG9vbC9tdWx0aWNv
bW1hbmR0b29sLnB5OjE1NDogW0UwMjAyLCBIZWxwUHJpbnRpbmdPcHRpb25QYXJzZXIuZXJyb3Jd
IEFuIGF0dHJpYnV0ZSBhZmZlY3RlZCBpbiBzdHlsZS5vcHRwYXJzZXIgbGluZSAzNDMgaGlkZSB0
aGlzIG1ldGhvZAp0b29sL3NlcnZlcnMvZ2FyZGVuaW5nc2VydmVyLnB5Ojg5OiBbRTExMjAsIEdh
cmRlbmluZ0hUVFBSZXF1ZXN0SGFuZGxlci5yb2xsb3V0XSBObyB2YWx1ZSBwYXNzZWQgZm9yIHBh
cmFtZXRlciAnaW5wdXRfc3RyaW5nJyBpbiBmdW5jdGlvbiBjYWxsCnRvb2wvc2VydmVycy9nYXJk
ZW5pbmdzZXJ2ZXIucHk6MTQyOiBbRTExMDEsIEdhcmRlbmluZ0hUVFBSZXF1ZXN0SGFuZGxlci5s
b2NhbHJlc3VsdF0gSW5zdGFuY2Ugb2YgJ0dhcmRlbmluZ0hUVFBSZXF1ZXN0SGFuZGxlcicgaGFz
IG5vICdfc2VuZF9yZXNwb25zZScgbWVtYmVyCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>