<?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>43970</bug_id>
          
          <creation_ts>2010-08-13 07:11:37 -0700</creation_ts>
          <short_desc>Web Inspector: upstream frontend-side WebSocket transport.</short_desc>
          <delta_ts>2010-08-16 09:46:58 -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>Web Inspector (Deprecated)</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>43988</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>abarth</cc>
    
    <cc>bweinstein</cc>
    
    <cc>eric</cc>
    
    <cc>jamey.hicks</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>264351</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-13 07:11:37 -0700</bug_when>
    <thetext>Chromium already has an alternate WebSocket-based communication channel with the backend. Upstreaming it in this change. We will agree on the URI of the remote service as the protocol matures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264352</commentid>
    <comment_count>1</comment_count>
      <attachid>64338</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-13 07:21:41 -0700</bug_when>
    <thetext>Created attachment 64338
[PATCH] Proposed change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264354</commentid>
    <comment_count>2</comment_count>
      <attachid>64338</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-08-13 07:29:59 -0700</bug_when>
    <thetext>Comment on attachment 64338
[PATCH] Proposed change.

WebCore/inspector/front-end/inspector.js:434
 +  var queryParams = window.location.search;
Please wrap it into an anonymous function to avoid cluttering global context.

WebCore/inspector/front-end/inspector.js:445
 +      WebInspector.socket.onmessage = function(message) { WebInspector_syncDispatch(message.data); }
Why not do this unconditionally after WebInspector has been loaded?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264415</commentid>
    <comment_count>3</comment_count>
      <attachid>64338</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-08-13 09:55:54 -0700</bug_when>
    <thetext>Comment on attachment 64338
[PATCH] Proposed change.

&gt; +++ b/WebCore/inspector/front-end/inspector.js
&gt; +    WebInspector.socket.onmessage = function(message) { WebInspector_syncDispatch(message.data); }
&gt; +WebInspector_syncDispatch = function(message)

What is the reason this uses an &quot;_&quot; and not &quot;.&quot;? Is it so the backend can access
it directly off of the global scope without requiring messy property lookups?

&gt;  v8::Handle&lt;v8::Value&gt; dispatchFunction = frameContext-&gt;Global()-&gt;Get(v8::String::New(&quot;WebInspector_syncDispatch&quot;));

If so, it could use a comment in the code, along the lines of:

  &quot;// This function is purposely put into the global scope for easy access.&quot;


&gt; +    WebInspector.socket.onopen = function() {
&gt; +        ...
&gt; +        WebInspector.socketOpened = true;
&gt; +        if (WebInspector.loadedDone)
&gt; +            WebInspector.doLoadedDone();
&gt; +    };
&gt; +}
&gt; +
&gt;  WebInspector.loaded = function()
&gt;  {
&gt; +    if (&quot;page&quot; in WebInspector.queryParamsObject) {
&gt; +        WebInspector.loadedDone = true;
&gt; +        if (WebInspector.socketOpened)
&gt; +            WebInspector.doLoadedDone();
&gt; +        return;
&gt; +    }
&gt; +    WebInspector.doLoadedDone();
&gt; +}

If I understand this correctly, this could potentially call doLoadedDone()
twice if WebInspector.socket.onopen gets called before WebInspector.loaded
gets called. Is that realistic? I would have thought both of the &quot;if&quot;
statements above would be exclusive, so if (!...).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264821</commentid>
    <comment_count>4</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-15 06:15:21 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 64338 [details])
&gt; WebCore/inspector/front-end/inspector.js:434
&gt;  +  var queryParams = window.location.search;
&gt; Please wrap it into an anonymous function to avoid cluttering global context.
&gt; 

Done.

&gt; WebCore/inspector/front-end/inspector.js:445
&gt;  +      WebInspector.socket.onmessage = function(message) { WebInspector_syncDispatch(message.data); }
&gt; Why not do this unconditionally after WebInspector has been loaded?

Done. Was not feasible before, but now communication starts post-load, so should be fine.

