<?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>48892</bug_id>
          
          <creation_ts>2010-11-02 18:07:45 -0700</creation_ts>
          <short_desc>Rebaseline server: initial framework</short_desc>
          <delta_ts>2010-11-05 15:05:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>47761</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mihai Parparita">mihaip</reporter>
          <assigned_to name="Mihai Parparita">mihaip</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>303833</commentid>
    <comment_count>0</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-11-02 18:07:45 -0700</bug_when>
    <thetext>Rebaseline server: initial framework</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303835</commentid>
    <comment_count>1</comment_count>
      <attachid>72780</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-11-02 18:10:29 -0700</bug_when>
    <thetext>Created attachment 72780
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303836</commentid>
    <comment_count>2</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-11-02 18:11:48 -0700</bug_when>
    <thetext>Tony, taking you up on your offer to start reviewing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304094</commentid>
    <comment_count>3</comment_count>
      <attachid>72780</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-11-03 10:18:08 -0700</bug_when>
    <thetext>Comment on attachment 72780
Patch

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

Mostly small style nits.

&gt; WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:37
&gt;  \ No newline at end of file

Nit: New line

&gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:46
&gt; +class RebaselineHTTPServer(BaseHTTPServer.HTTPServer):
&gt; +    def __init__(self, httpd_port, results_directory):

Nit: Can you add a module level docstring explaining what is in this file and what this file is for?

&gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:53
&gt; +    STATIC_FILE_NAMES = [
&gt; +        &apos;index.html&apos;,

Nit: Make this a set.

&gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:69
&gt; +            (path, query_string) = self.path.split(&apos;?&apos;, 1)

Nit: Don&apos;t need the () on the left side

&gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:89
&gt; +    def serve_static_file(self, static_path):

Nit: Can this method be protected?

&gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:107
&gt; +        static_file = file(file_path, &apos;rb&apos;)

The preferred way in webkit to open files seems to be:
  with codecs.open(file_path, &apos;rb&apos;) as static_file:
The &apos;with&apos; automatically closes the file at the end of the scope (which includes exceptions being raised).

&gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:111
&gt; +        (mime_type, encoding) = mimetypes.guess_type(file_path)

Nit: no () on the left

&gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:117
&gt; +            expires_time = \
&gt; +                datetime.datetime.now() + datetime.timedelta(0, cacheable_seconds)

Nit: I prefer () for implicit line continuation instead of \, but I realize that&apos;s not in PEP8.  I think Eric just prefers to have long lines :)

&gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:129
&gt; +    help_text = &apos;Given a test results directory generated by (new-)run-webkit-tests, starts a local HTTP server that displays unexpected failures and allows rebaselining.&apos;

Tears, we could have just used the doc string for this, but I guess that boat has sailed.

&gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:145
&gt; +        print &apos;Starting server at http://localhost:%d/&apos; % options.httpd_port
&gt; +

Nit: Maybe add text saying to browse to /quitquitquit to shutdown the server?  I guess you can also use ctrl+c to shutdown, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304099</commentid>
    <comment_count>4</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-11-03 10:19:48 -0700</bug_when>
    <thetext>Just to make sure, you guys are OK with adding this as a webkit-patch command (rather than a new file in WebKitTools/Scripts), right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304160</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-03 11:40:30 -0700</bug_when>
    <thetext>I think I should bite the bullet and finally fix https://bugs.webkit.org/show_bug.cgi?id=45838 so that writing this outside of the webkit-patch command would be easy.  I&apos;m not sure this (or a lot of things) really need to be in webkit-patch anymore.  NOt that it really hurts anything to have them there, but I think smaller units of complexity are probably always better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304957</commentid>
    <comment_count>6</comment_count>
      <attachid>72998</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-11-04 16:00:43 -0700</bug_when>
    <thetext>Created attachment 72998
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304960</commentid>
    <comment_count>7</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-11-04 16:01:52 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:46
&gt; &gt; +class RebaselineHTTPServer(BaseHTTPServer.HTTPServer):
&gt; &gt; +    def __init__(self, httpd_port, results_directory):
&gt; 
&gt; Nit: Can you add a module level docstring explaining what is in this file and what this file is for?

Done.
 
&gt; &gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:53
&gt; &gt; +    STATIC_FILE_NAMES = [
&gt; &gt; +        &apos;index.html&apos;,
&gt; 
&gt; Nit: Make this a set.

Done.

&gt; &gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:69
&gt; &gt; +            (path, query_string) = self.path.split(&apos;?&apos;, 1)
&gt; 
&gt; Nit: Don&apos;t need the () on the left side.

Fixed.

&gt; &gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:89
&gt; &gt; +    def serve_static_file(self, static_path):
&gt; 
&gt; Nit: Can this method be protected?

Done.

&gt; &gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:107
&gt; &gt; +        static_file = file(file_path, &apos;rb&apos;)
&gt; 
&gt; The preferred way in webkit to open files seems to be:
&gt;   with codecs.open(file_path, &apos;rb&apos;) as static_file:
&gt; The &apos;with&apos; automatically closes the file at the end of the scope (which includes exceptions being raised).

Neat, changed.
&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:111
&gt; &gt; +        (mime_type, encoding) = mimetypes.guess_type(file_path)
&gt; 
&gt; Nit: no () on the left

Fixed.

&gt; &gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:117
&gt; &gt; +            expires_time = \
&gt; &gt; +                datetime.datetime.now() + datetime.timedelta(0, cacheable_seconds)
&gt; 
&gt; Nit: I prefer () for implicit line continuation instead of \, but I realize that&apos;s not in PEP8.  I think Eric just prefers to have long lines :)

Switched to parentheses.

&gt; &gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:129
&gt; &gt; +    help_text = &apos;Given a test results directory generated by (new-)run-webkit-tests, starts a local HTTP server that displays unexpected failures and allows rebaselining.&apos;
&gt; 
&gt; Tears, we could have just used the doc string for this, but I guess that boat has sailed.

Actually, help_text = __doc__ does what you want.

&gt; &gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:145
&gt; &gt; +        print &apos;Starting server at http://localhost:%d/&apos; % options.httpd_port
&gt; &gt; +
&gt; 
&gt; Nit: Maybe add text saying to browse to /quitquitquit to shutdown the server?  I guess you can also use ctrl+c to shutdown, right?

Added some help text.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304974</commentid>
    <comment_count>8</comment_count>
      <attachid>72998</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-11-04 16:09:45 -0700</bug_when>
    <thetext>Comment on attachment 72998
Patch

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

Thanks for posting this in small pieces.  Also, can we test this code?  For example, we could test the command by having a mock HTTPServer so we didn&apos;t have to spin up a real server.

&gt; WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html:38
&gt; +    &lt;a href=&quot;/quitquitquit&quot;&gt;Exit&lt;/a&gt;

:)

&gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:50
&gt; +class RebaselineHTTPServer(BaseHTTPServer.HTTPServer):

I wonder if these classes should go in a different package.  We don&apos;t really have anything similar to this now, so we might need to invent something (like we invented the bot package to hold the bot-related support classes).  Having this code here seems like it will make this file grow to infinite size.

&gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:87
&gt; +        # See if a class method matches.
&gt; +        func_name = func_or_file_name.replace(&apos;.&apos;, &apos;_&apos;)

Should we prevent calls to function names that start with _ ?  Also, WebKit doesn&apos;t like abbreviations in variable names, so this would be better as function_name.

&gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:132
&gt; +    help_text = __doc__

Should we actually add this __doc__ text?

&gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:143
&gt; +            print &apos;Path to results directory is required.&apos;

If it&apos;s required, why does its description have [ ] around it?  I think our argument parser is smart enough to do this checking for you if you used argument_names = &quot;PATH_TO_RESULTS_DIRECTORY&quot;.  Also, we&apos;re trying to use &quot; consistently instead of &apos;.  Yes, we&apos;re terrible at that, but I mention it anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304976</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-04 16:11:32 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 72780 [details])
&gt; Tears, we could have just used the doc string for this, but I guess that boat has sailed.

Someone needs to explain to me sometime why docstrings are useful.  As far as I can tell, they are exclusively harmful to the code.  They&apos;re routinely abused to add useless, redundant comments to code, or to excuse poor function naming or design.

I think lacking such an explanation I may start being more agressive about removing so many of the bad docstrings in our python code.

When can one even access a doc string?

I notice that the unit testing framework will use them instead of the test name (which is kinda cool).  But I&apos;ve not seen any other part of python exploit this semantic data.

I expect the main problem with doc strings is that they don&apos;t have a clear common use case (or that they have to many things that might like to use them), so they end up trying to be everything to everyone and thus nothing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304994</commentid>
    <comment_count>10</comment_count>
      <attachid>73004</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-11-04 16:39:47 -0700</bug_when>
    <thetext>Created attachment 73004
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305000</commentid>
    <comment_count>11</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-11-04 16:44:16 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Thanks for posting this in small pieces.  Also, can we test this code?  For example, we could test the command by having a mock HTTPServer so we didn&apos;t have to spin up a real server.

