<?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>31238</bug_id>
          
          <creation_ts>2009-11-08 02:20:21 -0800</creation_ts>
          <short_desc>Web Inspector: Inspector should support copy() in the command line</short_desc>
          <delta_ts>2009-11-08 22:39:46 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>0</everconfirmed>
          <reporter name="Keishi Hattori">keishi</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>commit-queue</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>161405</commentid>
    <comment_count>0</comment_count>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2009-11-08 02:20:21 -0800</bug_when>
    <thetext>I found an undocumented but useful Firebug Command Line API, copy(). It copies the argument to the pasteboard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161406</commentid>
    <comment_count>1</comment_count>
      <attachid>42711</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2009-11-08 02:26:00 -0800</bug_when>
    <thetext>Created attachment 42711
proposed patch

I had to use a horrific hack to get it to work. Is there a better way?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161408</commentid>
    <comment_count>2</comment_count>
      <attachid>42713</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2009-11-08 02:37:31 -0800</bug_when>
    <thetext>Created attachment 42713
proposed patch 2

added comment and added line breaks to the eval string.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161410</commentid>
    <comment_count>3</comment_count>
      <attachid>42713</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-11-08 03:59:00 -0800</bug_when>
    <thetext>Comment on attachment 42713
proposed patch 2

What you should do instead is:
- Introduce copyText in InspectorBackend.(idl, h, cpp). Just mimic copyNode there and pass text instead of node id.
- Implement it as Pasteboard::generalPasteboard()-&gt;writePlainText(text); (see copyNode again)
- Make a simple call to it from your new copy API method.

We could be even more cleaver here and copy markup in case selected object is node (make an instanceof check under copy and choose between copyText and copyNode to call). [object HTMLElement] is not too informative otherwise...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161484</commentid>
    <comment_count>4</comment_count>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2009-11-08 20:32:16 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 42713 [details])
&gt; What you should do instead is:
&gt; - Introduce copyText in InspectorBackend.(idl, h, cpp). Just mimic copyNode
&gt; there and pass text instead of node id.
&gt; - Implement it as Pasteboard::generalPasteboard()-&gt;writePlainText(text); (see
&gt; copyNode again)
&gt; - Make a simple call to it from your new copy API method.
&gt; 
&gt; We could be even more cleaver here and copy markup in case selected object is
&gt; node (make an instanceof check under copy and choose between copyText and
&gt; copyNode to call). [object HTMLElement] is not too informative otherwise…

I was able to get the copyText method working. I wanted to use copyNode for nodes but I couldn&apos;t figure out how to get the node id from a node?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161486</commentid>
    <comment_count>5</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-11-08 20:55:14 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 42713 [details] [details])
&gt; &gt; What you should do instead is:
&gt; &gt; - Introduce copyText in InspectorBackend.(idl, h, cpp). Just mimic copyNode
&gt; &gt; there and pass text instead of node id.
&gt; &gt; - Implement it as Pasteboard::generalPasteboard()-&gt;writePlainText(text); (see
&gt; &gt; copyNode again)
&gt; &gt; - Make a simple call to it from your new copy API method.
&gt; &gt; 
&gt; &gt; We could be even more cleaver here and copy markup in case selected object is
&gt; &gt; node (make an instanceof check under copy and choose between copyText and
&gt; &gt; copyNode to call). [object HTMLElement] is not too informative otherwise…
&gt; 
&gt; I was able to get the copyText method working. I wanted to use copyNode for
&gt; nodes but I couldn&apos;t figure out how to get the node id from a node?

Oh, sorry about the confusion.

Actually, given that copy is executed in the injectedscript already, there is no need to go from id to node in order to copy it. Your argument is already a real node, no need to resolve it by id. But there is no copyNode(Node) method in InspectorBackend because it would be [Custom] and there were actually no use cases for it...

I think you should either forget my suggestion about calling copyNode or do

var nodeId = InspectorController.pushNodePathToFrontend(node, false /* selectInUI */);

It would give you id for a node, but as a side affect it will also push it into the frontend in case it was not there. Which is actually fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161487</commentid>
    <comment_count>6</comment_count>
      <attachid>42730</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2009-11-08 21:14:59 -0800</bug_when>
    <thetext>Created attachment 42730
proposed patch 3

Thanks I get it now. So pushNodePathToFrontend does the mapping.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161495</commentid>
    <comment_count>7</comment_count>
      <attachid>42730</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-11-08 21:43:53 -0800</bug_when>
    <thetext>Comment on attachment 42730
proposed patch 3

&gt; +    void copyText(const String&amp; text);
&gt; +
&gt;      // Generic code called from custom implementations.
&gt;      void highlight(long nodeId);

Please move copyText into the &quot;Generic code called from custom implementations.&quot; (under that comment).


