<?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>5262</bug_id>
          
          <creation_ts>2005-10-04 14:16:28 -0700</creation_ts>
          <short_desc>XMLSerializer drops Namespace information</short_desc>
          <delta_ts>2007-06-23 03:37:22 -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>XML</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, NeedsReduction</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Richard Vermillion">rvermillion</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>awiner</cc>
    
    <cc>eric</cc>
    
    <cc>hsivonen</cc>
    
    <cc>ian</cc>
    
    <cc>lamargoddard</cc>
    
    <cc>unqualified</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>21363</commentid>
    <comment_count>0</comment_count>
    <who name="Richard Vermillion">rvermillion</who>
    <bug_when>2005-10-04 14:16:28 -0700</bug_when>
    <thetext>The XMLSerializer object in Safari 2.0.1 does not serialize XML Namespace information.  Specifically, no 
xmlns attributes are serialized and attributes are only serialized with their localName.  This leads to 
invalid HTML when there are two or more attributes with the same localName but different 
namespaceURI&apos;s.  The DOM implementation itself is correctly handling the namespace information, but 
it is not being serialized.

The following script will produce the error (it works fine in Firefox):

  var d = document.implementation.createDocument(&quot;urn:foo-ns&quot;, &quot;foo:root&quot;, null);
  if (!d.documentElement) {
    // This shouldn&apos;t happen, since DomImplementation.createDocument
    // is supposed to create the root element.  But in Safari, it&apos;s required.
    d.appendChild(d.createElementNS(&quot;urn:foo-ns&quot;, &quot;foo:root&quot;));
  }
  var root = d.documentElement;

  root.setAttributeNS(&quot;urn:foo-ns&quot;, &quot;foo:type&quot;, &quot;test&quot;)

  var c = d.createElementNS(null, &quot;child&quot;);
  root.appendChild(c);

  c.setAttributeNS(&quot;urn:foo-ns&quot;, &quot;foo:name&quot;, &quot;one&quot;);
  c.setAttributeNS(&quot;urn:bar-ns&quot;, &quot;bar:name&quot;, &quot;two&quot;);

  window.alert(&quot;foo:name is &quot; + c.getAttributeNS(&quot;urn:foo-ns&quot;, &quot;name&quot;) +
               &quot; and should be one&quot;);
  window.alert(&quot;bar:name is &quot; + c.getAttributeNS(&quot;urn:bar-ns&quot;, &quot;name&quot;) +
               &quot; and should be two&quot;);

  var s = new XMLSerializer();

  window.alert(s.serializeToString(d));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22210</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-10-18 03:55:30 -0700</bug_when>
    <thetext>Same as bug 3811 (which doesn&apos;t have simple steps to reproduce)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26170</commentid>
    <comment_count>2</comment_count>
    <who name="Noah Vihinen">unqualified</who>
    <bug_when>2005-12-19 00:59:35 -0800</bug_when>
    <thetext>I ran into this bug as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26425</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-12-23 05:38:16 -0800</bug_when>
    <thetext>*** Bug 3811 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26426</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-12-23 05:38:39 -0800</bug_when>
    <thetext>From bug 3811:
Expected a namespace-savvy serializer to be used. That is, expected the
serializer to preserve (ns-URI,localName) pairs by synthetizing xmlns attibutes
and prefixes if necessary. Expected residual prefixes and xmlns attributes to be
used as hints of preferred prefixes when possible.

Expected DOM Level 1 tampering with the xml:foo attributes to get the namespace
right. (IE does not do namespaces or DOM Level 1 but does have sane behavior
with DOM Level 1 and xml:foo attributes.)
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26464</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2005-12-24 02:42:56 -0800</bug_when>
    <thetext>May be relevant: &lt;http://www.w3.org/TR/2002/WD-DOM-Level-3-Core-20021022/namespaces-
algorithms.html&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26465</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-24 02:53:20 -0800</bug_when>
    <thetext>I thought I fixed this a while back, when doing the XSLTProcessor work.  I guess not.  Assigning this to 
&quot;nobody&quot; mjs can pull it back if he really wanted this assigned to him.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26466</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-24 02:55:04 -0800</bug_when>
    <thetext>It would be nice of someone could make up a DumpRenderTree compatible test case for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21997</commentid>
    <comment_count>8</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-02-23 02:55:11 -0800</bug_when>
    <thetext>&lt;rdar://problem/5018778&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20447</commentid>
    <comment_count>9</comment_count>
      <attachid>13454</attachid>
    <who name="Lamar Goddard">lamargoddard</who>
    <bug_when>2007-03-02 14:38:08 -0800</bug_when>
    <thetext>Created attachment 13454
patch for fix and test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20553</commentid>
    <comment_count>10</comment_count>
      <attachid>13454</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-03-04 22:22:50 -0800</bug_when>
    <thetext>Comment on attachment 13454
patch for fix and test case

Thanks for tackling this.

--------

+static bool shouldAddNamespaceElem(const Element* elem, Vector&lt;QualifiedName*&gt;* namespaces)

Why the unused &quot;namespaces&quot; parameter?

--------

+    const String prefix = elem-&gt;prefix();

We don&apos;t normally put const on local variables like this one. I know that some people prefer to do this in their C++ code and there can be some modest benefits, but I don&apos;t see any reason to do this with all the local variables in your patch.

--------

All the places you write:

    !!x &amp;&amp; x.length()

you don&apos;t need to do it like that. This will do the same thing, more efficiently:

    !x.isEmpty()

--------

This is a particularly inefficient way to check this:

+    if (attr-&gt;name().toString() == &quot;xmlns&quot;) {

One good way to write this is:

    static const QualifiedName xmlnsAttr(nullAtom, &quot;xmlns&quot;, nullAtom);
    if (attr-&gt;name() == xmlnsAttr) {

--------

+    if (attr-&gt;prefix() == &quot;xmlns&quot;) {

Why it OK to check the prefix here and not the namespace?

--------

+static DeprecatedString addNamespace(String prefix, const String ns, Vector&lt;QualifiedName*&gt;* namespaces)

These parameters should be const String&amp;, not String type.

The Vector should be a reference parameter, not a pointer parameter. Vector&lt;QualifiedName*&gt;&amp;.

Please don&apos;t use DeprecatedString in the interface of new functions. This should return a String.

--------

+    prefix = !!prefix ? prefix : &quot;&quot;;

Are you sure the above code is needed? I think everything would work fine without it. Null strings and empty strings behave the same in most cases.

--------

The * goes next to the type.

+        QualifiedName *item = namespaces-&gt;at(i);

--------

+static DeprecatedString startMarkup(const Node*, const Range*, EAnnotateForInterchange, CSSMutableStyleDeclaration*, Vector&lt;QualifiedName*&gt;* = 0);
+static DeprecatedString startMarkup(const Node *node, const Range *range, EAnnotateForInterchange annotate, CSSMutableStyleDeclaration *defaultStyle, Vector&lt;QualifiedName*&gt; *namespaces)

You should not have a separate declaration here. If you want to forward declare, it goes at the top of the file. Otherwise, the definition is just fine. Just put the = 0 after the namespaces vector.

+static DeprecatedString markup(Node*, bool, Vector&lt;Node*&gt;*, Vector&lt;QualifiedName*&gt;* = 0);
+static DeprecatedString markup(Node* startNode, bool onlyIncludeChildren, Vector&lt;Node*&gt;* nodes, Vector&lt;QualifiedName*&gt;* namespaces)

Same thing here.

--------

+    Vector&lt;QualifiedName*&gt; my_namespaces;

We don&apos;t use underscore in our variable names, nor do we use &quot;my&quot; in variable names.

All the QualifiedName objects of the namespaces leak here. You need to do something to delete them. A call to deleteAllValues would be one way to do it.

--------

Are you sure the test case exercises all the code paths?

I think you&apos;re using the wrong data structure for the namespaces. It seems that it should be a map from a prefix string to a namespace string. It&apos;s not a good way to use QualifiedName. I&apos;m thinking the type you want is either this:

    HashMap&lt;AtomicString, AtomicString&gt;

or this:

    HashMap&lt;AtomicStringImpl*, AtomicStringImpl*&gt;

Using a vector instead of a map is only good if there&apos;s a fixed limit on the number of namespaces. Since there isn&apos;t, you should use a map.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20380</commentid>
    <comment_count>11</comment_count>
      <attachid>13484</attachid>
    <who name="Lamar Goddard">lamargoddard</who>
    <bug_when>2007-03-05 19:02:22 -0800</bug_when>
    <thetext>Created attachment 13484
patch for fix and test case

Ok, another attempt at a patch.  I now use HashMap&lt;AtomicStringImpl*, AtomicStringImpl*&gt; and have included a slightly more complex test case that should hit all the new code branches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20105</commentid>
    <comment_count>12</comment_count>
      <attachid>13484</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-03-07 07:01:31 -0800</bug_when>
    <thetext>Comment on attachment 13484
patch for fix and test case

Thanks! This looks really good.

+    static const QualifiedName xmlnsAttr(nullAtom, &quot;xmlns&quot;, xmlnsURI);
+    if (attr-&gt;name() == xmlnsAttr) {

Is it right that the QualifiedName for the &quot;xmlns&quot; attribute has a namespace? I&apos;d expect nullAtom for the namespace. Is there a test case that verifies that this line of code is working properly?

+static bool shouldAddNamespaceAttr(const Attribute* attr, HashMap&lt;AtomicStringImpl*, AtomicStringImpl*&gt;* namespaces)
+static String addNamespace(const AtomicString&amp; prefix, const AtomicString&amp; ns, HashMap&lt;AtomicStringImpl*, AtomicStringImpl*&gt;* namespaces)
+static String addNamespaceElem(const Element *elem, HashMap&lt;AtomicStringImpl*, AtomicStringImpl*&gt;* namespaces)
+static String addNamespaceAttr(const Attribute *attr, HashMap&lt;AtomicStringImpl*, AtomicStringImpl*&gt;* namespaces)

I still think that you should pass a reference here rather than a pointer (as I suggested last time I reviewed a version of this patch). I see how it&apos;s consistent to use a * since the namespaces hash is optional at the outermost level

+    // Set pre to be emptyAtom if prefix is empty so that all empty AtomicStrings will map to the same key in the hash.
+    AtomicString pre = prefix.isEmpty() ? emptyAtom : prefix;

I believe the behavior you&apos;re talking about here is already guaranteed by AtomicString; the whole point of the class is that it merges all equal strings into a single key. The only exception to this rule might be due to the difference between &quot;null&quot; and &quot;empty&quot;, so the code above might be useful if you&apos;re trying to make the nullAtom be equal to the emptyAtom. Or maybe the hash table can&apos;t handle nullAtom as a key? Did you test without this? Are you sure you need that line of code?

+    AtomicString ns = elem-&gt;namespaceURI();

For lines of code like this one, you can actually make them slightly more efficient and not do as much reference count churning if you make the local variable &quot;const AtomicString&amp;&quot;. There are three caveats:

    1) you can&apos;t modify the value of the variable in that case
    2) you need to make sure that you do this only for functions that actually return const AtomicString&amp;, like namespaceURI() and getAttribute() and the like
    3) you have to be sure not to use the value if the object you got the string from has been deleted

Anyway, not an important optimization but worth mentioning; I would have used it where possible.

This patch has some tabs in it. We can&apos;t check a patch into Subversion in if it has tab characters, so it makes work for whoever is landing your patch if you use them. Please search for tab characters and make sure you&apos;re not using any before posting your next patch.

+    if (namespaces)
+        namespaceHash = *namespaces;

Since the markup function does not modify the passed-in namespaces hash, then I think the namespaces parameter should be a const* parameter instead of a plain old * parameter?

But I&apos;m worried now that we&apos;re going to be doing a lot of hash table copying. Is there any way to avoid that overhead while still keeping the same semantic. I know, it&apos;s my fault for suggesting we use a hash table in the first place!

Everything looks good here.

I&apos;m going to say review- just because of the tab characters, and also because there are enough comments that you might want to make some revisions. However, I don&apos;t think any of my comments besides the tab character one are mandatory changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19944</commentid>
    <comment_count>13</comment_count>
      <attachid>13536</attachid>
    <who name="Lamar Goddard">lamargoddard</who>
    <bug_when>2007-03-07 16:22:50 -0800</bug_when>
    <thetext>Created attachment 13536
patch for fix and test case

(In reply to comment #12)
&gt; +    static const QualifiedName xmlnsAttr(nullAtom, &quot;xmlns&quot;, xmlnsURI);
&gt; +    if (attr-&gt;name() == xmlnsAttr) {
&gt; 
&gt; Is it right that the QualifiedName for the &quot;xmlns&quot; attribute has a namespace?
&gt; I&apos;d expect nullAtom for the namespace. Is there a test case that verifies that
&gt; this line of code is working properly?

Yeah, I tried it with nullAtom, but it doesn&apos;t match and the &quot;node&quot; elem in the test case also output the namespace.  I got the proper namespaceURI for xmlns attributes from http://www.w3.org/TR/2006/REC-xml-names-20060816/#xmlReserved

&gt; +static bool shouldAddNamespaceAttr(const Attribute* attr,
&gt; HashMap&lt;AtomicStringImpl*, AtomicStringImpl*&gt;* namespaces)
&gt; +static String addNamespace(const AtomicString&amp; prefix, const AtomicString&amp; ns,
&gt; HashMap&lt;AtomicStringImpl*, AtomicStringImpl*&gt;* namespaces)
&gt; +static String addNamespaceElem(const Element *elem, HashMap&lt;AtomicStringImpl*,
&gt; AtomicStringImpl*&gt;* namespaces)
&gt; +static String addNamespaceAttr(const Attribute *attr,
&gt; HashMap&lt;AtomicStringImpl*, AtomicStringImpl*&gt;* namespaces)
&gt; 
&gt; I still think that you should pass a reference here rather than a pointer (as I
&gt; suggested last time I reviewed a version of this patch). I see how it&apos;s
&gt; consistent to use a * since the namespaces hash is optional at the outermost
&gt; level

I&apos;ve made this change.

&gt; +    // Set pre to be emptyAtom if prefix is empty so that all empty
&gt; AtomicStrings will map to the same key in the hash.
&gt; +    AtomicString pre = prefix.isEmpty() ? emptyAtom : prefix;
&gt; 
&gt; I believe the behavior you&apos;re talking about here is already guaranteed by
&gt; AtomicString; the whole point of the class is that it merges all equal strings
&gt; into a single key. The only exception to this rule might be due to the
&gt; difference between &quot;null&quot; and &quot;empty&quot;, so the code above might be useful if
&gt; you&apos;re trying to make the nullAtom be equal to the emptyAtom. Or maybe the hash
&gt; table can&apos;t handle nullAtom as a key? Did you test without this? Are you sure
&gt; you need that line of code?

I tested without it and with using nullAtom instead of emptyAtom and both failed so I think you&apos;re right in that the hash can&apos;t store nullAtom as a key.

&gt; +    AtomicString ns = elem-&gt;namespaceURI();
&gt; 
&gt; For lines of code like this one, you can actually make them slightly more
&gt; efficient and not do as much reference count churning if you make the local
&gt; variable &quot;const AtomicString&amp;&quot;. There are three caveats:
&gt; 
&gt;     1) you can&apos;t modify the value of the variable in that case
&gt;     2) you need to make sure that you do this only for functions that actually
&gt; return const AtomicString&amp;, like namespaceURI() and getAttribute() and the like
&gt;     3) you have to be sure not to use the value if the object you got the
&gt; string from has been deleted
&gt; 
&gt; Anyway, not an important optimization but worth mentioning; I would have used
&gt; it where possible.

I&apos;ve added this where I thought it made sense.

&gt; This patch has some tabs in it. We can&apos;t check a patch into Subversion in if it
&gt; has tab characters, so it makes work for whoever is landing your patch if you
&gt; use them. Please search for tab characters and make sure you&apos;re not using any
&gt; before posting your next patch.

Ok, I&apos;ve removed all the tabs.

&gt; +    if (namespaces)
&gt; +        namespaceHash = *namespaces;
&gt; 
&gt; Since the markup function does not modify the passed-in namespaces hash, then I
&gt; think the namespaces parameter should be a const* parameter instead of a plain
&gt; old * parameter?

I&apos;ve made this change.

&gt; But I&apos;m worried now that we&apos;re going to be doing a lot of hash table copying.
&gt; Is there any way to avoid that overhead while still keeping the same semantic.
&gt; I know, it&apos;s my fault for suggesting we use a hash table in the first place!

I&apos;m not sure how much overhead there is in copying a hash.  Each element should have its own copy of the hash to pass on to its children after adding any namespaces it defines.  In theory we could check startNode in WebCore::markup() for being an element that either has a prefix/namespace or has an attribute with a prefix/namespace not already in the hash before doing the copy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19776</commentid>
    <comment_count>14</comment_count>
      <attachid>13536</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-03-09 06:45:07 -0800</bug_when>
    <thetext>Comment on attachment 13536
patch for fix and test case

+    // Set pre to be emptyAtom if prefix is empty so that all empty AtomicStrings will map to the same key in the hash.

Comment should really mention null, because there are only two empty atomic strings: null and empty.

The code below:

+    // Set pre to be emptyAtom if prefix is empty so that all empty AtomicStrings will map to the same key in the hash.
+    const AtomicString&amp; pre = prefix.isEmpty() ? emptyAtom : prefix;
+    AtomicString foundNS = namespaces.get(pre.impl());
+    if (foundNS.isEmpty() || (foundNS != ns)) {
+        namespaces.set(pre.impl(), ns.impl());
+        return &quot; xmlns&quot; + (!prefix.isEmpty() ? &quot;:&quot; + prefix : &quot;&quot;) + &quot;=\&quot;&quot; + ns + &quot;\&quot;&quot;;
+    }
+    return &quot;&quot;;

seems more natural to me, written this way:

    if (ns.isEmpty())
        return &quot;&quot;;
    // Use emptyAtom&apos;s impl() for both null and empty strings, since the HashMap can&apos;t handle 0 as a key.
    AtomicStringImpl* pre = prefix.isEmpty() ? emptyAtom.impl() : prefix.impl();
    AtomicStringImpl* foundNS = namespaces.get(pre.impl());
    if (foundNS != ns.impl()) {
        namespaces.set(pre.impl(), ns.impl());
        return &quot; xmlns&quot; + (!prefix.isEmpty() ? &quot;:&quot; + prefix : &quot;&quot;) + &quot;=\&quot;&quot; + ns + &quot;\&quot;&quot;;
    }
    return &quot;&quot;;

Since the map is of AtomicStringImpl*, the code can work with those.

With the special case for ns, you can simplify callers of addNamespace -- they don&apos;t need to check for the ns.isEmpty() special case.

But those changes are optional. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16210</commentid>
    <comment_count>15</comment_count>
      <attachid>13902</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-03-31 02:53:48 -0700</bug_when>
    <thetext>Created attachment 13902
fix bit rot

I have tried to apply this patch, and encountered several problems:
1) It has bit-rotted.
2) Namespace attribute serialization should use escapeTextForMarkup() to avoid problems with special characters in namespaces.
3) No ChangeLog for LayoutTests,
4) Incorrect markup is produced in the original test case - one of the elements has &apos;xmlns=&quot;null&quot;&apos;.
5) I am not sure why this only fixes createMarkup(Node* ,...), and not createMarkup(Range*, ...).

I fixed (1), (2) and (3), but (4) has to be fixed prior to landing, too. Attaching what I ended up with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16186</commentid>
    <comment_count>16</comment_count>
      <attachid>13536</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-03-31 02:54:50 -0700</bug_when>
    <thetext>Comment on attachment 13536
patch for fix and test case

r- per the above comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>15795</commentid>
    <comment_count>17</comment_count>
      <attachid>13938</attachid>
    <who name="Lamar Goddard">lamargoddard</who>
    <bug_when>2007-04-03 16:21:20 -0700</bug_when>
    <thetext>Created attachment 13938
patch for fix and test case

Fixed (4) by patching Document::createElementNS to use nullAtom if the _namespaceURI param == &quot;null&quot; as createElementNS with a null namespace should behave the same way as Document::createElement.  Didn&apos;t patch JSImmediate::toString as it seems that other functions/tests assume that a null from js will be converted to the string &quot;null&quot;.  This issue may need to be split out into its own bug as &quot;null&quot; and null are being treated the same by Document::createElementNS and that shouldn&apos;t be.

I don&apos;t think (5) needs addressing (at least by this bug) as XMLSerializer only calls createMarkup(Node* , ...).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>15781</commentid>
    <comment_count>18</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-04-03 21:50:37 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; This issue may need to be
&gt; split out into its own bug as &quot;null&quot; and null are being treated the same by
&gt; Document::createElementNS and that shouldn&apos;t be.

I think you are right, this sounds like a separate bug then. It can be fixed in Document.idl:

