<?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>28983</bug_id>
          
          <creation_ts>2009-09-04 13:35:30 -0700</creation_ts>
          <short_desc>WebInspector: Wrap primitive values (as objects) in InspectorController::wrap</short_desc>
          <delta_ts>2009-09-17 13:55:10 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>pmuellr</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>144911</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-09-04 13:35:30 -0700</bug_when>
    <thetext>This way all the evaluate results will be object proxies having proper .type and .description values. One would also be able to feed evaluate results to the ObjectPropertySections.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144920</commentid>
    <comment_count>1</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-09-04 14:06:45 -0700</bug_when>
    <thetext>My intention was to ease the way evaluation results are rendered (for watch expressions functionality). I started doing it, but then realized that evaluating into some primitive value is a good capability and it should stay. For example we use it when calculating completions.

So instead, I would recommend reusing Console&apos;s _format capabilities for rendering watches. WebInspector.ConsoleCommandResult should render any evaluation result properly. One should not need to get into InspectorController.getProperties, Object.describe and other specifics. Just do the eval and wrap render it using this class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144935</commentid>
    <comment_count>2</comment_count>
    <who name="Patrick Mueller">pmuellr</who>
    <bug_when>2009-09-04 15:24:22 -0700</bug_when>
    <thetext>wrt watches: I still need to get the properties of the result of the watch expression evaluation.  That&apos;s how it currently works anyway - eval the expression, and then the result appears in the tree just like a normal property inspector.  The result&apos;s properties appear in the tree as children of the expression.  I don&apos;t believe the current ObjectProperty* code is factored well enough for me to do this easily, so I did that part &quot;by hand&quot;.

I can imagine other uses within the debugger for the ability to get the properties of an arbitrary object, so I think this needs to be a 1st class capability.  For instance, I&apos;ve been thinking of writing some kind of object explorer where you could see a graphical layout of an object, it&apos;s properties, their properties, etc.  Such a tool would also need a way to get a list of properties of an arbitrary object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144986</commentid>
    <comment_count>3</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-09-04 23:31:50 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; wrt watches: I still need to get the properties of the result of the watch
&gt; expression evaluation.  That&apos;s how it currently works anyway - eval the
&gt; expression, and then the result appears in the tree just like a normal property
&gt; inspector.  The result&apos;s properties appear in the tree as children of the
&gt; expression.  I don&apos;t believe the current ObjectProperty* code is factored well
&gt; enough for me to do this easily, so I did that part &quot;by hand&quot;.
&gt; 

Imagine that you have objectProxy that is a result of your evaluation. Try typing the following:

element.appendChild(new WebInspector.ObjectPropertiesSection(objectProxy, watchedExpression, null, true).element);

That will render what you need in one line. What doesn&apos;t work here for you? As I mentioned in this bug, rendering primitive values could be trickier, but you can check for the typeof and render it manually in one line.

&gt; I can imagine other uses within the debugger for the ability to get the
&gt; properties of an arbitrary object, so I think this needs to be a 1st class
&gt; capability.  For instance, I&apos;ve been thinking of writing some kind of object
&gt; explorer where you could see a graphical layout of an object, it&apos;s properties,
&gt; their properties, etc.  Such a tool would also need a way to get a list of
&gt; properties of an arbitrary object.

No, it would not. There are generic capabilities that would be reused for that. Like dumping object structure in console (by means of dir(object)), allows getting and rendering arbitrary objects. You don&apos;t need to write an object explorer - it is already in place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145330</commentid>
    <comment_count>4</comment_count>
    <who name="Patrick Mueller">pmuellr</who>
    <bug_when>2009-09-08 06:29:40 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; I can imagine other uses within the debugger for the ability to get the
&gt; &gt; properties of an arbitrary object, so I think this needs to be a 1st class
&gt; &gt; capability.  For instance, I&apos;ve been thinking of writing some kind of object
&gt; &gt; explorer where you could see a graphical layout of an object, it&apos;s properties,
&gt; &gt; their properties, etc.  Such a tool would also need a way to get a list of
&gt; &gt; properties of an arbitrary object.
&gt; 
&gt; No, it would not. There are generic capabilities that would be reused for that.
&gt; Like dumping object structure in console (by means of dir(object)), allows
&gt; getting and rendering arbitrary objects. You don&apos;t need to write an object
&gt; explorer - it is already in place.

I&apos;m suggesting I might want to write an alternative UI to explore objects and their properties.  I think you&apos;re suggesting that no one will ever need this.  Which is also saying that the presentation can&apos;t be separated from the model, in terms of getting the properties of an object - there IS only one way to ever do this and render the UI.

I&apos;m guessing that with the new proxy stuff here, there are memory- and performance-related impacts to making calls like InspectorController.getProperties(); namely, every property that comes back over as a proxy will be, for the life of the session, tracked in some kind of proxy-handle/object map.  Is that the concern with exposing a capability of getting the properties from an object?  It seems like a pretty basic API that you want in your toolkit when building debugging tools.  Do we just need to be careful when using these APIs?  Is there some cleanup we can perform?  Do we need to add weak support to the JS engines so we can automagically clean up the mapping tables?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145335</commentid>
    <comment_count>5</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-09-08 07:15:13 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; &gt; I can imagine other uses within the debugger for the ability to get the
&gt; &gt; &gt; properties of an arbitrary object, so I think this needs to be a 1st class
&gt; &gt; &gt; capability.  For instance, I&apos;ve been thinking of writing some kind of object
&gt; &gt; &gt; explorer where you could see a graphical layout of an object, it&apos;s properties,
&gt; &gt; &gt; their properties, etc.  Such a tool would also need a way to get a list of
&gt; &gt; &gt; properties of an arbitrary object.
&gt; &gt; 
&gt; &gt; No, it would not. There are generic capabilities that would be reused for that.
&gt; &gt; Like dumping object structure in console (by means of dir(object)), allows
&gt; &gt; getting and rendering arbitrary objects. You don&apos;t need to write an object
&gt; &gt; explorer - it is already in place.
&gt; 
&gt; I&apos;m suggesting I might want to write an alternative UI to explore objects and
&gt; their properties.  I think you&apos;re suggesting that no one will ever need this. 
&gt; Which is also saying that the presentation can&apos;t be separated from the model,
&gt; in terms of getting the properties of an object - there IS only one way to ever
&gt; do this and render the UI.
&gt; 
&gt; I&apos;m guessing that with the new proxy stuff here, there are memory- and
&gt; performance-related impacts to making calls like
&gt; InspectorController.getProperties(); namely, every property that comes back
&gt; over as a proxy will be, for the life of the session, tracked in some kind of
&gt; proxy-handle/object map.  Is that the concern with exposing a capability of
&gt; getting the properties from an object?  It seems like a pretty basic API that
&gt; you want in your toolkit when building debugging tools.  Do we just need to be
&gt; careful when using these APIs?  Is there some cleanup we can perform?  Do we
&gt; need to add weak support to the JS engines so we can automagically clean up the
&gt; mapping tables?

Getting properties of an object is not a big deal given that you have a valid ObjectProxy for it. You are right, depending on the object id type, it has different lifetime. Like evaluation results are cached on the injected script side and that cache is being cleaned up when console is cleared. So you should be a bit careful when managing these object proxies.

But that is not the main reason I did not want you to use this API. I think there should be a limited number of UI primitives that we render page-side-objects with such as ObjectPropertySection. I think we should stick to them and make sure they are flexible enough. It was clear to me that ObjectPropertySection was solving your problem and I sent you a snippet with the code. If your requirements have changed since then, let us revisit it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145356</commentid>
    <comment_count>6</comment_count>
    <who name="Patrick Mueller">pmuellr</who>
    <bug_when>2009-09-08 08:03:49 -0700</bug_when>
    <thetext>(In reply to comment #5)

&gt; Getting properties of an object is not a big deal given that you have a valid
&gt; ObjectProxy for it. You are right, depending on the object id type, it has
&gt; different lifetime. Like evaluation results are cached on the injected script
&gt; side and that cache is being cleaned up when console is cleared. So you should
&gt; be a bit careful when managing these object proxies.

It would probably be nice to have some documentation on this stuff, if it&apos;s not already documented somewhere.

&gt; But that is not the main reason I did not want you to use this API. I think
&gt; there should be a limited number of UI primitives that we render
&gt; page-side-objects with such as ObjectPropertySection. I think we should stick
&gt; to them and make sure they are flexible enough. It was clear to me that
&gt; ObjectPropertySection was solving your problem and I sent you a snippet with
&gt; the code. If your requirements have changed since then, let us revisit it.

My concerns aren&apos;t related to the Watch Expressions support - it&apos;s more of a generic concern regarding not having an API to get the properties of an object in the target window.  I don&apos;t have a need for such a an API at the moment (assuming I can get the ObjectPropertiesSection flavored version of Watch Expressions to work), just thinking generically.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146543</commentid>
    <comment_count>7</comment_count>
      <attachid>39428</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2009-09-11 07:02:21 -0700</bug_when>
    <thetext>Created attachment 39428
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146549</commentid>
    <comment_count>8</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-09-11 07:23:51 -0700</bug_when>
    <thetext>Patch looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146566</commentid>
    <comment_count>9</comment_count>
    <who name="Patrick Mueller">pmuellr</who>
    <bug_when>2009-09-11 08:14:43 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=39428) [details]

I&apos;m glad to see that catching the case of null being typeof &quot;object&quot;, as I got hung up on this yesterday.

Do you have test cases?  I&apos;d like to ensure we are testing for all the oddball cases like NaN, Infinity, etc as well.  I think I noticed some of the eval()-y bits were returning results looking like null for NaN&apos;s or Infinity.  For instance, evaluating

- 1/0
- Infinity
- NaN

in the console all yield null right now, which isn&apos;t right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146578</commentid>
    <comment_count>10</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2009-09-11 08:54:32 -0700</bug_when>
    <thetext>&gt; Do you have test cases? 
Not really. We definitely need to write some unit tests for the inspector.