&gt; +    var inspectorCommandLineAPI = evalFunction.call(evalObject, &quot;window.console._inspectorCommandLineAPI = { \n\
&gt; +        $: function() { return document.getElementById.apply(document, arguments) }, \n\
&gt; +        $$: function() { return document.querySelectorAll.apply(document, arguments) }, \n\
&gt; +        $x: function(xpath, context) \n\
&gt; +        { \n\

I assume that the only change here is \n in the end (please confirm)?

r- for the copyText outside the injectedscript section, otherwise r+!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161496</commentid>
    <comment_count>8</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-11-08 21:51:24 -0800</bug_when>
    <thetext>Sorry, I meant to move copyText into the 

// Called from InjectedScript.
// TODO: extract into a separate IDL.

section in IDL, not custom in header... (Too early here, too much copypate).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161503</commentid>
    <comment_count>9</comment_count>
      <attachid>42734</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2009-11-08 22:16:03 -0800</bug_when>
    <thetext>Created attachment 42734
proposed patch 4

(In reply to comment #7)
&gt; I assume that the only change here is \n in the end (please confirm)?

Changes to the eval string is \n and K&amp;R style indentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161506</commentid>
    <comment_count>10</comment_count>
      <attachid>42734</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-08 22:39:41 -0800</bug_when>
    <thetext>Comment on attachment 42734
proposed patch 4

Clearing flags on attachment: 42734

Committed r50639: &lt;http://trac.webkit.org/changeset/50639&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161507</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-08 22:39:46 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42711</attachid>
            <date>2009-11-08 02:26:00 -0800</date>
            <delta_ts>2009-11-08 02:37:31 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>copy.diff</filename>
            <type>text/plain</type>
            <size>3523</size>
            <attacher name="Keishi Hattori">keishi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDYyMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMDktMTEtMDggIEtlaXNoaSBIYXR0b3JpICA8Y2FzZXkuaGF0dG9y
aUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV2ViIEluc3BlY3RvcjogSW5zcGVjdG9yIHNob3VsZCBzdXBwb3J0IGNvcHkoKSBpbiB0
aGUgY29tbWFuZCBsaW5lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zMTIzOAorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FdmVudExpc3Rl
bmVyc1NpZGViYXJQYW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJz
U2lkZWJhclBhbmUucHJvdG90eXBlLnVwZGF0ZS5jYWxsYmFjayk6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qczoKKyAgICAgICAgKEluamVjdGVkU2NyaXB0
Ll9lbnN1cmVDb21tYW5kTGluZUFQSUluc3RhbGxlZCk6IEFkZGVkIF9pbnNwZWN0b3JDb21tYW5k
TGluZUFQSS5jb3B5CisKIDIwMDktMTEtMDcgIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0V2ZW50TGlzdGVuZXJzU2lkZWJhclBhbmUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0V2ZW50TGlzdGVuZXJzU2lkZWJhclBh
bmUuanMJKHJldmlzaW9uIDUwNjE3KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0V2
ZW50TGlzdGVuZXJzU2lkZWJhclBhbmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcg
QEAgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJzU2lkZWJhclBhbmUucAogICAgICAgICAgICAg
ICAgIHZhciBldmVudExpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcnNbaV07CiAgICAgICAgICAgICAg
ICAgZXZlbnRMaXN0ZW5lci5ub2RlID0gV2ViSW5zcGVjdG9yLmRvbUFnZW50Lm5vZGVGb3JJZChl
dmVudExpc3RlbmVyLm5vZGVJZCk7CiAgICAgICAgICAgICAgICAgZGVsZXRlIGV2ZW50TGlzdGVu
ZXIubm9kZUlkOyAvLyBubyBsb25nZXIgbmVlZGVkCi0gICAgICAgICAgICAgICAgaWYgKC9eZnVu
Y3Rpb24gX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJX2xvZ0V2ZW50XCgvLnRlc3QoZXZlbnRMaXN0
ZW5lci5saXN0ZW5lci50b1N0cmluZygpKSkKKyAgICAgICAgICAgICAgICBpZiAoL15mdW5jdGlv
biBfaW5zcGVjdG9yQ29tbWFuZExpbmVBUElfKD86bG9nRXZlbnR8Y29weUhhbmRsZXIpXCgvLnRl
c3QoZXZlbnRMaXN0ZW5lci5saXN0ZW5lci50b1N0cmluZygpKSkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7IC8vIGlnbm9yZSBldmVudCBsaXN0ZW5lcnMgZ2VuZXJhdGVkIGJ5IG1vbml0
b3JFdmVudAogICAgICAgICAgICAgICAgIHZhciB0eXBlID0gZXZlbnRMaXN0ZW5lci50eXBlOwog
ICAgICAgICAgICAgICAgIHZhciBzZWN0aW9uID0gc2VjdGlvbk1hcFt0eXBlXTsKSW5kZXg6IFdl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMJKHJldmlzaW9u
IDUwNjE3KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0Lmpz
CSh3b3JraW5nIGNvcHkpCkBAIC05NjksNyArOTY5LDI1IEBAIEluamVjdGVkU2NyaXB0Ll9lbnN1
cmVDb21tYW5kTGluZUFQSUluc3QKICAgICAgICAgZ2V0ICQxKCkgeyByZXR1cm4gY29uc29sZS5f
aW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2luc3BlY3RlZE5vZGVzWzFdIH0sIFwKICAgICAgICAg
Z2V0ICQyKCkgeyByZXR1cm4gY29uc29sZS5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2luc3Bl
Y3RlZE5vZGVzWzJdIH0sIFwKICAgICAgICAgZ2V0ICQzKCkgeyByZXR1cm4gY29uc29sZS5faW5z
cGVjdG9yQ29tbWFuZExpbmVBUEkuX2luc3BlY3RlZE5vZGVzWzNdIH0sIFwKLSAgICAgICAgZ2V0
ICQ0KCkgeyByZXR1cm4gY29uc29sZS5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2luc3BlY3Rl
ZE5vZGVzWzRdIH0gXAorICAgICAgICBnZXQgJDQoKSB7IHJldHVybiBjb25zb2xlLl9pbnNwZWN0
b3JDb21tYW5kTGluZUFQSS5faW5zcGVjdGVkTm9kZXNbNF0gfSwgXAorICAgICAgICBfY29weUhh
bmRsZXI6IGZ1bmN0aW9uIF9pbnNwZWN0b3JDb21tYW5kTGluZUFQSV9jb3B5SGFuZGxlcihldmVu
dCkgXAorICAgICAgICB7IFwKKyAgICAgICAgICAgIGV2ZW50LmNsaXBib2FyZERhdGEuc2V0RGF0
YShcInRleHQvcGxhaW5cIiwgY29uc29sZS5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2NvcHlE
YXRhKTsgXAorICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgXAorICAgICAgICAg
ICAgZGVsZXRlIGNvbnNvbGUuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9jb3B5RGF0YTsgXAor
ICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNvcHlcIiwgY29uc29s
ZS5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2NvcHlIYW5kbGVyLCBmYWxzZSk7IFwKKyAgICAg
ICAgfSwgXAorICAgICAgICBjb3B5OiBmdW5jdGlvbihvKSBcCisgICAgICAgIHsgXAorICAgICAg
ICAgICAgY29uc29sZS5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2NvcHlEYXRhID0gbzsgXAor
ICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNvcHlcIiwgY29uc29sZS5f
aW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2NvcHlIYW5kbGVyLCBmYWxzZSk7IFwKKyAgICAgICAg
ICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiKTsgXAorICAg
ICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbCk7IFwKKyAgICAgICAgICAgIGVs
LnZhbHVlID0gXCItXCI7IFwKKyAgICAgICAgICAgIGVsLnNlbGVjdCgpOyBcCisgICAgICAgICAg
ICBkb2N1bWVudC5leGVjQ29tbWFuZChcIkNvcHlcIik7IFwKKyAgICAgICAgICAgIGRvY3VtZW50
LmJvZHkucmVtb3ZlQ2hpbGQoZWwpOyBcCisgICAgICAgIH0gXAogICAgIH07Iik7CiAKICAgICBp
bnNwZWN0b3JDb21tYW5kTGluZUFQSS5jbGVhciA9IEluc3BlY3RvckNvbnRyb2xsZXIud3JhcENh
bGxiYWNrKEluamVjdGVkU2NyaXB0Ll9jbGVhckNvbnNvbGVNZXNzYWdlcyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42713</attachid>
            <date>2009-11-08 02:37:31 -0800</date>
            <delta_ts>2009-11-08 21:14:59 -0800</delta_ts>
            <desc>proposed patch 2</desc>
            <filename>copy.diff</filename>
            <type>text/plain</type>
            <size>10732</size>
            <attacher name="Keishi Hattori">keishi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDYyMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMDktMTEtMDggIEtlaXNoaSBIYXR0b3JpICA8Y2FzZXkuaGF0dG9y
aUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV2ViIEluc3BlY3RvcjogSW5zcGVjdG9yIHNob3VsZCBzdXBwb3J0IGNvcHkoKSBpbiB0
aGUgY29tbWFuZCBsaW5lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zMTIzOAorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FdmVudExpc3Rl
bmVyc1NpZGViYXJQYW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJz
U2lkZWJhclBhbmUucHJvdG90eXBlLnVwZGF0ZS5jYWxsYmFjayk6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qczoKKyAgICAgICAgKEluamVjdGVkU2NyaXB0
Ll9lbnN1cmVDb21tYW5kTGluZUFQSUluc3RhbGxlZCk6IEFkZGVkIF9pbnNwZWN0b3JDb21tYW5k
TGluZUFQSS5jb3B5CisKIDIwMDktMTEtMDcgIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0V2ZW50TGlzdGVuZXJzU2lkZWJhclBhbmUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0V2ZW50TGlzdGVuZXJzU2lkZWJhclBh
bmUuanMJKHJldmlzaW9uIDUwNjE3KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0V2
ZW50TGlzdGVuZXJzU2lkZWJhclBhbmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcg
QEAgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJzU2lkZWJhclBhbmUucAogICAgICAgICAgICAg
ICAgIHZhciBldmVudExpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcnNbaV07CiAgICAgICAgICAgICAg
ICAgZXZlbnRMaXN0ZW5lci5ub2RlID0gV2ViSW5zcGVjdG9yLmRvbUFnZW50Lm5vZGVGb3JJZChl
dmVudExpc3RlbmVyLm5vZGVJZCk7CiAgICAgICAgICAgICAgICAgZGVsZXRlIGV2ZW50TGlzdGVu
ZXIubm9kZUlkOyAvLyBubyBsb25nZXIgbmVlZGVkCi0gICAgICAgICAgICAgICAgaWYgKC9eZnVu
Y3Rpb24gX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJX2xvZ0V2ZW50XCgvLnRlc3QoZXZlbnRMaXN0
ZW5lci5saXN0ZW5lci50b1N0cmluZygpKSkKKyAgICAgICAgICAgICAgICBpZiAoL15mdW5jdGlv
biBfaW5zcGVjdG9yQ29tbWFuZExpbmVBUElfKD86bG9nRXZlbnR8Y29weUhhbmRsZXIpXCgvLnRl
c3QoZXZlbnRMaXN0ZW5lci5saXN0ZW5lci50b1N0cmluZygpKSkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7IC8vIGlnbm9yZSBldmVudCBsaXN0ZW5lcnMgZ2VuZXJhdGVkIGJ5IG1vbml0
b3JFdmVudAogICAgICAgICAgICAgICAgIHZhciB0eXBlID0gZXZlbnRMaXN0ZW5lci50eXBlOwog
ICAgICAgICAgICAgICAgIHZhciBzZWN0aW9uID0gc2VjdGlvbk1hcFt0eXBlXTsKSW5kZXg6IFdl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMJKHJldmlzaW9u
IDUwNjE3KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0Lmpz
CSh3b3JraW5nIGNvcHkpCkBAIC05MDcsNjkgKzkwNyw5MiBAQCBJbmplY3RlZFNjcmlwdC5fZW5z
dXJlQ29tbWFuZExpbmVBUElJbnN0CiB7CiAgICAgaWYgKGV2YWxGdW5jdGlvbi5jYWxsKGV2YWxP
YmplY3QsICJ3aW5kb3cuY29uc29sZS5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkiKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIHZhciBpbnNwZWN0b3JDb21tYW5kTGluZUFQSSA9IGV2YWxGdW5jdGlv
bi5jYWxsKGV2YWxPYmplY3QsICJ3aW5kb3cuY29uc29sZS5faW5zcGVjdG9yQ29tbWFuZExpbmVB
UEkgPSB7IFwKLSAgICAgICAgJDogZnVuY3Rpb24oKSB7IHJldHVybiBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZC5hcHBseShkb2N1bWVudCwgYXJndW1lbnRzKSB9LCBcCi0gICAgICAgICQkOiBmdW5j
dGlvbigpIHsgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwuYXBwbHkoZG9jdW1lbnQs
IGFyZ3VtZW50cykgfSwgXAotICAgICAgICAkeDogZnVuY3Rpb24oeHBhdGgsIGNvbnRleHQpIHsg
XAotICAgICAgICAgICAgdmFyIG5vZGVzID0gW107IFwKLSAgICAgICAgICAgIHRyeSB7IFwKLSAg
ICAgICAgICAgICAgICB2YXIgZG9jID0gY29udGV4dCB8fCBkb2N1bWVudDsgXAotICAgICAgICAg
ICAgICAgIHZhciByZXN1bHRzID0gZG9jLmV2YWx1YXRlKHhwYXRoLCBkb2MsIG51bGwsIFhQYXRo
UmVzdWx0LkFOWV9UWVBFLCBudWxsKTsgXAotICAgICAgICAgICAgICAgIHZhciBub2RlOyBcCi0g
ICAgICAgICAgICAgICAgd2hpbGUgKG5vZGUgPSByZXN1bHRzLml0ZXJhdGVOZXh0KCkpIG5vZGVz
LnB1c2gobm9kZSk7IFwKLSAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9IFwKLSAgICAgICAgICAg
IHJldHVybiBub2RlczsgXAotICAgICAgICB9LCBcCi0gICAgICAgIGRpcjogZnVuY3Rpb24oKSB7
IHJldHVybiBjb25zb2xlLmRpci5hcHBseShjb25zb2xlLCBhcmd1bWVudHMpIH0sIFwKLSAgICAg
ICAgZGlyeG1sOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNvbnNvbGUuZGlyeG1sLmFwcGx5KGNvbnNv
bGUsIGFyZ3VtZW50cykgfSwgXAotICAgICAgICBrZXlzOiBmdW5jdGlvbihvKSB7IHZhciBhID0g
W107IGZvciAodmFyIGsgaW4gbykgYS5wdXNoKGspOyByZXR1cm4gYTsgfSwgXAotICAgICAgICB2
YWx1ZXM6IGZ1bmN0aW9uKG8pIHsgdmFyIGEgPSBbXTsgZm9yICh2YXIgayBpbiBvKSBhLnB1c2go
b1trXSk7IHJldHVybiBhOyB9LCBcCi0gICAgICAgIHByb2ZpbGU6IGZ1bmN0aW9uKCkgeyByZXR1
cm4gY29uc29sZS5wcm9maWxlLmFwcGx5KGNvbnNvbGUsIGFyZ3VtZW50cykgfSwgXAotICAgICAg
ICBwcm9maWxlRW5kOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNvbnNvbGUucHJvZmlsZUVuZC5hcHBs
eShjb25zb2xlLCBhcmd1bWVudHMpIH0sIFwKLSAgICAgICAgX2xvZ0V2ZW50OiBmdW5jdGlvbiBf
aW5zcGVjdG9yQ29tbWFuZExpbmVBUElfbG9nRXZlbnQoZSkgeyBjb25zb2xlLmxvZyhlLnR5cGUs
IGUpOyB9LCBcCi0gICAgICAgIF9hbGxFdmVudFR5cGVzOiBbXCJtb3VzZVwiLCBcImtleVwiLCBc
ImxvYWRcIiwgXCJ1bmxvYWRcIiwgXCJhYm9ydFwiLCBcImVycm9yXCIsIFwKLSAgICAgICAgICAg
IFwic2VsZWN0XCIsIFwiY2hhbmdlXCIsIFwic3VibWl0XCIsIFwicmVzZXRcIiwgXCJmb2N1c1wi
LCBcImJsdXJcIiwgXAotICAgICAgICAgICAgXCJyZXNpemVcIiwgXCJzY3JvbGxcIl0sIFwKLSAg
ICAgICAgX25vcm1hbGl6ZUV2ZW50VHlwZXM6IGZ1bmN0aW9uKHQpIHsgXAotICAgICAgICAgICAg
aWYgKHR5cGVvZiB0ID09PSBcInVuZGVmaW5lZFwiKSBcCi0gICAgICAgICAgICAgICAgdCA9IGNv
bnNvbGUuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9hbGxFdmVudFR5cGVzOyBcCi0gICAgICAg
ICAgICBlbHNlIGlmICh0eXBlb2YgdCA9PT0gXCJzdHJpbmdcIikgXAotICAgICAgICAgICAgICAg
IHQgPSBbdF07IFwKLSAgICAgICAgICAgIHZhciBpLCB0ZSA9IFtdOyBcCi0gICAgICAgICAgICBm
b3IgKGkgPSAwOyBpIDwgdC5sZW5ndGg7IGkrKykgeyBcCi0gICAgICAgICAgICAgICAgaWYgKHRb
aV0gPT09IFwibW91c2VcIikgXAotICAgICAgICAgICAgICAgICAgICB0ZS5zcGxpY2UoMCwgMCwg
XCJtb3VzZWRvd25cIiwgXCJtb3VzZXVwXCIsIFwiY2xpY2tcIiwgXCJkYmxjbGlja1wiLCBcCi0g
ICAgICAgICAgICAgICAgICAgICAgICBcIm1vdXNlbW92ZVwiLCBcIm1vdXNlb3ZlclwiLCBcIm1v
dXNlb3V0XCIpOyBcCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAodFtpXSA9PT0gXCJrZXlcIikg
XAotICAgICAgICAgICAgICAgICAgICB0ZS5zcGxpY2UoMCwgMCwgXCJrZXlkb3duXCIsIFwia2V5
dXBcIiwgXCJrZXlwcmVzc1wiKTsgXAotICAgICAgICAgICAgICAgIGVsc2UgXAotICAgICAgICAg
ICAgICAgICAgICB0ZS5wdXNoKHRbaV0pOyBcCi0gICAgICAgICAgICB9IFwKLSAgICAgICAgICAg
IHJldHVybiB0ZTsgXAotICAgICAgICB9LCBcCi0gICAgICAgIG1vbml0b3JFdmVudHM6IGZ1bmN0
aW9uKG8sIHQpIHsgXAotICAgICAgICAgICAgaWYgKCFvIHx8ICFvLmFkZEV2ZW50TGlzdGVuZXIg
fHwgIW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcikgXAotICAgICAgICAgICAgICAgIHJldHVybjsgXAot
ICAgICAgICAgICAgdCA9IGNvbnNvbGUuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9ub3JtYWxp
emVFdmVudFR5cGVzKHQpOyBcCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdC5sZW5ndGg7
IGkrKykgeyBcCi0gICAgICAgICAgICAgICAgby5yZW1vdmVFdmVudExpc3RlbmVyKHRbaV0sIGNv
bnNvbGUuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9sb2dFdmVudCwgZmFsc2UpOyBcCi0gICAg
ICAgICAgICAgICAgby5hZGRFdmVudExpc3RlbmVyKHRbaV0sIGNvbnNvbGUuX2luc3BlY3RvckNv
bW1hbmRMaW5lQVBJLl9sb2dFdmVudCwgZmFsc2UpOyBcCi0gICAgICAgICAgICB9IFwKLSAgICAg
ICAgfSwgXAotICAgICAgICB1bm1vbml0b3JFdmVudHM6IGZ1bmN0aW9uKG8sIHQpIHsgXAotICAg
ICAgICAgICAgaWYgKCFvIHx8ICFvLnJlbW92ZUV2ZW50TGlzdGVuZXIpIFwKLSAgICAgICAgICAg
ICAgICByZXR1cm47IFwKLSAgICAgICAgICAgIHQgPSBjb25zb2xlLl9pbnNwZWN0b3JDb21tYW5k
TGluZUFQSS5fbm9ybWFsaXplRXZlbnRUeXBlcyh0KTsgXAotICAgICAgICAgICAgZm9yIChpID0g
MDsgaSA8IHQubGVuZ3RoOyBpKyspIHsgXAotICAgICAgICAgICAgICAgIG8ucmVtb3ZlRXZlbnRM
aXN0ZW5lcih0W2ldLCBjb25zb2xlLl9pbnNwZWN0b3JDb21tYW5kTGluZUFQSS5fbG9nRXZlbnQs
IGZhbHNlKTsgXAotICAgICAgICAgICAgfSBcCi0gICAgICAgIH0sIFwKLSAgICAgICAgX2luc3Bl
Y3RlZE5vZGVzOiBbXSwgXAotICAgICAgICBnZXQgJDAoKSB7IHJldHVybiBjb25zb2xlLl9pbnNw
ZWN0b3JDb21tYW5kTGluZUFQSS5faW5zcGVjdGVkTm9kZXNbMF0gfSwgXAotICAgICAgICBnZXQg
JDEoKSB7IHJldHVybiBjb25zb2xlLl9pbnNwZWN0b3JDb21tYW5kTGluZUFQSS5faW5zcGVjdGVk
Tm9kZXNbMV0gfSwgXAotICAgICAgICBnZXQgJDIoKSB7IHJldHVybiBjb25zb2xlLl9pbnNwZWN0
b3JDb21tYW5kTGluZUFQSS5faW5zcGVjdGVkTm9kZXNbMl0gfSwgXAotICAgICAgICBnZXQgJDMo
KSB7IHJldHVybiBjb25zb2xlLl9pbnNwZWN0b3JDb21tYW5kTGluZUFQSS5faW5zcGVjdGVkTm9k
ZXNbM10gfSwgXAotICAgICAgICBnZXQgJDQoKSB7IHJldHVybiBjb25zb2xlLl9pbnNwZWN0b3JD
b21tYW5kTGluZUFQSS5faW5zcGVjdGVkTm9kZXNbNF0gfSBcCisgICAgdmFyIGluc3BlY3RvckNv
bW1hbmRMaW5lQVBJID0gZXZhbEZ1bmN0aW9uLmNhbGwoZXZhbE9iamVjdCwgIndpbmRvdy5jb25z
b2xlLl9pbnNwZWN0b3JDb21tYW5kTGluZUFQSSA9IHsgXG5cCisgICAgICAgICQ6IGZ1bmN0aW9u
KCkgeyByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQuYXBwbHkoZG9jdW1lbnQsIGFyZ3Vt
ZW50cykgfSwgXG5cCisgICAgICAgICQkOiBmdW5jdGlvbigpIHsgcmV0dXJuIGRvY3VtZW50LnF1
ZXJ5U2VsZWN0b3JBbGwuYXBwbHkoZG9jdW1lbnQsIGFyZ3VtZW50cykgfSwgXG5cCisgICAgICAg
ICR4OiBmdW5jdGlvbih4cGF0aCwgY29udGV4dCkgXG5cCisgICAgICAgIHsgXG5cCisgICAgICAg
ICAgICB2YXIgbm9kZXMgPSBbXTsgXG5cCisgICAgICAgICAgICB0cnkgeyBcblwKKyAgICAgICAg
ICAgICAgICB2YXIgZG9jID0gY29udGV4dCB8fCBkb2N1bWVudDsgXG5cCisgICAgICAgICAgICAg
ICAgdmFyIHJlc3VsdHMgPSBkb2MuZXZhbHVhdGUoeHBhdGgsIGRvYywgbnVsbCwgWFBhdGhSZXN1
bHQuQU5ZX1RZUEUsIG51bGwpOyBcblwKKyAgICAgICAgICAgICAgICB2YXIgbm9kZTsgXG5cCisg
ICAgICAgICAgICAgICAgd2hpbGUgKG5vZGUgPSByZXN1bHRzLml0ZXJhdGVOZXh0KCkpIG5vZGVz
LnB1c2gobm9kZSk7IFxuXAorICAgICAgICAgICAgfSBjYXRjaCAoZSkge30gXG5cCisgICAgICAg
ICAgICByZXR1cm4gbm9kZXM7IFxuXAorICAgICAgICB9LCBcblwKKyAgICAgICAgZGlyOiBmdW5j
dGlvbigpIHsgcmV0dXJuIGNvbnNvbGUuZGlyLmFwcGx5KGNvbnNvbGUsIGFyZ3VtZW50cykgfSwg
XG5cCisgICAgICAgIGRpcnhtbDogZnVuY3Rpb24oKSB7IHJldHVybiBjb25zb2xlLmRpcnhtbC5h
cHBseShjb25zb2xlLCBhcmd1bWVudHMpIH0sIFxuXAorICAgICAgICBrZXlzOiBmdW5jdGlvbihv
KSB7IHZhciBhID0gW107IGZvciAodmFyIGsgaW4gbykgYS5wdXNoKGspOyByZXR1cm4gYTsgfSwg
XG5cCisgICAgICAgIHZhbHVlczogZnVuY3Rpb24obykgeyB2YXIgYSA9IFtdOyBmb3IgKHZhciBr
IGluIG8pIGEucHVzaChvW2tdKTsgcmV0dXJuIGE7IH0sIFxuXAorICAgICAgICBwcm9maWxlOiBm
dW5jdGlvbigpIHsgcmV0dXJuIGNvbnNvbGUucHJvZmlsZS5hcHBseShjb25zb2xlLCBhcmd1bWVu
dHMpIH0sIFxuXAorICAgICAgICBwcm9maWxlRW5kOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNvbnNv
bGUucHJvZmlsZUVuZC5hcHBseShjb25zb2xlLCBhcmd1bWVudHMpIH0sIFxuXAorICAgICAgICBf
bG9nRXZlbnQ6IGZ1bmN0aW9uIF9pbnNwZWN0b3JDb21tYW5kTGluZUFQSV9sb2dFdmVudChlKSB7
IGNvbnNvbGUubG9nKGUudHlwZSwgZSk7IH0sIFxuXAorICAgICAgICBfYWxsRXZlbnRUeXBlczog
W1wibW91c2VcIiwgXCJrZXlcIiwgXCJsb2FkXCIsIFwidW5sb2FkXCIsIFwiYWJvcnRcIiwgXCJl
cnJvclwiLCBcblwKKyAgICAgICAgICAgIFwic2VsZWN0XCIsIFwiY2hhbmdlXCIsIFwic3VibWl0
XCIsIFwicmVzZXRcIiwgXCJmb2N1c1wiLCBcImJsdXJcIiwgXG5cCisgICAgICAgICAgICBcInJl
c2l6ZVwiLCBcInNjcm9sbFwiXSwgXG5cCisgICAgICAgIF9ub3JtYWxpemVFdmVudFR5cGVzOiBm
dW5jdGlvbih0KSBcblwKKyAgICAgICAgeyBcblwKKyAgICAgICAgICAgIGlmICh0eXBlb2YgdCA9
PT0gXCJ1bmRlZmluZWRcIikgXG5cCisgICAgICAgICAgICAgICAgdCA9IGNvbnNvbGUuX2luc3Bl
Y3RvckNvbW1hbmRMaW5lQVBJLl9hbGxFdmVudFR5cGVzOyBcblwKKyAgICAgICAgICAgIGVsc2Ug
aWYgKHR5cGVvZiB0ID09PSBcInN0cmluZ1wiKSBcblwKKyAgICAgICAgICAgICAgICB0ID0gW3Rd
OyBcblwKKyAgICAgICAgICAgIHZhciBpLCB0ZSA9IFtdOyBcblwKKyAgICAgICAgICAgIGZvciAo
aSA9IDA7IGkgPCB0Lmxlbmd0aDsgaSsrKSB7IFxuXAorICAgICAgICAgICAgICAgIGlmICh0W2ld
ID09PSBcIm1vdXNlXCIpIFxuXAorICAgICAgICAgICAgICAgICAgICB0ZS5zcGxpY2UoMCwgMCwg
XCJtb3VzZWRvd25cIiwgXCJtb3VzZXVwXCIsIFwiY2xpY2tcIiwgXCJkYmxjbGlja1wiLCBcblwK
KyAgICAgICAgICAgICAgICAgICAgICAgIFwibW91c2Vtb3ZlXCIsIFwibW91c2VvdmVyXCIsIFwi
bW91c2VvdXRcIik7IFxuXAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRbaV0gPT09IFwia2V5
XCIpIFxuXAorICAgICAgICAgICAgICAgICAgICB0ZS5zcGxpY2UoMCwgMCwgXCJrZXlkb3duXCIs
IFwia2V5dXBcIiwgXCJrZXlwcmVzc1wiKTsgXG5cCisgICAgICAgICAgICAgICAgZWxzZSBcblwK
KyAgICAgICAgICAgICAgICAgICAgdGUucHVzaCh0W2ldKTsgXG5cCisgICAgICAgICAgICB9IFxu
XAorICAgICAgICAgICAgcmV0dXJuIHRlOyBcblwKKyAgICAgICAgfSwgXG5cCisgICAgICAgIG1v
bml0b3JFdmVudHM6IGZ1bmN0aW9uKG8sIHQpIFxuXAorICAgICAgICB7IFxuXAorICAgICAgICAg
ICAgaWYgKCFvIHx8ICFvLmFkZEV2ZW50TGlzdGVuZXIgfHwgIW8ucmVtb3ZlRXZlbnRMaXN0ZW5l
cikgXG5cCisgICAgICAgICAgICAgICAgcmV0dXJuOyBcblwKKyAgICAgICAgICAgIHQgPSBjb25z
b2xlLl9pbnNwZWN0b3JDb21tYW5kTGluZUFQSS5fbm9ybWFsaXplRXZlbnRUeXBlcyh0KTsgXG5c
CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdC5sZW5ndGg7IGkrKykgeyBcblwKKyAgICAg
ICAgICAgICAgICBvLnJlbW92ZUV2ZW50TGlzdGVuZXIodFtpXSwgY29uc29sZS5faW5zcGVjdG9y
Q29tbWFuZExpbmVBUEkuX2xvZ0V2ZW50LCBmYWxzZSk7IFxuXAorICAgICAgICAgICAgICAgIG8u
YWRkRXZlbnRMaXN0ZW5lcih0W2ldLCBjb25zb2xlLl9pbnNwZWN0b3JDb21tYW5kTGluZUFQSS5f
bG9nRXZlbnQsIGZhbHNlKTsgXG5cCisgICAgICAgICAgICB9IFxuXAorICAgICAgICB9LCBcblwK
KyAgICAgICAgdW5tb25pdG9yRXZlbnRzOiBmdW5jdGlvbihvLCB0KSBcblwKKyAgICAgICAgeyBc
blwKKyAgICAgICAgICAgIGlmICghbyB8fCAhby5yZW1vdmVFdmVudExpc3RlbmVyKSBcblwKKyAg
ICAgICAgICAgICAgICByZXR1cm47IFxuXAorICAgICAgICAgICAgdCA9IGNvbnNvbGUuX2luc3Bl
Y3RvckNvbW1hbmRMaW5lQVBJLl9ub3JtYWxpemVFdmVudFR5cGVzKHQpOyBcblwKKyAgICAgICAg
ICAgIGZvciAoaSA9IDA7IGkgPCB0Lmxlbmd0aDsgaSsrKSB7IFxuXAorICAgICAgICAgICAgICAg
IG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0W2ldLCBjb25zb2xlLl9pbnNwZWN0b3JDb21tYW5kTGlu
ZUFQSS5fbG9nRXZlbnQsIGZhbHNlKTsgXG5cCisgICAgICAgICAgICB9IFxuXAorICAgICAgICB9
LCBcblwKKyAgICAgICAgX2luc3BlY3RlZE5vZGVzOiBbXSwgXG5cCisgICAgICAgIGdldCAkMCgp
IHsgcmV0dXJuIGNvbnNvbGUuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9pbnNwZWN0ZWROb2Rl
c1swXSB9LCBcblwKKyAgICAgICAgZ2V0ICQxKCkgeyByZXR1cm4gY29uc29sZS5faW5zcGVjdG9y
Q29tbWFuZExpbmVBUEkuX2luc3BlY3RlZE5vZGVzWzFdIH0sIFxuXAorICAgICAgICBnZXQgJDIo
KSB7IHJldHVybiBjb25zb2xlLl9pbnNwZWN0b3JDb21tYW5kTGluZUFQSS5faW5zcGVjdGVkTm9k
ZXNbMl0gfSwgXG5cCisgICAgICAgIGdldCAkMygpIHsgcmV0dXJuIGNvbnNvbGUuX2luc3BlY3Rv
ckNvbW1hbmRMaW5lQVBJLl9pbnNwZWN0ZWROb2Rlc1szXSB9LCBcblwKKyAgICAgICAgZ2V0ICQ0
KCkgeyByZXR1cm4gY29uc29sZS5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2luc3BlY3RlZE5v
ZGVzWzRdIH0sIFxuXAorICAgICAgICBfY29weUhhbmRsZXI6IGZ1bmN0aW9uIF9pbnNwZWN0b3JD
b21tYW5kTGluZUFQSV9jb3B5SGFuZGxlcihldmVudCkgXG5cCisgICAgICAgIHsgXG5cCisgICAg
ICAgICAgICBldmVudC5jbGlwYm9hcmREYXRhLnNldERhdGEoXCJ0ZXh0L3BsYWluXCIsIGNvbnNv
bGUuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9jb3B5RGF0YSk7IFxuXAorICAgICAgICAgICAg
ZXZlbnQucHJldmVudERlZmF1bHQoKTsgXG5cCisgICAgICAgICAgICBkZWxldGUgY29uc29sZS5f
aW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2NvcHlEYXRhOyBcblwKKyAgICAgICAgICAgIGRvY3Vt
ZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb3B5XCIsIGNvbnNvbGUuX2luc3BlY3RvckNvbW1h
bmRMaW5lQVBJLl9jb3B5SGFuZGxlciwgZmFsc2UpOyBcblwKKyAgICAgICAgfSwgXG5cCisgICAg
ICAgIGNvcHk6IGZ1bmN0aW9uKG8pIFxuXAorICAgICAgICB7IFxuXAorICAgICAgICAgICAgY29u
c29sZS5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2NvcHlEYXRhID0gbzsgXG5cCisgICAgICAg
ICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY29weVwiLCBjb25zb2xlLl9pbnNwZWN0
b3JDb21tYW5kTGluZUFQSS5fY29weUhhbmRsZXIsIGZhbHNlKTsgXG5cCisgICAgICAgICAgICAv
LyBjbGlwYm9hcmREYXRhLnNldERhdGEgZG9lc24ndCB3b3JrIHdpdGhvdXQgYSBzZWxlY3Rpb24g
XG5cCisgICAgICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGV4dGFy
ZWFcIik7IFxuXAorICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbCk7IFxu
XAorICAgICAgICAgICAgZWwudmFsdWUgPSBcIi1cIjsgXG5cCisgICAgICAgICAgICBlbC5zZWxl
Y3QoKTsgXG5cCisgICAgICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcIkNvcHlcIik7IFxu
XAorICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbCk7IFxuXAorICAgICAg
ICB9IFxuXAogICAgIH07Iik7CiAKICAgICBpbnNwZWN0b3JDb21tYW5kTGluZUFQSS5jbGVhciA9
IEluc3BlY3RvckNvbnRyb2xsZXIud3JhcENhbGxiYWNrKEluamVjdGVkU2NyaXB0Ll9jbGVhckNv
bnNvbGVNZXNzYWdlcyk7Cg==
</data>
<flag name="review"
          id="24273"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42730</attachid>
            <date>2009-11-08 21:14:59 -0800</date>
            <delta_ts>2009-11-08 22:16:03 -0800</delta_ts>
            <desc>proposed patch 3</desc>
            <filename>copy.diff</filename>
            <type>text/plain</type>
            <size>11161</size>
            <attacher name="Keishi Hattori">keishi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDYzNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMDktMTEtMDggIEtlaXNoaSBIYXR0b3JpICA8Y2FzZXkuaGF0dG9y
aUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV2ViIEluc3BlY3RvcjogSW5zcGVjdG9yIHNob3VsZCBzdXBwb3J0IGNvcHkoKSBpbiB0
aGUgY29tbWFuZCBsaW5lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zMTIzOAorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6Y29weVRleHQpOiBBZGRlZC4K
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oOiBBZGRlZCBjb3B5VGV4dAor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbDogQWRkZWQgY29weVRleHQK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzOgorICAgICAg
ICAoSW5qZWN0ZWRTY3JpcHQuX2NvcHkpOiBBZGRlZC4KKyAgICAgICAgKEluamVjdGVkU2NyaXB0
Ll9lbnN1cmVDb21tYW5kTGluZUFQSUluc3RhbGxlZCk6CisKIDIwMDktMTEtMDggIFBhdmVsIEZl
bGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGlt
b3RoeSBIYXRjaGVyLgpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAJ
KHJldmlzaW9uIDUwNjE3KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUwNyw2ICs1MDcsMTEgQEAgdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kOjpkZWxldGVDb29raWUoY29ucwogICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGVsZXRl
Q29va2llKGNvb2tpZU5hbWUsIGRvbWFpbik7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6
Y29weVRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQoreworICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQ
YXN0ZWJvYXJkKCktPndyaXRlUGxhaW5UZXh0KHRleHQpOworfQorCiB2b2lkIEluc3BlY3RvckJh
Y2tlbmQ6OmhpZ2hsaWdodChsb25nIG5vZGVJZCkKIHsKICAgICBpZiAoTm9kZSogbm9kZSA9IG5v
ZGVGb3JJZChub2RlSWQpKQpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaAko
cmV2aXNpb24gNTA2MTcpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0Myw2ICsxNDMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRD
b29raWVzKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIGRvbWFpbik7CiAgICAgdm9pZCBkZWxl
dGVDb29raWUoY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbik7
CiAKKyAgICB2b2lkIGNvcHlUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCk7CisKICAgICAvLyBHZW5l
cmljIGNvZGUgY2FsbGVkIGZyb20gY3VzdG9tIGltcGxlbWVudGF0aW9ucy4KICAgICB2b2lkIGhp
Z2hsaWdodChsb25nIG5vZGVJZCk7CiAgICAgTm9kZSogbm9kZUZvcklkKGxvbmcgbm9kZUlkKTsK
SW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsCShyZXZpc2lvbiA1MDYx
NykKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTUsNiArMTE1LDggQEAgbW9kdWxlIGNvcmUgewogICAgICAgICB2b2lkIGdldENv
b2tpZXMoaW4gbG9uZyBjYWxsSWQsIGluIERPTVN0cmluZyBkb21haW4pOwogICAgICAgICB2b2lk
IGRlbGV0ZUNvb2tpZShpbiBET01TdHJpbmcgY29va2llTmFtZSwgaW4gRE9NU3RyaW5nIGRvbWFp
bik7CiAKKyAgICAgICAgdm9pZCBjb3B5VGV4dChpbiBET01TdHJpbmcgdGV4dCk7CisKICAgICAg
ICAgLy8gQ2FsbGVkIGZyb20gSW5qZWN0ZWRTY3JpcHQuCiAgICAgICAgIC8vIFRPRE86IGV4dHJh
Y3QgaW50byBhIHNlcGFyYXRlIElETC4KICAgICAgICAgW0N1c3RvbV0gRE9NT2JqZWN0IG5vZGVG
b3JJZChpbiBsb25nIG5vZGVJZCk7CkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
SW5qZWN0ZWRTY3JpcHQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0luamVjdGVkU2NyaXB0LmpzCShyZXZpc2lvbiA1MDYxNykKKysrIFdlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcwkod29ya2luZyBjb3B5KQpAQCAtOTAzLDc3
ICs5MDMsOTIgQEAgSW5qZWN0ZWRTY3JpcHQuX2luc3BlY3RPYmplY3QgPSBmdW5jdGlvbgogICAg
IH0KIH0KIAorSW5qZWN0ZWRTY3JpcHQuX2NvcHkgPSBmdW5jdGlvbihvKQoreworICAgIGlmIChP
YmplY3QudHlwZShvKSA9PT0gIm5vZGUiKSB7CisgICAgICAgIHZhciBub2RlSWQgPSBJbnNwZWN0
b3JDb250cm9sbGVyLnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobywgZmFsc2UpOworICAgICAgICBJ
bnNwZWN0b3JDb250cm9sbGVyLmNvcHlOb2RlKG5vZGVJZCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgSW5zcGVjdG9yQ29udHJvbGxlci5jb3B5VGV4dChvKTsKKyAgICB9Cit9CisKIEluamVjdGVk
U2NyaXB0Ll9lbnN1cmVDb21tYW5kTGluZUFQSUluc3RhbGxlZCA9IGZ1bmN0aW9uKGV2YWxGdW5j
dGlvbiwgZXZhbE9iamVjdCkKIHsKICAgICBpZiAoZXZhbEZ1bmN0aW9uLmNhbGwoZXZhbE9iamVj
dCwgIndpbmRvdy5jb25zb2xlLl9pbnNwZWN0b3JDb21tYW5kTGluZUFQSSIpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgdmFyIGluc3BlY3RvckNvbW1hbmRMaW5lQVBJID0gZXZhbEZ1bmN0aW9uLmNh
bGwoZXZhbE9iamVjdCwgIndpbmRvdy5jb25zb2xlLl9pbnNwZWN0b3JDb21tYW5kTGluZUFQSSA9
IHsgXAotICAgICAgICAkOiBmdW5jdGlvbigpIHsgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkLmFwcGx5KGRvY3VtZW50LCBhcmd1bWVudHMpIH0sIFwKLSAgICAgICAgJCQ6IGZ1bmN0aW9u
KCkgeyByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbC5hcHBseShkb2N1bWVudCwgYXJn
dW1lbnRzKSB9LCBcCi0gICAgICAgICR4OiBmdW5jdGlvbih4cGF0aCwgY29udGV4dCkgeyBcCi0g
ICAgICAgICAgICB2YXIgbm9kZXMgPSBbXTsgXAotICAgICAgICAgICAgdHJ5IHsgXAotICAgICAg
ICAgICAgICAgIHZhciBkb2MgPSBjb250ZXh0IHx8IGRvY3VtZW50OyBcCi0gICAgICAgICAgICAg
ICAgdmFyIHJlc3VsdHMgPSBkb2MuZXZhbHVhdGUoeHBhdGgsIGRvYywgbnVsbCwgWFBhdGhSZXN1
bHQuQU5ZX1RZUEUsIG51bGwpOyBcCi0gICAgICAgICAgICAgICAgdmFyIG5vZGU7IFwKLSAgICAg
ICAgICAgICAgICB3aGlsZSAobm9kZSA9IHJlc3VsdHMuaXRlcmF0ZU5leHQoKSkgbm9kZXMucHVz
aChub2RlKTsgXAotICAgICAgICAgICAgfSBjYXRjaCAoZSkge30gXAotICAgICAgICAgICAgcmV0
dXJuIG5vZGVzOyBcCi0gICAgICAgIH0sIFwKLSAgICAgICAgZGlyOiBmdW5jdGlvbigpIHsgcmV0
dXJuIGNvbnNvbGUuZGlyLmFwcGx5KGNvbnNvbGUsIGFyZ3VtZW50cykgfSwgXAotICAgICAgICBk
aXJ4bWw6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY29uc29sZS5kaXJ4bWwuYXBwbHkoY29uc29sZSwg
YXJndW1lbnRzKSB9LCBcCi0gICAgICAgIGtleXM6IGZ1bmN0aW9uKG8pIHsgdmFyIGEgPSBbXTsg
Zm9yICh2YXIgayBpbiBvKSBhLnB1c2goayk7IHJldHVybiBhOyB9LCBcCi0gICAgICAgIHZhbHVl
czogZnVuY3Rpb24obykgeyB2YXIgYSA9IFtdOyBmb3IgKHZhciBrIGluIG8pIGEucHVzaChvW2td
KTsgcmV0dXJuIGE7IH0sIFwKLSAgICAgICAgcHJvZmlsZTogZnVuY3Rpb24oKSB7IHJldHVybiBj
b25zb2xlLnByb2ZpbGUuYXBwbHkoY29uc29sZSwgYXJndW1lbnRzKSB9LCBcCi0gICAgICAgIHBy
b2ZpbGVFbmQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY29uc29sZS5wcm9maWxlRW5kLmFwcGx5KGNv
bnNvbGUsIGFyZ3VtZW50cykgfSwgXAotICAgICAgICBfbG9nRXZlbnQ6IGZ1bmN0aW9uIF9pbnNw
ZWN0b3JDb21tYW5kTGluZUFQSV9sb2dFdmVudChlKSB7IGNvbnNvbGUubG9nKGUudHlwZSwgZSk7
IH0sIFwKLSAgICAgICAgX2FsbEV2ZW50VHlwZXM6IFtcIm1vdXNlXCIsIFwia2V5XCIsIFwibG9h
ZFwiLCBcInVubG9hZFwiLCBcImFib3J0XCIsIFwiZXJyb3JcIiwgXAotICAgICAgICAgICAgXCJz
ZWxlY3RcIiwgXCJjaGFuZ2VcIiwgXCJzdWJtaXRcIiwgXCJyZXNldFwiLCBcImZvY3VzXCIsIFwi
Ymx1clwiLCBcCi0gICAgICAgICAgICBcInJlc2l6ZVwiLCBcInNjcm9sbFwiXSwgXAotICAgICAg
ICBfbm9ybWFsaXplRXZlbnRUeXBlczogZnVuY3Rpb24odCkgeyBcCi0gICAgICAgICAgICBpZiAo
dHlwZW9mIHQgPT09IFwidW5kZWZpbmVkXCIpIFwKLSAgICAgICAgICAgICAgICB0ID0gY29uc29s
ZS5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2FsbEV2ZW50VHlwZXM7IFwKLSAgICAgICAgICAg
IGVsc2UgaWYgKHR5cGVvZiB0ID09PSBcInN0cmluZ1wiKSBcCi0gICAgICAgICAgICAgICAgdCA9
IFt0XTsgXAotICAgICAgICAgICAgdmFyIGksIHRlID0gW107IFwKLSAgICAgICAgICAgIGZvciAo
aSA9IDA7IGkgPCB0Lmxlbmd0aDsgaSsrKSB7IFwKLSAgICAgICAgICAgICAgICBpZiAodFtpXSA9
PT0gXCJtb3VzZVwiKSBcCi0gICAgICAgICAgICAgICAgICAgIHRlLnNwbGljZSgwLCAwLCBcIm1v
dXNlZG93blwiLCBcIm1vdXNldXBcIiwgXCJjbGlja1wiLCBcImRibGNsaWNrXCIsIFwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFwibW91c2Vtb3ZlXCIsIFwibW91c2VvdmVyXCIsIFwibW91c2Vv
dXRcIik7IFwKLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0W2ldID09PSBcImtleVwiKSBcCi0g
ICAgICAgICAgICAgICAgICAgIHRlLnNwbGljZSgwLCAwLCBcImtleWRvd25cIiwgXCJrZXl1cFwi
LCBcImtleXByZXNzXCIpOyBcCi0gICAgICAgICAgICAgICAgZWxzZSBcCi0gICAgICAgICAgICAg
ICAgICAgIHRlLnB1c2godFtpXSk7IFwKLSAgICAgICAgICAgIH0gXAotICAgICAgICAgICAgcmV0
dXJuIHRlOyBcCi0gICAgICAgIH0sIFwKLSAgICAgICAgbW9uaXRvckV2ZW50czogZnVuY3Rpb24o
bywgdCkgeyBcCi0gICAgICAgICAgICBpZiAoIW8gfHwgIW8uYWRkRXZlbnRMaXN0ZW5lciB8fCAh
by5yZW1vdmVFdmVudExpc3RlbmVyKSBcCi0gICAgICAgICAgICAgICAgcmV0dXJuOyBcCi0gICAg
ICAgICAgICB0ID0gY29uc29sZS5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX25vcm1hbGl6ZUV2
ZW50VHlwZXModCk7IFwKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0Lmxlbmd0aDsgaSsr
KSB7IFwKLSAgICAgICAgICAgICAgICBvLnJlbW92ZUV2ZW50TGlzdGVuZXIodFtpXSwgY29uc29s
ZS5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2xvZ0V2ZW50LCBmYWxzZSk7IFwKLSAgICAgICAg
ICAgICAgICBvLmFkZEV2ZW50TGlzdGVuZXIodFtpXSwgY29uc29sZS5faW5zcGVjdG9yQ29tbWFu
ZExpbmVBUEkuX2xvZ0V2ZW50LCBmYWxzZSk7IFwKLSAgICAgICAgICAgIH0gXAotICAgICAgICB9
LCBcCi0gICAgICAgIHVubW9uaXRvckV2ZW50czogZnVuY3Rpb24obywgdCkgeyBcCi0gICAgICAg
ICAgICBpZiAoIW8gfHwgIW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcikgXAotICAgICAgICAgICAgICAg
IHJldHVybjsgXAotICAgICAgICAgICAgdCA9IGNvbnNvbGUuX2luc3BlY3RvckNvbW1hbmRMaW5l
QVBJLl9ub3JtYWxpemVFdmVudFR5cGVzKHQpOyBcCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgdC5sZW5ndGg7IGkrKykgeyBcCi0gICAgICAgICAgICAgICAgby5yZW1vdmVFdmVudExpc3Rl
bmVyKHRbaV0sIGNvbnNvbGUuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9sb2dFdmVudCwgZmFs
c2UpOyBcCi0gICAgICAgICAgICB9IFwKLSAgICAgICAgfSwgXAotICAgICAgICBfaW5zcGVjdGVk
Tm9kZXM6IFtdLCBcCi0gICAgICAgIGdldCAkMCgpIHsgcmV0dXJuIGNvbnNvbGUuX2luc3BlY3Rv
ckNvbW1hbmRMaW5lQVBJLl9pbnNwZWN0ZWROb2Rlc1swXSB9LCBcCi0gICAgICAgIGdldCAkMSgp
IHsgcmV0dXJuIGNvbnNvbGUuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9pbnNwZWN0ZWROb2Rl
c1sxXSB9LCBcCi0gICAgICAgIGdldCAkMigpIHsgcmV0dXJuIGNvbnNvbGUuX2luc3BlY3RvckNv
bW1hbmRMaW5lQVBJLl9pbnNwZWN0ZWROb2Rlc1syXSB9LCBcCi0gICAgICAgIGdldCAkMygpIHsg
cmV0dXJuIGNvbnNvbGUuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9pbnNwZWN0ZWROb2Rlc1sz
XSB9LCBcCi0gICAgICAgIGdldCAkNCgpIHsgcmV0dXJuIGNvbnNvbGUuX2luc3BlY3RvckNvbW1h
bmRMaW5lQVBJLl9pbnNwZWN0ZWROb2Rlc1s0XSB9IFwKKyAgICB2YXIgaW5zcGVjdG9yQ29tbWFu
ZExpbmVBUEkgPSBldmFsRnVuY3Rpb24uY2FsbChldmFsT2JqZWN0LCAid2luZG93LmNvbnNvbGUu
X2luc3BlY3RvckNvbW1hbmRMaW5lQVBJID0geyBcblwKKyAgICAgICAgJDogZnVuY3Rpb24oKSB7
IHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZC5hcHBseShkb2N1bWVudCwgYXJndW1lbnRz
KSB9LCBcblwKKyAgICAgICAgJCQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZG9jdW1lbnQucXVlcnlT
ZWxlY3RvckFsbC5hcHBseShkb2N1bWVudCwgYXJndW1lbnRzKSB9LCBcblwKKyAgICAgICAgJHg6
IGZ1bmN0aW9uKHhwYXRoLCBjb250ZXh0KSBcblwKKyAgICAgICAgeyBcblwKKyAgICAgICAgICAg
IHZhciBub2RlcyA9IFtdOyBcblwKKyAgICAgICAgICAgIHRyeSB7IFxuXAorICAgICAgICAgICAg
ICAgIHZhciBkb2MgPSBjb250ZXh0IHx8IGRvY3VtZW50OyBcblwKKyAgICAgICAgICAgICAgICB2
YXIgcmVzdWx0cyA9IGRvYy5ldmFsdWF0ZSh4cGF0aCwgZG9jLCBudWxsLCBYUGF0aFJlc3VsdC5B
TllfVFlQRSwgbnVsbCk7IFxuXAorICAgICAgICAgICAgICAgIHZhciBub2RlOyBcblwKKyAgICAg
ICAgICAgICAgICB3aGlsZSAobm9kZSA9IHJlc3VsdHMuaXRlcmF0ZU5leHQoKSkgbm9kZXMucHVz
aChub2RlKTsgXG5cCisgICAgICAgICAgICB9IGNhdGNoIChlKSB7fSBcblwKKyAgICAgICAgICAg
IHJldHVybiBub2RlczsgXG5cCisgICAgICAgIH0sIFxuXAorICAgICAgICBkaXI6IGZ1bmN0aW9u
KCkgeyByZXR1cm4gY29uc29sZS5kaXIuYXBwbHkoY29uc29sZSwgYXJndW1lbnRzKSB9LCBcblwK
KyAgICAgICAgZGlyeG1sOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNvbnNvbGUuZGlyeG1sLmFwcGx5
KGNvbnNvbGUsIGFyZ3VtZW50cykgfSwgXG5cCisgICAgICAgIGtleXM6IGZ1bmN0aW9uKG8pIHsg
dmFyIGEgPSBbXTsgZm9yICh2YXIgayBpbiBvKSBhLnB1c2goayk7IHJldHVybiBhOyB9LCBcblwK
KyAgICAgICAgdmFsdWVzOiBmdW5jdGlvbihvKSB7IHZhciBhID0gW107IGZvciAodmFyIGsgaW4g
bykgYS5wdXNoKG9ba10pOyByZXR1cm4gYTsgfSwgXG5cCisgICAgICAgIHByb2ZpbGU6IGZ1bmN0
aW9uKCkgeyByZXR1cm4gY29uc29sZS5wcm9maWxlLmFwcGx5KGNvbnNvbGUsIGFyZ3VtZW50cykg
fSwgXG5cCisgICAgICAgIHByb2ZpbGVFbmQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY29uc29sZS5w
cm9maWxlRW5kLmFwcGx5KGNvbnNvbGUsIGFyZ3VtZW50cykgfSwgXG5cCisgICAgICAgIF9sb2dF
dmVudDogZnVuY3Rpb24gX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJX2xvZ0V2ZW50KGUpIHsgY29u
c29sZS5sb2coZS50eXBlLCBlKTsgfSwgXG5cCisgICAgICAgIF9hbGxFdmVudFR5cGVzOiBbXCJt
b3VzZVwiLCBcImtleVwiLCBcImxvYWRcIiwgXCJ1bmxvYWRcIiwgXCJhYm9ydFwiLCBcImVycm9y
XCIsIFxuXAorICAgICAgICAgICAgXCJzZWxlY3RcIiwgXCJjaGFuZ2VcIiwgXCJzdWJtaXRcIiwg
XCJyZXNldFwiLCBcImZvY3VzXCIsIFwiYmx1clwiLCBcblwKKyAgICAgICAgICAgIFwicmVzaXpl
XCIsIFwic2Nyb2xsXCJdLCBcblwKKyAgICAgICAgX25vcm1hbGl6ZUV2ZW50VHlwZXM6IGZ1bmN0
aW9uKHQpIFxuXAorICAgICAgICB7IFxuXAorICAgICAgICAgICAgaWYgKHR5cGVvZiB0ID09PSBc
InVuZGVmaW5lZFwiKSBcblwKKyAgICAgICAgICAgICAgICB0ID0gY29uc29sZS5faW5zcGVjdG9y
Q29tbWFuZExpbmVBUEkuX2FsbEV2ZW50VHlwZXM7IFxuXAorICAgICAgICAgICAgZWxzZSBpZiAo
dHlwZW9mIHQgPT09IFwic3RyaW5nXCIpIFxuXAorICAgICAgICAgICAgICAgIHQgPSBbdF07IFxu
XAorICAgICAgICAgICAgdmFyIGksIHRlID0gW107IFxuXAorICAgICAgICAgICAgZm9yIChpID0g
MDsgaSA8IHQubGVuZ3RoOyBpKyspIHsgXG5cCisgICAgICAgICAgICAgICAgaWYgKHRbaV0gPT09
IFwibW91c2VcIikgXG5cCisgICAgICAgICAgICAgICAgICAgIHRlLnNwbGljZSgwLCAwLCBcIm1v
dXNlZG93blwiLCBcIm1vdXNldXBcIiwgXCJjbGlja1wiLCBcImRibGNsaWNrXCIsIFxuXAorICAg
ICAgICAgICAgICAgICAgICAgICAgXCJtb3VzZW1vdmVcIiwgXCJtb3VzZW92ZXJcIiwgXCJtb3Vz
ZW91dFwiKTsgXG5cCisgICAgICAgICAgICAgICAgZWxzZSBpZiAodFtpXSA9PT0gXCJrZXlcIikg
XG5cCisgICAgICAgICAgICAgICAgICAgIHRlLnNwbGljZSgwLCAwLCBcImtleWRvd25cIiwgXCJr
ZXl1cFwiLCBcImtleXByZXNzXCIpOyBcblwKKyAgICAgICAgICAgICAgICBlbHNlIFxuXAorICAg
ICAgICAgICAgICAgICAgICB0ZS5wdXNoKHRbaV0pOyBcblwKKyAgICAgICAgICAgIH0gXG5cCisg
ICAgICAgICAgICByZXR1cm4gdGU7IFxuXAorICAgICAgICB9LCBcblwKKyAgICAgICAgbW9uaXRv
ckV2ZW50czogZnVuY3Rpb24obywgdCkgXG5cCisgICAgICAgIHsgXG5cCisgICAgICAgICAgICBp
ZiAoIW8gfHwgIW8uYWRkRXZlbnRMaXN0ZW5lciB8fCAhby5yZW1vdmVFdmVudExpc3RlbmVyKSBc
blwKKyAgICAgICAgICAgICAgICByZXR1cm47IFxuXAorICAgICAgICAgICAgdCA9IGNvbnNvbGUu
X2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9ub3JtYWxpemVFdmVudFR5cGVzKHQpOyBcblwKKyAg
ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0Lmxlbmd0aDsgaSsrKSB7IFxuXAorICAgICAgICAg
ICAgICAgIG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0W2ldLCBjb25zb2xlLl9pbnNwZWN0b3JDb21t
YW5kTGluZUFQSS5fbG9nRXZlbnQsIGZhbHNlKTsgXG5cCisgICAgICAgICAgICAgICAgby5hZGRF
dmVudExpc3RlbmVyKHRbaV0sIGNvbnNvbGUuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9sb2dF
dmVudCwgZmFsc2UpOyBcblwKKyAgICAgICAgICAgIH0gXG5cCisgICAgICAgIH0sIFxuXAorICAg
ICAgICB1bm1vbml0b3JFdmVudHM6IGZ1bmN0aW9uKG8sIHQpIFxuXAorICAgICAgICB7IFxuXAor
ICAgICAgICAgICAgaWYgKCFvIHx8ICFvLnJlbW92ZUV2ZW50TGlzdGVuZXIpIFxuXAorICAgICAg
ICAgICAgICAgIHJldHVybjsgXG5cCisgICAgICAgICAgICB0ID0gY29uc29sZS5faW5zcGVjdG9y
Q29tbWFuZExpbmVBUEkuX25vcm1hbGl6ZUV2ZW50VHlwZXModCk7IFxuXAorICAgICAgICAgICAg
Zm9yIChpID0gMDsgaSA8IHQubGVuZ3RoOyBpKyspIHsgXG5cCisgICAgICAgICAgICAgICAgby5y
ZW1vdmVFdmVudExpc3RlbmVyKHRbaV0sIGNvbnNvbGUuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJ
Ll9sb2dFdmVudCwgZmFsc2UpOyBcblwKKyAgICAgICAgICAgIH0gXG5cCisgICAgICAgIH0sIFxu
XAorICAgICAgICBfaW5zcGVjdGVkTm9kZXM6IFtdLCBcblwKKyAgICAgICAgZ2V0ICQwKCkgeyBy
ZXR1cm4gY29uc29sZS5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2luc3BlY3RlZE5vZGVzWzBd
IH0sIFxuXAorICAgICAgICBnZXQgJDEoKSB7IHJldHVybiBjb25zb2xlLl9pbnNwZWN0b3JDb21t
YW5kTGluZUFQSS5faW5zcGVjdGVkTm9kZXNbMV0gfSwgXG5cCisgICAgICAgIGdldCAkMigpIHsg
cmV0dXJuIGNvbnNvbGUuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9pbnNwZWN0ZWROb2Rlc1sy
XSB9LCBcblwKKyAgICAgICAgZ2V0ICQzKCkgeyByZXR1cm4gY29uc29sZS5faW5zcGVjdG9yQ29t
bWFuZExpbmVBUEkuX2luc3BlY3RlZE5vZGVzWzNdIH0sIFxuXAorICAgICAgICBnZXQgJDQoKSB7
IHJldHVybiBjb25zb2xlLl9pbnNwZWN0b3JDb21tYW5kTGluZUFQSS5faW5zcGVjdGVkTm9kZXNb
NF0gfSwgXG5cCiAgICAgfTsiKTsKIAogICAgIGluc3BlY3RvckNvbW1hbmRMaW5lQVBJLmNsZWFy
ID0gSW5zcGVjdG9yQ29udHJvbGxlci53cmFwQ2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQuX2NsZWFy
Q29uc29sZU1lc3NhZ2VzKTsKICAgICBpbnNwZWN0b3JDb21tYW5kTGluZUFQSS5pbnNwZWN0ID0g
SW5zcGVjdG9yQ29udHJvbGxlci53cmFwQ2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQuX2luc3BlY3RP
YmplY3QpOworICAgIGluc3BlY3RvckNvbW1hbmRMaW5lQVBJLmNvcHkgPSBJbnNwZWN0b3JDb250
cm9sbGVyLndyYXBDYWxsYmFjayhJbmplY3RlZFNjcmlwdC5fY29weSk7CiB9CiAKIEluamVjdGVk
U2NyaXB0Ll9yZXNvbHZlT2JqZWN0ID0gZnVuY3Rpb24ob2JqZWN0UHJveHkpCg==
</data>
<flag name="review"
          id="24289"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42734</attachid>
            <date>2009-11-08 22:16:03 -0800</date>
            <delta_ts>2009-11-08 22:39:41 -0800</delta_ts>
            <desc>proposed patch 4</desc>
            <filename>copy.diff</filename>
            <type>text/plain</type>
            <size>11164</size>
            <attacher name="Keishi Hattori">keishi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDYzNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMDktMTEtMDggIEtlaXNoaSBIYXR0b3JpICA8Y2FzZXkuaGF0dG9y
aUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV2ViIEluc3BlY3RvcjogSW5zcGVjdG9yIHNob3VsZCBzdXBwb3J0IGNvcHkoKSBpbiB0
aGUgY29tbWFuZCBsaW5lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zMTIzOAorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6Y29weVRleHQpOiBBZGRlZC4K
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oOiBBZGRlZCBjb3B5VGV4dAor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbDogQWRkZWQgY29weVRleHQK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzOgorICAgICAg
ICAoSW5qZWN0ZWRTY3JpcHQuX2NvcHkpOiBBZGRlZC4KKyAgICAgICAgKEluamVjdGVkU2NyaXB0
Ll9lbnN1cmVDb21tYW5kTGluZUFQSUluc3RhbGxlZCk6CisKIDIwMDktMTEtMDggIFBhdmVsIEZl
bGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGlt
b3RoeSBIYXRjaGVyLgpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAJ
KHJldmlzaW9uIDUwNjE3KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUwNyw2ICs1MDcsMTEgQEAgdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kOjpkZWxldGVDb29raWUoY29ucwogICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGVsZXRl
Q29va2llKGNvb2tpZU5hbWUsIGRvbWFpbik7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6
Y29weVRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQoreworICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQ
YXN0ZWJvYXJkKCktPndyaXRlUGxhaW5UZXh0KHRleHQpOworfQorCiB2b2lkIEluc3BlY3RvckJh
Y2tlbmQ6OmhpZ2hsaWdodChsb25nIG5vZGVJZCkKIHsKICAgICBpZiAoTm9kZSogbm9kZSA9IG5v
ZGVGb3JJZChub2RlSWQpKQpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaAko
cmV2aXNpb24gNTA2MTcpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0Myw2ICsxNDMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRD
b29raWVzKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIGRvbWFpbik7CiAgICAgdm9pZCBkZWxl
dGVDb29raWUoY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbik7
CiAKKyAgICB2b2lkIGNvcHlUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCk7CisKICAgICAvLyBHZW5l
cmljIGNvZGUgY2FsbGVkIGZyb20gY3VzdG9tIGltcGxlbWVudGF0aW9ucy4KICAgICB2b2lkIGhp
Z2hsaWdodChsb25nIG5vZGVJZCk7CiAgICAgTm9kZSogbm9kZUZvcklkKGxvbmcgbm9kZUlkKTsK
SW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsCShyZXZpc2lvbiA1MDYx
NykKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTcsNiArMTE3LDcgQEAgbW9kdWxlIGNvcmUgewogCiAgICAgICAgIC8vIENhbGxl
ZCBmcm9tIEluamVjdGVkU2NyaXB0LgogICAgICAgICAvLyBUT0RPOiBleHRyYWN0IGludG8gYSBz
ZXBhcmF0ZSBJREwuCisgICAgICAgIHZvaWQgY29weVRleHQoaW4gRE9NU3RyaW5nIHRleHQpOwog
ICAgICAgICBbQ3VzdG9tXSBET01PYmplY3Qgbm9kZUZvcklkKGluIGxvbmcgbm9kZUlkKTsKICAg
ICAgICAgW0N1c3RvbV0gbG9uZyB3cmFwT2JqZWN0KGluIERPTU9iamVjdCBvYmplY3QsIGluIERP
TVN0cmluZyBvYmplY3RHcm91cCk7CiAgICAgICAgIFtDdXN0b21dIERPTU9iamVjdCB1bndyYXBP
YmplY3QoaW4gbG9uZyBvYmplY3RJZCk7CkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSW5qZWN0ZWRTY3JpcHQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0luamVjdGVkU2NyaXB0LmpzCShyZXZpc2lvbiA1MDYxNykKKysrIFdlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcwkod29ya2luZyBjb3B5KQpAQCAtOTAz
LDc3ICs5MDMsOTIgQEAgSW5qZWN0ZWRTY3JpcHQuX2luc3BlY3RPYmplY3QgPSBmdW5jdGlvbgog
ICAgIH0KIH0KIAorSW5qZWN0ZWRTY3JpcHQuX2NvcHkgPSBmdW5jdGlvbihvKQoreworICAgIGlm
IChPYmplY3QudHlwZShvKSA9PT0gIm5vZGUiKSB7CisgICAgICAgIHZhciBub2RlSWQgPSBJbnNw
ZWN0b3JDb250cm9sbGVyLnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobywgZmFsc2UpOworICAgICAg
ICBJbnNwZWN0b3JDb250cm9sbGVyLmNvcHlOb2RlKG5vZGVJZCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5jb3B5VGV4dChvKTsKKyAgICB9Cit9CisKIEluamVj
dGVkU2NyaXB0Ll9lbnN1cmVDb21tYW5kTGluZUFQSUluc3RhbGxlZCA9IGZ1bmN0aW9uKGV2YWxG
dW5jdGlvbiwgZXZhbE9iamVjdCkKIHsKICAgICBpZiAoZXZhbEZ1bmN0aW9uLmNhbGwoZXZhbE9i
amVjdCwgIndpbmRvdy5jb25zb2xlLl9pbnNwZWN0b3JDb21tYW5kTGluZUFQSSIpKQogICAgICAg
ICByZXR1cm47Ci0gICAgdmFyIGluc3BlY3RvckNvbW1hbmRMaW5lQVBJID0gZXZhbEZ1bmN0aW9u
LmNhbGwoZXZhbE9iamVjdCwgIndpbmRvdy5jb25zb2xlLl9pbnNwZWN0b3JDb21tYW5kTGluZUFQ
SSA9IHsgXAotICAgICAgICAkOiBmdW5jdGlvbigpIHsgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkLmFwcGx5KGRvY3VtZW50LCBhcmd1bWVudHMpIH0sIFwKLSAgICAgICAgJCQ6IGZ1bmN0
aW9uKCkgeyByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbC5hcHBseShkb2N1bWVudCwg
YXJndW1lbnRzKSB9LCBcCi0gICAgICAgICR4OiBmdW5jdGlvbih4cGF0aCwgY29udGV4dCkgeyBc
Ci0gICAgICAgICAgICB2YXIgbm9kZXMgPSBbXTsgXAotICAgICAgICAgICAgdHJ5IHsgXAotICAg
ICAgICAgICAgICAgIHZhciBkb2MgPSBjb250ZXh0IHx8IGRvY3VtZW50OyBcCi0gICAgICAgICAg
ICAgICAgdmFyIHJlc3VsdHMgPSBkb2MuZXZhbHVhdGUoeHBhdGgsIGRvYywgbnVsbCwgWFBhdGhS
ZXN1bHQuQU5ZX1RZUEUsIG51bGwpOyBcCi0gICAgICAgICAgICAgICAgdmFyIG5vZGU7IFwKLSAg
ICAgICAgICAgICAgICB3aGlsZSAobm9kZSA9IHJlc3VsdHMuaXRlcmF0ZU5leHQoKSkgbm9kZXMu
cHVzaChub2RlKTsgXAotICAgICAgICAgICAgfSBjYXRjaCAoZSkge30gXAotICAgICAgICAgICAg
cmV0dXJuIG5vZGVzOyBcCi0gICAgICAgIH0sIFwKLSAgICAgICAgZGlyOiBmdW5jdGlvbigpIHsg
cmV0dXJuIGNvbnNvbGUuZGlyLmFwcGx5KGNvbnNvbGUsIGFyZ3VtZW50cykgfSwgXAotICAgICAg
ICBkaXJ4bWw6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY29uc29sZS5kaXJ4bWwuYXBwbHkoY29uc29s
ZSwgYXJndW1lbnRzKSB9LCBcCi0gICAgICAgIGtleXM6IGZ1bmN0aW9uKG8pIHsgdmFyIGEgPSBb
XTsgZm9yICh2YXIgayBpbiBvKSBhLnB1c2goayk7IHJldHVybiBhOyB9LCBcCi0gICAgICAgIHZh
bHVlczogZnVuY3Rpb24obykgeyB2YXIgYSA9IFtdOyBmb3IgKHZhciBrIGluIG8pIGEucHVzaChv
W2tdKTsgcmV0dXJuIGE7IH0sIFwKLSAgICAgICAgcHJvZmlsZTogZnVuY3Rpb24oKSB7IHJldHVy
biBjb25zb2xlLnByb2ZpbGUuYXBwbHkoY29uc29sZSwgYXJndW1lbnRzKSB9LCBcCi0gICAgICAg
IHByb2ZpbGVFbmQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY29uc29sZS5wcm9maWxlRW5kLmFwcGx5
KGNvbnNvbGUsIGFyZ3VtZW50cykgfSwgXAotICAgICAgICBfbG9nRXZlbnQ6IGZ1bmN0aW9uIF9p
bnNwZWN0b3JDb21tYW5kTGluZUFQSV9sb2dFdmVudChlKSB7IGNvbnNvbGUubG9nKGUudHlwZSwg
ZSk7IH0sIFwKLSAgICAgICAgX2FsbEV2ZW50VHlwZXM6IFtcIm1vdXNlXCIsIFwia2V5XCIsIFwi
bG9hZFwiLCBcInVubG9hZFwiLCBcImFib3J0XCIsIFwiZXJyb3JcIiwgXAotICAgICAgICAgICAg
XCJzZWxlY3RcIiwgXCJjaGFuZ2VcIiwgXCJzdWJtaXRcIiwgXCJyZXNldFwiLCBcImZvY3VzXCIs
IFwiYmx1clwiLCBcCi0gICAgICAgICAgICBcInJlc2l6ZVwiLCBcInNjcm9sbFwiXSwgXAotICAg
ICAgICBfbm9ybWFsaXplRXZlbnRUeXBlczogZnVuY3Rpb24odCkgeyBcCi0gICAgICAgICAgICBp
ZiAodHlwZW9mIHQgPT09IFwidW5kZWZpbmVkXCIpIFwKLSAgICAgICAgICAgICAgICB0ID0gY29u
c29sZS5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2FsbEV2ZW50VHlwZXM7IFwKLSAgICAgICAg
ICAgIGVsc2UgaWYgKHR5cGVvZiB0ID09PSBcInN0cmluZ1wiKSBcCi0gICAgICAgICAgICAgICAg
dCA9IFt0XTsgXAotICAgICAgICAgICAgdmFyIGksIHRlID0gW107IFwKLSAgICAgICAgICAgIGZv
ciAoaSA9IDA7IGkgPCB0Lmxlbmd0aDsgaSsrKSB7IFwKLSAgICAgICAgICAgICAgICBpZiAodFtp
XSA9PT0gXCJtb3VzZVwiKSBcCi0gICAgICAgICAgICAgICAgICAgIHRlLnNwbGljZSgwLCAwLCBc
Im1vdXNlZG93blwiLCBcIm1vdXNldXBcIiwgXCJjbGlja1wiLCBcImRibGNsaWNrXCIsIFwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFwibW91c2Vtb3ZlXCIsIFwibW91c2VvdmVyXCIsIFwibW91
c2VvdXRcIik7IFwKLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0W2ldID09PSBcImtleVwiKSBc
Ci0gICAgICAgICAgICAgICAgICAgIHRlLnNwbGljZSgwLCAwLCBcImtleWRvd25cIiwgXCJrZXl1
cFwiLCBcImtleXByZXNzXCIpOyBcCi0gICAgICAgICAgICAgICAgZWxzZSBcCi0gICAgICAgICAg
ICAgICAgICAgIHRlLnB1c2godFtpXSk7IFwKLSAgICAgICAgICAgIH0gXAotICAgICAgICAgICAg
cmV0dXJuIHRlOyBcCi0gICAgICAgIH0sIFwKLSAgICAgICAgbW9uaXRvckV2ZW50czogZnVuY3Rp
b24obywgdCkgeyBcCi0gICAgICAgICAgICBpZiAoIW8gfHwgIW8uYWRkRXZlbnRMaXN0ZW5lciB8
fCAhby5yZW1vdmVFdmVudExpc3RlbmVyKSBcCi0gICAgICAgICAgICAgICAgcmV0dXJuOyBcCi0g
ICAgICAgICAgICB0ID0gY29uc29sZS5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX25vcm1hbGl6
ZUV2ZW50VHlwZXModCk7IFwKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0Lmxlbmd0aDsg
aSsrKSB7IFwKLSAgICAgICAgICAgICAgICBvLnJlbW92ZUV2ZW50TGlzdGVuZXIodFtpXSwgY29u
c29sZS5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2xvZ0V2ZW50LCBmYWxzZSk7IFwKLSAgICAg
ICAgICAgICAgICBvLmFkZEV2ZW50TGlzdGVuZXIodFtpXSwgY29uc29sZS5faW5zcGVjdG9yQ29t
bWFuZExpbmVBUEkuX2xvZ0V2ZW50LCBmYWxzZSk7IFwKLSAgICAgICAgICAgIH0gXAotICAgICAg
ICB9LCBcCi0gICAgICAgIHVubW9uaXRvckV2ZW50czogZnVuY3Rpb24obywgdCkgeyBcCi0gICAg
ICAgICAgICBpZiAoIW8gfHwgIW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcikgXAotICAgICAgICAgICAg
ICAgIHJldHVybjsgXAotICAgICAgICAgICAgdCA9IGNvbnNvbGUuX2luc3BlY3RvckNvbW1hbmRM
aW5lQVBJLl9ub3JtYWxpemVFdmVudFR5cGVzKHQpOyBcCi0gICAgICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgdC5sZW5ndGg7IGkrKykgeyBcCi0gICAgICAgICAgICAgICAgby5yZW1vdmVFdmVudExp
c3RlbmVyKHRbaV0sIGNvbnNvbGUuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9sb2dFdmVudCwg
ZmFsc2UpOyBcCi0gICAgICAgICAgICB9IFwKLSAgICAgICAgfSwgXAotICAgICAgICBfaW5zcGVj
dGVkTm9kZXM6IFtdLCBcCi0gICAgICAgIGdldCAkMCgpIHsgcmV0dXJuIGNvbnNvbGUuX2luc3Bl
Y3RvckNvbW1hbmRMaW5lQVBJLl9pbnNwZWN0ZWROb2Rlc1swXSB9LCBcCi0gICAgICAgIGdldCAk
MSgpIHsgcmV0dXJuIGNvbnNvbGUuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9pbnNwZWN0ZWRO
b2Rlc1sxXSB9LCBcCi0gICAgICAgIGdldCAkMigpIHsgcmV0dXJuIGNvbnNvbGUuX2luc3BlY3Rv
ckNvbW1hbmRMaW5lQVBJLl9pbnNwZWN0ZWROb2Rlc1syXSB9LCBcCi0gICAgICAgIGdldCAkMygp
IHsgcmV0dXJuIGNvbnNvbGUuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9pbnNwZWN0ZWROb2Rl
c1szXSB9LCBcCi0gICAgICAgIGdldCAkNCgpIHsgcmV0dXJuIGNvbnNvbGUuX2luc3BlY3RvckNv
bW1hbmRMaW5lQVBJLl9pbnNwZWN0ZWROb2Rlc1s0XSB9IFwKKyAgICB2YXIgaW5zcGVjdG9yQ29t
bWFuZExpbmVBUEkgPSBldmFsRnVuY3Rpb24uY2FsbChldmFsT2JqZWN0LCAid2luZG93LmNvbnNv
bGUuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJID0geyBcblwKKyAgICAgICAgJDogZnVuY3Rpb24o
KSB7IHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZC5hcHBseShkb2N1bWVudCwgYXJndW1l
bnRzKSB9LCBcblwKKyAgICAgICAgJCQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZG9jdW1lbnQucXVl
cnlTZWxlY3RvckFsbC5hcHBseShkb2N1bWVudCwgYXJndW1lbnRzKSB9LCBcblwKKyAgICAgICAg
JHg6IGZ1bmN0aW9uKHhwYXRoLCBjb250ZXh0KSBcblwKKyAgICAgICAgeyBcblwKKyAgICAgICAg
ICAgIHZhciBub2RlcyA9IFtdOyBcblwKKyAgICAgICAgICAgIHRyeSB7IFxuXAorICAgICAgICAg
ICAgICAgIHZhciBkb2MgPSBjb250ZXh0IHx8IGRvY3VtZW50OyBcblwKKyAgICAgICAgICAgICAg
ICB2YXIgcmVzdWx0cyA9IGRvYy5ldmFsdWF0ZSh4cGF0aCwgZG9jLCBudWxsLCBYUGF0aFJlc3Vs
dC5BTllfVFlQRSwgbnVsbCk7IFxuXAorICAgICAgICAgICAgICAgIHZhciBub2RlOyBcblwKKyAg
ICAgICAgICAgICAgICB3aGlsZSAobm9kZSA9IHJlc3VsdHMuaXRlcmF0ZU5leHQoKSkgbm9kZXMu
cHVzaChub2RlKTsgXG5cCisgICAgICAgICAgICB9IGNhdGNoIChlKSB7fSBcblwKKyAgICAgICAg
ICAgIHJldHVybiBub2RlczsgXG5cCisgICAgICAgIH0sIFxuXAorICAgICAgICBkaXI6IGZ1bmN0
aW9uKCkgeyByZXR1cm4gY29uc29sZS5kaXIuYXBwbHkoY29uc29sZSwgYXJndW1lbnRzKSB9LCBc
blwKKyAgICAgICAgZGlyeG1sOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNvbnNvbGUuZGlyeG1sLmFw
cGx5KGNvbnNvbGUsIGFyZ3VtZW50cykgfSwgXG5cCisgICAgICAgIGtleXM6IGZ1bmN0aW9uKG8p
IHsgdmFyIGEgPSBbXTsgZm9yICh2YXIgayBpbiBvKSBhLnB1c2goayk7IHJldHVybiBhOyB9LCBc
blwKKyAgICAgICAgdmFsdWVzOiBmdW5jdGlvbihvKSB7IHZhciBhID0gW107IGZvciAodmFyIGsg
aW4gbykgYS5wdXNoKG9ba10pOyByZXR1cm4gYTsgfSwgXG5cCisgICAgICAgIHByb2ZpbGU6IGZ1
bmN0aW9uKCkgeyByZXR1cm4gY29uc29sZS5wcm9maWxlLmFwcGx5KGNvbnNvbGUsIGFyZ3VtZW50
cykgfSwgXG5cCisgICAgICAgIHByb2ZpbGVFbmQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY29uc29s
ZS5wcm9maWxlRW5kLmFwcGx5KGNvbnNvbGUsIGFyZ3VtZW50cykgfSwgXG5cCisgICAgICAgIF9s
b2dFdmVudDogZnVuY3Rpb24gX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJX2xvZ0V2ZW50KGUpIHsg
Y29uc29sZS5sb2coZS50eXBlLCBlKTsgfSwgXG5cCisgICAgICAgIF9hbGxFdmVudFR5cGVzOiBb
XCJtb3VzZVwiLCBcImtleVwiLCBcImxvYWRcIiwgXCJ1bmxvYWRcIiwgXCJhYm9ydFwiLCBcImVy
cm9yXCIsIFxuXAorICAgICAgICAgICAgXCJzZWxlY3RcIiwgXCJjaGFuZ2VcIiwgXCJzdWJtaXRc
IiwgXCJyZXNldFwiLCBcImZvY3VzXCIsIFwiYmx1clwiLCBcblwKKyAgICAgICAgICAgIFwicmVz
aXplXCIsIFwic2Nyb2xsXCJdLCBcblwKKyAgICAgICAgX25vcm1hbGl6ZUV2ZW50VHlwZXM6IGZ1
bmN0aW9uKHQpIFxuXAorICAgICAgICB7IFxuXAorICAgICAgICAgICAgaWYgKHR5cGVvZiB0ID09
PSBcInVuZGVmaW5lZFwiKSBcblwKKyAgICAgICAgICAgICAgICB0ID0gY29uc29sZS5faW5zcGVj
dG9yQ29tbWFuZExpbmVBUEkuX2FsbEV2ZW50VHlwZXM7IFxuXAorICAgICAgICAgICAgZWxzZSBp
ZiAodHlwZW9mIHQgPT09IFwic3RyaW5nXCIpIFxuXAorICAgICAgICAgICAgICAgIHQgPSBbdF07
IFxuXAorICAgICAgICAgICAgdmFyIGksIHRlID0gW107IFxuXAorICAgICAgICAgICAgZm9yIChp
ID0gMDsgaSA8IHQubGVuZ3RoOyBpKyspIHsgXG5cCisgICAgICAgICAgICAgICAgaWYgKHRbaV0g
PT09IFwibW91c2VcIikgXG5cCisgICAgICAgICAgICAgICAgICAgIHRlLnNwbGljZSgwLCAwLCBc
Im1vdXNlZG93blwiLCBcIm1vdXNldXBcIiwgXCJjbGlja1wiLCBcImRibGNsaWNrXCIsIFxuXAor
ICAgICAgICAgICAgICAgICAgICAgICAgXCJtb3VzZW1vdmVcIiwgXCJtb3VzZW92ZXJcIiwgXCJt
b3VzZW91dFwiKTsgXG5cCisgICAgICAgICAgICAgICAgZWxzZSBpZiAodFtpXSA9PT0gXCJrZXlc
IikgXG5cCisgICAgICAgICAgICAgICAgICAgIHRlLnNwbGljZSgwLCAwLCBcImtleWRvd25cIiwg
XCJrZXl1cFwiLCBcImtleXByZXNzXCIpOyBcblwKKyAgICAgICAgICAgICAgICBlbHNlIFxuXAor
ICAgICAgICAgICAgICAgICAgICB0ZS5wdXNoKHRbaV0pOyBcblwKKyAgICAgICAgICAgIH0gXG5c
CisgICAgICAgICAgICByZXR1cm4gdGU7IFxuXAorICAgICAgICB9LCBcblwKKyAgICAgICAgbW9u
aXRvckV2ZW50czogZnVuY3Rpb24obywgdCkgXG5cCisgICAgICAgIHsgXG5cCisgICAgICAgICAg
ICBpZiAoIW8gfHwgIW8uYWRkRXZlbnRMaXN0ZW5lciB8fCAhby5yZW1vdmVFdmVudExpc3RlbmVy
KSBcblwKKyAgICAgICAgICAgICAgICByZXR1cm47IFxuXAorICAgICAgICAgICAgdCA9IGNvbnNv
bGUuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9ub3JtYWxpemVFdmVudFR5cGVzKHQpOyBcblwK
KyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0Lmxlbmd0aDsgaSsrKSB7IFxuXAorICAgICAg
ICAgICAgICAgIG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0W2ldLCBjb25zb2xlLl9pbnNwZWN0b3JD
b21tYW5kTGluZUFQSS5fbG9nRXZlbnQsIGZhbHNlKTsgXG5cCisgICAgICAgICAgICAgICAgby5h
ZGRFdmVudExpc3RlbmVyKHRbaV0sIGNvbnNvbGUuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9s
b2dFdmVudCwgZmFsc2UpOyBcblwKKyAgICAgICAgICAgIH0gXG5cCisgICAgICAgIH0sIFxuXAor
ICAgICAgICB1bm1vbml0b3JFdmVudHM6IGZ1bmN0aW9uKG8sIHQpIFxuXAorICAgICAgICB7IFxu
XAorICAgICAgICAgICAgaWYgKCFvIHx8ICFvLnJlbW92ZUV2ZW50TGlzdGVuZXIpIFxuXAorICAg
ICAgICAgICAgICAgIHJldHVybjsgXG5cCisgICAgICAgICAgICB0ID0gY29uc29sZS5faW5zcGVj
dG9yQ29tbWFuZExpbmVBUEkuX25vcm1hbGl6ZUV2ZW50VHlwZXModCk7IFxuXAorICAgICAgICAg
ICAgZm9yIChpID0gMDsgaSA8IHQubGVuZ3RoOyBpKyspIHsgXG5cCisgICAgICAgICAgICAgICAg
by5yZW1vdmVFdmVudExpc3RlbmVyKHRbaV0sIGNvbnNvbGUuX2luc3BlY3RvckNvbW1hbmRMaW5l
QVBJLl9sb2dFdmVudCwgZmFsc2UpOyBcblwKKyAgICAgICAgICAgIH0gXG5cCisgICAgICAgIH0s
IFxuXAorICAgICAgICBfaW5zcGVjdGVkTm9kZXM6IFtdLCBcblwKKyAgICAgICAgZ2V0ICQwKCkg
eyByZXR1cm4gY29uc29sZS5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2luc3BlY3RlZE5vZGVz
WzBdIH0sIFxuXAorICAgICAgICBnZXQgJDEoKSB7IHJldHVybiBjb25zb2xlLl9pbnNwZWN0b3JD
b21tYW5kTGluZUFQSS5faW5zcGVjdGVkTm9kZXNbMV0gfSwgXG5cCisgICAgICAgIGdldCAkMigp
IHsgcmV0dXJuIGNvbnNvbGUuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9pbnNwZWN0ZWROb2Rl
c1syXSB9LCBcblwKKyAgICAgICAgZ2V0ICQzKCkgeyByZXR1cm4gY29uc29sZS5faW5zcGVjdG9y
Q29tbWFuZExpbmVBUEkuX2luc3BlY3RlZE5vZGVzWzNdIH0sIFxuXAorICAgICAgICBnZXQgJDQo
KSB7IHJldHVybiBjb25zb2xlLl9pbnNwZWN0b3JDb21tYW5kTGluZUFQSS5faW5zcGVjdGVkTm9k
ZXNbNF0gfSwgXG5cCiAgICAgfTsiKTsKIAogICAgIGluc3BlY3RvckNvbW1hbmRMaW5lQVBJLmNs
ZWFyID0gSW5zcGVjdG9yQ29udHJvbGxlci53cmFwQ2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQuX2Ns
ZWFyQ29uc29sZU1lc3NhZ2VzKTsKICAgICBpbnNwZWN0b3JDb21tYW5kTGluZUFQSS5pbnNwZWN0
ID0gSW5zcGVjdG9yQ29udHJvbGxlci53cmFwQ2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQuX2luc3Bl
Y3RPYmplY3QpOworICAgIGluc3BlY3RvckNvbW1hbmRMaW5lQVBJLmNvcHkgPSBJbnNwZWN0b3JD
b250cm9sbGVyLndyYXBDYWxsYmFjayhJbmplY3RlZFNjcmlwdC5fY29weSk7CiB9CiAKIEluamVj
dGVkU2NyaXB0Ll9yZXNvbHZlT2JqZWN0ID0gZnVuY3Rpb24ob2JqZWN0UHJveHkpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>