-        [OldStyleObjC] Element createElementNS(in DOMString namespaceURI,
+        [OldStyleObjC] Element createElementNS(in [ConvertNullToNullString] DOMString namespaceURI,
                                               in DOMString qualifiedName)
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>15715</commentid>
    <comment_count>19</comment_count>
      <attachid>13938</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-04-04 09:31:14 -0700</bug_when>
    <thetext>Comment on attachment 13938
patch for fix and test case

Patch basically looks pretty good.

+    // Test _namespaceURI for &quot;null&quot; as null from js comes through as &quot;null&quot;

That&apos;s a bug that should be fixed at JavaScript binding call site. We shouldn&apos;t convert a null to a string and then check for &quot;null&quot;. Instead we should use [ConvertNullToNullString] in the Document.idl file. Look at DOMImplementation.idl for examples.

-                        markups.prepend(startMarkup(parent, range, annotate));
+                        markups.prepend(startMarkup(parent, range, annotate, false, 0));

-                        markups.prepend(startMarkup(parent, range, annotate));
+                        markups.prepend(startMarkup(parent, range, annotate, false, 0));

-                markups.prepend(startMarkup(ancestor, range, annotate, convertBlocksToInlines));
+                markups.prepend(startMarkup(ancestor, range, annotate, convertBlocksToInlines, 0));

-                markups.prepend(startMarkup(ancestor, range, annotate));
+                markups.prepend(startMarkup(ancestor, range, annotate, false, 0));

Why are these helpful changes? Those are the default values of those parameters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>15713</commentid>
    <comment_count>20</comment_count>
      <attachid>13953</attachid>
    <who name="Lamar Goddard">lamargoddard</who>
    <bug_when>2007-04-04 16:51:43 -0700</bug_when>
    <thetext>Created attachment 13953
patch for fix and test case

I&apos;ve added [ConvertNullToNullString] for the namespaceURI parameters in Document&apos;s bindings of createAttributeNS, createElementNS and getElementsByTagNameNS.

The dom/xhtml/level3/core/nodeisequal14.xhtml test now fails because an Attr created from createAttribute is supposed to have a null prefix, localName and namespaceURI.  See: http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#ID-1084891198
This was only passing before because the namespaceURI that was being used by createAttributeNS(null, ...) was &quot;null&quot;.

The dom/xhtml/level3/core/nodeisequal15.xhtml test now succeds as attributes with no namespace from the page and attributes created explicitly with a namespace of null have the same namespace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>15576</commentid>
    <comment_count>21</comment_count>
      <attachid>13953</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-04-05 08:56:18 -0700</bug_when>
    <thetext>Comment on attachment 13953
patch for fix and test case

r=me

There are three minor things wrong with this patch that are not serious enough for a review-. One is that the change log for LayoutTests needs to list the files modified, and in a couple cases instead it&apos;s listing the .xhtml files of the tests with changed results.

Second, the explanation of nodeisequalnode14.xhtml failure is unnecessarily confusing. It should say that it&apos;s supposed to create an Attr with localName of null, which is the salient point I think.

The third problem is that we don&apos;t have nearly enough testing of the behavior of createElementNS and getElementsByTagNameNS when passed a namespace of null -- the new layout test is the only one that calls them that way, and it doesn&apos;t test the behavior very thoroughly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>13630</commentid>
    <comment_count>22</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-04-21 02:59:20 -0700</bug_when>
    <thetext>Committed revision 20997.

See bug 6216 for some related getElementsByTagNameNS issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6617</commentid>
    <comment_count>23</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-06-23 03:37:22 -0700</bug_when>
    <thetext>*** Bug 14322 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13454</attachid>
            <date>2007-03-02 14:38:08 -0800</date>
            <delta_ts>2007-03-05 19:02:22 -0800</delta_ts>
            <desc>patch for fix and test case</desc>
            <filename>5262.txt</filename>
            <type>text/plain</type>
            <size>10364</size>
            <attacher name="Lamar Goddard">lamargoddard</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL3NlcmlhbGl6ZS1ub2Rlcy1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vc2VyaWFsaXplLW5vZGVzLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL3NlcmlhbGl6ZS1u
b2Rlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNiBAQAorPGRpdiB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgaWQ9ImlucHV0Ij4KKwk8Zm9vOm5vZGUg
eG1sbnM6Zm9vPSJodHRwOi8vZm9vLmNvbSIgeG1sbnM9Imh0dHA6Ly9iYXouY29tIiBmb286bmFt
ZT0iZm9vX25hbWUiPgorCQk8bm9kZSBiYXI6bmFtZT0iYmFyX25hbWUiIHhtbG5zOmJhcj0iaHR0
cDovL2Jhci5jb20iLz4KKwk8L2Zvbzpub2RlPgorPC9kaXY+CisKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvZG9tL3NlcmlhbGl6ZS1ub2Rlcy54aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2RvbS9zZXJpYWxpemUtbm9kZXMueGh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9zZXJpYWxpemUtbm9kZXMueGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjUgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9F
TiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1s
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWxuczpmb289Imh0dHA6Ly9m
b28uY29tIiB4bWxuczpiYXI9Imh0dHA6Ly9iYXIuY29tIiB2ZXJzaW9uPSItLy9XM0MvL0RURCBY
SFRNTCAxLjEvL0VOIiB4bWw6bGFuZz0iZW4iPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJD
b250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIvPgorPHRpdGxl
PlhNTFNlcmlhbGl6ZXIoKSBuYW1lc3BhY2UgdGVzdDwvdGl0bGU+Cis8c2NyaXB0Pgord2luZG93
LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBmdW5jdGlvbigpIHsKKyAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisgICAgCisgICAgdmFyIHhzID0gbmV3IFhNTFNlcmlhbGl6ZXIoKTsKKyAgICB2YXIg
Y29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250ZW50Jyk7CisgICAgY29udGVu
dC5maXJzdENoaWxkLm5vZGVWYWx1ZSA9IHhzLnNlcmlhbGl6ZVRvU3RyaW5nKGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdpbnB1dCcpKTsKK30sIGZhbHNlKTsKKzwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8cHJlIGlkPSJjb250ZW50Ij5mb288L3ByZT4KKzxkaXYgaWQ9ImlucHV0Ij4KKwk8
Zm9vOm5vZGUgZm9vOm5hbWU9ImZvb19uYW1lIiB4bWxucz0iaHR0cDovL2Jhei5jb20iPgorCQk8
bm9kZSBiYXI6bmFtZT0iYmFyX25hbWUiLz4KKwk8L2Zvbzpub2RlPgorPC9kaXY+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2lubmVySFRNTC8wMDQtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaW5uZXJIVE1MLzAwNC1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDE5OTQzKQorKysgTGF5b3V0VGVzdHMvZmFzdC9pbm5lckhUTUwvMDA0
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSwxMCBAQAogQ29udGVudDoK
IAotPGhlYWQ+Cis8aGVhZCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CiA8
bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhpcyB0ZXN0cyBzaW5ndWxhciBlbGVt
ZW50cyB0b28iIC8+CiA8dGl0bGU+eGh0bWwgaW5uZXJIVE1MIHRlc3Q8L3RpdGxlPgogPC9oZWFk
PgotPGJvZHk+Cis8Ym9keSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CiA8
c3Bhbj5Db250ZW50Ojwvc3Bhbj4KIDxwcmUgaWQ9ImNvbnRlbnQiPnBsYWNlaG9sZGVyPC9wcmU+
CiA8ZGl2PjwvZGl2PgpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5OTQzKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwyNSBAQAorMjAwNy0wMy0wMiAgTGFtYXIgR29kZGFyZCA8
bGFtYXJnb2RkYXJkQGdtYWlsLmNvbT4KKworICAgICAgICBGaXggZm9yIGh0dHA6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyNjIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUw
MTg3Nzg+CisgICAgICAgIFhNTFNlcmlhbGl6ZXIgZHJvcHMgTmFtZXNwYWNlIGluZm9ybWF0aW9u
CisKKyAgICAgICAgVXBkYXRlZCBXZWJDb3JlOjptYXJrdXAgdG8gb3V0cHV0IG5hbWVzcGFjZSBp
bmZvcm1hdGlvbiBmb3IgZWxlbWVudHMvYXR0cmlidXRlcyB3aG9zZSBuYW1lc3BhY2UgaW5mb3Jt
YXRpb24KKyAgICAgICAgZG9lc24ndCBhcHBlYXIgaW4gaXRzIHNjb3BlIGluIHRoZSBvdXRwdXQu
CisKKyAgICAgICAgQWRkZWQgdGVzdCBjYXNlOiBmYXN0L2RvbS9zZXJpYWxpemUtbm9kZXMueGh0
bWwKKworICAgICAgICAqIFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlTWFya3VwKTogQ2hhbmdlZCBjYWxsIHRvIFdlYkNvcmU6Om1hcmt1cCB0byBt
YXRjaCBwYXJhbWV0ZXJzCisgICAgICAgIChXZWJDb3JlOjptYXJrdXApOiBDaGFuZ2VkIHJlY3Vy
c2l2ZSBjYWxsIHRvIG1hdGNoIHRyZWUgc3RydWN0dXJlLCByZW1vdmVkIEFTU0VSVCBhbmQgbm8g
bG9uZ2VyIG5lZWRlZCBpbmNsdWRlU2libGluZ3MgcGFyYW1ldGVyLgorICAgICAgICAoV2ViQ29y
ZTo6c3RhcnRNYXJrdXApOiBBZGRlZCBvcHRpb25hbCBwYXJhbWV0ZXIgdG8gdHJhY2sgbmFtZXNw
YWNlcyBpbiB0aGUgY3VycmVudCBzY29wZS4KKyAgICAgICAgKFdlYkNvcmU6OmFkZE5hbWVzcGFj
ZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6YWRkTmFtZXNwYWNlRWxlbSk6CisgICAgICAgIChX
ZWJDb3JlOjphZGROYW1lc3BhY2UpOiBGdW5jdGlvbnMgdG8gYWRkIG5hbWVzcGFjZSBpbmZvcm1h
dGlvbiB0byBtYXJrdXAuCisgICAgICAgIChXZWJDb3JlOjpzaG91bGRBZGROYW1lc3BhY2VBdHRy
KToKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZEFkZE5hbWVzcGFjZUVsZW0pOiBGdW5jdGlvbnMg
dGhhdCB0ZXN0IHdoZXRoZXIgbmFtZXNwYWNlIGluZm9ybWF0aW9uIHNob3VsZCBiZSBhZGRlZCBm
b3IgYSBnaXZlbiBub2RlLgorICAgICAgICAqIExheW91dFRlc3RzL2Zhc3QvaW5uZXJIVE1MLzAw
NC1leHBlY3RlZC50eHQ6IEFkZGVkIG5hbWVzcGFjZSBpbmZvcm1hdGlvbiB0byBoZWFkIGFuZCBi
b2R5IG5vZGVzIGFzIHhodG1sIG5vZGVzIG5vdyBzZXJpYWxpemUgd2l0aCBuYW1lc3BhY2UgaW5m
b3JtYXRpb24uCisKIDIwMDctMDMtMDIgIERhdmUgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAK
ICAgICAgICAgRml4IGNyYXNoZXIgaW4gZ2x5cGggbWFwIGNvZGUgKGJ1ZmZlciBvdmVycnVuKS4K
SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiAxOTk0MykKKysrIFdlYkNvcmUvZWRpdGluZy9t
YXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiS1VS
TC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rp
b24uaCIKKyNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNp
bmNsdWRlICJTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgpAQCAtMTUzLDcg
KzE1NCw2MiBAQCBzdGF0aWMgdm9pZCByZW1vdmVFbmNsb3NpbmdNYWlsQmxvY2txdW90CiAgICAg
YmxvY2txdW90ZVN0eWxlLT5kaWZmKHN0eWxlKTsKIH0KIAotc3RhdGljIERlcHJlY2F0ZWRTdHJp
bmcgc3RhcnRNYXJrdXAoY29uc3QgTm9kZSAqbm9kZSwgY29uc3QgUmFuZ2UgKnJhbmdlLCBFQW5u
b3RhdGVGb3JJbnRlcmNoYW5nZSBhbm5vdGF0ZSwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24g
KmRlZmF1bHRTdHlsZSkKK3N0YXRpYyBib29sIHNob3VsZEFkZE5hbWVzcGFjZUVsZW0oY29uc3Qg
RWxlbWVudCogZWxlbSwgVmVjdG9yPFF1YWxpZmllZE5hbWUqPiogbmFtZXNwYWNlcykKK3sKKyAg
ICAvLyBEb24ndCBhZGQgbmFtZXNwYWNlIGF0dHJpYnV0ZSBpZiBpdCBpcyBhbHJlYWR5IGRlZmlu
ZWQgZm9yIHRoaXMgZWxlbS4KKyAgICBjb25zdCBTdHJpbmcgcHJlZml4ID0gZWxlbS0+cHJlZml4
KCk7CisgICAgY29uc3QgU3RyaW5nIGF0dHIgPSAhIXByZWZpeCAmJiBwcmVmaXgubGVuZ3RoKCkg
PyAieG1sbnM6IiArIHByZWZpeCA6ICJ4bWxucyI7CisgICAgcmV0dXJuICFlbGVtLT5oYXNBdHRy
aWJ1dGUoYXR0cik7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZEFkZE5hbWVzcGFjZUF0dHIoY29u
c3QgQXR0cmlidXRlKiBhdHRyLCBWZWN0b3I8UXVhbGlmaWVkTmFtZSo+KiBuYW1lc3BhY2VzKQor
eworICAgIC8vIERvbid0IGFkZCBuYW1lc3BhY2UgYXR0cmlidXRlcyB0d2ljZQorICAgIGlmIChh
dHRyLT5uYW1lKCkudG9TdHJpbmcoKSA9PSAieG1sbnMiKSB7CisgICAgICAgIG5hbWVzcGFjZXMt
PmFwcGVuZChuZXcgUXVhbGlmaWVkTmFtZSgiIiwgIiIsIGF0dHItPnZhbHVlKCkpKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoYXR0ci0+cHJlZml4KCkgPT0gInhtbG5z
IikgeworICAgICAgICBuYW1lc3BhY2VzLT5hcHBlbmQobmV3IFF1YWxpZmllZE5hbWUoYXR0ci0+
bG9jYWxOYW1lKCksICIiLCBhdHRyLT52YWx1ZSgpKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBEZXByZWNhdGVkU3RyaW5nIGFk
ZE5hbWVzcGFjZShTdHJpbmcgcHJlZml4LCBjb25zdCBTdHJpbmcgbnMsIFZlY3RvcjxRdWFsaWZp
ZWROYW1lKj4qIG5hbWVzcGFjZXMpCit7CisgICAgYm9vbCBpc0ZvdW5kID0gZmFsc2U7CisgICAg
cHJlZml4ID0gISFwcmVmaXggPyBwcmVmaXggOiAiIjsKKyAgICAvLyBTdGFydCBhdCB0aGUgZW5k
IHNvIHRoYXQgd2UgZmluZCB0aGUgbW9zdCByZWNlbnQgdXNlIG9mIGEgZ2l2ZW4gcHJlZml4Cisg
ICAgZm9yIChpbnQgaSA9IG5hbWVzcGFjZXMtPnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSB7Cisg
ICAgICAgIFF1YWxpZmllZE5hbWUgKml0ZW0gPSBuYW1lc3BhY2VzLT5hdChpKTsKKyAgICAgICAg
aWYgKGl0ZW0tPnByZWZpeCgpID09IHByZWZpeCkgeworICAgICAgICAgICAgaXNGb3VuZCA9IGl0
ZW0tPm5hbWVzcGFjZVVSSSgpID09IG5zOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgaWYgKCFpc0ZvdW5kKSB7CisgICAgICAgIG5hbWVzcGFjZXMtPmFwcGVuZChu
ZXcgUXVhbGlmaWVkTmFtZShwcmVmaXgsICIiLCBucykpOworICAgICAgICBTdHJpbmcgcnYgPSAi
IHhtbG5zIiArICghIXByZWZpeCAmJiBwcmVmaXgubGVuZ3RoKCkgPyAiOiIgKyBwcmVmaXggOiAi
IikgKyAiPVwiIiArIG5zICsgIlwiIjsKKyAgICAgICAgcmV0dXJuIHJ2LmRlcHJlY2F0ZWRTdHJp
bmcoKTsKKyAgICB9CisgICAgcmV0dXJuICIiOworfQorCitzdGF0aWMgRGVwcmVjYXRlZFN0cmlu
ZyBhZGROYW1lc3BhY2VFbGVtKGNvbnN0IEVsZW1lbnQgKmVsZW0sIFZlY3RvcjxRdWFsaWZpZWRO
YW1lKj4qIG5hbWVzcGFjZXMpCit7CisgICAgY29uc3QgU3RyaW5nIG5zID0gZWxlbS0+bmFtZXNw
YWNlVVJJKCk7CisgICAgcmV0dXJuICEhbnMgJiYgbnMubGVuZ3RoKCkgPyBhZGROYW1lc3BhY2Uo
ZWxlbS0+cHJlZml4KCksIG5zLCBuYW1lc3BhY2VzKSA6ICIiOworfQorCitzdGF0aWMgRGVwcmVj
YXRlZFN0cmluZyBhZGROYW1lc3BhY2VBdHRyKGNvbnN0IEF0dHJpYnV0ZSAqYXR0ciwgVmVjdG9y
PFF1YWxpZmllZE5hbWUqPiogbmFtZXNwYWNlcykKK3sKKyAgICBjb25zdCBTdHJpbmcgbnMgPSBh
dHRyLT5uYW1lc3BhY2VVUkkoKTsKKyAgICByZXR1cm4gISFucyAmJiBucy5sZW5ndGgoKSA/IGFk
ZE5hbWVzcGFjZShhdHRyLT5wcmVmaXgoKSwgbnMsIG5hbWVzcGFjZXMpIDogIiI7Cit9CisKK3N0
YXRpYyBEZXByZWNhdGVkU3RyaW5nIHN0YXJ0TWFya3VwKGNvbnN0IE5vZGUqLCBjb25zdCBSYW5n
ZSosIEVBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbios
IFZlY3RvcjxRdWFsaWZpZWROYW1lKj4qID0gMCk7CitzdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBz
dGFydE1hcmt1cChjb25zdCBOb2RlICpub2RlLCBjb25zdCBSYW5nZSAqcmFuZ2UsIEVBbm5vdGF0
ZUZvckludGVyY2hhbmdlIGFubm90YXRlLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqZGVm
YXVsdFN0eWxlLCBWZWN0b3I8UXVhbGlmaWVkTmFtZSo+ICpuYW1lc3BhY2VzKQogewogICAgIGJv
b2wgZG9jdW1lbnRJc0hUTUwgPSBub2RlLT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpOwog
ICAgIHN3aXRjaCAobm9kZS0+bm9kZVR5cGUoKSkgewpAQCAtMjMwLDYgKzI4Niw4IEBAIHN0YXRp
YyBEZXByZWNhdGVkU3RyaW5nIHN0YXJ0TWFya3VwKGNvbnMKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIE5hbWVkQXR0ck1hcCAqYXR0cnMgPSBlbC0+YXR0cmlidXRlcygpOwogICAgICAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gYXR0cnMtPmxlbmd0aCgpOworICAgICAgICAgICAgaWYgKCFk
b2N1bWVudElzSFRNTCAmJiBuYW1lc3BhY2VzICYmIHNob3VsZEFkZE5hbWVzcGFjZUVsZW0oZWws
IG5hbWVzcGFjZXMpKQorICAgICAgICAgICAgICAgIG1hcmt1cCArPSBhZGROYW1lc3BhY2VFbGVt
KGVsLCBuYW1lc3BhY2VzKTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSAqYXR0ciA9IGF0
dHJzLT5hdHRyaWJ1dGVJdGVtKGkpOwpAQCAtMjQ0LDYgKzMwMiw5IEBAIHN0YXRpYyBEZXByZWNh
dGVkU3RyaW5nIHN0YXJ0TWFya3VwKGNvbnMKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgIG1hcmt1cCArPSAiICIgKyBhdHRyLT5uYW1lKCkudG9TdHJpbmcoKS5kZXBy
ZWNhdGVkU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgbWFya3VwICs9ICI9XCIiICsgZXNjYXBl
VGV4dEZvck1hcmt1cCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCksIHRydWUpICsgIlwiIjsKKwor
CQkgICAgICAgICAgICBpZiAoIWRvY3VtZW50SXNIVE1MICYmIG5hbWVzcGFjZXMgJiYgc2hvdWxk
QWRkTmFtZXNwYWNlQXR0cihhdHRyLCBuYW1lc3BhY2VzKSkKKyAgICAgICAgICAgICAgICAgICAg
bWFya3VwICs9IGFkZE5hbWVzcGFjZUF0dHIoYXR0ciwgbmFtZXNwYWNlcyk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChhZGRpdGlvbmFsU3R5bGUubGVuZ3Ro
KCkgPiAwKQpAQCAtMzAzLDI2ICszNjQsMjggQEAgc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgZW5k
TWFya3VwKGNvbnN0IAogICAgIHJldHVybiAiIjsKIH0KIAotc3RhdGljIERlcHJlY2F0ZWRTdHJp
bmcgbWFya3VwKE5vZGUqIHN0YXJ0Tm9kZSwgYm9vbCBvbmx5SW5jbHVkZUNoaWxkcmVuLCBib29s
IGluY2x1ZGVTaWJsaW5ncywgVmVjdG9yPE5vZGUqPiAqbm9kZXMpCitzdGF0aWMgRGVwcmVjYXRl
ZFN0cmluZyBtYXJrdXAoTm9kZSosIGJvb2wsIFZlY3RvcjxOb2RlKj4qLCBWZWN0b3I8UXVhbGlm
aWVkTmFtZSo+KiA9IDApOworc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgbWFya3VwKE5vZGUqIHN0
YXJ0Tm9kZSwgYm9vbCBvbmx5SW5jbHVkZUNoaWxkcmVuLCBWZWN0b3I8Tm9kZSo+KiBub2Rlcywg
VmVjdG9yPFF1YWxpZmllZE5hbWUqPiogbmFtZXNwYWNlcykKIHsKLSAgICAvLyBEb2Vzbid0IG1h
a2Ugc2Vuc2UgdG8gb25seSBpbmNsdWRlIGNoaWxkcmVuIGFuZCBpbmNsdWRlIHNpYmxpbmdzLgot
ICAgIEFTU0VSVCghKG9ubHlJbmNsdWRlQ2hpbGRyZW4gJiYgaW5jbHVkZVNpYmxpbmdzKSk7Cisg
ICAgVmVjdG9yPFF1YWxpZmllZE5hbWUqPiBteV9uYW1lc3BhY2VzOworICAgIGlmIChuYW1lc3Bh
Y2VzKQorICAgICAgICBteV9uYW1lc3BhY2VzID0gKm5hbWVzcGFjZXM7CisgICAgCiAgICAgRGVw
cmVjYXRlZFN0cmluZyBtZSA9ICIiOwotICAgIGZvciAoTm9kZSogY3VycmVudCA9IHN0YXJ0Tm9k
ZTsgY3VycmVudCAhPSBOVUxMOyBjdXJyZW50ID0gaW5jbHVkZVNpYmxpbmdzID8gY3VycmVudC0+
bmV4dFNpYmxpbmcoKSA6IE5VTEwpIHsKLSAgICAgICAgaWYgKCFvbmx5SW5jbHVkZUNoaWxkcmVu
KSB7Ci0gICAgICAgICAgICBpZiAobm9kZXMpCi0gICAgICAgICAgICAgICAgbm9kZXMtPmFwcGVu
ZChjdXJyZW50KTsKLSAgICAgICAgICAgIG1lICs9IHN0YXJ0TWFya3VwKGN1cnJlbnQsIDAsIERv
Tm90QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gcHJp
bnQgY2hpbGRyZW4KLSAgICAgICAgaWYgKE5vZGUgKm4gPSBjdXJyZW50LT5maXJzdENoaWxkKCkp
Ci0gICAgICAgICAgICBpZiAoIShuLT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpICYmIGRv
ZXNIVE1MRm9yYmlkRW5kVGFnKGN1cnJlbnQpKSkKLSAgICAgICAgICAgICAgICBtZSArPSBtYXJr
dXAobiwgZmFsc2UsIHRydWUsIG5vZGVzKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFByaW50IG15
IGVuZGluZyB0YWcKLSAgICAgICAgaWYgKCFvbmx5SW5jbHVkZUNoaWxkcmVuKQotICAgICAgICAg
ICAgbWUgKz0gZW5kTWFya3VwKGN1cnJlbnQpOwotICAgIH0KKyAgICBpZiAoIW9ubHlJbmNsdWRl
Q2hpbGRyZW4pIHsKKyAgICAgICAgaWYgKG5vZGVzKQorICAgICAgICAgICAgbm9kZXMtPmFwcGVu
ZChzdGFydE5vZGUpOworICAgICAgICBtZSArPSBzdGFydE1hcmt1cChzdGFydE5vZGUsIDAsIERv
Tm90QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgMCwgJm15X25hbWVzcGFjZXMpOworICAgIH0KKyAg
ICAvLyBwcmludCBjaGlsZHJlbgorICAgIGlmICghKHN0YXJ0Tm9kZS0+ZG9jdW1lbnQoKS0+aXNI
VE1MRG9jdW1lbnQoKSAmJiBkb2VzSFRNTEZvcmJpZEVuZFRhZyhzdGFydE5vZGUpKSkKKyAgICAg
ICAgZm9yIChOb2RlKiBjdXJyZW50ID0gc3RhcnROb2RlLT5maXJzdENoaWxkKCk7IGN1cnJlbnQ7
IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpKQorICAgICAgICAgICAgbWUgKz0gbWFy
a3VwKGN1cnJlbnQsIGZhbHNlLCBub2RlcywgJm15X25hbWVzcGFjZXMpOworICAgIAorICAgIC8v
IFByaW50IG15IGVuZGluZyB0YWcKKyAgICBpZiAoIW9ubHlJbmNsdWRlQ2hpbGRyZW4pCisgICAg
ICAgIG1lICs9IGVuZE1hcmt1cChzdGFydE5vZGUpOworCiAgICAgcmV0dXJuIG1lOwogfQogCkBA
IC01ODksNyArNjUyLDcgQEAgRGVwcmVjYXRlZFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgTm9k
ZQogICAgIGlmIChub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICBub2RlLT5kb2N1
bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+ZGVsZXRlQnV0dG9uQ29udHJvbGxlcigpLT5kaXNh
YmxlKCk7CiAgICAgbm9kZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0
eWxlc2hlZXRzKCk7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyByZXN1bHQobWFya3VwKGNvbnN0X2Nh
c3Q8Tm9kZSo+KG5vZGUpLCBpbmNsdWRlQ2hpbGRyZW4sIGZhbHNlLCBub2RlcykpOworICAgIERl
cHJlY2F0ZWRTdHJpbmcgcmVzdWx0KG1hcmt1cChjb25zdF9jYXN0PE5vZGUqPihub2RlKSwgaW5j
bHVkZUNoaWxkcmVuLCBub2RlcykpOwogICAgIGlmIChub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgp
KQogICAgICAgICBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+ZGVsZXRlQnV0
dG9uQ29udHJvbGxlcigpLT5lbmFibGUoKTsKICAgICByZXR1cm4gcmVzdWx0Owo=
</data>
<flag name="review"
          id="5306"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13484</attachid>
            <date>2007-03-05 19:02:22 -0800</date>
            <delta_ts>2007-03-07 16:22:50 -0800</delta_ts>
            <desc>patch for fix and test case</desc>
            <filename>5262-2.txt</filename>
            <type>text/plain</type>
            <size>10562</size>
            <attacher name="Lamar Goddard">lamargoddard</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL3NlcmlhbGl6ZS1ub2Rlcy1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vc2VyaWFsaXplLW5vZGVzLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL3NlcmlhbGl6ZS1u
b2Rlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQgQEAKKzxkaXYgeG1s
bnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIGlkPSJpbnB1dCI+CisJPGRpdj4KKwkJ
PGZvbzpub2RlIHhtbG5zOmZvbz0iaHR0cDovL2Zvby5jb20iIHhtbG5zPSJodHRwOi8vYmF6LmNv
bSIgZm9vOm5hbWU9ImZvb19uYW1lIiBiYXI6bmFtZT0iYmFyX25hbWUiIHhtbG5zOmJhcj0iaHR0
cDovL2Jhci5jb20iPgorCQkJPG5vZGUgZm9vOm5hbWU9ImZvb19uYW1lIj4KKwkJCQk8YmFyOm5v
ZGUgeG1sbnM6YmFyPSJodHRwOi8vYmFyMi5jb20iLz4KKwkJCTwvbm9kZT4KKwkJPC9mb286bm9k
ZT4KKwk8L2Rpdj4KKwk8YmFyOm5vZGUgeG1sbnM6YmFyPSJodHRwOi8vYmFyLmNvbSI+CisJCTxi
ciAvPgorCTwvYmFyOm5vZGU+Cis8L2Rpdj4KKworCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9zZXJpYWxpemUtbm9kZXMueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9k
b20vc2VyaWFsaXplLW5vZGVzLnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9kb20vc2VyaWFsaXplLW5vZGVzLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyIEBA
Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRw
Oi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbCB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6Zm9vPSJodHRwOi8vZm9vLmNvbSIg
eG1sbnM6YmFyPSJodHRwOi8vYmFyLmNvbSIgdmVyc2lvbj0iLS8vVzNDLy9EVEQgWEhUTUwgMS4x
Ly9FTiIgeG1sOmxhbmc9ImVuIj4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1U
eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KKzx0aXRsZT5YTUxTZXJp
YWxpemVyKCkgbmFtZXNwYWNlIHRlc3Q8L3RpdGxlPgorPHNjcmlwdD4KK3dpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKCJsb2FkIiwgZnVuY3Rpb24oKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwor
ICAgIAorICAgIHZhciB4cyA9IG5ldyBYTUxTZXJpYWxpemVyKCk7CisgICAgdmFyIGNvbnRlbnQg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGVudCcpOworICAgIGNvbnRlbnQuZmlyc3RD
aGlsZC5ub2RlVmFsdWUgPSB4cy5zZXJpYWxpemVUb1N0cmluZyhkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnaW5wdXQnKSk7Cit9LCBmYWxzZSk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHByZSBpZD0iY29udGVudCI+Zm9vPC9wcmU+Cis8ZGl2IGlkPSJpbnB1dCI+CisJPGRpdj4KKwkJ
PGZvbzpub2RlIHhtbG5zPSJodHRwOi8vYmF6LmNvbSIgZm9vOm5hbWU9ImZvb19uYW1lIiBiYXI6
bmFtZT0iYmFyX25hbWUiPgorCQkJPG5vZGUgZm9vOm5hbWU9ImZvb19uYW1lIj4KKwkJCQk8YmFy
Om5vZGUgeG1sbnM6YmFyPSJodHRwOi8vYmFyMi5jb20iLz4KKwkJCTwvbm9kZT4KKwkJPC9mb286
bm9kZT4KKwk8L2Rpdj4KKwk8YmFyOm5vZGU+CisJCTxiciAvPgorCTwvYmFyOm5vZGU+Cis8L2Rp
dj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaW5uZXJIVE1MLzAw
NC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9pbm5lckhUTUwv
MDA0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTk5NjQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2lu
bmVySFRNTC8wMDQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwICsxLDEwIEBA
CiBDb250ZW50OgogCi08aGVhZD4KKzxoZWFkIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5
L3hodG1sIj4KIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGlzIHRlc3RzIHNp
bmd1bGFyIGVsZW1lbnRzIHRvbyIgLz4KIDx0aXRsZT54aHRtbCBpbm5lckhUTUwgdGVzdDwvdGl0
bGU+CiA8L2hlYWQ+Ci08Ym9keT4KKzxib2R5IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5
L3hodG1sIj4KIDxzcGFuPkNvbnRlbnQ6PC9zcGFuPgogPHByZSBpZD0iY29udGVudCI+cGxhY2Vo
b2xkZXI8L3ByZT4KIDxkaXY+PC9kaXY+CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk5NjQpCisrKyBXZWJDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDA3LTAzLTA1ICBMYW1h
ciBHb2RkYXJkIDxsYW1hcmdvZGRhcmRAZ21haWwuY29tPgorCisgICAgICAgIEZpeCBmb3IgaHR0
cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI2MgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNTAxODc3OD4KKyAgICAgICAgWE1MU2VyaWFsaXplciBkcm9wcyBOYW1lc3BhY2Ug
aW5mb3JtYXRpb24KKworICAgICAgICBVcGRhdGVkIFdlYkNvcmU6Om1hcmt1cCB0byBvdXRwdXQg
bmFtZXNwYWNlIGluZm9ybWF0aW9uIGZvciBlbGVtZW50cy9hdHRyaWJ1dGVzIHdob3NlIG5hbWVz
cGFjZSBpbmZvcm1hdGlvbgorICAgICAgICBkb2Vzbid0IGFwcGVhciBpbiBpdHMgc2NvcGUgaW4g
dGhlIG91dHB1dC4KKworICAgICAgICBBZGRlZCB0ZXN0IGNhc2U6IGZhc3QvZG9tL3NlcmlhbGl6
ZS1ub2Rlcy54aHRtbAorCisgICAgICAgICogV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVNYXJrdXApOiBDaGFuZ2VkIGNhbGwgdG8gV2ViQ29yZTo6
bWFya3VwIHRvIG1hdGNoIHBhcmFtZXRlcnMKKyAgICAgICAgKFdlYkNvcmU6Om1hcmt1cCk6IENo
YW5nZWQgcmVjdXJzaXZlIGNhbGwgdG8gbWF0Y2ggdHJlZSBzdHJ1Y3R1cmUsIHJlbW92ZWQgQVNT
RVJUIGFuZCBubyBsb25nZXIgbmVlZGVkIGluY2x1ZGVTaWJsaW5ncyBwYXJhbWV0ZXIuCisgICAg
ICAgIChXZWJDb3JlOjpzdGFydE1hcmt1cCk6IEFkZGVkIG9wdGlvbmFsIHBhcmFtZXRlciB0byB0
cmFjayBuYW1lc3BhY2VzIGluIHRoZSBjdXJyZW50IHNjb3BlLgorICAgICAgICAoV2ViQ29yZTo6
YWRkTmFtZXNwYWNlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjphZGROYW1lc3BhY2VFbGVtKToK
KyAgICAgICAgKFdlYkNvcmU6OmFkZE5hbWVzcGFjZSk6IEZ1bmN0aW9ucyB0byBhZGQgbmFtZXNw
YWNlIGluZm9ybWF0aW9uIHRvIG1hcmt1cC4KKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZEFkZE5h
bWVzcGFjZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkQWRkTmFtZXNwYWNlRWxlbSk6
IEZ1bmN0aW9ucyB0aGF0IHRlc3Qgd2hldGhlciBuYW1lc3BhY2UgaW5mb3JtYXRpb24gc2hvdWxk
IGJlIGFkZGVkIGZvciBhIGdpdmVuIG5vZGUuCisgICAgICAgICogTGF5b3V0VGVzdHMvZmFzdC9p
bm5lckhUTUwvMDA0LWV4cGVjdGVkLnR4dDogQWRkZWQgbmFtZXNwYWNlIGluZm9ybWF0aW9uIHRv
IGhlYWQgYW5kIGJvZHkgbm9kZXMgYXMgeGh0bWwgbm9kZXMgbm93IHNlcmlhbGl6ZSB3aXRoIG5h
bWVzcGFjZSBpbmZvcm1hdGlvbi4KKwogMjAwNy0wMy0wNSAgQWxleGV5IFByb3NrdXJ5YWtvdiAg
PGFwQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4uCkluZGV4OiBXZWJD
b3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvbWFy
a3VwLmNwcAkocmV2aXNpb24gMTk5NjQpCisrKyBXZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNs
dWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCisjaW5j
bHVkZSAiUXVhbGlmaWVkTmFtZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiU2Vs
ZWN0aW9uLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKQEAgLTE1Myw3ICsxNTQsNTggQEAg
c3RhdGljIHZvaWQgcmVtb3ZlRW5jbG9zaW5nTWFpbEJsb2NrcXVvdAogICAgIGJsb2NrcXVvdGVT
dHlsZS0+ZGlmZihzdHlsZSk7CiB9CiAKLXN0YXRpYyBEZXByZWNhdGVkU3RyaW5nIHN0YXJ0TWFy
a3VwKGNvbnN0IE5vZGUgKm5vZGUsIGNvbnN0IFJhbmdlICpyYW5nZSwgRUFubm90YXRlRm9ySW50
ZXJjaGFuZ2UgYW5ub3RhdGUsIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uICpkZWZhdWx0U3R5
bGUpCitzdGF0aWMgYm9vbCBzaG91bGRBZGROYW1lc3BhY2VFbGVtKGNvbnN0IEVsZW1lbnQqIGVs
ZW0pCit7CisgICAgLy8gRG9uJ3QgYWRkIG5hbWVzcGFjZSBhdHRyaWJ1dGUgaWYgaXQgaXMgYWxy
ZWFkeSBkZWZpbmVkIGZvciB0aGlzIGVsZW0uCisgICAgQXRvbWljU3RyaW5nIHByZWZpeCA9IGVs
ZW0tPnByZWZpeCgpOworICAgIEF0b21pY1N0cmluZyBhdHRyID0gIXByZWZpeC5pc0VtcHR5KCkg
PyAieG1sbnM6IiArIHByZWZpeCA6ICJ4bWxucyI7CisgICAgcmV0dXJuICFlbGVtLT5oYXNBdHRy
aWJ1dGUoYXR0cik7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZEFkZE5hbWVzcGFjZUF0dHIoY29u
c3QgQXR0cmlidXRlKiBhdHRyLCBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBBdG9taWNTdHJp
bmdJbXBsKj4qIG5hbWVzcGFjZXMpCit7CisgICAgLy8gRG9uJ3QgYWRkIG5hbWVzcGFjZSBhdHRy
aWJ1dGVzIHR3aWNlCisgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyB4bWxuc1VSSSA9ICJo
dHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyI7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmll
ZE5hbWUgeG1sbnNBdHRyKG51bGxBdG9tLCAieG1sbnMiLCB4bWxuc1VSSSk7CisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSB4bWxuc0F0dHIpIHsKKyAgICAgICAgbmFtZXNwYWNlcy0+c2V0KGVtcHR5
QXRvbS5pbXBsKCksIGF0dHItPnZhbHVlKCkuaW1wbCgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAKKyAgICBRdWFsaWZpZWROYW1lIHhtbG5zUHJlZml4QXR0cigieG1sbnMi
LCBhdHRyLT5sb2NhbE5hbWUoKSwgeG1sbnNVUkkpOworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
eG1sbnNQcmVmaXhBdHRyKSB7CisgICAgICAgIG5hbWVzcGFjZXMtPnNldChhdHRyLT5sb2NhbE5h
bWUoKS5pbXBsKCksIGF0dHItPnZhbHVlKCkuaW1wbCgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIFN0cmluZyBhZGRO
YW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYg
bnMsIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIEF0b21pY1N0cmluZ0ltcGwqPiogbmFtZXNw
YWNlcykKK3sKKyAgICAvLyBTZXQgcHJlIHRvIGJlIGVtcHR5QXRvbSBpZiBwcmVmaXggaXMgZW1w
dHkgc28gdGhhdCBhbGwgZW1wdHkgQXRvbWljU3RyaW5ncyB3aWxsIG1hcCB0byB0aGUgc2FtZSBr
ZXkgaW4gdGhlIGhhc2guCisgICAgQXRvbWljU3RyaW5nIHByZSA9IHByZWZpeC5pc0VtcHR5KCkg
PyBlbXB0eUF0b20gOiBwcmVmaXg7CisgICAgQXRvbWljU3RyaW5nIGZvdW5kTlMgPSBuYW1lc3Bh
Y2VzLT5nZXQocHJlLmltcGwoKSk7CisgICAgaWYgKGZvdW5kTlMuaXNFbXB0eSgpIHx8IChmb3Vu
ZE5TICE9IG5zKSkgeworICAgICAgICBuYW1lc3BhY2VzLT5zZXQocHJlLmltcGwoKSwgbnMuaW1w
bCgpKTsKKyAgICAgICAgcmV0dXJuICIgeG1sbnMiICsgKCFwcmVmaXguaXNFbXB0eSgpID8gIjoi
ICsgcHJlZml4IDogIiIpICsgIj1cIiIgKyBucyArICJcIiI7CisgICAgfQorICAgIHJldHVybiAi
IjsKK30KKworc3RhdGljIFN0cmluZyBhZGROYW1lc3BhY2VFbGVtKGNvbnN0IEVsZW1lbnQgKmVs
ZW0sIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIEF0b21pY1N0cmluZ0ltcGwqPiogbmFtZXNw
YWNlcykKK3sKKyAgICBBdG9taWNTdHJpbmcgbnMgPSBlbGVtLT5uYW1lc3BhY2VVUkkoKTsKKyAg
ICByZXR1cm4gIW5zLmlzRW1wdHkoKSA/IGFkZE5hbWVzcGFjZShlbGVtLT5wcmVmaXgoKSwgbnMs
IG5hbWVzcGFjZXMpIDogIiI7Cit9CisKK3N0YXRpYyBTdHJpbmcgYWRkTmFtZXNwYWNlQXR0cihj
b25zdCBBdHRyaWJ1dGUgKmF0dHIsIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIEF0b21pY1N0
cmluZ0ltcGwqPiogbmFtZXNwYWNlcykKK3sKKyAgICBBdG9taWNTdHJpbmcgbnMgPSBhdHRyLT5u
YW1lc3BhY2VVUkkoKTsKKyAgICByZXR1cm4gIW5zLmlzRW1wdHkoKSA/IGFkZE5hbWVzcGFjZShh
dHRyLT5wcmVmaXgoKSwgbnMsIG5hbWVzcGFjZXMpIDogIiI7Cit9CisKK3N0YXRpYyBEZXByZWNh
dGVkU3RyaW5nIHN0YXJ0TWFya3VwKGNvbnN0IE5vZGUgKm5vZGUsIGNvbnN0IFJhbmdlICpyYW5n
ZSwgRUFubm90YXRlRm9ySW50ZXJjaGFuZ2UgYW5ub3RhdGUsIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uICpkZWZhdWx0U3R5bGUsIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIEF0b21pY1N0
cmluZ0ltcGwqPiogbmFtZXNwYWNlcyA9IDApCiB7CiAgICAgYm9vbCBkb2N1bWVudElzSFRNTCA9
IG5vZGUtPmRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCk7CiAgICAgc3dpdGNoIChub2RlLT5u
b2RlVHlwZSgpKSB7CkBAIC0yMjgsNiArMjgwLDggQEAgc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcg
c3RhcnRNYXJrdXAoY29ucwogICAgICAgICAgICAgfQogICAgICAgICAgICAgTmFtZWRBdHRyTWFw
ICphdHRycyA9IGVsLT5hdHRyaWJ1dGVzKCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBhdHRycy0+bGVuZ3RoKCk7CisgICAgICAgICAgICBpZiAoIWRvY3VtZW50SXNIVE1MICYmIG5h
bWVzcGFjZXMgJiYgc2hvdWxkQWRkTmFtZXNwYWNlRWxlbShlbCkpCisgICAgICAgICAgICAgICAg
bWFya3VwICs9IGFkZE5hbWVzcGFjZUVsZW0oZWwsIG5hbWVzcGFjZXMpLmRlcHJlY2F0ZWRTdHJp
bmcoKTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgewogICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSAqYXR0ciA9IGF0dHJzLT5hdHRyaWJ1
dGVJdGVtKGkpOwpAQCAtMjQyLDYgKzI5Niw5IEBAIHN0YXRpYyBEZXByZWNhdGVkU3RyaW5nIHN0
YXJ0TWFya3VwKGNvbnMKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg
IG1hcmt1cCArPSAiICIgKyBhdHRyLT5uYW1lKCkudG9TdHJpbmcoKS5kZXByZWNhdGVkU3RyaW5n
KCk7CiAgICAgICAgICAgICAgICAgbWFya3VwICs9ICI9XCIiICsgZXNjYXBlVGV4dEZvck1hcmt1
cCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCksIHRydWUpICsgIlwiIjsKKworCQkgICAgICAgICAg
ICBpZiAoIWRvY3VtZW50SXNIVE1MICYmIG5hbWVzcGFjZXMgJiYgc2hvdWxkQWRkTmFtZXNwYWNl
QXR0cihhdHRyLCBuYW1lc3BhY2VzKSkKKyAgICAgICAgICAgICAgICAgICAgbWFya3VwICs9IGFk
ZE5hbWVzcGFjZUF0dHIoYXR0ciwgbmFtZXNwYWNlcykuZGVwcmVjYXRlZFN0cmluZygpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoYWRkaXRpb25hbFN0eWxl
Lmxlbmd0aCgpID4gMCkKQEAgLTMwMSwyNiArMzU4LDI3IEBAIHN0YXRpYyBEZXByZWNhdGVkU3Ry
aW5nIGVuZE1hcmt1cChjb25zdCAKICAgICByZXR1cm4gIiI7CiB9CiAKLXN0YXRpYyBEZXByZWNh
dGVkU3RyaW5nIG1hcmt1cChOb2RlKiBzdGFydE5vZGUsIGJvb2wgb25seUluY2x1ZGVDaGlsZHJl
biwgYm9vbCBpbmNsdWRlU2libGluZ3MsIFZlY3RvcjxOb2RlKj4gKm5vZGVzKQorc3RhdGljIERl
cHJlY2F0ZWRTdHJpbmcgbWFya3VwKE5vZGUqIHN0YXJ0Tm9kZSwgYm9vbCBvbmx5SW5jbHVkZUNo
aWxkcmVuLCBWZWN0b3I8Tm9kZSo+KiBub2RlcywgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwg
QXRvbWljU3RyaW5nSW1wbCo+KiBuYW1lc3BhY2VzID0gMCkKIHsKLSAgICAvLyBEb2Vzbid0IG1h
a2Ugc2Vuc2UgdG8gb25seSBpbmNsdWRlIGNoaWxkcmVuIGFuZCBpbmNsdWRlIHNpYmxpbmdzLgot
ICAgIEFTU0VSVCghKG9ubHlJbmNsdWRlQ2hpbGRyZW4gJiYgaW5jbHVkZVNpYmxpbmdzKSk7Cisg
ICAgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgQXRvbWljU3RyaW5nSW1wbCo+IG5hbWVzcGFj
ZUhhc2g7CisgICAgaWYgKG5hbWVzcGFjZXMpCisgICAgICAgIG5hbWVzcGFjZUhhc2ggPSAqbmFt
ZXNwYWNlczsKKyAgICAKICAgICBEZXByZWNhdGVkU3RyaW5nIG1lID0gIiI7Ci0gICAgZm9yIChO
b2RlKiBjdXJyZW50ID0gc3RhcnROb2RlOyBjdXJyZW50ICE9IE5VTEw7IGN1cnJlbnQgPSBpbmNs
dWRlU2libGluZ3MgPyBjdXJyZW50LT5uZXh0U2libGluZygpIDogTlVMTCkgewotICAgICAgICBp
ZiAoIW9ubHlJbmNsdWRlQ2hpbGRyZW4pIHsKLSAgICAgICAgICAgIGlmIChub2RlcykKLSAgICAg
ICAgICAgICAgICBub2Rlcy0+YXBwZW5kKGN1cnJlbnQpOwotICAgICAgICAgICAgbWUgKz0gc3Rh
cnRNYXJrdXAoY3VycmVudCwgMCwgRG9Ob3RBbm5vdGF0ZUZvckludGVyY2hhbmdlLCAwKTsKLSAg
ICAgICAgfQotICAgICAgICAvLyBwcmludCBjaGlsZHJlbgotICAgICAgICBpZiAoTm9kZSAqbiA9
IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgICAgIGlmICghKG4tPmRvY3VtZW50KCkt
PmlzSFRNTERvY3VtZW50KCkgJiYgZG9lc0hUTUxGb3JiaWRFbmRUYWcoY3VycmVudCkpKQotICAg
ICAgICAgICAgICAgIG1lICs9IG1hcmt1cChuLCBmYWxzZSwgdHJ1ZSwgbm9kZXMpOwotICAgICAg
ICAKLSAgICAgICAgLy8gUHJpbnQgbXkgZW5kaW5nIHRhZwotICAgICAgICBpZiAoIW9ubHlJbmNs
dWRlQ2hpbGRyZW4pCi0gICAgICAgICAgICBtZSArPSBlbmRNYXJrdXAoY3VycmVudCk7Ci0gICAg
fQorICAgIGlmICghb25seUluY2x1ZGVDaGlsZHJlbikgeworICAgICAgICBpZiAobm9kZXMpCisg
ICAgICAgICAgICBub2Rlcy0+YXBwZW5kKHN0YXJ0Tm9kZSk7CisgICAgICAgIG1lICs9IHN0YXJ0
TWFya3VwKHN0YXJ0Tm9kZSwgMCwgRG9Ob3RBbm5vdGF0ZUZvckludGVyY2hhbmdlLCAwLCAmbmFt
ZXNwYWNlSGFzaCk7CisgICAgfQorICAgIC8vIHByaW50IGNoaWxkcmVuCisgICAgaWYgKCEoc3Rh
cnROb2RlLT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpICYmIGRvZXNIVE1MRm9yYmlkRW5k
VGFnKHN0YXJ0Tm9kZSkpKQorICAgICAgICBmb3IgKE5vZGUqIGN1cnJlbnQgPSBzdGFydE5vZGUt
PmZpcnN0Q2hpbGQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkp
CisgICAgICAgICAgICBtZSArPSBtYXJrdXAoY3VycmVudCwgZmFsc2UsIG5vZGVzLCAmbmFtZXNw
YWNlSGFzaCk7CisgICAgCisgICAgLy8gUHJpbnQgbXkgZW5kaW5nIHRhZworICAgIGlmICghb25s
eUluY2x1ZGVDaGlsZHJlbikKKyAgICAgICAgbWUgKz0gZW5kTWFya3VwKHN0YXJ0Tm9kZSk7Cisg
ICAgCiAgICAgcmV0dXJuIG1lOwogfQogCkBAIC01OTksNyArNjU3LDcgQEAgRGVwcmVjYXRlZFN0
cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgTm9kZQogICAgIGlmIChub2RlLT5kb2N1bWVudCgpLT5m
cmFtZSgpKQogICAgICAgICBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+ZGVs
ZXRlQnV0dG9uQ29udHJvbGxlcigpLT5kaXNhYmxlKCk7CiAgICAgbm9kZS0+ZG9jdW1lbnQoKS0+
dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgRGVwcmVjYXRlZFN0
cmluZyByZXN1bHQobWFya3VwKGNvbnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpLCBpbmNsdWRlQ2hpbGRy
ZW4sIGZhbHNlLCBub2RlcykpOworICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVzdWx0KG1hcmt1cChj
b25zdF9jYXN0PE5vZGUqPihub2RlKSwgaW5jbHVkZUNoaWxkcmVuLCBub2RlcykpOwogICAgIGlm
IChub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICBub2RlLT5kb2N1bWVudCgpLT5m
cmFtZSgpLT5lZGl0b3IoKS0+ZGVsZXRlQnV0dG9uQ29udHJvbGxlcigpLT5lbmFibGUoKTsKICAg
ICByZXR1cm4gcmVzdWx0Owo=
</data>
<flag name="review"
          id="5324"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13536</attachid>
            <date>2007-03-07 16:22:50 -0800</date>
            <delta_ts>2007-04-03 16:21:20 -0700</delta_ts>
            <desc>patch for fix and test case</desc>
            <filename>5262-3.txt</filename>
            <type>text/plain</type>
            <size>10719</size>
            <attacher name="Lamar Goddard">lamargoddard</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL3NlcmlhbGl6ZS1ub2Rlcy1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vc2VyaWFsaXplLW5vZGVzLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL3NlcmlhbGl6ZS1u
b2Rlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQgQEAKKzxkaXYgeG1s
bnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIGlkPSJpbnB1dCI+CisgICAgPGRpdj4K
KyAgICAgICAgPGZvbzpub2RlIHhtbG5zOmZvbz0iaHR0cDovL2Zvby5jb20iIHhtbG5zPSJodHRw
Oi8vYmF6LmNvbSIgZm9vOm5hbWU9ImZvb19uYW1lIiBiYXI6bmFtZT0iYmFyX25hbWUiIHhtbG5z
OmJhcj0iaHR0cDovL2Jhci5jb20iPgorICAgICAgICAgICAgPG5vZGUgZm9vOm5hbWU9ImZvb19u
YW1lIj4KKyAgICAgICAgICAgICAgICA8YmFyOm5vZGUgeG1sbnM6YmFyPSJodHRwOi8vYmFyMi5j
b20iLz4KKyAgICAgICAgICAgIDwvbm9kZT4KKyAgICAgICAgPC9mb286bm9kZT4KKyAgICA8L2Rp
dj4KKyAgICA8YmFyOm5vZGUgeG1sbnM6YmFyPSJodHRwOi8vYmFyLmNvbSI+CisgICAgICAgIDxi
ciAvPgorICAgIDwvYmFyOm5vZGU+Cis8L2Rpdj4KKworCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9zZXJpYWxpemUtbm9kZXMueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9kb20vc2VyaWFsaXplLW5vZGVzLnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9kb20vc2VyaWFsaXplLW5vZGVzLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMy
IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJo
dHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbCB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6Zm9vPSJodHRwOi8vZm9vLmNv
bSIgeG1sbnM6YmFyPSJodHRwOi8vYmFyLmNvbSIgdmVyc2lvbj0iLS8vVzNDLy9EVEQgWEhUTUwg
MS4xLy9FTiIgeG1sOmxhbmc9ImVuIj4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVu
dC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KKzx0aXRsZT5YTUxT
ZXJpYWxpemVyKCkgbmFtZXNwYWNlIHRlc3Q8L3RpdGxlPgorPHNjcmlwdD4KK3dpbmRvdy5hZGRF
dmVudExpc3RlbmVyKCJsb2FkIiwgZnVuY3Rpb24oKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworICAgIAorICAgIHZhciB4cyA9IG5ldyBYTUxTZXJpYWxpemVyKCk7CisgICAgdmFyIGNvbnRl
bnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGVudCcpOworICAgIGNvbnRlbnQuZmly
c3RDaGlsZC5ub2RlVmFsdWUgPSB4cy5zZXJpYWxpemVUb1N0cmluZyhkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnaW5wdXQnKSk7Cit9LCBmYWxzZSk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHByZSBpZD0iY29udGVudCI+Zm9vPC9wcmU+Cis8ZGl2IGlkPSJpbnB1dCI+CisgICAgPGRp
dj4KKyAgICAgICAgPGZvbzpub2RlIHhtbG5zPSJodHRwOi8vYmF6LmNvbSIgZm9vOm5hbWU9ImZv
b19uYW1lIiBiYXI6bmFtZT0iYmFyX25hbWUiPgorICAgICAgICAgICAgPG5vZGUgZm9vOm5hbWU9
ImZvb19uYW1lIj4KKyAgICAgICAgICAgICAgICA8YmFyOm5vZGUgeG1sbnM6YmFyPSJodHRwOi8v
YmFyMi5jb20iLz4KKyAgICAgICAgICAgIDwvbm9kZT4KKyAgICAgICAgPC9mb286bm9kZT4KKyAg
ICA8L2Rpdj4KKyAgICA8YmFyOm5vZGU+CisgICAgICAgIDxiciAvPgorICAgIDwvYmFyOm5vZGU+
Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaW5uZXJI
VE1MLzAwNC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9pbm5l
ckhUTUwvMDA0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjAwMjcpCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2lubmVySFRNTC8wMDQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwICsx
LDEwIEBACiBDb250ZW50OgogCi08aGVhZD4KKzxoZWFkIHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8xOTk5L3hodG1sIj4KIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGlzIHRl
c3RzIHNpbmd1bGFyIGVsZW1lbnRzIHRvbyIgLz4KIDx0aXRsZT54aHRtbCBpbm5lckhUTUwgdGVz
dDwvdGl0bGU+CiA8L2hlYWQ+Ci08Ym9keT4KKzxib2R5IHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8xOTk5L3hodG1sIj4KIDxzcGFuPkNvbnRlbnQ6PC9zcGFuPgogPHByZSBpZD0iY29udGVudCI+
cGxhY2Vob2xkZXI8L3ByZT4KIDxkaXY+PC9kaXY+CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAwMjcpCisrKyBXZWJD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDA3LTAzLTA3
ICBMYW1hciBHb2RkYXJkIDxsYW1hcmdvZGRhcmRAZ21haWwuY29tPgorCisgICAgICAgIEZpeCBm
b3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI2MgorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vNTAxODc3OD4KKyAgICAgICAgWE1MU2VyaWFsaXplciBkcm9wcyBOYW1l
c3BhY2UgaW5mb3JtYXRpb24KKworICAgICAgICBVcGRhdGVkIFdlYkNvcmU6Om1hcmt1cCB0byBv
dXRwdXQgbmFtZXNwYWNlIGluZm9ybWF0aW9uIGZvciBlbGVtZW50cy9hdHRyaWJ1dGVzIHdob3Nl
IG5hbWVzcGFjZSBpbmZvcm1hdGlvbgorICAgICAgICBkb2Vzbid0IGFwcGVhciBpbiBpdHMgc2Nv
cGUgaW4gdGhlIG91dHB1dC4KKworICAgICAgICBBZGRlZCB0ZXN0IGNhc2U6IGZhc3QvZG9tL3Nl
cmlhbGl6ZS1ub2Rlcy54aHRtbAorCisgICAgICAgICogV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNYXJrdXApOiBDaGFuZ2VkIGNhbGwgdG8gV2Vi
Q29yZTo6bWFya3VwIHRvIG1hdGNoIHBhcmFtZXRlcnMKKyAgICAgICAgKFdlYkNvcmU6Om1hcmt1
cCk6IENoYW5nZWQgcmVjdXJzaXZlIGNhbGwgdG8gbWF0Y2ggdHJlZSBzdHJ1Y3R1cmUsIHJlbW92
ZWQgQVNTRVJUIGFuZCBubyBsb25nZXIgbmVlZGVkIGluY2x1ZGVTaWJsaW5ncyBwYXJhbWV0ZXIu
CisgICAgICAgIChXZWJDb3JlOjpzdGFydE1hcmt1cCk6IEFkZGVkIG9wdGlvbmFsIHBhcmFtZXRl
ciB0byB0cmFjayBuYW1lc3BhY2VzIGluIHRoZSBjdXJyZW50IHNjb3BlLgorICAgICAgICAoV2Vi
Q29yZTo6YWRkTmFtZXNwYWNlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjphZGROYW1lc3BhY2VF
bGVtKToKKyAgICAgICAgKFdlYkNvcmU6OmFkZE5hbWVzcGFjZSk6IEZ1bmN0aW9ucyB0byBhZGQg
bmFtZXNwYWNlIGluZm9ybWF0aW9uIHRvIG1hcmt1cC4KKyAgICAgICAgKFdlYkNvcmU6OnNob3Vs
ZEFkZE5hbWVzcGFjZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkQWRkTmFtZXNwYWNl
RWxlbSk6IEZ1bmN0aW9ucyB0aGF0IHRlc3Qgd2hldGhlciBuYW1lc3BhY2UgaW5mb3JtYXRpb24g
c2hvdWxkIGJlIGFkZGVkIGZvciBhIGdpdmVuIG5vZGUuCisgICAgICAgICogTGF5b3V0VGVzdHMv
ZmFzdC9pbm5lckhUTUwvMDA0LWV4cGVjdGVkLnR4dDogQWRkZWQgbmFtZXNwYWNlIGluZm9ybWF0
aW9uIHRvIGhlYWQgYW5kIGJvZHkgbm9kZXMgYXMgeGh0bWwgbm9kZXMgbm93IHNlcmlhbGl6ZSB3
aXRoIG5hbWVzcGFjZSBpbmZvcm1hdGlvbi4KKwogMjAwNy0wMy0wNyAgQW5kZXJzIENhcmxzc29u
ICA8YWNhcmxzc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBCcmFkeS4KSW5k
ZXg6IFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRp
dGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiAyMDAyNykKKysrIFdlYkNvcmUvZWRpdGluZy9tYXJr
dXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiS1VSTC5o
IgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24u
aCIKKyNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNs
dWRlICJTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgpAQCAtMTUzLDcgKzE1
NCw1OCBAQCBzdGF0aWMgdm9pZCByZW1vdmVFbmNsb3NpbmdNYWlsQmxvY2txdW90CiAgICAgYmxv
Y2txdW90ZVN0eWxlLT5kaWZmKHN0eWxlKTsKIH0KIAotc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcg
c3RhcnRNYXJrdXAoY29uc3QgTm9kZSAqbm9kZSwgY29uc3QgUmFuZ2UgKnJhbmdlLCBFQW5ub3Rh
dGVGb3JJbnRlcmNoYW5nZSBhbm5vdGF0ZSwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gKmRl
ZmF1bHRTdHlsZSkKK3N0YXRpYyBib29sIHNob3VsZEFkZE5hbWVzcGFjZUVsZW0oY29uc3QgRWxl
bWVudCogZWxlbSkKK3sKKyAgICAvLyBEb24ndCBhZGQgbmFtZXNwYWNlIGF0dHJpYnV0ZSBpZiBp
dCBpcyBhbHJlYWR5IGRlZmluZWQgZm9yIHRoaXMgZWxlbS4KKyAgICBjb25zdCBBdG9taWNTdHJp
bmcmIHByZWZpeCA9IGVsZW0tPnByZWZpeCgpOworICAgIEF0b21pY1N0cmluZyBhdHRyID0gIXBy
ZWZpeC5pc0VtcHR5KCkgPyAieG1sbnM6IiArIHByZWZpeCA6ICJ4bWxucyI7CisgICAgcmV0dXJu
ICFlbGVtLT5oYXNBdHRyaWJ1dGUoYXR0cik7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZEFkZE5h
bWVzcGFjZUF0dHIoY29uc3QgQXR0cmlidXRlKiBhdHRyLCBIYXNoTWFwPEF0b21pY1N0cmluZ0lt
cGwqLCBBdG9taWNTdHJpbmdJbXBsKj4mIG5hbWVzcGFjZXMpCit7CisgICAgLy8gRG9uJ3QgYWRk
IG5hbWVzcGFjZSBhdHRyaWJ1dGVzIHR3aWNlCisgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmlu
ZyB4bWxuc1VSSSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyI7CisgICAgc3RhdGlj
IGNvbnN0IFF1YWxpZmllZE5hbWUgeG1sbnNBdHRyKG51bGxBdG9tLCAieG1sbnMiLCB4bWxuc1VS
SSk7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSB4bWxuc0F0dHIpIHsKKyAgICAgICAgbmFtZXNw
YWNlcy5zZXQoZW1wdHlBdG9tLmltcGwoKSwgYXR0ci0+dmFsdWUoKS5pbXBsKCkpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIFF1YWxpZmllZE5hbWUgeG1sbnNQcmVm
aXhBdHRyKCJ4bWxucyIsIGF0dHItPmxvY2FsTmFtZSgpLCB4bWxuc1VSSSk7CisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSB4bWxuc1ByZWZpeEF0dHIpIHsKKyAgICAgICAgbmFtZXNwYWNlcy5zZXQo
YXR0ci0+bG9jYWxOYW1lKCkuaW1wbCgpLCBhdHRyLT52YWx1ZSgpLmltcGwoKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRp
YyBTdHJpbmcgYWRkTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBB
dG9taWNTdHJpbmcmIG5zLCBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBBdG9taWNTdHJpbmdJ
bXBsKj4mIG5hbWVzcGFjZXMpCit7CisgICAgLy8gU2V0IHByZSB0byBiZSBlbXB0eUF0b20gaWYg
cHJlZml4IGlzIGVtcHR5IHNvIHRoYXQgYWxsIGVtcHR5IEF0b21pY1N0cmluZ3Mgd2lsbCBtYXAg
dG8gdGhlIHNhbWUga2V5IGluIHRoZSBoYXNoLgorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcHJl
ID0gcHJlZml4LmlzRW1wdHkoKSA/IGVtcHR5QXRvbSA6IHByZWZpeDsKKyAgICBBdG9taWNTdHJp
bmcgZm91bmROUyA9IG5hbWVzcGFjZXMuZ2V0KHByZS5pbXBsKCkpOworICAgIGlmIChmb3VuZE5T
LmlzRW1wdHkoKSB8fCAoZm91bmROUyAhPSBucykpIHsKKyAgICAgICAgbmFtZXNwYWNlcy5zZXQo
cHJlLmltcGwoKSwgbnMuaW1wbCgpKTsKKyAgICAgICAgcmV0dXJuICIgeG1sbnMiICsgKCFwcmVm
aXguaXNFbXB0eSgpID8gIjoiICsgcHJlZml4IDogIiIpICsgIj1cIiIgKyBucyArICJcIiI7Cisg
ICAgfQorICAgIHJldHVybiAiIjsKK30KKworc3RhdGljIFN0cmluZyBhZGROYW1lc3BhY2VFbGVt
KGNvbnN0IEVsZW1lbnQgKmVsZW0sIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIEF0b21pY1N0
cmluZ0ltcGwqPiYgbmFtZXNwYWNlcykKK3sKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5zID0g
ZWxlbS0+bmFtZXNwYWNlVVJJKCk7CisgICAgcmV0dXJuICFucy5pc0VtcHR5KCkgPyBhZGROYW1l
c3BhY2UoZWxlbS0+cHJlZml4KCksIG5zLCBuYW1lc3BhY2VzKSA6ICIiOworfQorCitzdGF0aWMg
U3RyaW5nIGFkZE5hbWVzcGFjZUF0dHIoY29uc3QgQXR0cmlidXRlICphdHRyLCBIYXNoTWFwPEF0
b21pY1N0cmluZ0ltcGwqLCBBdG9taWNTdHJpbmdJbXBsKj4mIG5hbWVzcGFjZXMpCit7CisgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBucyA9IGF0dHItPm5hbWVzcGFjZVVSSSgpOworICAgIHJldHVy
biAhbnMuaXNFbXB0eSgpID8gYWRkTmFtZXNwYWNlKGF0dHItPnByZWZpeCgpLCBucywgbmFtZXNw
YWNlcykgOiAiIjsKK30KKworc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgc3RhcnRNYXJrdXAoY29u
c3QgTm9kZSAqbm9kZSwgY29uc3QgUmFuZ2UgKnJhbmdlLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5n
ZSBhbm5vdGF0ZSwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gKmRlZmF1bHRTdHlsZSwgSGFz
aE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgQXRvbWljU3RyaW5nSW1wbCo+KiBuYW1lc3BhY2VzID0g
MCkKIHsKICAgICBib29sIGRvY3VtZW50SXNIVE1MID0gbm9kZS0+ZG9jdW1lbnQoKS0+aXNIVE1M
RG9jdW1lbnQoKTsKICAgICBzd2l0Y2ggKG5vZGUtPm5vZGVUeXBlKCkpIHsKQEAgLTIyOCw2ICsy
ODAsOCBAQCBzdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBzdGFydE1hcmt1cChjb25zCiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBOYW1lZEF0dHJNYXAgKmF0dHJzID0gZWwtPmF0dHJpYnV0ZXMo
KTsKICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGF0dHJzLT5sZW5ndGgoKTsKKyAgICAg
ICAgICAgIGlmICghZG9jdW1lbnRJc0hUTUwgJiYgbmFtZXNwYWNlcyAmJiBzaG91bGRBZGROYW1l
c3BhY2VFbGVtKGVsKSkKKyAgICAgICAgICAgICAgICBtYXJrdXAgKz0gYWRkTmFtZXNwYWNlRWxl
bShlbCwgKm5hbWVzcGFjZXMpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKIAogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAg
IEF0dHJpYnV0ZSAqYXR0ciA9IGF0dHJzLT5hdHRyaWJ1dGVJdGVtKGkpOwpAQCAtMjQyLDYgKzI5
Niw5IEBAIHN0YXRpYyBEZXByZWNhdGVkU3RyaW5nIHN0YXJ0TWFya3VwKGNvbnMKICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIG1hcmt1cCArPSAiICIgKyBhdHRyLT5u
YW1lKCkudG9TdHJpbmcoKS5kZXByZWNhdGVkU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgbWFy
a3VwICs9ICI9XCIiICsgZXNjYXBlVGV4dEZvck1hcmt1cCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5n
KCksIHRydWUpICsgIlwiIjsKKworICAgICAgICAgICAgICAgIGlmICghZG9jdW1lbnRJc0hUTUwg
JiYgbmFtZXNwYWNlcyAmJiBzaG91bGRBZGROYW1lc3BhY2VBdHRyKGF0dHIsICpuYW1lc3BhY2Vz
KSkKKyAgICAgICAgICAgICAgICAgICAgbWFya3VwICs9IGFkZE5hbWVzcGFjZUF0dHIoYXR0ciwg
Km5hbWVzcGFjZXMpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKGFkZGl0aW9uYWxTdHlsZS5sZW5ndGgoKSA+IDApCkBAIC0z
MDEsMjYgKzM1OCwyNyBAQCBzdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBlbmRNYXJrdXAoY29uc3Qg
CiAgICAgcmV0dXJuICIiOwogfQogCi1zdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBtYXJrdXAoTm9k
ZSogc3RhcnROb2RlLCBib29sIG9ubHlJbmNsdWRlQ2hpbGRyZW4sIGJvb2wgaW5jbHVkZVNpYmxp
bmdzLCBWZWN0b3I8Tm9kZSo+ICpub2RlcykKK3N0YXRpYyBEZXByZWNhdGVkU3RyaW5nIG1hcmt1
cChOb2RlKiBzdGFydE5vZGUsIGJvb2wgb25seUluY2x1ZGVDaGlsZHJlbiwgVmVjdG9yPE5vZGUq
Piogbm9kZXMsIGNvbnN0IEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIEF0b21pY1N0cmluZ0lt
cGwqPiogbmFtZXNwYWNlcyA9IDApCiB7Ci0gICAgLy8gRG9lc24ndCBtYWtlIHNlbnNlIHRvIG9u
bHkgaW5jbHVkZSBjaGlsZHJlbiBhbmQgaW5jbHVkZSBzaWJsaW5ncy4KLSAgICBBU1NFUlQoIShv
bmx5SW5jbHVkZUNoaWxkcmVuICYmIGluY2x1ZGVTaWJsaW5ncykpOworICAgIEhhc2hNYXA8QXRv
bWljU3RyaW5nSW1wbCosIEF0b21pY1N0cmluZ0ltcGwqPiBuYW1lc3BhY2VIYXNoOworICAgIGlm
IChuYW1lc3BhY2VzKQorICAgICAgICBuYW1lc3BhY2VIYXNoID0gKm5hbWVzcGFjZXM7CisgICAg
CiAgICAgRGVwcmVjYXRlZFN0cmluZyBtZSA9ICIiOwotICAgIGZvciAoTm9kZSogY3VycmVudCA9
IHN0YXJ0Tm9kZTsgY3VycmVudCAhPSBOVUxMOyBjdXJyZW50ID0gaW5jbHVkZVNpYmxpbmdzID8g
Y3VycmVudC0+bmV4dFNpYmxpbmcoKSA6IE5VTEwpIHsKLSAgICAgICAgaWYgKCFvbmx5SW5jbHVk
ZUNoaWxkcmVuKSB7Ci0gICAgICAgICAgICBpZiAobm9kZXMpCi0gICAgICAgICAgICAgICAgbm9k
ZXMtPmFwcGVuZChjdXJyZW50KTsKLSAgICAgICAgICAgIG1lICs9IHN0YXJ0TWFya3VwKGN1cnJl
bnQsIDAsIERvTm90QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgMCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgLy8gcHJpbnQgY2hpbGRyZW4KLSAgICAgICAgaWYgKE5vZGUgKm4gPSBjdXJyZW50LT5maXJz
dENoaWxkKCkpCi0gICAgICAgICAgICBpZiAoIShuLT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVu
dCgpICYmIGRvZXNIVE1MRm9yYmlkRW5kVGFnKGN1cnJlbnQpKSkKLSAgICAgICAgICAgICAgICBt
ZSArPSBtYXJrdXAobiwgZmFsc2UsIHRydWUsIG5vZGVzKTsKLSAgICAgICAgCi0gICAgICAgIC8v
IFByaW50IG15IGVuZGluZyB0YWcKLSAgICAgICAgaWYgKCFvbmx5SW5jbHVkZUNoaWxkcmVuKQot
ICAgICAgICAgICAgbWUgKz0gZW5kTWFya3VwKGN1cnJlbnQpOwotICAgIH0KKyAgICBpZiAoIW9u
bHlJbmNsdWRlQ2hpbGRyZW4pIHsKKyAgICAgICAgaWYgKG5vZGVzKQorICAgICAgICAgICAgbm9k
ZXMtPmFwcGVuZChzdGFydE5vZGUpOworICAgICAgICBtZSArPSBzdGFydE1hcmt1cChzdGFydE5v
ZGUsIDAsIERvTm90QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgMCwgJm5hbWVzcGFjZUhhc2gpOwor
ICAgIH0KKyAgICAvLyBwcmludCBjaGlsZHJlbgorICAgIGlmICghKHN0YXJ0Tm9kZS0+ZG9jdW1l
bnQoKS0+aXNIVE1MRG9jdW1lbnQoKSAmJiBkb2VzSFRNTEZvcmJpZEVuZFRhZyhzdGFydE5vZGUp
KSkKKyAgICAgICAgZm9yIChOb2RlKiBjdXJyZW50ID0gc3RhcnROb2RlLT5maXJzdENoaWxkKCk7
IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpKQorICAgICAgICAgICAg
bWUgKz0gbWFya3VwKGN1cnJlbnQsIGZhbHNlLCBub2RlcywgJm5hbWVzcGFjZUhhc2gpOworICAg
IAorICAgIC8vIFByaW50IG15IGVuZGluZyB0YWcKKyAgICBpZiAoIW9ubHlJbmNsdWRlQ2hpbGRy
ZW4pCisgICAgICAgIG1lICs9IGVuZE1hcmt1cChzdGFydE5vZGUpOworICAgIAogICAgIHJldHVy
biBtZTsKIH0KIApAQCAtNTk5LDcgKzY1Nyw3IEBAIERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFy
a3VwKGNvbnN0IE5vZGUKICAgICBpZiAobm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAg
ICAgbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPmRlbGV0ZUJ1dHRvbkNvbnRy
b2xsZXIoKS0+ZGlzYWJsZSgpOwogICAgIG5vZGUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVzdWx0KG1h
cmt1cChjb25zdF9jYXN0PE5vZGUqPihub2RlKSwgaW5jbHVkZUNoaWxkcmVuLCBmYWxzZSwgbm9k
ZXMpKTsKKyAgICBEZXByZWNhdGVkU3RyaW5nIHJlc3VsdChtYXJrdXAoY29uc3RfY2FzdDxOb2Rl
Kj4obm9kZSksIGluY2x1ZGVDaGlsZHJlbiwgbm9kZXMpKTsKICAgICBpZiAobm9kZS0+ZG9jdW1l
bnQoKS0+ZnJhbWUoKSkKICAgICAgICAgbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9y
KCktPmRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIoKS0+ZW5hYmxlKCk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsK
</data>
<flag name="review"
          id="5360"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13902</attachid>
            <date>2007-03-31 02:53:48 -0700</date>
            <delta_ts>2007-03-31 02:53:48 -0700</delta_ts>
            <desc>fix bit rot</desc>
            <filename>5262-partially-fixed.txt</filename>
            <type>text/plain</type>
            <size>13731</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIwNjM2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDctMDMtMzEgIExhbWFyIEdvZGRhcmQgPGxh
bWFyZ29kZGFyZEBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZLgorCisg
ICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyNjIKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzUwMTg3Nzg+CisgICAgICAgIFhNTFNlcmlhbGl6ZXIgZHJvcHMg
TmFtZXNwYWNlIGluZm9ybWF0aW9uCisKKyAgICAgICAgKiBmYXN0L2RvbS9zZXJpYWxpemUtbm9k
ZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zZXJpYWxpemUtbm9k
ZXMueGh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaW5uZXJIVE1MLzAwNC1leHBlY3RlZC50
eHQ6IEFkZGVkIG5hbWVzcGFjZSBpbmZvcm1hdGlvbiB0byBoZWFkIGFuZCBib2R5IG5vZGVzCisg
ICAgICAgIGFzIHhodG1sIG5vZGVzIG5vdyBzZXJpYWxpemUgd2l0aCBuYW1lc3BhY2UgaW5mb3Jt
YXRpb24uCisKIDIwMDctMDMtMzEgIE1pdHogUGV0dGVsICA8bWl0ekB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEh5YXR0LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vc2Vy
aWFsaXplLW5vZGVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9zZXJpYWxpemUtbm9kZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9kb20vc2VyaWFsaXplLW5vZGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNCBAQAorPGRpdiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRt
bCIgaWQ9ImlucHV0Ij4KKyAgICA8ZGl2PgorICAgICAgICA8Zm9vOm5vZGUgeG1sbnM6Zm9vPSJo
dHRwOi8vZm9vLmNvbSIgeG1sbnM9Imh0dHA6Ly9iYXouY29tIiBmb286bmFtZT0iZm9vX25hbWUi
IGJhcjpuYW1lPSJiYXJfbmFtZSIgeG1sbnM6YmFyPSJodHRwOi8vYmFyLmNvbSI+CisgICAgICAg
ICAgICA8bm9kZSBmb286bmFtZT0iZm9vX25hbWUiPgorICAgICAgICAgICAgICAgIDxiYXI6bm9k
ZSB4bWxuczpiYXI9Imh0dHA6Ly9iYXIyLmNvbScmcXVvdDsmYW1wOyIvPgorICAgICAgICAgICAg
PC9ub2RlPgorICAgICAgICA8L2Zvbzpub2RlPgorICAgIDwvZGl2PgorICAgIDxiYXI6bm9kZSB4
bWxuczpiYXI9Imh0dHA6Ly9iYXIuY29tIj4KKyAgICAgICAgPGJyIC8+CisgICAgPC9iYXI6bm9k
ZT4KKzwvZGl2PgorCisKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvZG9t
L3NlcmlhbGl6ZS1ub2Rlcy1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWltZS10
eXBlCiAgICsgdGV4dC9wbGFpbgpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9kb20vc2VyaWFsaXplLW5vZGVzLnhodG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL3NlcmlhbGl6ZS1ub2Rlcy54aHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL3NlcmlhbGl6ZS1ub2Rlcy54aHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzMiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RU
RCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwx
MS5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5z
OmZvbz0iaHR0cDovL2Zvby5jb20iIHhtbG5zOmJhcj0iaHR0cDovL2Jhci5jb20iIHZlcnNpb249
Ii0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iIHhtbDpsYW5nPSJlbiI+Cis8aGVhZD4KKzxtZXRh
IGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0
Zi04Ii8+Cis8dGl0bGU+WE1MU2VyaWFsaXplcigpIG5hbWVzcGFjZSB0ZXN0PC90aXRsZT4KKzxz
Y3JpcHQ+Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGZ1bmN0aW9uKCkgeworICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAKKyAgICB2YXIgeHMgPSBuZXcgWE1MU2VyaWFsaXpl
cigpOworICAgIHZhciBjb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRlbnQn
KTsKKyAgICBjb250ZW50LmZpcnN0Q2hpbGQubm9kZVZhbHVlID0geHMuc2VyaWFsaXplVG9TdHJp
bmcoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0JykpOworfSwgZmFsc2UpOworPC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwcmUgaWQ9ImNvbnRlbnQiPmZvbzwvcHJlPgorPGRpdiBp
ZD0iaW5wdXQiPgorICAgIDxkaXY+CisgICAgICAgIDxmb286bm9kZSB4bWxucz0iaHR0cDovL2Jh
ei5jb20iIGZvbzpuYW1lPSJmb29fbmFtZSIgYmFyOm5hbWU9ImJhcl9uYW1lIj4KKyAgICAgICAg
ICAgIDxub2RlIGZvbzpuYW1lPSJmb29fbmFtZSI+CisgICAgICAgICAgICAgICAgPGJhcjpub2Rl
IHhtbG5zOmJhcj0iaHR0cDovL2JhcjIuY29tJyZxdW90OyZhbXA7Ii8+CisgICAgICAgICAgICA8
L25vZGU+CisgICAgICAgIDwvZm9vOm5vZGU+CisgICAgPC9kaXY+CisgICAgPGJhcjpub2RlPgor
ICAgICAgICA8YnIgLz4KKyAgICA8L2Jhcjpub2RlPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9zZXJpYWxpemUtbm9k
ZXMueGh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWltZS10eXBlCiAgICsgdGV4dC94bWwKCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2lubmVySFRNTC8wMDQtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaW5uZXJIVE1MLzAwNC1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDIwNjMzKQorKysgTGF5b3V0VGVzdHMvZmFzdC9pbm5lckhUTUwvMDA0LWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSwxMCBAQAogQ29udGVudDoKIAotPGhlYWQ+Cis8
aGVhZCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CiA8bWV0YSBuYW1lPSJk
ZXNjcmlwdGlvbiIgY29udGVudD0iVGhpcyB0ZXN0cyBzaW5ndWxhciBlbGVtZW50cyB0b28iIC8+
CiA8dGl0bGU+eGh0bWwgaW5uZXJIVE1MIHRlc3Q8L3RpdGxlPgogPC9oZWFkPgotPGJvZHk+Cis8
Ym9keSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CiA8c3Bhbj5Db250ZW50
Ojwvc3Bhbj4KIDxwcmUgaWQ9ImNvbnRlbnQiPnBsYWNlaG9sZGVyPC9wcmU+CiA8ZGl2PjwvZGl2
PgpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDIwNjM2KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwyNiBAQAorMjAwNy0wMy0zMSAgTGFtYXIgR29kZGFyZCA8bGFtYXJnb2RkYXJk
QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkuCisKKyAgICAgICAgRml4
IGZvciBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjYyCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS81MDE4Nzc4PgorICAgICAgICBYTUxTZXJpYWxpemVyIGRyb3BzIE5h
bWVzcGFjZSBpbmZvcm1hdGlvbgorCisgICAgICAgIFVwZGF0ZWQgV2ViQ29yZTo6bWFya3VwIHRv
IG91dHB1dCBuYW1lc3BhY2UgaW5mb3JtYXRpb24gZm9yIGVsZW1lbnRzL2F0dHJpYnV0ZXMgd2hv
c2UgbmFtZXNwYWNlIGluZm9ybWF0aW9uCisgICAgICAgIGRvZXNuJ3QgYXBwZWFyIGluIGl0cyBz
Y29wZSBpbiB0aGUgb3V0cHV0LgorCisgICAgICAgIEFkZGVkIHRlc3QgY2FzZTogZmFzdC9kb20v
c2VyaWFsaXplLW5vZGVzLnhodG1sCisKKyAgICAgICAgKiBXZWJDb3JlL2VkaXRpbmcvbWFya3Vw
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU1hcmt1cCk6IENoYW5nZWQgY2FsbCB0byBX
ZWJDb3JlOjptYXJrdXAgdG8gbWF0Y2ggcGFyYW1ldGVycworICAgICAgICAoV2ViQ29yZTo6bWFy
a3VwKTogQ2hhbmdlZCByZWN1cnNpdmUgY2FsbCB0byBtYXRjaCB0cmVlIHN0cnVjdHVyZSwgcmVt
b3ZlZCBBU1NFUlQgYW5kIG5vIGxvbmdlciBuZWVkZWQgaW5jbHVkZVNpYmxpbmdzIHBhcmFtZXRl
ci4KKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0TWFya3VwKTogQWRkZWQgb3B0aW9uYWwgcGFyYW1l
dGVyIHRvIHRyYWNrIG5hbWVzcGFjZXMgaW4gdGhlIGN1cnJlbnQgc2NvcGUuCisgICAgICAgIChX
ZWJDb3JlOjphZGROYW1lc3BhY2VBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmFkZE5hbWVzcGFj
ZUVsZW0pOgorICAgICAgICAoV2ViQ29yZTo6YWRkTmFtZXNwYWNlKTogRnVuY3Rpb25zIHRvIGFk
ZCBuYW1lc3BhY2UgaW5mb3JtYXRpb24gdG8gbWFya3VwLgorICAgICAgICAoV2ViQ29yZTo6c2hv
dWxkQWRkTmFtZXNwYWNlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRBZGROYW1lc3Bh
Y2VFbGVtKTogRnVuY3Rpb25zIHRoYXQgdGVzdCB3aGV0aGVyIG5hbWVzcGFjZSBpbmZvcm1hdGlv
biBzaG91bGQgYmUgYWRkZWQgZm9yIGEgZ2l2ZW4gbm9kZS4KKwogMjAwNy0wMy0zMSAgTWl0eiBQ
ZXR0ZWwgIDxtaXR6QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSHlhdHQuCklu
ZGV4OiBXZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Vk
aXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gMjA2MzMpCisrKyBXZWJDb3JlL2VkaXRpbmcvbWFy
a3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIktVUkwu
aCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9u
LmgiCisjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5j
bHVkZSAiU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKQEAgLTE1NCw3ICsx
NTUsNjAgQEAgc3RhdGljIHZvaWQgcmVtb3ZlRW5jbG9zaW5nTWFpbEJsb2NrcXVvdAogICAgIGJs
b2NrcXVvdGVTdHlsZS0+ZGlmZihzdHlsZSk7CiB9CiAKLXN0YXRpYyBEZXByZWNhdGVkU3RyaW5n
IHN0YXJ0TWFya3VwKGNvbnN0IE5vZGUgKm5vZGUsIGNvbnN0IFJhbmdlICpyYW5nZSwgRUFubm90
YXRlRm9ySW50ZXJjaGFuZ2UgYW5ub3RhdGUsIGJvb2wgY29udmVydEJsb2Nrc1RvSW5saW5lcyA9
IGZhbHNlKQorc3RhdGljIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNlRWxlbShjb25zdCBFbGVtZW50
KiBlbGVtKQoreworICAgIC8vIERvbid0IGFkZCBuYW1lc3BhY2UgYXR0cmlidXRlIGlmIGl0IGlz
IGFscmVhZHkgZGVmaW5lZCBmb3IgdGhpcyBlbGVtLgorICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
cHJlZml4ID0gZWxlbS0+cHJlZml4KCk7CisgICAgQXRvbWljU3RyaW5nIGF0dHIgPSAhcHJlZml4
LmlzRW1wdHkoKSA/ICJ4bWxuczoiICsgcHJlZml4IDogInhtbG5zIjsKKyAgICByZXR1cm4gIWVs
ZW0tPmhhc0F0dHJpYnV0ZShhdHRyKTsKK30KKworc3RhdGljIGJvb2wgc2hvdWxkQWRkTmFtZXNw
YWNlQXR0cihjb25zdCBBdHRyaWJ1dGUqIGF0dHIsIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCos
IEF0b21pY1N0cmluZ0ltcGwqPiYgbmFtZXNwYWNlcykKK3sKKyAgICAvLyBEb24ndCBhZGQgbmFt
ZXNwYWNlIGF0dHJpYnV0ZXMgdHdpY2UKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nIHht
bG5zVVJJID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIjsKKyAgICBzdGF0aWMgY29u
c3QgUXVhbGlmaWVkTmFtZSB4bWxuc0F0dHIobnVsbEF0b20sICJ4bWxucyIsIHhtbG5zVVJJKTsK
KyAgICBpZiAoYXR0ci0+bmFtZSgpID09IHhtbG5zQXR0cikgeworICAgICAgICBuYW1lc3BhY2Vz
LnNldChlbXB0eUF0b20uaW1wbCgpLCBhdHRyLT52YWx1ZSgpLmltcGwoKSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgUXVhbGlmaWVkTmFtZSB4bWxuc1ByZWZpeEF0
dHIoInhtbG5zIiwgYXR0ci0+bG9jYWxOYW1lKCksIHhtbG5zVVJJKTsKKyAgICBpZiAoYXR0ci0+
bmFtZSgpID09IHhtbG5zUHJlZml4QXR0cikgeworICAgICAgICBuYW1lc3BhY2VzLnNldChhdHRy
LT5sb2NhbE5hbWUoKS5pbXBsKCksIGF0dHItPnZhbHVlKCkuaW1wbCgpKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIFN0
cmluZyBhZGROYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbnMsIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIEF0b21pY1N0cmluZ0ltcGwq
PiYgbmFtZXNwYWNlcykKK3sKKyAgICBpZiAobnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
IiI7CisgICAgLy8gVXNlIGVtcHR5QXRvbSdzIGltcGwoKSBmb3IgYm90aCBudWxsIGFuZCBlbXB0
eSBzdHJpbmdzLCBzaW5jZSB0aGUgSGFzaE1hcCBjYW4ndCBoYW5kbGUgMCBhcyBhIGtleS4KKyAg
ICBBdG9taWNTdHJpbmdJbXBsKiBwcmUgPSBwcmVmaXguaXNFbXB0eSgpID8gZW1wdHlBdG9tLmlt
cGwoKSA6IHByZWZpeC5pbXBsKCk7CisgICAgQXRvbWljU3RyaW5nSW1wbCogZm91bmROUyA9IG5h
bWVzcGFjZXMuZ2V0KHByZSk7CisgICAgaWYgKGZvdW5kTlMgIT0gbnMuaW1wbCgpKSB7CisgICAg
ICAgIG5hbWVzcGFjZXMuc2V0KHByZSwgbnMuaW1wbCgpKTsKKyAgICAgICAgcmV0dXJuICIgeG1s
bnMiICsgKCFwcmVmaXguaXNFbXB0eSgpID8gIjoiICsgcHJlZml4IDogIiIpICsgIj1cIiIgKyBl
c2NhcGVUZXh0Rm9yTWFya3VwKG5zLmRlcHJlY2F0ZWRTdHJpbmcoKSwgdHJ1ZSkgKyAiXCIiOwor
ICAgIH0KKyAgICByZXR1cm4gIiI7Cit9CisKK3N0YXRpYyBTdHJpbmcgYWRkTmFtZXNwYWNlRWxl
bShjb25zdCBFbGVtZW50ICplbGVtLCBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBBdG9taWNT
dHJpbmdJbXBsKj4mIG5hbWVzcGFjZXMpCit7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBucyA9
IGVsZW0tPm5hbWVzcGFjZVVSSSgpOworICAgIHJldHVybiAhbnMuaXNFbXB0eSgpID8gYWRkTmFt
ZXNwYWNlKGVsZW0tPnByZWZpeCgpLCBucywgbmFtZXNwYWNlcykgOiAiIjsKK30KKworc3RhdGlj
IFN0cmluZyBhZGROYW1lc3BhY2VBdHRyKGNvbnN0IEF0dHJpYnV0ZSAqYXR0ciwgSGFzaE1hcDxB
dG9taWNTdHJpbmdJbXBsKiwgQXRvbWljU3RyaW5nSW1wbCo+JiBuYW1lc3BhY2VzKQoreworICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgbnMgPSBhdHRyLT5uYW1lc3BhY2VVUkkoKTsKKyAgICByZXR1
cm4gIW5zLmlzRW1wdHkoKSA/IGFkZE5hbWVzcGFjZShhdHRyLT5wcmVmaXgoKSwgbnMsIG5hbWVz
cGFjZXMpIDogIiI7Cit9CisKK3N0YXRpYyBEZXByZWNhdGVkU3RyaW5nIHN0YXJ0TWFya3VwKGNv
bnN0IE5vZGUqIG5vZGUsIGNvbnN0IFJhbmdlKiByYW5nZSwgRUFubm90YXRlRm9ySW50ZXJjaGFu
Z2UgYW5ub3RhdGUsIGJvb2wgY29udmVydEJsb2Nrc1RvSW5saW5lcywgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qIGRlZmF1bHRTdHlsZSwgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgQXRv
bWljU3RyaW5nSW1wbCo+KiBuYW1lc3BhY2VzID0gMCkKIHsKICAgICBib29sIGRvY3VtZW50SXNI
VE1MID0gbm9kZS0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKTsKICAgICBzd2l0Y2ggKG5v
ZGUtPm5vZGVUeXBlKCkpIHsKQEAgLTIwMSw2ICsyNTUsOCBAQCBzdGF0aWMgRGVwcmVjYXRlZFN0
cmluZyBzdGFydE1hcmt1cChjb25zCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBOYW1lZEF0
dHJNYXAgKmF0dHJzID0gZWwtPmF0dHJpYnV0ZXMoKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGF0dHJzLT5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlmICghZG9jdW1lbnRJc0hUTUwg
JiYgbmFtZXNwYWNlcyAmJiBzaG91bGRBZGROYW1lc3BhY2VFbGVtKGVsKSkKKyAgICAgICAgICAg
ICAgICBtYXJrdXAgKz0gYWRkTmFtZXNwYWNlRWxlbShlbCwgKm5hbWVzcGFjZXMpLmRlcHJlY2F0
ZWRTdHJpbmcoKTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSAqYXR0ciA9IGF0dHJzLT5h
dHRyaWJ1dGVJdGVtKGkpOwpAQCAtMjIxLDYgKzI3Nyw5IEBAIHN0YXRpYyBEZXByZWNhdGVkU3Ry
aW5nIHN0YXJ0TWFya3VwKGNvbnMKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgIG1hcmt1cCArPSAiICIgKyBhdHRyLT5uYW1lKCkudG9TdHJpbmcoKS5kZXByZWNhdGVk
U3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgbWFya3VwICs9ICI9XCIiICsgZXNjYXBlVGV4dEZv
ck1hcmt1cCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCksIHRydWUpICsgIlwiIjsKKworICAgICAg
ICAgICAgICAgIGlmICghZG9jdW1lbnRJc0hUTUwgJiYgbmFtZXNwYWNlcyAmJiBzaG91bGRBZGRO
YW1lc3BhY2VBdHRyKGF0dHIsICpuYW1lc3BhY2VzKSkKKyAgICAgICAgICAgICAgICAgICAgbWFy
a3VwICs9IGFkZE5hbWVzcGFjZUF0dHIoYXR0ciwgKm5hbWVzcGFjZXMpLmRlcHJlY2F0ZWRTdHJp
bmcoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGFubm90
YXRlICYmIGFkZGl0aW9uYWxTdHlsZS5sZW5ndGgoKSkKQEAgLTI4MCwyNiArMzM5LDI3IEBAIHN0
YXRpYyBEZXByZWNhdGVkU3RyaW5nIGVuZE1hcmt1cChjb25zdCAKICAgICByZXR1cm4gIiI7CiB9
CiAKLXN0YXRpYyBEZXByZWNhdGVkU3RyaW5nIG1hcmt1cChOb2RlKiBzdGFydE5vZGUsIGJvb2wg
b25seUluY2x1ZGVDaGlsZHJlbiwgYm9vbCBpbmNsdWRlU2libGluZ3MsIFZlY3RvcjxOb2RlKj4g
Km5vZGVzKQorc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgbWFya3VwKE5vZGUqIHN0YXJ0Tm9kZSwg
Ym9vbCBvbmx5SW5jbHVkZUNoaWxkcmVuLCBWZWN0b3I8Tm9kZSo+KiBub2RlcywgY29uc3QgSGFz
aE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgQXRvbWljU3RyaW5nSW1wbCo+KiBuYW1lc3BhY2VzID0g
MCkKIHsKLSAgICAvLyBEb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gb25seSBpbmNsdWRlIGNoaWxkcmVu
IGFuZCBpbmNsdWRlIHNpYmxpbmdzLgotICAgIEFTU0VSVCghKG9ubHlJbmNsdWRlQ2hpbGRyZW4g
JiYgaW5jbHVkZVNpYmxpbmdzKSk7CisgICAgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgQXRv
bWljU3RyaW5nSW1wbCo+IG5hbWVzcGFjZUhhc2g7CisgICAgaWYgKG5hbWVzcGFjZXMpCisgICAg
ICAgIG5hbWVzcGFjZUhhc2ggPSAqbmFtZXNwYWNlczsKKwogICAgIERlcHJlY2F0ZWRTdHJpbmcg
bWUgPSAiIjsKLSAgICBmb3IgKE5vZGUqIGN1cnJlbnQgPSBzdGFydE5vZGU7IGN1cnJlbnQgIT0g
TlVMTDsgY3VycmVudCA9IGluY2x1ZGVTaWJsaW5ncyA/IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkg
OiBOVUxMKSB7Ci0gICAgICAgIGlmICghb25seUluY2x1ZGVDaGlsZHJlbikgewotICAgICAgICAg
ICAgaWYgKG5vZGVzKQotICAgICAgICAgICAgICAgIG5vZGVzLT5hcHBlbmQoY3VycmVudCk7Ci0g
ICAgICAgICAgICBtZSArPSBzdGFydE1hcmt1cChjdXJyZW50LCAwLCBEb05vdEFubm90YXRlRm9y
SW50ZXJjaGFuZ2UpOwotICAgICAgICB9Ci0gICAgICAgIC8vIHByaW50IGNoaWxkcmVuCi0gICAg
ICAgIGlmIChOb2RlICpuID0gY3VycmVudC0+Zmlyc3RDaGlsZCgpKQotICAgICAgICAgICAgaWYg
KCEobi0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSAmJiBkb2VzSFRNTEZvcmJpZEVuZFRh
ZyhjdXJyZW50KSkpCi0gICAgICAgICAgICAgICAgbWUgKz0gbWFya3VwKG4sIGZhbHNlLCB0cnVl
LCBub2Rlcyk7Ci0gICAgICAgIAotICAgICAgICAvLyBQcmludCBteSBlbmRpbmcgdGFnCi0gICAg
ICAgIGlmICghb25seUluY2x1ZGVDaGlsZHJlbikKLSAgICAgICAgICAgIG1lICs9IGVuZE1hcmt1
cChjdXJyZW50KTsKLSAgICB9CisgICAgaWYgKCFvbmx5SW5jbHVkZUNoaWxkcmVuKSB7CisgICAg
ICAgIGlmIChub2RlcykKKyAgICAgICAgICAgIG5vZGVzLT5hcHBlbmQoc3RhcnROb2RlKTsKKyAg
ICAgICAgbWUgKz0gc3RhcnRNYXJrdXAoc3RhcnROb2RlLCAwLCBEb05vdEFubm90YXRlRm9ySW50
ZXJjaGFuZ2UsIGZhbHNlLCAwLCAmbmFtZXNwYWNlSGFzaCk7CisgICAgfQorICAgIC8vIHByaW50
IGNoaWxkcmVuCisgICAgaWYgKCEoc3RhcnROb2RlLT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVu
dCgpICYmIGRvZXNIVE1MRm9yYmlkRW5kVGFnKHN0YXJ0Tm9kZSkpKQorICAgICAgICBmb3IgKE5v
ZGUqIGN1cnJlbnQgPSBzdGFydE5vZGUtPmZpcnN0Q2hpbGQoKTsgY3VycmVudDsgY3VycmVudCA9
IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgICAgICBtZSArPSBtYXJrdXAoY3VycmVu
dCwgZmFsc2UsIG5vZGVzLCAmbmFtZXNwYWNlSGFzaCk7CisKKyAgICAvLyBQcmludCBteSBlbmRp
bmcgdGFnCisgICAgaWYgKCFvbmx5SW5jbHVkZUNoaWxkcmVuKQorICAgICAgICBtZSArPSBlbmRN
YXJrdXAoc3RhcnROb2RlKTsKKwogICAgIHJldHVybiBtZTsKIH0KIApAQCAtNDE4LDcgKzQ3OCw3
IEBAIERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmcKICAgICAgICAgCiAg
ICAgICAgIC8vIEFkZCB0aGUgbm9kZSB0byB0aGUgbWFya3VwLgogICAgICAgICBpZiAoYWRkTWFy
a3VwRm9yTm9kZSkgewotICAgICAgICAgICAgbWFya3Vwcy5hcHBlbmQoc3RhcnRNYXJrdXAobiwg
cmFuZ2UsIGFubm90YXRlKSk7CisgICAgICAgICAgICBtYXJrdXBzLmFwcGVuZChzdGFydE1hcmt1
cChuLCByYW5nZSwgYW5ub3RhdGUsIGZhbHNlLCAwKSk7CiAgICAgICAgICAgICBpZiAobm9kZXMp
CiAgICAgICAgICAgICAgICAgbm9kZXMtPmFwcGVuZChuKTsKICAgICAgICAgfQpAQCAtNDU1LDcg
KzUxNSw3IEBAIERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmcKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG9yIGIpIGFuY2VzdG9ycyB0aGF0IHdlIG5ldmVyIGVuY291bnRlcmVkIGR1cmluZyBhIHBy
ZS1vcmRlciB0cmF2ZXJzYWwgc3RhcnRpbmcgYXQgc3RhcnROb2RlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKHN0YXJ0Tm9kZS0+aXNEZXNjZW5kYW50T2YocGFyZW50KSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtYXJrdXBzLnByZXBlbmQoc3RhcnRNYXJrdXAocGFyZW50LCBy
YW5nZSwgYW5ub3RhdGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcmt1cHMucHJlcGVu
ZChzdGFydE1hcmt1cChwYXJlbnQsIHJhbmdlLCBhbm5vdGF0ZSwgZmFsc2UsIDApKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIG1hcmt1cHMuYXBwZW5kKGVuZE1hcmt1cChwYXJlbnQpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlcykKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2Rlcy0+YXBwZW5kKHBhcmVudCk7CkBAIC01MjAsNyArNTgwLDcgQEAgRGVwcmVjYXRl
ZFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZwogICAgICAgICAgICAgICAgICAgICBtYXJr
dXBzLmFwcGVuZCgiPC9kaXY+Iik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBtYXJrdXBzLnByZXBlbmQoc3RhcnRNYXJrdXAoYW5jZXN0
b3IsIHJhbmdlLCBhbm5vdGF0ZSwgY29udmVydEJsb2Nrc1RvSW5saW5lcykpOworICAgICAgICAg
ICAgICAgIG1hcmt1cHMucHJlcGVuZChzdGFydE1hcmt1cChhbmNlc3RvciwgcmFuZ2UsIGFubm90
YXRlLCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzLCAwKSk7CiAgICAgICAgICAgICAgICAgbWFya3Vw
cy5hcHBlbmQoZW5kTWFya3VwKGFuY2VzdG9yKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBpZiAobm9kZXMpCkBAIC01NTksNyArNjE5LDcgQEAgRGVwcmVjYXRlZFN0cmluZyBjcmVhdGVN
YXJrdXAoY29uc3QgUmFuZwogICAgIGlmIChhbm5vdGF0ZSAmJiBzZWxlY3RlZE9uZU9yTW9yZVBh
cmFncmFwaHMpIHsKICAgICAgICAgZm9yIChOb2RlICphbmNlc3RvciA9IGxhc3RDbG9zZWQtPnBh
cmVudE5vZGUoKTsgYW5jZXN0b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGUoKSkg
ewogICAgICAgICAgICAgaWYgKGlzTWFpbEJsb2NrcXVvdGUoYW5jZXN0b3IpKSB7Ci0gICAgICAg
ICAgICAgICAgbWFya3Vwcy5wcmVwZW5kKHN0YXJ0TWFya3VwKGFuY2VzdG9yLCByYW5nZSwgYW5u
b3RhdGUpKTsKKyAgICAgICAgICAgICAgICBtYXJrdXBzLnByZXBlbmQoc3RhcnRNYXJrdXAoYW5j
ZXN0b3IsIHJhbmdlLCBhbm5vdGF0ZSwgZmFsc2UsIDApKTsKICAgICAgICAgICAgICAgICBtYXJr
dXBzLmFwcGVuZChlbmRNYXJrdXAoYW5jZXN0b3IpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQpAQCAtNTkxLDcgKzY1MSw3IEBAIERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0
IE5vZGUKICAgICBpZiAobm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAgICAgbm9kZS0+
ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPmRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIoKS0+
ZGlzYWJsZSgpOwogICAgIG5vZGUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRp
bmdTdHlsZXNoZWV0cygpOwotICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVzdWx0KG1hcmt1cChjb25z
dF9jYXN0PE5vZGUqPihub2RlKSwgaW5jbHVkZUNoaWxkcmVuLCBmYWxzZSwgbm9kZXMpKTsKKyAg
ICBEZXByZWNhdGVkU3RyaW5nIHJlc3VsdChtYXJrdXAoY29uc3RfY2FzdDxOb2RlKj4obm9kZSks
IGluY2x1ZGVDaGlsZHJlbiwgbm9kZXMpKTsKICAgICBpZiAobm9kZS0+ZG9jdW1lbnQoKS0+ZnJh
bWUoKSkKICAgICAgICAgbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPmRlbGV0
ZUJ1dHRvbkNvbnRyb2xsZXIoKS0+ZW5hYmxlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13938</attachid>
            <date>2007-04-03 16:21:20 -0700</date>
            <delta_ts>2007-04-04 16:51:43 -0700</delta_ts>
            <desc>patch for fix and test case</desc>
            <filename>5262-4.txt</filename>
            <type>text/plain</type>
            <size>14812</size>
            <attacher name="Lamar Goddard">lamargoddard</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIwNjgzKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDctMDQtMDMgIExhbWFyIEdvZGRhcmQgIDxs
YW1hcmdvZGRhcmRAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWS4KKwor
ICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjYyCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS81MDE4Nzc4PgorICAgICAgICBYTUxTZXJpYWxpemVyIGRyb3Bz
IE5hbWVzcGFjZSBpbmZvcm1hdGlvbgorCisgICAgICAgICogZmFzdC9kb20vc2VyaWFsaXplLW5v
ZGVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vc2VyaWFsaXplLW5v
ZGVzLnhodG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2lubmVySFRNTC8wMDQtZXhwZWN0ZWQu
dHh0OiBBZGRlZCBuYW1lc3BhY2UgaW5mb3JtYXRpb24gdG8gaGVhZCBhbmQgYm9keSBub2Rlcwor
ICAgICAgICBhcyB4aHRtbCBub2RlcyBub3cgc2VyaWFsaXplIHdpdGggbmFtZXNwYWNlIGluZm9y
bWF0aW9uLgorCiAyMDA3LTA0LTAzICBNaXR6IFBldHRlbCAgPG1pdHpAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL3Nl
cmlhbGl6ZS1ub2Rlcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9kb20vc2VyaWFsaXplLW5vZGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvZG9tL3NlcmlhbGl6ZS1ub2Rlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTcgQEAKK0FMRVJUOiBmb286bmFtZSBpcyBvbmUgYW5kIHNob3VsZCBiZSBv
bmUKK0FMRVJUOiBiYXI6bmFtZSBpcyB0d28gYW5kIHNob3VsZCBiZSB0d28KK0FMRVJUOiA8Zm9v
OnJvb3QgeG1sbnM6Zm9vPSJ1cm46Zm9vLW5zIiBmb286dHlwZT0idGVzdCI+PGNoaWxkIGZvbzpu
YW1lPSJvbmUiIGJhcjpuYW1lPSJ0d28iIHhtbG5zOmJhcj0idXJuOmJhci1ucyIvPjwvZm9vOnJv
b3Q+Cis8ZGl2IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBpZD0iaW5wdXQi
PgorICAgIDxkaXY+CisgICAgICAgIDxmb286bm9kZSB4bWxuczpmb289Imh0dHA6Ly9mb28uY29t
IiB4bWxucz0iaHR0cDovL2Jhei5jb20iIGZvbzpuYW1lPSJmb29fbmFtZSIgYmFyOm5hbWU9ImJh
cl9uYW1lIiB4bWxuczpiYXI9Imh0dHA6Ly9iYXIuY29tIj4KKyAgICAgICAgICAgIDxub2RlIGZv
bzpuYW1lPSJmb29fbmFtZSI+CisgICAgICAgICAgICAgICAgPGJhcjpub2RlIHhtbG5zOmJhcj0i
aHR0cDovL2JhcjIuY29tIi8+CisgICAgICAgICAgICA8L25vZGU+CisgICAgICAgIDwvZm9vOm5v
ZGU+CisgICAgPC9kaXY+CisgICAgPGJhcjpub2RlIHhtbG5zOmJhcj0iaHR0cDovL2Jhci5jb20i
PgorICAgICAgICA8YnIgLz4KKyAgICA8L2Jhcjpub2RlPgorPC9kaXY+CisKKwpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9kb20vc2VyaWFsaXplLW5vZGVzLnhodG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvZG9tL3NlcmlhbGl6ZS1ub2Rlcy54aHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvZG9tL3NlcmlhbGl6ZS1ub2Rlcy54aHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1MiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRN
TCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQi
PgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOmZvbz0i
aHR0cDovL2Zvby5jb20iIHhtbG5zOmJhcj0iaHR0cDovL2Jhci5jb20iIHZlcnNpb249Ii0vL1cz
Qy8vRFREIFhIVE1MIDEuMS8vRU4iIHhtbDpsYW5nPSJlbiI+Cis8aGVhZD4KKzxtZXRhIGh0dHAt
ZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ii8+
Cis8dGl0bGU+WE1MU2VyaWFsaXplcigpIG5hbWVzcGFjZSB0ZXN0PC90aXRsZT4KKzxzY3JpcHQ+
Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGZ1bmN0aW9uKCkgeworICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBBc1RleHQoKTsKKyAgICAKKyAgICB2YXIgeHMgPSBuZXcgWE1MU2VyaWFsaXplcigpOwor
ICAgIHZhciBjb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRlbnQnKTsKKyAg
ICBjb250ZW50LmZpcnN0Q2hpbGQubm9kZVZhbHVlID0geHMuc2VyaWFsaXplVG9TdHJpbmcoZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0JykpOworCisgICAgLy8gT3JpZ2luYWwgdGVzdAor
ICAgIHZhciBkID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQoInVybjpm
b28tbnMiLCAiZm9vOnJvb3QiLCBudWxsKTsKKyAgICBpZiAoIWQuZG9jdW1lbnRFbGVtZW50KSB7
CisgICAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiwgc2luY2UgRG9tSW1wbGVtZW50YXRp
b24uY3JlYXRlRG9jdW1lbnQKKyAgICAgICAgLy8gaXMgc3VwcG9zZWQgdG8gY3JlYXRlIHRoZSBy
b290IGVsZW1lbnQuICBCdXQgaW4gU2FmYXJpLCBpdCdzIHJlcXVpcmVkLgorICAgICAgICBkLmFw
cGVuZENoaWxkKGQuY3JlYXRlRWxlbWVudE5TKCJ1cm46Zm9vLW5zIiwgImZvbzpyb290IikpOwor
ICAgIH0KKyAgICB2YXIgcm9vdCA9IGQuZG9jdW1lbnRFbGVtZW50OworICAgIHJvb3Quc2V0QXR0
cmlidXRlTlMoInVybjpmb28tbnMiLCAiZm9vOnR5cGUiLCAidGVzdCIpCisgICAgCisgICAgdmFy
IGMgPSBkLmNyZWF0ZUVsZW1lbnROUyhudWxsLCAiY2hpbGQiKTsKKyAgICByb290LmFwcGVuZENo
aWxkKGMpOworICAgIAorICAgIGMuc2V0QXR0cmlidXRlTlMoInVybjpmb28tbnMiLCAiZm9vOm5h
bWUiLCAib25lIik7CisgICAgYy5zZXRBdHRyaWJ1dGVOUygidXJuOmJhci1ucyIsICJiYXI6bmFt
ZSIsICJ0d28iKTsKKyAgICAKKyAgICB3aW5kb3cuYWxlcnQoImZvbzpuYW1lIGlzICIgKyBjLmdl
dEF0dHJpYnV0ZU5TKCJ1cm46Zm9vLW5zIiwgIm5hbWUiKSArICIgYW5kIHNob3VsZCBiZSBvbmUi
KTsKKyAgICB3aW5kb3cuYWxlcnQoImJhcjpuYW1lIGlzICIgKyBjLmdldEF0dHJpYnV0ZU5TKCJ1
cm46YmFyLW5zIiwgIm5hbWUiKSArICIgYW5kIHNob3VsZCBiZSB0d28iKTsKKyAgICB3aW5kb3cu
YWxlcnQoeHMuc2VyaWFsaXplVG9TdHJpbmcoZCkpOworfSwgZmFsc2UpOworPC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxwcmUgaWQ9ImNvbnRlbnQiPmZvbzwvcHJlPgorPGRpdiBpZD0iaW5w
dXQiPgorICAgIDxkaXY+CisgICAgICAgIDxmb286bm9kZSB4bWxucz0iaHR0cDovL2Jhei5jb20i
IGZvbzpuYW1lPSJmb29fbmFtZSIgYmFyOm5hbWU9ImJhcl9uYW1lIj4KKyAgICAgICAgICAgIDxu
b2RlIGZvbzpuYW1lPSJmb29fbmFtZSI+CisgICAgICAgICAgICAgICAgPGJhcjpub2RlIHhtbG5z
OmJhcj0iaHR0cDovL2JhcjIuY29tIi8+CisgICAgICAgICAgICA8L25vZGU+CisgICAgICAgIDwv
Zm9vOm5vZGU+CisgICAgPC9kaXY+CisgICAgPGJhcjpub2RlPgorICAgICAgICA8YnIgLz4KKyAg
ICA8L2Jhcjpub2RlPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2lubmVySFRNTC8wMDQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvaW5uZXJIVE1MLzAwNC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDIwNjgzKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9pbm5lckhUTUwvMDA0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMSwxMCArMSwxMCBAQAogQ29udGVudDoKIAotPGhlYWQ+Cis8aGVhZCB4bWxucz0iaHR0
cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CiA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29u
dGVudD0iVGhpcyB0ZXN0cyBzaW5ndWxhciBlbGVtZW50cyB0b28iIC8+CiA8dGl0bGU+eGh0bWwg
aW5uZXJIVE1MIHRlc3Q8L3RpdGxlPgogPC9oZWFkPgotPGJvZHk+Cis8Ym9keSB4bWxucz0iaHR0
cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CiA8c3Bhbj5Db250ZW50Ojwvc3Bhbj4KIDxwcmUg
aWQ9ImNvbnRlbnQiPnBsYWNlaG9sZGVyPC9wcmU+CiA8ZGl2PjwvZGl2PgpJbmRleDogV2ViQ29y
ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIw
NjgzKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNiBA
QAorMjAwNy0wNC0wMyAgTGFtYXIgR29kZGFyZCA8bGFtYXJnb2RkYXJkQGdtYWlsLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkuCisKKyAgICAgICAgRml4IGZvciBodHRwOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjYyCisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS81MDE4Nzc4PgorICAgICAgICBYTUxTZXJpYWxpemVyIGRyb3BzIE5hbWVzcGFjZSBpbmZvcm1h
dGlvbgorCisgICAgICAgIFVwZGF0ZWQgV2ViQ29yZTo6bWFya3VwIHRvIG91dHB1dCBuYW1lc3Bh
Y2UgaW5mb3JtYXRpb24gZm9yIGVsZW1lbnRzL2F0dHJpYnV0ZXMgd2hvc2UgbmFtZXNwYWNlIGlu
Zm9ybWF0aW9uCisgICAgICAgIGRvZXNuJ3QgYXBwZWFyIGluIGl0cyBzY29wZSBpbiB0aGUgb3V0
cHV0LgorCisgICAgICAgIEFkZGVkIHRlc3QgY2FzZTogZmFzdC9kb20vc2VyaWFsaXplLW5vZGVz
LnhodG1sCisKKyAgICAgICAgKiBXZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZU1hcmt1cChjb25zdCBOb2RlKiwgLi4uKSk6IENoYW5nZWQgY2FsbCB0
byBXZWJDb3JlOjptYXJrdXAgdG8gbWF0Y2ggcGFyYW1ldGVycworICAgICAgICAoV2ViQ29yZTo6
bWFya3VwKTogQ2hhbmdlZCByZWN1cnNpdmUgY2FsbCB0byBtYXRjaCB0cmVlIHN0cnVjdHVyZSwg
cmVtb3ZlZCBBU1NFUlQgYW5kIG5vIGxvbmdlciBuZWVkZWQgaW5jbHVkZVNpYmxpbmdzIHBhcmFt
ZXRlci4KKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0TWFya3VwKTogQWRkZWQgb3B0aW9uYWwgcGFy
YW1ldGVyIHRvIHRyYWNrIG5hbWVzcGFjZXMgaW4gdGhlIGN1cnJlbnQgc2NvcGUuCisgICAgICAg
IChXZWJDb3JlOjphZGROYW1lc3BhY2UpOiBGdW5jdGlvbiB0byBhZGQgbmFtZXNwYWNlIGluZm9y
bWF0aW9uIHRvIG1hcmt1cC4KKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZEFkZE5hbWVzcGFjZUF0
dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkQWRkTmFtZXNwYWNlRWxlbSk6IEZ1bmN0aW9u
cyB0aGF0IHRlc3Qgd2hldGhlciBuYW1lc3BhY2UgaW5mb3JtYXRpb24gc2hvdWxkIGJlIGFkZGVk
IGZvciBhIGdpdmVuIG5vZGUuCisgICAgICAgICogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwOgor
ICAgICAgICAoRG9jdW1lbnQ6OmNyZWF0ZUVsZW1lbnROUyk6IEFkZGVkIHRlc3QgZm9yICJudWxs
IiBmb3IgX25hbWVzcGFjZVVSSSB0byB1c2UgbnVsbEF0b20gaW5zdGVhZC4KKwogMjAwNy0wNC0w
MyAgTWl0eiBQZXR0ZWwgIDxtaXR6QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4uCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyMDY4MykKKysrIFdlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgyLDggKzY4MiwxMCBAQCBQYXNzUmVmUHRy
PEVsZW1lbnQ+IERvY3VtZW50OjpjcmVhdGVFbGVtCiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
IAorICAgIC8vIFRlc3QgX25hbWVzcGFjZVVSSSBmb3IgIm51bGwiIGFzIG51bGwgZnJvbSBqcyBj
b21lcyB0aHJvdWdoIGFzICJudWxsIgorICAgIEF0b21pY1N0cmluZyBucyA9IChfbmFtZXNwYWNl
VVJJID09ICJudWxsIikgPyBudWxsQXRvbSA6IEF0b21pY1N0cmluZyhfbmFtZXNwYWNlVVJJKTsK
ICAgICBSZWZQdHI8RWxlbWVudD4gZTsKLSAgICBRdWFsaWZpZWROYW1lIHFOYW1lID0gUXVhbGlm
aWVkTmFtZShBdG9taWNTdHJpbmcocHJlZml4KSwgQXRvbWljU3RyaW5nKGxvY2FsTmFtZSksIEF0
b21pY1N0cmluZyhfbmFtZXNwYWNlVVJJKSk7CisgICAgUXVhbGlmaWVkTmFtZSBxTmFtZSA9IFF1
YWxpZmllZE5hbWUoQXRvbWljU3RyaW5nKHByZWZpeCksIEF0b21pY1N0cmluZyhsb2NhbE5hbWUp
LCBucyk7CiAgICAgCiAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQocU5hbWUsIGZhbHNlLCBlYyk7
CiB9CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gMjA2ODMpCisrKyBXZWJDb3JlL2VkaXRp
bmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUg
IktVUkwuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uLmgiCisjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgi
CiAjaW5jbHVkZSAiU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKQEAgLTE1
NCw3ICsxNTUsNTAgQEAgc3RhdGljIHZvaWQgcmVtb3ZlRW5jbG9zaW5nTWFpbEJsb2NrcXVvdAog
ICAgIGJsb2NrcXVvdGVTdHlsZS0+ZGlmZihzdHlsZSk7CiB9CiAKLXN0YXRpYyBEZXByZWNhdGVk
U3RyaW5nIHN0YXJ0TWFya3VwKGNvbnN0IE5vZGUgKm5vZGUsIGNvbnN0IFJhbmdlICpyYW5nZSwg
RUFubm90YXRlRm9ySW50ZXJjaGFuZ2UgYW5ub3RhdGUsIGJvb2wgY29udmVydEJsb2Nrc1RvSW5s
aW5lcyA9IGZhbHNlKQorc3RhdGljIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNlRWxlbShjb25zdCBF
bGVtZW50KiBlbGVtKQoreworICAgIC8vIERvbid0IGFkZCBuYW1lc3BhY2UgYXR0cmlidXRlIGlm
IGl0IGlzIGFscmVhZHkgZGVmaW5lZCBmb3IgdGhpcyBlbGVtLgorICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgcHJlZml4ID0gZWxlbS0+cHJlZml4KCk7CisgICAgQXRvbWljU3RyaW5nIGF0dHIgPSAh
cHJlZml4LmlzRW1wdHkoKSA/ICJ4bWxuczoiICsgcHJlZml4IDogInhtbG5zIjsKKyAgICByZXR1
cm4gIWVsZW0tPmhhc0F0dHJpYnV0ZShhdHRyKTsKK30KKworc3RhdGljIGJvb2wgc2hvdWxkQWRk
TmFtZXNwYWNlQXR0cihjb25zdCBBdHRyaWJ1dGUqIGF0dHIsIEhhc2hNYXA8QXRvbWljU3RyaW5n
SW1wbCosIEF0b21pY1N0cmluZ0ltcGwqPiYgbmFtZXNwYWNlcykKK3sKKyAgICAvLyBEb24ndCBh
ZGQgbmFtZXNwYWNlIGF0dHJpYnV0ZXMgdHdpY2UKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3Ry
aW5nIHhtbG5zVVJJID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIjsKKyAgICBzdGF0
aWMgY29uc3QgUXVhbGlmaWVkTmFtZSB4bWxuc0F0dHIobnVsbEF0b20sICJ4bWxucyIsIHhtbG5z
VVJJKTsKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IHhtbG5zQXR0cikgeworICAgICAgICBuYW1l
c3BhY2VzLnNldChlbXB0eUF0b20uaW1wbCgpLCBhdHRyLT52YWx1ZSgpLmltcGwoKSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgUXVhbGlmaWVkTmFtZSB4bWxuc1By
ZWZpeEF0dHIoInhtbG5zIiwgYXR0ci0+bG9jYWxOYW1lKCksIHhtbG5zVVJJKTsKKyAgICBpZiAo
YXR0ci0+bmFtZSgpID09IHhtbG5zUHJlZml4QXR0cikgeworICAgICAgICBuYW1lc3BhY2VzLnNl
dChhdHRyLT5sb2NhbE5hbWUoKS5pbXBsKCksIGF0dHItPnZhbHVlKCkuaW1wbCgpKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3Rh
dGljIFN0cmluZyBhZGROYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0
IEF0b21pY1N0cmluZyYgbnMsIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIEF0b21pY1N0cmlu
Z0ltcGwqPiYgbmFtZXNwYWNlcykKK3sKKyAgICBpZiAobnMuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gIiI7CisgICAgCisgICAgLy8gVXNlIGVtcHR5QXRvbXMncyBpbXBsKCkgZm9yIGJvdGgg
bnVsbCBhbmQgZW1wdHkgc3RyaW5ncyBzaW5jZSB0aGUgSGFzaE1hcCBjYW4ndCBoYW5kbGUgMCBh
cyBhIGtleQorICAgIEF0b21pY1N0cmluZ0ltcGwqIHByZSA9IHByZWZpeC5pc0VtcHR5KCkgPyBl
bXB0eUF0b20uaW1wbCgpIDogcHJlZml4LmltcGwoKTsKKyAgICBBdG9taWNTdHJpbmdJbXBsKiBm
b3VuZE5TID0gbmFtZXNwYWNlcy5nZXQocHJlKTsKKyAgICBpZiAoZm91bmROUyAhPSBucy5pbXBs
KCkpIHsKKyAgICAgICAgbmFtZXNwYWNlcy5zZXQocHJlLCBucy5pbXBsKCkpOworICAgICAgICBy
ZXR1cm4gIiB4bWxucyIgKyAoIXByZWZpeC5pc0VtcHR5KCkgPyAiOiIgKyBwcmVmaXggOiAiIikg
KyAiPVwiIiArIGVzY2FwZVRleHRGb3JNYXJrdXAobnMuZGVwcmVjYXRlZFN0cmluZygpLCB0cnVl
KSArICJcIiI7CisgICAgfQorICAgIAorICAgIHJldHVybiAiIjsKK30KKworc3RhdGljIERlcHJl
Y2F0ZWRTdHJpbmcgc3RhcnRNYXJrdXAoY29uc3QgTm9kZSAqbm9kZSwgY29uc3QgUmFuZ2UgKnJh
bmdlLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBhbm5vdGF0ZSwgYm9vbCBjb252ZXJ0QmxvY2tz
VG9JbmxpbmVzID0gZmFsc2UsIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIEF0b21pY1N0cmlu
Z0ltcGwqPiogbmFtZXNwYWNlcyA9IDApCiB7CiAgICAgYm9vbCBkb2N1bWVudElzSFRNTCA9IG5v
ZGUtPmRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCk7CiAgICAgc3dpdGNoIChub2RlLT5ub2Rl
VHlwZSgpKSB7CkBAIC0yMDEsNiArMjQ1LDggQEAgc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgc3Rh
cnRNYXJrdXAoY29ucwogICAgICAgICAgICAgfQogICAgICAgICAgICAgTmFtZWRBdHRyTWFwICph
dHRycyA9IGVsLT5hdHRyaWJ1dGVzKCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBh
dHRycy0+bGVuZ3RoKCk7CisgICAgICAgICAgICBpZiAoIWRvY3VtZW50SXNIVE1MICYmIG5hbWVz
cGFjZXMgJiYgc2hvdWxkQWRkTmFtZXNwYWNlRWxlbShlbCkpCisgICAgICAgICAgICAgICAgbWFy
a3VwICs9IGFkZE5hbWVzcGFjZShlbC0+cHJlZml4KCksIGVsLT5uYW1lc3BhY2VVUkkoKSwgKm5h
bWVzcGFjZXMpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgIEF0dHJpYnV0
ZSAqYXR0ciA9IGF0dHJzLT5hdHRyaWJ1dGVJdGVtKGkpOwpAQCAtMjIxLDYgKzI2Nyw5IEBAIHN0
YXRpYyBEZXByZWNhdGVkU3RyaW5nIHN0YXJ0TWFya3VwKGNvbnMKICAgICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgICAgIG1hcmt1cCArPSAiICIgKyBhdHRyLT5uYW1lKCkudG9T
dHJpbmcoKS5kZXByZWNhdGVkU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgbWFya3VwICs9ICI9
XCIiICsgZXNjYXBlVGV4dEZvck1hcmt1cCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCksIHRydWUp
ICsgIlwiIjsKKworICAgICAgICAgICAgICAgIGlmICghZG9jdW1lbnRJc0hUTUwgJiYgbmFtZXNw
YWNlcyAmJiBzaG91bGRBZGROYW1lc3BhY2VBdHRyKGF0dHIsICpuYW1lc3BhY2VzKSkKKyAgICAg
ICAgICAgICAgICAgICAgbWFya3VwICs9IGFkZE5hbWVzcGFjZShhdHRyLT5wcmVmaXgoKSwgYXR0
ci0+bmFtZXNwYWNlVVJJKCksICpuYW1lc3BhY2VzKS5kZXByZWNhdGVkU3RyaW5nKCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChhbm5vdGF0ZSAmJiBhZGRp
dGlvbmFsU3R5bGUubGVuZ3RoKCkpCkBAIC0yODAsMjYgKzMyOSwyNyBAQCBzdGF0aWMgRGVwcmVj
YXRlZFN0cmluZyBlbmRNYXJrdXAoY29uc3QgCiAgICAgcmV0dXJuICIiOwogfQogCi1zdGF0aWMg
RGVwcmVjYXRlZFN0cmluZyBtYXJrdXAoTm9kZSogc3RhcnROb2RlLCBib29sIG9ubHlJbmNsdWRl
Q2hpbGRyZW4sIGJvb2wgaW5jbHVkZVNpYmxpbmdzLCBWZWN0b3I8Tm9kZSo+ICpub2RlcykKK3N0
YXRpYyBEZXByZWNhdGVkU3RyaW5nIG1hcmt1cChOb2RlKiBzdGFydE5vZGUsIGJvb2wgb25seUlu
Y2x1ZGVDaGlsZHJlbiwgVmVjdG9yPE5vZGUqPiogbm9kZXMsIGNvbnN0IEhhc2hNYXA8QXRvbWlj
U3RyaW5nSW1wbCosIEF0b21pY1N0cmluZ0ltcGwqPiogbmFtZXNwYWNlcyA9IDApCiB7Ci0gICAg
Ly8gRG9lc24ndCBtYWtlIHNlbnNlIHRvIG9ubHkgaW5jbHVkZSBjaGlsZHJlbiBhbmQgaW5jbHVk
ZSBzaWJsaW5ncy4KLSAgICBBU1NFUlQoIShvbmx5SW5jbHVkZUNoaWxkcmVuICYmIGluY2x1ZGVT
aWJsaW5ncykpOworICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIEF0b21pY1N0cmluZ0lt
cGwqPiBuYW1lc3BhY2VIYXNoOworICAgIGlmIChuYW1lc3BhY2VzKQorICAgICAgICBuYW1lc3Bh
Y2VIYXNoID0gKm5hbWVzcGFjZXM7CisgICAgCiAgICAgRGVwcmVjYXRlZFN0cmluZyBtZSA9ICIi
OwotICAgIGZvciAoTm9kZSogY3VycmVudCA9IHN0YXJ0Tm9kZTsgY3VycmVudCAhPSBOVUxMOyBj
dXJyZW50ID0gaW5jbHVkZVNpYmxpbmdzID8gY3VycmVudC0+bmV4dFNpYmxpbmcoKSA6IE5VTEwp
IHsKLSAgICAgICAgaWYgKCFvbmx5SW5jbHVkZUNoaWxkcmVuKSB7Ci0gICAgICAgICAgICBpZiAo
bm9kZXMpCi0gICAgICAgICAgICAgICAgbm9kZXMtPmFwcGVuZChjdXJyZW50KTsKLSAgICAgICAg
ICAgIG1lICs9IHN0YXJ0TWFya3VwKGN1cnJlbnQsIDAsIERvTm90QW5ub3RhdGVGb3JJbnRlcmNo
YW5nZSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gcHJpbnQgY2hpbGRyZW4KLSAgICAgICAgaWYg
KE5vZGUgKm4gPSBjdXJyZW50LT5maXJzdENoaWxkKCkpCi0gICAgICAgICAgICBpZiAoIShuLT5k
b2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpICYmIGRvZXNIVE1MRm9yYmlkRW5kVGFnKGN1cnJl
bnQpKSkKLSAgICAgICAgICAgICAgICBtZSArPSBtYXJrdXAobiwgZmFsc2UsIHRydWUsIG5vZGVz
KTsKLSAgICAgICAgCi0gICAgICAgIC8vIFByaW50IG15IGVuZGluZyB0YWcKLSAgICAgICAgaWYg
KCFvbmx5SW5jbHVkZUNoaWxkcmVuKQotICAgICAgICAgICAgbWUgKz0gZW5kTWFya3VwKGN1cnJl
bnQpOwotICAgIH0KKyAgICBpZiAoIW9ubHlJbmNsdWRlQ2hpbGRyZW4pIHsKKyAgICAgICAgaWYg
KG5vZGVzKQorICAgICAgICAgICAgbm9kZXMtPmFwcGVuZChzdGFydE5vZGUpOworICAgICAgICBt
ZSArPSBzdGFydE1hcmt1cChzdGFydE5vZGUsIDAsIERvTm90QW5ub3RhdGVGb3JJbnRlcmNoYW5n
ZSwgZmFsc2UsICZuYW1lc3BhY2VIYXNoKTsKKyAgICB9CisgICAgLy8gcHJpbnQgY2hpbGRyZW4K
KyAgICBpZiAoIShzdGFydE5vZGUtPmRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkgJiYgZG9l
c0hUTUxGb3JiaWRFbmRUYWcoc3RhcnROb2RlKSkpCisgICAgICAgIGZvciAoTm9kZSogY3VycmVu
dCA9IHN0YXJ0Tm9kZS0+Zmlyc3RDaGlsZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+
bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgICAgIG1lICs9IG1hcmt1cChjdXJyZW50LCBmYWxzZSwg
bm9kZXMsICZuYW1lc3BhY2VIYXNoKTsKKyAgICAKKyAgICAvLyBQcmludCBteSBlbmRpbmcgdGFn
CisgICAgaWYgKCFvbmx5SW5jbHVkZUNoaWxkcmVuKQorICAgICAgICBtZSArPSBlbmRNYXJrdXAo
c3RhcnROb2RlKTsKKyAgICAKICAgICByZXR1cm4gbWU7CiB9CiAKQEAgLTQxOCw3ICs0NjgsNyBA
QCBEZXByZWNhdGVkU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nCiAgICAgICAgIAogICAg
ICAgICAvLyBBZGQgdGhlIG5vZGUgdG8gdGhlIG1hcmt1cC4KICAgICAgICAgaWYgKGFkZE1hcmt1
cEZvck5vZGUpIHsKLSAgICAgICAgICAgIG1hcmt1cHMuYXBwZW5kKHN0YXJ0TWFya3VwKG4sIHJh
bmdlLCBhbm5vdGF0ZSkpOworICAgICAgICAgICAgbWFya3Vwcy5hcHBlbmQoc3RhcnRNYXJrdXAo
biwgcmFuZ2UsIGFubm90YXRlLCBmYWxzZSwgMCkpOwogICAgICAgICAgICAgaWYgKG5vZGVzKQog
ICAgICAgICAgICAgICAgIG5vZGVzLT5hcHBlbmQobik7CiAgICAgICAgIH0KQEAgLTQ1NSw3ICs1
MDUsNyBAQCBEZXByZWNhdGVkU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBvciBiKSBhbmNlc3RvcnMgdGhhdCB3ZSBuZXZlciBlbmNvdW50ZXJlZCBkdXJpbmcgYSBwcmUt
b3JkZXIgdHJhdmVyc2FsIHN0YXJ0aW5nIGF0IHN0YXJ0Tm9kZToKICAgICAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChzdGFydE5vZGUtPmlzRGVzY2VuZGFudE9mKHBhcmVudCkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgbWFya3Vwcy5wcmVwZW5kKHN0YXJ0TWFya3VwKHBhcmVudCwgcmFu
Z2UsIGFubm90YXRlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXBzLnByZXBlbmQo
c3RhcnRNYXJrdXAocGFyZW50LCByYW5nZSwgYW5ub3RhdGUsIGZhbHNlLCAwKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBtYXJrdXBzLmFwcGVuZChlbmRNYXJrdXAocGFyZW50KSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobm9kZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZXMtPmFwcGVuZChwYXJlbnQpOwpAQCAtNTIwLDcgKzU3MCw3IEBAIERlcHJlY2F0ZWRT
dHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmcKICAgICAgICAgICAgICAgICAgICAgbWFya3Vw
cy5hcHBlbmQoIjwvZGl2PiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgbWFya3Vwcy5wcmVwZW5kKHN0YXJ0TWFya3VwKGFuY2VzdG9y
LCByYW5nZSwgYW5ub3RhdGUsIGNvbnZlcnRCbG9ja3NUb0lubGluZXMpKTsKKyAgICAgICAgICAg
ICAgICBtYXJrdXBzLnByZXBlbmQoc3RhcnRNYXJrdXAoYW5jZXN0b3IsIHJhbmdlLCBhbm5vdGF0
ZSwgY29udmVydEJsb2Nrc1RvSW5saW5lcywgMCkpOwogICAgICAgICAgICAgICAgIG1hcmt1cHMu
YXBwZW5kKGVuZE1hcmt1cChhbmNlc3RvcikpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
aWYgKG5vZGVzKQpAQCAtNTU5LDcgKzYwOSw3IEBAIERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFy
a3VwKGNvbnN0IFJhbmcKICAgICBpZiAoYW5ub3RhdGUgJiYgc2VsZWN0ZWRPbmVPck1vcmVQYXJh
Z3JhcGhzKSB7CiAgICAgICAgIGZvciAoTm9kZSAqYW5jZXN0b3IgPSBsYXN0Q2xvc2VkLT5wYXJl
bnROb2RlKCk7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnROb2RlKCkpIHsK
ICAgICAgICAgICAgIGlmIChpc01haWxCbG9ja3F1b3RlKGFuY2VzdG9yKSkgewotICAgICAgICAg
ICAgICAgIG1hcmt1cHMucHJlcGVuZChzdGFydE1hcmt1cChhbmNlc3RvciwgcmFuZ2UsIGFubm90
YXRlKSk7CisgICAgICAgICAgICAgICAgbWFya3Vwcy5wcmVwZW5kKHN0YXJ0TWFya3VwKGFuY2Vz
dG9yLCByYW5nZSwgYW5ub3RhdGUsIGZhbHNlLCAwKSk7CiAgICAgICAgICAgICAgICAgbWFya3Vw
cy5hcHBlbmQoZW5kTWFya3VwKGFuY2VzdG9yKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
QEAgLTU5MSw3ICs2NDEsNyBAQCBEZXByZWNhdGVkU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBO
b2RlCiAgICAgaWYgKG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAgICAgIG5vZGUtPmRv
Y3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5kZWxldGVCdXR0b25Db250cm9sbGVyKCktPmRp
c2FibGUoKTsKICAgICBub2RlLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5n
U3R5bGVzaGVldHMoKTsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHJlc3VsdChtYXJrdXAoY29uc3Rf
Y2FzdDxOb2RlKj4obm9kZSksIGluY2x1ZGVDaGlsZHJlbiwgZmFsc2UsIG5vZGVzKSk7CisgICAg
RGVwcmVjYXRlZFN0cmluZyByZXN1bHQobWFya3VwKGNvbnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpLCBp
bmNsdWRlQ2hpbGRyZW4sIG5vZGVzKSk7CiAgICAgaWYgKG5vZGUtPmRvY3VtZW50KCktPmZyYW1l
KCkpCiAgICAgICAgIG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5kZWxldGVC
dXR0b25Db250cm9sbGVyKCktPmVuYWJsZSgpOwogICAgIHJldHVybiByZXN1bHQ7Cg==
</data>
<flag name="review"
          id="5609"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13953</attachid>
            <date>2007-04-04 16:51:43 -0700</date>
            <delta_ts>2007-04-05 08:56:18 -0700</delta_ts>
            <desc>patch for fix and test case</desc>
            <filename>5262-5.txt</filename>
            <type>text/plain</type>
            <size>15996</size>
            <attacher name="Lamar Goddard">lamargoddard</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIwNzA0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDctMDQtMDQgIExhbWFyIEdvZGRhcmQgIDxs
YW1hcmdvZGRhcmRAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWS4KKwor
ICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjYyCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS81MDE4Nzc4PgorICAgICAgICBYTUxTZXJpYWxpemVyIGRyb3Bz
IE5hbWVzcGFjZSBpbmZvcm1hdGlvbgorCisgICAgICAgICogZmFzdC9kb20vc2VyaWFsaXplLW5v
ZGVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vc2VyaWFsaXplLW5v
ZGVzLnhodG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2lubmVySFRNTC8wMDQtZXhwZWN0ZWQu
dHh0OiBBZGRlZCBuYW1lc3BhY2UgaW5mb3JtYXRpb24gdG8gaGVhZCBhbmQgYm9keSBub2Rlcwor
ICAgICAgICBhcyB4aHRtbCBub2RlcyBub3cgc2VyaWFsaXplIHdpdGggbmFtZXNwYWNlIGluZm9y
bWF0aW9uLgorICAgICAgICAqIGRvbS94aHRtbC9sZXZlbDMvY29yZS9ub2RlaXNlcXVhbG5vZGUx
NC54aHRtbDogZmFpbHMgdGVzdCBiZWNhdXNlIGNyZWF0ZUF0dHJpYnV0ZQorICAgICAgICBpcyBz
dXBwb3NlZCB0byBjcmVhdGUgYW4gQXR0ciB3aXRoIG5vZGVOYW1lIHNldCB0byBuYW1lIGFuZCB3
aXRoIGxvY2FsTmFtZSwgcHJlZml4IGFuZAorICAgICAgICBuYW1lc3BhY2VVUkkgc2V0IHRvIG51
bGwuCisgICAgICAgICogZG9tL3hodG1sL2xldmVsMy9jb3JlL25vZGVpc2VxdWFsbm9kZTE1Lnho
dG1sOiBOb3cgc3VjY2VlZHMuCisKIDIwMDctMDQtMDMgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVy
c2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtLgpJbmRleDogTGF5b3V0
VGVzdHMvZG9tL3hodG1sL2xldmVsMy9jb3JlL25vZGVpc2VxdWFsbm9kZTE0LWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvbm9kZWlz
ZXF1YWxub2RlMTQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyMDcwNCkKKysrIExheW91dFRlc3Rz
L2RvbS94aHRtbC9sZXZlbDMvY29yZS9ub2RlaXNlcXVhbG5vZGUxNC1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTEsMiArMSwzIEBACiBUZXN0CWh0dHA6Ly93d3cudzMub3JnLzIwMDEv
RE9NLVRlc3QtU3VpdGUvbGV2ZWwzL2NvcmUvbm9kZWlzZXF1YWxub2RlMTQKLVN0YXR1cwlTdWNj
ZXNzCitTdGF0dXMJZmFpbHVyZQorTWVzc2FnZQlub2RlaXNlcXVhbG5vZGUxNDogYXNzZXJ0VHJ1
ZSBmYWlsZWQKSW5kZXg6IExheW91dFRlc3RzL2RvbS94aHRtbC9sZXZlbDMvY29yZS9ub2RlaXNl
cXVhbG5vZGUxNS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZG9tL3ho
dG1sL2xldmVsMy9jb3JlL25vZGVpc2VxdWFsbm9kZTE1LWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MjA3MDQpCisrKyBMYXlvdXRUZXN0cy9kb20veGh0bWwvbGV2ZWwzL2NvcmUvbm9kZWlzZXF1YWxu
b2RlMTUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMiBAQAogVGVzdAlo
dHRwOi8vd3d3LnczLm9yZy8yMDAxL0RPTS1UZXN0LVN1aXRlL2xldmVsMy9jb3JlL25vZGVpc2Vx
dWFsbm9kZTE1Ci1TdGF0dXMJZmFpbHVyZQotTWVzc2FnZQlub2RlaXNlcXVhbG5vZGUxNTogYXNz
ZXJ0VHJ1ZSBmYWlsZWQKK1N0YXR1cwlTdWNjZXNzCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9zZXJpYWxpemUtbm9kZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvZG9tL3NlcmlhbGl6ZS1ub2Rlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2RvbS9zZXJpYWxpemUtbm9kZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE5IEBACitBTEVSVDogZm9vOm5hbWUgaXMgb25lIGFuZCBzaG91bGQg
YmUgb25lCitBTEVSVDogYmFyOm5hbWUgaXMgdHdvIGFuZCBzaG91bGQgYmUgdHdvCitBTEVSVDog
bmFtZSBpcyB0aHJlZSBhbmQgc2hvdWxkIGJlIHRocmVlCitBTEVSVDogbm9kZSBpcyBjaGlsZCBh
bmQgc2hvdWxkIGJlIGNoaWxkCitBTEVSVDogPGZvbzpyb290IHhtbG5zOmZvbz0idXJuOmZvby1u
cyIgZm9vOnR5cGU9InRlc3QiPjxjaGlsZCBmb286bmFtZT0ib25lIiBiYXI6bmFtZT0idHdvIiB4
bWxuczpiYXI9InVybjpiYXItbnMiIG5hbWU9InRocmVlIi8+PC9mb286cm9vdD4KKzxkaXYgeG1s
bnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIGlkPSJpbnB1dCI+CisgICAgPGRpdj4K
KyAgICAgICAgPGZvbzpub2RlIHhtbG5zOmZvbz0iaHR0cDovL2Zvby5jb20iIHhtbG5zPSJodHRw
Oi8vYmF6LmNvbSIgZm9vOm5hbWU9ImZvb19uYW1lIiBiYXI6bmFtZT0iYmFyX25hbWUiIHhtbG5z
OmJhcj0iaHR0cDovL2Jhci5jb20iPgorICAgICAgICAgICAgPG5vZGUgZm9vOm5hbWU9ImZvb19u
YW1lIj4KKyAgICAgICAgICAgICAgICA8YmFyOm5vZGUgeG1sbnM6YmFyPSJodHRwOi8vYmFyMi5j
b20iLz4KKyAgICAgICAgICAgIDwvbm9kZT4KKyAgICAgICAgPC9mb286bm9kZT4KKyAgICA8L2Rp
dj4KKyAgICA8YmFyOm5vZGUgeG1sbnM6YmFyPSJodHRwOi8vYmFyLmNvbSI+CisgICAgICAgIDxi
ciAvPgorICAgIDwvYmFyOm5vZGU+Cis8L2Rpdj4KKworCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9zZXJpYWxpemUtbm9kZXMueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9kb20vc2VyaWFsaXplLW5vZGVzLnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9kb20vc2VyaWFsaXplLW5vZGVzLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4
IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJo
dHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbCB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6Zm9vPSJodHRwOi8vZm9vLmNv
bSIgeG1sbnM6YmFyPSJodHRwOi8vYmFyLmNvbSIgdmVyc2lvbj0iLS8vVzNDLy9EVEQgWEhUTUwg
MS4xLy9FTiIgeG1sOmxhbmc9ImVuIj4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVu
dC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KKzx0aXRsZT5YTUxT
ZXJpYWxpemVyKCkgbmFtZXNwYWNlIHRlc3Q8L3RpdGxlPgorPHNjcmlwdD4KK3dpbmRvdy5hZGRF
dmVudExpc3RlbmVyKCJsb2FkIiwgZnVuY3Rpb24oKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworICAgIAorICAgIHZhciB4cyA9IG5ldyBYTUxTZXJpYWxpemVyKCk7CisgICAgdmFyIGNvbnRl
bnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGVudCcpOworICAgIGNvbnRlbnQuZmly
c3RDaGlsZC5ub2RlVmFsdWUgPSB4cy5zZXJpYWxpemVUb1N0cmluZyhkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnaW5wdXQnKSk7CisKKyAgICAvLyBPcmlnaW5hbCB0ZXN0CisgICAgdmFyIGQgPSBk
b2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudCgidXJuOmZvby1ucyIsICJmb286
cm9vdCIsIG51bGwpOworICAgIGlmICghZC5kb2N1bWVudEVsZW1lbnQpIHsKKyAgICAgICAgLy8g
VGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBzaW5jZSBEb21JbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1
bWVudAorICAgICAgICAvLyBpcyBzdXBwb3NlZCB0byBjcmVhdGUgdGhlIHJvb3QgZWxlbWVudC4g
IEJ1dCBpbiBTYWZhcmksIGl0J3MgcmVxdWlyZWQuCisgICAgICAgIGQuYXBwZW5kQ2hpbGQoZC5j
cmVhdGVFbGVtZW50TlMoInVybjpmb28tbnMiLCAiZm9vOnJvb3QiKSk7CisgICAgfQorICAgIHZh
ciByb290ID0gZC5kb2N1bWVudEVsZW1lbnQ7CisgICAgcm9vdC5zZXRBdHRyaWJ1dGVOUygidXJu
OmZvby1ucyIsICJmb286dHlwZSIsICJ0ZXN0IikKKyAgICAKKyAgICB2YXIgYyA9IGQuY3JlYXRl
RWxlbWVudE5TKG51bGwsICJjaGlsZCIpOworICAgIHJvb3QuYXBwZW5kQ2hpbGQoYyk7CisgICAg
CisgICAgYy5zZXRBdHRyaWJ1dGVOUygidXJuOmZvby1ucyIsICJmb286bmFtZSIsICJvbmUiKTsK
KyAgICBjLnNldEF0dHJpYnV0ZU5TKCJ1cm46YmFyLW5zIiwgImJhcjpuYW1lIiwgInR3byIpOwor
ICAgIHZhciBhdHRyID0gZC5jcmVhdGVBdHRyaWJ1dGVOUyhudWxsLCAibmFtZSIpOworICAgIHZh
ciB0ZXh0ID0gZC5jcmVhdGVUZXh0Tm9kZSgidGhyZWUiKTsKKyAgICBhdHRyLmFwcGVuZENoaWxk
KHRleHQpOworICAgIGMuc2V0QXR0cmlidXRlTm9kZShhdHRyKTsKKyAgICAKKyAgICB3aW5kb3cu
YWxlcnQoImZvbzpuYW1lIGlzICIgKyBjLmdldEF0dHJpYnV0ZU5TKCJ1cm46Zm9vLW5zIiwgIm5h
bWUiKSArICIgYW5kIHNob3VsZCBiZSBvbmUiKTsKKyAgICB3aW5kb3cuYWxlcnQoImJhcjpuYW1l
IGlzICIgKyBjLmdldEF0dHJpYnV0ZU5TKCJ1cm46YmFyLW5zIiwgIm5hbWUiKSArICIgYW5kIHNo
b3VsZCBiZSB0d28iKTsKKyAgICB3aW5kb3cuYWxlcnQoIm5hbWUgaXMgIiArIGMuZ2V0QXR0cmli
dXRlTlMobnVsbCwgIm5hbWUiKSArICIgYW5kIHNob3VsZCBiZSB0aHJlZSIpOworICAgIHdpbmRv
dy5hbGVydCgibm9kZSBpcyAiICsgZC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKG51bGwsICJjaGls
ZCIpLml0ZW0oMCkubm9kZU5hbWUgKyAiIGFuZCBzaG91bGQgYmUgY2hpbGQiKTsKKyAgICB3aW5k
b3cuYWxlcnQoeHMuc2VyaWFsaXplVG9TdHJpbmcoZCkpOworfSwgZmFsc2UpOworPC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxwcmUgaWQ9ImNvbnRlbnQiPmZvbzwvcHJlPgorPGRpdiBpZD0i
aW5wdXQiPgorICAgIDxkaXY+CisgICAgICAgIDxmb286bm9kZSB4bWxucz0iaHR0cDovL2Jhei5j
b20iIGZvbzpuYW1lPSJmb29fbmFtZSIgYmFyOm5hbWU9ImJhcl9uYW1lIj4KKyAgICAgICAgICAg
IDxub2RlIGZvbzpuYW1lPSJmb29fbmFtZSI+CisgICAgICAgICAgICAgICAgPGJhcjpub2RlIHht
bG5zOmJhcj0iaHR0cDovL2JhcjIuY29tIi8+CisgICAgICAgICAgICA8L25vZGU+CisgICAgICAg
IDwvZm9vOm5vZGU+CisgICAgPC9kaXY+CisgICAgPGJhcjpub2RlPgorICAgICAgICA8YnIgLz4K
KyAgICA8L2Jhcjpub2RlPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2lubmVySFRNTC8wMDQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvaW5uZXJIVE1MLzAwNC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDIwNzA0KQor
KysgTGF5b3V0VGVzdHMvZmFzdC9pbm5lckhUTUwvMDA0LWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMSwxMCArMSwxMCBAQAogQ29udGVudDoKIAotPGhlYWQ+Cis8aGVhZCB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CiA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIg
Y29udGVudD0iVGhpcyB0ZXN0cyBzaW5ndWxhciBlbGVtZW50cyB0b28iIC8+CiA8dGl0bGU+eGh0
bWwgaW5uZXJIVE1MIHRlc3Q8L3RpdGxlPgogPC9oZWFkPgotPGJvZHk+Cis8Ym9keSB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CiA8c3Bhbj5Db250ZW50Ojwvc3Bhbj4KIDxw
cmUgaWQ9ImNvbnRlbnQiPnBsYWNlaG9sZGVyPC9wcmU+CiA8ZGl2PjwvZGl2PgpJbmRleDogV2Vi
Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9u
IDIwNzA0KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
MCBAQAorMjAwNy0wNC0wNCAgTGFtYXIgR29kZGFyZCA8bGFtYXJnb2RkYXJkQGdtYWlsLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkuCisKKyAgICAgICAgRml4IGZvciBodHRwOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjYyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS81MDE4Nzc4PgorICAgICAgICBYTUxTZXJpYWxpemVyIGRyb3BzIE5hbWVzcGFjZSBpbmZv
cm1hdGlvbgorCisgICAgICAgIFVwZGF0ZWQgV2ViQ29yZTo6bWFya3VwIHRvIG91dHB1dCBuYW1l
c3BhY2UgaW5mb3JtYXRpb24gZm9yIGVsZW1lbnRzL2F0dHJpYnV0ZXMgd2hvc2UgbmFtZXNwYWNl
IGluZm9ybWF0aW9uCisgICAgICAgIGRvZXNuJ3QgYXBwZWFyIGluIGl0cyBzY29wZSBpbiB0aGUg
b3V0cHV0LgorCisgICAgICAgIEFkZGVkIHRlc3QgY2FzZTogZmFzdC9kb20vc2VyaWFsaXplLW5v
ZGVzLnhodG1sCisKKyAgICAgICAgKiBXZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZU1hcmt1cChjb25zdCBOb2RlKiwgLi4uKSk6IENoYW5nZWQgY2Fs
bCB0byBXZWJDb3JlOjptYXJrdXAgdG8gbWF0Y2ggcGFyYW1ldGVycworICAgICAgICAoV2ViQ29y
ZTo6bWFya3VwKTogQ2hhbmdlZCByZWN1cnNpdmUgY2FsbCB0byBtYXRjaCB0cmVlIHN0cnVjdHVy
ZSwgcmVtb3ZlZCBBU1NFUlQgYW5kIG5vIGxvbmdlciBuZWVkZWQgaW5jbHVkZVNpYmxpbmdzIHBh
cmFtZXRlci4KKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0TWFya3VwKTogQWRkZWQgb3B0aW9uYWwg
cGFyYW1ldGVyIHRvIHRyYWNrIG5hbWVzcGFjZXMgaW4gdGhlIGN1cnJlbnQgc2NvcGUuCisgICAg
ICAgIChXZWJDb3JlOjphZGROYW1lc3BhY2UpOiBGdW5jdGlvbiB0byBhZGQgbmFtZXNwYWNlIGlu
Zm9ybWF0aW9uIHRvIG1hcmt1cC4KKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZEFkZE5hbWVzcGFj
ZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkQWRkTmFtZXNwYWNlRWxlbSk6IEZ1bmN0
aW9ucyB0aGF0IHRlc3Qgd2hldGhlciBuYW1lc3BhY2UgaW5mb3JtYXRpb24gc2hvdWxkIGJlIGFk
ZGVkIGZvciBhIGdpdmVuIG5vZGUuCisgICAgICAgICogV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRs
OgorICAgICAgICAoY3JlYXRlRWxlbWVudE5TKToKKyAgICAgICAgKGNyZWF0ZUF0dHJpYnV0ZU5T
KToKKyAgICAgICAgKGdldEVsZW1lbnRzQnlUYWdOYW1lTlMpOiBBZGRlZCBbQ29udmVydE51bGxU
b051bGxTdHJpbmddIHRvIG5hbWVzcGFjZVVSSSBwYXJhbWV0ZXIuCisgICAgICAgICogV2ViQ29y
ZS9kb20vTm9kZS5jcHA6CisgICAgICAgIChOb2RlOjpnZXRFbGVtZW50c0J5VGFnTmFtZU5TKTog
cmVtb3ZlZCB0ZXN0IGZvciBuYW1lc3BhY2VVUkkgYmVpbmcgbnVsbCBhcyBudWxsIGNhbiBiZSBh
IHZhbGlkIG5hbWVzcGFjZS4KKwogMjAwNy0wNC0wMyAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBs
ZS5jb20+CiAKICAgICAgICAgRml4IGZvciA8cmRhcjovL3Byb2JsZW0vNTEwODg5Nj4sIG1ha2Ug
c3VyZSB0aGUgYXNzZXJ0IGZvciBzZXRFbmNvZGVkU2l6ZQpJbmRleDogV2ViQ29yZS9kb20vRG9j
dW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAkocmV2aXNp
b24gMjA3MDQpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDEzICs0OSwxMyBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFtPbGRTdHlsZU9iakNdIE5v
ZGUgaW1wb3J0Tm9kZShpbiBOb2RlIGltcG9ydGVkTm9kZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gZGVlcCkKICAgICAgICAgICAgIHJhaXNlcyAo
RE9NRXhjZXB0aW9uKTsKLSAgICAgICAgW09sZFN0eWxlT2JqQ10gRWxlbWVudCBjcmVhdGVFbGVt
ZW50TlMoaW4gRE9NU3RyaW5nIG5hbWVzcGFjZVVSSSwKKyAgICAgICAgW09sZFN0eWxlT2JqQ10g
RWxlbWVudCBjcmVhdGVFbGVtZW50TlMoaW4gW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01T
dHJpbmcgbmFtZXNwYWNlVVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbiBET01TdHJpbmcgcXVhbGlmaWVkTmFtZSkKICAgICAgICAgICAgIHJhaXNl
cyAoRE9NRXhjZXB0aW9uKTsKLSAgICAgICAgW09sZFN0eWxlT2JqQ10gQXR0ciBjcmVhdGVBdHRy
aWJ1dGVOUyhpbiBET01TdHJpbmcgbmFtZXNwYWNlVVJJLAorICAgICAgICBbT2xkU3R5bGVPYmpD
XSBBdHRyIGNyZWF0ZUF0dHJpYnV0ZU5TKGluIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9N
U3RyaW5nIG5hbWVzcGFjZVVSSSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbiBET01TdHJpbmcgcXVhbGlmaWVkTmFtZSkKICAgICAgICAgICAgIHJhaXNl
cyAoRE9NRXhjZXB0aW9uKTsKLSAgICAgICAgW09sZFN0eWxlT2JqQ10gTm9kZUxpc3QgZ2V0RWxl
bWVudHNCeVRhZ05hbWVOUyhpbiBET01TdHJpbmcgbmFtZXNwYWNlVVJJLAorICAgICAgICBbT2xk
U3R5bGVPYmpDXSBOb2RlTGlzdCBnZXRFbGVtZW50c0J5VGFnTmFtZU5TKGluIFtDb252ZXJ0TnVs
bFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIG5hbWVzcGFjZVVSSSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBET01TdHJpbmcgbG9jYWxO
YW1lKTsKICAgICAgICAgRWxlbWVudCAgICAgICAgICAgIGdldEVsZW1lbnRCeUlkKGluIERPTVN0
cmluZyBlbGVtZW50SWQpOwogCkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMjA3MDQpCisrKyBXZWJDb3JlL2Rv
bS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5NCw3ICsxMTk0LDcgQEAgUGFzc1JlZlB0
cjxOb2RlTGlzdD4gTm9kZTo6Z2V0RWxlbWVudHNCeQogIAogUGFzc1JlZlB0cjxOb2RlTGlzdD4g
Tm9kZTo6Z2V0RWxlbWVudHNCeVRhZ05hbWVOUyhjb25zdCBTdHJpbmcgJm5hbWVzcGFjZVVSSSwg
Y29uc3QgU3RyaW5nICZsb2NhbE5hbWUpCiB7Ci0gICAgaWYgKG5hbWVzcGFjZVVSSS5pc051bGwo
KSB8fCBsb2NhbE5hbWUuaXNOdWxsKCkpCisgICAgaWYgKGxvY2FsTmFtZS5pc051bGwoKSkKICAg
ICAgICAgcmV0dXJuIDA7IC8vIEZJWE1FOiBXaG8gcmVsaWVzIG9uIGdldHRpbmcgMCBpbnN0ZWFk
IG9mIGEgbm9kZSBsaXN0IGluIHRoaXMgY2FzZT8KICAgICAKICAgICBTdHJpbmcgbmFtZSA9IGxv
Y2FsTmFtZTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiAyMDcwNCkKKysrIFdlYkNvcmUv
ZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiAjaW5j
bHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24uaCIKKyNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCiAjaW5jbHVkZSAiUmFu
Z2UuaCIKICNpbmNsdWRlICJTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgpA
QCAtMTU0LDcgKzE1NSw1MCBAQCBzdGF0aWMgdm9pZCByZW1vdmVFbmNsb3NpbmdNYWlsQmxvY2tx
dW90CiAgICAgYmxvY2txdW90ZVN0eWxlLT5kaWZmKHN0eWxlKTsKIH0KIAotc3RhdGljIERlcHJl
Y2F0ZWRTdHJpbmcgc3RhcnRNYXJrdXAoY29uc3QgTm9kZSAqbm9kZSwgY29uc3QgUmFuZ2UgKnJh
bmdlLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBhbm5vdGF0ZSwgYm9vbCBjb252ZXJ0QmxvY2tz
VG9JbmxpbmVzID0gZmFsc2UpCitzdGF0aWMgYm9vbCBzaG91bGRBZGROYW1lc3BhY2VFbGVtKGNv
bnN0IEVsZW1lbnQqIGVsZW0pCit7CisgICAgLy8gRG9uJ3QgYWRkIG5hbWVzcGFjZSBhdHRyaWJ1
dGUgaWYgaXQgaXMgYWxyZWFkeSBkZWZpbmVkIGZvciB0aGlzIGVsZW0uCisgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBwcmVmaXggPSBlbGVtLT5wcmVmaXgoKTsKKyAgICBBdG9taWNTdHJpbmcgYXR0
ciA9ICFwcmVmaXguaXNFbXB0eSgpID8gInhtbG5zOiIgKyBwcmVmaXggOiAieG1sbnMiOworICAg
IHJldHVybiAhZWxlbS0+aGFzQXR0cmlidXRlKGF0dHIpOworfQorCitzdGF0aWMgYm9vbCBzaG91
bGRBZGROYW1lc3BhY2VBdHRyKGNvbnN0IEF0dHJpYnV0ZSogYXR0ciwgSGFzaE1hcDxBdG9taWNT
dHJpbmdJbXBsKiwgQXRvbWljU3RyaW5nSW1wbCo+JiBuYW1lc3BhY2VzKQoreworICAgIC8vIERv
bid0IGFkZCBuYW1lc3BhY2UgYXR0cmlidXRlcyB0d2ljZQorICAgIHN0YXRpYyBjb25zdCBBdG9t
aWNTdHJpbmcgeG1sbnNVUkkgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iOworICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lIHhtbG5zQXR0cihudWxsQXRvbSwgInhtbG5zIiwg
eG1sbnNVUkkpOworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0geG1sbnNBdHRyKSB7CisgICAgICAg
IG5hbWVzcGFjZXMuc2V0KGVtcHR5QXRvbS5pbXBsKCksIGF0dHItPnZhbHVlKCkuaW1wbCgpKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBRdWFsaWZpZWROYW1lIHht
bG5zUHJlZml4QXR0cigieG1sbnMiLCBhdHRyLT5sb2NhbE5hbWUoKSwgeG1sbnNVUkkpOworICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0geG1sbnNQcmVmaXhBdHRyKSB7CisgICAgICAgIG5hbWVzcGFj
ZXMuc2V0KGF0dHItPmxvY2FsTmFtZSgpLmltcGwoKSwgYXR0ci0+dmFsdWUoKS5pbXBsKCkpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQor
CitzdGF0aWMgU3RyaW5nIGFkZE5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwg
Y29uc3QgQXRvbWljU3RyaW5nJiBucywgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgQXRvbWlj
U3RyaW5nSW1wbCo+JiBuYW1lc3BhY2VzKQoreworICAgIGlmIChucy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiAiIjsKKyAgICAKKyAgICAvLyBVc2UgZW1wdHlBdG9tcydzIGltcGwoKSBmb3Ig
Ym90aCBudWxsIGFuZCBlbXB0eSBzdHJpbmdzIHNpbmNlIHRoZSBIYXNoTWFwIGNhbid0IGhhbmRs
ZSAwIGFzIGEga2V5CisgICAgQXRvbWljU3RyaW5nSW1wbCogcHJlID0gcHJlZml4LmlzRW1wdHko
KSA/IGVtcHR5QXRvbS5pbXBsKCkgOiBwcmVmaXguaW1wbCgpOworICAgIEF0b21pY1N0cmluZ0lt
cGwqIGZvdW5kTlMgPSBuYW1lc3BhY2VzLmdldChwcmUpOworICAgIGlmIChmb3VuZE5TICE9IG5z
LmltcGwoKSkgeworICAgICAgICBuYW1lc3BhY2VzLnNldChwcmUsIG5zLmltcGwoKSk7CisgICAg
ICAgIHJldHVybiAiIHhtbG5zIiArICghcHJlZml4LmlzRW1wdHkoKSA/ICI6IiArIHByZWZpeCA6
ICIiKSArICI9XCIiICsgZXNjYXBlVGV4dEZvck1hcmt1cChucy5kZXByZWNhdGVkU3RyaW5nKCks
IHRydWUpICsgIlwiIjsKKyAgICB9CisgICAgCisgICAgcmV0dXJuICIiOworfQorCitzdGF0aWMg
RGVwcmVjYXRlZFN0cmluZyBzdGFydE1hcmt1cChjb25zdCBOb2RlICpub2RlLCBjb25zdCBSYW5n
ZSAqcmFuZ2UsIEVBbm5vdGF0ZUZvckludGVyY2hhbmdlIGFubm90YXRlLCBib29sIGNvbnZlcnRC
bG9ja3NUb0lubGluZXMgPSBmYWxzZSwgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgQXRvbWlj
U3RyaW5nSW1wbCo+KiBuYW1lc3BhY2VzID0gMCkKIHsKICAgICBib29sIGRvY3VtZW50SXNIVE1M
ID0gbm9kZS0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKTsKICAgICBzd2l0Y2ggKG5vZGUt
Pm5vZGVUeXBlKCkpIHsKQEAgLTIwMSw2ICsyNDUsOCBAQCBzdGF0aWMgRGVwcmVjYXRlZFN0cmlu
ZyBzdGFydE1hcmt1cChjb25zCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBOYW1lZEF0dHJN
YXAgKmF0dHJzID0gZWwtPmF0dHJpYnV0ZXMoKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGF0dHJzLT5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlmICghZG9jdW1lbnRJc0hUTUwgJiYg
bmFtZXNwYWNlcyAmJiBzaG91bGRBZGROYW1lc3BhY2VFbGVtKGVsKSkKKyAgICAgICAgICAgICAg
ICBtYXJrdXAgKz0gYWRkTmFtZXNwYWNlKGVsLT5wcmVmaXgoKSwgZWwtPm5hbWVzcGFjZVVSSSgp
LCAqbmFtZXNwYWNlcykuZGVwcmVjYXRlZFN0cmluZygpOwogCiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgQXR0
cmlidXRlICphdHRyID0gYXR0cnMtPmF0dHJpYnV0ZUl0ZW0oaSk7CkBAIC0yMjEsNiArMjY3LDkg
QEAgc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgc3RhcnRNYXJrdXAoY29ucwogICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgbWFya3VwICs9ICIgIiArIGF0dHItPm5hbWUo
KS50b1N0cmluZygpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKICAgICAgICAgICAgICAgICBtYXJrdXAg
Kz0gIj1cIiIgKyBlc2NhcGVUZXh0Rm9yTWFya3VwKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKSwg
dHJ1ZSkgKyAiXCIiOworCisgICAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudElzSFRNTCAmJiBu
YW1lc3BhY2VzICYmIHNob3VsZEFkZE5hbWVzcGFjZUF0dHIoYXR0ciwgKm5hbWVzcGFjZXMpKQor
ICAgICAgICAgICAgICAgICAgICBtYXJrdXAgKz0gYWRkTmFtZXNwYWNlKGF0dHItPnByZWZpeCgp
LCBhdHRyLT5uYW1lc3BhY2VVUkkoKSwgKm5hbWVzcGFjZXMpLmRlcHJlY2F0ZWRTdHJpbmcoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGFubm90YXRlICYm
IGFkZGl0aW9uYWxTdHlsZS5sZW5ndGgoKSkKQEAgLTI4MCwyNiArMzI5LDI3IEBAIHN0YXRpYyBE
ZXByZWNhdGVkU3RyaW5nIGVuZE1hcmt1cChjb25zdCAKICAgICByZXR1cm4gIiI7CiB9CiAKLXN0
YXRpYyBEZXByZWNhdGVkU3RyaW5nIG1hcmt1cChOb2RlKiBzdGFydE5vZGUsIGJvb2wgb25seUlu
Y2x1ZGVDaGlsZHJlbiwgYm9vbCBpbmNsdWRlU2libGluZ3MsIFZlY3RvcjxOb2RlKj4gKm5vZGVz
KQorc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgbWFya3VwKE5vZGUqIHN0YXJ0Tm9kZSwgYm9vbCBv
bmx5SW5jbHVkZUNoaWxkcmVuLCBWZWN0b3I8Tm9kZSo+KiBub2RlcywgY29uc3QgSGFzaE1hcDxB
dG9taWNTdHJpbmdJbXBsKiwgQXRvbWljU3RyaW5nSW1wbCo+KiBuYW1lc3BhY2VzID0gMCkKIHsK
LSAgICAvLyBEb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gb25seSBpbmNsdWRlIGNoaWxkcmVuIGFuZCBp
bmNsdWRlIHNpYmxpbmdzLgotICAgIEFTU0VSVCghKG9ubHlJbmNsdWRlQ2hpbGRyZW4gJiYgaW5j
bHVkZVNpYmxpbmdzKSk7CisgICAgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgQXRvbWljU3Ry
aW5nSW1wbCo+IG5hbWVzcGFjZUhhc2g7CisgICAgaWYgKG5hbWVzcGFjZXMpCisgICAgICAgIG5h
bWVzcGFjZUhhc2ggPSAqbmFtZXNwYWNlczsKKyAgICAKICAgICBEZXByZWNhdGVkU3RyaW5nIG1l
ID0gIiI7Ci0gICAgZm9yIChOb2RlKiBjdXJyZW50ID0gc3RhcnROb2RlOyBjdXJyZW50ICE9IE5V
TEw7IGN1cnJlbnQgPSBpbmNsdWRlU2libGluZ3MgPyBjdXJyZW50LT5uZXh0U2libGluZygpIDog
TlVMTCkgewotICAgICAgICBpZiAoIW9ubHlJbmNsdWRlQ2hpbGRyZW4pIHsKLSAgICAgICAgICAg
IGlmIChub2RlcykKLSAgICAgICAgICAgICAgICBub2Rlcy0+YXBwZW5kKGN1cnJlbnQpOwotICAg
ICAgICAgICAgbWUgKz0gc3RhcnRNYXJrdXAoY3VycmVudCwgMCwgRG9Ob3RBbm5vdGF0ZUZvcklu
dGVyY2hhbmdlKTsKLSAgICAgICAgfQotICAgICAgICAvLyBwcmludCBjaGlsZHJlbgotICAgICAg
ICBpZiAoTm9kZSAqbiA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgICAgIGlmICgh
KG4tPmRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkgJiYgZG9lc0hUTUxGb3JiaWRFbmRUYWco
Y3VycmVudCkpKQotICAgICAgICAgICAgICAgIG1lICs9IG1hcmt1cChuLCBmYWxzZSwgdHJ1ZSwg
bm9kZXMpOwotICAgICAgICAKLSAgICAgICAgLy8gUHJpbnQgbXkgZW5kaW5nIHRhZwotICAgICAg
ICBpZiAoIW9ubHlJbmNsdWRlQ2hpbGRyZW4pCi0gICAgICAgICAgICBtZSArPSBlbmRNYXJrdXAo
Y3VycmVudCk7Ci0gICAgfQorICAgIGlmICghb25seUluY2x1ZGVDaGlsZHJlbikgeworICAgICAg
ICBpZiAobm9kZXMpCisgICAgICAgICAgICBub2Rlcy0+YXBwZW5kKHN0YXJ0Tm9kZSk7CisgICAg
ICAgIG1lICs9IHN0YXJ0TWFya3VwKHN0YXJ0Tm9kZSwgMCwgRG9Ob3RBbm5vdGF0ZUZvckludGVy
Y2hhbmdlLCBmYWxzZSwgJm5hbWVzcGFjZUhhc2gpOworICAgIH0KKyAgICAvLyBwcmludCBjaGls
ZHJlbgorICAgIGlmICghKHN0YXJ0Tm9kZS0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSAm
JiBkb2VzSFRNTEZvcmJpZEVuZFRhZyhzdGFydE5vZGUpKSkKKyAgICAgICAgZm9yIChOb2RlKiBj
dXJyZW50ID0gc3RhcnROb2RlLT5maXJzdENoaWxkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJy
ZW50LT5uZXh0U2libGluZygpKQorICAgICAgICAgICAgbWUgKz0gbWFya3VwKGN1cnJlbnQsIGZh
bHNlLCBub2RlcywgJm5hbWVzcGFjZUhhc2gpOworICAgIAorICAgIC8vIFByaW50IG15IGVuZGlu
ZyB0YWcKKyAgICBpZiAoIW9ubHlJbmNsdWRlQ2hpbGRyZW4pCisgICAgICAgIG1lICs9IGVuZE1h
cmt1cChzdGFydE5vZGUpOworICAgIAogICAgIHJldHVybiBtZTsKIH0KIApAQCAtNTkxLDcgKzY0
MSw3IEBAIERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IE5vZGUKICAgICBpZiAo
bm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAgICAgbm9kZS0+ZG9jdW1lbnQoKS0+ZnJh
bWUoKS0+ZWRpdG9yKCktPmRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIoKS0+ZGlzYWJsZSgpOwogICAg
IG5vZGUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygp
OwotICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVzdWx0KG1hcmt1cChjb25zdF9jYXN0PE5vZGUqPihu
b2RlKSwgaW5jbHVkZUNoaWxkcmVuLCBmYWxzZSwgbm9kZXMpKTsKKyAgICBEZXByZWNhdGVkU3Ry
aW5nIHJlc3VsdChtYXJrdXAoY29uc3RfY2FzdDxOb2RlKj4obm9kZSksIGluY2x1ZGVDaGlsZHJl
biwgbm9kZXMpKTsKICAgICBpZiAobm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAgICAg
bm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPmRlbGV0ZUJ1dHRvbkNvbnRyb2xs
ZXIoKS0+ZW5hYmxlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
</data>
<flag name="review"
          id="5616"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>