&gt; I&apos;d like to ensure we are testing for all the oddball
&gt; cases like NaN, Infinity, etc as well.  I think I noticed some of the eval()-y
&gt; bits were returning results looking like null for NaN&apos;s or Infinity.  For
&gt; instance, evaluating
&gt; 
&gt; - 1/0
With the patch applied that yields Infinity.

&gt; - Infinity
&gt; - NaN
&gt; 
Evaluating 1-a gives me NaN in the console.

&gt; in the console all yield null right now, which isn&apos;t right.
Can you confirm that with this patch you also have null results?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146589</commentid>
    <comment_count>11</comment_count>
    <who name="Patrick Mueller">pmuellr</who>
    <bug_when>2009-09-11 09:08:12 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; Do you have test cases? 
&gt; Not really. We definitely need to write some unit tests for the inspector.

I&apos;ve been creating manual test cases in WebCore/manual-tests/inspector, for example: named-evals.html

Better than nothing.  
 
&gt; &gt; in the console all yield null right now, which isn&apos;t right.
&gt; Can you confirm that with this patch you also have null results?

Wishing I could use Git, but I can&apos;t.  Will try to test after getting my current code ship-shape, was hoping to post the patch today.  I don&apos;t think is a blocker for me, but obviously needs to get fixed eventually, and guessing at about 90% certainly this will fix me as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146888</commentid>
    <comment_count>12</comment_count>
      <attachid>39428</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-09-11 20:41:12 -0700</bug_when>
    <thetext>Comment on attachment 39428
patch


&gt; +    try {
&gt; +      var expressionResult = InjectedScript._evaluateOn(InjectedScript._window().eval, InjectedScript._window(), expression);
&gt; +      for (var prop in expressionResult)
&gt; +          props[prop] = true;
&gt; +      if (includeInspectorCommandLineAPI)
&gt; +          for (var prop in InjectedScript._window()._inspectorCommandLineAPI)
&gt; +              if (prop.charAt(0) !== &apos;_&apos;)
&gt; +                  props[prop] = true;
&gt; +    } catch(e) {
&gt; +    }
&gt; +    return props;

Looks fine, but you use 2 space indentation in the try block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147025</commentid>
    <comment_count>13</comment_count>
      <attachid>39536</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2009-09-14 00:10:48 -0700</bug_when>
    <thetext>Created attachment 39536
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147026</commentid>
    <comment_count>14</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2009-09-14 00:11:37 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 39428 [details])
&gt; 
&gt; &gt; +    try {
&gt; &gt; +      var expressionResult = InjectedScript._evaluateOn(InjectedScript._window().eval, InjectedScript._window(), expression);
&gt; &gt; +      for (var prop in expressionResult)
&gt; &gt; +          props[prop] = true;
&gt; &gt; +      if (includeInspectorCommandLineAPI)
&gt; &gt; +          for (var prop in InjectedScript._window()._inspectorCommandLineAPI)
&gt; &gt; +              if (prop.charAt(0) !== &apos;_&apos;)
&gt; &gt; +                  props[prop] = true;
&gt; &gt; +    } catch(e) {
&gt; &gt; +    }
&gt; &gt; +    return props;
&gt; 
&gt; Looks fine, but you use 2 space indentation in the try block.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147092</commentid>
    <comment_count>15</comment_count>
      <attachid>39536</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-09-14 10:17:16 -0700</bug_when>
    <thetext>Comment on attachment 39536
patch

&gt; diff --git a/WebCore/inspector/InspectorController.cpp b/WebCore/inspector/InspectorController.cpp

&gt; +    try {
&gt; +      var expressionResult = InjectedScript._evaluateOn(InjectedScript._window().eval, InjectedScript._window(), expression);
&gt; +      for (var prop in expressionResult)
&gt; +          props[prop] = true;
&gt; +      if (includeInspectorCommandLineAPI)
&gt; +          for (var prop in InjectedScript._window()._inspectorCommandLineAPI)
&gt; +              if (prop.charAt(0) !== &apos;_&apos;)
&gt; +                  props[prop] = true;
&gt; +    } catch(e) {
&gt; +    }
&gt; +    return props;

I still see 2 space indents (only on one level.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147096</commentid>
    <comment_count>16</comment_count>
      <attachid>39551</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2009-09-14 10:21:37 -0700</bug_when>
    <thetext>Created attachment 39551
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147771</commentid>
    <comment_count>17</comment_count>
      <attachid>39688</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2009-09-17 02:54:37 -0700</bug_when>
    <thetext>Created attachment 39688
previous patch with changelog entry</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147913</commentid>
    <comment_count>18</comment_count>
      <attachid>39688</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-09-17 13:15:20 -0700</bug_when>
    <thetext>Comment on attachment 39688
previous patch with changelog entry

Rejecting patch 39688 from commit-queue.

Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;]&quot; exit_code: 1
Committing to http://svn.webkit.org/repository/webkit/trunk ...
Merge conflict during commit: Your file or directory &apos;WebCore/ChangeLog&apos; is probably out-of-date: resource out of date; try updating at /usr/local/libexec/git-core//git-svn line 469</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147919</commentid>
    <comment_count>19</comment_count>
      <attachid>39688</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-17 13:32:51 -0700</bug_when>
    <thetext>Comment on attachment 39688
previous patch with changelog entry

Race during landing.  We were bit by bug 28316 which I will be fixing this week.  Sorry!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147933</commentid>
    <comment_count>20</comment_count>
      <attachid>39688</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-09-17 13:55:05 -0700</bug_when>
    <thetext>Comment on attachment 39688
previous patch with changelog entry

Clearing flags on attachment: 39688

Committed r48491: &lt;http://trac.webkit.org/changeset/48491&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147934</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-09-17 13:55:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39428</attachid>
            <date>2009-09-11 07:02:21 -0700</date>
            <delta_ts>2009-09-14 00:10:48 -0700</delta_ts>
            <desc>patch</desc>
            <filename>proxy-primitives.patch</filename>
            <type>text/plain</type>
            <size>7550</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NGZmYWZiOC4uZWY3YThmZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAwOS0wOS0xMSAgWXVyeSBTZW1pa2hh
dHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXcmFwIHByaW1pdGl2ZSB2YWx1ZXMgKGFzIG9iamVjdHMpIGlu
IEluc3BlY3RvckNvbnRyb2xsZXI6OndyYXAuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI4OTgzCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
Ojp3cmFwT2JqZWN0KTogb2JqZWN0cyBvZiBhbnkgdHlwZSB3aWxsIGJlIHdyYXBwZWQgaW50byBw
cm94aWVzLAorICAgICAgICAgb25seSBvYmplY3QgcHJveGllcyB3aWxsIGhhdmUgb2JqZWN0SWQu
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUuY29tcGxldGlvbnMpOiB0aGVyZSBp
cyBJbmplY3RlZFNjcmlwdC5nZXRDb21wbGV0aW9uc2kKKyAgICAgICAgIHRoYXQgYWNjZXB0cyBh
biBleHByZXNzaW9uIGFuZCByZXR1cm5zIHBvc3NpYmxlIGNvbXBsZXRpb25zLiBUaGlzIHdheSB3
ZSBkb24ndCBuZWVkIHRvIHdyYXAKKyAgICAgICAgIGFuZCB1bndyYXAgdGhlIGNvbXBsZXRpb25z
IHJlc3VsdCBpbnRvIGEgcHJveHkgb2JqZWN0LgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvSW5qZWN0ZWRTY3JpcHQuanM6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5nZXRDb21wbGV0
aW9ucyk6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5ldmFsdWF0ZSk6CisgICAgICAgIChJbmpl
Y3RlZFNjcmlwdC5fZXZhbHVhdGVPbik6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5jcmVhdGVQ
cm94eU9iamVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlw
dEFjY2Vzcy5qczoKKwogMjAwOS0wOS0xMSAgQXJpeWEgSGlkYXlhdCAgPGFyaXlhLmhpZGF5YXRA
bm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCBhNWU4MTg0Li4yOTYwOGIx
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMTUyOSwx
OCArMTUyOSwxNyBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpTcGVjaWFsUGFuZWxzIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnNwZWNpYWxQYW5lbEZvckpTTmFtZShjbwogCiBTY3JpcHRWYWx1ZSBJbnNw
ZWN0b3JDb250cm9sbGVyOjp3cmFwT2JqZWN0KGNvbnN0IFNjcmlwdFZhbHVlJiBxdWFyYW50aW5l
ZE9iamVjdCkKIHsKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRTdGF0
ZSwgbV9pbmplY3RlZFNjcmlwdE9iaiwgImNyZWF0ZVByb3h5T2JqZWN0Iik7CisgICAgZnVuY3Rp
b24uYXBwZW5kQXJndW1lbnQocXVhcmFudGluZWRPYmplY3QpOwogICAgIGlmIChxdWFyYW50aW5l
ZE9iamVjdC5pc09iamVjdCgpKSB7CiAgICAgICAgIGxvbmcgaWQgPSBtX2xhc3RCb3VuZE9iamVj
dElkKys7CiAgICAgICAgIFN0cmluZyBvYmplY3RJZCA9IFN0cmluZzo6Zm9ybWF0KCJvYmplY3Qj
JWxkIiwgaWQpOwogICAgICAgICBtX2lkVG9Db25zb2xlT2JqZWN0LnNldChvYmplY3RJZCwgcXVh
cmFudGluZWRPYmplY3QpOwogCi0gICAgICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbiht
X3NjcmlwdFN0YXRlLCBtX2luamVjdGVkU2NyaXB0T2JqLCAiY3JlYXRlUHJveHlPYmplY3QiKTsK
LSAgICAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQocXVhcmFudGluZWRPYmplY3QpOwogICAg
ICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChvYmplY3RJZCk7Ci0gICAgICAgIFNjcmlwdFZh
bHVlIHdyYXBwZXIgPSBmdW5jdGlvbi5jYWxsKCk7Ci0gICAgICAgIHJldHVybiB3cmFwcGVyOwog
ICAgIH0KLSAgICByZXR1cm4gcXVhcmFudGluZWRPYmplY3Q7CisgICAgU2NyaXB0VmFsdWUgd3Jh
cHBlciA9IGZ1bmN0aW9uLmNhbGwoKTsKKyAgICByZXR1cm4gd3JhcHBlcjsKIH0KIAogU2NyaXB0
VmFsdWUgSW5zcGVjdG9yQ29udHJvbGxlcjo6dW53cmFwT2JqZWN0KGNvbnN0IFN0cmluZyYgb2Jq
ZWN0SWQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZp
ZXcuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcuanMKaW5kZXgg
MDIzYWU3Mi4uZDMxNzAzNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0NvbnNvbGVWaWV3LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xl
Vmlldy5qcwpAQCAtMjI0LDI0ICsyMjQsOCBAQCBXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJv
dG90eXBlID0gewogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgZnVuY3Rpb24g
cGFyc2luZ0NhbGxiYWNrKHJlc3VsdCwgaXNFeGNlcHRpb24pCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmICghaXNFeGNlcHRpb24pCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gSlNPTi5wYXJz
ZShyZXN1bHQpOwotICAgICAgICAgICAgcmVwb3J0Q29tcGxldGlvbnMocmVzdWx0LCBpc0V4Y2Vw
dGlvbik7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9ldmFsSW5JbnNwZWN0ZWRXaW5kb3co
Ci0gICAgICAgICAgICAiKGZ1bmN0aW9uKCkgeyIgKwotICAgICAgICAgICAgICAgICJ2YXIgcHJv
cHMgPSB7fTsiICsKLSAgICAgICAgICAgICAgICAiZm9yICh2YXIgcHJvcCBpbiAoIiArIGV4cHJl
c3Npb25TdHJpbmcgKyAiKSkgcHJvcHNbcHJvcF0gPSB0cnVlOyIgKwotICAgICAgICAgICAgICAg
ICgoIWRvdE5vdGF0aW9uICYmICFicmFja2V0Tm90YXRpb24pID8KLSAgICAgICAgICAgICAgICAi
Zm9yICh2YXIgcHJvcCBpbiB3aW5kb3cuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJKSIgKwotICAg
ICAgICAgICAgICAgICAgICAiaWYgKHByb3AuY2hhckF0KDApICE9PSAnXycpIHByb3BzW3Byb3Bd
ID0gdHJ1ZTsiCi0gICAgICAgICAgICAgICAgOiAiIikgKwotICAgICAgICAgICAgICAgICJyZXR1
cm4gSlNPTi5zdHJpbmdpZnkocHJvcHMpOyIgKwotICAgICAgICAgICAgIn0pKCkiLAotICAgICAg
ICAgICAgcGFyc2luZ0NhbGxiYWNrKTsKKyAgICAgICAgdmFyIGluY2x1ZGVJbnNwZWN0b3JDb21t
YW5kTGluZUFQSSA9ICghZG90Tm90YXRpb24gJiYgIWJyYWNrZXROb3RhdGlvbik7CisgICAgICAg
IEluamVjdGVkU2NyaXB0QWNjZXNzLmdldENvbXBsZXRpb25zKGV4cHJlc3Npb25TdHJpbmcsIGlu
Y2x1ZGVJbnNwZWN0b3JDb21tYW5kTGluZUFQSSwgcmVwb3J0Q29tcGxldGlvbnMpOwogICAgIH0s
CiAKICAgICBfcmVwb3J0Q29tcGxldGlvbnM6IGZ1bmN0aW9uKGJlc3RNYXRjaE9ubHksIGNvbXBs
ZXRpb25zUmVhZHlDYWxsYmFjaywgZG90Tm90YXRpb24sIGJyYWNrZXROb3RhdGlvbiwgcHJlZml4
LCByZXN1bHQsIGlzRXhjZXB0aW9uKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
SW5qZWN0ZWRTY3JpcHQuanMKaW5kZXggMmFhODgwMC4uMWQxOTZiNyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcwpAQCAtNDk0LDIxICs0OTQsMjkg
QEAgSW5qZWN0ZWRTY3JpcHQuc2V0UHJvcGVydHlWYWx1ZSA9IGZ1bmN0aW9uKG9iamVjdFByb3h5
LCBwcm9wZXJ0eU5hbWUsIGV4cHJlc3Npb24KICAgICB9CiB9CiAKLUluamVjdGVkU2NyaXB0LmV2
YWx1YXRlID0gZnVuY3Rpb24oZXhwcmVzc2lvbikKKworSW5qZWN0ZWRTY3JpcHQuZ2V0Q29tcGxl
dGlvbnMgPSBmdW5jdGlvbihleHByZXNzaW9uLCBpbmNsdWRlSW5zcGVjdG9yQ29tbWFuZExpbmVB
UEkpCiB7Ci0gICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Ll9ldmFsdWF0ZU9uKEluamVjdGVkU2Ny
aXB0Ll93aW5kb3coKS5ldmFsLCBJbmplY3RlZFNjcmlwdC5fd2luZG93KCksIGV4cHJlc3Npb24p
OworICAgIHZhciBwcm9wcyA9IHt9OworICAgIHRyeSB7CisgICAgICB2YXIgZXhwcmVzc2lvblJl
c3VsdCA9IEluamVjdGVkU2NyaXB0Ll9ldmFsdWF0ZU9uKEluamVjdGVkU2NyaXB0Ll93aW5kb3co
KS5ldmFsLCBJbmplY3RlZFNjcmlwdC5fd2luZG93KCksIGV4cHJlc3Npb24pOworICAgICAgZm9y
ICh2YXIgcHJvcCBpbiBleHByZXNzaW9uUmVzdWx0KQorICAgICAgICAgIHByb3BzW3Byb3BdID0g
dHJ1ZTsKKyAgICAgIGlmIChpbmNsdWRlSW5zcGVjdG9yQ29tbWFuZExpbmVBUEkpCisgICAgICAg
ICAgZm9yICh2YXIgcHJvcCBpbiBJbmplY3RlZFNjcmlwdC5fd2luZG93KCkuX2luc3BlY3RvckNv
bW1hbmRMaW5lQVBJKQorICAgICAgICAgICAgICBpZiAocHJvcC5jaGFyQXQoMCkgIT09ICdfJykK
KyAgICAgICAgICAgICAgICAgIHByb3BzW3Byb3BdID0gdHJ1ZTsKKyAgICB9IGNhdGNoKGUpIHsK
KyAgICB9CisgICAgcmV0dXJuIHByb3BzOwogfQorICAgIAogCi1JbmplY3RlZFNjcmlwdC5fZXZh
bHVhdGVPbiA9IGZ1bmN0aW9uKGV2YWxGdW5jdGlvbiwgb2JqZWN0LCBleHByZXNzaW9uKQorSW5q
ZWN0ZWRTY3JpcHQuZXZhbHVhdGUgPSBmdW5jdGlvbihleHByZXNzaW9uKQogewotICAgIEluamVj
dGVkU2NyaXB0Ll9lbnN1cmVDb21tYW5kTGluZUFQSUluc3RhbGxlZCgpOwotICAgIC8vIFN1cnJv
dW5kIHRoZSBleHByZXNzaW9uIGluIHdpdGggc3RhdGVtZW50cyB0byBpbmplY3Qgb3VyIGNvbW1h
bmQgbGluZSBBUEkgc28gdGhhdAotICAgIC8vIHRoZSB3aW5kb3cgb2JqZWN0IHByb3BlcnRpZXMg
c3RpbGwgdGFrZSBtb3JlIHByZWNlZGVudCB0aGFuIG91ciBBUEkgZnVuY3Rpb25zLgotICAgIGV4
cHJlc3Npb24gPSAid2l0aCAod2luZG93Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQSSkgeyB3aXRo
ICh3aW5kb3cpIHsgIiArIGV4cHJlc3Npb24gKyAiIH0gfSI7Ci0KICAgICB2YXIgcmVzdWx0ID0g
e307CiAgICAgdHJ5IHsKLSAgICAgICAgdmFyIHZhbHVlID0gZXZhbEZ1bmN0aW9uLmNhbGwob2Jq
ZWN0LCBleHByZXNzaW9uKTsKKyAgICAgICAgdmFyIHZhbHVlID0gSW5qZWN0ZWRTY3JpcHQuX2V2
YWx1YXRlT24oSW5qZWN0ZWRTY3JpcHQuX3dpbmRvdygpLmV2YWwsIEluamVjdGVkU2NyaXB0Ll93
aW5kb3coKSwgZXhwcmVzc2lvbik7CiAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkKICAgICAg
ICAgICAgIHJldHVybiB7IHZhbHVlOiBudWxsIH07CiAgICAgICAgIGlmIChPYmplY3QudHlwZSh2
YWx1ZSkgPT09ICJlcnJvciIpIHsKQEAgLTUzMSw2ICs1MzksMTUgQEAgSW5qZWN0ZWRTY3JpcHQu
X2V2YWx1YXRlT24gPSBmdW5jdGlvbihldmFsRnVuY3Rpb24sIG9iamVjdCwgZXhwcmVzc2lvbikK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCitJbmplY3RlZFNjcmlwdC5fZXZhbHVhdGVPbiA9IGZ1
bmN0aW9uKGV2YWxGdW5jdGlvbiwgb2JqZWN0LCBleHByZXNzaW9uKQoreworICAgIEluamVjdGVk
U2NyaXB0Ll9lbnN1cmVDb21tYW5kTGluZUFQSUluc3RhbGxlZCgpOworICAgIC8vIFN1cnJvdW5k
IHRoZSBleHByZXNzaW9uIGluIHdpdGggc3RhdGVtZW50cyB0byBpbmplY3Qgb3VyIGNvbW1hbmQg
bGluZSBBUEkgc28gdGhhdAorICAgIC8vIHRoZSB3aW5kb3cgb2JqZWN0IHByb3BlcnRpZXMgc3Rp
bGwgdGFrZSBtb3JlIHByZWNlZGVudCB0aGFuIG91ciBBUEkgZnVuY3Rpb25zLgorICAgIGV4cHJl
c3Npb24gPSAid2l0aCAod2luZG93Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQSSkgeyB3aXRoICh3
aW5kb3cpIHsgIiArIGV4cHJlc3Npb24gKyAiIH0gfSI7CisgICAgcmV0dXJuIGV2YWxGdW5jdGlv
bi5jYWxsKG9iamVjdCwgZXhwcmVzc2lvbik7Cit9CisKIEluamVjdGVkU2NyaXB0LmFkZEluc3Bl
Y3RlZE5vZGUgPSBmdW5jdGlvbihub2RlSWQpCiB7CiAgICAgdmFyIG5vZGUgPSBJbmplY3RlZFNj
cmlwdC5fbm9kZUZvcklkKG5vZGVJZCk7CkBAIC05NDYsNyArOTYzLDcgQEAgSW5qZWN0ZWRTY3Jp
cHQuY3JlYXRlUHJveHlPYmplY3QgPSBmdW5jdGlvbihvYmplY3QsIG9iamVjdElkLCBhYmJyZXZp
YXRlKQogICAgIHJlc3VsdC50eXBlID0gT2JqZWN0LnR5cGUob2JqZWN0KTsKIAogICAgIHZhciB0
eXBlID0gdHlwZW9mIG9iamVjdDsKLSAgICBpZiAodHlwZSA9PT0gIm9iamVjdCIgfHwgdHlwZSA9
PT0gImZ1bmN0aW9uIikgeworICAgIGlmICgodHlwZSA9PT0gIm9iamVjdCIgJiYgb2JqZWN0ICE9
PSBudWxsKSB8fCB0eXBlID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgIGZvciAodmFyIHN1YlBy
b3BlcnR5TmFtZSBpbiBvYmplY3QpIHsKICAgICAgICAgICAgIHJlc3VsdC5oYXNDaGlsZHJlbiA9
IHRydWU7CiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5qcwppbmRleCBhNWJlMmQ4Li5kYTg1ZDAzIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHRBY2Nl
c3MuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0QWNj
ZXNzLmpzCkBAIC02Myw2ICs2Myw3IEBAIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFu
ZGxlcigic2V0U3R5bGVQcm9wZXJ0eSIpOwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxI
YW5kbGVyKCJnZXRQcm90b3R5cGVzIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhh
bmRsZXIoImdldFByb3BlcnRpZXMiKTsKIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFu
ZGxlcigic2V0UHJvcGVydHlWYWx1ZSIpOworSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxI
YW5kbGVyKCJnZXRDb21wbGV0aW9ucyIpOwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxI
YW5kbGVyKCJldmFsdWF0ZSIpOwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVy
KCJhZGRJbnNwZWN0ZWROb2RlIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRs
ZXIoInB1c2hOb2RlVG9Gcm9udGVuZCIpOwo=
</data>
<flag name="review"
          id="20526"
          type_id="1"
          status="-"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39536</attachid>
            <date>2009-09-14 00:10:48 -0700</date>
            <delta_ts>2009-09-14 10:21:37 -0700</delta_ts>
            <desc>patch</desc>
            <filename>proxy-primitives2.patch</filename>
            <type>text/plain</type>
            <size>6303</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggYTVlODE4NC4u