I was hoping to move the actual rebaseline/copying logic into a separate class that the server/handler would use, and just unittest that.

&gt; &gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:50
&gt; &gt; +class RebaselineHTTPServer(BaseHTTPServer.HTTPServer):
&gt; 
&gt; I wonder if these classes should go in a different package.  We don&apos;t really have anything similar to this now, so we might need to invent something (like we invented the bot package to hold the bot-related support classes).  Having this code here seems like it will make this file grow to infinite size.

I don&apos;t have a strong opinion here (the final file would probably be ~500 lines). If bug 45838 is fixed, where do you expect standalone tools to end up?
 
&gt; &gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:87
&gt; &gt; +        # See if a class method matches.
&gt; &gt; +        func_name = func_or_file_name.replace(&apos;.&apos;, &apos;_&apos;)
&gt; 
&gt; Should we prevent calls to function names that start with _ ?

Good point, made that return a 401.

&gt;  Also, WebKit doesn&apos;t like abbreviations in variable names, so this would be better as function_name.

Changed.

&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:132
&gt; &gt; +    help_text = __doc__
&gt;
&gt; Should we actually add this __doc__ text?

The triple-quoted string at the top of the file ends up as the __doc__ value.

&gt; &gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:143
&gt; &gt; +            print &apos;Path to results directory is required.&apos;
&gt; 
&gt; If it&apos;s required, why does its description have [ ] around it?  I think our argument parser is smart enough to do this checking for you if you used argument_names = &quot;PATH_TO_RESULTS_DIRECTORY&quot;.  

Ah, hadn&apos;t realized that. Removed the [] and the checking.

&gt; Also, we&apos;re trying to use &quot; consistently instead of &apos;.  Yes, we&apos;re terrible at that, but I mention it anyway.

Switched to &quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305003</commentid>
    <comment_count>12</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-11-04 16:49:36 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 72780 [details] [details])
&gt; &gt; Tears, we could have just used the doc string for this, but I guess that boat has sailed.
&gt; 
&gt; Someone needs to explain to me sometime why docstrings are useful.  As far as I can tell, they are exclusively harmful to the code.  They&apos;re routinely abused to add useless, redundant comments to code, or to excuse poor function naming or design.
&gt; 
&gt; When can one even access a doc string?

__doc__ accesses the doc string.  In this case, instead of having a help_text member variable, you could have help just print __doc__.  This is commonly done to print the usage of a script.  For example:

class Command(object):
  &quot;&quot;&quot;This command does ...&quot;&quot;&quot; 
  def help(self):
      # This method would actually be in an abstract base class.
      print self.__doc__

c = Command()
c.help()


&gt; I think lacking such an explanation I may start being more agressive about removing so many of the bad docstrings in our python code.
&gt; 

I think the google python style guide asks for overly verbose doc strings on functions, so I&apos;m ok with removing (or condensing) what we have in the current code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305016</commentid>
    <comment_count>13</comment_count>
      <attachid>73004</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-11-04 17:09:10 -0700</bug_when>
    <thetext>Comment on attachment 73004
Patch

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

&gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:150
&gt; +        print (&quot;Use the &apos;Exit&apos; link in the UI, http://localhost:%d/&quot; +

Nit: The + is not necessary (string literals are automatically joined).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305028</commentid>
    <comment_count>14</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-11-04 17:28:42 -0700</bug_when>
    <thetext>Committed r71369: &lt;http://trac.webkit.org/changeset/71369&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305030</commentid>
    <comment_count>15</comment_count>
      <attachid>73004</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-11-04 17:30:25 -0700</bug_when>
    <thetext>Comment on attachment 73004
Patch

Landed by hand (fixed Tony&apos;s nit before submitting).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305564</commentid>
    <comment_count>16</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-05 15:05:29 -0700</bug_when>
    <thetext>This broke all the ews bots. :(  Clearly we&apos;re missing some testing somewhere.

ValueError: max() arg is an empty sequence.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72780</attachid>
            <date>2010-11-02 18:10:29 -0700</date>
            <delta_ts>2010-11-04 16:00:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48892-20101102181028.patch</filename>
            <type>text/plain</type>
            <size>14580</size>
            <attacher name="Mihai Parparita">mihaip</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAwNDk1MmQwNjUzYWI1Y2NmYTQzNmYxMGQ1ZTgyZmQ1MmE0MzdlZDgwLi5lNDMyYTUx
OTkwYzZlZWU2NjM0OWZiYTkwNmUxN2VjN2U4NGVjMTNmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTAtMTEtMDIgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmViYXNlbGluZSBz
ZXJ2ZXI6IGluaXRpYWwgZnJhbWV3b3JrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00ODg5MgorICAgICAgICAKKyAgICAgICAgQWRkcyB0aGUgYmFzaWMg
ZnJhbWV3b3JrIGZvciB0aGUgcmViYXNlbGluZSBzZXJ2ZXIgKGRldGFpbHMgYXQgCisgICAgICAg
IGh0dHA6Ly93ZWJraXQub3JnL2IvNDc3NjEpLiBJbmNsdWRlcyB0aGUgcmViYXNlbGluZS1zZXJ2
ZXIgd2Via2l0LXBhdGNoCisgICAgICAgIGNvbW1hbmQsIHdoaWNoIHN0YXJ0cyBhbiBIVFRQIHNl
cnZlciB0aGF0IGNhbiBzZXJ2ZSBzdGF0aWMgZmlsZXMgb3IKKyAgICAgICAgaW52b2tlIGhhbmRs
ZXIgbWV0aG9kcyBvbiBhIGNsYXNzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29s
L2NvbW1hbmRzL19faW5pdF9fLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9j
b21tYW5kcy9kYXRhL3JlYmFzZWxpbmVzZXJ2ZXIvaW5kZXguaHRtbDogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEvcmViYXNlbGluZXNlcnZlci9t
YWluLmNzczogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRz
L2RhdGEvcmViYXNlbGluZXNlcnZlci9tYWluLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZXNlcnZlci5weTogQWRkZWQuCisKIDIw
MTAtMTEtMDIgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBGaXggYnVpbGQuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvY29tbWFuZHMvX19pbml0X18ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvY29tbWFuZHMvX19pbml0X18ucHkKaW5kZXggOWJkZWM4ZjU5N2UxNzYzNjM0NGE4MTgzYjEw
M2ExNTBiZjhjOWRlMy4uYTA3MDMyNGZjY2EwYWVhYjdhNmYyYTg4YTJlOWNhYzM3ZDA5YmNjMCAx
MDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL19f
aW5pdF9fLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5k
cy9fX2luaXRfXy5weQpAQCAtMiw0ICsyLDUgQEAKIAogZnJvbSB3ZWJraXRweS50b29sLmNvbW1h
bmRzLnByZXR0eWRpZmYgaW1wb3J0IFByZXR0eURpZmYKIGZyb20gd2Via2l0cHkudG9vbC5jb21t
YW5kcy5yZWJhc2VsaW5lIGltcG9ydCBSZWJhc2VsaW5lCitmcm9tIHdlYmtpdHB5LnRvb2wuY29t
bWFuZHMucmViYXNlbGluZXNlcnZlciBpbXBvcnQgUmViYXNlbGluZVNlcnZlcgogIyBGSVhNRTog
QWRkIHRoZSByZXN0IG9mIHRoZSBjb21tYW5kcyBoZXJlLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEvcmViYXNlbGluZXNlcnZlci9p
bmRleC5odG1sIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2Rh
dGEvcmViYXNlbGluZXNlcnZlci9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2NjdjZDJhZjI3NGQ3
ZTAyZTkyZTNiYTc1OGU3YjdlYTc4NjYyOWEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9yZWJhc2VsaW5lc2VydmVyL2lu
ZGV4Lmh0bWwKQEAgLTAsMCArMSw0MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8IS0tCisgIENvcHly
aWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAKKyAgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAgbWV0OgorICAKKyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgZGlzdHJpYnV0aW9uLgorICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAgCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKy0tPgorPGh0bWw+Cis8aGVhZD4KKyAgPHRpdGxlPkxheW91dCBUZXN0IFJlYmFz
ZWxpbmUgU2VydmVyPC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvbWFp
bi5jc3MiIHR5cGU9InRleHQvY3NzIj4KKyAgPHNjcmlwdCBzcmM9Ii9tYWluLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5IGNsYXNzPSJsb2FkaW5nIj4KKyAgICA8YSBocmVmPSIvcXVpdHF1
aXRxdWl0Ij5FeGl0PC9hPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEvcmViYXNlbGluZXNlcnZlci9t
YWluLmNzcyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kYXRh
L3JlYmFzZWxpbmVzZXJ2ZXIvbWFpbi5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzViZDZhNWFkMWM5ZjliYjNi
NTgxOTYzMjU2ODE1YWNlYTBlMTdiMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kYXRhL3JlYmFzZWxpbmVzZXJ2ZXIvbWFpbi5j
c3MKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKK2JvZHkgeworICBmb250LXNpemU6IDEycHg7CisgIGZvbnQtZmFt
aWx5OiBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOworICBwYWRkaW5nOiAwOworICBtYXJn
aW46IDA7Cit9CisKKy5sb2FkaW5nIHsKKyAgb3BhY2l0eTogMC41OworfQorCitkaXYgeworICBt
YXJnaW46IDA7Cit9CisKK2EsIC5saW5rIHsKKyAgY29sb3I6ICNhYWY7CisgIHRleHQtZGVjb3Jh
dGlvbjogdW5kZXJsaW5lOworICBjdXJzb3I6IHBvaW50ZXI7ICAgICAgCit9CisKKy5saW5rLnNl
bGVjdGVkIHsKKyAgY29sb3I6ICNmZmY7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICB0ZXh0LWRl
Y29yYXRpb246IG5vbmU7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9yZWJhc2VsaW5lc2VydmVyL21haW4uanMgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9yZWJhc2VsaW5lc2VydmVy
L21haW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNjZhOWUzN2JlYzFiNTNjNWVlMTVmZjk2NTk5ZmM1ODA1MWFj
YmYzYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9jb21tYW5kcy9kYXRhL3JlYmFzZWxpbmVzZXJ2ZXIvbWFpbi5qcwpAQCAtMCwwICsxLDM2IEBA
CisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
ZnVuY3Rpb24gbWFpbigpCit7CisgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCds
b2FkaW5nJyk7Cit9CisKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVk
JywgbWFpbik7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFzZWxpbmVzZXJ2ZXIucHkg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZXNl
cnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43YWIxNzBjZDhhMWM3ZTMyMmIwNzYxNjZjMDU5Mjc2YTAyN2Ni
MmI3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29s
L2NvbW1hbmRzL3JlYmFzZWxpbmVzZXJ2ZXIucHkKQEAgLTAsMCArMSwxNDkgQEAKKyMgQ29weXJp
Z2h0IChjKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCitpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCBtaW1ldHlwZXMKK2ltcG9ydCBvcwor
aW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0
aW1lCitpbXBvcnQgdXJscGFyc2UKK2ltcG9ydCBCYXNlSFRUUFNlcnZlcgorCitmcm9tIG9wdHBh
cnNlIGltcG9ydCBtYWtlX29wdGlvbgorZnJvbSB3c2dpcmVmLmhhbmRsZXJzIGltcG9ydCBmb3Jt
YXRfZGF0ZV90aW1lCisKK2Zyb20gd2Via2l0cHkudG9vbC5tdWx0aWNvbW1hbmR0b29sIGltcG9y
dCBBYnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZAorCisKK2NsYXNzIFJlYmFzZWxpbmVIVFRQU2Vy
dmVyKEJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBo
dHRwZF9wb3J0LCByZXN1bHRzX2RpcmVjdG9yeSk6CisgICAgICAgIEJhc2VIVFRQU2VydmVyLkhU
VFBTZXJ2ZXIuX19pbml0X18oc2VsZiwgKCcnLCBodHRwZF9wb3J0KSwgUmViYXNlbGluZUhUVFBS
ZXF1ZXN0SGFuZGxlcikKKyAgICAgICAgc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSA9IHJlc3VsdHNf
ZGlyZWN0b3J5CisKKworY2xhc3MgUmViYXNlbGluZUhUVFBSZXF1ZXN0SGFuZGxlcihCYXNlSFRU
UFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyKToKKyAgICBTVEFUSUNfRklMRV9OQU1FUyA9
IFsKKyAgICAgICAgJ2luZGV4Lmh0bWwnLAorICAgICAgICAnbWFpbi5qcycsCisgICAgICAgICdt
YWluLmNzcycsCisgICAgXQorCisgICAgU1RBVElDX0ZJTEVfRElSRUNUT1JZID0gb3MucGF0aC5q
b2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdkYXRhJywgJ3JlYmFzZWxpbmVzZXJ2ZXIn
KQorCisgICAgZGVmIGRvX0dFVChzZWxmKToKKyAgICAgICAgc2VsZi5faGFuZGxlX3JlcXVlc3Qo
KQorCisgICAgZGVmIGRvX1BPU1Qoc2VsZik6CisgICAgICAgIHNlbGYuX2hhbmRsZV9yZXF1ZXN0
KCkKKworICAgIGRlZiBfaGFuZGxlX3JlcXVlc3Qoc2VsZik6CisgICAgICAgICMgUGFyc2UgaW5w
dXQuCisgICAgICAgIGlmICc/JyBpbiBzZWxmLnBhdGg6CisgICAgICAgICAgICAocGF0aCwgcXVl
cnlfc3RyaW5nKSA9IHNlbGYucGF0aC5zcGxpdCgnPycsIDEpCisgICAgICAgICAgICBzZWxmLnF1
ZXJ5ID0gdXJscGFyc2UucGFyc2VfcXMocXVlcnlfc3RyaW5nKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgcGF0aCA9IHNlbGYucGF0aAorICAgICAgICAgICAgc2VsZi5xdWVyeSA9IHt9Cisg
ICAgICAgIGZ1bmNfb3JfZmlsZV9uYW1lID0gcGF0aFsxOl0gb3IgJ2luZGV4Lmh0bWwnCisKKyAg
ICAgICAgIyBTZWUgaWYgYSBzdGF0aWMgZmlsZSBtYXRjaGVzLgorICAgICAgICBpZiBmdW5jX29y
X2ZpbGVfbmFtZSBpbiBSZWJhc2VsaW5lSFRUUFJlcXVlc3RIYW5kbGVyLlNUQVRJQ19GSUxFX05B
TUVTOgorICAgICAgICAgICAgc2VsZi5zZXJ2ZV9zdGF0aWNfZmlsZShmdW5jX29yX2ZpbGVfbmFt
ZSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgU2VlIGlmIGEgY2xhc3MgbWV0aG9k
IG1hdGNoZXMuCisgICAgICAgIGZ1bmNfbmFtZSA9IGZ1bmNfb3JfZmlsZV9uYW1lLnJlcGxhY2Uo
Jy4nLCAnXycpCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsIGZ1bmNfbmFtZSk6CisgICAg
ICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNDA0LCAnVW5rbm93biBmdW5jdGlvbiAlcycgJSBmdW5j
X25hbWUpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZnVuYyA9IGdldGF0dHIoc2VsZiwg
ZnVuY19uYW1lKQorICAgICAgICBmdW5jKCkKKworICAgIGRlZiBzZXJ2ZV9zdGF0aWNfZmlsZShz
ZWxmLCBzdGF0aWNfcGF0aCk6CisgICAgICAgIHNlbGYuX3NlcnZlX2ZpbGUob3MucGF0aC5qb2lu
KAorICAgICAgICAgICAgUmViYXNlbGluZUhUVFBSZXF1ZXN0SGFuZGxlci5TVEFUSUNfRklMRV9E
SVJFQ1RPUlksIHN0YXRpY19wYXRoKSkKKworICAgIGRlZiBxdWl0cXVpdHF1aXQoc2VsZik6Cisg
ICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDApCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIo
J0NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluJykKKyAgICAgICAgc2VsZi5lbmRfaGVhZGVycygp
CisgICAgICAgIHNlbGYud2ZpbGUud3JpdGUoJ1F1aXQuXG4nKQorCisgICAgICAgICMgU2h1dGRv
d24gaGFzIHRvIGhhcHBlbiBvbiBhbm90aGVyIHRocmVhZCBmcm9tIHRoZSBzZXJ2ZXIncyB0aHJl
YWQsCisgICAgICAgICMgb3RoZXJ3aXNlIHRoZXJlJ3MgYSBkZWFkbG9jaworICAgICAgICB0aHJl
YWRpbmcuVGhyZWFkKHRhcmdldD1sYW1iZGE6IHNlbGYuc2VydmVyLnNodXRkb3duKCkpLnN0YXJ0
KCkKKworICAgIGRlZiBfc2VydmVfZmlsZShzZWxmLCBmaWxlX3BhdGgsIGNhY2hlYWJsZV9zZWNv
bmRzPTApOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZV9wYXRoKToKKyAgICAg
ICAgICAgIHNlbGYuc2VuZF9lcnJvcig0MDQsICdGaWxlIG5vdCBmb3VuZCcpCisgICAgICAgICAg
ICByZXR1cm4KKyAgICAgICAgc3RhdGljX2ZpbGUgPSBmaWxlKGZpbGVfcGF0aCwgJ3JiJykKKwor
ICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMjAwKQorICAgICAgICBzZWxmLnNlbmRfaGVhZGVy
KCdDb250ZW50LUxlbmd0aCcsIG9zLnBhdGguZ2V0c2l6ZShmaWxlX3BhdGgpKQorICAgICAgICAo
bWltZV90eXBlLCBlbmNvZGluZykgPSBtaW1ldHlwZXMuZ3Vlc3NfdHlwZShmaWxlX3BhdGgpCisg
ICAgICAgIGlmIG1pbWVfdHlwZToKKyAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRl
bnQtdHlwZScsIG1pbWVfdHlwZSkKKworICAgICAgICBpZiBjYWNoZWFibGVfc2Vjb25kczoKKyAg
ICAgICAgICAgIGV4cGlyZXNfdGltZSA9IFwKKyAgICAgICAgICAgICAgICBkYXRldGltZS5kYXRl
dGltZS5ub3coKSArIGRhdGV0aW1lLnRpbWVkZWx0YSgwLCBjYWNoZWFibGVfc2Vjb25kcykKKyAg
ICAgICAgICAgIGV4cGlyZXNfZm9ybWF0dGVkID0gXAorICAgICAgICAgICAgICAgIGZvcm1hdF9k
YXRlX3RpbWUodGltZS5ta3RpbWUoZXhwaXJlc190aW1lLnRpbWV0dXBsZSgpKSkKKyAgICAgICAg
ICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0V4cGlyZXMnLCBleHBpcmVzX2Zvcm1hdHRlZCkKKyAgICAg
ICAgc2VsZi5lbmRfaGVhZGVycygpCisKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlb2JqKHN0YXRp
Y19maWxlLCBzZWxmLndmaWxlKQorICAgICAgICBzdGF0aWNfZmlsZS5jbG9zZSgpCisKKworY2xh
c3MgUmViYXNlbGluZVNlcnZlcihBYnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZCk6CisgICAgbmFt
ZSA9ICdyZWJhc2VsaW5lLXNlcnZlcicKKyAgICBoZWxwX3RleHQgPSAnR2l2ZW4gYSB0ZXN0IHJl
c3VsdHMgZGlyZWN0b3J5IGdlbmVyYXRlZCBieSAobmV3LSlydW4td2Via2l0LXRlc3RzLCBzdGFy
dHMgYSBsb2NhbCBIVFRQIHNlcnZlciB0aGF0IGRpc3BsYXlzIHVuZXhwZWN0ZWQgZmFpbHVyZXMg
YW5kIGFsbG93cyByZWJhc2VsaW5pbmcuJworICAgIGFyZ3VtZW50X25hbWVzID0gJ1svcGF0aC90
by9yZXN1bHRzL2RpcmVjdG9yeS9dJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAg
ICBvcHRpb25zID0gWworICAgICAgICAgICAgbWFrZV9vcHRpb24oJy0taHR0cGQtcG9ydCcsIGFj
dGlvbj0nc3RvcmUnLCB0eXBlPSdpbnQnLCBkZWZhdWx0PTgxMjcsIGhlbHA9J1BvcnQgdG8gdXNl
IGZvciB0aGUgdGhlIHJlYmFzZWxpbmUgSFRUUCBzZXJ2ZXInKSwKKyAgICAgICAgXQorICAgICAg
ICBBYnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZC5fX2luaXRfXyhzZWxmLCBvcHRpb25zPW9wdGlv
bnMpCisKKyAgICBkZWYgZXhlY3V0ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKKyAgICAg
ICAgaWYgbGVuKGFyZ3MpICE9IDE6CisgICAgICAgICAgICBwcmludCAnUGF0aCB0byByZXN1bHRz
IGRpcmVjdG9yeSBpcyByZXF1aXJlZC4nCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBy
ZXN1bHRzX2RpcmVjdG9yeSA9IGFyZ3NbMF0KKworICAgICAgICBwcmludCAnU3RhcnRpbmcgc2Vy
dmVyIGF0IGh0dHA6Ly9sb2NhbGhvc3Q6JWQvJyAlIG9wdGlvbnMuaHR0cGRfcG9ydAorCisgICAg
ICAgIGh0dHBkID0gUmViYXNlbGluZUhUVFBTZXJ2ZXIoCisgICAgICAgICAgICBodHRwZF9wb3J0
PW9wdGlvbnMuaHR0cGRfcG9ydCwKKyAgICAgICAgICAgIHJlc3VsdHNfZGlyZWN0b3J5PXJlc3Vs
dHNfZGlyZWN0b3J5KQorICAgICAgICBodHRwZC5zZXJ2ZV9mb3JldmVyKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72998</attachid>
            <date>2010-11-04 16:00:43 -0700</date>
            <delta_ts>2010-11-04 16:39:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48892-20101104160041.patch</filename>
            <type>text/plain</type>
            <size>14829</size>
            <attacher name="Mihai Parparita">mihaip</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAwNDk1MmQwNjUzYWI1Y2NmYTQzNmYxMGQ1ZTgyZmQ1MmE0MzdlZDgwLi5lNDMyYTUx
OTkwYzZlZWU2NjM0OWZiYTkwNmUxN2VjN2U4NGVjMTNmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTAtMTEtMDIgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmViYXNlbGluZSBz
ZXJ2ZXI6IGluaXRpYWwgZnJhbWV3b3JrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00ODg5MgorICAgICAgICAKKyAgICAgICAgQWRkcyB0aGUgYmFzaWMg
ZnJhbWV3b3JrIGZvciB0aGUgcmViYXNlbGluZSBzZXJ2ZXIgKGRldGFpbHMgYXQgCisgICAgICAg
IGh0dHA6Ly93ZWJraXQub3JnL2IvNDc3NjEpLiBJbmNsdWRlcyB0aGUgcmViYXNlbGluZS1zZXJ2
ZXIgd2Via2l0LXBhdGNoCisgICAgICAgIGNvbW1hbmQsIHdoaWNoIHN0YXJ0cyBhbiBIVFRQIHNl
cnZlciB0aGF0IGNhbiBzZXJ2ZSBzdGF0aWMgZmlsZXMgb3IKKyAgICAgICAgaW52b2tlIGhhbmRs
ZXIgbWV0aG9kcyBvbiBhIGNsYXNzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29s
L2NvbW1hbmRzL19faW5pdF9fLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9j
b21tYW5kcy9kYXRhL3JlYmFzZWxpbmVzZXJ2ZXIvaW5kZXguaHRtbDogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEvcmViYXNlbGluZXNlcnZlci9t
YWluLmNzczogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRz
L2RhdGEvcmViYXNlbGluZXNlcnZlci9tYWluLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZXNlcnZlci5weTogQWRkZWQuCisKIDIw
MTAtMTEtMDIgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBGaXggYnVpbGQuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvY29tbWFuZHMvX19pbml0X18ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvY29tbWFuZHMvX19pbml0X18ucHkKaW5kZXggOWJkZWM4ZjU5N2UxNzYzNjM0NGE4MTgzYjEw
M2ExNTBiZjhjOWRlMy4uYTA3MDMyNGZjY2EwYWVhYjdhNmYyYTg4YTJlOWNhYzM3ZDA5YmNjMCAx
MDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL19f
aW5pdF9fLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5k
cy9fX2luaXRfXy5weQpAQCAtMiw0ICsyLDUgQEAKIAogZnJvbSB3ZWJraXRweS50b29sLmNvbW1h
bmRzLnByZXR0eWRpZmYgaW1wb3J0IFByZXR0eURpZmYKIGZyb20gd2Via2l0cHkudG9vbC5jb21t
YW5kcy5yZWJhc2VsaW5lIGltcG9ydCBSZWJhc2VsaW5lCitmcm9tIHdlYmtpdHB5LnRvb2wuY29t
bWFuZHMucmViYXNlbGluZXNlcnZlciBpbXBvcnQgUmViYXNlbGluZVNlcnZlcgogIyBGSVhNRTog
QWRkIHRoZSByZXN0IG9mIHRoZSBjb21tYW5kcyBoZXJlLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEvcmViYXNlbGluZXNlcnZlci9p
bmRleC5odG1sIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2Rh
dGEvcmViYXNlbGluZXNlcnZlci9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2NjdjZDJhZjI3NGQ3
ZTAyZTkyZTNiYTc1OGU3YjdlYTc4NjYyOWEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9yZWJhc2VsaW5lc2VydmVyL2lu
ZGV4Lmh0bWwKQEAgLTAsMCArMSw0MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8IS0tCisgIENvcHly
aWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAKKyAgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAgbWV0OgorICAKKyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgZGlzdHJpYnV0aW9uLgorICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAgCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKy0tPgorPGh0bWw+Cis8aGVhZD4KKyAgPHRpdGxlPkxheW91dCBUZXN0IFJlYmFz
ZWxpbmUgU2VydmVyPC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvbWFp
bi5jc3MiIHR5cGU9InRleHQvY3NzIj4KKyAgPHNjcmlwdCBzcmM9Ii9tYWluLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5IGNsYXNzPSJsb2FkaW5nIj4KKyAgICA8YSBocmVmPSIvcXVpdHF1
aXRxdWl0Ij5FeGl0PC9hPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEvcmViYXNlbGluZXNlcnZlci9t
YWluLmNzcyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kYXRh
L3JlYmFzZWxpbmVzZXJ2ZXIvbWFpbi5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzViZDZhNWFkMWM5ZjliYjNi
NTgxOTYzMjU2ODE1YWNlYTBlMTdiMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kYXRhL3JlYmFzZWxpbmVzZXJ2ZXIvbWFpbi5j
c3MKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKK2JvZHkgeworICBmb250LXNpemU6IDEycHg7CisgIGZvbnQtZmFt
aWx5OiBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOworICBwYWRkaW5nOiAwOworICBtYXJn
aW46IDA7Cit9CisKKy5sb2FkaW5nIHsKKyAgb3BhY2l0eTogMC41OworfQorCitkaXYgeworICBt
YXJnaW46IDA7Cit9CisKK2EsIC5saW5rIHsKKyAgY29sb3I6ICNhYWY7CisgIHRleHQtZGVjb3Jh
dGlvbjogdW5kZXJsaW5lOworICBjdXJzb3I6IHBvaW50ZXI7ICAgICAgCit9CisKKy5saW5rLnNl
bGVjdGVkIHsKKyAgY29sb3I6ICNmZmY7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICB0ZXh0LWRl
Y29yYXRpb246IG5vbmU7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9yZWJhc2VsaW5lc2VydmVyL21haW4uanMgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9yZWJhc2VsaW5lc2VydmVy
L21haW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTVmMTlhNGYzZTI5NzA5Y2UzZjEzZGQyZTlkOGQxMTc0ZGUy
ZjQxYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9jb21tYW5kcy9kYXRhL3JlYmFzZWxpbmVzZXJ2ZXIvbWFpbi5qcwpAQCAtMCwwICsxLDM2IEBA
CisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
ZnVuY3Rpb24gbWFpbigpCit7CisgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCds
b2FkaW5nJyk7Cit9CisKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVk
JywgbWFpbik7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
Y29tbWFuZHMvcmViYXNlbGluZXNlcnZlci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdG9vbC9jb21tYW5kcy9yZWJhc2VsaW5lc2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxMzZhOGMy
MTJhODJiMWI4ZjFkYmNiZmY3YmU3ZTAxNDU3NTAyMzEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZXNlcnZlci5w
eQpAQCAtMCwwICsxLDE1NCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
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
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIlN0YXJ0cyBhIGxvY2Fs
IEhUVFAgc2VydmVyIHdoaWNoIGRpc3BsYXlzIGxheW91dCB0ZXN0IGZhaWx1cmVzIChnaXZlbiBh
IHRlc3QKK3Jlc3VsdHMgZGlyZWN0b3J5KSwgcHJvdmlkZXMgY29tcGFyaXNvbnMgb2YgZXhwZWN0
ZWQgYW5kIGFjdHVhbCByZXN1bHRzIChib3RoCitpbWFnZXMgYW5kIHRleHQpIGFuZCBhbGxvd3Mg
b25lLWNsaWNrIHJlYmFzZWxpbmluZyBvZiB0ZXN0cy4iIiIKKworaW1wb3J0IGNvZGVjcworaW1w
b3J0IGRhdGV0aW1lCitpbXBvcnQgbWltZXR5cGVzCitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRo
CitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdGltZQoraW1wb3J0IHVy
bHBhcnNlCitpbXBvcnQgQmFzZUhUVFBTZXJ2ZXIKKworZnJvbSBvcHRwYXJzZSBpbXBvcnQgbWFr
ZV9vcHRpb24KK2Zyb20gd3NnaXJlZi5oYW5kbGVycyBpbXBvcnQgZm9ybWF0X2RhdGVfdGltZQor
Citmcm9tIHdlYmtpdHB5LnRvb2wubXVsdGljb21tYW5kdG9vbCBpbXBvcnQgQWJzdHJhY3REZWNs
YXJhdGl2ZUNvbW1hbmQKKworCitjbGFzcyBSZWJhc2VsaW5lSFRUUFNlcnZlcihCYXNlSFRUUFNl
cnZlci5IVFRQU2VydmVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaHR0cGRfcG9ydCwgcmVz
dWx0c19kaXJlY3RvcnkpOgorICAgICAgICBCYXNlSFRUUFNlcnZlci5IVFRQU2VydmVyLl9faW5p
dF9fKHNlbGYsICgnJywgaHR0cGRfcG9ydCksIFJlYmFzZWxpbmVIVFRQUmVxdWVzdEhhbmRsZXIp
CisgICAgICAgIHNlbGYucmVzdWx0c19kaXJlY3RvcnkgPSByZXN1bHRzX2RpcmVjdG9yeQorCisK
K2NsYXNzIFJlYmFzZWxpbmVIVFRQUmVxdWVzdEhhbmRsZXIoQmFzZUhUVFBTZXJ2ZXIuQmFzZUhU
VFBSZXF1ZXN0SGFuZGxlcik6CisgICAgU1RBVElDX0ZJTEVfTkFNRVMgPSBmcm96ZW5zZXQoWwor
ICAgICAgICAnaW5kZXguaHRtbCcsCisgICAgICAgICdtYWluLmpzJywKKyAgICAgICAgJ21haW4u
Y3NzJywKKyAgICBdKQorCisgICAgU1RBVElDX0ZJTEVfRElSRUNUT1JZID0gb3MucGF0aC5qb2lu
KG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdkYXRhJywgJ3JlYmFzZWxpbmVzZXJ2ZXInKQor
CisgICAgZGVmIGRvX0dFVChzZWxmKToKKyAgICAgICAgc2VsZi5faGFuZGxlX3JlcXVlc3QoKQor
CisgICAgZGVmIGRvX1BPU1Qoc2VsZik6CisgICAgICAgIHNlbGYuX2hhbmRsZV9yZXF1ZXN0KCkK
KworICAgIGRlZiBfaGFuZGxlX3JlcXVlc3Qoc2VsZik6CisgICAgICAgICMgUGFyc2UgaW5wdXQu
CisgICAgICAgIGlmICc/JyBpbiBzZWxmLnBhdGg6CisgICAgICAgICAgICBwYXRoLCBxdWVyeV9z
dHJpbmcgPSBzZWxmLnBhdGguc3BsaXQoJz8nLCAxKQorICAgICAgICAgICAgc2VsZi5xdWVyeSA9
IHVybHBhcnNlLnBhcnNlX3FzKHF1ZXJ5X3N0cmluZykKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIHBhdGggPSBzZWxmLnBhdGgKKyAgICAgICAgICAgIHNlbGYucXVlcnkgPSB7fQorICAgICAg
ICBmdW5jX29yX2ZpbGVfbmFtZSA9IHBhdGhbMTpdIG9yICdpbmRleC5odG1sJworCisgICAgICAg
ICMgU2VlIGlmIGEgc3RhdGljIGZpbGUgbWF0Y2hlcy4KKyAgICAgICAgaWYgZnVuY19vcl9maWxl
X25hbWUgaW4gUmViYXNlbGluZUhUVFBSZXF1ZXN0SGFuZGxlci5TVEFUSUNfRklMRV9OQU1FUzoK
KyAgICAgICAgICAgIHNlbGYuX3NlcnZlX3N0YXRpY19maWxlKGZ1bmNfb3JfZmlsZV9uYW1lKQor
ICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBTZWUgaWYgYSBjbGFzcyBtZXRob2QgbWF0
Y2hlcy4KKyAgICAgICAgZnVuY19uYW1lID0gZnVuY19vcl9maWxlX25hbWUucmVwbGFjZSgnLics
ICdfJykKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgZnVuY19uYW1lKToKKyAgICAgICAg
ICAgIHNlbGYuc2VuZF9lcnJvcig0MDQsICdVbmtub3duIGZ1bmN0aW9uICVzJyAlIGZ1bmNfbmFt
ZSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBmdW5jID0gZ2V0YXR0cihzZWxmLCBmdW5j
X25hbWUpCisgICAgICAgIGZ1bmMoKQorCisgICAgZGVmIF9zZXJ2ZV9zdGF0aWNfZmlsZShzZWxm
LCBzdGF0aWNfcGF0aCk6CisgICAgICAgIHNlbGYuX3NlcnZlX2ZpbGUob3MucGF0aC5qb2luKAor
ICAgICAgICAgICAgUmViYXNlbGluZUhUVFBSZXF1ZXN0SGFuZGxlci5TVEFUSUNfRklMRV9ESVJF
Q1RPUlksIHN0YXRpY19wYXRoKSkKKworICAgIGRlZiBxdWl0cXVpdHF1aXQoc2VsZik6CisgICAg
ICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDApCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0Nv
bnRlbnQtdHlwZScsICd0ZXh0L3BsYWluJykKKyAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisg
ICAgICAgIHNlbGYud2ZpbGUud3JpdGUoJ1F1aXQuXG4nKQorCisgICAgICAgICMgU2h1dGRvd24g
aGFzIHRvIGhhcHBlbiBvbiBhbm90aGVyIHRocmVhZCBmcm9tIHRoZSBzZXJ2ZXIncyB0aHJlYWQs
CisgICAgICAgICMgb3RoZXJ3aXNlIHRoZXJlJ3MgYSBkZWFkbG9jaworICAgICAgICB0aHJlYWRp
bmcuVGhyZWFkKHRhcmdldD1sYW1iZGE6IHNlbGYuc2VydmVyLnNodXRkb3duKCkpLnN0YXJ0KCkK
KworICAgIGRlZiBfc2VydmVfZmlsZShzZWxmLCBmaWxlX3BhdGgsIGNhY2hlYWJsZV9zZWNvbmRz
PTApOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZV9wYXRoKToKKyAgICAgICAg
ICAgIHNlbGYuc2VuZF9lcnJvcig0MDQsICdGaWxlIG5vdCBmb3VuZCcpCisgICAgICAgICAgICBy
ZXR1cm4KKyAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihmaWxlX3BhdGgsICdyYicpIGFzIHN0YXRp
Y19maWxlOgorICAgICAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDIwMCkKKyAgICAgICAgICAg
IHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJywgb3MucGF0aC5nZXRzaXplKGZpbGVf
cGF0aCkpCisgICAgICAgICAgICBtaW1lX3R5cGUsIGVuY29kaW5nID0gbWltZXR5cGVzLmd1ZXNz
X3R5cGUoZmlsZV9wYXRoKQorICAgICAgICAgICAgaWYgbWltZV90eXBlOgorICAgICAgICAgICAg
ICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRlbnQtdHlwZScsIG1pbWVfdHlwZSkKKworICAgICAg
ICAgICAgaWYgY2FjaGVhYmxlX3NlY29uZHM6CisgICAgICAgICAgICAgICAgZXhwaXJlc190aW1l
ID0gKGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpICsKKyAgICAgICAgICAgICAgICAgICAgZGF0ZXRp
bWUudGltZWRlbHRhKDAsIGNhY2hlYWJsZV9zZWNvbmRzKSkKKyAgICAgICAgICAgICAgICBleHBp
cmVzX2Zvcm1hdHRlZCA9IGZvcm1hdF9kYXRlX3RpbWUoCisgICAgICAgICAgICAgICAgICAgIHRp
bWUubWt0aW1lKGV4cGlyZXNfdGltZS50aW1ldHVwbGUoKSkpCisgICAgICAgICAgICAgICAgc2Vs
Zi5zZW5kX2hlYWRlcignRXhwaXJlcycsIGV4cGlyZXNfZm9ybWF0dGVkKQorICAgICAgICAgICAg
c2VsZi5lbmRfaGVhZGVycygpCisKKyAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZW9iaihzdGF0
aWNfZmlsZSwgc2VsZi53ZmlsZSkKKworCitjbGFzcyBSZWJhc2VsaW5lU2VydmVyKEFic3RyYWN0
RGVjbGFyYXRpdmVDb21tYW5kKToKKyAgICBuYW1lID0gJ3JlYmFzZWxpbmUtc2VydmVyJworICAg
IGhlbHBfdGV4dCA9IF9fZG9jX18KKyAgICBhcmd1bWVudF9uYW1lcyA9ICdbL3BhdGgvdG8vcmVz
dWx0cy9kaXJlY3RvcnkvXScKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgb3B0
aW9ucyA9IFsKKyAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCctLWh0dHBkLXBvcnQnLCBhY3Rpb249
J3N0b3JlJywgdHlwZT0naW50JywgZGVmYXVsdD04MTI3LCBoZWxwPSdQb3J0IHRvIHVzZSBmb3Ig
dGhlIHRoZSByZWJhc2VsaW5lIEhUVFAgc2VydmVyJyksCisgICAgICAgIF0KKyAgICAgICAgQWJz
dHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQuX19pbml0X18oc2VsZiwgb3B0aW9ucz1vcHRpb25zKQor
CisgICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6CisgICAgICAgIGlm
IGxlbihhcmdzKSAhPSAxOgorICAgICAgICAgICAgcHJpbnQgJ1BhdGggdG8gcmVzdWx0cyBkaXJl
Y3RvcnkgaXMgcmVxdWlyZWQuJworICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgcmVzdWx0
c19kaXJlY3RvcnkgPSBhcmdzWzBdCisKKyAgICAgICAgcHJpbnQgJ1N0YXJ0aW5nIHNlcnZlciBh
dCBodHRwOi8vbG9jYWxob3N0OiVkLycgJSBvcHRpb25zLmh0dHBkX3BvcnQKKyAgICAgICAgcHJp
bnQgKCdVc2UgdGhlICJFeGl0IiBsaW5rIGluIHRoZSBVSSwgaHR0cDovL2xvY2FsaG9zdDolZC8n
ICsKKyAgICAgICAgICAgICdxdWl0cXVpdHF1aXQgb3IgQ3RybC1DIHRvIHN0b3AnKSAlIG9wdGlv
bnMuaHR0cGRfcG9ydAorCisgICAgICAgIGh0dHBkID0gUmViYXNlbGluZUhUVFBTZXJ2ZXIoCisg
ICAgICAgICAgICBodHRwZF9wb3J0PW9wdGlvbnMuaHR0cGRfcG9ydCwKKyAgICAgICAgICAgIHJl
c3VsdHNfZGlyZWN0b3J5PXJlc3VsdHNfZGlyZWN0b3J5KQorICAgICAgICBodHRwZC5zZXJ2ZV9m
b3JldmVyKCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73004</attachid>
            <date>2010-11-04 16:39:47 -0700</date>
            <delta_ts>2010-11-04 17:30:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48892-20101104163945.patch</filename>
            <type>text/plain</type>
            <size>14929</size>
            <attacher name="Mihai Parparita">mihaip</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAwNDk1MmQwNjUzYWI1Y2NmYTQzNmYxMGQ1ZTgyZmQ1MmE0MzdlZDgwLi5lNDMyYTUx
OTkwYzZlZWU2NjM0OWZiYTkwNmUxN2VjN2U4NGVjMTNmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTAtMTEtMDIgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmViYXNlbGluZSBz
ZXJ2ZXI6IGluaXRpYWwgZnJhbWV3b3JrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00ODg5MgorICAgICAgICAKKyAgICAgICAgQWRkcyB0aGUgYmFzaWMg
ZnJhbWV3b3JrIGZvciB0aGUgcmViYXNlbGluZSBzZXJ2ZXIgKGRldGFpbHMgYXQgCisgICAgICAg
IGh0dHA6Ly93ZWJraXQub3JnL2IvNDc3NjEpLiBJbmNsdWRlcyB0aGUgcmViYXNlbGluZS1zZXJ2
ZXIgd2Via2l0LXBhdGNoCisgICAgICAgIGNvbW1hbmQsIHdoaWNoIHN0YXJ0cyBhbiBIVFRQIHNl
cnZlciB0aGF0IGNhbiBzZXJ2ZSBzdGF0aWMgZmlsZXMgb3IKKyAgICAgICAgaW52b2tlIGhhbmRs
ZXIgbWV0aG9kcyBvbiBhIGNsYXNzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29s
L2NvbW1hbmRzL19faW5pdF9fLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9j
b21tYW5kcy9kYXRhL3JlYmFzZWxpbmVzZXJ2ZXIvaW5kZXguaHRtbDogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEvcmViYXNlbGluZXNlcnZlci9t
YWluLmNzczogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRz
L2RhdGEvcmViYXNlbGluZXNlcnZlci9tYWluLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZXNlcnZlci5weTogQWRkZWQuCisKIDIw
MTAtMTEtMDIgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBGaXggYnVpbGQuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvY29tbWFuZHMvX19pbml0X18ucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvY29tbWFuZHMvX19pbml0X18ucHkKaW5kZXggOWJkZWM4ZjU5N2UxNzYzNjM0NGE4MTgzYjEw
M2ExNTBiZjhjOWRlMy4uYTA3MDMyNGZjY2EwYWVhYjdhNmYyYTg4YTJlOWNhYzM3ZDA5YmNjMCAx
MDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL19f
aW5pdF9fLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5k
cy9fX2luaXRfXy5weQpAQCAtMiw0ICsyLDUgQEAKIAogZnJvbSB3ZWJraXRweS50b29sLmNvbW1h
bmRzLnByZXR0eWRpZmYgaW1wb3J0IFByZXR0eURpZmYKIGZyb20gd2Via2l0cHkudG9vbC5jb21t
YW5kcy5yZWJhc2VsaW5lIGltcG9ydCBSZWJhc2VsaW5lCitmcm9tIHdlYmtpdHB5LnRvb2wuY29t
bWFuZHMucmViYXNlbGluZXNlcnZlciBpbXBvcnQgUmViYXNlbGluZVNlcnZlcgogIyBGSVhNRTog
QWRkIHRoZSByZXN0IG9mIHRoZSBjb21tYW5kcyBoZXJlLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEvcmViYXNlbGluZXNlcnZlci9p
bmRleC5odG1sIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2Rh
dGEvcmViYXNlbGluZXNlcnZlci9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2NjdjZDJhZjI3NGQ3
ZTAyZTkyZTNiYTc1OGU3YjdlYTc4NjYyOWEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9yZWJhc2VsaW5lc2VydmVyL2lu
ZGV4Lmh0bWwKQEAgLTAsMCArMSw0MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8IS0tCisgIENvcHly
aWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAKKyAgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAgbWV0OgorICAKKyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgZGlzdHJpYnV0aW9uLgorICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAgCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKy0tPgorPGh0bWw+Cis8aGVhZD4KKyAgPHRpdGxlPkxheW91dCBUZXN0IFJlYmFz
ZWxpbmUgU2VydmVyPC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvbWFp
bi5jc3MiIHR5cGU9InRleHQvY3NzIj4KKyAgPHNjcmlwdCBzcmM9Ii9tYWluLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5IGNsYXNzPSJsb2FkaW5nIj4KKyAgICA8YSBocmVmPSIvcXVpdHF1
aXRxdWl0Ij5FeGl0PC9hPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEvcmViYXNlbGluZXNlcnZlci9t
YWluLmNzcyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kYXRh
L3JlYmFzZWxpbmVzZXJ2ZXIvbWFpbi5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzViZDZhNWFkMWM5ZjliYjNi
NTgxOTYzMjU2ODE1YWNlYTBlMTdiMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kYXRhL3JlYmFzZWxpbmVzZXJ2ZXIvbWFpbi5j
c3MKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKK2JvZHkgeworICBmb250LXNpemU6IDEycHg7CisgIGZvbnQtZmFt
aWx5OiBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOworICBwYWRkaW5nOiAwOworICBtYXJn
aW46IDA7Cit9CisKKy5sb2FkaW5nIHsKKyAgb3BhY2l0eTogMC41OworfQorCitkaXYgeworICBt
YXJnaW46IDA7Cit9CisKK2EsIC5saW5rIHsKKyAgY29sb3I6ICNhYWY7CisgIHRleHQtZGVjb3Jh
dGlvbjogdW5kZXJsaW5lOworICBjdXJzb3I6IHBvaW50ZXI7ICAgICAgCit9CisKKy5saW5rLnNl
bGVjdGVkIHsKKyAgY29sb3I6ICNmZmY7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICB0ZXh0LWRl
Y29yYXRpb246IG5vbmU7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9yZWJhc2VsaW5lc2VydmVyL21haW4uanMgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9yZWJhc2VsaW5lc2VydmVy
L21haW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTVmMTlhNGYzZTI5NzA5Y2UzZjEzZGQyZTlkOGQxMTc0ZGUy
ZjQxYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9jb21tYW5kcy9kYXRhL3JlYmFzZWxpbmVzZXJ2ZXIvbWFpbi5qcwpAQCAtMCwwICsxLDM2IEBA
CisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
ZnVuY3Rpb24gbWFpbigpCit7CisgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCds
b2FkaW5nJyk7Cit9CisKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVk
JywgbWFpbik7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
Y29tbWFuZHMvcmViYXNlbGluZXNlcnZlci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdG9vbC9jb21tYW5kcy9yZWJhc2VsaW5lc2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiOThjMmVk
MWJjNTc2MWU3NWY4NzJiYjVkZjBiNDZhNWJkNzM5MjAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZXNlcnZlci5w
eQpAQCAtMCwwICsxLDE1NiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
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
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIlN0YXJ0cyBhIGxvY2Fs
IEhUVFAgc2VydmVyIHdoaWNoIGRpc3BsYXlzIGxheW91dCB0ZXN0IGZhaWx1cmVzIChnaXZlbiBh
IHRlc3QKK3Jlc3VsdHMgZGlyZWN0b3J5KSwgcHJvdmlkZXMgY29tcGFyaXNvbnMgb2YgZXhwZWN0
ZWQgYW5kIGFjdHVhbCByZXN1bHRzIChib3RoCitpbWFnZXMgYW5kIHRleHQpIGFuZCBhbGxvd3Mg
b25lLWNsaWNrIHJlYmFzZWxpbmluZyBvZiB0ZXN0cy4iIiIKKworaW1wb3J0IGNvZGVjcworaW1w
b3J0IGRhdGV0aW1lCitpbXBvcnQgbWltZXR5cGVzCitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRo
CitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdGltZQoraW1wb3J0IHVy
bHBhcnNlCitpbXBvcnQgQmFzZUhUVFBTZXJ2ZXIKKworZnJvbSBvcHRwYXJzZSBpbXBvcnQgbWFr
ZV9vcHRpb24KK2Zyb20gd3NnaXJlZi5oYW5kbGVycyBpbXBvcnQgZm9ybWF0X2RhdGVfdGltZQor
Citmcm9tIHdlYmtpdHB5LnRvb2wubXVsdGljb21tYW5kdG9vbCBpbXBvcnQgQWJzdHJhY3REZWNs
YXJhdGl2ZUNvbW1hbmQKKworCitjbGFzcyBSZWJhc2VsaW5lSFRUUFNlcnZlcihCYXNlSFRUUFNl
cnZlci5IVFRQU2VydmVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaHR0cGRfcG9ydCwgcmVz
dWx0c19kaXJlY3RvcnkpOgorICAgICAgICBCYXNlSFRUUFNlcnZlci5IVFRQU2VydmVyLl9faW5p
dF9fKHNlbGYsICgiIiwgaHR0cGRfcG9ydCksIFJlYmFzZWxpbmVIVFRQUmVxdWVzdEhhbmRsZXIp
CisgICAgICAgIHNlbGYucmVzdWx0c19kaXJlY3RvcnkgPSByZXN1bHRzX2RpcmVjdG9yeQorCisK
K2NsYXNzIFJlYmFzZWxpbmVIVFRQUmVxdWVzdEhhbmRsZXIoQmFzZUhUVFBTZXJ2ZXIuQmFzZUhU
VFBSZXF1ZXN0SGFuZGxlcik6CisgICAgU1RBVElDX0ZJTEVfTkFNRVMgPSBmcm96ZW5zZXQoWwor
ICAgICAgICAiaW5kZXguaHRtbCIsCisgICAgICAgICJtYWluLmpzIiwKKyAgICAgICAgIm1haW4u
Y3NzIiwKKyAgICBdKQorCisgICAgU1RBVElDX0ZJTEVfRElSRUNUT1JZID0gb3MucGF0aC5qb2lu
KAorICAgICAgICBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAiZGF0YSIsICJyZWJhc2VsaW5l
c2VydmVyIikKKworICAgIGRlZiBkb19HRVQoc2VsZik6CisgICAgICAgIHNlbGYuX2hhbmRsZV9y
ZXF1ZXN0KCkKKworICAgIGRlZiBkb19QT1NUKHNlbGYpOgorICAgICAgICBzZWxmLl9oYW5kbGVf
cmVxdWVzdCgpCisKKyAgICBkZWYgX2hhbmRsZV9yZXF1ZXN0KHNlbGYpOgorICAgICAgICAjIFBh
cnNlIGlucHV0LgorICAgICAgICBpZiAiPyIgaW4gc2VsZi5wYXRoOgorICAgICAgICAgICAgcGF0
aCwgcXVlcnlfc3RyaW5nID0gc2VsZi5wYXRoLnNwbGl0KCI/IiwgMSkKKyAgICAgICAgICAgIHNl
bGYucXVlcnkgPSB1cmxwYXJzZS5wYXJzZV9xcyhxdWVyeV9zdHJpbmcpCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBwYXRoID0gc2VsZi5wYXRoCisgICAgICAgICAgICBzZWxmLnF1ZXJ5ID0g
e30KKyAgICAgICAgZnVuY3Rpb25fb3JfZmlsZV9uYW1lID0gcGF0aFsxOl0gb3IgImluZGV4Lmh0
bWwiCisKKyAgICAgICAgIyBTZWUgaWYgYSBzdGF0aWMgZmlsZSBtYXRjaGVzLgorICAgICAgICBp
ZiBmdW5jdGlvbl9vcl9maWxlX25hbWUgaW4gUmViYXNlbGluZUhUVFBSZXF1ZXN0SGFuZGxlci5T
VEFUSUNfRklMRV9OQU1FUzoKKyAgICAgICAgICAgIHNlbGYuX3NlcnZlX3N0YXRpY19maWxlKGZ1
bmN0aW9uX29yX2ZpbGVfbmFtZSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgU2Vl
IGlmIGEgY2xhc3MgbWV0aG9kIG1hdGNoZXMuCisgICAgICAgIGZ1bmN0aW9uX25hbWUgPSBmdW5j
dGlvbl9vcl9maWxlX25hbWUucmVwbGFjZSgiLiIsICJfIikKKyAgICAgICAgaWYgbm90IGhhc2F0
dHIoc2VsZiwgZnVuY3Rpb25fbmFtZSk6CisgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNDA0
LCAiVW5rbm93biBmdW5jdGlvbiAlcyIgJSBmdW5jdGlvbl9uYW1lKQorICAgICAgICAgICAgcmV0
dXJuCisgICAgICAgIGlmIGZ1bmN0aW9uX25hbWVbMF0gPT0gIl8iOgorICAgICAgICAgICAgc2Vs
Zi5zZW5kX2Vycm9yKAorICAgICAgICAgICAgICAgIDQwMSwgIk5vdCBhbGxvd2VkIHRvIGludm9r
ZSBwcml2YXRlIG9yIHByb3RlY3RlZCBtZXRob2RzIikKKyAgICAgICAgICAgIHJldHVybgorICAg
ICAgICBmdW5jdGlvbiA9IGdldGF0dHIoc2VsZiwgZnVuY3Rpb25fbmFtZSkKKyAgICAgICAgZnVu
Y3Rpb24oKQorCisgICAgZGVmIF9zZXJ2ZV9zdGF0aWNfZmlsZShzZWxmLCBzdGF0aWNfcGF0aCk6
CisgICAgICAgIHNlbGYuX3NlcnZlX2ZpbGUob3MucGF0aC5qb2luKAorICAgICAgICAgICAgUmVi
YXNlbGluZUhUVFBSZXF1ZXN0SGFuZGxlci5TVEFUSUNfRklMRV9ESVJFQ1RPUlksIHN0YXRpY19w
YXRoKSkKKworICAgIGRlZiBxdWl0cXVpdHF1aXQoc2VsZik6CisgICAgICAgIHNlbGYuc2VuZF9y
ZXNwb25zZSgyMDApCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtdHlwZSIsICJ0
ZXh0L3BsYWluIikKKyAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisgICAgICAgIHNlbGYud2Zp
bGUud3JpdGUoIlF1aXQuXG4iKQorCisgICAgICAgICMgU2h1dGRvd24gaGFzIHRvIGhhcHBlbiBv
biBhbm90aGVyIHRocmVhZCBmcm9tIHRoZSBzZXJ2ZXIncyB0aHJlYWQsCisgICAgICAgICMgb3Ro
ZXJ3aXNlIHRoZXJlJ3MgYSBkZWFkbG9jaworICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdl
dD1sYW1iZGE6IHNlbGYuc2VydmVyLnNodXRkb3duKCkpLnN0YXJ0KCkKKworICAgIGRlZiBfc2Vy
dmVfZmlsZShzZWxmLCBmaWxlX3BhdGgsIGNhY2hlYWJsZV9zZWNvbmRzPTApOgorICAgICAgICBp
ZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZV9wYXRoKToKKyAgICAgICAgICAgIHNlbGYuc2VuZF9l
cnJvcig0MDQsICJGaWxlIG5vdCBmb3VuZCIpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAg
d2l0aCBjb2RlY3Mub3BlbihmaWxlX3BhdGgsICJyYiIpIGFzIHN0YXRpY19maWxlOgorICAgICAg
ICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDIwMCkKKyAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFk
ZXIoIkNvbnRlbnQtTGVuZ3RoIiwgb3MucGF0aC5nZXRzaXplKGZpbGVfcGF0aCkpCisgICAgICAg
ICAgICBtaW1lX3R5cGUsIGVuY29kaW5nID0gbWltZXR5cGVzLmd1ZXNzX3R5cGUoZmlsZV9wYXRo
KQorICAgICAgICAgICAgaWYgbWltZV90eXBlOgorICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9o
ZWFkZXIoIkNvbnRlbnQtdHlwZSIsIG1pbWVfdHlwZSkKKworICAgICAgICAgICAgaWYgY2FjaGVh
YmxlX3NlY29uZHM6CisgICAgICAgICAgICAgICAgZXhwaXJlc190aW1lID0gKGRhdGV0aW1lLmRh
dGV0aW1lLm5vdygpICsKKyAgICAgICAgICAgICAgICAgICAgZGF0ZXRpbWUudGltZWRlbHRhKDAs
IGNhY2hlYWJsZV9zZWNvbmRzKSkKKyAgICAgICAgICAgICAgICBleHBpcmVzX2Zvcm1hdHRlZCA9
IGZvcm1hdF9kYXRlX3RpbWUoCisgICAgICAgICAgICAgICAgICAgIHRpbWUubWt0aW1lKGV4cGly
ZXNfdGltZS50aW1ldHVwbGUoKSkpCisgICAgICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigi
RXhwaXJlcyIsIGV4cGlyZXNfZm9ybWF0dGVkKQorICAgICAgICAgICAgc2VsZi5lbmRfaGVhZGVy
cygpCisKKyAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZW9iaihzdGF0aWNfZmlsZSwgc2VsZi53
ZmlsZSkKKworCitjbGFzcyBSZWJhc2VsaW5lU2VydmVyKEFic3RyYWN0RGVjbGFyYXRpdmVDb21t
YW5kKToKKyAgICBuYW1lID0gInJlYmFzZWxpbmUtc2VydmVyIgorICAgIGhlbHBfdGV4dCA9IF9f
ZG9jX18KKyAgICBhcmd1bWVudF9uYW1lcyA9ICIvcGF0aC90by9yZXN1bHRzL2RpcmVjdG9yeSIK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgb3B0aW9ucyA9IFsKKyAgICAgICAg
ICAgIG1ha2Vfb3B0aW9uKCItLWh0dHBkLXBvcnQiLCBhY3Rpb249InN0b3JlIiwgdHlwZT0iaW50
IiwgZGVmYXVsdD04MTI3LCBoZWxwPSJQb3J0IHRvIHVzZSBmb3IgdGhlIHRoZSByZWJhc2VsaW5l
IEhUVFAgc2VydmVyIiksCisgICAgICAgIF0KKyAgICAgICAgQWJzdHJhY3REZWNsYXJhdGl2ZUNv
bW1hbmQuX19pbml0X18oc2VsZiwgb3B0aW9ucz1vcHRpb25zKQorCisgICAgZGVmIGV4ZWN1dGUo
c2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6CisgICAgICAgIHJlc3VsdHNfZGlyZWN0b3J5ID0g
YXJnc1swXQorCisgICAgICAgIHByaW50ICJTdGFydGluZyBzZXJ2ZXIgYXQgaHR0cDovL2xvY2Fs
aG9zdDolZC8iICUgb3B0aW9ucy5odHRwZF9wb3J0CisgICAgICAgIHByaW50ICgiVXNlIHRoZSAn
RXhpdCcgbGluayBpbiB0aGUgVUksIGh0dHA6Ly9sb2NhbGhvc3Q6JWQvIiArCisgICAgICAgICAg
ICAicXVpdHF1aXRxdWl0IG9yIEN0cmwtQyB0byBzdG9wIikgJSBvcHRpb25zLmh0dHBkX3BvcnQK
KworICAgICAgICBodHRwZCA9IFJlYmFzZWxpbmVIVFRQU2VydmVyKAorICAgICAgICAgICAgaHR0
cGRfcG9ydD1vcHRpb25zLmh0dHBkX3BvcnQsCisgICAgICAgICAgICByZXN1bHRzX2RpcmVjdG9y
eT1yZXN1bHRzX2RpcmVjdG9yeSkKKyAgICAgICAgaHR0cGQuc2VydmVfZm9yZXZlcigpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>