(In reply to comment #3)

&gt; What is the reason this uses an &quot;_&quot; and not &quot;.&quot;? Is it so the backend can access
&gt; it directly off of the global scope without requiring messy property lookups?
&gt; If so, it could use a comment in the code, along the lines of:
&gt; 
&gt;   &quot;// This function is purposely put into the global scope for easy access.&quot;

Done.
&gt; 
&gt; If I understand this correctly, this could potentially call doLoadedDone()
&gt; twice if WebInspector.socket.onopen gets called before WebInspector.loaded
&gt; gets called. Is that realistic? I would have thought both of the &quot;if&quot;
&gt; statements above would be exclusive, so if (!...).

The two flags (loadedDone and socketOpened) were supposed to guarantee single invocation. But given the above comments, this complexity goes away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264822</commentid>
    <comment_count>5</comment_count>
      <attachid>64447</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-15 06:18:40 -0700</bug_when>
    <thetext>Created attachment 64447
[PATCH] Review comments addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264844</commentid>
    <comment_count>6</comment_count>
      <attachid>64447</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-08-15 11:05:46 -0700</bug_when>
    <thetext>Comment on attachment 64447
[PATCH] Review comments addressed.

&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
&gt; +        Web Inspector: upstream frontend-side WebSocket transport.
&gt; +        Chromium already has an alternate WebSocket-based communication channel with
&gt; +        the backend. Upstreaming it in this change. We will agree on the URI
&gt; +        of the remote service as the protocol matures.
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=43970

NIT: I should have commented on this last iteration. This is not the
usual formatting? &quot;Title \n Bug \n \n Description&quot; is much easier to read.


&gt; +function parseQueryParameters()
&gt; +{
&gt; + ...
&gt; +}
&gt; +WebInspector.queryParamsObject = parseQueryParameters();

Now this just puts the function name &quot;parseQueryParameters&quot;
in the global namespace. An anonymous function might work
best because right now the function is only used once. There
are a number of choices, but I don&apos;t think this addressed
Yury&apos;s concern.


&gt; +function installWebSocketTransport()
&gt; +{
&gt; +    WebInspector.socket = new WebSocket(&quot;ws://&quot; + window.location.host + &quot;/devtools/page/&quot; + WebInspector.queryParamsObject.page);
&gt; +    WebInspector.socket.onmessage = function(message) { WebInspector_syncDispatch(message.data); }
&gt; +    WebInspector.socket.onerror = function(error) { console.err(error); }

I agree with the console.err(). It might also be worth a WebInspector.log
to warn the user an attempt was made at a connection and that attempt
failed. Currently it looks like there would be no user indication.


&gt; +    WebInspector.socket.onopen = function() {
&gt; +        ...
&gt; +    };

NIT: Semicolon not needed here. I think we should add this as a style rule,
to not add these. I&apos;m guilty of it myself all the time too.


&gt; +//This function is purposely put into the global scope for easy access.

NIT: Missing space. &quot;// This...&quot;


&gt; +WebInspector_syncDispatch = function(message)
&gt; +{
&gt; +    ...
&gt; +};

NIT: Semicolon not needed.


Looks good to me, just I don&apos;t think you completely
addressed Yury&apos;s comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264854</commentid>
    <comment_count>7</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-15 11:26:31 -0700</bug_when>
    <thetext>Joe, thanks for the thorough review (as usually).

&gt; NIT: I should have commented on this last iteration. This is not the
&gt; usual formatting? &quot;Title \n Bug \n \n Description&quot; is much easier to read.
&gt; 

Done. Ok, I now glue Title and Bug with no \n\n and even that is not enough ?!?!

&gt; Now this just puts the function name &quot;parseQueryParameters&quot;
&gt; in the global namespace. An anonymous function might work
&gt; best because right now the function is only used once. There
&gt; are a number of choices, but I don&apos;t think this addressed
&gt; Yury&apos;s concern.
&gt; 

I know. It is just that we never practiced anonymous closures for hiding functions in WebKit (see preloadImages). But if everyone agrees on the practice, I am happy to start using it. Migrated preloadImages as well.

&gt; 
&gt; I agree with the console.err(). It might also be worth a WebInspector.log
&gt; to warn the user an attempt was made at a connection and that attempt
&gt; failed. Currently it looks like there would be no user indication.
&gt; 

We will need to wire complete error handling to the new protocol. We will need to consider ui indication for it (such as connection indicator or something).

&gt; NIT: Semicolon not needed here. I think we should add this as a style rule,
&gt; to not add these. I&apos;m guilty of it myself all the time too.
&gt; 

Done.

&gt; NIT: Missing space. &quot;// This...&quot;
&gt; 

Done.

&gt; NIT: Semicolon not needed.
&gt; 

Done.

&gt; 
&gt; Looks good to me, just I don&apos;t think you completely
&gt; addressed Yury&apos;s comment.

Will upload new one shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264855</commentid>
    <comment_count>8</comment_count>
      <attachid>64449</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-15 11:28:14 -0700</bug_when>
    <thetext>Created attachment 64449
[PATCH] Proposed change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264856</commentid>
    <comment_count>9</comment_count>
      <attachid>64449</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-15 11:34:40 -0700</bug_when>
    <thetext>Comment on attachment 64449
[PATCH] Proposed change.

Self-review notes: 

inspector.js:430
&gt; (function parseQueryParameters()
&gt;  431 {

This thing does not work unless I put semicolon after

WebInspector.PlatformFlavor = {
    ...
    MacSnowLeopard: &quot;mac-snowleopard&quot;
};</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264857</commentid>
    <comment_count>10</comment_count>
      <attachid>64450</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-15 11:35:31 -0700</bug_when>
    <thetext>Created attachment 64450
[PATCH] Proposed change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264866</commentid>
    <comment_count>11</comment_count>
      <attachid>64450</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-08-15 12:55:02 -0700</bug_when>
    <thetext>Comment on attachment 64450
[PATCH] Proposed change.

&gt; &gt; NIT: I should have commented on this last iteration. This is not the
&gt; &gt; usual formatting? &quot;Title \n Bug \n \n Description&quot; is much easier to read.
&gt; &gt; 
&gt; 
&gt; Done. Ok, I now glue Title and Bug with no \n\n and even that is not enough ?!?!

This is perfect. This is how I&apos;d say 90% of ChangeLogs are formatted.
And its what `prepare-ChangeLog`encourages.

In the past, you have been putting an extra line between the title and
bug link. The `prepare-ChangeLog` script does not, so I try and keep
consistent with that. I commented on how you did it in the past =),
but I remember Tim saying he liked your way better. Either way is
fine, but I think the description should really be separate from the
title/description.


&gt; I know. It is just that we never practiced anonymous closures for
&gt; hiding functions in WebKit (see preloadImages). But if everyone
&gt; agrees on the practice, I am happy to start using it. Migrated
&gt; preloadImages as well.

True. I think there is only a few usages. I prefer them. I like keeping
the global scope clean, and not storing a reference to 1-off functions.

I had one final thought! parseQueryParameters should probably
use window.decodeURIComponent for pair[1]!


&gt; We will need to wire complete error handling to the new protocol.
&gt; We will need to consider ui indication for it (such as connection indicator
&gt; or something).

Gotcha. If you think its appropriate, please file a follow-up bug. Or, just
keep it in mind as I&apos;m sure it will be addressed later.

Thanks for addressing the comments. r=me

-------------

&gt; This thing does not work unless I put semicolon after
&gt; 
&gt; WebInspector.PlatformFlavor = {
&gt;     ...
&gt;     MacSnowLeopard: &quot;mac-snowleopard&quot;
&gt; };

Interesting. How about this for the semicolon rule:

  Semicolons SHOULD be used for object literals:

    var obj = { ... };
    some.obj = {
      ...
    };

  But SHOULD NOT be used for closing scopes like
  functions or anonymous scopes (which I don&apos;t think
  we use at all currently).

Let me know if that misses anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265035</commentid>
    <comment_count>12</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-16 05:21:25 -0700</bug_when>
    <thetext>&gt;   Semicolons SHOULD be used for object literals:
&gt; 
&gt;     var obj = { ... };
&gt;     some.obj = {
&gt;       ...
&gt;     };
&gt; 
&gt;   But SHOULD NOT be used for closing scopes like
&gt;   functions or anonymous scopes (which I don&apos;t think
&gt;   we use at all currently).
&gt; 
&gt; Let me know if that misses anything.

That would be a nice rule to follow (and is in fact standard to Google), but WebInspector traditionally did not set semicolon after assigning to the prototype. Time to change the tradition?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265036</commentid>
    <comment_count>13</comment_count>
      <attachid>64450</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-16 05:24:31 -0700</bug_when>
    <thetext>Comment on attachment 64450
[PATCH] Proposed change.

Clearing flags on attachment: 64450

Committed r65415: &lt;http://trac.webkit.org/changeset/65415&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265037</commentid>
    <comment_count>14</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-16 05:24:55 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265052</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-16 06:03:29 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/65415 might have broken Qt Linux Release
The following changes are on the blame list:
http://trac.webkit.org/changeset/65414
http://trac.webkit.org/changeset/65415</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265148</commentid>
    <comment_count>16</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-08-16 09:46:58 -0700</bug_when>
    <thetext>&gt; That would be a nice rule to follow (and is in fact standard to Google), but
&gt; WebInspector traditionally did not set semicolon after assigning to the
&gt; prototype. Time to change the tradition?

You&apos;re right. I hate special cases but I like tradition on this one.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64338</attachid>
            <date>2010-08-13 07:21:41 -0700</date>
            <delta_ts>2010-08-15 06:18:40 -0700</delta_ts>
            <desc>[PATCH] Proposed change.</desc>
            <filename>ws_upstream</filename>
            <type>text/plain</type>
            <size>8788</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Mzk4ZDMxNi4uOThhNmRlZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwyMyBAQAogMjAxMC0wOC0xMyAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiB1cHN0cmVhbSBmcm9udGVuZC1zaWRl
IFdlYlNvY2tldCB0cmFuc3BvcnQuCisgICAgICAgIENocm9taXVtIGFscmVhZHkgaGFzIGFuIGFs
dGVybmF0ZSBXZWJTb2NrZXQtYmFzZWQgY29tbXVuaWNhdGlvbiBjaGFubmVsIHdpdGgKKyAgICAg
ICAgdGhlIGJhY2tlbmQuIFVwc3RyZWFtaW5nIGl0IGluIHRoaXMgY2hhbmdlLiBXZSB3aWxsIGFn
cmVlIG9uIHRoZSBVUkkKKyAgICAgICAgb2YgdGhlIHJlbW90ZSBzZXJ2aWNlIGFzIHRoZSBwcm90
b2NvbCBtYXR1cmVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDM5NzAKKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpz
OgorICAgICAgICAoLldlYkluc3BlY3Rvci5zb2NrZXQub25tZXNzYWdlKToKKyAgICAgICAgKC5X
ZWJJbnNwZWN0b3Iuc29ja2V0Lm9uZXJyb3IpOgorICAgICAgICAoLldlYkluc3BlY3Rvci5zb2Nr
ZXQub25vcGVuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5sb2FkZWQpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLmRvTG9hZGVkRG9uZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Jfc3luY0Rpc3Bh
dGNoKToKKworMjAxMC0wOC0xMyAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9y
Zz4KKwogICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgogCiAgICAgICAgIFdl
YiBJbnNwZWN0b3I6IHJlbmFtZSBJbnNwZWN0b3JWYWx1ZTo6cHVzaCBhbmQgc2V0IHRvCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwppbmRleCBjZjVlZGEzLi4xYzgxOTAz
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTQyOSw4ICs0
MjksNDMgQEAgV2ViSW5zcGVjdG9yLlBsYXRmb3JtRmxhdm9yID0gewogICAgIE1hY1Nub3dMZW9w
YXJkOiAibWFjLXNub3dsZW9wYXJkIgogfQogCitXZWJJbnNwZWN0b3IucXVlcnlQYXJhbXNPYmpl
Y3QgPSB7fTsKKwordmFyIHF1ZXJ5UGFyYW1zID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDsKK2lm
IChxdWVyeVBhcmFtcykgeworICAgIHZhciBwYXJhbXMgPSBxdWVyeVBhcmFtcy5zdWJzdHJpbmco
MSkuc3BsaXQoIiYiKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7ICsr
aSkgeworICAgICAgICB2YXIgcGFpciA9IHBhcmFtc1tpXS5zcGxpdCgiPSIpOworICAgICAgICBX
ZWJJbnNwZWN0b3IucXVlcnlQYXJhbXNPYmplY3RbcGFpclswXV0gPSBwYWlyWzFdOworICAgIH0K
K30KKworaWYgKCJwYWdlIiBpbiBXZWJJbnNwZWN0b3IucXVlcnlQYXJhbXNPYmplY3QpIHsKKyAg
ICBXZWJJbnNwZWN0b3Iuc29ja2V0ID0gbmV3IFdlYlNvY2tldCgid3M6Ly8iICsgd2luZG93Lmxv
Y2F0aW9uLmhvc3QgKyAiL2RldnRvb2xzL3BhZ2UvIiArIFdlYkluc3BlY3Rvci5xdWVyeVBhcmFt
c09iamVjdC5wYWdlKTsKKyAgICBXZWJJbnNwZWN0b3Iuc29ja2V0Lm9ubWVzc2FnZSA9IGZ1bmN0
aW9uKG1lc3NhZ2UpIHsgV2ViSW5zcGVjdG9yX3N5bmNEaXNwYXRjaChtZXNzYWdlLmRhdGEpOyB9
CisgICAgV2ViSW5zcGVjdG9yLnNvY2tldC5vbmVycm9yID0gZnVuY3Rpb24oZXJyb3IpIHsgY29u
c29sZS5lcnIoZXJyb3IpOyB9CisgICAgV2ViSW5zcGVjdG9yLnNvY2tldC5vbm9wZW4gPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LnNlbmRNZXNzYWdlVG9CYWNr
ZW5kID0gV2ViSW5zcGVjdG9yLnNvY2tldC5zZW5kLmJpbmQoV2ViSW5zcGVjdG9yLnNvY2tldCk7
CisgICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5sb2FkZWQgPSBXZWJJbnNwZWN0b3Iuc29j
a2V0LnNlbmQuYmluZChXZWJJbnNwZWN0b3Iuc29ja2V0LCAibG9hZGVkIik7CisgICAgICAgIFdl
Ykluc3BlY3Rvci5zb2NrZXRPcGVuZWQgPSB0cnVlOworICAgICAgICBpZiAoV2ViSW5zcGVjdG9y
LmxvYWRlZERvbmUpCisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZG9Mb2FkZWREb25lKCk7Cisg
ICAgfTsKK30KKwogV2ViSW5zcGVjdG9yLmxvYWRlZCA9IGZ1bmN0aW9uKCkKIHsKKyAgICBpZiAo
InBhZ2UiIGluIFdlYkluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVjdCkgeworICAgICAgICBXZWJJ
bnNwZWN0b3IubG9hZGVkRG9uZSA9IHRydWU7CisgICAgICAgIGlmIChXZWJJbnNwZWN0b3Iuc29j
a2V0T3BlbmVkKQorICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRvTG9hZGVkRG9uZSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIFdlYkluc3BlY3Rvci5kb0xvYWRlZERvbmUoKTsKK30K
KworV2ViSW5zcGVjdG9yLmRvTG9hZGVkRG9uZSA9IGZ1bmN0aW9uKCkKK3sKICAgICBJbnNwZWN0
b3JCYWNrZW5kLnNldEluamVjdGVkU2NyaXB0U291cmNlKCIoIiArIGluamVjdGVkU2NyaXB0Q29u
c3RydWN0b3IgKyAiKTsiKTsKIAogICAgIHZhciBwbGF0Zm9ybSA9IFdlYkluc3BlY3Rvci5wbGF0
Zm9ybTsKQEAgLTU4MSw2ICs2MTYsMTQgQEAgV2ViSW5zcGVjdG9yLmRpc3BhdGNoID0gZnVuY3Rp
b24oKSB7CiAgICAgc2V0VGltZW91dChkZWxheURpc3BhdGNoLCAwKTsKIH0KIAorV2ViSW5zcGVj
dG9yX3N5bmNEaXNwYXRjaCA9IGZ1bmN0aW9uKG1lc3NhZ2UpCit7CisgICAgdmFyIGFyZ3MgPSBK
U09OLnBhcnNlKG1lc3NhZ2UpOworICAgIHZhciBtZXRob2ROYW1lID0gYXJnc1swXTsKKyAgICB2
YXIgcGFyYW1ldGVycyA9IGFyZ3Muc2xpY2UoMSk7CisgICAgV2ViSW5zcGVjdG9yW21ldGhvZE5h
bWVdLmFwcGx5KFdlYkluc3BlY3RvciwgcGFyYW1ldGVycyk7Cit9OworCiBXZWJJbnNwZWN0b3Iu
ZGlzcGF0Y2hNZXNzYWdlRnJvbUJhY2tlbmQgPSBmdW5jdGlvbihhcmd1bWVudHMpCiB7CiAgICAg
V2ViSW5zcGVjdG9yLmRpc3BhdGNoLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCAyYWQxMzZiLi41NTkxMGNiIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAx
MC0wOC0xMyAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiB1
cHN0cmVhbSBmcm9udGVuZC1zaWRlIFdlYlNvY2tldCB0cmFuc3BvcnQuCisgICAgICAgIENocm9t
aXVtIGFscmVhZHkgaGFzIGFuIGFsdGVybmF0ZSBXZWJTb2NrZXQtYmFzZWQgY29tbXVuaWNhdGlv
biBjaGFubmVsIHdpdGgKKyAgICAgICAgdGhlIGJhY2tlbmQuIFVwc3RyZWFtaW5nIGl0IGluIHRo
aXMgY2hhbmdlLiBXZSB3aWxsIGFncmVlIG9uIHRoZSBVUkkKKyAgICAgICAgb2YgdGhlIHJlbW90
ZSBzZXJ2aWNlIGFzIHRoZSBwcm90b2NvbCBtYXR1cmVzLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM5NzAKKworICAgICAgICAqIHNyYy9XZWJEZXZU
b29sc0Zyb250ZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRl
bmRJbXBsOjpkaXNwYXRjaE9uSW5zcGVjdG9yRnJvbnRlbmQpOgorICAgICAgICAqIHNyYy9qcy9E
ZXZUb29scy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5sb2FkZWQpOgorICAgICAgICAoZGV2
dG9vbHMuZG9tQ29udGVudExvYWRlZCk6CisKIDIwMTAtMDgtMTIgIFl1cnkgU2VtaWtoYXRza3kg
IDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1h
bi4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNGcm9udGVuZElt
cGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5jcHAK
aW5kZXggNDBlMTFmNy4uOTA1YmM2ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJE
ZXZUb29sc0Zyb250ZW5kSW1wbC5jcHAKQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIFdlYkRldlRv
b2xzRnJvbnRlbmRJbXBsOjpkaXNwYXRjaE9uSW5zcGVjdG9yRnJvbnRlbmQoY29uc3QgV2ViU3Ry
aW5nJiBtZXNzYQogICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKICAgICB2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PiBmcmFtZUNvbnRleHQgPSBWOFByb3h5Ojpjb250ZXh0KGZyYW1lLT5mcmFtZSgp
KTsKICAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKGZyYW1lQ29udGV4dCk7Ci0g
ICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGRpc3BhdGNoRnVuY3Rpb24gPSBmcmFtZUNvbnRleHQt
Pkdsb2JhbCgpLT5HZXQodjg6OlN0cmluZzo6TmV3KCJkZXZ0b29scyQkZGlzcGF0Y2giKSk7Cisg
ICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGRpc3BhdGNoRnVuY3Rpb24gPSBmcmFtZUNvbnRleHQt
Pkdsb2JhbCgpLT5HZXQodjg6OlN0cmluZzo6TmV3KCJXZWJJbnNwZWN0b3Jfc3luY0Rpc3BhdGNo
IikpOwogICAgIEFTU0VSVChkaXNwYXRjaEZ1bmN0aW9uLT5Jc0Z1bmN0aW9uKCkpOwogICAgIHY4
OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbiA9IHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9u
Pjo6Q2FzdChkaXNwYXRjaEZ1bmN0aW9uKTsKICAgICBWZWN0b3I8IHY4OjpIYW5kbGU8djg6OlZh
bHVlPiA+IGFyZ3M7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xz
LmpzIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZUb29scy5qcwppbmRleCBiZGFhNzFhLi4w
ZmQ2NmM5IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xzLmpzCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGV2VG9vbHMuanMKQEAgLTM0LDIyICszNCw2IEBA
CiAgKiBEZXZUb29scyBmcm9udGVuZCB0b2dldGhlci4gSXQgaXMgYWxzbyByZXNwb25zaWJsZSBm
b3Igb3ZlcnJpZGluZyBleGlzdGluZwogICogV2ViSW5zcGVjdG9yIGZ1bmN0aW9uYWxpdHkgd2hp
bGUgaXQgaXMgZ2V0dGluZyB1cHN0cmVhbWVkIGludG8gV2ViQ29yZS4KICAqLwotCi0vKioKLSAq
IERpc3BhdGNoZXMgcmF3IG1lc3NhZ2UgZnJvbSB0aGUgaG9zdC4KLSAqIEBwYXJhbSB7c3RyaW5n
fSByZW1vdGVOYW1lCi0gKiBAcHJhbWEge3N0cmluZ30gbWV0aG9kTmFtZQotICogQHBhcmFtIHtz
dHJpbmd9IHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMgQXJndW1lbnRzIHRvIGRpc3BhdGNoLgotICov
Ci1kZXZ0b29scyQkZGlzcGF0Y2ggPSBmdW5jdGlvbihtZXNzYWdlKQotewotICAgIHZhciBhcmdz
ID0gdHlwZW9mIG1lc3NhZ2UgPT09ICJzdHJpbmciID8gSlNPTi5wYXJzZShtZXNzYWdlKSA6IG1l
c3NhZ2U7Ci0gICAgdmFyIG1ldGhvZE5hbWUgPSBhcmdzWzBdOwotICAgIHZhciBwYXJhbWV0ZXJz
ID0gYXJncy5zbGljZSgxKTsKLSAgICBXZWJJbnNwZWN0b3JbbWV0aG9kTmFtZV0uYXBwbHkoV2Vi
SW5zcGVjdG9yLCBwYXJhbWV0ZXJzKTsKLX07Ci0KLQogZGV2dG9vbHMuVG9vbHNBZ2VudCA9IGZ1
bmN0aW9uKCkKIHsKICAgICB0aGlzLnByb2ZpbGVyQWdlbnRfID0gbmV3IGRldnRvb2xzLlByb2Zp
bGVyQWdlbnQoKTsKQEAgLTc1LDMwICs1OSw2IEBAIGRldnRvb2xzLnRvb2xzID0gbnVsbDsKIAog
dmFyIGNvbnRleHQgPSB7fTsgIC8vIFVzZWQgYnkgV2ViQ29yZSdzIGluc3BlY3RvciByb3V0aW5l
cy4KIAotKGZ1bmN0aW9uKCkgewotICAgIFdlYkluc3BlY3Rvci5fcGFyYW1zT2JqZWN0ID0ge307
Ci0KLSAgICB2YXIgcXVlcnlQYXJhbXMgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoOwotICAgIGlm
IChxdWVyeVBhcmFtcykgewotICAgICAgICB2YXIgcGFyYW1zID0gcXVlcnlQYXJhbXMuc3Vic3Ry
aW5nKDEpLnNwbGl0KCImIik7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgcGFpciA9IHBhcmFtc1tpXS5zcGxpdCgiPSIp
OwotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLl9wYXJhbXNPYmplY3RbcGFpclswXV0gPSBwYWly
WzFdOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICgicGFnZSIgaW4gV2ViSW5zcGVjdG9yLl9w
YXJhbXNPYmplY3QpIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnNvY2tldCA9IG5ldyBXZWJTb2Nr
ZXQoIndzOi8vIiArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgIi9kZXZ0b29scy9wYWdlLyIgKyBX
ZWJJbnNwZWN0b3IuX3BhcmFtc09iamVjdC5wYWdlKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnNv
Y2tldC5vbm1lc3NhZ2UgPSBmdW5jdGlvbihtZXNzYWdlKSB7IGRldnRvb2xzJCRkaXNwYXRjaCht
ZXNzYWdlLmRhdGEpOyB9Ci0gICAgICAgIFdlYkluc3BlY3Rvci5zb2NrZXQub25lcnJvciA9IGZ1
bmN0aW9uKGVycm9yKSB7IGNvbnNvbGUuZXJyKGVycm9yKTsgfQotICAgICAgICBXZWJJbnNwZWN0
b3Iuc29ja2V0Lm9ub3BlbiA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgV2ViSW5zcGVjdG9y
LnNvY2tldE9wZW5lZCA9IHRydWU7Ci0gICAgICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmxvYWRl
ZERvbmUpCi0gICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRvTG9hZGVkRG9uZSgpOwotICAg
ICAgICB9OwotICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3Quc2VuZE1lc3NhZ2VUb0JhY2tl
bmQgPSBXZWJJbnNwZWN0b3Iuc29ja2V0LnNlbmQuYmluZChXZWJJbnNwZWN0b3Iuc29ja2V0KTsK
LSAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmxvYWRlZCA9IFdlYkluc3BlY3Rvci5zb2Nr
ZXQuc2VuZC5iaW5kKFdlYkluc3BlY3Rvci5zb2NrZXQsICJsb2FkZWQiKTsKLSAgICB9Ci19KSgp
OwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogLy8gSGVyZSBhbmQgYmVsb3cgYXJlIG92ZXJyaWRl
cyB0byBleGlzdGluZyBXZWJJbnNwZWN0b3IgbWV0aG9kcyBvbmx5LgogLy8gVE9ETyhwZmVsZG1h
bik6IFBhdGNoIFdlYkNvcmUgYW5kIHVwc3RyZWFtIGNoYW5nZXMuCkBAIC0xMTQsMjQgKzc0LDE1
IEBAIFdlYkluc3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgUHJlZmVyZW5jZXMucHJv
ZmlsZXJBbHdheXNFbmFibGVkID0gdHJ1ZTsKICAgICBQcmVmZXJlbmNlcy5jYW5FZGl0U2NyaXB0
U291cmNlID0gdHJ1ZTsKICAgICBQcmVmZXJlbmNlcy5vbmxpbmVEZXRlY3Rpb25FbmFibGVkID0g
ZmFsc2U7Ci0gICAgaWYgKCJwYWdlIiBpbiBXZWJJbnNwZWN0b3IuX3BhcmFtc09iamVjdCkgewot
ICAgICAgICBXZWJJbnNwZWN0b3IubG9hZGVkRG9uZSA9IHRydWU7Ci0gICAgICAgIGlmIChXZWJJ
bnNwZWN0b3Iuc29ja2V0T3BlbmVkKQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRvTG9hZGVk
RG9uZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFdlYkluc3BlY3Rvci5kb0xvYWRl
ZERvbmUoKTsKLX0KIAotV2ViSW5zcGVjdG9yLmRvTG9hZGVkRG9uZSA9IGZ1bmN0aW9uKCkgewot
ICAgIG9sZExvYWRlZC5jYWxsKHRoaXMpOworICAgIG9sZExvYWRlZC5jYWxsKFdlYkluc3BlY3Rv
cik7CiB9CiAKIGRldnRvb2xzLmRvbUNvbnRlbnRMb2FkZWQgPSBmdW5jdGlvbigpCiB7Ci0gICAg
V2ViSW5zcGVjdG9yLnNldEF0dGFjaGVkV2luZG93KFdlYkluc3BlY3Rvci5fcGFyYW1zT2JqZWN0
LmRvY2tlZCA9PT0gInRydWUiKTsKLSAgICBpZiAoV2ViSW5zcGVjdG9yLl9wYXJhbXNPYmplY3Qu
dG9vbGJhcl9jb2xvciAmJiBXZWJJbnNwZWN0b3IuX3BhcmFtc09iamVjdC50ZXh0X2NvbG9yKQot
ICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0VG9vbGJhckNvbG9ycyhXZWJJbnNwZWN0b3IuX3BhcmFt
c09iamVjdC50b29sYmFyX2NvbG9yLCBXZWJJbnNwZWN0b3IuX3BhcmFtc09iamVjdC50ZXh0X2Nv
bG9yKTsKKyAgICBXZWJJbnNwZWN0b3Iuc2V0QXR0YWNoZWRXaW5kb3coV2ViSW5zcGVjdG9yLnF1
ZXJ5UGFyYW1zT2JqZWN0LmRvY2tlZCA9PT0gInRydWUiKTsKKyAgICBpZiAoV2ViSW5zcGVjdG9y
LnF1ZXJ5UGFyYW1zT2JqZWN0LnRvb2xiYXJfY29sb3IgJiYgV2ViSW5zcGVjdG9yLnF1ZXJ5UGFy
YW1zT2JqZWN0LnRleHRfY29sb3IpCisgICAgICAgIFdlYkluc3BlY3Rvci5zZXRUb29sYmFyQ29s
b3JzKFdlYkluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVjdC50b29sYmFyX2NvbG9yLCBXZWJJbnNw
ZWN0b3IucXVlcnlQYXJhbXNPYmplY3QudGV4dF9jb2xvcik7CiB9CiBkb2N1bWVudC5hZGRFdmVu
dExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgZGV2dG9vbHMuZG9tQ29udGVudExvYWRlZCwg
ZmFsc2UpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64447</attachid>
            <date>2010-08-15 06:18:40 -0700</date>
            <delta_ts>2010-08-15 11:28:14 -0700</delta_ts>
            <desc>[PATCH] Review comments addressed.</desc>
            <filename>upstream_ws</filename>
            <type>text/plain</type>
            <size>8786</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjQ3NDM1Ny4uY2FmYTdmNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTYzNCw2ICs2MzQsMjQgQEAKIAogMjAxMC0wOC0xMyAgUGF2ZWwg
RmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAorICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiB1cHN0cmVhbSBmcm9udGVu
ZC1zaWRlIFdlYlNvY2tldCB0cmFuc3BvcnQuCisgICAgICAgIENocm9taXVtIGFscmVhZHkgaGFz
IGFuIGFsdGVybmF0ZSBXZWJTb2NrZXQtYmFzZWQgY29tbXVuaWNhdGlvbiBjaGFubmVsIHdpdGgK
KyAgICAgICAgdGhlIGJhY2tlbmQuIFVwc3RyZWFtaW5nIGl0IGluIHRoaXMgY2hhbmdlLiBXZSB3
aWxsIGFncmVlIG9uIHRoZSBVUkkKKyAgICAgICAgb2YgdGhlIHJlbW90ZSBzZXJ2aWNlIGFzIHRo
ZSBwcm90b2NvbCBtYXR1cmVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDM5NzAKKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVj
dG9yLmpzOgorICAgICAgICAoLldlYkluc3BlY3Rvci5zb2NrZXQub25tZXNzYWdlKToKKyAgICAg
ICAgKC5XZWJJbnNwZWN0b3Iuc29ja2V0Lm9uZXJyb3IpOgorICAgICAgICAoLldlYkluc3BlY3Rv
ci5zb2NrZXQub25vcGVuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5sb2FkZWQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLmRvTG9hZGVkRG9uZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Jfc3lu
Y0Rpc3BhdGNoKToKKworMjAxMC0wOC0xMyAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9t
aXVtLm9yZz4KKwogICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IHJlbmFtZSBJbnNwZWN0b3JWYWx1ZTo6cHVzaCBhbmQgc2V0IHRv
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwppbmRleCBjZjVlZGEzLi5h
NmE0YjdjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9y
LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTQy
OSw4ICs0MjksNDQgQEAgV2ViSW5zcGVjdG9yLlBsYXRmb3JtRmxhdm9yID0gewogICAgIE1hY1Nu
b3dMZW9wYXJkOiAibWFjLXNub3dsZW9wYXJkIgogfQogCitmdW5jdGlvbiBwYXJzZVF1ZXJ5UGFy
YW1ldGVycygpCit7CisgICAgdmFyIHF1ZXJ5UGFyYW1zID0gd2luZG93LmxvY2F0aW9uLnNlYXJj
aDsKKyAgICBpZiAoIXF1ZXJ5UGFyYW1zKQorICAgICAgICByZXR1cm4ge307CisgICAgdmFyIHBh
cmFtcyA9IHF1ZXJ5UGFyYW1zLnN1YnN0cmluZygxKS5zcGxpdCgiJiIpOworICAgIHZhciByZXN1
bHQgPSB7fTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7ICsraSkgewor
ICAgICAgICB2YXIgcGFpciA9IHBhcmFtc1tpXS5zcGxpdCgiPSIpOworICAgICAgICByZXN1bHRb
cGFpclswXV0gPSBwYWlyWzFdOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorV2ViSW5z
cGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0ID0gcGFyc2VRdWVyeVBhcmFtZXRlcnMoKTsKKworZnVu
Y3Rpb24gaW5zdGFsbFdlYlNvY2tldFRyYW5zcG9ydCgpCit7CisgICAgV2ViSW5zcGVjdG9yLnNv
Y2tldCA9IG5ldyBXZWJTb2NrZXQoIndzOi8vIiArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgIi9k
ZXZ0b29scy9wYWdlLyIgKyBXZWJJbnNwZWN0b3IucXVlcnlQYXJhbXNPYmplY3QucGFnZSk7Cisg
ICAgV2ViSW5zcGVjdG9yLnNvY2tldC5vbm1lc3NhZ2UgPSBmdW5jdGlvbihtZXNzYWdlKSB7IFdl
Ykluc3BlY3Rvcl9zeW5jRGlzcGF0Y2gobWVzc2FnZS5kYXRhKTsgfQorICAgIFdlYkluc3BlY3Rv
ci5zb2NrZXQub25lcnJvciA9IGZ1bmN0aW9uKGVycm9yKSB7IGNvbnNvbGUuZXJyKGVycm9yKTsg
fQorICAgIFdlYkluc3BlY3Rvci5zb2NrZXQub25vcGVuID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IEluc3BlY3RvckZyb250ZW5kSG9zdC5zZW5kTWVzc2FnZVRvQmFja2VuZCA9IFdlYkluc3BlY3Rv
ci5zb2NrZXQuc2VuZC5iaW5kKFdlYkluc3BlY3Rvci5zb2NrZXQpOworICAgICAgICBJbnNwZWN0
b3JGcm9udGVuZEhvc3QubG9hZGVkID0gV2ViSW5zcGVjdG9yLnNvY2tldC5zZW5kLmJpbmQoV2Vi
SW5zcGVjdG9yLnNvY2tldCwgImxvYWRlZCIpOworICAgICAgICBXZWJJbnNwZWN0b3IuZG9Mb2Fk
ZWREb25lKCk7CisgICAgfTsKK30KKwogV2ViSW5zcGVjdG9yLmxvYWRlZCA9IGZ1bmN0aW9uKCkK
IHsKKyAgICBpZiAoInBhZ2UiIGluIFdlYkluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVjdCkgewor
ICAgICAgICBpbnN0YWxsV2ViU29ja2V0VHJhbnNwb3J0KCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgV2ViSW5zcGVjdG9yLmRvTG9hZGVkRG9uZSgpOworfQorCitXZWJJbnNwZWN0b3Iu
ZG9Mb2FkZWREb25lID0gZnVuY3Rpb24oKQorewogICAgIEluc3BlY3RvckJhY2tlbmQuc2V0SW5q
ZWN0ZWRTY3JpcHRTb3VyY2UoIigiICsgaW5qZWN0ZWRTY3JpcHRDb25zdHJ1Y3RvciArICIpOyIp
OwogCiAgICAgdmFyIHBsYXRmb3JtID0gV2ViSW5zcGVjdG9yLnBsYXRmb3JtOwpAQCAtNTgxLDYg
KzYxNywxNSBAQCBXZWJJbnNwZWN0b3IuZGlzcGF0Y2ggPSBmdW5jdGlvbigpIHsKICAgICBzZXRU
aW1lb3V0KGRlbGF5RGlzcGF0Y2gsIDApOwogfQogCisvL1RoaXMgZnVuY3Rpb24gaXMgcHVycG9z
ZWx5IHB1dCBpbnRvIHRoZSBnbG9iYWwgc2NvcGUgZm9yIGVhc3kgYWNjZXNzLgorV2ViSW5zcGVj
dG9yX3N5bmNEaXNwYXRjaCA9IGZ1bmN0aW9uKG1lc3NhZ2UpCit7CisgICAgdmFyIGFyZ3MgPSBK
U09OLnBhcnNlKG1lc3NhZ2UpOworICAgIHZhciBtZXRob2ROYW1lID0gYXJnc1swXTsKKyAgICB2
YXIgcGFyYW1ldGVycyA9IGFyZ3Muc2xpY2UoMSk7CisgICAgV2ViSW5zcGVjdG9yW21ldGhvZE5h
bWVdLmFwcGx5KFdlYkluc3BlY3RvciwgcGFyYW1ldGVycyk7Cit9OworCiBXZWJJbnNwZWN0b3Iu
ZGlzcGF0Y2hNZXNzYWdlRnJvbUJhY2tlbmQgPSBmdW5jdGlvbihhcmd1bWVudHMpCiB7CiAgICAg
V2ViSW5zcGVjdG9yLmRpc3BhdGNoLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCBhNDMxMzlmLi4zMDIyOGE3IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAx
MC0wOC0xMyAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiB1
cHN0cmVhbSBmcm9udGVuZC1zaWRlIFdlYlNvY2tldCB0cmFuc3BvcnQuCisgICAgICAgIENocm9t
aXVtIGFscmVhZHkgaGFzIGFuIGFsdGVybmF0ZSBXZWJTb2NrZXQtYmFzZWQgY29tbXVuaWNhdGlv
biBjaGFubmVsIHdpdGgKKyAgICAgICAgdGhlIGJhY2tlbmQuIFVwc3RyZWFtaW5nIGl0IGluIHRo
aXMgY2hhbmdlLiBXZSB3aWxsIGFncmVlIG9uIHRoZSBVUkkKKyAgICAgICAgb2YgdGhlIHJlbW90
ZSBzZXJ2aWNlIGFzIHRoZSBwcm90b2NvbCBtYXR1cmVzLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM5NzAKKworICAgICAgICAqIHNyYy9XZWJEZXZU
b29sc0Zyb250ZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRl
bmRJbXBsOjpkaXNwYXRjaE9uSW5zcGVjdG9yRnJvbnRlbmQpOgorICAgICAgICAqIHNyYy9qcy9E
ZXZUb29scy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5sb2FkZWQpOgorICAgICAgICAoZGV2
dG9vbHMuZG9tQ29udGVudExvYWRlZCk6CisKIDIwMTAtMDgtMTMgIFNhdGlzaCBTYW1wYXRoICA8
c2F0aXNoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKZXJlbXkgT3Jsb3cu
CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzRnJvbnRlbmRJbXBs
LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuY3BwCmlu
ZGV4IDQwZTExZjcuLjkwNWJjNmQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RGV2VG9vbHNGcm9udGVuZEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2
VG9vbHNGcm9udGVuZEltcGwuY3BwCkBAIC0xMTIsNyArMTEyLDcgQEAgdm9pZCBXZWJEZXZUb29s
c0Zyb250ZW5kSW1wbDo6ZGlzcGF0Y2hPbkluc3BlY3RvckZyb250ZW5kKGNvbnN0IFdlYlN0cmlu
ZyYgbWVzc2EKICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CiAgICAgdjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4gZnJhbWVDb250ZXh0ID0gVjhQcm94eTo6Y29udGV4dChmcmFtZS0+ZnJhbWUoKSk7
CiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShmcmFtZUNvbnRleHQpOwotICAg
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBkaXNwYXRjaEZ1bmN0aW9uID0gZnJhbWVDb250ZXh0LT5H
bG9iYWwoKS0+R2V0KHY4OjpTdHJpbmc6Ok5ldygiZGV2dG9vbHMkJGRpc3BhdGNoIikpOworICAg
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBkaXNwYXRjaEZ1bmN0aW9uID0gZnJhbWVDb250ZXh0LT5H
bG9iYWwoKS0+R2V0KHY4OjpTdHJpbmc6Ok5ldygiV2ViSW5zcGVjdG9yX3N5bmNEaXNwYXRjaCIp
KTsKICAgICBBU1NFUlQoZGlzcGF0Y2hGdW5jdGlvbi0+SXNGdW5jdGlvbigpKTsKICAgICB2ODo6
SGFuZGxlPHY4OjpGdW5jdGlvbj4gZnVuY3Rpb24gPSB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj46
OkNhc3QoZGlzcGF0Y2hGdW5jdGlvbik7CiAgICAgVmVjdG9yPCB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gPiBhcmdzOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZUb29scy5q
cyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGV2VG9vbHMuanMKaW5kZXggYmRhYTcxYS4uMGZk
NjZjOSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZUb29scy5qcworKysg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xzLmpzCkBAIC0zNCwyMiArMzQsNiBAQAog
ICogRGV2VG9vbHMgZnJvbnRlbmQgdG9nZXRoZXIuIEl0IGlzIGFsc28gcmVzcG9uc2libGUgZm9y
IG92ZXJyaWRpbmcgZXhpc3RpbmcKICAqIFdlYkluc3BlY3RvciBmdW5jdGlvbmFsaXR5IHdoaWxl
IGl0IGlzIGdldHRpbmcgdXBzdHJlYW1lZCBpbnRvIFdlYkNvcmUuCiAgKi8KLQotLyoqCi0gKiBE
aXNwYXRjaGVzIHJhdyBtZXNzYWdlIGZyb20gdGhlIGhvc3QuCi0gKiBAcGFyYW0ge3N0cmluZ30g
cmVtb3RlTmFtZQotICogQHByYW1hIHtzdHJpbmd9IG1ldGhvZE5hbWUKLSAqIEBwYXJhbSB7c3Ry
aW5nfSBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zIEFyZ3VtZW50cyB0byBkaXNwYXRjaC4KLSAqLwot
ZGV2dG9vbHMkJGRpc3BhdGNoID0gZnVuY3Rpb24obWVzc2FnZSkKLXsKLSAgICB2YXIgYXJncyA9
IHR5cGVvZiBtZXNzYWdlID09PSAic3RyaW5nIiA/IEpTT04ucGFyc2UobWVzc2FnZSkgOiBtZXNz
YWdlOwotICAgIHZhciBtZXRob2ROYW1lID0gYXJnc1swXTsKLSAgICB2YXIgcGFyYW1ldGVycyA9
IGFyZ3Muc2xpY2UoMSk7Ci0gICAgV2ViSW5zcGVjdG9yW21ldGhvZE5hbWVdLmFwcGx5KFdlYklu
c3BlY3RvciwgcGFyYW1ldGVycyk7Ci19OwotCi0KIGRldnRvb2xzLlRvb2xzQWdlbnQgPSBmdW5j
dGlvbigpCiB7CiAgICAgdGhpcy5wcm9maWxlckFnZW50XyA9IG5ldyBkZXZ0b29scy5Qcm9maWxl
ckFnZW50KCk7CkBAIC03NSwzMCArNTksNiBAQCBkZXZ0b29scy50b29scyA9IG51bGw7CiAKIHZh
ciBjb250ZXh0ID0ge307ICAvLyBVc2VkIGJ5IFdlYkNvcmUncyBpbnNwZWN0b3Igcm91dGluZXMu
CiAKLShmdW5jdGlvbigpIHsKLSAgICBXZWJJbnNwZWN0b3IuX3BhcmFtc09iamVjdCA9IHt9Owot
Ci0gICAgdmFyIHF1ZXJ5UGFyYW1zID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDsKLSAgICBpZiAo
cXVlcnlQYXJhbXMpIHsKLSAgICAgICAgdmFyIHBhcmFtcyA9IHF1ZXJ5UGFyYW1zLnN1YnN0cmlu
ZygxKS5zcGxpdCgiJiIpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5n
dGg7ICsraSkgewotICAgICAgICAgICAgdmFyIHBhaXIgPSBwYXJhbXNbaV0uc3BsaXQoIj0iKTsK
LSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5fcGFyYW1zT2JqZWN0W3BhaXJbMF1dID0gcGFpclsx
XTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoInBhZ2UiIGluIFdlYkluc3BlY3Rvci5fcGFy
YW1zT2JqZWN0KSB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5zb2NrZXQgPSBuZXcgV2ViU29ja2V0
KCJ3czovLyIgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArICIvZGV2dG9vbHMvcGFnZS8iICsgV2Vi
SW5zcGVjdG9yLl9wYXJhbXNPYmplY3QucGFnZSk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5zb2Nr
ZXQub25tZXNzYWdlID0gZnVuY3Rpb24obWVzc2FnZSkgeyBkZXZ0b29scyQkZGlzcGF0Y2gobWVz
c2FnZS5kYXRhKTsgfQotICAgICAgICBXZWJJbnNwZWN0b3Iuc29ja2V0Lm9uZXJyb3IgPSBmdW5j
dGlvbihlcnJvcikgeyBjb25zb2xlLmVycihlcnJvcik7IH0KLSAgICAgICAgV2ViSW5zcGVjdG9y
LnNvY2tldC5vbm9wZW4gPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5z
b2NrZXRPcGVuZWQgPSB0cnVlOwotICAgICAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5sb2FkZWRE
b25lKQotICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kb0xvYWRlZERvbmUoKTsKLSAgICAg
ICAgfTsKLSAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LnNlbmRNZXNzYWdlVG9CYWNrZW5k
ID0gV2ViSW5zcGVjdG9yLnNvY2tldC5zZW5kLmJpbmQoV2ViSW5zcGVjdG9yLnNvY2tldCk7Ci0g
ICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5sb2FkZWQgPSBXZWJJbnNwZWN0b3Iuc29ja2V0
LnNlbmQuYmluZChXZWJJbnNwZWN0b3Iuc29ja2V0LCAibG9hZGVkIik7Ci0gICAgfQotfSkoKTsK
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vIEhlcmUgYW5kIGJlbG93IGFyZSBvdmVycmlkZXMg
dG8gZXhpc3RpbmcgV2ViSW5zcGVjdG9yIG1ldGhvZHMgb25seS4KIC8vIFRPRE8ocGZlbGRtYW4p
OiBQYXRjaCBXZWJDb3JlIGFuZCB1cHN0cmVhbSBjaGFuZ2VzLgpAQCAtMTE0LDI0ICs3NCwxNSBA
QCBXZWJJbnNwZWN0b3IubG9hZGVkID0gZnVuY3Rpb24oKQogICAgIFByZWZlcmVuY2VzLnByb2Zp
bGVyQWx3YXlzRW5hYmxlZCA9IHRydWU7CiAgICAgUHJlZmVyZW5jZXMuY2FuRWRpdFNjcmlwdFNv
dXJjZSA9IHRydWU7CiAgICAgUHJlZmVyZW5jZXMub25saW5lRGV0ZWN0aW9uRW5hYmxlZCA9IGZh
bHNlOwotICAgIGlmICgicGFnZSIgaW4gV2ViSW5zcGVjdG9yLl9wYXJhbXNPYmplY3QpIHsKLSAg
ICAgICAgV2ViSW5zcGVjdG9yLmxvYWRlZERvbmUgPSB0cnVlOwotICAgICAgICBpZiAoV2ViSW5z
cGVjdG9yLnNvY2tldE9wZW5lZCkKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kb0xvYWRlZERv
bmUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBXZWJJbnNwZWN0b3IuZG9Mb2FkZWRE
b25lKCk7Ci19CiAKLVdlYkluc3BlY3Rvci5kb0xvYWRlZERvbmUgPSBmdW5jdGlvbigpIHsKLSAg
ICBvbGRMb2FkZWQuY2FsbCh0aGlzKTsKKyAgICBvbGRMb2FkZWQuY2FsbChXZWJJbnNwZWN0b3Ip
OwogfQogCiBkZXZ0b29scy5kb21Db250ZW50TG9hZGVkID0gZnVuY3Rpb24oKQogewotICAgIFdl
Ykluc3BlY3Rvci5zZXRBdHRhY2hlZFdpbmRvdyhXZWJJbnNwZWN0b3IuX3BhcmFtc09iamVjdC5k
b2NrZWQgPT09ICJ0cnVlIik7Ci0gICAgaWYgKFdlYkluc3BlY3Rvci5fcGFyYW1zT2JqZWN0LnRv
b2xiYXJfY29sb3IgJiYgV2ViSW5zcGVjdG9yLl9wYXJhbXNPYmplY3QudGV4dF9jb2xvcikKLSAg
ICAgICAgV2ViSW5zcGVjdG9yLnNldFRvb2xiYXJDb2xvcnMoV2ViSW5zcGVjdG9yLl9wYXJhbXNP
YmplY3QudG9vbGJhcl9jb2xvciwgV2ViSW5zcGVjdG9yLl9wYXJhbXNPYmplY3QudGV4dF9jb2xv
cik7CisgICAgV2ViSW5zcGVjdG9yLnNldEF0dGFjaGVkV2luZG93KFdlYkluc3BlY3Rvci5xdWVy
eVBhcmFtc09iamVjdC5kb2NrZWQgPT09ICJ0cnVlIik7CisgICAgaWYgKFdlYkluc3BlY3Rvci5x
dWVyeVBhcmFtc09iamVjdC50b29sYmFyX2NvbG9yICYmIFdlYkluc3BlY3Rvci5xdWVyeVBhcmFt
c09iamVjdC50ZXh0X2NvbG9yKQorICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0VG9vbGJhckNvbG9y
cyhXZWJJbnNwZWN0b3IucXVlcnlQYXJhbXNPYmplY3QudG9vbGJhcl9jb2xvciwgV2ViSW5zcGVj
dG9yLnF1ZXJ5UGFyYW1zT2JqZWN0LnRleHRfY29sb3IpOwogfQogZG9jdW1lbnQuYWRkRXZlbnRM
aXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGRldnRvb2xzLmRvbUNvbnRlbnRMb2FkZWQsIGZh
bHNlKTsKIAo=
</data>
<flag name="review"
          id="53020"
          type_id="1"
          status="-"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64449</attachid>
            <date>2010-08-15 11:28:14 -0700</date>
            <delta_ts>2010-08-15 11:35:31 -0700</delta_ts>
            <desc>[PATCH] Proposed change.</desc>
            <filename>upstream_ws</filename>
            <type>text/plain</type>
            <size>9209</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjQ3NDM1Ny4uMGM1YTA5MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMC0wOC0xNCAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiB1cHN0cmVhbSBmcm9udGVuZC1zaWRl
IFdlYlNvY2tldCB0cmFuc3BvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00Mzk3MAorCisgICAgICAgIENocm9taXVtIGFscmVhZHkgaGFzIGFuIGFs
dGVybmF0ZSBXZWJTb2NrZXQtYmFzZWQgY29tbXVuaWNhdGlvbiBjaGFubmVsIHdpdGgKKyAgICAg
ICAgdGhlIGJhY2tlbmQuIFVwc3RyZWFtaW5nIGl0IGluIHRoaXMgY2hhbmdlLiBXZSB3aWxsIGFn
cmVlIG9uIHRoZSBVUkkKKyAgICAgICAgb2YgdGhlIHJlbW90ZSBzZXJ2aWNlIGFzIHRoZSBwcm90
b2NvbCBtYXR1cmVzLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3Iu
anM6CisgICAgICAgICguV2ViSW5zcGVjdG9yLnNvY2tldC5vbm1lc3NhZ2UpOgorICAgICAgICAo
LldlYkluc3BlY3Rvci5zb2NrZXQub25lcnJvcik6CisgICAgICAgICguV2ViSW5zcGVjdG9yLnNv
Y2tldC5vbm9wZW4pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmxvYWRlZCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuZG9Mb2FkZWREb25lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvcl9zeW5jRGlz
cGF0Y2gpOgorCiAyMDEwLTA4LTE0ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdt
YWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNjUzNzQuCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwppbmRleCBjZjVlZGEzLi4wMjg3OTEz
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTI4LDcgKzI4
LDcgQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotZnVuY3Rpb24gcHJlbG9hZEltYWdlcygpCisoZnVu
Y3Rpb24gcHJlbG9hZEltYWdlcygpCiB7CiAgICAgKG5ldyBJbWFnZSgpKS5zcmMgPSAiSW1hZ2Vz
L2NsZWFyQ29uc29sZUJ1dHRvbkdseXBoLnBuZyI7CiAgICAgKG5ldyBJbWFnZSgpKS5zcmMgPSAi
SW1hZ2VzL2NvbnNvbGVCdXR0b25HbHlwaC5wbmciOwpAQCAtNDUsOSArNDUsNyBAQCBmdW5jdGlv
biBwcmVsb2FkSW1hZ2VzKCkKICAgICAobmV3IEltYWdlKCkpLnNyYyA9ICJJbWFnZXMvcmVjb3Jk
VG9nZ2xlZEJ1dHRvbkdseXBoLnBuZyI7CiAgICAgKG5ldyBJbWFnZSgpKS5zcmMgPSAiSW1hZ2Vz
L3JlbG9hZEJ1dHRvbkdseXBoLnBuZyI7CiAgICAgKG5ldyBJbWFnZSgpKS5zcmMgPSAiSW1hZ2Vz
L3VuZG9ja0J1dHRvbkdseXBoLnBuZyI7Ci19Ci0KLXByZWxvYWRJbWFnZXMoKTsKK30pKCk7CiAK
IHZhciBXZWJJbnNwZWN0b3IgPSB7CiAgICAgcmVzb3VyY2VzOiB7fSwKQEAgLTQyOSw4ICs0Mjcs
MzcgQEAgV2ViSW5zcGVjdG9yLlBsYXRmb3JtRmxhdm9yID0gewogICAgIE1hY1Nub3dMZW9wYXJk
OiAibWFjLXNub3dsZW9wYXJkIgogfQogCisoZnVuY3Rpb24gcGFyc2VRdWVyeVBhcmFtZXRlcnMo
KQoreworICAgIFdlYkluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVjdCA9IHt9OworICAgIHZhciBx
dWVyeVBhcmFtcyA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7CisgICAgaWYgKCFxdWVyeVBhcmFt
cykKKyAgICAgICAgcmV0dXJuOworICAgIHZhciBwYXJhbXMgPSBxdWVyeVBhcmFtcy5zdWJzdHJp
bmcoMSkuc3BsaXQoIiYiKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7
ICsraSkgeworICAgICAgICB2YXIgcGFpciA9IHBhcmFtc1tpXS5zcGxpdCgiPSIpOworICAgICAg
ICBXZWJJbnNwZWN0b3IucXVlcnlQYXJhbXNPYmplY3RbcGFpclswXV0gPSBwYWlyWzFdOworICAg
IH0KK30pKCk7CisKIFdlYkluc3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlvbigpCiB7CisgICAgaWYg
KCJwYWdlIiBpbiBXZWJJbnNwZWN0b3IucXVlcnlQYXJhbXNPYmplY3QpIHsKKyAgICAgICAgV2Vi
SW5zcGVjdG9yLnNvY2tldCA9IG5ldyBXZWJTb2NrZXQoIndzOi8vIiArIHdpbmRvdy5sb2NhdGlv
bi5ob3N0ICsgIi9kZXZ0b29scy9wYWdlLyIgKyBXZWJJbnNwZWN0b3IucXVlcnlQYXJhbXNPYmpl
Y3QucGFnZSk7CisgICAgICAgIFdlYkluc3BlY3Rvci5zb2NrZXQub25tZXNzYWdlID0gZnVuY3Rp
b24obWVzc2FnZSkgeyBXZWJJbnNwZWN0b3Jfc3luY0Rpc3BhdGNoKG1lc3NhZ2UuZGF0YSk7IH0K
KyAgICAgICAgV2ViSW5zcGVjdG9yLnNvY2tldC5vbmVycm9yID0gZnVuY3Rpb24oZXJyb3IpIHsg
Y29uc29sZS5lcnJvcihlcnJvcik7IH0KKyAgICAgICAgV2ViSW5zcGVjdG9yLnNvY2tldC5vbm9w
ZW4gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5zZW5k
TWVzc2FnZVRvQmFja2VuZCA9IFdlYkluc3BlY3Rvci5zb2NrZXQuc2VuZC5iaW5kKFdlYkluc3Bl
Y3Rvci5zb2NrZXQpOworICAgICAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmxvYWRlZCA9
IFdlYkluc3BlY3Rvci5zb2NrZXQuc2VuZC5iaW5kKFdlYkluc3BlY3Rvci5zb2NrZXQsICJsb2Fk
ZWQiKTsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kb0xvYWRlZERvbmUoKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIFdlYkluc3BlY3Rvci5kb0xvYWRlZERvbmUo
KTsKK30KKworV2ViSW5zcGVjdG9yLmRvTG9hZGVkRG9uZSA9IGZ1bmN0aW9uKCkKK3sKICAgICBJ
bnNwZWN0b3JCYWNrZW5kLnNldEluamVjdGVkU2NyaXB0U291cmNlKCIoIiArIGluamVjdGVkU2Ny
aXB0Q29uc3RydWN0b3IgKyAiKTsiKTsKIAogICAgIHZhciBwbGF0Zm9ybSA9IFdlYkluc3BlY3Rv
ci5wbGF0Zm9ybTsKQEAgLTU4MSw2ICs2MDgsMTUgQEAgV2ViSW5zcGVjdG9yLmRpc3BhdGNoID0g
ZnVuY3Rpb24oKSB7CiAgICAgc2V0VGltZW91dChkZWxheURpc3BhdGNoLCAwKTsKIH0KIAorLy8g
VGhpcyBmdW5jdGlvbiBpcyBwdXJwb3NlbHkgcHV0IGludG8gdGhlIGdsb2JhbCBzY29wZSBmb3Ig
ZWFzeSBhY2Nlc3MuCitXZWJJbnNwZWN0b3Jfc3luY0Rpc3BhdGNoID0gZnVuY3Rpb24obWVzc2Fn
ZSkKK3sKKyAgICB2YXIgYXJncyA9IEpTT04ucGFyc2UobWVzc2FnZSk7CisgICAgdmFyIG1ldGhv
ZE5hbWUgPSBhcmdzWzBdOworICAgIHZhciBwYXJhbWV0ZXJzID0gYXJncy5zbGljZSgxKTsKKyAg
ICBXZWJJbnNwZWN0b3JbbWV0aG9kTmFtZV0uYXBwbHkoV2ViSW5zcGVjdG9yLCBwYXJhbWV0ZXJz
KTsKK30KKwogV2ViSW5zcGVjdG9yLmRpc3BhdGNoTWVzc2FnZUZyb21CYWNrZW5kID0gZnVuY3Rp
b24oYXJndW1lbnRzKQogewogICAgIFdlYkluc3BlY3Rvci5kaXNwYXRjaC5hcHBseSh0aGlzLCBh
cmd1bWVudHMpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYTQzMTM5Zi4uY2QzOGI3MCAxMDA2NDQKLS0tIGEv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjAgQEAKKzIwMTAtMDgtMTMgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV2ViIEluc3BlY3RvcjogdXBzdHJlYW0gZnJvbnRlbmQtc2lkZSBXZWJTb2NrZXQgdHJh
bnNwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDM5NzAKKworICAgICAgICBDaHJvbWl1bSBhbHJlYWR5IGhhcyBhbiBhbHRlcm5hdGUgV2ViU29j
a2V0LWJhc2VkIGNvbW11bmljYXRpb24gY2hhbm5lbCB3aXRoCisgICAgICAgIHRoZSBiYWNrZW5k
LiBVcHN0cmVhbWluZyBpdCBpbiB0aGlzIGNoYW5nZS4gV2Ugd2lsbCBhZ3JlZSBvbiB0aGUgVVJJ
CisgICAgICAgIG9mIHRoZSByZW1vdGUgc2VydmljZSBhcyB0aGUgcHJvdG9jb2wgbWF0dXJlcy4K
KworICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpkaXNwYXRjaE9uSW5zcGVjdG9yRnJvbnRl
bmQpOgorICAgICAgICAqIHNyYy9qcy9EZXZUb29scy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5sb2FkZWQpOgorICAgICAgICAoZGV2dG9vbHMuZG9tQ29udGVudExvYWRlZCk6CisKIDIwMTAt
MDgtMTMgIFNhdGlzaCBTYW1wYXRoICA8c2F0aXNoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBKZXJlbXkgT3Jsb3cuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkRldlRvb2xzRnJvbnRlbmRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2
VG9vbHNGcm9udGVuZEltcGwuY3BwCmluZGV4IDQwZTExZjcuLjkwNWJjNmQgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuY3BwCisrKyBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuY3BwCkBAIC0xMTIsNyAr
MTEyLDcgQEAgdm9pZCBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6ZGlzcGF0Y2hPbkluc3BlY3Rv
ckZyb250ZW5kKGNvbnN0IFdlYlN0cmluZyYgbWVzc2EKICAgICB2ODo6SGFuZGxlU2NvcGUgc2Nv
cGU7CiAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gZnJhbWVDb250ZXh0ID0gVjhQcm94eTo6
Y29udGV4dChmcmFtZS0+ZnJhbWUoKSk7CiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRT
Y29wZShmcmFtZUNvbnRleHQpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBkaXNwYXRjaEZ1
bmN0aW9uID0gZnJhbWVDb250ZXh0LT5HbG9iYWwoKS0+R2V0KHY4OjpTdHJpbmc6Ok5ldygiZGV2
dG9vbHMkJGRpc3BhdGNoIikpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBkaXNwYXRjaEZ1
bmN0aW9uID0gZnJhbWVDb250ZXh0LT5HbG9iYWwoKS0+R2V0KHY4OjpTdHJpbmc6Ok5ldygiV2Vi
SW5zcGVjdG9yX3N5bmNEaXNwYXRjaCIpKTsKICAgICBBU1NFUlQoZGlzcGF0Y2hGdW5jdGlvbi0+
SXNGdW5jdGlvbigpKTsKICAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gZnVuY3Rpb24gPSB2
ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj46OkNhc3QoZGlzcGF0Y2hGdW5jdGlvbik7CiAgICAgVmVj
dG9yPCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiBhcmdzOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3NyYy9qcy9EZXZUb29scy5qcyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGV2VG9v
bHMuanMKaW5kZXggYmRhYTcxYS4uMGZkNjZjOSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9qcy9EZXZUb29scy5qcworKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xz
LmpzCkBAIC0zNCwyMiArMzQsNiBAQAogICogRGV2VG9vbHMgZnJvbnRlbmQgdG9nZXRoZXIuIEl0
IGlzIGFsc28gcmVzcG9uc2libGUgZm9yIG92ZXJyaWRpbmcgZXhpc3RpbmcKICAqIFdlYkluc3Bl
Y3RvciBmdW5jdGlvbmFsaXR5IHdoaWxlIGl0IGlzIGdldHRpbmcgdXBzdHJlYW1lZCBpbnRvIFdl
YkNvcmUuCiAgKi8KLQotLyoqCi0gKiBEaXNwYXRjaGVzIHJhdyBtZXNzYWdlIGZyb20gdGhlIGhv
c3QuCi0gKiBAcGFyYW0ge3N0cmluZ30gcmVtb3RlTmFtZQotICogQHByYW1hIHtzdHJpbmd9IG1l
dGhvZE5hbWUKLSAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zIEFyZ3Vt
ZW50cyB0byBkaXNwYXRjaC4KLSAqLwotZGV2dG9vbHMkJGRpc3BhdGNoID0gZnVuY3Rpb24obWVz
c2FnZSkKLXsKLSAgICB2YXIgYXJncyA9IHR5cGVvZiBtZXNzYWdlID09PSAic3RyaW5nIiA/IEpT
T04ucGFyc2UobWVzc2FnZSkgOiBtZXNzYWdlOwotICAgIHZhciBtZXRob2ROYW1lID0gYXJnc1sw
XTsKLSAgICB2YXIgcGFyYW1ldGVycyA9IGFyZ3Muc2xpY2UoMSk7Ci0gICAgV2ViSW5zcGVjdG9y
W21ldGhvZE5hbWVdLmFwcGx5KFdlYkluc3BlY3RvciwgcGFyYW1ldGVycyk7Ci19OwotCi0KIGRl
dnRvb2xzLlRvb2xzQWdlbnQgPSBmdW5jdGlvbigpCiB7CiAgICAgdGhpcy5wcm9maWxlckFnZW50
XyA9IG5ldyBkZXZ0b29scy5Qcm9maWxlckFnZW50KCk7CkBAIC03NSwzMCArNTksNiBAQCBkZXZ0
b29scy50b29scyA9IG51bGw7CiAKIHZhciBjb250ZXh0ID0ge307ICAvLyBVc2VkIGJ5IFdlYkNv
cmUncyBpbnNwZWN0b3Igcm91dGluZXMuCiAKLShmdW5jdGlvbigpIHsKLSAgICBXZWJJbnNwZWN0
b3IuX3BhcmFtc09iamVjdCA9IHt9OwotCi0gICAgdmFyIHF1ZXJ5UGFyYW1zID0gd2luZG93Lmxv
Y2F0aW9uLnNlYXJjaDsKLSAgICBpZiAocXVlcnlQYXJhbXMpIHsKLSAgICAgICAgdmFyIHBhcmFt
cyA9IHF1ZXJ5UGFyYW1zLnN1YnN0cmluZygxKS5zcGxpdCgiJiIpOwotICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIHBhaXIg
PSBwYXJhbXNbaV0uc3BsaXQoIj0iKTsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5fcGFyYW1z
T2JqZWN0W3BhaXJbMF1dID0gcGFpclsxXTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoInBh
Z2UiIGluIFdlYkluc3BlY3Rvci5fcGFyYW1zT2JqZWN0KSB7Ci0gICAgICAgIFdlYkluc3BlY3Rv
ci5zb2NrZXQgPSBuZXcgV2ViU29ja2V0KCJ3czovLyIgKyB3aW5kb3cubG9jYXRpb24uaG9zdCAr
ICIvZGV2dG9vbHMvcGFnZS8iICsgV2ViSW5zcGVjdG9yLl9wYXJhbXNPYmplY3QucGFnZSk7Ci0g
ICAgICAgIFdlYkluc3BlY3Rvci5zb2NrZXQub25tZXNzYWdlID0gZnVuY3Rpb24obWVzc2FnZSkg
eyBkZXZ0b29scyQkZGlzcGF0Y2gobWVzc2FnZS5kYXRhKTsgfQotICAgICAgICBXZWJJbnNwZWN0
b3Iuc29ja2V0Lm9uZXJyb3IgPSBmdW5jdGlvbihlcnJvcikgeyBjb25zb2xlLmVycihlcnJvcik7
IH0KLSAgICAgICAgV2ViSW5zcGVjdG9yLnNvY2tldC5vbm9wZW4gPSBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgIFdlYkluc3BlY3Rvci5zb2NrZXRPcGVuZWQgPSB0cnVlOwotICAgICAgICAgICAg
aWYgKFdlYkluc3BlY3Rvci5sb2FkZWREb25lKQotICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rv
ci5kb0xvYWRlZERvbmUoKTsKLSAgICAgICAgfTsKLSAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRI
b3N0LnNlbmRNZXNzYWdlVG9CYWNrZW5kID0gV2ViSW5zcGVjdG9yLnNvY2tldC5zZW5kLmJpbmQo
V2ViSW5zcGVjdG9yLnNvY2tldCk7Ci0gICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5sb2Fk
ZWQgPSBXZWJJbnNwZWN0b3Iuc29ja2V0LnNlbmQuYmluZChXZWJJbnNwZWN0b3Iuc29ja2V0LCAi
bG9hZGVkIik7Ci0gICAgfQotfSkoKTsKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vIEhlcmUg
YW5kIGJlbG93IGFyZSBvdmVycmlkZXMgdG8gZXhpc3RpbmcgV2ViSW5zcGVjdG9yIG1ldGhvZHMg
b25seS4KIC8vIFRPRE8ocGZlbGRtYW4pOiBQYXRjaCBXZWJDb3JlIGFuZCB1cHN0cmVhbSBjaGFu
Z2VzLgpAQCAtMTE0LDI0ICs3NCwxNSBAQCBXZWJJbnNwZWN0b3IubG9hZGVkID0gZnVuY3Rpb24o
KQogICAgIFByZWZlcmVuY2VzLnByb2ZpbGVyQWx3YXlzRW5hYmxlZCA9IHRydWU7CiAgICAgUHJl
ZmVyZW5jZXMuY2FuRWRpdFNjcmlwdFNvdXJjZSA9IHRydWU7CiAgICAgUHJlZmVyZW5jZXMub25s
aW5lRGV0ZWN0aW9uRW5hYmxlZCA9IGZhbHNlOwotICAgIGlmICgicGFnZSIgaW4gV2ViSW5zcGVj
dG9yLl9wYXJhbXNPYmplY3QpIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmxvYWRlZERvbmUgPSB0
cnVlOwotICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLnNvY2tldE9wZW5lZCkKLSAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5kb0xvYWRlZERvbmUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBXZWJJbnNwZWN0b3IuZG9Mb2FkZWREb25lKCk7Ci19CiAKLVdlYkluc3BlY3Rvci5kb0xvYWRl
ZERvbmUgPSBmdW5jdGlvbigpIHsKLSAgICBvbGRMb2FkZWQuY2FsbCh0aGlzKTsKKyAgICBvbGRM
b2FkZWQuY2FsbChXZWJJbnNwZWN0b3IpOwogfQogCiBkZXZ0b29scy5kb21Db250ZW50TG9hZGVk
ID0gZnVuY3Rpb24oKQogewotICAgIFdlYkluc3BlY3Rvci5zZXRBdHRhY2hlZFdpbmRvdyhXZWJJ
bnNwZWN0b3IuX3BhcmFtc09iamVjdC5kb2NrZWQgPT09ICJ0cnVlIik7Ci0gICAgaWYgKFdlYklu
c3BlY3Rvci5fcGFyYW1zT2JqZWN0LnRvb2xiYXJfY29sb3IgJiYgV2ViSW5zcGVjdG9yLl9wYXJh
bXNPYmplY3QudGV4dF9jb2xvcikKLSAgICAgICAgV2ViSW5zcGVjdG9yLnNldFRvb2xiYXJDb2xv
cnMoV2ViSW5zcGVjdG9yLl9wYXJhbXNPYmplY3QudG9vbGJhcl9jb2xvciwgV2ViSW5zcGVjdG9y
Ll9wYXJhbXNPYmplY3QudGV4dF9jb2xvcik7CisgICAgV2ViSW5zcGVjdG9yLnNldEF0dGFjaGVk
V2luZG93KFdlYkluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVjdC5kb2NrZWQgPT09ICJ0cnVlIik7
CisgICAgaWYgKFdlYkluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVjdC50b29sYmFyX2NvbG9yICYm
IFdlYkluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVjdC50ZXh0X2NvbG9yKQorICAgICAgICBXZWJJ
bnNwZWN0b3Iuc2V0VG9vbGJhckNvbG9ycyhXZWJJbnNwZWN0b3IucXVlcnlQYXJhbXNPYmplY3Qu
dG9vbGJhcl9jb2xvciwgV2ViSW5zcGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0LnRleHRfY29sb3Ip
OwogfQogZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGRldnRv
b2xzLmRvbUNvbnRlbnRMb2FkZWQsIGZhbHNlKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64450</attachid>
            <date>2010-08-15 11:35:31 -0700</date>
            <delta_ts>2010-08-16 05:24:31 -0700</delta_ts>
            <desc>[PATCH] Proposed change.</desc>
            <filename>upstream_ws</filename>
            <type>text/plain</type>
            <size>9274</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjQ3NDM1Ny4uMGM1YTA5MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMC0wOC0xNCAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiB1cHN0cmVhbSBmcm9udGVuZC1zaWRl
IFdlYlNvY2tldCB0cmFuc3BvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00Mzk3MAorCisgICAgICAgIENocm9taXVtIGFscmVhZHkgaGFzIGFuIGFs
dGVybmF0ZSBXZWJTb2NrZXQtYmFzZWQgY29tbXVuaWNhdGlvbiBjaGFubmVsIHdpdGgKKyAgICAg
ICAgdGhlIGJhY2tlbmQuIFVwc3RyZWFtaW5nIGl0IGluIHRoaXMgY2hhbmdlLiBXZSB3aWxsIGFn
cmVlIG9uIHRoZSBVUkkKKyAgICAgICAgb2YgdGhlIHJlbW90ZSBzZXJ2aWNlIGFzIHRoZSBwcm90
b2NvbCBtYXR1cmVzLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3Iu
anM6CisgICAgICAgICguV2ViSW5zcGVjdG9yLnNvY2tldC5vbm1lc3NhZ2UpOgorICAgICAgICAo
LldlYkluc3BlY3Rvci5zb2NrZXQub25lcnJvcik6CisgICAgICAgICguV2ViSW5zcGVjdG9yLnNv
Y2tldC5vbm9wZW4pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmxvYWRlZCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuZG9Mb2FkZWREb25lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvcl9zeW5jRGlz
cGF0Y2gpOgorCiAyMDEwLTA4LTE0ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdt
YWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNjUzNzQuCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwppbmRleCBjZjVlZGEzLi4yNWU2NzE2
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTI4LDcgKzI4
LDcgQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotZnVuY3Rpb24gcHJlbG9hZEltYWdlcygpCisoZnVu
Y3Rpb24gcHJlbG9hZEltYWdlcygpCiB7CiAgICAgKG5ldyBJbWFnZSgpKS5zcmMgPSAiSW1hZ2Vz
L2NsZWFyQ29uc29sZUJ1dHRvbkdseXBoLnBuZyI7CiAgICAgKG5ldyBJbWFnZSgpKS5zcmMgPSAi
SW1hZ2VzL2NvbnNvbGVCdXR0b25HbHlwaC5wbmciOwpAQCAtNDUsOSArNDUsNyBAQCBmdW5jdGlv
biBwcmVsb2FkSW1hZ2VzKCkKICAgICAobmV3IEltYWdlKCkpLnNyYyA9ICJJbWFnZXMvcmVjb3Jk
VG9nZ2xlZEJ1dHRvbkdseXBoLnBuZyI7CiAgICAgKG5ldyBJbWFnZSgpKS5zcmMgPSAiSW1hZ2Vz
L3JlbG9hZEJ1dHRvbkdseXBoLnBuZyI7CiAgICAgKG5ldyBJbWFnZSgpKS5zcmMgPSAiSW1hZ2Vz
L3VuZG9ja0J1dHRvbkdseXBoLnBuZyI7Ci19Ci0KLXByZWxvYWRJbWFnZXMoKTsKK30pKCk7CiAK
IHZhciBXZWJJbnNwZWN0b3IgPSB7CiAgICAgcmVzb3VyY2VzOiB7fSwKQEAgLTQyNywxMCArNDI1
LDM5IEBAIFdlYkluc3BlY3Rvci5QbGF0Zm9ybUZsYXZvciA9IHsKICAgICBNYWNUaWdlcjogIm1h
Yy10aWdlciIsCiAgICAgTWFjTGVvcGFyZDogIm1hYy1sZW9wYXJkIiwKICAgICBNYWNTbm93TGVv
cGFyZDogIm1hYy1zbm93bGVvcGFyZCIKLX0KK307CisKKyhmdW5jdGlvbiBwYXJzZVF1ZXJ5UGFy
YW1ldGVycygpCit7CisgICAgV2ViSW5zcGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0ID0ge307Cisg
ICAgdmFyIHF1ZXJ5UGFyYW1zID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDsKKyAgICBpZiAoIXF1
ZXJ5UGFyYW1zKQorICAgICAgICByZXR1cm47CisgICAgdmFyIHBhcmFtcyA9IHF1ZXJ5UGFyYW1z
LnN1YnN0cmluZygxKS5zcGxpdCgiJiIpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1z
Lmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBwYWlyID0gcGFyYW1zW2ldLnNwbGl0KCI9Iik7
CisgICAgICAgIFdlYkluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVjdFtwYWlyWzBdXSA9IHBhaXJb
MV07CisgICAgfQorfSkoKTsKIAogV2ViSW5zcGVjdG9yLmxvYWRlZCA9IGZ1bmN0aW9uKCkKIHsK
KyAgICBpZiAoInBhZ2UiIGluIFdlYkluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVjdCkgeworICAg
ICAgICBXZWJJbnNwZWN0b3Iuc29ja2V0ID0gbmV3IFdlYlNvY2tldCgid3M6Ly8iICsgd2luZG93
LmxvY2F0aW9uLmhvc3QgKyAiL2RldnRvb2xzL3BhZ2UvIiArIFdlYkluc3BlY3Rvci5xdWVyeVBh
cmFtc09iamVjdC5wYWdlKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnNvY2tldC5vbm1lc3NhZ2Ug
PSBmdW5jdGlvbihtZXNzYWdlKSB7IFdlYkluc3BlY3Rvcl9zeW5jRGlzcGF0Y2gobWVzc2FnZS5k
YXRhKTsgfQorICAgICAgICBXZWJJbnNwZWN0b3Iuc29ja2V0Lm9uZXJyb3IgPSBmdW5jdGlvbihl
cnJvcikgeyBjb25zb2xlLmVycm9yKGVycm9yKTsgfQorICAgICAgICBXZWJJbnNwZWN0b3Iuc29j
a2V0Lm9ub3BlbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRI
b3N0LnNlbmRNZXNzYWdlVG9CYWNrZW5kID0gV2ViSW5zcGVjdG9yLnNvY2tldC5zZW5kLmJpbmQo
V2ViSW5zcGVjdG9yLnNvY2tldCk7CisgICAgICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3Qu
bG9hZGVkID0gV2ViSW5zcGVjdG9yLnNvY2tldC5zZW5kLmJpbmQoV2ViSW5zcGVjdG9yLnNvY2tl
dCwgImxvYWRlZCIpOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRvTG9hZGVkRG9uZSgpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgV2ViSW5zcGVjdG9yLmRvTG9h
ZGVkRG9uZSgpOworfQorCitXZWJJbnNwZWN0b3IuZG9Mb2FkZWREb25lID0gZnVuY3Rpb24oKQor
ewogICAgIEluc3BlY3RvckJhY2tlbmQuc2V0SW5qZWN0ZWRTY3JpcHRTb3VyY2UoIigiICsgaW5q
ZWN0ZWRTY3JpcHRDb25zdHJ1Y3RvciArICIpOyIpOwogCiAgICAgdmFyIHBsYXRmb3JtID0gV2Vi
SW5zcGVjdG9yLnBsYXRmb3JtOwpAQCAtNTgxLDYgKzYwOCwxNSBAQCBXZWJJbnNwZWN0b3IuZGlz
cGF0Y2ggPSBmdW5jdGlvbigpIHsKICAgICBzZXRUaW1lb3V0KGRlbGF5RGlzcGF0Y2gsIDApOwog
fQogCisvLyBUaGlzIGZ1bmN0aW9uIGlzIHB1cnBvc2VseSBwdXQgaW50byB0aGUgZ2xvYmFsIHNj
b3BlIGZvciBlYXN5IGFjY2Vzcy4KK1dlYkluc3BlY3Rvcl9zeW5jRGlzcGF0Y2ggPSBmdW5jdGlv
bihtZXNzYWdlKQoreworICAgIHZhciBhcmdzID0gSlNPTi5wYXJzZShtZXNzYWdlKTsKKyAgICB2
YXIgbWV0aG9kTmFtZSA9IGFyZ3NbMF07CisgICAgdmFyIHBhcmFtZXRlcnMgPSBhcmdzLnNsaWNl
KDEpOworICAgIFdlYkluc3BlY3RvclttZXRob2ROYW1lXS5hcHBseShXZWJJbnNwZWN0b3IsIHBh
cmFtZXRlcnMpOworfQorCiBXZWJJbnNwZWN0b3IuZGlzcGF0Y2hNZXNzYWdlRnJvbUJhY2tlbmQg
PSBmdW5jdGlvbihhcmd1bWVudHMpCiB7CiAgICAgV2ViSW5zcGVjdG9yLmRpc3BhdGNoLmFwcGx5
KHRoaXMsIGFyZ3VtZW50cyk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
IGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBhNDMxMzlmLi5jZDM4YjcwIDEwMDY0
NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0wOC0xMyAgUGF2ZWwgRmVsZG1hbiAgPHBm
ZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiB1cHN0cmVhbSBmcm9udGVuZC1zaWRlIFdlYlNv
Y2tldCB0cmFuc3BvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00Mzk3MAorCisgICAgICAgIENocm9taXVtIGFscmVhZHkgaGFzIGFuIGFsdGVybmF0
ZSBXZWJTb2NrZXQtYmFzZWQgY29tbXVuaWNhdGlvbiBjaGFubmVsIHdpdGgKKyAgICAgICAgdGhl
IGJhY2tlbmQuIFVwc3RyZWFtaW5nIGl0IGluIHRoaXMgY2hhbmdlLiBXZSB3aWxsIGFncmVlIG9u
IHRoZSBVUkkKKyAgICAgICAgb2YgdGhlIHJlbW90ZSBzZXJ2aWNlIGFzIHRoZSBwcm90b2NvbCBt
YXR1cmVzLgorCisgICAgICAgICogc3JjL1dlYkRldlRvb2xzRnJvbnRlbmRJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmRpc3BhdGNoT25JbnNwZWN0
b3JGcm9udGVuZCk6CisgICAgICAgICogc3JjL2pzL0RldlRvb2xzLmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLmxvYWRlZCk6CisgICAgICAgIChkZXZ0b29scy5kb21Db250ZW50TG9hZGVkKToK
KwogMjAxMC0wOC0xMyAgU2F0aXNoIFNhbXBhdGggIDxzYXRpc2hAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEplcmVteSBPcmxvdy4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5jcHAKaW5kZXggNDBlMTFmNy4uOTA1YmM2ZCAxMDA2
NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5jcHAK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5jcHAKQEAg
LTExMiw3ICsxMTIsNyBAQCB2b2lkIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpkaXNwYXRjaE9u
SW5zcGVjdG9yRnJvbnRlbmQoY29uc3QgV2ViU3RyaW5nJiBtZXNzYQogICAgIHY4OjpIYW5kbGVT
Y29wZSBzY29wZTsKICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBmcmFtZUNvbnRleHQgPSBW
OFByb3h5Ojpjb250ZXh0KGZyYW1lLT5mcmFtZSgpKTsKICAgICB2ODo6Q29udGV4dDo6U2NvcGUg
Y29udGV4dFNjb3BlKGZyYW1lQ29udGV4dCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGRp
c3BhdGNoRnVuY3Rpb24gPSBmcmFtZUNvbnRleHQtPkdsb2JhbCgpLT5HZXQodjg6OlN0cmluZzo6
TmV3KCJkZXZ0b29scyQkZGlzcGF0Y2giKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGRp
c3BhdGNoRnVuY3Rpb24gPSBmcmFtZUNvbnRleHQtPkdsb2JhbCgpLT5HZXQodjg6OlN0cmluZzo6
TmV3KCJXZWJJbnNwZWN0b3Jfc3luY0Rpc3BhdGNoIikpOwogICAgIEFTU0VSVChkaXNwYXRjaEZ1
bmN0aW9uLT5Jc0Z1bmN0aW9uKCkpOwogICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBmdW5j
dGlvbiA9IHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPjo6Q2FzdChkaXNwYXRjaEZ1bmN0aW9uKTsK
ICAgICBWZWN0b3I8IHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFyZ3M7CmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xzLmpzIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9q
cy9EZXZUb29scy5qcwppbmRleCBiZGFhNzFhLi4wZmQ2NmM5IDEwMDY0NAotLS0gYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL2pzL0RldlRvb2xzLmpzCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMv
RGV2VG9vbHMuanMKQEAgLTM0LDIyICszNCw2IEBACiAgKiBEZXZUb29scyBmcm9udGVuZCB0b2dl
dGhlci4gSXQgaXMgYWxzbyByZXNwb25zaWJsZSBmb3Igb3ZlcnJpZGluZyBleGlzdGluZwogICog
V2ViSW5zcGVjdG9yIGZ1bmN0aW9uYWxpdHkgd2hpbGUgaXQgaXMgZ2V0dGluZyB1cHN0cmVhbWVk
IGludG8gV2ViQ29yZS4KICAqLwotCi0vKioKLSAqIERpc3BhdGNoZXMgcmF3IG1lc3NhZ2UgZnJv
bSB0aGUgaG9zdC4KLSAqIEBwYXJhbSB7c3RyaW5nfSByZW1vdGVOYW1lCi0gKiBAcHJhbWEge3N0
cmluZ30gbWV0aG9kTmFtZQotICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtMSwgcGFyYW0yLCBwYXJh
bTMgQXJndW1lbnRzIHRvIGRpc3BhdGNoLgotICovCi1kZXZ0b29scyQkZGlzcGF0Y2ggPSBmdW5j
dGlvbihtZXNzYWdlKQotewotICAgIHZhciBhcmdzID0gdHlwZW9mIG1lc3NhZ2UgPT09ICJzdHJp
bmciID8gSlNPTi5wYXJzZShtZXNzYWdlKSA6IG1lc3NhZ2U7Ci0gICAgdmFyIG1ldGhvZE5hbWUg
PSBhcmdzWzBdOwotICAgIHZhciBwYXJhbWV0ZXJzID0gYXJncy5zbGljZSgxKTsKLSAgICBXZWJJ
bnNwZWN0b3JbbWV0aG9kTmFtZV0uYXBwbHkoV2ViSW5zcGVjdG9yLCBwYXJhbWV0ZXJzKTsKLX07
Ci0KLQogZGV2dG9vbHMuVG9vbHNBZ2VudCA9IGZ1bmN0aW9uKCkKIHsKICAgICB0aGlzLnByb2Zp
bGVyQWdlbnRfID0gbmV3IGRldnRvb2xzLlByb2ZpbGVyQWdlbnQoKTsKQEAgLTc1LDMwICs1OSw2
IEBAIGRldnRvb2xzLnRvb2xzID0gbnVsbDsKIAogdmFyIGNvbnRleHQgPSB7fTsgIC8vIFVzZWQg
YnkgV2ViQ29yZSdzIGluc3BlY3RvciByb3V0aW5lcy4KIAotKGZ1bmN0aW9uKCkgewotICAgIFdl
Ykluc3BlY3Rvci5fcGFyYW1zT2JqZWN0ID0ge307Ci0KLSAgICB2YXIgcXVlcnlQYXJhbXMgPSB3
aW5kb3cubG9jYXRpb24uc2VhcmNoOwotICAgIGlmIChxdWVyeVBhcmFtcykgewotICAgICAgICB2
YXIgcGFyYW1zID0gcXVlcnlQYXJhbXMuc3Vic3RyaW5nKDEpLnNwbGl0KCImIik7Ci0gICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2
YXIgcGFpciA9IHBhcmFtc1tpXS5zcGxpdCgiPSIpOwotICAgICAgICAgICAgV2ViSW5zcGVjdG9y
Ll9wYXJhbXNPYmplY3RbcGFpclswXV0gPSBwYWlyWzFdOwotICAgICAgICB9Ci0gICAgfQotICAg
IGlmICgicGFnZSIgaW4gV2ViSW5zcGVjdG9yLl9wYXJhbXNPYmplY3QpIHsKLSAgICAgICAgV2Vi
SW5zcGVjdG9yLnNvY2tldCA9IG5ldyBXZWJTb2NrZXQoIndzOi8vIiArIHdpbmRvdy5sb2NhdGlv
bi5ob3N0ICsgIi9kZXZ0b29scy9wYWdlLyIgKyBXZWJJbnNwZWN0b3IuX3BhcmFtc09iamVjdC5w
YWdlKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnNvY2tldC5vbm1lc3NhZ2UgPSBmdW5jdGlvbiht
ZXNzYWdlKSB7IGRldnRvb2xzJCRkaXNwYXRjaChtZXNzYWdlLmRhdGEpOyB9Ci0gICAgICAgIFdl
Ykluc3BlY3Rvci5zb2NrZXQub25lcnJvciA9IGZ1bmN0aW9uKGVycm9yKSB7IGNvbnNvbGUuZXJy
KGVycm9yKTsgfQotICAgICAgICBXZWJJbnNwZWN0b3Iuc29ja2V0Lm9ub3BlbiA9IGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnNvY2tldE9wZW5lZCA9IHRydWU7Ci0gICAg
ICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmxvYWRlZERvbmUpCi0gICAgICAgICAgICAgICAgV2Vi
SW5zcGVjdG9yLmRvTG9hZGVkRG9uZSgpOwotICAgICAgICB9OwotICAgICAgICBJbnNwZWN0b3JG
cm9udGVuZEhvc3Quc2VuZE1lc3NhZ2VUb0JhY2tlbmQgPSBXZWJJbnNwZWN0b3Iuc29ja2V0LnNl
bmQuYmluZChXZWJJbnNwZWN0b3Iuc29ja2V0KTsKLSAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRI
b3N0LmxvYWRlZCA9IFdlYkluc3BlY3Rvci5zb2NrZXQuc2VuZC5iaW5kKFdlYkluc3BlY3Rvci5z
b2NrZXQsICJsb2FkZWQiKTsKLSAgICB9Ci19KSgpOwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwog
Ly8gSGVyZSBhbmQgYmVsb3cgYXJlIG92ZXJyaWRlcyB0byBleGlzdGluZyBXZWJJbnNwZWN0b3Ig
bWV0aG9kcyBvbmx5LgogLy8gVE9ETyhwZmVsZG1hbik6IFBhdGNoIFdlYkNvcmUgYW5kIHVwc3Ry
ZWFtIGNoYW5nZXMuCkBAIC0xMTQsMjQgKzc0LDE1IEBAIFdlYkluc3BlY3Rvci5sb2FkZWQgPSBm
dW5jdGlvbigpCiAgICAgUHJlZmVyZW5jZXMucHJvZmlsZXJBbHdheXNFbmFibGVkID0gdHJ1ZTsK
ICAgICBQcmVmZXJlbmNlcy5jYW5FZGl0U2NyaXB0U291cmNlID0gdHJ1ZTsKICAgICBQcmVmZXJl
bmNlcy5vbmxpbmVEZXRlY3Rpb25FbmFibGVkID0gZmFsc2U7Ci0gICAgaWYgKCJwYWdlIiBpbiBX
ZWJJbnNwZWN0b3IuX3BhcmFtc09iamVjdCkgewotICAgICAgICBXZWJJbnNwZWN0b3IubG9hZGVk
RG9uZSA9IHRydWU7Ci0gICAgICAgIGlmIChXZWJJbnNwZWN0b3Iuc29ja2V0T3BlbmVkKQotICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLmRvTG9hZGVkRG9uZSgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIFdlYkluc3BlY3Rvci5kb0xvYWRlZERvbmUoKTsKLX0KIAotV2ViSW5zcGVjdG9y
LmRvTG9hZGVkRG9uZSA9IGZ1bmN0aW9uKCkgewotICAgIG9sZExvYWRlZC5jYWxsKHRoaXMpOwor
ICAgIG9sZExvYWRlZC5jYWxsKFdlYkluc3BlY3Rvcik7CiB9CiAKIGRldnRvb2xzLmRvbUNvbnRl
bnRMb2FkZWQgPSBmdW5jdGlvbigpCiB7Ci0gICAgV2ViSW5zcGVjdG9yLnNldEF0dGFjaGVkV2lu
ZG93KFdlYkluc3BlY3Rvci5fcGFyYW1zT2JqZWN0LmRvY2tlZCA9PT0gInRydWUiKTsKLSAgICBp
ZiAoV2ViSW5zcGVjdG9yLl9wYXJhbXNPYmplY3QudG9vbGJhcl9jb2xvciAmJiBXZWJJbnNwZWN0
b3IuX3BhcmFtc09iamVjdC50ZXh0X2NvbG9yKQotICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0VG9v
bGJhckNvbG9ycyhXZWJJbnNwZWN0b3IuX3BhcmFtc09iamVjdC50b29sYmFyX2NvbG9yLCBXZWJJ
bnNwZWN0b3IuX3BhcmFtc09iamVjdC50ZXh0X2NvbG9yKTsKKyAgICBXZWJJbnNwZWN0b3Iuc2V0
QXR0YWNoZWRXaW5kb3coV2ViSW5zcGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0LmRvY2tlZCA9PT0g
InRydWUiKTsKKyAgICBpZiAoV2ViSW5zcGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0LnRvb2xiYXJf
Y29sb3IgJiYgV2ViSW5zcGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0LnRleHRfY29sb3IpCisgICAg
ICAgIFdlYkluc3BlY3Rvci5zZXRUb29sYmFyQ29sb3JzKFdlYkluc3BlY3Rvci5xdWVyeVBhcmFt
c09iamVjdC50b29sYmFyX2NvbG9yLCBXZWJJbnNwZWN0b3IucXVlcnlQYXJhbXNPYmplY3QudGV4
dF9jb2xvcik7CiB9CiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVk
IiwgZGV2dG9vbHMuZG9tQ29udGVudExvYWRlZCwgZmFsc2UpOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>