Mjk2MDhiMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAg
LTE1MjksMTggKzE1MjksMTcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6U3BlY2lhbFBhbmVscyBJ
bnNwZWN0b3JDb250cm9sbGVyOjpzcGVjaWFsUGFuZWxGb3JKU05hbWUoY28KIAogU2NyaXB0VmFs
dWUgSW5zcGVjdG9yQ29udHJvbGxlcjo6d3JhcE9iamVjdChjb25zdCBTY3JpcHRWYWx1ZSYgcXVh
cmFudGluZWRPYmplY3QpCiB7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fc2Ny
aXB0U3RhdGUsIG1faW5qZWN0ZWRTY3JpcHRPYmosICJjcmVhdGVQcm94eU9iamVjdCIpOworICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHF1YXJhbnRpbmVkT2JqZWN0KTsKICAgICBpZiAocXVh
cmFudGluZWRPYmplY3QuaXNPYmplY3QoKSkgewogICAgICAgICBsb25nIGlkID0gbV9sYXN0Qm91
bmRPYmplY3RJZCsrOwogICAgICAgICBTdHJpbmcgb2JqZWN0SWQgPSBTdHJpbmc6OmZvcm1hdCgi
b2JqZWN0IyVsZCIsIGlkKTsKICAgICAgICAgbV9pZFRvQ29uc29sZU9iamVjdC5zZXQob2JqZWN0
SWQsIHF1YXJhbnRpbmVkT2JqZWN0KTsKIAotICAgICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVu
Y3Rpb24obV9zY3JpcHRTdGF0ZSwgbV9pbmplY3RlZFNjcmlwdE9iaiwgImNyZWF0ZVByb3h5T2Jq
ZWN0Iik7Ci0gICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHF1YXJhbnRpbmVkT2JqZWN0
KTsKICAgICAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQob2JqZWN0SWQpOwotICAgICAgICBT
Y3JpcHRWYWx1ZSB3cmFwcGVyID0gZnVuY3Rpb24uY2FsbCgpOwotICAgICAgICByZXR1cm4gd3Jh
cHBlcjsKICAgICB9Ci0gICAgcmV0dXJuIHF1YXJhbnRpbmVkT2JqZWN0OworICAgIFNjcmlwdFZh
bHVlIHdyYXBwZXIgPSBmdW5jdGlvbi5jYWxsKCk7CisgICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAK
IFNjcmlwdFZhbHVlIEluc3BlY3RvckNvbnRyb2xsZXI6OnVud3JhcE9iamVjdChjb25zdCBTdHJp
bmcmIG9iamVjdElkKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Nv
bnNvbGVWaWV3LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3Lmpz
CmluZGV4IGJhNjM3MmYuLmY1ZWE3ZGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9Db25zb2xlVmlldy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
Q29uc29sZVZpZXcuanMKQEAgLTI5MSwyNCArMjkxLDggQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVW
aWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGZ1
bmN0aW9uIHBhcnNpbmdDYWxsYmFjayhyZXN1bHQsIGlzRXhjZXB0aW9uKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoIWlzRXhjZXB0aW9uKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IEpT
T04ucGFyc2UocmVzdWx0KTsKLSAgICAgICAgICAgIHJlcG9ydENvbXBsZXRpb25zKHJlc3VsdCwg
aXNFeGNlcHRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fZXZhbEluSW5zcGVjdGVk
V2luZG93KAotICAgICAgICAgICAgIihmdW5jdGlvbigpIHsiICsKLSAgICAgICAgICAgICAgICAi
dmFyIHByb3BzID0ge307IiArCi0gICAgICAgICAgICAgICAgImZvciAodmFyIHByb3AgaW4gKCIg
KyBleHByZXNzaW9uU3RyaW5nICsgIikpIHByb3BzW3Byb3BdID0gdHJ1ZTsiICsKLSAgICAgICAg
ICAgICAgICAoKCFkb3ROb3RhdGlvbiAmJiAhYnJhY2tldE5vdGF0aW9uKSA/Ci0gICAgICAgICAg
ICAgICAgImZvciAodmFyIHByb3AgaW4gd2luZG93Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQSSki
ICsKLSAgICAgICAgICAgICAgICAgICAgImlmIChwcm9wLmNoYXJBdCgwKSAhPT0gJ18nKSBwcm9w
c1twcm9wXSA9IHRydWU7IgotICAgICAgICAgICAgICAgIDogIiIpICsKLSAgICAgICAgICAgICAg
ICAicmV0dXJuIEpTT04uc3RyaW5naWZ5KHByb3BzKTsiICsKLSAgICAgICAgICAgICJ9KSgpIiwK
LSAgICAgICAgICAgIHBhcnNpbmdDYWxsYmFjayk7CisgICAgICAgIHZhciBpbmNsdWRlSW5zcGVj
dG9yQ29tbWFuZExpbmVBUEkgPSAoIWRvdE5vdGF0aW9uICYmICFicmFja2V0Tm90YXRpb24pOwor
ICAgICAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXRDb21wbGV0aW9ucyhleHByZXNzaW9uU3Ry
aW5nLCBpbmNsdWRlSW5zcGVjdG9yQ29tbWFuZExpbmVBUEksIHJlcG9ydENvbXBsZXRpb25zKTsK
ICAgICB9LAogCiAgICAgX3JlcG9ydENvbXBsZXRpb25zOiBmdW5jdGlvbihiZXN0TWF0Y2hPbmx5
LCBjb21wbGV0aW9uc1JlYWR5Q2FsbGJhY2ssIGRvdE5vdGF0aW9uLCBicmFja2V0Tm90YXRpb24s
IHByZWZpeCwgcmVzdWx0LCBpc0V4Y2VwdGlvbikgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0luamVjdGVkU2NyaXB0LmpzCmluZGV4IDJhYTg4MDAuLjFkMTk2YjcgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcworKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMKQEAgLTQ5NCwyMSAr
NDk0LDI5IEBAIEluamVjdGVkU2NyaXB0LnNldFByb3BlcnR5VmFsdWUgPSBmdW5jdGlvbihvYmpl
Y3RQcm94eSwgcHJvcGVydHlOYW1lLCBleHByZXNzaW9uCiAgICAgfQogfQogCi1JbmplY3RlZFNj
cmlwdC5ldmFsdWF0ZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pCisKK0luamVjdGVkU2NyaXB0Lmdl
dENvbXBsZXRpb25zID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgaW5jbHVkZUluc3BlY3RvckNvbW1h
bmRMaW5lQVBJKQogewotICAgIHJldHVybiBJbmplY3RlZFNjcmlwdC5fZXZhbHVhdGVPbihJbmpl
Y3RlZFNjcmlwdC5fd2luZG93KCkuZXZhbCwgSW5qZWN0ZWRTY3JpcHQuX3dpbmRvdygpLCBleHBy
ZXNzaW9uKTsKKyAgICB2YXIgcHJvcHMgPSB7fTsKKyAgICB0cnkgeworICAgICAgdmFyIGV4cHJl
c3Npb25SZXN1bHQgPSBJbmplY3RlZFNjcmlwdC5fZXZhbHVhdGVPbihJbmplY3RlZFNjcmlwdC5f
d2luZG93KCkuZXZhbCwgSW5qZWN0ZWRTY3JpcHQuX3dpbmRvdygpLCBleHByZXNzaW9uKTsKKyAg
ICAgIGZvciAodmFyIHByb3AgaW4gZXhwcmVzc2lvblJlc3VsdCkKKyAgICAgICAgICBwcm9wc1tw
cm9wXSA9IHRydWU7CisgICAgICBpZiAoaW5jbHVkZUluc3BlY3RvckNvbW1hbmRMaW5lQVBJKQor
ICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gSW5qZWN0ZWRTY3JpcHQuX3dpbmRvdygpLl9pbnNw
ZWN0b3JDb21tYW5kTGluZUFQSSkKKyAgICAgICAgICAgICAgaWYgKHByb3AuY2hhckF0KDApICE9
PSAnXycpCisgICAgICAgICAgICAgICAgICBwcm9wc1twcm9wXSA9IHRydWU7CisgICAgfSBjYXRj
aChlKSB7CisgICAgfQorICAgIHJldHVybiBwcm9wczsKIH0KKyAgICAKIAotSW5qZWN0ZWRTY3Jp
cHQuX2V2YWx1YXRlT24gPSBmdW5jdGlvbihldmFsRnVuY3Rpb24sIG9iamVjdCwgZXhwcmVzc2lv
bikKK0luamVjdGVkU2NyaXB0LmV2YWx1YXRlID0gZnVuY3Rpb24oZXhwcmVzc2lvbikKIHsKLSAg
ICBJbmplY3RlZFNjcmlwdC5fZW5zdXJlQ29tbWFuZExpbmVBUElJbnN0YWxsZWQoKTsKLSAgICAv
LyBTdXJyb3VuZCB0aGUgZXhwcmVzc2lvbiBpbiB3aXRoIHN0YXRlbWVudHMgdG8gaW5qZWN0IG91
ciBjb21tYW5kIGxpbmUgQVBJIHNvIHRoYXQKLSAgICAvLyB0aGUgd2luZG93IG9iamVjdCBwcm9w
ZXJ0aWVzIHN0aWxsIHRha2UgbW9yZSBwcmVjZWRlbnQgdGhhbiBvdXIgQVBJIGZ1bmN0aW9ucy4K
LSAgICBleHByZXNzaW9uID0gIndpdGggKHdpbmRvdy5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkp
IHsgd2l0aCAod2luZG93KSB7ICIgKyBleHByZXNzaW9uICsgIiB9IH0iOwotCiAgICAgdmFyIHJl
c3VsdCA9IHt9OwogICAgIHRyeSB7Ci0gICAgICAgIHZhciB2YWx1ZSA9IGV2YWxGdW5jdGlvbi5j
YWxsKG9iamVjdCwgZXhwcmVzc2lvbik7CisgICAgICAgIHZhciB2YWx1ZSA9IEluamVjdGVkU2Ny
aXB0Ll9ldmFsdWF0ZU9uKEluamVjdGVkU2NyaXB0Ll93aW5kb3coKS5ldmFsLCBJbmplY3RlZFNj
cmlwdC5fd2luZG93KCksIGV4cHJlc3Npb24pOwogICAgICAgICBpZiAodmFsdWUgPT09IG51bGwp
CiAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbnVsbCB9OwogICAgICAgICBpZiAoT2JqZWN0
LnR5cGUodmFsdWUpID09PSAiZXJyb3IiKSB7CkBAIC01MzEsNiArNTM5LDE1IEBAIEluamVjdGVk
U2NyaXB0Ll9ldmFsdWF0ZU9uID0gZnVuY3Rpb24oZXZhbEZ1bmN0aW9uLCBvYmplY3QsIGV4cHJl
c3Npb24pCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorSW5qZWN0ZWRTY3JpcHQuX2V2YWx1YXRl
T24gPSBmdW5jdGlvbihldmFsRnVuY3Rpb24sIG9iamVjdCwgZXhwcmVzc2lvbikKK3sKKyAgICBJ
bmplY3RlZFNjcmlwdC5fZW5zdXJlQ29tbWFuZExpbmVBUElJbnN0YWxsZWQoKTsKKyAgICAvLyBT
dXJyb3VuZCB0aGUgZXhwcmVzc2lvbiBpbiB3aXRoIHN0YXRlbWVudHMgdG8gaW5qZWN0IG91ciBj
b21tYW5kIGxpbmUgQVBJIHNvIHRoYXQKKyAgICAvLyB0aGUgd2luZG93IG9iamVjdCBwcm9wZXJ0
aWVzIHN0aWxsIHRha2UgbW9yZSBwcmVjZWRlbnQgdGhhbiBvdXIgQVBJIGZ1bmN0aW9ucy4KKyAg
ICBleHByZXNzaW9uID0gIndpdGggKHdpbmRvdy5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkpIHsg
d2l0aCAod2luZG93KSB7ICIgKyBleHByZXNzaW9uICsgIiB9IH0iOworICAgIHJldHVybiBldmFs
RnVuY3Rpb24uY2FsbChvYmplY3QsIGV4cHJlc3Npb24pOworfQorCiBJbmplY3RlZFNjcmlwdC5h
ZGRJbnNwZWN0ZWROb2RlID0gZnVuY3Rpb24obm9kZUlkKQogewogICAgIHZhciBub2RlID0gSW5q
ZWN0ZWRTY3JpcHQuX25vZGVGb3JJZChub2RlSWQpOwpAQCAtOTQ2LDcgKzk2Myw3IEBAIEluamVj
dGVkU2NyaXB0LmNyZWF0ZVByb3h5T2JqZWN0ID0gZnVuY3Rpb24ob2JqZWN0LCBvYmplY3RJZCwg
YWJicmV2aWF0ZSkKICAgICByZXN1bHQudHlwZSA9IE9iamVjdC50eXBlKG9iamVjdCk7CiAKICAg
ICB2YXIgdHlwZSA9IHR5cGVvZiBvYmplY3Q7Ci0gICAgaWYgKHR5cGUgPT09ICJvYmplY3QiIHx8
IHR5cGUgPT09ICJmdW5jdGlvbiIpIHsKKyAgICBpZiAoKHR5cGUgPT09ICJvYmplY3QiICYmIG9i
amVjdCAhPT0gbnVsbCkgfHwgdHlwZSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICBmb3IgKHZh
ciBzdWJQcm9wZXJ0eU5hbWUgaW4gb2JqZWN0KSB7CiAgICAgICAgICAgICByZXN1bHQuaGFzQ2hp
bGRyZW4gPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuanMgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuanMKaW5kZXggYTViZTJkOC4uZGE4
NWQwMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2Ny
aXB0QWNjZXNzLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNj
cmlwdEFjY2Vzcy5qcwpAQCAtNjMsNiArNjMsNyBAQCBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5z
dGFsbEhhbmRsZXIoInNldFN0eWxlUHJvcGVydHkiKTsKIEluamVjdGVkU2NyaXB0QWNjZXNzLl9p
bnN0YWxsSGFuZGxlcigiZ2V0UHJvdG90eXBlcyIpOwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2lu
c3RhbGxIYW5kbGVyKCJnZXRQcm9wZXJ0aWVzIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5z
dGFsbEhhbmRsZXIoInNldFByb3BlcnR5VmFsdWUiKTsKK0luamVjdGVkU2NyaXB0QWNjZXNzLl9p
bnN0YWxsSGFuZGxlcigiZ2V0Q29tcGxldGlvbnMiKTsKIEluamVjdGVkU2NyaXB0QWNjZXNzLl9p
bnN0YWxsSGFuZGxlcigiZXZhbHVhdGUiKTsKIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxs
SGFuZGxlcigiYWRkSW5zcGVjdGVkTm9kZSIpOwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3Rh
bGxIYW5kbGVyKCJwdXNoTm9kZVRvRnJvbnRlbmQiKTsK
</data>
<flag name="review"
          id="20636"
          type_id="1"
          status="-"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39551</attachid>
            <date>2009-09-14 10:21:37 -0700</date>
            <delta_ts>2009-09-17 02:56:06 -0700</delta_ts>
            <desc>patch</desc>
            <filename>proxy-primitives3.patch</filename>
            <type>text/plain</type>
            <size>6317</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggYTVlODE4NC4u
