<?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>70436</bug_id>
          
          <creation_ts>2011-10-19 13:38:07 -0700</creation_ts>
          <short_desc>[MutationObservers] Implement basic subtree observation</short_desc>
          <delta_ts>2011-10-21 15:51:44 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>68729</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Klein">adamk</reporter>
          <assigned_to name="Adam Klein">adamk</assigned_to>
          <cc>darin</cc>
    
    <cc>ojan</cc>
    
    <cc>rafaelw</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>486960</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-19 13:38:07 -0700</bug_when>
    <thetext>[MutationObservers] Implement basic subtree observation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486972</commentid>
    <comment_count>1</comment_count>
      <attachid>111668</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-19 13:45:55 -0700</bug_when>
    <thetext>Created attachment 111668
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487883</commentid>
    <comment_count>2</comment_count>
      <attachid>111668</attachid>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-10-20 14:19:52 -0700</bug_when>
    <thetext>Comment on attachment 111668
Patch

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

&gt; Source/WebCore/dom/Node.cpp:2695
&gt; +        const size_t size = observerEntries-&gt;size();

maybe extract a static utility function here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487890</commentid>
    <comment_count>3</comment_count>
      <attachid>111668</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-20 14:33:18 -0700</bug_when>
    <thetext>Comment on attachment 111668
Patch

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

&gt;&gt; Source/WebCore/dom/Node.cpp:2695
&gt;&gt; +        const size_t size = observerEntries-&gt;size();
&gt; 
&gt; maybe extract a static utility function here?

That&apos;s how I started, but it the inner if-statement differs depending on whether we&apos;re looking at the node itself or one of its ancestors.  This means that either we do extra checking inside the loop (bad for performance), or we extract the test out into a functor (bad for readability, imho).  That&apos;s why I ended up &quot;unrolling&quot; the code manually.  Let me know if you&apos;d prefer the functor approach (I really don&apos;t want to do any more work in the inner loop than I have to).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487912</commentid>
    <comment_count>4</comment_count>
      <attachid>111668</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-20 15:18:37 -0700</bug_when>
    <thetext>Comment on attachment 111668
Patch

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

&gt;&gt;&gt; Source/WebCore/dom/Node.cpp:2695

&gt;&gt; 
&gt;&gt; maybe extract a static utility function here?
&gt; 
&gt; That&apos;s how I started, but it the inner if-statement differs depending on whether we&apos;re looking at the node itself or one of its ancestors.  This means that either we do extra checking inside the loop (bad for performance), or we extract the test out into a functor (bad for readability, imho).  That&apos;s why I ended up &quot;unrolling&quot; the code manually.  Let me know if you&apos;d prefer the functor approach (I really don&apos;t want to do any more work in the inner loop than I have to).

I think we should keep matches to take MutationObserverOptions and do:
if (Vector&lt;MutationObserverEntry&gt;* observerEntries = mutationObserverEntries())
    addMatchedObserverEntriesToSet(observerSet, *observerEntries, type);