Mjk2MDhiMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAg
LTE1MjksMTggKzE1MjksMTcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6U3BlY2lhbFBhbmVscyBJ
bnNwZWN0b3JDb250cm9sbGVyOjpzcGVjaWFsUGFuZWxGb3JKU05hbWUoY28KIAogU2NyaXB0VmFs
dWUgSW5zcGVjdG9yQ29udHJvbGxlcjo6d3JhcE9iamVjdChjb25zdCBTY3JpcHRWYWx1ZSYgcXVh
cmFudGluZWRPYmplY3QpCiB7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fc2Ny
aXB0U3RhdGUsIG1faW5qZWN0ZWRTY3JpcHRPYmosICJjcmVhdGVQcm94eU9iamVjdCIpOworICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHF1YXJhbnRpbmVkT2JqZWN0KTsKICAgICBpZiAocXVh
cmFudGluZWRPYmplY3QuaXNPYmplY3QoKSkgewogICAgICAgICBsb25nIGlkID0gbV9sYXN0Qm91
bmRPYmplY3RJZCsrOwogICAgICAgICBTdHJpbmcgb2JqZWN0SWQgPSBTdHJpbmc6OmZvcm1hdCgi
b2JqZWN0IyVsZCIsIGlkKTsKICAgICAgICAgbV9pZFRvQ29uc29sZU9iamVjdC5zZXQob2JqZWN0
SWQsIHF1YXJhbnRpbmVkT2JqZWN0KTsKIAotICAgICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVu
Y3Rpb24obV9zY3JpcHRTdGF0ZSwgbV9pbmplY3RlZFNjcmlwdE9iaiwgImNyZWF0ZVByb3h5T2Jq
ZWN0Iik7Ci0gICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHF1YXJhbnRpbmVkT2JqZWN0
KTsKICAgICAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQob2JqZWN0SWQpOwotICAgICAgICBT
Y3JpcHRWYWx1ZSB3cmFwcGVyID0gZnVuY3Rpb24uY2FsbCgpOwotICAgICAgICByZXR1cm4gd3Jh
cHBlcjsKICAgICB9Ci0gICAgcmV0dXJuIHF1YXJhbnRpbmVkT2JqZWN0OworICAgIFNjcmlwdFZh
bHVlIHdyYXBwZXIgPSBmdW5jdGlvbi5jYWxsKCk7CisgICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAK
IFNjcmlwdFZhbHVlIEluc3BlY3RvckNvbnRyb2xsZXI6OnVud3JhcE9iamVjdChjb25zdCBTdHJp
bmcmIG9iamVjdElkKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Nv
bnNvbGVWaWV3LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3Lmpz
CmluZGV4IGJhNjM3MmYuLmY1ZWE3ZGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9Db25zb2xlVmlldy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
Q29uc29sZVZpZXcuanMKQEAgLTI5MSwyNCArMjkxLDggQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVW
aWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGZ1
bmN0aW9uIHBhcnNpbmdDYWxsYmFjayhyZXN1bHQsIGlzRXhjZXB0aW9uKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoIWlzRXhjZXB0aW9uKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IEpT
T04ucGFyc2UocmVzdWx0KTsKLSAgICAgICAgICAgIHJlcG9ydENvbXBsZXRpb25zKHJlc3VsdCwg
aXNFeGNlcHRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fZXZhbEluSW5zcGVjdGVk
V2luZG93KAotICAgICAgICAgICAgIihmdW5jdGlvbigpIHsiICsKLSAgICAgICAgICAgICAgICAi
dmFyIHByb3BzID0ge307IiArCi0gICAgICAgICAgICAgICAgImZvciAodmFyIHByb3AgaW4gKCIg
KyBleHByZXNzaW9uU3RyaW5nICsgIikpIHByb3BzW3Byb3BdID0gdHJ1ZTsiICsKLSAgICAgICAg
ICAgICAgICAoKCFkb3ROb3RhdGlvbiAmJiAhYnJhY2tldE5vdGF0aW9uKSA/Ci0gICAgICAgICAg
ICAgICAgImZvciAodmFyIHByb3AgaW4gd2luZG93Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQSSki
ICsKLSAgICAgICAgICAgICAgICAgICAgImlmIChwcm9wLmNoYXJBdCgwKSAhPT0gJ18nKSBwcm9w
c1twcm9wXSA9IHRydWU7IgotICAgICAgICAgICAgICAgIDogIiIpICsKLSAgICAgICAgICAgICAg
ICAicmV0dXJuIEpTT04uc3RyaW5naWZ5KHByb3BzKTsiICsKLSAgICAgICAgICAgICJ9KSgpIiwK
LSAgICAgICAgICAgIHBhcnNpbmdDYWxsYmFjayk7CisgICAgICAgIHZhciBpbmNsdWRlSW5zcGVj
dG9yQ29tbWFuZExpbmVBUEkgPSAoIWRvdE5vdGF0aW9uICYmICFicmFja2V0Tm90YXRpb24pOwor
ICAgICAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXRDb21wbGV0aW9ucyhleHByZXNzaW9uU3Ry
aW5nLCBpbmNsdWRlSW5zcGVjdG9yQ29tbWFuZExpbmVBUEksIHJlcG9ydENvbXBsZXRpb25zKTsK
ICAgICB9LAogCiAgICAgX3JlcG9ydENvbXBsZXRpb25zOiBmdW5jdGlvbihiZXN0TWF0Y2hPbmx5
LCBjb21wbGV0aW9uc1JlYWR5Q2FsbGJhY2ssIGRvdE5vdGF0aW9uLCBicmFja2V0Tm90YXRpb24s
IHByZWZpeCwgcmVzdWx0LCBpc0V4Y2VwdGlvbikgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0luamVjdGVkU2NyaXB0LmpzCmluZGV4IDJhYTg4MDAuLmE1Y2QxOTEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcworKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMKQEAgLTQ5NCwyMSAr
NDk0LDI5IEBAIEluamVjdGVkU2NyaXB0LnNldFByb3BlcnR5VmFsdWUgPSBmdW5jdGlvbihvYmpl
Y3RQcm94eSwgcHJvcGVydHlOYW1lLCBleHByZXNzaW9uCiAgICAgfQogfQogCi1JbmplY3RlZFNj
cmlwdC5ldmFsdWF0ZSA9IGZ1bmN0aW9uKGV4cHJlc3Npb24pCisKK0luamVjdGVkU2NyaXB0Lmdl
dENvbXBsZXRpb25zID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgaW5jbHVkZUluc3BlY3RvckNvbW1h
bmRMaW5lQVBJKQogewotICAgIHJldHVybiBJbmplY3RlZFNjcmlwdC5fZXZhbHVhdGVPbihJbmpl
Y3RlZFNjcmlwdC5fd2luZG93KCkuZXZhbCwgSW5qZWN0ZWRTY3JpcHQuX3dpbmRvdygpLCBleHBy
ZXNzaW9uKTsKKyAgICB2YXIgcHJvcHMgPSB7fTsKKyAgICB0cnkgeworICAgICAgICB2YXIgZXhw
cmVzc2lvblJlc3VsdCA9IEluamVjdGVkU2NyaXB0Ll9ldmFsdWF0ZU9uKEluamVjdGVkU2NyaXB0
Ll93aW5kb3coKS5ldmFsLCBJbmplY3RlZFNjcmlwdC5fd2luZG93KCksIGV4cHJlc3Npb24pOwor
ICAgICAgICBmb3IgKHZhciBwcm9wIGluIGV4cHJlc3Npb25SZXN1bHQpCisgICAgICAgICAgICBw
cm9wc1twcm9wXSA9IHRydWU7CisgICAgICAgIGlmIChpbmNsdWRlSW5zcGVjdG9yQ29tbWFuZExp
bmVBUEkpCisgICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIEluamVjdGVkU2NyaXB0Ll93aW5k
b3coKS5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkpCisgICAgICAgICAgICAgICAgaWYgKHByb3Au
Y2hhckF0KDApICE9PSAnXycpCisgICAgICAgICAgICAgICAgICAgIHByb3BzW3Byb3BdID0gdHJ1
ZTsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICB9CisgICAgcmV0dXJuIHByb3BzOwogfQorICAgIAog
Ci1JbmplY3RlZFNjcmlwdC5fZXZhbHVhdGVPbiA9IGZ1bmN0aW9uKGV2YWxGdW5jdGlvbiwgb2Jq
ZWN0LCBleHByZXNzaW9uKQorSW5qZWN0ZWRTY3JpcHQuZXZhbHVhdGUgPSBmdW5jdGlvbihleHBy
ZXNzaW9uKQogewotICAgIEluamVjdGVkU2NyaXB0Ll9lbnN1cmVDb21tYW5kTGluZUFQSUluc3Rh
bGxlZCgpOwotICAgIC8vIFN1cnJvdW5kIHRoZSBleHByZXNzaW9uIGluIHdpdGggc3RhdGVtZW50
cyB0byBpbmplY3Qgb3VyIGNvbW1hbmQgbGluZSBBUEkgc28gdGhhdAotICAgIC8vIHRoZSB3aW5k
b3cgb2JqZWN0IHByb3BlcnRpZXMgc3RpbGwgdGFrZSBtb3JlIHByZWNlZGVudCB0aGFuIG91ciBB
UEkgZnVuY3Rpb25zLgotICAgIGV4cHJlc3Npb24gPSAid2l0aCAod2luZG93Ll9pbnNwZWN0b3JD
b21tYW5kTGluZUFQSSkgeyB3aXRoICh3aW5kb3cpIHsgIiArIGV4cHJlc3Npb24gKyAiIH0gfSI7
Ci0KICAgICB2YXIgcmVzdWx0ID0ge307CiAgICAgdHJ5IHsKLSAgICAgICAgdmFyIHZhbHVlID0g
ZXZhbEZ1bmN0aW9uLmNhbGwob2JqZWN0LCBleHByZXNzaW9uKTsKKyAgICAgICAgdmFyIHZhbHVl
ID0gSW5qZWN0ZWRTY3JpcHQuX2V2YWx1YXRlT24oSW5qZWN0ZWRTY3JpcHQuX3dpbmRvdygpLmV2
YWwsIEluamVjdGVkU2NyaXB0Ll93aW5kb3coKSwgZXhwcmVzc2lvbik7CiAgICAgICAgIGlmICh2
YWx1ZSA9PT0gbnVsbCkKICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBudWxsIH07CiAgICAg
ICAgIGlmIChPYmplY3QudHlwZSh2YWx1ZSkgPT09ICJlcnJvciIpIHsKQEAgLTUzMSw2ICs1Mzks
MTUgQEAgSW5qZWN0ZWRTY3JpcHQuX2V2YWx1YXRlT24gPSBmdW5jdGlvbihldmFsRnVuY3Rpb24s
IG9iamVjdCwgZXhwcmVzc2lvbikKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitJbmplY3RlZFNj
cmlwdC5fZXZhbHVhdGVPbiA9IGZ1bmN0aW9uKGV2YWxGdW5jdGlvbiwgb2JqZWN0LCBleHByZXNz
aW9uKQoreworICAgIEluamVjdGVkU2NyaXB0Ll9lbnN1cmVDb21tYW5kTGluZUFQSUluc3RhbGxl
ZCgpOworICAgIC8vIFN1cnJvdW5kIHRoZSBleHByZXNzaW9uIGluIHdpdGggc3RhdGVtZW50cyB0
byBpbmplY3Qgb3VyIGNvbW1hbmQgbGluZSBBUEkgc28gdGhhdAorICAgIC8vIHRoZSB3aW5kb3cg
b2JqZWN0IHByb3BlcnRpZXMgc3RpbGwgdGFrZSBtb3JlIHByZWNlZGVudCB0aGFuIG91ciBBUEkg
ZnVuY3Rpb25zLgorICAgIGV4cHJlc3Npb24gPSAid2l0aCAod2luZG93Ll9pbnNwZWN0b3JDb21t
YW5kTGluZUFQSSkgeyB3aXRoICh3aW5kb3cpIHsgIiArIGV4cHJlc3Npb24gKyAiIH0gfSI7Cisg
ICAgcmV0dXJuIGV2YWxGdW5jdGlvbi5jYWxsKG9iamVjdCwgZXhwcmVzc2lvbik7Cit9CisKIElu
amVjdGVkU2NyaXB0LmFkZEluc3BlY3RlZE5vZGUgPSBmdW5jdGlvbihub2RlSWQpCiB7CiAgICAg
dmFyIG5vZGUgPSBJbmplY3RlZFNjcmlwdC5fbm9kZUZvcklkKG5vZGVJZCk7CkBAIC05NDYsNyAr
OTYzLDcgQEAgSW5qZWN0ZWRTY3JpcHQuY3JlYXRlUHJveHlPYmplY3QgPSBmdW5jdGlvbihvYmpl
Y3QsIG9iamVjdElkLCBhYmJyZXZpYXRlKQogICAgIHJlc3VsdC50eXBlID0gT2JqZWN0LnR5cGUo
b2JqZWN0KTsKIAogICAgIHZhciB0eXBlID0gdHlwZW9mIG9iamVjdDsKLSAgICBpZiAodHlwZSA9
PT0gIm9iamVjdCIgfHwgdHlwZSA9PT0gImZ1bmN0aW9uIikgeworICAgIGlmICgodHlwZSA9PT0g
Im9iamVjdCIgJiYgb2JqZWN0ICE9PSBudWxsKSB8fCB0eXBlID09PSAiZnVuY3Rpb24iKSB7CiAg
ICAgICAgIGZvciAodmFyIHN1YlByb3BlcnR5TmFtZSBpbiBvYmplY3QpIHsKICAgICAgICAgICAg
IHJlc3VsdC5oYXNDaGlsZHJlbiA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5qcyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5qcwppbmRl
eCBhNWJlMmQ4Li5kYTg1ZDAzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0luamVjdGVkU2NyaXB0QWNjZXNzLmpzCkBAIC02Myw2ICs2Myw3IEBAIEluamVjdGVkU2Ny
aXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigic2V0U3R5bGVQcm9wZXJ0eSIpOwogSW5qZWN0ZWRT
Y3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJnZXRQcm90b3R5cGVzIik7CiBJbmplY3RlZFNj
cmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoImdldFByb3BlcnRpZXMiKTsKIEluamVjdGVkU2Ny
aXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigic2V0UHJvcGVydHlWYWx1ZSIpOworSW5qZWN0ZWRT
Y3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJnZXRDb21wbGV0aW9ucyIpOwogSW5qZWN0ZWRT
Y3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJldmFsdWF0ZSIpOwogSW5qZWN0ZWRTY3JpcHRB
Y2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJhZGRJbnNwZWN0ZWROb2RlIik7CiBJbmplY3RlZFNjcmlw
dEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoInB1c2hOb2RlVG9Gcm9udGVuZCIpOwo=
</data>
<flag name="review"
          id="20653"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39688</attachid>
            <date>2009-09-17 02:54:37 -0700</date>
            <delta_ts>2009-09-17 13:55:05 -0700</delta_ts>
            <desc>previous patch with changelog entry</desc>
            <filename>wrap-primitives.patch</filename>
            <type>text/plain</type>
            <size>7550</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OGEyNzhjZS4uZDI1YmE3MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAwOS0wOS0xNyAgWXVyeSBTZW1pa2hh
dHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXcmFwIHByaW1pdGl2ZSB2YWx1ZXMgKGFzIG9iamVjdHMpIGlu
IEluc3BlY3RvckNvbnRyb2xsZXI6OndyYXAuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI4OTgzCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
Ojp3cmFwT2JqZWN0KTogb2JqZWN0cyBvZiBhbnkgdHlwZSB3aWxsIGJlIHdyYXBwZWQgaW50byBw
cm94aWVzLAorICAgICAgICAgb25seSBvYmplY3QgcHJveGllcyB3aWxsIGhhdmUgb2JqZWN0SWQu
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUuY29tcGxldGlvbnMpOiB0aGVyZSBp
cyBJbmplY3RlZFNjcmlwdC5nZXRDb21wbGV0aW9uc2kKKyAgICAgICAgIHRoYXQgYWNjZXB0cyBh
biBleHByZXNzaW9uIGFuZCByZXR1cm5zIHBvc3NpYmxlIGNvbXBsZXRpb25zLiBUaGlzIHdheSB3
ZSBkb24ndCBuZWVkIHRvIHdyYXAKKyAgICAgICAgIGFuZCB1bndyYXAgdGhlIGNvbXBsZXRpb25z
IHJlc3VsdCBpbnRvIGEgcHJveHkgb2JqZWN0LgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvSW5qZWN0ZWRTY3JpcHQuanM6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5nZXRDb21wbGV0
aW9ucyk6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5ldmFsdWF0ZSk6CisgICAgICAgIChJbmpl
Y3RlZFNjcmlwdC5fZXZhbHVhdGVPbik6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5jcmVhdGVQ
cm94eU9iamVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlw
dEFjY2Vzcy5qczoKKwogMjAwOS0wOS0xNiAgRGFuaWVsIEJhdGVzICA8ZGJhdGVzQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDY0OThkODQuLmM2OWMzMjQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0xNTMxLDE4ICsxNTMxLDE3
IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6OlNwZWNpYWxQYW5lbHMgSW5zcGVjdG9yQ29udHJvbGxl
cjo6c3BlY2lhbFBhbmVsRm9ySlNOYW1lKGNvCiAKIFNjcmlwdFZhbHVlIEluc3BlY3RvckNvbnRy
b2xsZXI6OndyYXBPYmplY3QoY29uc3QgU2NyaXB0VmFsdWUmIHF1YXJhbnRpbmVkT2JqZWN0KQog
eworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX2luamVj
dGVkU2NyaXB0T2JqLCAiY3JlYXRlUHJveHlPYmplY3QiKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRB
cmd1bWVudChxdWFyYW50aW5lZE9iamVjdCk7CiAgICAgaWYgKHF1YXJhbnRpbmVkT2JqZWN0Lmlz
T2JqZWN0KCkpIHsKICAgICAgICAgbG9uZyBpZCA9IG1fbGFzdEJvdW5kT2JqZWN0SWQrKzsKICAg
ICAgICAgU3RyaW5nIG9iamVjdElkID0gU3RyaW5nOjpmb3JtYXQoIm9iamVjdCMlbGQiLCBpZCk7
CiAgICAgICAgIG1faWRUb0NvbnNvbGVPYmplY3Quc2V0KG9iamVjdElkLCBxdWFyYW50aW5lZE9i
amVjdCk7CiAKLSAgICAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3Rh
dGUsIG1faW5qZWN0ZWRTY3JpcHRPYmosICJjcmVhdGVQcm94eU9iamVjdCIpOwotICAgICAgICBm
dW5jdGlvbi5hcHBlbmRBcmd1bWVudChxdWFyYW50aW5lZE9iamVjdCk7CiAgICAgICAgIGZ1bmN0
aW9uLmFwcGVuZEFyZ3VtZW50KG9iamVjdElkKTsKLSAgICAgICAgU2NyaXB0VmFsdWUgd3JhcHBl
ciA9IGZ1bmN0aW9uLmNhbGwoKTsKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgfQotICAg
IHJldHVybiBxdWFyYW50aW5lZE9iamVjdDsKKyAgICBTY3JpcHRWYWx1ZSB3cmFwcGVyID0gZnVu
Y3Rpb24uY2FsbCgpOworICAgIHJldHVybiB3cmFwcGVyOwogfQogCiBTY3JpcHRWYWx1ZSBJbnNw
ZWN0b3JDb250cm9sbGVyOjp1bndyYXBPYmplY3QoY29uc3QgU3RyaW5nJiBvYmplY3RJZCkKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qcyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qcwppbmRleCA0MWIxNGVmLi5m
YTlhMzYzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZp
ZXcuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzCkBA
IC0yOTEsMjQgKzI5MSw4IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBmdW5jdGlvbiBwYXJzaW5nQ2Fs
bGJhY2socmVzdWx0LCBpc0V4Y2VwdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFp
c0V4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3VsdCk7
Ci0gICAgICAgICAgICByZXBvcnRDb21wbGV0aW9ucyhyZXN1bHQsIGlzRXhjZXB0aW9uKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHRoaXMuZXZhbEluSW5zcGVjdGVkV2luZG93KAotICAgICAgICAg
ICAgIihmdW5jdGlvbigpIHsiICsKLSAgICAgICAgICAgICAgICAidmFyIHByb3BzID0ge307IiAr
Ci0gICAgICAgICAgICAgICAgImZvciAodmFyIHByb3AgaW4gKCIgKyBleHByZXNzaW9uU3RyaW5n
ICsgIikpIHByb3BzW3Byb3BdID0gdHJ1ZTsiICsKLSAgICAgICAgICAgICAgICAoKCFkb3ROb3Rh
dGlvbiAmJiAhYnJhY2tldE5vdGF0aW9uKSA/Ci0gICAgICAgICAgICAgICAgImZvciAodmFyIHBy
b3AgaW4gd2luZG93Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQSSkiICsKLSAgICAgICAgICAgICAg
ICAgICAgImlmIChwcm9wLmNoYXJBdCgwKSAhPT0gJ18nKSBwcm9wc1twcm9wXSA9IHRydWU7Igot
ICAgICAgICAgICAgICAgIDogIiIpICsKLSAgICAgICAgICAgICAgICAicmV0dXJuIEpTT04uc3Ry
aW5naWZ5KHByb3BzKTsiICsKLSAgICAgICAgICAgICJ9KSgpIiwKLSAgICAgICAgICAgIHBhcnNp
bmdDYWxsYmFjayk7CisgICAgICAgIHZhciBpbmNsdWRlSW5zcGVjdG9yQ29tbWFuZExpbmVBUEkg
PSAoIWRvdE5vdGF0aW9uICYmICFicmFja2V0Tm90YXRpb24pOworICAgICAgICBJbmplY3RlZFNj
cmlwdEFjY2Vzcy5nZXRDb21wbGV0aW9ucyhleHByZXNzaW9uU3RyaW5nLCBpbmNsdWRlSW5zcGVj
dG9yQ29tbWFuZExpbmVBUEksIHJlcG9ydENvbXBsZXRpb25zKTsKICAgICB9LAogCiAgICAgX3Jl
cG9ydENvbXBsZXRpb25zOiBmdW5jdGlvbihiZXN0TWF0Y2hPbmx5LCBjb21wbGV0aW9uc1JlYWR5
Q2FsbGJhY2ssIGRvdE5vdGF0aW9uLCBicmFja2V0Tm90YXRpb24sIHByZWZpeCwgcmVzdWx0LCBp
c0V4Y2VwdGlvbikgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0lu
amVjdGVkU2NyaXB0LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2Ny
aXB0LmpzCmluZGV4IDAwM2U2OTQuLmIzZDk1NjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMKQEAgLTQ5OCwyMSArNDk4LDI5IEBAIEluamVjdGVk
U2NyaXB0LnNldFByb3BlcnR5VmFsdWUgPSBmdW5jdGlvbihvYmplY3RQcm94eSwgcHJvcGVydHlO
YW1lLCBleHByZXNzaW9uCiAgICAgfQogfQogCi1JbmplY3RlZFNjcmlwdC5ldmFsdWF0ZSA9IGZ1
bmN0aW9uKGV4cHJlc3Npb24pCisKK0luamVjdGVkU2NyaXB0LmdldENvbXBsZXRpb25zID0gZnVu
Y3Rpb24oZXhwcmVzc2lvbiwgaW5jbHVkZUluc3BlY3RvckNvbW1hbmRMaW5lQVBJKQogewotICAg
IHJldHVybiBJbmplY3RlZFNjcmlwdC5fZXZhbHVhdGVPbihJbmplY3RlZFNjcmlwdC5fd2luZG93
KCkuZXZhbCwgSW5qZWN0ZWRTY3JpcHQuX3dpbmRvdygpLCBleHByZXNzaW9uKTsKKyAgICB2YXIg
cHJvcHMgPSB7fTsKKyAgICB0cnkgeworICAgICAgICB2YXIgZXhwcmVzc2lvblJlc3VsdCA9IElu
amVjdGVkU2NyaXB0Ll9ldmFsdWF0ZU9uKEluamVjdGVkU2NyaXB0Ll93aW5kb3coKS5ldmFsLCBJ
bmplY3RlZFNjcmlwdC5fd2luZG93KCksIGV4cHJlc3Npb24pOworICAgICAgICBmb3IgKHZhciBw
cm9wIGluIGV4cHJlc3Npb25SZXN1bHQpCisgICAgICAgICAgICBwcm9wc1twcm9wXSA9IHRydWU7
CisgICAgICAgIGlmIChpbmNsdWRlSW5zcGVjdG9yQ29tbWFuZExpbmVBUEkpCisgICAgICAgICAg
ICBmb3IgKHZhciBwcm9wIGluIEluamVjdGVkU2NyaXB0Ll93aW5kb3coKS5faW5zcGVjdG9yQ29t
bWFuZExpbmVBUEkpCisgICAgICAgICAgICAgICAgaWYgKHByb3AuY2hhckF0KDApICE9PSAnXycp
CisgICAgICAgICAgICAgICAgICAgIHByb3BzW3Byb3BdID0gdHJ1ZTsKKyAgICB9IGNhdGNoKGUp
IHsKKyAgICB9CisgICAgcmV0dXJuIHByb3BzOwogfQogCi1JbmplY3RlZFNjcmlwdC5fZXZhbHVh
dGVPbiA9IGZ1bmN0aW9uKGV2YWxGdW5jdGlvbiwgb2JqZWN0LCBleHByZXNzaW9uKQotewotICAg
IEluamVjdGVkU2NyaXB0Ll9lbnN1cmVDb21tYW5kTGluZUFQSUluc3RhbGxlZCgpOwotICAgIC8v
IFN1cnJvdW5kIHRoZSBleHByZXNzaW9uIGluIHdpdGggc3RhdGVtZW50cyB0byBpbmplY3Qgb3Vy
IGNvbW1hbmQgbGluZSBBUEkgc28gdGhhdAotICAgIC8vIHRoZSB3aW5kb3cgb2JqZWN0IHByb3Bl
cnRpZXMgc3RpbGwgdGFrZSBtb3JlIHByZWNlZGVudCB0aGFuIG91ciBBUEkgZnVuY3Rpb25zLgot
ICAgIGV4cHJlc3Npb24gPSAid2l0aCAod2luZG93Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQSSkg
eyB3aXRoICh3aW5kb3cpIHsgIiArIGV4cHJlc3Npb24gKyAiIH0gfSI7CiAKK0luamVjdGVkU2Ny
aXB0LmV2YWx1YXRlID0gZnVuY3Rpb24oZXhwcmVzc2lvbikKK3sKICAgICB2YXIgcmVzdWx0ID0g
e307CiAgICAgdHJ5IHsKLSAgICAgICAgdmFyIHZhbHVlID0gZXZhbEZ1bmN0aW9uLmNhbGwob2Jq
ZWN0LCBleHByZXNzaW9uKTsKKyAgICAgICAgdmFyIHZhbHVlID0gSW5qZWN0ZWRTY3JpcHQuX2V2
YWx1YXRlT24oSW5qZWN0ZWRTY3JpcHQuX3dpbmRvdygpLmV2YWwsIEluamVjdGVkU2NyaXB0Ll93
aW5kb3coKSwgZXhwcmVzc2lvbik7CiAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkKICAgICAg
ICAgICAgIHJldHVybiB7IHZhbHVlOiBudWxsIH07CiAgICAgICAgIGlmIChPYmplY3QudHlwZSh2
YWx1ZSkgPT09ICJlcnJvciIpIHsKQEAgLTUzNSw2ICs1NDMsMTUgQEAgSW5qZWN0ZWRTY3JpcHQu
X2V2YWx1YXRlT24gPSBmdW5jdGlvbihldmFsRnVuY3Rpb24sIG9iamVjdCwgZXhwcmVzc2lvbikK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCitJbmplY3RlZFNjcmlwdC5fZXZhbHVhdGVPbiA9IGZ1
bmN0aW9uKGV2YWxGdW5jdGlvbiwgb2JqZWN0LCBleHByZXNzaW9uKQoreworICAgIEluamVjdGVk
U2NyaXB0Ll9lbnN1cmVDb21tYW5kTGluZUFQSUluc3RhbGxlZCgpOworICAgIC8vIFN1cnJvdW5k
IHRoZSBleHByZXNzaW9uIGluIHdpdGggc3RhdGVtZW50cyB0byBpbmplY3Qgb3VyIGNvbW1hbmQg
bGluZSBBUEkgc28gdGhhdAorICAgIC8vIHRoZSB3aW5kb3cgb2JqZWN0IHByb3BlcnRpZXMgc3Rp
bGwgdGFrZSBtb3JlIHByZWNlZGVudCB0aGFuIG91ciBBUEkgZnVuY3Rpb25zLgorICAgIGV4cHJl
c3Npb24gPSAid2l0aCAod2luZG93Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQSSkgeyB3aXRoICh3
aW5kb3cpIHsgIiArIGV4cHJlc3Npb24gKyAiIH0gfSI7CisgICAgcmV0dXJuIGV2YWxGdW5jdGlv
bi5jYWxsKG9iamVjdCwgZXhwcmVzc2lvbik7Cit9CisKIEluamVjdGVkU2NyaXB0LmFkZEluc3Bl
Y3RlZE5vZGUgPSBmdW5jdGlvbihub2RlSWQpCiB7CiAgICAgdmFyIG5vZGUgPSBJbmplY3RlZFNj
cmlwdC5fbm9kZUZvcklkKG5vZGVJZCk7CkBAIC05NTAsNyArOTY3LDcgQEAgSW5qZWN0ZWRTY3Jp
cHQuY3JlYXRlUHJveHlPYmplY3QgPSBmdW5jdGlvbihvYmplY3QsIG9iamVjdElkLCBhYmJyZXZp
YXRlKQogICAgIHJlc3VsdC50eXBlID0gT2JqZWN0LnR5cGUob2JqZWN0KTsKIAogICAgIHZhciB0
eXBlID0gdHlwZW9mIG9iamVjdDsKLSAgICBpZiAodHlwZSA9PT0gIm9iamVjdCIgfHwgdHlwZSA9
PT0gImZ1bmN0aW9uIikgeworICAgIGlmICgodHlwZSA9PT0gIm9iamVjdCIgJiYgb2JqZWN0ICE9
PSBudWxsKSB8fCB0eXBlID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgIGZvciAodmFyIHN1YlBy
b3BlcnR5TmFtZSBpbiBvYmplY3QpIHsKICAgICAgICAgICAgIHJlc3VsdC5oYXNDaGlsZHJlbiA9
IHRydWU7CiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5qcwppbmRleCBhNWJlMmQ4Li5kYTg1ZDAzIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHRBY2Nl
c3MuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0QWNj
ZXNzLmpzCkBAIC02Myw2ICs2Myw3IEBAIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFu
ZGxlcigic2V0U3R5bGVQcm9wZXJ0eSIpOwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxI
YW5kbGVyKCJnZXRQcm90b3R5cGVzIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhh
bmRsZXIoImdldFByb3BlcnRpZXMiKTsKIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFu
ZGxlcigic2V0UHJvcGVydHlWYWx1ZSIpOworSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxI
YW5kbGVyKCJnZXRDb21wbGV0aW9ucyIpOwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxI
YW5kbGVyKCJldmFsdWF0ZSIpOwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVy
KCJhZGRJbnNwZWN0ZWROb2RlIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRs
ZXIoInB1c2hOb2RlVG9Gcm9udGVuZCIpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>