for (Node* node = parentNode(); node; node = node-&gt;parentNode()) {
    if (Vector&lt;MutationObserverEntry&gt;* observerEntries = node-&gt;mutationObserverEntries())
        addMatchedObserverEntriesToSet(observerSet, *observerEntries, type | WebKitMutationObserver::Subtree);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487927</commentid>
    <comment_count>5</comment_count>
      <attachid>111856</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-20 15:32:42 -0700</bug_when>
    <thetext>Created attachment 111856
Extracted helper function</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487929</commentid>
    <comment_count>6</comment_count>
      <attachid>111668</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-20 15:33:23 -0700</bug_when>
    <thetext>Comment on attachment 111668
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/dom/Node.cpp:2695
&gt;&gt;&gt;&gt; +        const size_t size = observerEntries-&gt;size();
&gt;&gt;&gt; 
&gt;&gt;&gt; maybe extract a static utility function here?
&gt;&gt; 
&gt;&gt; That&apos;s how I started, but it the inner if-statement differs depending on whether we&apos;re looking at the node itself or one of its ancestors.  This means that either we do extra checking inside the loop (bad for performance), or we extract the test out into a functor (bad for readability, imho).  That&apos;s why I ended up &quot;unrolling&quot; the code manually.  Let me know if you&apos;d prefer the functor approach (I really don&apos;t want to do any more work in the inner loop than I have to).
&gt; 
&gt; 

After talking to Rafael offline, came up with a fix (just make matches() stricter).  I&apos;ve now extracted the loop into its own function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488606</commentid>
    <comment_count>7</comment_count>
      <attachid>112009</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-21 13:24:37 -0700</bug_when>
    <thetext>Created attachment 112009
Merged to r98133</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488717</commentid>
    <comment_count>8</comment_count>
      <attachid>112009</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-21 15:22:34 -0700</bug_when>
    <thetext>Comment on attachment 112009
Merged to r98133

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

r=me provided problems listed below are all addressed.

&gt; Source/WebCore/ChangeLog:9
&gt; +        Note that this patch only implements &quot;basic&quot; subtree
&gt; +        semantics, not the fully robust semantics described in

Nit: semantics should probably on the previous line to avoid awkward line break.

&gt; Source/WebCore/ChangeLog:22
&gt; +        (WebCore::addMatchingObservers): Static helper method for the below.

I&apos;m not sure what you&apos;re referring to by &quot;the below&quot;. Could you spell out the function name here?

&gt; Source/WebCore/dom/Node.cpp:2703
&gt; +    if (observerEntries) {

We prefer early exiting over nesting ifs especially when the if statement appears at the beginning of a function and the normal flow is to do whatever inside the if.

&gt; LayoutTests/fast/mutation/observe-subtree.html:32
&gt; +        observer = new WebKitMutationObserver(function(m) {
&gt; +            mutations = m;

Nit: please avoid using one-letter variable.

&gt; LayoutTests/fast/mutation/observe-subtree.html:75
&gt; +        observer = new WebKitMutationObserver(function(m) {
&gt; +            mutations = m;
&gt; +        });
&gt; +        observer2 = new WebKitMutationObserver(function(m) {
&gt; +            mutations2 = m;
&gt; +        });

Ditto about one-letter variables.

&gt; LayoutTests/fast/mutation/observe-subtree.html:116
&gt; +        observer = new WebKitMutationObserver(function(m) {
&gt; +            mutations = m;
&gt; +            ++calls;
&gt; +        });

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488727</commentid>
    <comment_count>9</comment_count>
      <attachid>112009</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-21 15:36:15 -0700</bug_when>
    <thetext>Comment on attachment 112009
Merged to r98133

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

&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt; +        semantics, not the fully robust semantics described in
&gt; 
&gt; Nit: semantics should probably on the previous line to avoid awkward line break.

Done.

&gt;&gt; Source/WebCore/ChangeLog:22
&gt;&gt; +        (WebCore::addMatchingObservers): Static helper method for the below.
&gt; 
&gt; I&apos;m not sure what you&apos;re referring to by &quot;the below&quot;. Could you spell out the function name here?

Done.

&gt;&gt; Source/WebCore/dom/Node.cpp:2703
&gt;&gt; +    if (observerEntries) {
&gt; 
&gt; We prefer early exiting over nesting ifs especially when the if statement appears at the beginning of a function and the normal flow is to do whatever inside the if.

Done.

&gt;&gt; LayoutTests/fast/mutation/observe-subtree.html:32
&gt;&gt; +            mutations = m;
&gt; 
&gt; Nit: please avoid using one-letter variable.

Done.

&gt;&gt; LayoutTests/fast/mutation/observe-subtree.html:75
&gt;&gt; +        });
&gt; 
&gt; Ditto about one-letter variables.

Done.

&gt;&gt; LayoutTests/fast/mutation/observe-subtree.html:116
&gt;&gt; +        });
&gt; 
&gt; Ditto.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488728</commentid>
    <comment_count>10</comment_count>
      <attachid>112033</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-21 15:36:47 -0700</bug_when>
    <thetext>Created attachment 112033
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488737</commentid>
    <comment_count>11</comment_count>
      <attachid>112033</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-21 15:51:39 -0700</bug_when>
    <thetext>Comment on attachment 112033
Patch for landing

Clearing flags on attachment: 112033

Committed r98163: &lt;http://trac.webkit.org/changeset/98163&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488738</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-21 15:51:44 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111668</attachid>
            <date>2011-10-19 13:45:55 -0700</date>
            <delta_ts>2011-10-20 15:33:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70436-20111019134554.patch</filename>
            <type>text/plain</type>
            <size>13779</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc4MDkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0NzBkNmUwYzYwZGMxNGZi
M2Y5YWQ4MDk0OWVkYzg3NjdlMDMyZTAzLi5hZDE4ODA0YWJmYmFlNzljMDBlZWU1YzA4MDEyZDkw
NGVmNmJiNTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMTAtMTkgIEFkYW0g
S2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW011dGF0aW9uT2JzZXJ2ZXJz
XSBJbXBsZW1lbnQgYmFzaWMgc3VidHJlZSBvYnNlcnZhdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA0MzYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb3RlIHRoYXQgdGhpcyBwYXRjaCBvbmx5IGlt
cGxlbWVudHMgImJhc2ljIiBzdWJ0cmVlCisgICAgICAgIHNlbWFudGljcywgbm90IHRoZSBmdWxs
eSByb2J1c3Qgc2VtYW50aWNzIGRlc2NyaWJlZCBpbgorICAgICAgICBodHRwOi8vbGlzdHMudzMu
b3JnL0FyY2hpdmVzL1B1YmxpYy9wdWJsaWMtd2ViYXBwcy8yMDExSnVsU2VwLzE2MjIuaHRtbC4K
KyAgICAgICAgTW9zdCBpbXBvcnRhbnRseSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaGFuZGxlIHRo
ZSBjYXNlIHdoZXJlIG11dGF0aW9ucworICAgICAgICBvY2N1ciBpbiBhIHRlbXBvcmFyaWx5IGRl
dGFjaGVkIHN1YnRyZWUuCisKKyAgICAgICAgVGhlIHBsYW4gaXMgdG8gaW1wbGVtZW50IHRob3Nl
IHNlbWFudGljcyBpbiBhIGZvbGxvd3VwIHRvIGF2b2lkCisgICAgICAgIGJsb2NraW5nIG90aGVy
IHBhcnRzIG9mIHRoZSBNdXRhdGlvbk9ic2VydmVyIHNwZWMgdGhhdCByZWx5IG9uCisgICAgICAg
IHRoZSBleGlzdGVuY2Ugb2Ygc3VidHJlZSBvYnNlcnZhdGlvbiBidXQgbm90IGl0cyBzcGVjaWZp
YworICAgICAgICBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICBUZXN0OiBmYXN0L211dGF0aW9u
L29ic2VydmUtc3VidHJlZS5odG1sCisKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlOjpjbGVhclJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OnJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlOjpyZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIpOgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURh
dGEuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJFbnRyeTo6TXV0YXRpb25P
YnNlcnZlckVudHJ5KTogQ29udmVydGVkIHRvIGEgcHJvcGVyIGNsYXNzLCBhcyBtb3JlIG1ldGhv
ZHMgd2VyZSBuZWVkZWQuCisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyRW50cnk6
Om9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJFbnRyeTo6c2V0
T2JzZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlckVudHJ5OjpvcHRp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJFbnRyeTo6c2V0T3B0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyRW50cnk6Om1hdGNoZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlckVudHJ5Ojppc1N1YnRyZWUpOgorICAg
ICAgICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlckVudHJ5OjpvcGVyYXRvcj09KToKKwogMjAx
MS0xMC0xOCAgQWRyaWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgogCiAgICAgICAgIFtj
aHJvbWl1bV0gUHJlc2VydmUgb2Zmc2NyZWVuIHRpbGVzIGluc3RlYWQgb2YgaW1tZWRpYXRlbHkg
cmVjeWNsaW5nIHRoZW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCAxZjg1ZmQ5MTJlYWRmZDVhNzMxNTlk
NmRlZGU5MzBlNjQ4NDljOTQwLi5kOTUxNzYyOWU5ZTBkYTlkOTFiZmMxYzdhNTcxNGFhNGVlZTYz
OTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC01NTEsNyArNTUxLDcgQEAgdm9pZCBOb2RlOjpjbGVh
clJhcmVEYXRhKCkKICAgICBWZWN0b3I8TXV0YXRpb25PYnNlcnZlckVudHJ5Piogb2JzZXJ2ZXJF
bnRyaWVzID0gbXV0YXRpb25PYnNlcnZlckVudHJpZXMoKTsKICAgICBpZiAob2JzZXJ2ZXJFbnRy
aWVzKSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JzZXJ2ZXJFbnRyaWVzLT5z
aXplKCk7ICsraSkKLSAgICAgICAgICAgIG9ic2VydmVyRW50cmllcy0+YXQoaSkub2JzZXJ2ZXIt
Pm9ic2VydmVkTm9kZURlc3RydWN0ZWQodGhpcyk7CisgICAgICAgICAgICBvYnNlcnZlckVudHJp
ZXMtPmF0KGkpLm9ic2VydmVyKCktPm9ic2VydmVkTm9kZURlc3RydWN0ZWQodGhpcyk7CiAgICAg
fQogI2VuZGlmCiAKQEAgLTI2OTAsMTQgKzI2OTAsMjkgQEAgVmVjdG9yPE11dGF0aW9uT2JzZXJ2
ZXJFbnRyeT4qIE5vZGU6Om11dGF0aW9uT2JzZXJ2ZXJFbnRyaWVzKCkKIAogdm9pZCBOb2RlOjpy
ZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUoVmVjdG9yPFdlYktpdE11dGF0aW9uT2Jz
ZXJ2ZXIqPiYgb2JzZXJ2ZXJzLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpNdXRhdGlvblR5cGUg
dHlwZSkKIHsKLSAgICBWZWN0b3I8TXV0YXRpb25PYnNlcnZlckVudHJ5Piogb2JzZXJ2ZXJFbnRy
aWVzID0gbXV0YXRpb25PYnNlcnZlckVudHJpZXMoKTsKLSAgICBpZiAoIW9ic2VydmVyRW50cmll
cyB8fCBvYnNlcnZlckVudHJpZXMtPmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Zm9yIChWZWN0b3I8TXV0YXRpb25PYnNlcnZlckVudHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG9ic2Vy
dmVyRW50cmllcy0+YmVnaW4oKTsgaXRlciAhPSBvYnNlcnZlckVudHJpZXMtPmVuZCgpOyArK2l0
ZXIpIHsKLSAgICAgICAgaWYgKGl0ZXItPm1hdGNoZXModHlwZSkpCi0gICAgICAgICAgICBvYnNl
cnZlcnMuYXBwZW5kKGl0ZXItPm9ic2VydmVyLmdldCgpKTsKKyAgICBIYXNoU2V0PFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXIqPiBvYnNlcnZlclNldDsKKyAgICBpZiAoVmVjdG9yPE11dGF0aW9uT2Jz
ZXJ2ZXJFbnRyeT4qIG9ic2VydmVyRW50cmllcyA9IG11dGF0aW9uT2JzZXJ2ZXJFbnRyaWVzKCkp
IHsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHNpemUgPSBvYnNlcnZlckVudHJpZXMtPnNpemUoKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAg
IE11dGF0aW9uT2JzZXJ2ZXJFbnRyeSYgZW50cnkgPSBvYnNlcnZlckVudHJpZXMtPmF0KGkpOwor
ICAgICAgICAgICAgaWYgKGVudHJ5Lm1hdGNoZXModHlwZSkpCisgICAgICAgICAgICAgICAgb2Jz
ZXJ2ZXJTZXQuYWRkKGVudHJ5Lm9ic2VydmVyKCkpOworICAgICAgICB9CiAgICAgfQorICAgIGZv
ciAoTm9kZSogbm9kZSA9IHBhcmVudE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5v
ZGUoKSkgeworICAgICAgICBpZiAoVmVjdG9yPE11dGF0aW9uT2JzZXJ2ZXJFbnRyeT4qIG9ic2Vy
dmVyRW50cmllcyA9IG5vZGUtPm11dGF0aW9uT2JzZXJ2ZXJFbnRyaWVzKCkpIHsKKyAgICAgICAg
ICAgIGNvbnN0IHNpemVfdCBzaXplID0gb2JzZXJ2ZXJFbnRyaWVzLT5zaXplKCk7CisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgICAg
IE11dGF0aW9uT2JzZXJ2ZXJFbnRyeSYgZW50cnkgPSBvYnNlcnZlckVudHJpZXMtPmF0KGkpOwor
ICAgICAgICAgICAgICAgIGlmIChlbnRyeS5tYXRjaGVzKHR5cGUpICYmIGVudHJ5LmlzU3VidHJl
ZSgpKQorICAgICAgICAgICAgICAgICAgICBvYnNlcnZlclNldC5hZGQoZW50cnkub2JzZXJ2ZXIo
KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGSVhNRTogdGhp
cyBtZXRob2Qgc2hvdWxkIG91dHB1dCBhIEhhc2hTZXQgaW5zdGVhZCBvZiBhIFZlY3Rvci4KKyAg
ICBpZiAoIW9ic2VydmVyU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgY29weVRvVmVjdG9yKG9ic2Vy
dmVyU2V0LCBvYnNlcnZlcnMpOwogfQogCiBOb2RlOjpNdXRhdGlvblJlZ2lzdHJhdGlvblJlc3Vs
dCBOb2RlOjpyZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIoUGFzc1JlZlB0cjxXZWJLaXRNdXRhdGlv
bk9ic2VydmVyPiBvYnNlcnZlciwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0aW9ucykKQEAg
LTI3MTEsNyArMjcyNiw3IEBAIE5vZGU6Ok11dGF0aW9uUmVnaXN0cmF0aW9uUmVzdWx0IE5vZGU6
OnJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcihQYXNzUmVmUHRyPFdlYktpCiAgICAgICAgIHJldHVy
biBNdXRhdGlvbk9ic2VydmVyUmVnaXN0ZXJlZDsKICAgICB9CiAKLSAgICAoKm9ic2VydmVyRW50
cmllcylbaW5kZXhdLm9wdGlvbnMgPSBlbnRyeS5vcHRpb25zOworICAgICgqb2JzZXJ2ZXJFbnRy
aWVzKVtpbmRleF0uc2V0T3B0aW9ucyhlbnRyeS5vcHRpb25zKCkpOwogICAgIHJldHVybiBNdXRh
dGlvblJlZ2lzdHJhdGlvbk9wdGlvbnNSZXNldDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0
YS5oCmluZGV4IGUyNThhZmE0ZTI2YzBkYTIwNmRlNjQ4OTE2ZGYyOGE5ZDlmYWVkZTYuLjQwODRk
ODhmZTI2NTc5MTFmZTYyMDA4ZDQxNjAyYmE5MzA0YWNhM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJh
cmVEYXRhLmgKQEAgLTg5LDI3ICs4OSwzOSBAQCBwcml2YXRlOgogfTsKIAogI2lmIEVOQUJMRShN
VVRBVElPTl9PQlNFUlZFUlMpCi1zdHJ1Y3QgTXV0YXRpb25PYnNlcnZlckVudHJ5IHsKK2NsYXNz
IE11dGF0aW9uT2JzZXJ2ZXJFbnRyeSB7CitwdWJsaWM6CiAgICAgTXV0YXRpb25PYnNlcnZlckVu
dHJ5KFBhc3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gb2JzZXJ2ZXIsIE11dGF0aW9u
T2JzZXJ2ZXJPcHRpb25zIG9wdGlvbnMpCi0gICAgICAgIDogb2JzZXJ2ZXIob2JzZXJ2ZXIpCi0g
ICAgICAgICwgb3B0aW9ucyhvcHRpb25zKQorICAgICAgICA6IG1fb2JzZXJ2ZXIob2JzZXJ2ZXIp
CisgICAgICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCiAgICAgewogICAgIH0KIAotICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBNdXRhdGlvbk9ic2VydmVyRW50cnkmIG90aGVyKSBjb25zdAorICAg
IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqIG9ic2VydmVyKCkgeyByZXR1cm4gbV9vYnNlcnZlci5n
ZXQoKTsgfQorICAgIHZvaWQgc2V0T2JzZXJ2ZXIoUGFzc1JlZlB0cjxXZWJLaXRNdXRhdGlvbk9i
c2VydmVyPiBvYnNlcnZlcikgeyBtX29ic2VydmVyID0gb2JzZXJ2ZXI7IH0KKworICAgIE11dGF0
aW9uT2JzZXJ2ZXJPcHRpb25zIG9wdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX29wdGlvbnM7IH0K
KyAgICB2b2lkIHNldE9wdGlvbnMoTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0aW9ucykgeyBt
X29wdGlvbnMgPSBvcHRpb25zOyB9CisKKyAgICBib29sIG1hdGNoZXMoV2ViS2l0TXV0YXRpb25P
YnNlcnZlcjo6TXV0YXRpb25UeXBlIHR5cGUpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
b2JzZXJ2ZXIgPT0gb3RoZXIub2JzZXJ2ZXI7CisgICAgICAgIHJldHVybiBtX29wdGlvbnMgJiB0
eXBlOwogICAgIH0KIAotICAgIGJvb2wgbWF0Y2hlcyhNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBv
cHRpb25zKSBjb25zdAorICAgIGJvb2wgaXNTdWJ0cmVlKCkgY29uc3QKICAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLT5vcHRpb25zICYgb3B0aW9uczsKKyAgICAgICAgcmV0dXJuIG1fb3B0aW9u
cyAmIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OlN1YnRyZWU7CiAgICAgfQogCi0gICAgUmVmUHRy
PFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI+IG9ic2VydmVyOwotICAgIE11dGF0aW9uT2JzZXJ2ZXJP
cHRpb25zIG9wdGlvbnM7Ci19OworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNdXRhdGlvbk9i
c2VydmVyRW50cnkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2JzZXJ2
ZXIgPT0gb3RoZXIubV9vYnNlcnZlcjsKKyAgICB9CiAKK3ByaXZhdGU6CisgICAgUmVmUHRyPFdl
YktpdE11dGF0aW9uT2JzZXJ2ZXI+IG1fb2JzZXJ2ZXI7CisgICAgTXV0YXRpb25PYnNlcnZlck9w
dGlvbnMgbV9vcHRpb25zOworfTsKICNlbmRpZiAvLyBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJT
KQogCiBjbGFzcyBOb2RlUmFyZURhdGEgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGMzMDNlZWQ5M2UyZDIxZDE0YzgyMzFj
YjgxYmE3MDZkMWU2ZjQ4M2YuLjY0OWVkMDY1YTBmYmQ4Yjk0MzI5NDE2NDliODNhYjkyMThlZTk5
NjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0xMC0xOSAgQWRhbSBLbGVpbiAgPGFkYW1r
QGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25PYnNlcnZlcnNdIEltcGxlbWVudCBi
YXNpYyBzdWJ0cmVlIG9ic2VydmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03MDQzNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLXN1YnRyZWUtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L211dGF0aW9uL29ic2VydmUtc3VidHJlZS5odG1s
OiBBZGRlZC4KKwogMjAxMS0xMC0xOCAgQWRhbSBLbGVpbiAgPGFkYW1rQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBbTXV0YXRpb25PYnNlcnZlcnNdIEltcGxlbWVudCBXZWJLaXRNdXRhdGlvbk9i
c2VydmVyLm9ic2VydmUgZm9yIGNoYXJhY3RlckRhdGEgY2hhbmdlcwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLXN1YnRyZWUtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLXN1YnRyZWUtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjU1MjdlYjFhYzMwZTAyNDEyNDdkZDFhOTEyNzMwNzNlYjQ2ZWEzYWYKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtc3VidHJlZS1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSwzOSBAQAorVGVzdCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyLm9i
c2VydmUgb24gYSBzdWJ0cmVlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitUZXN0
aW5nIGJhc2ljIGFzcGVjdHMgb2Ygc3VidHJlZSBvYnNlcnZhdGlvbi4KKy4uLmF0dHJpYnV0ZSBh
bmQgY2hhcmFjdGVyRGF0YSBjaGFuZ2VzIGluIHN1YnRyZWUKK1BBU1MgbXV0YXRpb25zLmxlbmd0
aCBpcyAyCitQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRh
dGlvbnNbMF0udGFyZ2V0IGlzIHN1YkRpdgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFt
ZSBpcyAiZm9vIgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlIGlzIG51bGwK
K1BBU1MgbXV0YXRpb25zWzFdLnR5cGUgaXMgImNoYXJhY3RlckRhdGEiCitQQVNTIG11dGF0aW9u
c1sxXS50YXJnZXQgaXMgc3ViRGl2LmZpcnN0Q2hpbGQKKworVGVzdGluZyB0d28gb2JzZXJ2ZXJz
IGF0IGRpZmZlcmVudCBkZXB0aHMuCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBt
dXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzBdLnRhcmdl
dCBpcyBzdWJEaXYKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImZvbyIKK1BB
U1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCitQQVNTIG11dGF0aW9u
czIubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zMlswXS50eXBlIGlzICJhdHRyaWJ1dGVzIgor
UEFTUyBtdXRhdGlvbnMyWzBdLnRhcmdldCBpcyBzdWJEaXYKK1BBU1MgbXV0YXRpb25zMlswXS5h
dHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNTIG11dGF0aW9uczJbMF0uYXR0cmlidXRlTmFtZXNw
YWNlIGlzIG51bGwKKworVGVzdGluZyBvbmUgb2JzZXJ2ZXIgYXQgdHdvIGRpZmZlcmVudCBkZXB0
aHMuCitQQVNTIGNhbGxzIGlzIDEKK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAxCitQQVNTIG11
dGF0aW9uc1swXS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMF0udGFyZ2V0
IGlzIHN1YkRpdgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZSBpcyAiZm9vIgorUEFT
UyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlIGlzIG51bGwKKworUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1zdWJ0cmVlLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L211dGF0aW9uL29ic2VydmUtc3VidHJlZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjMWZiYzljMzU1
YzkwZTUyMTBiNjQ5NmM0MTIzZDc5N2I3NTlhMmQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtc3VidHJlZS5odG1sCkBAIC0wLDAgKzEsMTYwIEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+
Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0
eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzx0aXRsZT48L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD1kZXNjcmlw
dGlvbj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisKK3dpbmRvdy5q
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK3ZhciBtdXRhdGlvbnM7Cit2YXIgbXV0YXRpb25zMjsKK3Zh
ciBkaXY7Cit2YXIgc3ViRGl2OwordmFyIGNhbGxzOworCitmdW5jdGlvbiB0ZXN0QmFzaWMoKSB7
CisgICAgdmFyIG9ic2VydmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRl
YnVnKCdUZXN0aW5nIGJhc2ljIGFzcGVjdHMgb2Ygc3VidHJlZSBvYnNlcnZhdGlvbi4nKTsKKwor
ICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKTsKKyAgICAgICAgc3ViRGl2ID0gZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgc3ViRGl2LmlubmVySFRNTCA9ICdoZWxs
bywgd29ybGQnOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVy
KGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOwor
CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7YXR0cmlidXRlczogdHJ1ZSwgY2hhcmFj
dGVyRGF0YTogdHJ1ZSwgc3VidHJlZTogdHJ1ZX0pOworICAgICAgICBzdWJEaXYuc2V0QXR0cmli
dXRlKCdmb28nLCAnYmFyJyk7CisgICAgICAgIHN1YkRpdi5maXJzdENoaWxkLnRleHRDb250ZW50
ID0gJ2dvb2RieWUhJzsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgZGVidWcoJy4uLmF0dHJpYnV0ZSBhbmQg
Y2hhcmFjdGVyRGF0YSBjaGFuZ2VzIGluIHN1YnRyZWUnKTsKKworICAgICAgICBzaG91bGRCZSgn
bXV0YXRpb25zLmxlbmd0aCcsICcyJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0u
dHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50
YXJnZXQnLCAnc3ViRGl2Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmli
dXRlTmFtZScsICciZm9vIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJp
YnV0ZU5hbWVzcGFjZScsICdudWxsJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0u
dHlwZScsICciY2hhcmFjdGVyRGF0YSInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1sx
XS50YXJnZXQnLCAnc3ViRGl2LmZpcnN0Q2hpbGQnKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29u
bmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAg
fQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVzdE11bHRpcGxlT2JzZXJ2ZXJzKCkg
eworICAgIHZhciBvYnNlcnZlcjsKKyAgICB2YXIgb2JzZXJ2ZXIyOworCisgICAgZnVuY3Rpb24g
c3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIHR3byBvYnNlcnZlcnMgYXQgZGlmZmVy
ZW50IGRlcHRocy4nKTsKKworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOworICAgICAgICBtdXRh
dGlvbnMyID0gbnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2
Jyk7CisgICAgICAgIHN1YkRpdiA9IGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKSk7CisgICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2
ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRpb25zID0gbTsKKyAgICAgICAgfSk7
CisgICAgICAgIG9ic2VydmVyMiA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9u
KG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9uczIgPSBtOworICAgICAgICB9KTsKKworICAgICAg
ICBvYnNlcnZlci5vYnNlcnZlKGRpdiwge2F0dHJpYnV0ZXM6IHRydWUsIHN1YnRyZWU6IHRydWV9
KTsKKyAgICAgICAgb2JzZXJ2ZXIyLm9ic2VydmUoc3ViRGl2LCB7YXR0cmlidXRlczogdHJ1ZX0p
OworICAgICAgICBzdWJEaXYuc2V0QXR0cmlidXRlKCdmb28nLCAnYmFyJyk7CisgICAgICAgIHNl
dFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxk
QmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRC
ZSgnbXV0YXRpb25zWzBdLnRhcmdldCcsICdzdWJEaXYnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211
dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lJywgJyJmb28iJyk7CisgICAgICAgIHNob3VsZEJlKCdt
dXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlJywgJ251bGwnKTsKKyAgICAgICAgc2hvdWxk
QmUoJ211dGF0aW9uczIubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
czJbMF0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
czJbMF0udGFyZ2V0JywgJ3N1YkRpdicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zMlsw
XS5hdHRyaWJ1dGVOYW1lJywgJyJmb28iJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMy
WzBdLmF0dHJpYnV0ZU5hbWVzcGFjZScsICdudWxsJyk7CisgICAgICAgIG9ic2VydmVyLmRpc2Nv
bm5lY3QoKTsKKyAgICAgICAgb2JzZXJ2ZXIyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWco
JycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisK
K2Z1bmN0aW9uIHRlc3RNdWx0aXBsZU9ic2VydmF0aW9ucygpIHsKKyAgICB2YXIgb2JzZXJ2ZXI7
CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3Rpbmcgb25lIG9i
c2VydmVyIGF0IHR3byBkaWZmZXJlbnQgZGVwdGhzLicpOworCisgICAgICAgIG11dGF0aW9ucyA9
IG51bGw7CisgICAgICAgIGNhbGxzID0gMDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2Jyk7CisgICAgICAgIHN1YkRpdiA9IGRpdi5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisgICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obSkgeworICAgICAgICAgICAgbXV0YXRpb25zID0gbTsK
KyAgICAgICAgICAgICsrY2FsbHM7CisgICAgICAgIH0pOworCisgICAgICAgIG9ic2VydmVyLm9i
c2VydmUoZGl2LCB7YXR0cmlidXRlczogdHJ1ZSwgc3VidHJlZTogdHJ1ZX0pOworICAgICAgICBv
YnNlcnZlci5vYnNlcnZlKHN1YkRpdiwge2F0dHJpYnV0ZXM6IHRydWUsIHN1YnRyZWU6IHRydWV9
KTsKKyAgICAgICAgc3ViRGl2LnNldEF0dHJpYnV0ZSgnZm9vJywgJ2JhcicpOworICAgICAgICBz
ZXRUaW1lb3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNoKCkgewor
ICAgICAgICBzaG91bGRCZSgnY2FsbHMnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udHlwZScs
ICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50YXJnZXQn
LCAnc3ViRGl2Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFt
ZScsICciZm9vIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5h
bWVzcGFjZScsICdudWxsJyk7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAg
ICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0
KCk7Cit9Cit2YXIgdGVzdHMgPSBbdGVzdEJhc2ljLCB0ZXN0TXVsdGlwbGVPYnNlcnZlcnMsIHRl
c3RNdWx0aXBsZU9ic2VydmF0aW9uc107Cit2YXIgdGVzdEluZGV4ID0gMDsKKworZnVuY3Rpb24g
cnVuTmV4dFRlc3QoKSB7CisgICAgaWYgKHRlc3RJbmRleCA8IHRlc3RzLmxlbmd0aCkKKyAgICAg
ICAgdGVzdHNbdGVzdEluZGV4KytdKCk7CisgICAgZWxzZQorICAgICAgICBmaW5pc2hKU1Rlc3Qo
KTsKK30KKworZGVzY3JpcHRpb24oJ1Rlc3QgV2ViS2l0TXV0YXRpb25PYnNlcnZlci5vYnNlcnZl
IG9uIGEgc3VidHJlZScpOworCitpZiAoIXdpbmRvdy5XZWJLaXRNdXRhdGlvbk9ic2VydmVyKQor
ICAgIHRlc3RGYWlsZWQoJ1RoaXMgdGVzdCByZXF1aXJlcyBFTkFCTEUoTVVUQVRJT05fT0JTRVJW
RVJTKScpOworZWxzZQorICAgIHJ1bk5leHRUZXN0KCk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJz
ZWQgPSB0cnVlOworCis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111856</attachid>
            <date>2011-10-20 15:32:42 -0700</date>
            <delta_ts>2011-10-21 13:24:33 -0700</delta_ts>
            <desc>Extracted helper function</desc>
            <filename>bug-70436-20111020153241.patch</filename>
            <type>text/plain</type>
            <size>11605</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgwMjMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmNjZkZWY5ZTk3MzUwZWQ1
ZDVlMzU1MWNjN2RjMDgzN2M1MWI1YmZjLi4yZmU1MjAwMTUwODM3NDI5MzFjYTU5MjNiYjg3M2Zh
ZWEzNDU5MGVjIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTEtMTAtMjAgIEFkYW0g
S2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW011dGF0aW9uT2JzZXJ2ZXJz
XSBJbXBsZW1lbnQgYmFzaWMgc3VidHJlZSBvYnNlcnZhdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA0MzYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb3RlIHRoYXQgdGhpcyBwYXRjaCBvbmx5IGlt
cGxlbWVudHMgImJhc2ljIiBzdWJ0cmVlCisgICAgICAgIHNlbWFudGljcywgbm90IHRoZSBmdWxs
eSByb2J1c3Qgc2VtYW50aWNzIGRlc2NyaWJlZCBpbgorICAgICAgICBodHRwOi8vbGlzdHMudzMu
b3JnL0FyY2hpdmVzL1B1YmxpYy9wdWJsaWMtd2ViYXBwcy8yMDExSnVsU2VwLzE2MjIuaHRtbC4K
KyAgICAgICAgTW9zdCBpbXBvcnRhbnRseSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaGFuZGxlIHRo
ZSBjYXNlIHdoZXJlIG11dGF0aW9ucworICAgICAgICBvY2N1ciBpbiBhIHRlbXBvcmFyaWx5IGRl
dGFjaGVkIHN1YnRyZWUuCisKKyAgICAgICAgVGhlIHBsYW4gaXMgdG8gaW1wbGVtZW50IHRob3Nl
IHNlbWFudGljcyBpbiBhIGZvbGxvd3VwIHRvIGF2b2lkCisgICAgICAgIGJsb2NraW5nIG90aGVy
IHBhcnRzIG9mIHRoZSBNdXRhdGlvbk9ic2VydmVyIHNwZWMgdGhhdCByZWx5IG9uCisgICAgICAg
IHRoZSBleGlzdGVuY2Ugb2Ygc3VidHJlZSBvYnNlcnZhdGlvbiBidXQgbm90IGl0cyBzcGVjaWZp
YworICAgICAgICBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICBUZXN0OiBmYXN0L211dGF0aW9u
L29ic2VydmUtc3VidHJlZS5odG1sCisKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjphZGRNYXRjaGluZ09ic2VydmVycyk6IFN0YXRpYyBoZWxwZXIgbWV0aG9kIGZv
ciB0aGUgYmVsb3cuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZWdpc3RlcmVkTXV0YXRpb25P
YnNlcnZlcnNPZlR5cGUpOiBXYWxrIHVwIHRoZSB0cmVlIGxvb2tpbmcgZm9yIG9ic2VydmVycy4K
KyAgICAgICAgKiBkb20vTm9kZVJhcmVEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlv
bk9ic2VydmVyRW50cnk6Omhhc0FsbE9wdGlvbnMpOiBBIHN0cmljdGVyLCByZW5hbWVkIGZyb20g
bWF0Y2hlcygpLgorCiAyMDExLTEwLTIwICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+
CiAKICAgICAgICAgRmxpcHBlZC1ibG9ja3Mgd3JpdGluZyBtb2RlIGJsb2NrcyBkbyBub3QgaGl0
IHRlc3QgdGhlaXIgb3ZlcmZsb3cKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCAyM2ZmN2ZlMjFhODNmMjMx
ZWI2OGRjN2NjMmY0YTQxNjlkZDZjYzQ1Li5jMWFiMmVkOTdjNDYyYTNhOWIxYjQ4ZWY4MDgyODJj
MWZhOGRlZjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0yNjk0LDE2ICsyNjk0LDI4IEBAIFZlY3Rv
cjxNdXRhdGlvbk9ic2VydmVyRW50cnk+KiBOb2RlOjptdXRhdGlvbk9ic2VydmVyRW50cmllcygp
CiAgICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyByYXJlRGF0YSgpLT5tdXRhdGlvbk9ic2VydmVy
RW50cmllcygpIDogMDsKIH0KIAorc3RhdGljIHZvaWQgYWRkTWF0Y2hpbmdPYnNlcnZlcnMoSGFz
aFNldDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKj4mIG9ic2VydmVyU2V0LCBWZWN0b3I8TXV0YXRp
b25PYnNlcnZlckVudHJ5Piogb2JzZXJ2ZXJFbnRyaWVzLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9u
cyBvcHRpb25zKQoreworICAgIGlmIChvYnNlcnZlckVudHJpZXMpIHsKKyAgICAgICAgY29uc3Qg
c2l6ZV90IHNpemUgPSBvYnNlcnZlckVudHJpZXMtPnNpemUoKTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIE11dGF0aW9uT2JzZXJ2ZXJF
bnRyeSYgZW50cnkgPSBvYnNlcnZlckVudHJpZXMtPmF0KGkpOworICAgICAgICAgICAgaWYgKGVu
dHJ5Lmhhc0FsbE9wdGlvbnMob3B0aW9ucykpCisgICAgICAgICAgICAgICAgb2JzZXJ2ZXJTZXQu
YWRkKGVudHJ5Lm9ic2VydmVyLmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwogdm9pZCBO
b2RlOjpyZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUoVmVjdG9yPFdlYktpdE11dGF0
aW9uT2JzZXJ2ZXIqPiYgb2JzZXJ2ZXJzLCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpNdXRhdGlv
blR5cGUgdHlwZSkKIHsKLSAgICBWZWN0b3I8TXV0YXRpb25PYnNlcnZlckVudHJ5Piogb2JzZXJ2
ZXJFbnRyaWVzID0gbXV0YXRpb25PYnNlcnZlckVudHJpZXMoKTsKLSAgICBpZiAoIW9ic2VydmVy
RW50cmllcyB8fCBvYnNlcnZlckVudHJpZXMtPmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwor
ICAgIEhhc2hTZXQ8V2ViS2l0TXV0YXRpb25PYnNlcnZlcio+IG9ic2VydmVyU2V0OworICAgIGFk
ZE1hdGNoaW5nT2JzZXJ2ZXJzKG9ic2VydmVyU2V0LCBtdXRhdGlvbk9ic2VydmVyRW50cmllcygp
LCB0eXBlKTsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBwYXJlbnROb2RlKCk7IG5vZGU7IG5vZGUg
PSBub2RlLT5wYXJlbnROb2RlKCkpCisgICAgICAgIGFkZE1hdGNoaW5nT2JzZXJ2ZXJzKG9ic2Vy
dmVyU2V0LCBub2RlLT5tdXRhdGlvbk9ic2VydmVyRW50cmllcygpLCB0eXBlIHwgV2ViS2l0TXV0
YXRpb25PYnNlcnZlcjo6U3VidHJlZSk7CiAKLSAgICBmb3IgKFZlY3RvcjxNdXRhdGlvbk9ic2Vy
dmVyRW50cnk+OjppdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJFbnRyaWVzLT5iZWdpbigpOyBpdGVy
ICE9IG9ic2VydmVyRW50cmllcy0+ZW5kKCk7ICsraXRlcikgewotICAgICAgICBpZiAoaXRlci0+
bWF0Y2hlcyh0eXBlKSkKLSAgICAgICAgICAgIG9ic2VydmVycy5hcHBlbmQoaXRlci0+b2JzZXJ2
ZXIuZ2V0KCkpOwotICAgIH0KKyAgICAvLyBGSVhNRTogdGhpcyBtZXRob2Qgc2hvdWxkIG91dHB1
dCBhIEhhc2hTZXQgaW5zdGVhZCBvZiBhIFZlY3Rvci4KKyAgICBpZiAoIW9ic2VydmVyU2V0Lmlz
RW1wdHkoKSkKKyAgICAgICAgY29weVRvVmVjdG9yKG9ic2VydmVyU2V0LCBvYnNlcnZlcnMpOwog
fQogCiBOb2RlOjpNdXRhdGlvblJlZ2lzdHJhdGlvblJlc3VsdCBOb2RlOjpyZWdpc3Rlck11dGF0
aW9uT2JzZXJ2ZXIoUGFzc1JlZlB0cjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyPiBvYnNlcnZlciwg
TXV0YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlUmFyZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEu
aAppbmRleCBlMjU4YWZhNGUyNmMwZGEyMDZkZTY0ODkxNmRmMjhhOWQ5ZmFlZGU2Li41MDJiNjU4
ZmMwNGJlYTY4NzkxNzE3NTUwNWU4YzhhMTcwMjc0OThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZVJhcmVEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJl
RGF0YS5oCkBAIC0xMDEsMTUgKzEwMSwxNCBAQCBzdHJ1Y3QgTXV0YXRpb25PYnNlcnZlckVudHJ5
IHsKICAgICAgICAgcmV0dXJuIG9ic2VydmVyID09IG90aGVyLm9ic2VydmVyOwogICAgIH0KIAot
ICAgIGJvb2wgbWF0Y2hlcyhNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zKSBjb25zdAor
ICAgIGJvb2wgaGFzQWxsT3B0aW9ucyhNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMtPm9wdGlvbnMgJiBvcHRpb25zOworICAg
ICAgICByZXR1cm4gKHRoaXMtPm9wdGlvbnMgJiBvcHRpb25zKSA9PSBvcHRpb25zOwogICAgIH0K
IAogICAgIFJlZlB0cjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyPiBvYnNlcnZlcjsKICAgICBNdXRh
dGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zOwogfTsKLQogI2VuZGlmIC8vIEVOQUJMRShNVVRB
VElPTl9PQlNFUlZFUlMpCiAKIGNsYXNzIE5vZGVSYXJlRGF0YSB7CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMzBiODQxOWFl
ODBhODliZTQzZTdhNTIxOTMyOGQ5MTU0MWNjMWI0OC4uNDc0YWU2YmVmMjE5YTA1YzlkZDE3Y2Ew
OGQ1NzVhNWYyOTA5YmQ3NyAxMDA3NTUKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDExLTEwLTE5ICBBZGFt
IEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtNdXRhdGlvbk9ic2VydmVy
c10gSW1wbGVtZW50IGJhc2ljIHN1YnRyZWUgb2JzZXJ2YXRpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNDM2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L211dGF0aW9uL29ic2VydmUtc3Vi
dHJlZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvbXV0YXRpb24vb2JzZXJ2
ZS1zdWJ0cmVlLmh0bWw6IEFkZGVkLgorCiAyMDExLTEwLTIwICBEYW4gQmVybnN0ZWluICA8bWl0
ekBhcHBsZS5jb20+CiAKICAgICAgICAgRmxpcHBlZC1ibG9ja3Mgd3JpdGluZyBtb2RlIGJsb2Nr
cyBkbyBub3QgaGl0IHRlc3QgdGhlaXIgb3ZlcmZsb3cKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1zdWJ0cmVlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1zdWJ0cmVlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
NTI3ZWIxYWMzMGUwMjQxMjQ3ZGQxYTkxMjczMDczZWI0NmVhM2FmCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLXN1YnRyZWUtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMzkgQEAKK1Rlc3QgV2ViS2l0TXV0YXRpb25PYnNlcnZlci5vYnNlcnZlIG9u
IGEgc3VidHJlZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworVGVzdGluZyBiYXNp
YyBhc3BlY3RzIG9mIHN1YnRyZWUgb2JzZXJ2YXRpb24uCisuLi5hdHRyaWJ1dGUgYW5kIGNoYXJh
Y3RlckRhdGEgY2hhbmdlcyBpbiBzdWJ0cmVlCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMgor
UEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzBd
LnRhcmdldCBpcyBzdWJEaXYKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImZv
byIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCitQQVNTIG11
dGF0aW9uc1sxXS50eXBlIGlzICJjaGFyYWN0ZXJEYXRhIgorUEFTUyBtdXRhdGlvbnNbMV0udGFy
Z2V0IGlzIHN1YkRpdi5maXJzdENoaWxkCisKK1Rlc3RpbmcgdHdvIG9ic2VydmVycyBhdCBkaWZm
ZXJlbnQgZGVwdGhzLgorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25z
WzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1swXS50YXJnZXQgaXMgc3Vi
RGl2CitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNTIG11dGF0
aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMgbnVsbAorUEFTUyBtdXRhdGlvbnMyLmxlbmd0
aCBpcyAxCitQQVNTIG11dGF0aW9uczJbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0
YXRpb25zMlswXS50YXJnZXQgaXMgc3ViRGl2CitQQVNTIG11dGF0aW9uczJbMF0uYXR0cmlidXRl
TmFtZSBpcyAiZm9vIgorUEFTUyBtdXRhdGlvbnMyWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBu
dWxsCisKK1Rlc3Rpbmcgb25lIG9ic2VydmVyIGF0IHR3byBkaWZmZXJlbnQgZGVwdGhzLgorUEFT
UyBjYWxscyBpcyAxCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNb
MF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzBdLnRhcmdldCBpcyBzdWJE
aXYKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImZvbyIKK1BBU1MgbXV0YXRp
b25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L211dGF0aW9uL29ic2VydmUtc3VidHJlZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRh
dGlvbi9vYnNlcnZlLXN1YnRyZWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYzFmYmM5YzM1NWM5MGU1MjEw
YjY0OTZjNDEyM2Q3OTdiNzU5YTJkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9tdXRhdGlvbi9vYnNlcnZlLXN1YnRyZWUuaHRtbApAQCAtMCwwICsxLDE2MCBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0idXRmLTgiPgorPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3Mi
PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8dGl0bGU+PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ZGVzY3JpcHRpb24+PC9w
PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorCit3aW5kb3cuanNUZXN0SXNB
c3luYyA9IHRydWU7Cit2YXIgbXV0YXRpb25zOwordmFyIG11dGF0aW9uczI7Cit2YXIgZGl2Owor
dmFyIHN1YkRpdjsKK3ZhciBjYWxsczsKKworZnVuY3Rpb24gdGVzdEJhc2ljKCkgeworICAgIHZh
ciBvYnNlcnZlcjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVz
dGluZyBiYXNpYyBhc3BlY3RzIG9mIHN1YnRyZWUgb2JzZXJ2YXRpb24uJyk7CisKKyAgICAgICAg
bXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2Jyk7CisgICAgICAgIHN1YkRpdiA9IGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKSk7CisgICAgICAgIHN1YkRpdi5pbm5lckhUTUwgPSAnaGVsbG8sIHdvcmxk
JzsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlv
bihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAgICAg
ICBvYnNlcnZlci5vYnNlcnZlKGRpdiwge2F0dHJpYnV0ZXM6IHRydWUsIGNoYXJhY3RlckRhdGE6
IHRydWUsIHN1YnRyZWU6IHRydWV9KTsKKyAgICAgICAgc3ViRGl2LnNldEF0dHJpYnV0ZSgnZm9v
JywgJ2JhcicpOworICAgICAgICBzdWJEaXYuZmlyc3RDaGlsZC50ZXh0Q29udGVudCA9ICdnb29k
YnllISc7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBmaW5pc2goKSB7CisgICAgICAgIGRlYnVnKCcuLi5hdHRyaWJ1dGUgYW5kIGNoYXJhY3Rl
ckRhdGEgY2hhbmdlcyBpbiBzdWJ0cmVlJyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9u
cy5sZW5ndGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAn
ImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udGFyZ2V0Jywg
J3N1YkRpdicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUn
LCAnImZvbyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1l
c3BhY2UnLCAnbnVsbCcpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnR5cGUnLCAn
ImNoYXJhY3RlckRhdGEiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0udGFyZ2V0
JywgJ3N1YkRpdi5maXJzdENoaWxkJyk7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsK
KyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKworICAg
IHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RNdWx0aXBsZU9ic2VydmVycygpIHsKKyAgICB2
YXIgb2JzZXJ2ZXI7CisgICAgdmFyIG9ic2VydmVyMjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkg
eworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0d28gb2JzZXJ2ZXJzIGF0IGRpZmZlcmVudCBkZXB0
aHMuJyk7CisKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgbXV0YXRpb25zMiA9
IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAg
ICAgICBzdWJEaXYgPSBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2
JykpOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0
aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworICAgICAg
ICBvYnNlcnZlcjIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7Cisg
ICAgICAgICAgICBtdXRhdGlvbnMyID0gbTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgb2JzZXJ2
ZXIub2JzZXJ2ZShkaXYsIHthdHRyaWJ1dGVzOiB0cnVlLCBzdWJ0cmVlOiB0cnVlfSk7CisgICAg
ICAgIG9ic2VydmVyMi5vYnNlcnZlKHN1YkRpdiwge2F0dHJpYnV0ZXM6IHRydWV9KTsKKyAgICAg
ICAgc3ViRGl2LnNldEF0dHJpYnV0ZSgnZm9vJywgJ2JhcicpOworICAgICAgICBzZXRUaW1lb3V0
KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAgICBz
aG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRh
dGlvbnNbMF0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0
aW9uc1swXS50YXJnZXQnLCAnc3ViRGl2Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNb
MF0uYXR0cmlidXRlTmFtZScsICciZm9vIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25z
WzBdLmF0dHJpYnV0ZU5hbWVzcGFjZScsICdudWxsJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRh
dGlvbnMyLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMyWzBdLnR5
cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMyWzBdLnRh
cmdldCcsICdzdWJEaXYnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uczJbMF0uYXR0cmli
dXRlTmFtZScsICciZm9vIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zMlswXS5hdHRy
aWJ1dGVOYW1lc3BhY2UnLCAnbnVsbCcpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7
CisgICAgICAgIG9ic2VydmVyMi5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAg
ICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitmdW5jdGlv
biB0ZXN0TXVsdGlwbGVPYnNlcnZhdGlvbnMoKSB7CisgICAgdmFyIG9ic2VydmVyOworCisgICAg
ZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIG9uZSBvYnNlcnZlciBh
dCB0d28gZGlmZmVyZW50IGRlcHRocy4nKTsKKworICAgICAgICBtdXRhdGlvbnMgPSBudWxsOwor
ICAgICAgICBjYWxscyA9IDA7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2RpdicpOworICAgICAgICBzdWJEaXYgPSBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2JykpOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9i
c2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAg
ICAgICArK2NhbGxzOworICAgICAgICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRp
diwge2F0dHJpYnV0ZXM6IHRydWUsIHN1YnRyZWU6IHRydWV9KTsKKyAgICAgICAgb2JzZXJ2ZXIu
b2JzZXJ2ZShzdWJEaXYsIHthdHRyaWJ1dGVzOiB0cnVlLCBzdWJ0cmVlOiB0cnVlfSk7CisgICAg
ICAgIHN1YkRpdi5zZXRBdHRyaWJ1dGUoJ2ZvbycsICdiYXInKTsKKyAgICAgICAgc2V0VGltZW91
dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAg
c2hvdWxkQmUoJ2NhbGxzJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5n
dGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImF0dHJp
YnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udGFyZ2V0JywgJ3N1YkRp
dicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUnLCAnImZv
byInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3BhY2Un
LCAnbnVsbCcpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVn
KCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQor
dmFyIHRlc3RzID0gW3Rlc3RCYXNpYywgdGVzdE11bHRpcGxlT2JzZXJ2ZXJzLCB0ZXN0TXVsdGlw
bGVPYnNlcnZhdGlvbnNdOwordmFyIHRlc3RJbmRleCA9IDA7CisKK2Z1bmN0aW9uIHJ1bk5leHRU
ZXN0KCkgeworICAgIGlmICh0ZXN0SW5kZXggPCB0ZXN0cy5sZW5ndGgpCisgICAgICAgIHRlc3Rz
W3Rlc3RJbmRleCsrXSgpOworICAgIGVsc2UKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cit9CisK
K2Rlc2NyaXB0aW9uKCdUZXN0IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSBvbiBhIHN1
YnRyZWUnKTsKKworaWYgKCF3aW5kb3cuV2ViS2l0TXV0YXRpb25PYnNlcnZlcikKKyAgICB0ZXN0
RmFpbGVkKCdUaGlzIHRlc3QgcmVxdWlyZXMgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUyknKTsK
K2Vsc2UKKyAgICBydW5OZXh0VGVzdCgpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsKKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112009</attachid>
            <date>2011-10-21 13:24:37 -0700</date>
            <delta_ts>2011-10-21 15:36:44 -0700</delta_ts>
            <desc>Merged to r98133</desc>
            <filename>bug-70436-20111021132435.patch</filename>
            <type>text/plain</type>
            <size>11551</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgxMzMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwOGZmNjFjZDljNjY0MWM4
MGQzMjVlMjA1NmM3ZjA4YTEyMDYxNjQ3Li43NmRkMmJhZGUwMDQzOGFmOGIwNmQxN2JkMDc1ZTQ5
NDVmZmQ5YzQyIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTEtMTAtMjAgIEFkYW0g
S2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW011dGF0aW9uT2JzZXJ2ZXJz
XSBJbXBsZW1lbnQgYmFzaWMgc3VidHJlZSBvYnNlcnZhdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA0MzYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb3RlIHRoYXQgdGhpcyBwYXRjaCBvbmx5IGlt
cGxlbWVudHMgImJhc2ljIiBzdWJ0cmVlCisgICAgICAgIHNlbWFudGljcywgbm90IHRoZSBmdWxs
eSByb2J1c3Qgc2VtYW50aWNzIGRlc2NyaWJlZCBpbgorICAgICAgICBodHRwOi8vbGlzdHMudzMu
b3JnL0FyY2hpdmVzL1B1YmxpYy9wdWJsaWMtd2ViYXBwcy8yMDExSnVsU2VwLzE2MjIuaHRtbC4K
KyAgICAgICAgTW9zdCBpbXBvcnRhbnRseSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaGFuZGxlIHRo
ZSBjYXNlIHdoZXJlIG11dGF0aW9ucworICAgICAgICBvY2N1ciBpbiBhIHRlbXBvcmFyaWx5IGRl
dGFjaGVkIHN1YnRyZWUuCisKKyAgICAgICAgVGhlIHBsYW4gaXMgdG8gaW1wbGVtZW50IHRob3Nl
IHNlbWFudGljcyBpbiBhIGZvbGxvd3VwIHRvIGF2b2lkCisgICAgICAgIGJsb2NraW5nIG90aGVy
IHBhcnRzIG9mIHRoZSBNdXRhdGlvbk9ic2VydmVyIHNwZWMgdGhhdCByZWx5IG9uCisgICAgICAg
IHRoZSBleGlzdGVuY2Ugb2Ygc3VidHJlZSBvYnNlcnZhdGlvbiBidXQgbm90IGl0cyBzcGVjaWZp
YworICAgICAgICBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICBUZXN0OiBmYXN0L211dGF0aW9u
L29ic2VydmUtc3VidHJlZS5odG1sCisKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjphZGRNYXRjaGluZ09ic2VydmVycyk6IFN0YXRpYyBoZWxwZXIgbWV0aG9kIGZv
ciB0aGUgYmVsb3cuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZWdpc3RlcmVkTXV0YXRpb25P
YnNlcnZlcnNPZlR5cGUpOiBXYWxrIHVwIHRoZSB0cmVlIGxvb2tpbmcgZm9yIG9ic2VydmVycy4K
KyAgICAgICAgKiBkb20vTm9kZVJhcmVEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlv
bk9ic2VydmVyRW50cnk6Omhhc0FsbE9wdGlvbnMpOiBBIHN0cmljdGVyLCByZW5hbWVkIGZyb20g
bWF0Y2hlcygpLgorCiAyMDExLTEwLTIxICBWc2V2b2xvZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFkdmFuY2VkIHNlYXJjaCByZXN1bHRz
IHNob3VsZCBiZSBjbGVhcmVkIG9uIG5hdmlnYXRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggOTE1
YTVkYzFkYzA5YzY0NTMzZDk1YWEyNTkzMTBmMjc5YWJhMjhjMy4uMTBkYjBlZmM0ZjljY2Q3YTY0
MGIzZGE0MjE3ZTlkNWVkZGEzOTM3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMjY5OCwxNiArMjY5
OCwyOCBAQCBWZWN0b3I8TXV0YXRpb25PYnNlcnZlckVudHJ5PiogTm9kZTo6bXV0YXRpb25PYnNl
cnZlckVudHJpZXMoKQogICAgIHJldHVybiBoYXNSYXJlRGF0YSgpID8gcmFyZURhdGEoKS0+bXV0
YXRpb25PYnNlcnZlckVudHJpZXMoKSA6IDA7CiB9CiAKK3N0YXRpYyB2b2lkIGFkZE1hdGNoaW5n
T2JzZXJ2ZXJzKEhhc2hTZXQ8V2ViS2l0TXV0YXRpb25PYnNlcnZlcio+JiBvYnNlcnZlclNldCwg
VmVjdG9yPE11dGF0aW9uT2JzZXJ2ZXJFbnRyeT4qIG9ic2VydmVyRW50cmllcywgTXV0YXRpb25P
YnNlcnZlck9wdGlvbnMgb3B0aW9ucykKK3sKKyAgICBpZiAob2JzZXJ2ZXJFbnRyaWVzKSB7Cisg
ICAgICAgIGNvbnN0IHNpemVfdCBzaXplID0gb2JzZXJ2ZXJFbnRyaWVzLT5zaXplKCk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBNdXRh
dGlvbk9ic2VydmVyRW50cnkmIGVudHJ5ID0gb2JzZXJ2ZXJFbnRyaWVzLT5hdChpKTsKKyAgICAg
ICAgICAgIGlmIChlbnRyeS5oYXNBbGxPcHRpb25zKG9wdGlvbnMpKQorICAgICAgICAgICAgICAg
IG9ic2VydmVyU2V0LmFkZChlbnRyeS5vYnNlcnZlci5nZXQoKSk7CisgICAgICAgIH0KKyAgICB9
Cit9CisKIHZvaWQgTm9kZTo6cmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKFZlY3Rv
cjxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKj4mIG9ic2VydmVycywgV2ViS2l0TXV0YXRpb25PYnNl
cnZlcjo6TXV0YXRpb25UeXBlIHR5cGUpCiB7Ci0gICAgVmVjdG9yPE11dGF0aW9uT2JzZXJ2ZXJF
bnRyeT4qIG9ic2VydmVyRW50cmllcyA9IG11dGF0aW9uT2JzZXJ2ZXJFbnRyaWVzKCk7Ci0gICAg
aWYgKCFvYnNlcnZlckVudHJpZXMgfHwgb2JzZXJ2ZXJFbnRyaWVzLT5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKKyAgICBIYXNoU2V0PFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqPiBvYnNlcnZl
clNldDsKKyAgICBhZGRNYXRjaGluZ09ic2VydmVycyhvYnNlcnZlclNldCwgbXV0YXRpb25PYnNl
cnZlckVudHJpZXMoKSwgdHlwZSk7CisgICAgZm9yIChOb2RlKiBub2RlID0gcGFyZW50Tm9kZSgp
OyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKQorICAgICAgICBhZGRNYXRjaGluZ09i
c2VydmVycyhvYnNlcnZlclNldCwgbm9kZS0+bXV0YXRpb25PYnNlcnZlckVudHJpZXMoKSwgdHlw
ZSB8IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OlN1YnRyZWUpOwogCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBvYnNlcnZlckVudHJpZXMtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICgo
Km9ic2VydmVyRW50cmllcylbaV0ubWF0Y2hlcyh0eXBlKSkKLSAgICAgICAgICAgIG9ic2VydmVy
cy5hcHBlbmQoKCpvYnNlcnZlckVudHJpZXMpW2ldLm9ic2VydmVyLmdldCgpKTsKLSAgICB9Cisg
ICAgLy8gRklYTUU6IHRoaXMgbWV0aG9kIHNob3VsZCBvdXRwdXQgYSBIYXNoU2V0IGluc3RlYWQg
b2YgYSBWZWN0b3IuCisgICAgaWYgKCFvYnNlcnZlclNldC5pc0VtcHR5KCkpCisgICAgICAgIGNv
cHlUb1ZlY3RvcihvYnNlcnZlclNldCwgb2JzZXJ2ZXJzKTsKIH0KIAogTm9kZTo6TXV0YXRpb25S
ZWdpc3RyYXRpb25SZXN1bHQgTm9kZTo6cmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKFBhc3NSZWZQ
dHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gb2JzZXJ2ZXIsIE11dGF0aW9uT2JzZXJ2ZXJPcHRp
b25zIG9wdGlvbnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRh
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKaW5kZXggZTI1OGFmYTRlMjZj
MGRhMjA2ZGU2NDg5MTZkZjI4YTlkOWZhZWRlNi4uNTAyYjY1OGZjMDRiZWE2ODc5MTcxNzU1MDVl
OGM4YTE3MDI3NDk4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0
YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaApAQCAtMTAxLDE1ICsx
MDEsMTQgQEAgc3RydWN0IE11dGF0aW9uT2JzZXJ2ZXJFbnRyeSB7CiAgICAgICAgIHJldHVybiBv
YnNlcnZlciA9PSBvdGhlci5vYnNlcnZlcjsKICAgICB9CiAKLSAgICBib29sIG1hdGNoZXMoTXV0
YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0aW9ucykgY29uc3QKKyAgICBib29sIGhhc0FsbE9wdGlv
bnMoTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0aW9ucykgY29uc3QKICAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLT5vcHRpb25zICYgb3B0aW9uczsKKyAgICAgICAgcmV0dXJuICh0aGlzLT5v
cHRpb25zICYgb3B0aW9ucykgPT0gb3B0aW9uczsKICAgICB9CiAKICAgICBSZWZQdHI8V2ViS2l0
TXV0YXRpb25PYnNlcnZlcj4gb2JzZXJ2ZXI7CiAgICAgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMg
b3B0aW9uczsKIH07Ci0KICNlbmRpZiAvLyBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQogCiBj
bGFzcyBOb2RlUmFyZURhdGEgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDI5ZGM5MjA3ZGRkNzcwZDA2YTBlYTkxMWZiMzQ0
NGEyZWJkYTA5ZDIuLmQ0YjdhZDdmMjRiNzFiMmIxYjJkODY5OGRlYzI5NDU2YmMyMzZmOWIgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0xMC0xOSAgQWRhbSBLbGVpbiAgPGFkYW1rQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25PYnNlcnZlcnNdIEltcGxlbWVudCBiYXNpYyBz
dWJ0cmVlIG9ic2VydmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03MDQzNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLXN1YnRyZWUtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L211dGF0aW9uL29ic2VydmUtc3VidHJlZS5odG1sOiBBZGRl
ZC4KKwogMjAxMS0xMC0yMSAgSnVsaWVuIENoYWZmcmFpeCAgPGpjaGFmZnJhaXhAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBVbnJldmlld2VkIGdhcmRlbmluZy4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1zdWJ0cmVlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1zdWJ0cmVlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41NTI3ZWIxYWMzMGUwMjQxMjQ3ZGQxYTkxMjczMDczZWI0NmVhM2FmCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLXN1YnRyZWUtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMzkgQEAKK1Rlc3QgV2ViS2l0TXV0YXRpb25PYnNlcnZlci5vYnNlcnZl
IG9uIGEgc3VidHJlZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworVGVzdGluZyBi
YXNpYyBhc3BlY3RzIG9mIHN1YnRyZWUgb2JzZXJ2YXRpb24uCisuLi5hdHRyaWJ1dGUgYW5kIGNo
YXJhY3RlckRhdGEgY2hhbmdlcyBpbiBzdWJ0cmVlCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMg
MgorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25z
WzBdLnRhcmdldCBpcyBzdWJEaXYKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMg
ImZvbyIKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCitQQVNT
IG11dGF0aW9uc1sxXS50eXBlIGlzICJjaGFyYWN0ZXJEYXRhIgorUEFTUyBtdXRhdGlvbnNbMV0u
dGFyZ2V0IGlzIHN1YkRpdi5maXJzdENoaWxkCisKK1Rlc3RpbmcgdHdvIG9ic2VydmVycyBhdCBk
aWZmZXJlbnQgZGVwdGhzLgorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRp
b25zWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1swXS50YXJnZXQgaXMg
c3ViRGl2CitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNTIG11
dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMgbnVsbAorUEFTUyBtdXRhdGlvbnMyLmxl
bmd0aCBpcyAxCitQQVNTIG11dGF0aW9uczJbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1Mg
bXV0YXRpb25zMlswXS50YXJnZXQgaXMgc3ViRGl2CitQQVNTIG11dGF0aW9uczJbMF0uYXR0cmli
dXRlTmFtZSBpcyAiZm9vIgorUEFTUyBtdXRhdGlvbnMyWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZSBp
cyBudWxsCisKK1Rlc3Rpbmcgb25lIG9ic2VydmVyIGF0IHR3byBkaWZmZXJlbnQgZGVwdGhzLgor
UEFTUyBjYWxscyBpcyAxCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlv
bnNbMF0udHlwZSBpcyAiYXR0cmlidXRlcyIKK1BBU1MgbXV0YXRpb25zWzBdLnRhcmdldCBpcyBz
dWJEaXYKK1BBU1MgbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUgaXMgImZvbyIKK1BBU1MgbXV0
YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZSBpcyBudWxsCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L211dGF0aW9uL29ic2VydmUtc3VidHJlZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9t
dXRhdGlvbi9vYnNlcnZlLXN1YnRyZWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYzFmYmM5YzM1NWM5MGU1
MjEwYjY0OTZjNDEyM2Q3OTdiNzU5YTJkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9tdXRhdGlvbi9vYnNlcnZlLXN1YnRyZWUuaHRtbApAQCAtMCwwICsxLDE2MCBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0idXRmLTgiPgorPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8dGl0bGU+PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ZGVzY3JpcHRpb24+
PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorCit3aW5kb3cuanNUZXN0
SXNBc3luYyA9IHRydWU7Cit2YXIgbXV0YXRpb25zOwordmFyIG11dGF0aW9uczI7Cit2YXIgZGl2
OwordmFyIHN1YkRpdjsKK3ZhciBjYWxsczsKKworZnVuY3Rpb24gdGVzdEJhc2ljKCkgeworICAg
IHZhciBvYnNlcnZlcjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1Zygn
VGVzdGluZyBiYXNpYyBhc3BlY3RzIG9mIHN1YnRyZWUgb2JzZXJ2YXRpb24uJyk7CisKKyAgICAg
ICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2Jyk7CisgICAgICAgIHN1YkRpdiA9IGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKSk7CisgICAgICAgIHN1YkRpdi5pbm5lckhUTUwgPSAnaGVsbG8sIHdv
cmxkJzsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5j
dGlvbihtKSB7CisgICAgICAgICAgICBtdXRhdGlvbnMgPSBtOworICAgICAgICB9KTsKKworICAg
ICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwge2F0dHJpYnV0ZXM6IHRydWUsIGNoYXJhY3RlckRh
dGE6IHRydWUsIHN1YnRyZWU6IHRydWV9KTsKKyAgICAgICAgc3ViRGl2LnNldEF0dHJpYnV0ZSgn
Zm9vJywgJ2JhcicpOworICAgICAgICBzdWJEaXYuZmlyc3RDaGlsZC50ZXh0Q29udGVudCA9ICdn
b29kYnllISc7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIGRlYnVnKCcuLi5hdHRyaWJ1dGUgYW5kIGNoYXJh
Y3RlckRhdGEgY2hhbmdlcyBpbiBzdWJ0cmVlJyk7CisKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0
aW9ucy5sZW5ndGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUn
LCAnImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udGFyZ2V0
JywgJ3N1YkRpdicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5h
bWUnLCAnImZvbyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVO
YW1lc3BhY2UnLCAnbnVsbCcpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnR5cGUn
LCAnImNoYXJhY3RlckRhdGEiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMV0udGFy
Z2V0JywgJ3N1YkRpdi5maXJzdENoaWxkJyk7CisgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3Qo
KTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAgIH0KKwor
ICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RNdWx0aXBsZU9ic2VydmVycygpIHsKKyAg
ICB2YXIgb2JzZXJ2ZXI7CisgICAgdmFyIG9ic2VydmVyMjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0
KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0d28gb2JzZXJ2ZXJzIGF0IGRpZmZlcmVudCBk
ZXB0aHMuJyk7CisKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgbXV0YXRpb25z
MiA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwor
ICAgICAgICBzdWJEaXYgPSBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2JykpOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1
bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAgICAgIH0pOworICAg
ICAgICBvYnNlcnZlcjIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtKSB7
CisgICAgICAgICAgICBtdXRhdGlvbnMyID0gbTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgb2Jz
ZXJ2ZXIub2JzZXJ2ZShkaXYsIHthdHRyaWJ1dGVzOiB0cnVlLCBzdWJ0cmVlOiB0cnVlfSk7Cisg
ICAgICAgIG9ic2VydmVyMi5vYnNlcnZlKHN1YkRpdiwge2F0dHJpYnV0ZXM6IHRydWV9KTsKKyAg
ICAgICAgc3ViRGl2LnNldEF0dHJpYnV0ZSgnZm9vJywgJ2JhcicpOworICAgICAgICBzZXRUaW1l
b3V0KGZpbmlzaCwgMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluaXNoKCkgeworICAgICAg
ICBzaG91bGRCZSgnbXV0YXRpb25zLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdt
dXRhdGlvbnNbMF0udHlwZScsICciYXR0cmlidXRlcyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211
dGF0aW9uc1swXS50YXJnZXQnLCAnc3ViRGl2Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnNbMF0uYXR0cmlidXRlTmFtZScsICciZm9vIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zWzBdLmF0dHJpYnV0ZU5hbWVzcGFjZScsICdudWxsJyk7CisgICAgICAgIHNob3VsZEJlKCdt
dXRhdGlvbnMyLmxlbmd0aCcsICcxJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMyWzBd
LnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMyWzBd
LnRhcmdldCcsICdzdWJEaXYnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uczJbMF0uYXR0
cmlidXRlTmFtZScsICciZm9vIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zMlswXS5h
dHRyaWJ1dGVOYW1lc3BhY2UnLCAnbnVsbCcpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0
KCk7CisgICAgICAgIG9ic2VydmVyMi5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsK
KyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitmdW5j
dGlvbiB0ZXN0TXVsdGlwbGVPYnNlcnZhdGlvbnMoKSB7CisgICAgdmFyIG9ic2VydmVyOworCisg
ICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5nIG9uZSBvYnNlcnZl
ciBhdCB0d28gZGlmZmVyZW50IGRlcHRocy4nKTsKKworICAgICAgICBtdXRhdGlvbnMgPSBudWxs
OworICAgICAgICBjYWxscyA9IDA7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2RpdicpOworICAgICAgICBzdWJEaXYgPSBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnZGl2JykpOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlv
bk9ic2VydmVyKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIG11dGF0aW9ucyA9IG07CisgICAg
ICAgICAgICArK2NhbGxzOworICAgICAgICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNlcnZl
KGRpdiwge2F0dHJpYnV0ZXM6IHRydWUsIHN1YnRyZWU6IHRydWV9KTsKKyAgICAgICAgb2JzZXJ2
ZXIub2JzZXJ2ZShzdWJEaXYsIHthdHRyaWJ1dGVzOiB0cnVlLCBzdWJ0cmVlOiB0cnVlfSk7Cisg
ICAgICAgIHN1YkRpdi5zZXRBdHRyaWJ1dGUoJ2ZvbycsICdiYXInKTsKKyAgICAgICAgc2V0VGlt
ZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAg
ICAgc2hvdWxkQmUoJ2NhbGxzJywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5s
ZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImF0
dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0udGFyZ2V0JywgJ3N1
YkRpdicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUnLCAn
ImZvbyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3Bh
Y2UnLCAnbnVsbCcpOworICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRl
YnVnKCcnKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOwor
fQordmFyIHRlc3RzID0gW3Rlc3RCYXNpYywgdGVzdE11bHRpcGxlT2JzZXJ2ZXJzLCB0ZXN0TXVs
dGlwbGVPYnNlcnZhdGlvbnNdOwordmFyIHRlc3RJbmRleCA9IDA7CisKK2Z1bmN0aW9uIHJ1bk5l
eHRUZXN0KCkgeworICAgIGlmICh0ZXN0SW5kZXggPCB0ZXN0cy5sZW5ndGgpCisgICAgICAgIHRl
c3RzW3Rlc3RJbmRleCsrXSgpOworICAgIGVsc2UKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cit9
CisKK2Rlc2NyaXB0aW9uKCdUZXN0IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSBvbiBh
IHN1YnRyZWUnKTsKKworaWYgKCF3aW5kb3cuV2ViS2l0TXV0YXRpb25PYnNlcnZlcikKKyAgICB0
ZXN0RmFpbGVkKCdUaGlzIHRlc3QgcmVxdWlyZXMgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykn
KTsKK2Vsc2UKKyAgICBydW5OZXh0VGVzdCgpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112033</attachid>
            <date>2011-10-21 15:36:47 -0700</date>
            <delta_ts>2011-10-21 15:51:39 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-70436-20111021153646.patch</filename>
            <type>text/plain</type>
            <size>11869</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgxMzMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwOGZmNjFjZDljNjY0MWM4
MGQzMjVlMjA1NmM3ZjA4YTEyMDYxNjQ3Li43NzIyNDY0ZDhmNGQ5NDFkOWVjODA3MzBlNTk4YjVk
OGE3MmFhOGZmIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTEtMTAtMjAgIEFkYW0g
S2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW011dGF0aW9uT2JzZXJ2ZXJz
XSBJbXBsZW1lbnQgYmFzaWMgc3VidHJlZSBvYnNlcnZhdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA0MzYKKworICAgICAgICBSZXZpZXdlZCBi
eSBSeW9zdWtlIE5pd2EuCisKKyAgICAgICAgTm90ZSB0aGF0IHRoaXMgcGF0Y2ggb25seSBpbXBs
ZW1lbnRzICJiYXNpYyIgc3VidHJlZSBzZW1hbnRpY3MsCisgICAgICAgIG5vdCB0aGUgZnVsbHkg
cm9idXN0IHNlbWFudGljcyBkZXNjcmliZWQgaW4KKyAgICAgICAgaHR0cDovL2xpc3RzLnczLm9y
Zy9BcmNoaXZlcy9QdWJsaWMvcHVibGljLXdlYmFwcHMvMjAxMUp1bFNlcC8xNjIyLmh0bWwuCisg
ICAgICAgIE1vc3QgaW1wb3J0YW50bHksIHRoaXMgY2hhbmdlIGRvZXMgbm90IGhhbmRsZSB0aGUg
Y2FzZSB3aGVyZSBtdXRhdGlvbnMKKyAgICAgICAgb2NjdXIgaW4gYSB0ZW1wb3JhcmlseSBkZXRh
Y2hlZCBzdWJ0cmVlLgorCisgICAgICAgIFRoZSBwbGFuIGlzIHRvIGltcGxlbWVudCB0aG9zZSBz
ZW1hbnRpY3MgaW4gYSBmb2xsb3d1cCB0byBhdm9pZAorICAgICAgICBibG9ja2luZyBvdGhlciBw
YXJ0cyBvZiB0aGUgTXV0YXRpb25PYnNlcnZlciBzcGVjIHRoYXQgcmVseSBvbgorICAgICAgICB0
aGUgZXhpc3RlbmNlIG9mIHN1YnRyZWUgb2JzZXJ2YXRpb24gYnV0IG5vdCBpdHMgc3BlY2lmaWMK
KyAgICAgICAgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgVGVzdDogZmFzdC9tdXRhdGlvbi9v
YnNlcnZlLXN1YnRyZWUuaHRtbAorCisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6YWRkTWF0Y2hpbmdPYnNlcnZlcnMpOiBTdGF0aWMgaGVscGVyIG1ldGhvZCBmb3Ig
cmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKCkuCisgICAgICAgIChXZWJDb3JlOjpO
b2RlOjpyZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUpOiBXYWxrIHVwIHRoZSB0cmVl
IGxvb2tpbmcgZm9yIG9ic2VydmVycy4KKyAgICAgICAgKiBkb20vTm9kZVJhcmVEYXRhLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyRW50cnk6Omhhc0FsbE9wdGlvbnMpOiBB
IHN0cmljdGVyLCByZW5hbWVkIGZyb20gbWF0Y2hlcygpLgorCiAyMDExLTEwLTIxICBWc2V2b2xv
ZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6
IEFkdmFuY2VkIHNlYXJjaCByZXN1bHRzIHNob3VsZCBiZSBjbGVhcmVkIG9uIG5hdmlnYXRpb24u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5jcHAKaW5kZXggOTE1YTVkYzFkYzA5YzY0NTMzZDk1YWEyNTkzMTBmMjc5YWJh
MjhjMy4uYmIzODNkYTYzYWZjZTdjYzU3M2ZlYmYzMmE4OGY1NmVkOWE3MDI4ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcApAQCAtMjY5OCwxOCArMjY5OCwzMSBAQCBWZWN0b3I8TXV0YXRpb25PYnNlcnZlckVu
dHJ5PiogTm9kZTo6bXV0YXRpb25PYnNlcnZlckVudHJpZXMoKQogICAgIHJldHVybiBoYXNSYXJl
RGF0YSgpID8gcmFyZURhdGEoKS0+bXV0YXRpb25PYnNlcnZlckVudHJpZXMoKSA6IDA7CiB9CiAK
LXZvaWQgTm9kZTo6cmVnaXN0ZXJlZE11dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKFZlY3RvcjxXZWJL
aXRNdXRhdGlvbk9ic2VydmVyKj4mIG9ic2VydmVycywgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6
TXV0YXRpb25UeXBlIHR5cGUpCitzdGF0aWMgdm9pZCBhZGRNYXRjaGluZ09ic2VydmVycyhIYXNo
U2V0PFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqPiYgb2JzZXJ2ZXJTZXQsIFZlY3RvcjxNdXRhdGlv
bk9ic2VydmVyRW50cnk+KiBvYnNlcnZlckVudHJpZXMsIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25z
IG9wdGlvbnMpCiB7Ci0gICAgVmVjdG9yPE11dGF0aW9uT2JzZXJ2ZXJFbnRyeT4qIG9ic2VydmVy
RW50cmllcyA9IG11dGF0aW9uT2JzZXJ2ZXJFbnRyaWVzKCk7Ci0gICAgaWYgKCFvYnNlcnZlckVu
dHJpZXMgfHwgb2JzZXJ2ZXJFbnRyaWVzLT5pc0VtcHR5KCkpCisgICAgaWYgKCFvYnNlcnZlckVu
dHJpZXMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2Jz
ZXJ2ZXJFbnRyaWVzLT5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoKCpvYnNlcnZlckVudHJp
ZXMpW2ldLm1hdGNoZXModHlwZSkpCi0gICAgICAgICAgICBvYnNlcnZlcnMuYXBwZW5kKCgqb2Jz
ZXJ2ZXJFbnRyaWVzKVtpXS5vYnNlcnZlci5nZXQoKSk7CisgICAgY29uc3Qgc2l6ZV90IHNpemUg
PSBvYnNlcnZlckVudHJpZXMtPnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkgeworICAgICAgICBNdXRhdGlvbk9ic2VydmVyRW50cnkmIGVudHJ5ID0gb2JzZXJ2
ZXJFbnRyaWVzLT5hdChpKTsKKyAgICAgICAgaWYgKGVudHJ5Lmhhc0FsbE9wdGlvbnMob3B0aW9u
cykpCisgICAgICAgICAgICBvYnNlcnZlclNldC5hZGQoZW50cnkub2JzZXJ2ZXIuZ2V0KCkpOwog
ICAgIH0KIH0KIAordm9pZCBOb2RlOjpyZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUo
VmVjdG9yPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqPiYgb2JzZXJ2ZXJzLCBXZWJLaXRNdXRhdGlv
bk9ic2VydmVyOjpNdXRhdGlvblR5cGUgdHlwZSkKK3sKKyAgICBIYXNoU2V0PFdlYktpdE11dGF0
aW9uT2JzZXJ2ZXIqPiBvYnNlcnZlclNldDsKKyAgICBhZGRNYXRjaGluZ09ic2VydmVycyhvYnNl
cnZlclNldCwgbXV0YXRpb25PYnNlcnZlckVudHJpZXMoKSwgdHlwZSk7CisgICAgZm9yIChOb2Rl
KiBub2RlID0gcGFyZW50Tm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKQor
ICAgICAgICBhZGRNYXRjaGluZ09ic2VydmVycyhvYnNlcnZlclNldCwgbm9kZS0+bXV0YXRpb25P
YnNlcnZlckVudHJpZXMoKSwgdHlwZSB8IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OlN1YnRyZWUp
OworCisgICAgLy8gRklYTUU6IHRoaXMgbWV0aG9kIHNob3VsZCBvdXRwdXQgYSBIYXNoU2V0IGlu
c3RlYWQgb2YgYSBWZWN0b3IuCisgICAgaWYgKCFvYnNlcnZlclNldC5pc0VtcHR5KCkpCisgICAg
ICAgIGNvcHlUb1ZlY3RvcihvYnNlcnZlclNldCwgb2JzZXJ2ZXJzKTsKK30KKwogTm9kZTo6TXV0
YXRpb25SZWdpc3RyYXRpb25SZXN1bHQgTm9kZTo6cmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKFBh
c3NSZWZQdHI8V2ViS2l0TXV0YXRpb25PYnNlcnZlcj4gb2JzZXJ2ZXIsIE11dGF0aW9uT2JzZXJ2
ZXJPcHRpb25zIG9wdGlvbnMpCiB7CiAgICAgVmVjdG9yPE11dGF0aW9uT2JzZXJ2ZXJFbnRyeT4q
IG9ic2VydmVyRW50cmllcyA9IGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU11dGF0aW9uT2JzZXJ2
ZXJFbnRyaWVzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRh
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKaW5kZXggZTI1OGFmYTRlMjZj
MGRhMjA2ZGU2NDg5MTZkZjI4YTlkOWZhZWRlNi4uNTAyYjY1OGZjMDRiZWE2ODc5MTcxNzU1MDVl
OGM4YTE3MDI3NDk4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0
YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaApAQCAtMTAxLDE1ICsx
MDEsMTQgQEAgc3RydWN0IE11dGF0aW9uT2JzZXJ2ZXJFbnRyeSB7CiAgICAgICAgIHJldHVybiBv
YnNlcnZlciA9PSBvdGhlci5vYnNlcnZlcjsKICAgICB9CiAKLSAgICBib29sIG1hdGNoZXMoTXV0
YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0aW9ucykgY29uc3QKKyAgICBib29sIGhhc0FsbE9wdGlv
bnMoTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0aW9ucykgY29uc3QKICAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLT5vcHRpb25zICYgb3B0aW9uczsKKyAgICAgICAgcmV0dXJuICh0aGlzLT5v
cHRpb25zICYgb3B0aW9ucykgPT0gb3B0aW9uczsKICAgICB9CiAKICAgICBSZWZQdHI8V2ViS2l0
TXV0YXRpb25PYnNlcnZlcj4gb2JzZXJ2ZXI7CiAgICAgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMg
b3B0aW9uczsKIH07Ci0KICNlbmRpZiAvLyBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQogCiBj
bGFzcyBOb2RlUmFyZURhdGEgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDI5ZGM5MjA3ZGRkNzcwZDA2YTBlYTkxMWZiMzQ0
NGEyZWJkYTA5ZDIuLjFhNzFiMDFhZjhhODQwN2ZkMmY5MTA3MGM1ZWI0MTJkYjgxMDgyN2MgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0xMC0xOSAgQWRhbSBLbGVpbiAgPGFkYW1rQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25PYnNlcnZlcnNdIEltcGxlbWVudCBiYXNpYyBz
dWJ0cmVlIG9ic2VydmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03MDQzNgorCisgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KKwor
ICAgICAgICAqIGZhc3QvbXV0YXRpb24vb2JzZXJ2ZS1zdWJ0cmVlLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9tdXRhdGlvbi9vYnNlcnZlLXN1YnRyZWUuaHRtbDogQWRkZWQu
CisKIDIwMTEtMTAtMjEgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+
CiAKICAgICAgICAgVW5yZXZpZXdlZCBnYXJkZW5pbmcuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L211dGF0aW9uL29ic2VydmUtc3VidHJlZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9mYXN0L211dGF0aW9uL29ic2VydmUtc3VidHJlZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTUyN2ViMWFjMzBlMDI0MTI0N2RkMWE5MTI3MzA3M2ViNDZlYTNhZgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1zdWJ0cmVlLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDM5IEBACitUZXN0IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSBv
biBhIHN1YnRyZWUKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1Rlc3RpbmcgYmFz
aWMgYXNwZWN0cyBvZiBzdWJ0cmVlIG9ic2VydmF0aW9uLgorLi4uYXR0cmlidXRlIGFuZCBjaGFy
YWN0ZXJEYXRhIGNoYW5nZXMgaW4gc3VidHJlZQorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDIK
K1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1sw
XS50YXJnZXQgaXMgc3ViRGl2CitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJm
b28iCitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMgbnVsbAorUEFTUyBt
dXRhdGlvbnNbMV0udHlwZSBpcyAiY2hhcmFjdGVyRGF0YSIKK1BBU1MgbXV0YXRpb25zWzFdLnRh
cmdldCBpcyBzdWJEaXYuZmlyc3RDaGlsZAorCitUZXN0aW5nIHR3byBvYnNlcnZlcnMgYXQgZGlm
ZmVyZW50IGRlcHRocy4KK1BBU1MgbXV0YXRpb25zLmxlbmd0aCBpcyAxCitQQVNTIG11dGF0aW9u
c1swXS50eXBlIGlzICJhdHRyaWJ1dGVzIgorUEFTUyBtdXRhdGlvbnNbMF0udGFyZ2V0IGlzIHN1
YkRpdgorUEFTUyBtdXRhdGlvbnNbMF0uYXR0cmlidXRlTmFtZSBpcyAiZm9vIgorUEFTUyBtdXRh
dGlvbnNbMF0uYXR0cmlidXRlTmFtZXNwYWNlIGlzIG51bGwKK1BBU1MgbXV0YXRpb25zMi5sZW5n
dGggaXMgMQorUEFTUyBtdXRhdGlvbnMyWzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11
dGF0aW9uczJbMF0udGFyZ2V0IGlzIHN1YkRpdgorUEFTUyBtdXRhdGlvbnMyWzBdLmF0dHJpYnV0
ZU5hbWUgaXMgImZvbyIKK1BBU1MgbXV0YXRpb25zMlswXS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMg
bnVsbAorCitUZXN0aW5nIG9uZSBvYnNlcnZlciBhdCB0d28gZGlmZmVyZW50IGRlcHRocy4KK1BB
U1MgY2FsbHMgaXMgMQorUEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25z
WzBdLnR5cGUgaXMgImF0dHJpYnV0ZXMiCitQQVNTIG11dGF0aW9uc1swXS50YXJnZXQgaXMgc3Vi
RGl2CitQQVNTIG11dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lIGlzICJmb28iCitQQVNTIG11dGF0
aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3BhY2UgaXMgbnVsbAorCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9tdXRhdGlvbi9vYnNlcnZlLXN1YnRyZWUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbXV0
YXRpb24vb2JzZXJ2ZS1zdWJ0cmVlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWU2Mjk2N2E1MTIzYmM5YTE3
MjQ1MGQ3N2I4NTA2ZGM0ODIwNjc3NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvbXV0YXRpb24vb2JzZXJ2ZS1zdWJ0cmVlLmh0bWwKQEAgLTAsMCArMSwxNjAgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3Nz
Ij4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPHRpdGxlPjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPWRlc2NyaXB0aW9uPjwv
cD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KKword2luZG93LmpzVGVzdElz
QXN5bmMgPSB0cnVlOwordmFyIG11dGF0aW9uczsKK3ZhciBtdXRhdGlvbnMyOwordmFyIGRpdjsK
K3ZhciBzdWJEaXY7Cit2YXIgY2FsbHM7CisKK2Z1bmN0aW9uIHRlc3RCYXNpYygpIHsKKyAgICB2
YXIgb2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rl
c3RpbmcgYmFzaWMgYXNwZWN0cyBvZiBzdWJ0cmVlIG9ic2VydmF0aW9uLicpOworCisgICAgICAg
IG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2RpdicpOworICAgICAgICBzdWJEaXYgPSBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2JykpOworICAgICAgICBzdWJEaXYuaW5uZXJIVE1MID0gJ2hlbGxvLCB3b3Js
ZCc7CisgICAgICAgIG9ic2VydmVyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rp
b24obXV0YXRpb25zKSB7CisgICAgICAgICAgICB3aW5kb3cubXV0YXRpb25zID0gbXV0YXRpb25z
OworICAgICAgICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwge2F0dHJpYnV0
ZXM6IHRydWUsIGNoYXJhY3RlckRhdGE6IHRydWUsIHN1YnRyZWU6IHRydWV9KTsKKyAgICAgICAg
c3ViRGl2LnNldEF0dHJpYnV0ZSgnZm9vJywgJ2JhcicpOworICAgICAgICBzdWJEaXYuZmlyc3RD
aGlsZC50ZXh0Q29udGVudCA9ICdnb29kYnllISc7CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNo
LCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAgIGRlYnVnKCcu
Li5hdHRyaWJ1dGUgYW5kIGNoYXJhY3RlckRhdGEgY2hhbmdlcyBpbiBzdWJ0cmVlJyk7CisKKyAg
ICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMicpOworICAgICAgICBzaG91bGRC
ZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNob3VsZEJl
KCdtdXRhdGlvbnNbMF0udGFyZ2V0JywgJ3N1YkRpdicpOworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUnLCAnImZvbyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211
dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3BhY2UnLCAnbnVsbCcpOworICAgICAgICBzaG91bGRC
ZSgnbXV0YXRpb25zWzFdLnR5cGUnLCAnImNoYXJhY3RlckRhdGEiJyk7CisgICAgICAgIHNob3Vs
ZEJlKCdtdXRhdGlvbnNbMV0udGFyZ2V0JywgJ3N1YkRpdi5maXJzdENoaWxkJyk7CisgICAgICAg
IG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5O
ZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RNdWx0
aXBsZU9ic2VydmVycygpIHsKKyAgICB2YXIgb2JzZXJ2ZXI7CisgICAgdmFyIG9ic2VydmVyMjsK
KworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0d28gb2Jz
ZXJ2ZXJzIGF0IGRpZmZlcmVudCBkZXB0aHMuJyk7CisKKyAgICAgICAgbXV0YXRpb25zID0gbnVs
bDsKKyAgICAgICAgbXV0YXRpb25zMiA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBzdWJEaXYgPSBkaXYuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJL
aXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG11dGF0aW9ucykgeworICAgICAgICAgICAgd2lu
ZG93Lm11dGF0aW9ucyA9IG11dGF0aW9uczsKKyAgICAgICAgfSk7CisgICAgICAgIG9ic2VydmVy
MiA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG11dGF0aW9ucykgeworICAg
ICAgICAgICAgd2luZG93Lm11dGF0aW9uczIgPSBtdXRhdGlvbnM7CisgICAgICAgIH0pOworCisg
ICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7YXR0cmlidXRlczogdHJ1ZSwgc3VidHJlZTog
dHJ1ZX0pOworICAgICAgICBvYnNlcnZlcjIub2JzZXJ2ZShzdWJEaXYsIHthdHRyaWJ1dGVzOiB0
cnVlfSk7CisgICAgICAgIHN1YkRpdi5zZXRBdHRyaWJ1dGUoJ2ZvbycsICdiYXInKTsKKyAgICAg
ICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgp
IHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAgICAgICBz
aG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNo
b3VsZEJlKCdtdXRhdGlvbnNbMF0udGFyZ2V0JywgJ3N1YkRpdicpOworICAgICAgICBzaG91bGRC
ZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUnLCAnImZvbyInKTsKKyAgICAgICAgc2hvdWxk
QmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3BhY2UnLCAnbnVsbCcpOworICAgICAgICBz
aG91bGRCZSgnbXV0YXRpb25zMi5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zMlswXS50eXBlJywgJyJhdHRyaWJ1dGVzIicpOworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zMlswXS50YXJnZXQnLCAnc3ViRGl2Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnMyWzBdLmF0dHJpYnV0ZU5hbWUnLCAnImZvbyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0
aW9uczJbMF0uYXR0cmlidXRlTmFtZXNwYWNlJywgJ251bGwnKTsKKyAgICAgICAgb2JzZXJ2ZXIu
ZGlzY29ubmVjdCgpOworICAgICAgICBvYnNlcnZlcjIuZGlzY29ubmVjdCgpOworICAgICAgICBk
ZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsK
K30KKworZnVuY3Rpb24gdGVzdE11bHRpcGxlT2JzZXJ2YXRpb25zKCkgeworICAgIHZhciBvYnNl
cnZlcjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyBv
bmUgb2JzZXJ2ZXIgYXQgdHdvIGRpZmZlcmVudCBkZXB0aHMuJyk7CisKKyAgICAgICAgbXV0YXRp
b25zID0gbnVsbDsKKyAgICAgICAgY2FsbHMgPSAwOworICAgICAgICBkaXYgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgc3ViRGl2ID0gZGl2LmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2Vi
S2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtdXRhdGlvbnMpIHsKKyAgICAgICAgICAgIHdp
bmRvdy5tdXRhdGlvbnMgPSBtdXRhdGlvbnM7CisgICAgICAgICAgICArK2NhbGxzOworICAgICAg
ICB9KTsKKworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwge2F0dHJpYnV0ZXM6IHRydWUs
IHN1YnRyZWU6IHRydWV9KTsKKyAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShzdWJEaXYsIHthdHRy
aWJ1dGVzOiB0cnVlLCBzdWJ0cmVlOiB0cnVlfSk7CisgICAgICAgIHN1YkRpdi5zZXRBdHRyaWJ1
dGUoJ2ZvbycsICdiYXInKTsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ2NhbGxzJywgJzEn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAgICAgICBz
aG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7CisgICAgICAgIHNo
b3VsZEJlKCdtdXRhdGlvbnNbMF0udGFyZ2V0JywgJ3N1YkRpdicpOworICAgICAgICBzaG91bGRC
ZSgnbXV0YXRpb25zWzBdLmF0dHJpYnV0ZU5hbWUnLCAnImZvbyInKTsKKyAgICAgICAgc2hvdWxk
QmUoJ211dGF0aW9uc1swXS5hdHRyaWJ1dGVOYW1lc3BhY2UnLCAnbnVsbCcpOworICAgICAgICBv
YnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVuTmV4
dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQordmFyIHRlc3RzID0gW3Rlc3RCYXNp
YywgdGVzdE11bHRpcGxlT2JzZXJ2ZXJzLCB0ZXN0TXVsdGlwbGVPYnNlcnZhdGlvbnNdOwordmFy
IHRlc3RJbmRleCA9IDA7CisKK2Z1bmN0aW9uIHJ1bk5leHRUZXN0KCkgeworICAgIGlmICh0ZXN0
SW5kZXggPCB0ZXN0cy5sZW5ndGgpCisgICAgICAgIHRlc3RzW3Rlc3RJbmRleCsrXSgpOworICAg
IGVsc2UKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Rlc2NyaXB0aW9uKCdUZXN0IFdl
YktpdE11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSBvbiBhIHN1YnRyZWUnKTsKKworaWYgKCF3aW5k
b3cuV2ViS2l0TXV0YXRpb25PYnNlcnZlcikKKyAgICB0ZXN0RmFpbGVkKCdUaGlzIHRlc3QgcmVx
dWlyZXMgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUyknKTsKK2Vsc2UKKyAgICBydW5OZXh0VGVz
dCgpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>