<?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>70862</bug_id>
          
          <creation_ts>2011-10-25 16:32:24 -0700</creation_ts>
          <short_desc>[MutationObservers] Support characterDataOldValue for characterData mutations</short_desc>
          <delta_ts>2011-10-31 16:51:38 -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>DOM</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>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>490461</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-25 16:32:24 -0700</bug_when>
    <thetext>[MutationObservers] Support characterDataOldValue for characterData mutations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492844</commentid>
    <comment_count>1</comment_count>
      <attachid>112953</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-28 17:56:22 -0700</bug_when>
    <thetext>Created attachment 112953
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493455</commentid>
    <comment_count>2</comment_count>
      <attachid>113077</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-31 13:11:36 -0700</bug_when>
    <thetext>Created attachment 113077
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493461</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-31 13:22:31 -0700</bug_when>
    <thetext>Now ready for review.  Note that there are FIXMEs in Element.cpp and CharacterData.cpp to factor out the mutationWithNullOldValue logic.  Those will be fixed after Rafael lands his attributeFilter patch, as we hope to clean up Node::getRegisteredMutationObserversOfType to return something smarter than a HashMap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493591</commentid>
    <comment_count>4</comment_count>
      <attachid>113077</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-10-31 16:10:48 -0700</bug_when>
    <thetext>Comment on attachment 113077
Patch

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

&gt; Source/WebCore/dom/CharacterData.cpp:216
&gt; +    RefPtr&lt;MutationRecord&gt; mutation = MutationRecord::createCharacterData(node, isOldValueRequested(observers) ? oldData : 0);

Can we create this lazily in the for loop below? That would obviate the need for the isOldValueRequested and would avoid doing a second loop over the observers.

I guess you&apos;re trying to have a single record for all observers. I think that&apos;s fine, but you could invert the way you create mutations...create the null old value record first and create the mutation record with the old value from the one without.

It&apos;s not a big deal, but it seems the code is less complicated (or am I missing something?) and it avoids another O(n) operation, not that I actually expect that to affect real-world performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493595</commentid>
    <comment_count>5</comment_count>
      <attachid>113077</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-31 16:16:07 -0700</bug_when>
    <thetext>Comment on attachment 113077
Patch

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

&gt;&gt; Source/WebCore/dom/CharacterData.cpp:216
&gt;&gt; +    RefPtr&lt;MutationRecord&gt; mutation = MutationRecord::createCharacterData(node, isOldValueRequested(observers) ? oldData : 0);
&gt; 
&gt; Can we create this lazily in the for loop below? That would obviate the need for the isOldValueRequested and would avoid doing a second loop over the observers.
&gt; 
&gt; I guess you&apos;re trying to have a single record for all observers. I think that&apos;s fine, but you could invert the way you create mutations...create the null old value record first and create the mutation record with the old value from the one without.
&gt; 
&gt; It&apos;s not a big deal, but it seems the code is less complicated (or am I missing something?) and it avoids another O(n) operation, not that I actually expect that to affect real-world performance.

The code-as-is optimizes for creating fewer mutation records at the cost of a bit more work up front to figure out what actually needs to be created.  If all observers actually want old value, then we&apos;d have two MutationRecords per mutation just to support them.  Given that the common case is likely a single observer, it seems wasteful to create two records where one would do.

I&apos;m currently working on benchmarks for this stuff so we can get a better idea of what the right tradeoffs are, so I&apos;d like to leave this for now as I find it &quot;conceptually&quot; simplest (minimizing the number of records).  And of course the duplication of this logic will go away in the next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493600</commentid>
    <comment_count>6</comment_count>
      <attachid>113077</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-31 16:24:04 -0700</bug_when>
    <thetext>Comment on attachment 113077
Patch

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

&gt; Source/WebCore/dom/MutationRecord.cpp:98
&gt; -    CharacterDataRecord(PassRefPtr&lt;Node&gt; target)
&gt; +    CharacterDataRecord(PassRefPtr&lt;Node&gt; target, StringImpl* oldValue)

I don&apos;t think we want to pass StringImpl around like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493603</commentid>
    <comment_count>7</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-10-31 16:25:18 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; The code-as-is optimizes for creating fewer mutation records at the cost of a bit more work up front to figure out what actually needs to be created.  If all observers actually want old value, then we&apos;d have two MutationRecords per mutation just to support them.  Given that the common case is likely a single observer, it seems wasteful to create two records where one would do.

That makes sense. I think that&apos;s the right tradeoff. I&apos;d be very surprised if this for-loop showed up in a profile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493607</commentid>
    <comment_count>8</comment_count>
      <attachid>113104</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-31 16:28:24 -0700</bug_when>
    <thetext>Created attachment 113104
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493609</commentid>
    <comment_count>9</comment_count>
      <attachid>113077</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-31 16:29:12 -0700</bug_when>
    <thetext>Comment on attachment 113077
Patch

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

&gt;&gt; Source/WebCore/dom/MutationRecord.cpp:98
&gt;&gt; +    CharacterDataRecord(PassRefPtr&lt;Node&gt; target, StringImpl* oldValue)
&gt; 
&gt; I don&apos;t think we want to pass StringImpl around like this.

Changed to &quot;const String&amp;&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493611</commentid>
    <comment_count>10</comment_count>
      <attachid>113104</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-31 16:29:45 -0700</bug_when>
    <thetext>Comment on attachment 113104
Patch for landing

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

&gt; Source/WebCore/dom/CharacterData.cpp:208
&gt; +static void enqueueCharacterDataMutationRecord(Node* node, StringImpl* oldData)

Same comment about StringImpl here.

&gt; Source/WebCore/dom/CharacterData.cpp:235
&gt; +void CharacterData::dispatchModifiedEvent(StringImpl* oldData)

and here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493612</commentid>
    <comment_count>11</comment_count>
      <attachid>113104</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-31 16:31:21 -0700</bug_when>
    <thetext>Comment on attachment 113104
Patch for landing

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

&gt;&gt; Source/WebCore/dom/CharacterData.cpp:235
&gt;&gt; +void CharacterData::dispatchModifiedEvent(StringImpl* oldData)
&gt; 
&gt; and here.

I didn&apos;t write this code, do you want me to change this interface as part of the same patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493613</commentid>
    <comment_count>12</comment_count>
      <attachid>113105</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-31 16:33:48 -0700</bug_when>
    <thetext>Created attachment 113105
More const String&amp;ification</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493619</commentid>
    <comment_count>13</comment_count>
      <attachid>113105</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-31 16:38:51 -0700</bug_when>
    <thetext>Comment on attachment 113105
More const String&amp;ification

I think Ojan&apos;s r+ withstands here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493623</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-31 16:46:59 -0700</bug_when>
    <thetext>Committed r98910: &lt;http://trac.webkit.org/changeset/98910&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493624</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-31 16:47:43 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 113104 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=113104&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/dom/CharacterData.cpp:235
&gt; &gt;&gt; +void CharacterData::dispatchModifiedEvent(StringImpl* oldData)
&gt; &gt; 
&gt; &gt; and here.
&gt; 
&gt; I didn&apos;t write this code, do you want me to change this interface as part of the same patch?

Assuming no due to the r+, I&apos;ll write up a second patch to use String instead of StringImpl inside CharacterData (though I do wonder if there&apos;s some reason for this usage).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493630</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-31 16:51:38 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #11)
&gt; &gt; (From update of attachment 113104 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=113104&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/dom/CharacterData.cpp:235
&gt; &gt; &gt;&gt; +void CharacterData::dispatchModifiedEvent(StringImpl* oldData)
&gt; &gt; &gt; 
&gt; &gt; &gt; and here.
&gt; &gt; 
&gt; &gt; I didn&apos;t write this code, do you want me to change this interface as part of the same patch?
&gt; 
&gt; Assuming no due to the r+, I&apos;ll write up a second patch to use String instead of StringImpl inside CharacterData (though I do wonder if there&apos;s some reason for this usage).

r+ with comments mean that I still want the comments to be addressed although it can be landed either way.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112953</attachid>
            <date>2011-10-28 17:56:22 -0700</date>
            <delta_ts>2011-10-31 13:11:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70862-20111028175621.patch</filename>
            <type>text/plain</type>
            <size>14012</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg2NTkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhNjI1MjU3YThkM2IyZjg3NjQ2ZWJk
MjFiZTBhMzc5MjY0YzdiYjk1Li43YTRjZWRiNjkwMWE4MDI1ODFjOTA3NmRhMDRlOWE1ZmI3YTkw
NmI0IDEwMDc1NQotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMTAtMjcgIEFkYW0gS2xlaW4gIDxhZGFt
a0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW011dGF0aW9uT2JzZXJ2ZXJzXSBTdXBwb3J0IGNo
YXJhY3RlckRhdGFPbGRWYWx1ZSBmb3IgY2hhcmFjdGVyRGF0YSBtdXRhdGlvbnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwODYyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgb2xkVmFsdWUgdGVz
dCBjYXNlcyB0byBleGlzdGluZyBjaGFyYWN0ZXJEYXRhIHRlc3RzLgorCisgICAgICAgICogZmFz
dC9tdXRhdGlvbi9vYnNlcnZlLWNoYXJhY3RlcmRhdGEtZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IGZhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGFyYWN0ZXJkYXRhLmh0bWw6CisKIDIwMTEtMTAtMjYg
IEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW011dGF0aW9uT2Jz
ZXJ2ZXJzXSBTdXBwb3J0IGF0dHJpYnV0ZU9sZFZhbHVlIGZvciBhdHRyaWJ1dGUgbXV0YXRpb25z
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtY2hhcmFjdGVy
ZGF0YS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtY2hh
cmFjdGVyZGF0YS1leHBlY3RlZC50eHQKaW5kZXggM2Q1YTc1NGZiOWE4NGNlNjQ3MGFiNjFkM2Qy
MTM1Y2YzNTU5NDU4OC4uMWRmZjNiNTVkMjc2Y2MxNWE2ODM5YmVkN2Q5N2IzODJjNmY3YWRmYiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoYXJhY3RlcmRh
dGEtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1j
aGFyYWN0ZXJkYXRhLWV4cGVjdGVkLnR4dApAQCAtMzMsNiArMzMsMjggQEAgUEFTUyBtdXRhdGlv
bnMubGVuZ3RoIGlzIDIKIFBBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNoYXJhY3RlckRhdGEi
CiBQQVNTIG11dGF0aW9uc1sxXS50eXBlIGlzICJhdHRyaWJ1dGVzIgogCitUZXN0aW5nIHRoYXQg
b2xkVmFsdWUgaXMgcmV0dXJuZWQgd2hlbiByZXF1ZXN0ZWQuCitQQVNTIG11dGF0aW9ucy5sZW5n
dGggaXMgMgorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hhcmFjdGVyRGF0YSIKK1BBU1Mg
bXV0YXRpb25zWzBdLnRhcmdldCBpcyBjaGFyRGF0YU5vZGUKK1BBU1MgbXV0YXRpb25zWzBdLm9s
ZFZhbHVlIGlzICJmb28iCitQQVNTIG11dGF0aW9uc1sxXS50eXBlIGlzICJjaGFyYWN0ZXJEYXRh
IgorUEFTUyBtdXRhdGlvbnNbMV0udGFyZ2V0IGlzIGNoYXJEYXRhTm9kZQorUEFTUyBtdXRhdGlv
bnNbMV0ub2xkVmFsdWUgaXMgImJhciIKKworVGVzdGluZyB0aGF0IG9sZFZhbHVlIGlzIGRlbGl2
ZXJlZCBhcyByZXF1ZXN0ZWQgKG9yIG5vdCkuCitQQVNTIG11dGF0aW9uc1dpdGhPbGRWYWx1ZS5s
ZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNXaXRoT2xkVmFsdWVbMF0udHlwZSBpcyAiY2hhcmFj
dGVyRGF0YSIKK1BBU1MgbXV0YXRpb25zV2l0aE9sZFZhbHVlWzBdLm9sZFZhbHVlIGlzICJmb28i
CitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAi
Y2hhcmFjdGVyRGF0YSIKK1BBU1MgbXV0YXRpb25zWzBdLm9sZFZhbHVlIGlzIG51bGwKKworQW4g
b2JzZXJ2ZXIgd2l0aCBtdWx0aXBsZSBvYnNlcnZhdGlvbnMgd2lsbCBnZXQgY2hhcmFjdGVyRGF0
YU9sZFZhbHVlIGlmIGFueSBlbnRyaWVzIHJlcXVlc3QgaXQuCitQQVNTIG11dGF0aW9ucy5sZW5n
dGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hhcmFjdGVyRGF0YSIKK1BBU1Mg
bXV0YXRpb25zWzBdLm9sZFZhbHVlIGlzICJmb28iCisKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9t
dXRhdGlvbi9vYnNlcnZlLWNoYXJhY3RlcmRhdGEuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbXV0
YXRpb24vb2JzZXJ2ZS1jaGFyYWN0ZXJkYXRhLmh0bWwKaW5kZXggYWFlY2Q4MzE4ZGQ2ZWI3NzU0
ZWNlZmJjNjVkMDQ2YjIyZTlmMzI1Yi4uNzAwMWVhYWIzMDkwNmM3Y2E3MTEzYTM1OWQwMDVjMThm
MmQxZWU5MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNo
YXJhY3RlcmRhdGEuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUt
Y2hhcmFjdGVyZGF0YS5odG1sCkBAIC0xMiw2ICsxMiw3IEBACiB3aW5kb3cuanNUZXN0SXNBc3lu
YyA9IHRydWU7CiB2YXIgbXV0YXRpb25zOwogdmFyIG11dGF0aW9uczI7Cit2YXIgbXV0YXRpb25z
V2l0aE9sZFZhbHVlOwogdmFyIGNhbGxzOwogdmFyIGNoYXJEYXRhTm9kZTsKIApAQCAtMTkxLDcg
KzE5MiwxMjEgQEAgZnVuY3Rpb24gdGVzdE9yZGVyaW5nV3J0RE9NU3VidHJlZU1vZGlmaWVkKCkg
ewogICAgIHN0YXJ0KCk7CiB9CiAKLXZhciB0ZXN0cyA9IFt0ZXN0QmFzaWMsIHRlc3RXcm9uZ1R5
cGUsIHRlc3RNdWx0aXBsZU9ic2VydmVycywgdGVzdE9yZGVyaW5nV3J0RE9NU3VidHJlZU1vZGlm
aWVkXTsKK2Z1bmN0aW9uIHRlc3RPbGRWYWx1ZSgpIHsKKyAgICB2YXIgZGl2OworICAgIHZhciBv
YnNlcnZlcjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGlu
ZyB0aGF0IG9sZFZhbHVlIGlzIHJldHVybmVkIHdoZW4gcmVxdWVzdGVkLicpOworICAgICAgICBt
dXRhdGlvbnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKTsKKyAgICAgICAgZGl2LnRleHRDb250ZW50ID0gJ2Zvbyc7CisgICAgICAgIGNoYXJEYXRh
Tm9kZSA9IGRpdi5maXJzdENoaWxkOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRh
dGlvbk9ic2VydmVyKGZ1bmN0aW9uKG11dGF0aW9ucykgeworICAgICAgICAgICAgd2luZG93Lm11
dGF0aW9ucyA9IG11dGF0aW9uczsKKyAgICAgICAgfSk7CisgICAgICAgIG9ic2VydmVyLm9ic2Vy
dmUoY2hhckRhdGFOb2RlLCB7Y2hhcmFjdGVyRGF0YTogdHJ1ZSwgY2hhcmFjdGVyRGF0YU9sZFZh
bHVlOiB0cnVlfSk7CisgICAgICAgIGNoYXJEYXRhTm9kZS50ZXh0Q29udGVudCA9ICdiYXInOwor
ICAgICAgICBjaGFyRGF0YU5vZGUudGV4dENvbnRlbnQgPSAnYmF6JzsKKyAgICAgICAgc2V0VGlt
ZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAg
ICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgn
bXV0YXRpb25zWzBdLnR5cGUnLCAnImNoYXJhY3RlckRhdGEiJyk7CisgICAgICAgIHNob3VsZEJl
KCdtdXRhdGlvbnNbMF0udGFyZ2V0JywgJ2NoYXJEYXRhTm9kZScpOworICAgICAgICBzaG91bGRC
ZSgnbXV0YXRpb25zWzBdLm9sZFZhbHVlJywgJyJmb28iJyk7CisgICAgICAgIHNob3VsZEJlKCdt
dXRhdGlvbnNbMV0udHlwZScsICciY2hhcmFjdGVyRGF0YSInKTsKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9uc1sxXS50YXJnZXQnLCAnY2hhckRhdGFOb2RlJyk7CisgICAgICAgIHNob3VsZEJl
KCdtdXRhdGlvbnNbMV0ub2xkVmFsdWUnLCAnImJhciInKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlz
Y29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7Cisg
ICAgfQorCisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVzdE9sZFZhbHVlQXNSZXF1ZXN0
ZWQoKSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXJXaXRoT2xkVmFsdWU7CisgICAg
dmFyIG9ic2VydmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdU
ZXN0aW5nIHRoYXQgb2xkVmFsdWUgaXMgZGVsaXZlcmVkIGFzIHJlcXVlc3RlZCAob3Igbm90KS4n
KTsKKyAgICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgbXV0YXRpb25zV2l0aE9sZFZh
bHVlID0gbnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7
CisgICAgICAgIGRpdi50ZXh0Q29udGVudCA9ICdmb28nOworICAgICAgICBjaGFyRGF0YU5vZGUg
PSBkaXYuZmlyc3RDaGlsZDsKKyAgICAgICAgb2JzZXJ2ZXJXaXRoT2xkVmFsdWUgPSBuZXcgV2Vi
S2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtdXRhdGlvbnMpIHsKKyAgICAgICAgICAgIHdp
bmRvdy5tdXRhdGlvbnNXaXRoT2xkVmFsdWUgPSBtdXRhdGlvbnM7CisgICAgICAgIH0pOworICAg
ICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG11dGF0
aW9ucykgeworICAgICAgICAgICAgd2luZG93Lm11dGF0aW9ucyA9IG11dGF0aW9uczsKKyAgICAg
ICAgfSk7CisgICAgICAgIG9ic2VydmVyV2l0aE9sZFZhbHVlLm9ic2VydmUoY2hhckRhdGFOb2Rl
LCB7Y2hhcmFjdGVyRGF0YTogdHJ1ZSwgY2hhcmFjdGVyRGF0YU9sZFZhbHVlOiB0cnVlfSk7Cisg
ICAgICAgIG9ic2VydmVyLm9ic2VydmUoY2hhckRhdGFOb2RlLCB7Y2hhcmFjdGVyRGF0YTogdHJ1
ZX0pOworICAgICAgICBjaGFyRGF0YU5vZGUudGV4dENvbnRlbnQgPSAnYmFyJzsKKyAgICAgICAg
c2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsK
KyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1dpdGhPbGRWYWx1ZS5sZW5ndGgnLCAnMScpOwor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zV2l0aE9sZFZhbHVlWzBdLnR5cGUnLCAnImNoYXJh
Y3RlckRhdGEiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNXaXRoT2xkVmFsdWVbMF0u
b2xkVmFsdWUnLCAnImZvbyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgn
LCAnMScpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImNoYXJhY3Rl
ckRhdGEiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ub2xkVmFsdWUnLCAnbnVs
bCcpOworICAgICAgICBvYnNlcnZlcldpdGhPbGRWYWx1ZS5kaXNjb25uZWN0KCk7CisgICAgICAg
IG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5O
ZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RPbGRW
YWx1ZVVuaW9uTXVsdGlwbGVPYnNlcnZhdGlvbnMoKSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIg
b2JzZXJ2ZXI7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ0FuIG9i
c2VydmVyIHdpdGggbXVsdGlwbGUgb2JzZXJ2YXRpb25zIHdpbGwgZ2V0IGNoYXJhY3RlckRhdGFP
bGRWYWx1ZSBpZiBhbnkgZW50cmllcyByZXF1ZXN0IGl0LicpOworICAgICAgICBtdXRhdGlvbnMg
PSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAg
ICAgICAgZGl2LnRleHRDb250ZW50ID0gJ2Zvbyc7CisgICAgICAgIGNoYXJEYXRhTm9kZSA9IGRp
di5maXJzdENoaWxkOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyKGZ1bmN0aW9uKG11dGF0aW9ucykgeworICAgICAgICAgICAgd2luZG93Lm11dGF0aW9ucyA9
IG11dGF0aW9uczsKKyAgICAgICAgfSk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7
Y2hhcmFjdGVyRGF0YTogdHJ1ZSwgY2hhcmFjdGVyRGF0YU9sZFZhbHVlOiB0cnVlLCBzdWJ0cmVl
OiB0cnVlfSk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoY2hhckRhdGFOb2RlLCB7Y2hhcmFj
dGVyRGF0YTogdHJ1ZX0pOworICAgICAgICBjaGFyRGF0YU5vZGUudGV4dENvbnRlbnQgPSAnYmFy
JzsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9u
IGZpbmlzaCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScpOwor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImNoYXJhY3RlckRhdGEiJyk7
CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ub2xkVmFsdWUnLCAnImZvbyInKTsKKyAg
ICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAg
IHJ1bk5leHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKwordmFyIHRlc3RzID0g
WworICAgIHRlc3RCYXNpYywKKyAgICB0ZXN0V3JvbmdUeXBlLAorICAgIHRlc3RNdWx0aXBsZU9i
c2VydmVycywKKyAgICB0ZXN0T3JkZXJpbmdXcnRET01TdWJ0cmVlTW9kaWZpZWQsCisgICAgdGVz
dE9sZFZhbHVlLAorICAgIHRlc3RPbGRWYWx1ZUFzUmVxdWVzdGVkLAorICAgIHRlc3RPbGRWYWx1
ZVVuaW9uTXVsdGlwbGVPYnNlcnZhdGlvbnMKK107CiB2YXIgdGVzdEluZGV4ID0gMDsKIAogZnVu
Y3Rpb24gcnVuTmV4dFRlc3QoKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmY2YjQ5MWY5NDBjNGFlOTU0MWZk
NTg4NTFiZjVhMjkwZDdkOGE2NS4uNTVkYmJjNzNhMGU0ZWE1NWIwNGQwM2E1OTQ5MWQ5NzNjOTY0
MTE2NSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDExLTEwLTI3ICBBZGFtIEtsZWlu
ICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtNdXRhdGlvbk9ic2VydmVyc10gU3Vw
cG9ydCBjaGFyYWN0ZXJEYXRhT2xkVmFsdWUgZm9yIGNoYXJhY3RlckRhdGEgbXV0YXRpb25zCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg2MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZG9tL0NoYXJh
Y3RlckRhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzT2xkVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6aXNPbGRWYWx1ZVJlcXVlc3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0
ZXJEYXRhOjpkaXNwYXRjaE1vZGlmaWVkRXZlbnQpOgorICAgICAgICAqIGRvbS9NdXRhdGlvblJl
Y29yZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvblJlY29yZDo6Y3JlYXRlQ2hhcmFj
dGVyRGF0YSk6CisgICAgICAgICogZG9tL011dGF0aW9uUmVjb3JkLmg6CisKIDIwMTEtMTAtMjYg
IEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW011dGF0aW9uT2Jz
ZXJ2ZXJzXSBTdXBwb3J0IGF0dHJpYnV0ZU9sZFZhbHVlIGZvciBhdHRyaWJ1dGUgbXV0YXRpb25z
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKaW5kZXggMzdhN2ZiZmZiYTJhYTlmMzFl
OTY2OTNiYjdhYzk3MjhiNTIzNGI1My4uNWVjZGU4NjI0ZDhlNDVkMjUzMmVkZmM0ZDIwZDdiMGNm
MjczYzU1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcApAQCAtMTkwLDE2ICsx
OTAsNTIgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjp1cGRhdGVSZW5kZXJlcih1bnNpZ25lZCBvZmZz
ZXRPZlJlcGxhY2VkRGF0YSwgdW5zaWduZWQgbGVuZ3QKICAgICAgICAgdG9SZW5kZXJUZXh0KHJl
bmRlcmVyKCkpLT5zZXRUZXh0V2l0aE9mZnNldChtX2RhdGEsIG9mZnNldE9mUmVwbGFjZWREYXRh
LCBsZW5ndGhPZlJlcGxhY2VkRGF0YSk7CiB9CiAKLXZvaWQgQ2hhcmFjdGVyRGF0YTo6ZGlzcGF0
Y2hNb2RpZmllZEV2ZW50KFN0cmluZ0ltcGwqIG9sZERhdGEpCi17CiAjaWYgRU5BQkxFKE1VVEFU
SU9OX09CU0VSVkVSUykKK3N0YXRpYyBpbmxpbmUgYm9vbCBoYXNPbGRWYWx1ZShNdXRhdGlvbk9i
c2VydmVyT3B0aW9ucyBvcHRpb25zKQoreworICAgIHJldHVybiBvcHRpb25zICYgV2ViS2l0TXV0
YXRpb25PYnNlcnZlcjo6Q2hhcmFjdGVyRGF0YU9sZFZhbHVlOworfQorCitzdGF0aWMgYm9vbCBp
c09sZFZhbHVlUmVxdWVzdGVkKGNvbnN0IEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlcios
IE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zPiYgb2JzZXJ2ZXJzKQoreworICAgIGZvciAoSGFzaE1h
cDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnM+Ojpjb25z
dF9pdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gb2JzZXJ2ZXJzLmVu
ZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGhhc09sZFZhbHVlKGl0ZXItPnNlY29uZCkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitz
dGF0aWMgdm9pZCBlbnF1ZXVlQ2hhcmFjdGVyRGF0YU11dGF0aW9uUmVjb3JkKE5vZGUqIG5vZGUs
IFN0cmluZ0ltcGwqIG9sZERhdGEpCit7CiAgICAgSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyKiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnM+IG9ic2VydmVyczsKLSAgICBnZXRSZWdpc3Rl
cmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUob2JzZXJ2ZXJzLCBXZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyOjpDaGFyYWN0ZXJEYXRhKTsKLSAgICBpZiAoIW9ic2VydmVycy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtdXRhdGlvbiA9IE11dGF0aW9uUmVjb3JkOjpj
cmVhdGVDaGFyYWN0ZXJEYXRhKHRoaXMpOwotICAgICAgICBmb3IgKEhhc2hNYXA8V2ViS2l0TXV0
YXRpb25PYnNlcnZlciosIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zPjo6aXRlcmF0b3IgaXRlciA9
IG9ic2VydmVycy5iZWdpbigpOyBpdGVyICE9IG9ic2VydmVycy5lbmQoKTsgKytpdGVyKQotICAg
ICAgICAgICAgICAgIGl0ZXItPmZpcnN0LT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQobXV0YXRpb24p
OworICAgIG5vZGUtPmdldFJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZShvYnNlcnZl
cnMsIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkNoYXJhY3RlckRhdGEpOworICAgIGlmIChvYnNl
cnZlcnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogRmFjdG9y
IHRoaXMgbG9naWMgb3V0IHRvIGF2b2lkIGR1cGxpY2F0aW9uIHdpdGggYXR0cmlidXRlT2xkVmFs
dWUuCisgICAgUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtdXRhdGlvbiA9IE11dGF0aW9uUmVjb3Jk
OjpjcmVhdGVDaGFyYWN0ZXJEYXRhKG5vZGUsIGlzT2xkVmFsdWVSZXF1ZXN0ZWQob2JzZXJ2ZXJz
KSA/IG9sZERhdGEgOiAwKTsKKyAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uV2l0
aE51bGxPbGRWYWx1ZTsKKyAgICBmb3IgKEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlcios
IE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zPjo6aXRlcmF0b3IgaXRlciA9IG9ic2VydmVycy5iZWdp
bigpOyBpdGVyICE9IG9ic2VydmVycy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXIqIG9ic2VydmVyID0gaXRlci0+Zmlyc3Q7CisgICAgICAgIGlmIChoYXNP
bGRWYWx1ZShpdGVyLT5zZWNvbmQpKSB7CisgICAgICAgICAgICBvYnNlcnZlci0+ZW5xdWV1ZU11
dGF0aW9uUmVjb3JkKG11dGF0aW9uKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisgICAgICAgIGlmICghbXV0YXRpb25XaXRoTnVsbE9sZFZhbHVlKSB7CisgICAgICAgICAgICBp
ZiAobXV0YXRpb24tPm9sZFZhbHVlKCkuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgbXV0YXRp
b25XaXRoTnVsbE9sZFZhbHVlID0gbXV0YXRpb247CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbXV0YXRpb25XaXRoTnVsbE9sZFZhbHVlID0gTXV0YXRpb25SZWNvcmQ6OmNyZWF0
ZVdpdGhOdWxsT2xkVmFsdWUobXV0YXRpb24pOworICAgICAgICB9CisgICAgICAgIG9ic2VydmVy
LT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQobXV0YXRpb25XaXRoTnVsbE9sZFZhbHVlKTsKICAgICB9
Cit9CisjZW5kaWYgLy8gRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKwordm9pZCBDaGFyYWN0
ZXJEYXRhOjpkaXNwYXRjaE1vZGlmaWVkRXZlbnQoU3RyaW5nSW1wbCogb2xkRGF0YSkKK3sKKyNp
ZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIGVucXVldWVDaGFyYWN0ZXJEYXRhTXV0
YXRpb25SZWNvcmQodGhpcywgb2xkRGF0YSk7CiAjZW5kaWYKICAgICBpZiAocGFyZW50Tm9kZSgp
KQogICAgICAgICBwYXJlbnROb2RlKCktPmNoaWxkcmVuQ2hhbmdlZCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCmluZGV4IDFkYWYzOThlMWU3NzVlZTYwNzgxYzUyNjZhMmU3N2MwNDU3YjljMDQuLjM5
Y2FiZDgzNmEwMzU5N2I1OWY0NGUyMDE0NmRmZWMwZDAyNWVhOTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAKQEAgLTYzOCw2ICs2MzgsNyBAQCBzdGF0aWMgdm9pZCBlbnF1ZXVlQXR0cmlidXRlc011
dGF0aW9uUmVjb3JkKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbQogICAgIGlm
IChvYnNlcnZlcnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBGSVhNRTog
RmFjdG9yIHRoaXMgbG9naWMgb3V0IHRvIGF2b2lkIGR1cGxpY2F0aW9uIHdpdGggY2hhcmFjdGVy
RGF0YU9sZFZhbHVlLgogICAgIFJlZlB0cjxNdXRhdGlvblJlY29yZD4gbXV0YXRpb24gPSBNdXRh
dGlvblJlY29yZDo6Y3JlYXRlQXR0cmlidXRlcyhlbGVtZW50LCBuYW1lLCBpc09sZFZhbHVlUmVx
dWVzdGVkKG9ic2VydmVycykgPyBvbGRWYWx1ZSA6IG51bGxBdG9tKTsKICAgICBSZWZQdHI8TXV0
YXRpb25SZWNvcmQ+IG11dGF0aW9uV2l0aE51bGxPbGRWYWx1ZTsKICAgICBmb3IgKEhhc2hNYXA8
V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zPjo6aXRlcmF0
b3IgaXRlciA9IG9ic2VydmVycy5iZWdpbigpOyBpdGVyICE9IG9ic2VydmVycy5lbmQoKTsgKytp
dGVyKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmNwcAppbmRleCAwODVkY2ZhYTVj
NTFlZDMwMTAxNGMzODg3NGIzYTFmOWFiYWQwMDg2Li43NWQwNWVmOGJlOGI2YWEyZTkwMjhiZTI3
ZDI4YTdhZGVhNzI3ZDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25S
ZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAKQEAg
LTk1LDE2ICs5NSwxOSBAQCBwcml2YXRlOgogCiBjbGFzcyBDaGFyYWN0ZXJEYXRhUmVjb3JkIDog
cHVibGljIE11dGF0aW9uUmVjb3JkIHsKIHB1YmxpYzoKLSAgICBDaGFyYWN0ZXJEYXRhUmVjb3Jk
KFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KQorICAgIENoYXJhY3RlckRhdGFSZWNvcmQoUGFzc1Jl
ZlB0cjxOb2RlPiB0YXJnZXQsIFN0cmluZ0ltcGwqIG9sZFZhbHVlKQogICAgICAgICA6IG1fdGFy
Z2V0KHRhcmdldCkKKyAgICAgICAgLCBtX29sZFZhbHVlKG9sZFZhbHVlKQogICAgIHsKICAgICB9
CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSBPVkVS
UklERTsKICAgICB2aXJ0dWFsIE5vZGUqIHRhcmdldCgpIE9WRVJSSURFIHsgcmV0dXJuIG1fdGFy
Z2V0LmdldCgpOyB9CisgICAgdmlydHVhbCBTdHJpbmcgb2xkVmFsdWUoKSBPVkVSUklERSB7IHJl
dHVybiBtX29sZFZhbHVlOyB9CiAKICAgICBSZWZQdHI8Tm9kZT4gbV90YXJnZXQ7CisgICAgU3Ry
aW5nIG1fb2xkVmFsdWU7CiB9OwogCiBjbGFzcyBNdXRhdGlvblJlY29yZFdpdGhOdWxsT2xkVmFs
dWUgOiBwdWJsaWMgTXV0YXRpb25SZWNvcmQgewpAQCAtMTU5LDkgKzE2Miw5IEBAIFBhc3NSZWZQ
dHI8TXV0YXRpb25SZWNvcmQ+IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVBdHRyaWJ1dGVzKFBhc3NS
ZWZQdHI8Tm9kZT4gdGFyCiAgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PE11dGF0aW9u
UmVjb3JkKj4obmV3IEF0dHJpYnV0ZXNSZWNvcmQodGFyZ2V0LCBuYW1lLCBvbGRWYWx1ZSkpKTsK
IH0KIAotUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gTXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUNo
YXJhY3RlckRhdGEoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQpCitQYXNzUmVmUHRyPE11dGF0aW9u
UmVjb3JkPiBNdXRhdGlvblJlY29yZDo6Y3JlYXRlQ2hhcmFjdGVyRGF0YShQYXNzUmVmUHRyPE5v
ZGU+IHRhcmdldCwgU3RyaW5nSW1wbCogb2xkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KHN0YXRpY19jYXN0PE11dGF0aW9uUmVjb3JkKj4obmV3IENoYXJhY3RlckRhdGFSZWNvcmQodGFy
Z2V0KSkpOworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxNdXRhdGlvblJlY29yZCo+
KG5ldyBDaGFyYWN0ZXJEYXRhUmVjb3JkKHRhcmdldCwgb2xkVmFsdWUpKSk7CiB9CiAKIFBhc3NS
ZWZQdHI8TXV0YXRpb25SZWNvcmQ+IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVXaXRoTnVsbE9sZFZh
bHVlKFBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IHJlY29yZCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0
aW9uUmVjb3JkLmgKaW5kZXggM2JmMDFhMTliOTQ0YTNjMWRmMGIwN2Y5MjQ3MGVkODM4MDY4Yjg2
Yi4uODY1NjAyOTc2ZmQ4Yjc3NjVjOWI3YTI5Mjk5ZjY0ZWRkNTJjMTRjMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3JkLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL011dGF0aW9uUmVjb3JkLmgKQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgTXV0YXRpb25SZWNv
cmQgOiBwdWJsaWMgUmVmQ291bnRlZDxNdXRhdGlvblJlY29yZD4gewogcHVibGljOgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBjcmVhdGVDaGlsZExpc3QoUGFzc1JlZlB0
cjxOb2RlPiB0YXJnZXQsIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGFkZGVkLCBQYXNzUmVmUHRyPE5v
ZGVMaXN0PiByZW1vdmVkLCBQYXNzUmVmUHRyPE5vZGU+IHByZXZpb3VzU2libGluZywgUGFzc1Jl
ZlB0cjxOb2RlPiBuZXh0U2libGluZyk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TXV0YXRpb25S
ZWNvcmQ+IGNyZWF0ZUF0dHJpYnV0ZXMoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQsIGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlKTsKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gY3JlYXRlQ2hhcmFjdGVyRGF0YShQYXNzUmVmUHRy
PE5vZGU+IHRhcmdldCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IGNy
ZWF0ZUNoYXJhY3RlckRhdGEoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQsIFN0cmluZ0ltcGwqIG9s
ZFZhbHVlKTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBjcmVhdGVX
aXRoTnVsbE9sZFZhbHVlKFBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113077</attachid>
            <date>2011-10-31 13:11:36 -0700</date>
            <delta_ts>2011-10-31 16:29:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70862-20111031131135.patch</filename>
            <type>text/plain</type>
            <size>13984</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg4NzEKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAzZGZhMTY1YjkxMDQyMGViNWQwMDg1
NTM4NTRiMmNmZGFjOGViNjY2Li42NTY4OTk5NmQ4Nzk3NDdkM2Q0NTRiNGJmNzQwMzYyOWZiZTUy
YThmIDEwMDc1NQotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMTAtMjcgIEFkYW0gS2xlaW4gIDxhZGFt
a0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW011dGF0aW9uT2JzZXJ2ZXJzXSBTdXBwb3J0IGNo
YXJhY3RlckRhdGFPbGRWYWx1ZSBmb3IgY2hhcmFjdGVyRGF0YSBtdXRhdGlvbnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwODYyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgb2xkVmFsdWUgdGVz
dCBjYXNlcyB0byBleGlzdGluZyBjaGFyYWN0ZXJEYXRhIHRlc3RzLgorCisgICAgICAgICogZmFz
dC9tdXRhdGlvbi9vYnNlcnZlLWNoYXJhY3RlcmRhdGEtZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IGZhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGFyYWN0ZXJkYXRhLmh0bWw6CisKIDIwMTEtMTAtMzEg
IEtlbmppIEltYXNha2kgIDxpbWFzYWtpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBEaWQgcmVi
YXNlbGluZXMgZm9yIGZhaWxpbmcgdGVzdHMgZm9yIGZ1bGxzY3JlZW4gbGF5b3V0IHRlc3RzLgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoYXJhY3RlcmRh
dGEtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoYXJh
Y3RlcmRhdGEtZXhwZWN0ZWQudHh0CmluZGV4IDNkNWE3NTRmYjlhODRjZTY0NzBhYjYxZDNkMjEz
NWNmMzU1OTQ1ODguLjFkZmYzYjU1ZDI3NmNjMTVhNjgzOWJlZDdkOTdiMzgyYzZmN2FkZmIgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGFyYWN0ZXJkYXRh
LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtY2hh
cmFjdGVyZGF0YS1leHBlY3RlZC50eHQKQEAgLTMzLDYgKzMzLDI4IEBAIFBBU1MgbXV0YXRpb25z
Lmxlbmd0aCBpcyAyCiBQQVNTIG11dGF0aW9uc1swXS50eXBlIGlzICJjaGFyYWN0ZXJEYXRhIgog
UEFTUyBtdXRhdGlvbnNbMV0udHlwZSBpcyAiYXR0cmlidXRlcyIKIAorVGVzdGluZyB0aGF0IG9s
ZFZhbHVlIGlzIHJldHVybmVkIHdoZW4gcmVxdWVzdGVkLgorUEFTUyBtdXRhdGlvbnMubGVuZ3Ro
IGlzIDIKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNoYXJhY3RlckRhdGEiCitQQVNTIG11
dGF0aW9uc1swXS50YXJnZXQgaXMgY2hhckRhdGFOb2RlCitQQVNTIG11dGF0aW9uc1swXS5vbGRW
YWx1ZSBpcyAiZm9vIgorUEFTUyBtdXRhdGlvbnNbMV0udHlwZSBpcyAiY2hhcmFjdGVyRGF0YSIK
K1BBU1MgbXV0YXRpb25zWzFdLnRhcmdldCBpcyBjaGFyRGF0YU5vZGUKK1BBU1MgbXV0YXRpb25z
WzFdLm9sZFZhbHVlIGlzICJiYXIiCisKK1Rlc3RpbmcgdGhhdCBvbGRWYWx1ZSBpcyBkZWxpdmVy
ZWQgYXMgcmVxdWVzdGVkIChvciBub3QpLgorUEFTUyBtdXRhdGlvbnNXaXRoT2xkVmFsdWUubGVu
Z3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zV2l0aE9sZFZhbHVlWzBdLnR5cGUgaXMgImNoYXJhY3Rl
ckRhdGEiCitQQVNTIG11dGF0aW9uc1dpdGhPbGRWYWx1ZVswXS5vbGRWYWx1ZSBpcyAiZm9vIgor
UEFTUyBtdXRhdGlvbnMubGVuZ3RoIGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNo
YXJhY3RlckRhdGEiCitQQVNTIG11dGF0aW9uc1swXS5vbGRWYWx1ZSBpcyBudWxsCisKK0FuIG9i
c2VydmVyIHdpdGggbXVsdGlwbGUgb2JzZXJ2YXRpb25zIHdpbGwgZ2V0IGNoYXJhY3RlckRhdGFP
bGRWYWx1ZSBpZiBhbnkgZW50cmllcyByZXF1ZXN0IGl0LgorUEFTUyBtdXRhdGlvbnMubGVuZ3Ro
IGlzIDEKK1BBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNoYXJhY3RlckRhdGEiCitQQVNTIG11
dGF0aW9uc1swXS5vbGRWYWx1ZSBpcyAiZm9vIgorCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbXV0
YXRpb24vb2JzZXJ2ZS1jaGFyYWN0ZXJkYXRhLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0
aW9uL29ic2VydmUtY2hhcmFjdGVyZGF0YS5odG1sCmluZGV4IGFhZWNkODMxOGRkNmViNzc1NGVj
ZWZiYzY1ZDA0NmIyMmU5ZjMyNWIuLjcwMDFlYWFiMzA5MDZjN2NhNzExM2EzNTlkMDA1YzE4ZjJk
MWVlOTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGFy
YWN0ZXJkYXRhLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNo
YXJhY3RlcmRhdGEuaHRtbApAQCAtMTIsNiArMTIsNyBAQAogd2luZG93LmpzVGVzdElzQXN5bmMg
PSB0cnVlOwogdmFyIG11dGF0aW9uczsKIHZhciBtdXRhdGlvbnMyOwordmFyIG11dGF0aW9uc1dp
dGhPbGRWYWx1ZTsKIHZhciBjYWxsczsKIHZhciBjaGFyRGF0YU5vZGU7CiAKQEAgLTE5MSw3ICsx
OTIsMTIxIEBAIGZ1bmN0aW9uIHRlc3RPcmRlcmluZ1dydERPTVN1YnRyZWVNb2RpZmllZCgpIHsK
ICAgICBzdGFydCgpOwogfQogCi12YXIgdGVzdHMgPSBbdGVzdEJhc2ljLCB0ZXN0V3JvbmdUeXBl
LCB0ZXN0TXVsdGlwbGVPYnNlcnZlcnMsIHRlc3RPcmRlcmluZ1dydERPTVN1YnRyZWVNb2RpZmll
ZF07CitmdW5jdGlvbiB0ZXN0T2xkVmFsdWUoKSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2Jz
ZXJ2ZXI7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ1Rlc3Rpbmcg
dGhhdCBvbGRWYWx1ZSBpcyByZXR1cm5lZCB3aGVuIHJlcXVlc3RlZC4nKTsKKyAgICAgICAgbXV0
YXRpb25zID0gbnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2
Jyk7CisgICAgICAgIGRpdi50ZXh0Q29udGVudCA9ICdmb28nOworICAgICAgICBjaGFyRGF0YU5v
ZGUgPSBkaXYuZmlyc3RDaGlsZDsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRp
b25PYnNlcnZlcihmdW5jdGlvbihtdXRhdGlvbnMpIHsKKyAgICAgICAgICAgIHdpbmRvdy5tdXRh
dGlvbnMgPSBtdXRhdGlvbnM7CisgICAgICAgIH0pOworICAgICAgICBvYnNlcnZlci5vYnNlcnZl
KGNoYXJEYXRhTm9kZSwge2NoYXJhY3RlckRhdGE6IHRydWUsIGNoYXJhY3RlckRhdGFPbGRWYWx1
ZTogdHJ1ZX0pOworICAgICAgICBjaGFyRGF0YU5vZGUudGV4dENvbnRlbnQgPSAnYmFyJzsKKyAg
ICAgICAgY2hhckRhdGFOb2RlLnRleHRDb250ZW50ID0gJ2Jheic7CisgICAgICAgIHNldFRpbWVv
dXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgICAg
IHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211
dGF0aW9uc1swXS50eXBlJywgJyJjaGFyYWN0ZXJEYXRhIicpOworICAgICAgICBzaG91bGRCZSgn
bXV0YXRpb25zWzBdLnRhcmdldCcsICdjaGFyRGF0YU5vZGUnKTsKKyAgICAgICAgc2hvdWxkQmUo
J211dGF0aW9uc1swXS5vbGRWYWx1ZScsICciZm9vIicpOworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zWzFdLnR5cGUnLCAnImNoYXJhY3RlckRhdGEiJyk7CisgICAgICAgIHNob3VsZEJlKCdt
dXRhdGlvbnNbMV0udGFyZ2V0JywgJ2NoYXJEYXRhTm9kZScpOworICAgICAgICBzaG91bGRCZSgn
bXV0YXRpb25zWzFdLm9sZFZhbHVlJywgJyJiYXIiJyk7CisgICAgICAgIG9ic2VydmVyLmRpc2Nv
bm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVzdCgpOworICAg
IH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RPbGRWYWx1ZUFzUmVxdWVzdGVk
KCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9ic2VydmVyV2l0aE9sZFZhbHVlOworICAgIHZh
ciBvYnNlcnZlcjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVz
dGluZyB0aGF0IG9sZFZhbHVlIGlzIGRlbGl2ZXJlZCBhcyByZXF1ZXN0ZWQgKG9yIG5vdCkuJyk7
CisgICAgICAgIG11dGF0aW9ucyA9IG51bGw7CisgICAgICAgIG11dGF0aW9uc1dpdGhPbGRWYWx1
ZSA9IG51bGw7CisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwor
ICAgICAgICBkaXYudGV4dENvbnRlbnQgPSAnZm9vJzsKKyAgICAgICAgY2hhckRhdGFOb2RlID0g
ZGl2LmZpcnN0Q2hpbGQ7CisgICAgICAgIG9ic2VydmVyV2l0aE9sZFZhbHVlID0gbmV3IFdlYktp
dE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obXV0YXRpb25zKSB7CisgICAgICAgICAgICB3aW5k
b3cubXV0YXRpb25zV2l0aE9sZFZhbHVlID0gbXV0YXRpb25zOworICAgICAgICB9KTsKKyAgICAg
ICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtdXRhdGlv
bnMpIHsKKyAgICAgICAgICAgIHdpbmRvdy5tdXRhdGlvbnMgPSBtdXRhdGlvbnM7CisgICAgICAg
IH0pOworICAgICAgICBvYnNlcnZlcldpdGhPbGRWYWx1ZS5vYnNlcnZlKGNoYXJEYXRhTm9kZSwg
e2NoYXJhY3RlckRhdGE6IHRydWUsIGNoYXJhY3RlckRhdGFPbGRWYWx1ZTogdHJ1ZX0pOworICAg
ICAgICBvYnNlcnZlci5vYnNlcnZlKGNoYXJEYXRhTm9kZSwge2NoYXJhY3RlckRhdGE6IHRydWV9
KTsKKyAgICAgICAgY2hhckRhdGFOb2RlLnRleHRDb250ZW50ID0gJ2Jhcic7CisgICAgICAgIHNl
dFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2goKSB7Cisg
ICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNXaXRoT2xkVmFsdWUubGVuZ3RoJywgJzEnKTsKKyAg
ICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1dpdGhPbGRWYWx1ZVswXS50eXBlJywgJyJjaGFyYWN0
ZXJEYXRhIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zV2l0aE9sZFZhbHVlWzBdLm9s
ZFZhbHVlJywgJyJmb28iJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywg
JzEnKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJjaGFyYWN0ZXJE
YXRhIicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLm9sZFZhbHVlJywgJ251bGwn
KTsKKyAgICAgICAgb2JzZXJ2ZXJXaXRoT2xkVmFsdWUuZGlzY29ubmVjdCgpOworICAgICAgICBv
YnNlcnZlci5kaXNjb25uZWN0KCk7CisgICAgICAgIGRlYnVnKCcnKTsKKyAgICAgICAgcnVuTmV4
dFRlc3QoKTsKKyAgICB9CisKKyAgICBzdGFydCgpOworfQorCitmdW5jdGlvbiB0ZXN0T2xkVmFs
dWVVbmlvbk11bHRpcGxlT2JzZXJ2YXRpb25zKCkgeworICAgIHZhciBkaXY7CisgICAgdmFyIG9i
c2VydmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdBbiBvYnNl
cnZlciB3aXRoIG11bHRpcGxlIG9ic2VydmF0aW9ucyB3aWxsIGdldCBjaGFyYWN0ZXJEYXRhT2xk
VmFsdWUgaWYgYW55IGVudHJpZXMgcmVxdWVzdCBpdC4nKTsKKyAgICAgICAgbXV0YXRpb25zID0g
bnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAg
ICAgIGRpdi50ZXh0Q29udGVudCA9ICdmb28nOworICAgICAgICBjaGFyRGF0YU5vZGUgPSBkaXYu
Zmlyc3RDaGlsZDsKKyAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgV2ViS2l0TXV0YXRpb25PYnNlcnZl
cihmdW5jdGlvbihtdXRhdGlvbnMpIHsKKyAgICAgICAgICAgIHdpbmRvdy5tdXRhdGlvbnMgPSBt
dXRhdGlvbnM7CisgICAgICAgIH0pOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRpdiwge2No
YXJhY3RlckRhdGE6IHRydWUsIGNoYXJhY3RlckRhdGFPbGRWYWx1ZTogdHJ1ZSwgc3VidHJlZTog
dHJ1ZX0pOworICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGNoYXJEYXRhTm9kZSwge2NoYXJhY3Rl
ckRhdGE6IHRydWV9KTsKKyAgICAgICAgY2hhckRhdGFOb2RlLnRleHRDb250ZW50ID0gJ2Jhcic7
CisgICAgICAgIHNldFRpbWVvdXQoZmluaXNoLCAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBm
aW5pc2goKSB7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzEnKTsKKyAg
ICAgICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJjaGFyYWN0ZXJEYXRhIicpOwor
ICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLm9sZFZhbHVlJywgJyJmb28iJyk7CisgICAg
ICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBy
dW5OZXh0VGVzdCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK3ZhciB0ZXN0cyA9IFsK
KyAgICB0ZXN0QmFzaWMsCisgICAgdGVzdFdyb25nVHlwZSwKKyAgICB0ZXN0TXVsdGlwbGVPYnNl
cnZlcnMsCisgICAgdGVzdE9yZGVyaW5nV3J0RE9NU3VidHJlZU1vZGlmaWVkLAorICAgIHRlc3RP
bGRWYWx1ZSwKKyAgICB0ZXN0T2xkVmFsdWVBc1JlcXVlc3RlZCwKKyAgICB0ZXN0T2xkVmFsdWVV
bmlvbk11bHRpcGxlT2JzZXJ2YXRpb25zCitdOwogdmFyIHRlc3RJbmRleCA9IDA7CiAKIGZ1bmN0
aW9uIHJ1bk5leHRUZXN0KCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDM4ZGQ2ZDA1YWRjODRmMmNhYjA5YjNh
OWEzY2MyNTkxMDcxZTIzNTUuLjAyN2UyYjYwNzFjNDRhYjQ5ZDRhMTE1ZmEyZjdmMjA0NTc4Yzg5
ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMS0xMC0yNyAgQWRhbSBLbGVpbiAg
PGFkYW1rQGNocm9taXVtLm9yZz4KKworICAgICAgICBbTXV0YXRpb25PYnNlcnZlcnNdIFN1cHBv
cnQgY2hhcmFjdGVyRGF0YU9sZFZhbHVlIGZvciBjaGFyYWN0ZXJEYXRhIG11dGF0aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA4NjIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRvbS9DaGFyYWN0
ZXJEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omhhc09sZFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OmlzT2xkVmFsdWVSZXF1ZXN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVy
RGF0YTo6ZGlzcGF0Y2hNb2RpZmllZEV2ZW50KToKKyAgICAgICAgKiBkb20vTXV0YXRpb25SZWNv
cmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUNoYXJhY3Rl
ckRhdGEpOgorICAgICAgICAqIGRvbS9NdXRhdGlvblJlY29yZC5oOgorCiAyMDExLTEwLTMxICBB
bmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KIAogICAgICAgICBDU1NSdWxlOiBEZXZp
cnR1YWxpemUgaW5zZXJ0ZWRJbnRvUGFyZW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9DaGFyYWN0ZXJEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRh
LmNwcAppbmRleCAzN2E3ZmJmZmJhMmFhOWYzMWU5NjY5M2JiN2FjOTcyOGI1MjM0YjUzLi41ZWNk
ZTg2MjRkOGU0NWQyNTMyZWRmYzRkMjBkN2IwY2YyNzNjNTUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0No
YXJhY3RlckRhdGEuY3BwCkBAIC0xOTAsMTYgKzE5MCw1MiBAQCB2b2lkIENoYXJhY3RlckRhdGE6
OnVwZGF0ZVJlbmRlcmVyKHVuc2lnbmVkIG9mZnNldE9mUmVwbGFjZWREYXRhLCB1bnNpZ25lZCBs
ZW5ndAogICAgICAgICB0b1JlbmRlclRleHQocmVuZGVyZXIoKSktPnNldFRleHRXaXRoT2Zmc2V0
KG1fZGF0YSwgb2Zmc2V0T2ZSZXBsYWNlZERhdGEsIGxlbmd0aE9mUmVwbGFjZWREYXRhKTsKIH0K
IAotdm9pZCBDaGFyYWN0ZXJEYXRhOjpkaXNwYXRjaE1vZGlmaWVkRXZlbnQoU3RyaW5nSW1wbCog
b2xkRGF0YSkKLXsKICNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorc3RhdGljIGlubGlu
ZSBib29sIGhhc09sZFZhbHVlKE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zIG9wdGlvbnMpCit7Cisg
ICAgcmV0dXJuIG9wdGlvbnMgJiBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpDaGFyYWN0ZXJEYXRh
T2xkVmFsdWU7Cit9CisKK3N0YXRpYyBib29sIGlzT2xkVmFsdWVSZXF1ZXN0ZWQoY29uc3QgSGFz
aE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnM+JiBv
YnNlcnZlcnMpCit7CisgICAgZm9yIChIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBN
dXRhdGlvbk9ic2VydmVyT3B0aW9ucz46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBvYnNlcnZlcnMu
YmVnaW4oKTsgaXRlciAhPSBvYnNlcnZlcnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICBpZiAo
aGFzT2xkVmFsdWUoaXRlci0+c2Vjb25kKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGVucXVldWVDaGFyYWN0ZXJE
YXRhTXV0YXRpb25SZWNvcmQoTm9kZSogbm9kZSwgU3RyaW5nSW1wbCogb2xkRGF0YSkKK3sKICAg
ICBIYXNoTWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9u
cz4gb2JzZXJ2ZXJzOwotICAgIGdldFJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZShv
YnNlcnZlcnMsIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkNoYXJhY3RlckRhdGEpOwotICAgIGlm
ICghb2JzZXJ2ZXJzLmlzRW1wdHkoKSkgewotICAgICAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+
IG11dGF0aW9uID0gTXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUNoYXJhY3RlckRhdGEodGhpcyk7Ci0g
ICAgICAgIGZvciAoSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25PYnNl
cnZlck9wdGlvbnM+OjppdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJzLmJlZ2luKCk7IGl0ZXIgIT0g
b2JzZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICAgICAgICAgaXRlci0+Zmlyc3QtPmVu
cXVldWVNdXRhdGlvblJlY29yZChtdXRhdGlvbik7CisgICAgbm9kZS0+Z2V0UmVnaXN0ZXJlZE11
dGF0aW9uT2JzZXJ2ZXJzT2ZUeXBlKG9ic2VydmVycywgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6
Q2hhcmFjdGVyRGF0YSk7CisgICAgaWYgKG9ic2VydmVycy5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIEZJWE1FOiBGYWN0b3IgdGhpcyBsb2dpYyBvdXQgdG8gYXZvaWQgZHVw
bGljYXRpb24gd2l0aCBhdHRyaWJ1dGVPbGRWYWx1ZS4KKyAgICBSZWZQdHI8TXV0YXRpb25SZWNv
cmQ+IG11dGF0aW9uID0gTXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUNoYXJhY3RlckRhdGEobm9kZSwg
aXNPbGRWYWx1ZVJlcXVlc3RlZChvYnNlcnZlcnMpID8gb2xkRGF0YSA6IDApOworICAgIFJlZlB0
cjxNdXRhdGlvblJlY29yZD4gbXV0YXRpb25XaXRoTnVsbE9sZFZhbHVlOworICAgIGZvciAoSGFz
aE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnM+Ojpp
dGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gb2JzZXJ2ZXJzLmVuZCgp
OyArK2l0ZXIpIHsKKyAgICAgICAgV2ViS2l0TXV0YXRpb25PYnNlcnZlciogb2JzZXJ2ZXIgPSBp
dGVyLT5maXJzdDsKKyAgICAgICAgaWYgKGhhc09sZFZhbHVlKGl0ZXItPnNlY29uZCkpIHsKKyAg
ICAgICAgICAgIG9ic2VydmVyLT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQobXV0YXRpb24pOworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFtdXRhdGlvbldpdGhO
dWxsT2xkVmFsdWUpIHsKKyAgICAgICAgICAgIGlmIChtdXRhdGlvbi0+b2xkVmFsdWUoKS5pc051
bGwoKSkKKyAgICAgICAgICAgICAgICBtdXRhdGlvbldpdGhOdWxsT2xkVmFsdWUgPSBtdXRhdGlv
bjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtdXRhdGlvbldpdGhOdWxsT2xk
VmFsdWUgPSBNdXRhdGlvblJlY29yZDo6Y3JlYXRlV2l0aE51bGxPbGRWYWx1ZShtdXRhdGlvbik7
CisgICAgICAgIH0KKyAgICAgICAgb2JzZXJ2ZXItPmVucXVldWVNdXRhdGlvblJlY29yZChtdXRh
dGlvbldpdGhOdWxsT2xkVmFsdWUpOwogICAgIH0KK30KKyNlbmRpZiAvLyBFTkFCTEUoTVVUQVRJ
T05fT0JTRVJWRVJTKQorCit2b2lkIENoYXJhY3RlckRhdGE6OmRpc3BhdGNoTW9kaWZpZWRFdmVu
dChTdHJpbmdJbXBsKiBvbGREYXRhKQoreworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMp
CisgICAgZW5xdWV1ZUNoYXJhY3RlckRhdGFNdXRhdGlvblJlY29yZCh0aGlzLCBvbGREYXRhKTsK
ICNlbmRpZgogICAgIGlmIChwYXJlbnROb2RlKCkpCiAgICAgICAgIHBhcmVudE5vZGUoKS0+Y2hp
bGRyZW5DaGFuZ2VkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggMWRhZjM5OGUxZTc3NWVl
NjA3ODFjNTI2NmEyZTc3YzA0NTdiOWMwNC4uMzljYWJkODM2YTAzNTk3YjU5ZjQ0ZTIwMTQ2ZGZl
YzBkMDI1ZWE5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtNjM4LDYgKzYzOCw3IEBAIHN0
YXRpYyB2b2lkIGVucXVldWVBdHRyaWJ1dGVzTXV0YXRpb25SZWNvcmQoRWxlbWVudCogZWxlbWVu
dCwgY29uc3QgUXVhbGlmaWVkTmFtCiAgICAgaWYgKG9ic2VydmVycy5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIC8vIEZJWE1FOiBGYWN0b3IgdGhpcyBsb2dpYyBvdXQgdG8gYXZv
aWQgZHVwbGljYXRpb24gd2l0aCBjaGFyYWN0ZXJEYXRhT2xkVmFsdWUuCiAgICAgUmVmUHRyPE11
dGF0aW9uUmVjb3JkPiBtdXRhdGlvbiA9IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVBdHRyaWJ1dGVz
KGVsZW1lbnQsIG5hbWUsIGlzT2xkVmFsdWVSZXF1ZXN0ZWQob2JzZXJ2ZXJzKSA/IG9sZFZhbHVl
IDogbnVsbEF0b20pOwogICAgIFJlZlB0cjxNdXRhdGlvblJlY29yZD4gbXV0YXRpb25XaXRoTnVs
bE9sZFZhbHVlOwogICAgIGZvciAoSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0
YXRpb25PYnNlcnZlck9wdGlvbnM+OjppdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJzLmJlZ2luKCk7
IGl0ZXIgIT0gb2JzZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRp
b25SZWNvcmQuY3BwCmluZGV4IDA4NWRjZmFhNWM1MWVkMzAxMDE0YzM4ODc0YjNhMWY5YWJhZDAw
ODYuLjc1ZDA1ZWY4YmU4YjZhYTJlOTAyOGJlMjdkMjhhN2FkZWE3MjdkMmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL011dGF0aW9uUmVjb3JkLmNwcApAQCAtOTUsMTYgKzk1LDE5IEBAIHByaXZhdGU6CiAK
IGNsYXNzIENoYXJhY3RlckRhdGFSZWNvcmQgOiBwdWJsaWMgTXV0YXRpb25SZWNvcmQgewogcHVi
bGljOgotICAgIENoYXJhY3RlckRhdGFSZWNvcmQoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQpCisg
ICAgQ2hhcmFjdGVyRGF0YVJlY29yZChQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgU3RyaW5nSW1w
bCogb2xkVmFsdWUpCiAgICAgICAgIDogbV90YXJnZXQodGFyZ2V0KQorICAgICAgICAsIG1fb2xk
VmFsdWUob2xkVmFsdWUpCiAgICAgewogICAgIH0KIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNv
bnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgTm9kZSogdGFy
Z2V0KCkgT1ZFUlJJREUgeyByZXR1cm4gbV90YXJnZXQuZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIFN0
cmluZyBvbGRWYWx1ZSgpIE9WRVJSSURFIHsgcmV0dXJuIG1fb2xkVmFsdWU7IH0KIAogICAgIFJl
ZlB0cjxOb2RlPiBtX3RhcmdldDsKKyAgICBTdHJpbmcgbV9vbGRWYWx1ZTsKIH07CiAKIGNsYXNz
IE11dGF0aW9uUmVjb3JkV2l0aE51bGxPbGRWYWx1ZSA6IHB1YmxpYyBNdXRhdGlvblJlY29yZCB7
CkBAIC0xNTksOSArMTYyLDkgQEAgUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gTXV0YXRpb25S
ZWNvcmQ6OmNyZWF0ZUF0dHJpYnV0ZXMoUGFzc1JlZlB0cjxOb2RlPiB0YXIKICAgICByZXR1cm4g
YWRvcHRSZWYoc3RhdGljX2Nhc3Q8TXV0YXRpb25SZWNvcmQqPihuZXcgQXR0cmlidXRlc1JlY29y
ZCh0YXJnZXQsIG5hbWUsIG9sZFZhbHVlKSkpOwogfQogCi1QYXNzUmVmUHRyPE11dGF0aW9uUmVj
b3JkPiBNdXRhdGlvblJlY29yZDo6Y3JlYXRlQ2hhcmFjdGVyRGF0YShQYXNzUmVmUHRyPE5vZGU+
IHRhcmdldCkKK1Bhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IE11dGF0aW9uUmVjb3JkOjpjcmVh
dGVDaGFyYWN0ZXJEYXRhKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBTdHJpbmdJbXBsKiBvbGRW
YWx1ZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8TXV0YXRpb25SZWNvcmQq
PihuZXcgQ2hhcmFjdGVyRGF0YVJlY29yZCh0YXJnZXQpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KHN0YXRpY19jYXN0PE11dGF0aW9uUmVjb3JkKj4obmV3IENoYXJhY3RlckRhdGFSZWNvcmQodGFy
Z2V0LCBvbGRWYWx1ZSkpKTsKIH0KIAogUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gTXV0YXRp
b25SZWNvcmQ6OmNyZWF0ZVdpdGhOdWxsT2xkVmFsdWUoUGFzc1JlZlB0cjxNdXRhdGlvblJlY29y
ZD4gcmVjb3JkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3Jk
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuaAppbmRleCAzYmYwMWExOWI5
NDRhM2MxZGYwYjA3ZjkyNDcwZWQ4MzgwNjhiODZiLi44NjU2MDI5NzZmZDhiNzc2NWM5YjdhMjky
OTlmNjRlZGQ1MmMxNGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25S
ZWNvcmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuaApAQCAtNDgs
NyArNDgsNyBAQCBjbGFzcyBNdXRhdGlvblJlY29yZCA6IHB1YmxpYyBSZWZDb3VudGVkPE11dGF0
aW9uUmVjb3JkPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TXV0YXRpb25SZWNv
cmQ+IGNyZWF0ZUNoaWxkTGlzdChQYXNzUmVmUHRyPE5vZGU+IHRhcmdldCwgUGFzc1JlZlB0cjxO
b2RlTGlzdD4gYWRkZWQsIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IHJlbW92ZWQsIFBhc3NSZWZQdHI8
Tm9kZT4gcHJldmlvdXNTaWJsaW5nLCBQYXNzUmVmUHRyPE5vZGU+IG5leHRTaWJsaW5nKTsKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gY3JlYXRlQXR0cmlidXRlcyhQYXNz
UmVmUHRyPE5vZGU+IHRhcmdldCwgY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0
cmluZyYgb2xkVmFsdWUpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBj
cmVhdGVDaGFyYWN0ZXJEYXRhKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gY3JlYXRlQ2hhcmFjdGVyRGF0YShQYXNzUmVmUHRy
PE5vZGU+IHRhcmdldCwgU3RyaW5nSW1wbCogb2xkVmFsdWUpOwogCiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8TXV0YXRpb25SZWNvcmQ+IGNyZWF0ZVdpdGhOdWxsT2xkVmFsdWUoUGFzc1JlZlB0cjxN
dXRhdGlvblJlY29yZD4pOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113104</attachid>
            <date>2011-10-31 16:28:24 -0700</date>
            <delta_ts>2011-10-31 16:33:44 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-70862-20111031162823.patch</filename>
            <type>text/plain</type>
            <size>13982</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg4NzEKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAzZGZhMTY1YjkxMDQyMGViNWQwMDg1
NTM4NTRiMmNmZGFjOGViNjY2Li5kMzg5MzU0ZjUwNTczYzljMGU3OTExZmNhMTM0NWY1MDBmNDUx
MmJiIDEwMDc1NQotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMTAtMjcgIEFkYW0gS2xlaW4gIDxhZGFt
a0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW011dGF0aW9uT2JzZXJ2ZXJzXSBTdXBwb3J0IGNo
YXJhY3RlckRhdGFPbGRWYWx1ZSBmb3IgY2hhcmFjdGVyRGF0YSBtdXRhdGlvbnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwODYyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4KKworICAgICAgICBBZGRlZCBvbGRWYWx1ZSB0ZXN0IGNh
c2VzIHRvIGV4aXN0aW5nIGNoYXJhY3RlckRhdGEgdGVzdHMuCisKKyAgICAgICAgKiBmYXN0L211
dGF0aW9uL29ic2VydmUtY2hhcmFjdGVyZGF0YS1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFz
dC9tdXRhdGlvbi9vYnNlcnZlLWNoYXJhY3RlcmRhdGEuaHRtbDoKKwogMjAxMS0xMC0zMSAgS2Vu
amkgSW1hc2FraSAgPGltYXNha2lAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIERpZCByZWJhc2Vs
aW5lcyBmb3IgZmFpbGluZyB0ZXN0cyBmb3IgZnVsbHNjcmVlbiBsYXlvdXQgdGVzdHMuCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtY2hhcmFjdGVyZGF0YS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtY2hhcmFjdGVy
ZGF0YS1leHBlY3RlZC50eHQKaW5kZXggM2Q1YTc1NGZiOWE4NGNlNjQ3MGFiNjFkM2QyMTM1Y2Yz
NTU5NDU4OC4uMWRmZjNiNTVkMjc2Y2MxNWE2ODM5YmVkN2Q5N2IzODJjNmY3YWRmYiAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoYXJhY3RlcmRhdGEtZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGFyYWN0
ZXJkYXRhLWV4cGVjdGVkLnR4dApAQCAtMzMsNiArMzMsMjggQEAgUEFTUyBtdXRhdGlvbnMubGVu
Z3RoIGlzIDIKIFBBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNoYXJhY3RlckRhdGEiCiBQQVNT
IG11dGF0aW9uc1sxXS50eXBlIGlzICJhdHRyaWJ1dGVzIgogCitUZXN0aW5nIHRoYXQgb2xkVmFs
dWUgaXMgcmV0dXJuZWQgd2hlbiByZXF1ZXN0ZWQuCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMg
MgorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hhcmFjdGVyRGF0YSIKK1BBU1MgbXV0YXRp
b25zWzBdLnRhcmdldCBpcyBjaGFyRGF0YU5vZGUKK1BBU1MgbXV0YXRpb25zWzBdLm9sZFZhbHVl
IGlzICJmb28iCitQQVNTIG11dGF0aW9uc1sxXS50eXBlIGlzICJjaGFyYWN0ZXJEYXRhIgorUEFT
UyBtdXRhdGlvbnNbMV0udGFyZ2V0IGlzIGNoYXJEYXRhTm9kZQorUEFTUyBtdXRhdGlvbnNbMV0u
b2xkVmFsdWUgaXMgImJhciIKKworVGVzdGluZyB0aGF0IG9sZFZhbHVlIGlzIGRlbGl2ZXJlZCBh
cyByZXF1ZXN0ZWQgKG9yIG5vdCkuCitQQVNTIG11dGF0aW9uc1dpdGhPbGRWYWx1ZS5sZW5ndGgg
aXMgMQorUEFTUyBtdXRhdGlvbnNXaXRoT2xkVmFsdWVbMF0udHlwZSBpcyAiY2hhcmFjdGVyRGF0
YSIKK1BBU1MgbXV0YXRpb25zV2l0aE9sZFZhbHVlWzBdLm9sZFZhbHVlIGlzICJmb28iCitQQVNT
IG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hhcmFj
dGVyRGF0YSIKK1BBU1MgbXV0YXRpb25zWzBdLm9sZFZhbHVlIGlzIG51bGwKKworQW4gb2JzZXJ2
ZXIgd2l0aCBtdWx0aXBsZSBvYnNlcnZhdGlvbnMgd2lsbCBnZXQgY2hhcmFjdGVyRGF0YU9sZFZh
bHVlIGlmIGFueSBlbnRyaWVzIHJlcXVlc3QgaXQuCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMg
MQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hhcmFjdGVyRGF0YSIKK1BBU1MgbXV0YXRp
b25zWzBdLm9sZFZhbHVlIGlzICJmb28iCisKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlv
bi9vYnNlcnZlLWNoYXJhY3RlcmRhdGEuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24v
b2JzZXJ2ZS1jaGFyYWN0ZXJkYXRhLmh0bWwKaW5kZXggYWFlY2Q4MzE4ZGQ2ZWI3NzU0ZWNlZmJj
NjVkMDQ2YjIyZTlmMzI1Yi4uNzAwMWVhYWIzMDkwNmM3Y2E3MTEzYTM1OWQwMDVjMThmMmQxZWU5
MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoYXJhY3Rl
cmRhdGEuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtY2hhcmFj
dGVyZGF0YS5odG1sCkBAIC0xMiw2ICsxMiw3IEBACiB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRy
dWU7CiB2YXIgbXV0YXRpb25zOwogdmFyIG11dGF0aW9uczI7Cit2YXIgbXV0YXRpb25zV2l0aE9s
ZFZhbHVlOwogdmFyIGNhbGxzOwogdmFyIGNoYXJEYXRhTm9kZTsKIApAQCAtMTkxLDcgKzE5Miwx
MjEgQEAgZnVuY3Rpb24gdGVzdE9yZGVyaW5nV3J0RE9NU3VidHJlZU1vZGlmaWVkKCkgewogICAg
IHN0YXJ0KCk7CiB9CiAKLXZhciB0ZXN0cyA9IFt0ZXN0QmFzaWMsIHRlc3RXcm9uZ1R5cGUsIHRl
c3RNdWx0aXBsZU9ic2VydmVycywgdGVzdE9yZGVyaW5nV3J0RE9NU3VidHJlZU1vZGlmaWVkXTsK
K2Z1bmN0aW9uIHRlc3RPbGRWYWx1ZSgpIHsKKyAgICB2YXIgZGl2OworICAgIHZhciBvYnNlcnZl
cjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0
IG9sZFZhbHVlIGlzIHJldHVybmVkIHdoZW4gcmVxdWVzdGVkLicpOworICAgICAgICBtdXRhdGlv
bnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsK
KyAgICAgICAgZGl2LnRleHRDb250ZW50ID0gJ2Zvbyc7CisgICAgICAgIGNoYXJEYXRhTm9kZSA9
IGRpdi5maXJzdENoaWxkOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9i
c2VydmVyKGZ1bmN0aW9uKG11dGF0aW9ucykgeworICAgICAgICAgICAgd2luZG93Lm11dGF0aW9u
cyA9IG11dGF0aW9uczsKKyAgICAgICAgfSk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoY2hh
ckRhdGFOb2RlLCB7Y2hhcmFjdGVyRGF0YTogdHJ1ZSwgY2hhcmFjdGVyRGF0YU9sZFZhbHVlOiB0
cnVlfSk7CisgICAgICAgIGNoYXJEYXRhTm9kZS50ZXh0Q29udGVudCA9ICdiYXInOworICAgICAg
ICBjaGFyRGF0YU5vZGUudGV4dENvbnRlbnQgPSAnYmF6JzsKKyAgICAgICAgc2V0VGltZW91dChm
aW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgc2hv
dWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zWzBdLnR5cGUnLCAnImNoYXJhY3RlckRhdGEiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRh
dGlvbnNbMF0udGFyZ2V0JywgJ2NoYXJEYXRhTm9kZScpOworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zWzBdLm9sZFZhbHVlJywgJyJmb28iJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnNbMV0udHlwZScsICciY2hhcmFjdGVyRGF0YSInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0
aW9uc1sxXS50YXJnZXQnLCAnY2hhckRhdGFOb2RlJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRh
dGlvbnNbMV0ub2xkVmFsdWUnLCAnImJhciInKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVj
dCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQor
CisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVzdE9sZFZhbHVlQXNSZXF1ZXN0ZWQoKSB7
CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXJXaXRoT2xkVmFsdWU7CisgICAgdmFyIG9i
c2VydmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5n
IHRoYXQgb2xkVmFsdWUgaXMgZGVsaXZlcmVkIGFzIHJlcXVlc3RlZCAob3Igbm90KS4nKTsKKyAg
ICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgbXV0YXRpb25zV2l0aE9sZFZhbHVlID0g
bnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAg
ICAgIGRpdi50ZXh0Q29udGVudCA9ICdmb28nOworICAgICAgICBjaGFyRGF0YU5vZGUgPSBkaXYu
Zmlyc3RDaGlsZDsKKyAgICAgICAgb2JzZXJ2ZXJXaXRoT2xkVmFsdWUgPSBuZXcgV2ViS2l0TXV0
YXRpb25PYnNlcnZlcihmdW5jdGlvbihtdXRhdGlvbnMpIHsKKyAgICAgICAgICAgIHdpbmRvdy5t
dXRhdGlvbnNXaXRoT2xkVmFsdWUgPSBtdXRhdGlvbnM7CisgICAgICAgIH0pOworICAgICAgICBv
YnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG11dGF0aW9ucykg
eworICAgICAgICAgICAgd2luZG93Lm11dGF0aW9ucyA9IG11dGF0aW9uczsKKyAgICAgICAgfSk7
CisgICAgICAgIG9ic2VydmVyV2l0aE9sZFZhbHVlLm9ic2VydmUoY2hhckRhdGFOb2RlLCB7Y2hh
cmFjdGVyRGF0YTogdHJ1ZSwgY2hhcmFjdGVyRGF0YU9sZFZhbHVlOiB0cnVlfSk7CisgICAgICAg
IG9ic2VydmVyLm9ic2VydmUoY2hhckRhdGFOb2RlLCB7Y2hhcmFjdGVyRGF0YTogdHJ1ZX0pOwor
ICAgICAgICBjaGFyRGF0YU5vZGUudGV4dENvbnRlbnQgPSAnYmFyJzsKKyAgICAgICAgc2V0VGlt
ZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAg
ICAgc2hvdWxkQmUoJ211dGF0aW9uc1dpdGhPbGRWYWx1ZS5sZW5ndGgnLCAnMScpOworICAgICAg
ICBzaG91bGRCZSgnbXV0YXRpb25zV2l0aE9sZFZhbHVlWzBdLnR5cGUnLCAnImNoYXJhY3RlckRh
dGEiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNXaXRoT2xkVmFsdWVbMF0ub2xkVmFs
dWUnLCAnImZvbyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScp
OworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImNoYXJhY3RlckRhdGEi
Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ub2xkVmFsdWUnLCAnbnVsbCcpOwor
ICAgICAgICBvYnNlcnZlcldpdGhPbGRWYWx1ZS5kaXNjb25uZWN0KCk7CisgICAgICAgIG9ic2Vy
dmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVz
dCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RPbGRWYWx1ZVVu
aW9uTXVsdGlwbGVPYnNlcnZhdGlvbnMoKSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2
ZXI7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ0FuIG9ic2VydmVy
IHdpdGggbXVsdGlwbGUgb2JzZXJ2YXRpb25zIHdpbGwgZ2V0IGNoYXJhY3RlckRhdGFPbGRWYWx1
ZSBpZiBhbnkgZW50cmllcyByZXF1ZXN0IGl0LicpOworICAgICAgICBtdXRhdGlvbnMgPSBudWxs
OworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAg
ZGl2LnRleHRDb250ZW50ID0gJ2Zvbyc7CisgICAgICAgIGNoYXJEYXRhTm9kZSA9IGRpdi5maXJz
dENoaWxkOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1
bmN0aW9uKG11dGF0aW9ucykgeworICAgICAgICAgICAgd2luZG93Lm11dGF0aW9ucyA9IG11dGF0
aW9uczsKKyAgICAgICAgfSk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7Y2hhcmFj
dGVyRGF0YTogdHJ1ZSwgY2hhcmFjdGVyRGF0YU9sZFZhbHVlOiB0cnVlLCBzdWJ0cmVlOiB0cnVl
fSk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoY2hhckRhdGFOb2RlLCB7Y2hhcmFjdGVyRGF0
YTogdHJ1ZX0pOworICAgICAgICBjaGFyRGF0YU5vZGUudGV4dENvbnRlbnQgPSAnYmFyJzsKKyAg
ICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlz
aCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAgICAg
ICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImNoYXJhY3RlckRhdGEiJyk7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ub2xkVmFsdWUnLCAnImZvbyInKTsKKyAgICAgICAg
b2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5l
eHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKwordmFyIHRlc3RzID0gWworICAg
IHRlc3RCYXNpYywKKyAgICB0ZXN0V3JvbmdUeXBlLAorICAgIHRlc3RNdWx0aXBsZU9ic2VydmVy
cywKKyAgICB0ZXN0T3JkZXJpbmdXcnRET01TdWJ0cmVlTW9kaWZpZWQsCisgICAgdGVzdE9sZFZh
bHVlLAorICAgIHRlc3RPbGRWYWx1ZUFzUmVxdWVzdGVkLAorICAgIHRlc3RPbGRWYWx1ZVVuaW9u
TXVsdGlwbGVPYnNlcnZhdGlvbnMKK107CiB2YXIgdGVzdEluZGV4ID0gMDsKIAogZnVuY3Rpb24g
cnVuTmV4dFRlc3QoKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzhkZDZkMDVhZGM4NGYyY2FiMDliM2E5YTNj
YzI1OTEwNzFlMjM1NS4uZWFlODdlZTBiNjA4NzA4MDAzYTFmMjI3NzcyYmZhYWMxNDkyMzYyOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDExLTEwLTI3ICBBZGFtIEtsZWluICA8YWRh
bWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtNdXRhdGlvbk9ic2VydmVyc10gU3VwcG9ydCBj
aGFyYWN0ZXJEYXRhT2xkVmFsdWUgZm9yIGNoYXJhY3RlckRhdGEgbXV0YXRpb25zCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg2MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE9qYW4gVmFmYWkuCisKKyAgICAgICAgKiBkb20vQ2hhcmFjdGVyRGF0YS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpoYXNPbGRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpp
c09sZFZhbHVlUmVxdWVzdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OmRp
c3BhdGNoTW9kaWZpZWRFdmVudCk6CisgICAgICAgICogZG9tL011dGF0aW9uUmVjb3JkLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uUmVjb3JkOjpjcmVhdGVDaGFyYWN0ZXJEYXRhKToK
KyAgICAgICAgKiBkb20vTXV0YXRpb25SZWNvcmQuaDoKKwogMjAxMS0xMC0zMSAgQW5kcmVhcyBL
bGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ1NTUnVsZTogRGV2aXJ0dWFsaXpl
IGluc2VydGVkSW50b1BhcmVudCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hh
cmFjdGVyRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKaW5k
ZXggMzdhN2ZiZmZiYTJhYTlmMzFlOTY2OTNiYjdhYzk3MjhiNTIzNGI1My4uNWVjZGU4NjI0ZDhl
NDVkMjUzMmVkZmM0ZDIwZDdiMGNmMjczYzU1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0NoYXJhY3RlckRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJE
YXRhLmNwcApAQCAtMTkwLDE2ICsxOTAsNTIgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjp1cGRhdGVS
ZW5kZXJlcih1bnNpZ25lZCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwgdW5zaWduZWQgbGVuZ3QKICAg
ICAgICAgdG9SZW5kZXJUZXh0KHJlbmRlcmVyKCkpLT5zZXRUZXh0V2l0aE9mZnNldChtX2RhdGEs
IG9mZnNldE9mUmVwbGFjZWREYXRhLCBsZW5ndGhPZlJlcGxhY2VkRGF0YSk7CiB9CiAKLXZvaWQg
Q2hhcmFjdGVyRGF0YTo6ZGlzcGF0Y2hNb2RpZmllZEV2ZW50KFN0cmluZ0ltcGwqIG9sZERhdGEp
Ci17CiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKK3N0YXRpYyBpbmxpbmUgYm9vbCBo
YXNPbGRWYWx1ZShNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zKQoreworICAgIHJldHVy
biBvcHRpb25zICYgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6Q2hhcmFjdGVyRGF0YU9sZFZhbHVl
OworfQorCitzdGF0aWMgYm9vbCBpc09sZFZhbHVlUmVxdWVzdGVkKGNvbnN0IEhhc2hNYXA8V2Vi
S2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zPiYgb2JzZXJ2ZXJz
KQoreworICAgIGZvciAoSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25P
YnNlcnZlck9wdGlvbnM+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJzLmJlZ2luKCk7
IGl0ZXIgIT0gb2JzZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGhhc09sZFZh
bHVlKGl0ZXItPnNlY29uZCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBlbnF1ZXVlQ2hhcmFjdGVyRGF0YU11dGF0
aW9uUmVjb3JkKE5vZGUqIG5vZGUsIFN0cmluZ0ltcGwqIG9sZERhdGEpCit7CiAgICAgSGFzaE1h
cDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnM+IG9ic2Vy
dmVyczsKLSAgICBnZXRSZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnNPZlR5cGUob2JzZXJ2ZXJz
LCBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpDaGFyYWN0ZXJEYXRhKTsKLSAgICBpZiAoIW9ic2Vy
dmVycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtdXRhdGlv
biA9IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVDaGFyYWN0ZXJEYXRhKHRoaXMpOwotICAgICAgICBm
b3IgKEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uT2JzZXJ2ZXJPcHRp
b25zPjo6aXRlcmF0b3IgaXRlciA9IG9ic2VydmVycy5iZWdpbigpOyBpdGVyICE9IG9ic2VydmVy
cy5lbmQoKTsgKytpdGVyKQotICAgICAgICAgICAgICAgIGl0ZXItPmZpcnN0LT5lbnF1ZXVlTXV0
YXRpb25SZWNvcmQobXV0YXRpb24pOworICAgIG5vZGUtPmdldFJlZ2lzdGVyZWRNdXRhdGlvbk9i
c2VydmVyc09mVHlwZShvYnNlcnZlcnMsIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkNoYXJhY3Rl
ckRhdGEpOworICAgIGlmIChvYnNlcnZlcnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBGSVhNRTogRmFjdG9yIHRoaXMgbG9naWMgb3V0IHRvIGF2b2lkIGR1cGxpY2F0aW9u
IHdpdGggYXR0cmlidXRlT2xkVmFsdWUuCisgICAgUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtdXRh
dGlvbiA9IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVDaGFyYWN0ZXJEYXRhKG5vZGUsIGlzT2xkVmFs
dWVSZXF1ZXN0ZWQob2JzZXJ2ZXJzKSA/IG9sZERhdGEgOiAwKTsKKyAgICBSZWZQdHI8TXV0YXRp
b25SZWNvcmQ+IG11dGF0aW9uV2l0aE51bGxPbGRWYWx1ZTsKKyAgICBmb3IgKEhhc2hNYXA8V2Vi
S2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zPjo6aXRlcmF0b3Ig
aXRlciA9IG9ic2VydmVycy5iZWdpbigpOyBpdGVyICE9IG9ic2VydmVycy5lbmQoKTsgKytpdGVy
KSB7CisgICAgICAgIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqIG9ic2VydmVyID0gaXRlci0+Zmly
c3Q7CisgICAgICAgIGlmIChoYXNPbGRWYWx1ZShpdGVyLT5zZWNvbmQpKSB7CisgICAgICAgICAg
ICBvYnNlcnZlci0+ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKG11dGF0aW9uKTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmICghbXV0YXRpb25XaXRoTnVsbE9sZFZh
bHVlKSB7CisgICAgICAgICAgICBpZiAobXV0YXRpb24tPm9sZFZhbHVlKCkuaXNOdWxsKCkpCisg
ICAgICAgICAgICAgICAgbXV0YXRpb25XaXRoTnVsbE9sZFZhbHVlID0gbXV0YXRpb247CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbXV0YXRpb25XaXRoTnVsbE9sZFZhbHVlID0g
TXV0YXRpb25SZWNvcmQ6OmNyZWF0ZVdpdGhOdWxsT2xkVmFsdWUobXV0YXRpb24pOworICAgICAg
ICB9CisgICAgICAgIG9ic2VydmVyLT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQobXV0YXRpb25XaXRo
TnVsbE9sZFZhbHVlKTsKICAgICB9Cit9CisjZW5kaWYgLy8gRU5BQkxFKE1VVEFUSU9OX09CU0VS
VkVSUykKKwordm9pZCBDaGFyYWN0ZXJEYXRhOjpkaXNwYXRjaE1vZGlmaWVkRXZlbnQoU3RyaW5n
SW1wbCogb2xkRGF0YSkKK3sKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIGVu
cXVldWVDaGFyYWN0ZXJEYXRhTXV0YXRpb25SZWNvcmQodGhpcywgb2xkRGF0YSk7CiAjZW5kaWYK
ICAgICBpZiAocGFyZW50Tm9kZSgpKQogICAgICAgICBwYXJlbnROb2RlKCktPmNoaWxkcmVuQ2hh
bmdlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDFkYWYzOThlMWU3NzVlZTYwNzgxYzUy
NjZhMmU3N2MwNDU3YjljMDQuLjM5Y2FiZDgzNmEwMzU5N2I1OWY0NGUyMDE0NmRmZWMwZDAyNWVh
OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTYzOCw2ICs2MzgsNyBAQCBzdGF0aWMgdm9p
ZCBlbnF1ZXVlQXR0cmlidXRlc011dGF0aW9uUmVjb3JkKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0
IFF1YWxpZmllZE5hbQogICAgIGlmIChvYnNlcnZlcnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAKKyAgICAvLyBGSVhNRTogRmFjdG9yIHRoaXMgbG9naWMgb3V0IHRvIGF2b2lkIGR1cGxp
Y2F0aW9uIHdpdGggY2hhcmFjdGVyRGF0YU9sZFZhbHVlLgogICAgIFJlZlB0cjxNdXRhdGlvblJl
Y29yZD4gbXV0YXRpb24gPSBNdXRhdGlvblJlY29yZDo6Y3JlYXRlQXR0cmlidXRlcyhlbGVtZW50
LCBuYW1lLCBpc09sZFZhbHVlUmVxdWVzdGVkKG9ic2VydmVycykgPyBvbGRWYWx1ZSA6IG51bGxB
dG9tKTsKICAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uV2l0aE51bGxPbGRWYWx1
ZTsKICAgICBmb3IgKEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uT2Jz
ZXJ2ZXJPcHRpb25zPjo6aXRlcmF0b3IgaXRlciA9IG9ic2VydmVycy5iZWdpbigpOyBpdGVyICE9
IG9ic2VydmVycy5lbmQoKTsgKytpdGVyKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vTXV0YXRpb25SZWNvcmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uUmVjb3Jk
LmNwcAppbmRleCAwODVkY2ZhYTVjNTFlZDMwMTAxNGMzODg3NGIzYTFmOWFiYWQwMDg2Li4xZmVk
ZDFkYmZhMTY1ZjA5MDMxZDVjYzdjYjU4MjdjMWI3NjJiMmIwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9N
dXRhdGlvblJlY29yZC5jcHAKQEAgLTk1LDE2ICs5NSwxOSBAQCBwcml2YXRlOgogCiBjbGFzcyBD
aGFyYWN0ZXJEYXRhUmVjb3JkIDogcHVibGljIE11dGF0aW9uUmVjb3JkIHsKIHB1YmxpYzoKLSAg
ICBDaGFyYWN0ZXJEYXRhUmVjb3JkKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KQorICAgIENoYXJh
Y3RlckRhdGFSZWNvcmQoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgb2xk
VmFsdWUpCiAgICAgICAgIDogbV90YXJnZXQodGFyZ2V0KQorICAgICAgICAsIG1fb2xkVmFsdWUo
b2xkVmFsdWUpCiAgICAgewogICAgIH0KIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IEF0
b21pY1N0cmluZyYgdHlwZSgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgTm9kZSogdGFyZ2V0KCkg
T1ZFUlJJREUgeyByZXR1cm4gbV90YXJnZXQuZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBv
bGRWYWx1ZSgpIE9WRVJSSURFIHsgcmV0dXJuIG1fb2xkVmFsdWU7IH0KIAogICAgIFJlZlB0cjxO
b2RlPiBtX3RhcmdldDsKKyAgICBTdHJpbmcgbV9vbGRWYWx1ZTsKIH07CiAKIGNsYXNzIE11dGF0
aW9uUmVjb3JkV2l0aE51bGxPbGRWYWx1ZSA6IHB1YmxpYyBNdXRhdGlvblJlY29yZCB7CkBAIC0x
NTksOSArMTYyLDkgQEAgUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gTXV0YXRpb25SZWNvcmQ6
OmNyZWF0ZUF0dHJpYnV0ZXMoUGFzc1JlZlB0cjxOb2RlPiB0YXIKICAgICByZXR1cm4gYWRvcHRS
ZWYoc3RhdGljX2Nhc3Q8TXV0YXRpb25SZWNvcmQqPihuZXcgQXR0cmlidXRlc1JlY29yZCh0YXJn
ZXQsIG5hbWUsIG9sZFZhbHVlKSkpOwogfQogCi1QYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBN
dXRhdGlvblJlY29yZDo6Y3JlYXRlQ2hhcmFjdGVyRGF0YShQYXNzUmVmUHRyPE5vZGU+IHRhcmdl
dCkKK1Bhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IE11dGF0aW9uUmVjb3JkOjpjcmVhdGVDaGFy
YWN0ZXJEYXRhKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVl
KQogewotICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxNdXRhdGlvblJlY29yZCo+KG5l
dyBDaGFyYWN0ZXJEYXRhUmVjb3JkKHRhcmdldCkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoc3Rh
dGljX2Nhc3Q8TXV0YXRpb25SZWNvcmQqPihuZXcgQ2hhcmFjdGVyRGF0YVJlY29yZCh0YXJnZXQs
IG9sZFZhbHVlKSkpOwogfQogCiBQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBNdXRhdGlvblJl
Y29yZDo6Y3JlYXRlV2l0aE51bGxPbGRWYWx1ZShQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBy
ZWNvcmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCmluZGV4IDNiZjAxYTE5Yjk0NGEz
YzFkZjBiMDdmOTI0NzBlZDgzODA2OGI4NmIuLjcwNDBlOWQ4OWE4ZDFjN2RiZjcyMGMwZDRjODVi
ZTA2ZjJlZGVjOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29y
ZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCkBAIC00OCw3ICs0
OCw3IEBAIGNsYXNzIE11dGF0aW9uUmVjb3JkIDogcHVibGljIFJlZkNvdW50ZWQ8TXV0YXRpb25S
ZWNvcmQ+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4g
Y3JlYXRlQ2hpbGRMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBQYXNzUmVmUHRyPE5vZGVM
aXN0PiBhZGRlZCwgUGFzc1JlZlB0cjxOb2RlTGlzdD4gcmVtb3ZlZCwgUGFzc1JlZlB0cjxOb2Rl
PiBwcmV2aW91c1NpYmxpbmcsIFBhc3NSZWZQdHI8Tm9kZT4gbmV4dFNpYmxpbmcpOwogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBjcmVhdGVBdHRyaWJ1dGVzKFBhc3NSZWZQ
dHI8Tm9kZT4gdGFyZ2V0LCBjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5n
JiBvbGRWYWx1ZSk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IGNyZWF0
ZUNoYXJhY3RlckRhdGEoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPE11dGF0aW9uUmVjb3JkPiBjcmVhdGVDaGFyYWN0ZXJEYXRhKFBhc3NSZWZQdHI8Tm9k
ZT4gdGFyZ2V0LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlKTsKIAogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPE11dGF0aW9uUmVjb3JkPiBjcmVhdGVXaXRoTnVsbE9sZFZhbHVlKFBhc3NSZWZQdHI8TXV0
YXRpb25SZWNvcmQ+KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113105</attachid>
            <date>2011-10-31 16:33:48 -0700</date>
            <delta_ts>2011-10-31 16:47:59 -0700</delta_ts>
            <desc>More const String&amp;ification</desc>
            <filename>bug-70862-20111031163347.patch</filename>
            <type>text/plain</type>
            <size>13991</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg4NzEKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAzZGZhMTY1YjkxMDQyMGViNWQwMDg1
NTM4NTRiMmNmZGFjOGViNjY2Li5kMzg5MzU0ZjUwNTczYzljMGU3OTExZmNhMTM0NWY1MDBmNDUx
MmJiIDEwMDc1NQotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMTAtMjcgIEFkYW0gS2xlaW4gIDxhZGFt
a0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW011dGF0aW9uT2JzZXJ2ZXJzXSBTdXBwb3J0IGNo
YXJhY3RlckRhdGFPbGRWYWx1ZSBmb3IgY2hhcmFjdGVyRGF0YSBtdXRhdGlvbnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwODYyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4KKworICAgICAgICBBZGRlZCBvbGRWYWx1ZSB0ZXN0IGNh
c2VzIHRvIGV4aXN0aW5nIGNoYXJhY3RlckRhdGEgdGVzdHMuCisKKyAgICAgICAgKiBmYXN0L211
dGF0aW9uL29ic2VydmUtY2hhcmFjdGVyZGF0YS1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFz
dC9tdXRhdGlvbi9vYnNlcnZlLWNoYXJhY3RlcmRhdGEuaHRtbDoKKwogMjAxMS0xMC0zMSAgS2Vu
amkgSW1hc2FraSAgPGltYXNha2lAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIERpZCByZWJhc2Vs
aW5lcyBmb3IgZmFpbGluZyB0ZXN0cyBmb3IgZnVsbHNjcmVlbiBsYXlvdXQgdGVzdHMuCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtY2hhcmFjdGVyZGF0YS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtY2hhcmFjdGVy
ZGF0YS1leHBlY3RlZC50eHQKaW5kZXggM2Q1YTc1NGZiOWE4NGNlNjQ3MGFiNjFkM2QyMTM1Y2Yz
NTU5NDU4OC4uMWRmZjNiNTVkMjc2Y2MxNWE2ODM5YmVkN2Q5N2IzODJjNmY3YWRmYiAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoYXJhY3RlcmRhdGEtZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGFyYWN0
ZXJkYXRhLWV4cGVjdGVkLnR4dApAQCAtMzMsNiArMzMsMjggQEAgUEFTUyBtdXRhdGlvbnMubGVu
Z3RoIGlzIDIKIFBBU1MgbXV0YXRpb25zWzBdLnR5cGUgaXMgImNoYXJhY3RlckRhdGEiCiBQQVNT
IG11dGF0aW9uc1sxXS50eXBlIGlzICJhdHRyaWJ1dGVzIgogCitUZXN0aW5nIHRoYXQgb2xkVmFs
dWUgaXMgcmV0dXJuZWQgd2hlbiByZXF1ZXN0ZWQuCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMg
MgorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hhcmFjdGVyRGF0YSIKK1BBU1MgbXV0YXRp
b25zWzBdLnRhcmdldCBpcyBjaGFyRGF0YU5vZGUKK1BBU1MgbXV0YXRpb25zWzBdLm9sZFZhbHVl
IGlzICJmb28iCitQQVNTIG11dGF0aW9uc1sxXS50eXBlIGlzICJjaGFyYWN0ZXJEYXRhIgorUEFT
UyBtdXRhdGlvbnNbMV0udGFyZ2V0IGlzIGNoYXJEYXRhTm9kZQorUEFTUyBtdXRhdGlvbnNbMV0u
b2xkVmFsdWUgaXMgImJhciIKKworVGVzdGluZyB0aGF0IG9sZFZhbHVlIGlzIGRlbGl2ZXJlZCBh
cyByZXF1ZXN0ZWQgKG9yIG5vdCkuCitQQVNTIG11dGF0aW9uc1dpdGhPbGRWYWx1ZS5sZW5ndGgg
aXMgMQorUEFTUyBtdXRhdGlvbnNXaXRoT2xkVmFsdWVbMF0udHlwZSBpcyAiY2hhcmFjdGVyRGF0
YSIKK1BBU1MgbXV0YXRpb25zV2l0aE9sZFZhbHVlWzBdLm9sZFZhbHVlIGlzICJmb28iCitQQVNT
IG11dGF0aW9ucy5sZW5ndGggaXMgMQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hhcmFj
dGVyRGF0YSIKK1BBU1MgbXV0YXRpb25zWzBdLm9sZFZhbHVlIGlzIG51bGwKKworQW4gb2JzZXJ2
ZXIgd2l0aCBtdWx0aXBsZSBvYnNlcnZhdGlvbnMgd2lsbCBnZXQgY2hhcmFjdGVyRGF0YU9sZFZh
bHVlIGlmIGFueSBlbnRyaWVzIHJlcXVlc3QgaXQuCitQQVNTIG11dGF0aW9ucy5sZW5ndGggaXMg
MQorUEFTUyBtdXRhdGlvbnNbMF0udHlwZSBpcyAiY2hhcmFjdGVyRGF0YSIKK1BBU1MgbXV0YXRp
b25zWzBdLm9sZFZhbHVlIGlzICJmb28iCisKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlv
bi9vYnNlcnZlLWNoYXJhY3RlcmRhdGEuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24v
b2JzZXJ2ZS1jaGFyYWN0ZXJkYXRhLmh0bWwKaW5kZXggYWFlY2Q4MzE4ZGQ2ZWI3NzU0ZWNlZmJj
NjVkMDQ2YjIyZTlmMzI1Yi4uNzAwMWVhYWIzMDkwNmM3Y2E3MTEzYTM1OWQwMDVjMThmMmQxZWU5
MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoYXJhY3Rl
cmRhdGEuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtY2hhcmFj
dGVyZGF0YS5odG1sCkBAIC0xMiw2ICsxMiw3IEBACiB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRy
dWU7CiB2YXIgbXV0YXRpb25zOwogdmFyIG11dGF0aW9uczI7Cit2YXIgbXV0YXRpb25zV2l0aE9s
ZFZhbHVlOwogdmFyIGNhbGxzOwogdmFyIGNoYXJEYXRhTm9kZTsKIApAQCAtMTkxLDcgKzE5Miwx
MjEgQEAgZnVuY3Rpb24gdGVzdE9yZGVyaW5nV3J0RE9NU3VidHJlZU1vZGlmaWVkKCkgewogICAg
IHN0YXJ0KCk7CiB9CiAKLXZhciB0ZXN0cyA9IFt0ZXN0QmFzaWMsIHRlc3RXcm9uZ1R5cGUsIHRl
c3RNdWx0aXBsZU9ic2VydmVycywgdGVzdE9yZGVyaW5nV3J0RE9NU3VidHJlZU1vZGlmaWVkXTsK
K2Z1bmN0aW9uIHRlc3RPbGRWYWx1ZSgpIHsKKyAgICB2YXIgZGl2OworICAgIHZhciBvYnNlcnZl
cjsKKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0aGF0
IG9sZFZhbHVlIGlzIHJldHVybmVkIHdoZW4gcmVxdWVzdGVkLicpOworICAgICAgICBtdXRhdGlv
bnMgPSBudWxsOworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsK
KyAgICAgICAgZGl2LnRleHRDb250ZW50ID0gJ2Zvbyc7CisgICAgICAgIGNoYXJEYXRhTm9kZSA9
IGRpdi5maXJzdENoaWxkOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9i
c2VydmVyKGZ1bmN0aW9uKG11dGF0aW9ucykgeworICAgICAgICAgICAgd2luZG93Lm11dGF0aW9u
cyA9IG11dGF0aW9uczsKKyAgICAgICAgfSk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoY2hh
ckRhdGFOb2RlLCB7Y2hhcmFjdGVyRGF0YTogdHJ1ZSwgY2hhcmFjdGVyRGF0YU9sZFZhbHVlOiB0
cnVlfSk7CisgICAgICAgIGNoYXJEYXRhTm9kZS50ZXh0Q29udGVudCA9ICdiYXInOworICAgICAg
ICBjaGFyRGF0YU5vZGUudGV4dENvbnRlbnQgPSAnYmF6JzsKKyAgICAgICAgc2V0VGltZW91dChm
aW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAgICAgc2hv
dWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMicpOworICAgICAgICBzaG91bGRCZSgnbXV0YXRp
b25zWzBdLnR5cGUnLCAnImNoYXJhY3RlckRhdGEiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRh
dGlvbnNbMF0udGFyZ2V0JywgJ2NoYXJEYXRhTm9kZScpOworICAgICAgICBzaG91bGRCZSgnbXV0
YXRpb25zWzBdLm9sZFZhbHVlJywgJyJmb28iJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlv
bnNbMV0udHlwZScsICciY2hhcmFjdGVyRGF0YSInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0
aW9uc1sxXS50YXJnZXQnLCAnY2hhckRhdGFOb2RlJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRh
dGlvbnNbMV0ub2xkVmFsdWUnLCAnImJhciInKTsKKyAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVj
dCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CisgICAgfQor
CisgICAgc3RhcnQoKTsKK30KKworZnVuY3Rpb24gdGVzdE9sZFZhbHVlQXNSZXF1ZXN0ZWQoKSB7
CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2ZXJXaXRoT2xkVmFsdWU7CisgICAgdmFyIG9i
c2VydmVyOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgICAgIGRlYnVnKCdUZXN0aW5n
IHRoYXQgb2xkVmFsdWUgaXMgZGVsaXZlcmVkIGFzIHJlcXVlc3RlZCAob3Igbm90KS4nKTsKKyAg
ICAgICAgbXV0YXRpb25zID0gbnVsbDsKKyAgICAgICAgbXV0YXRpb25zV2l0aE9sZFZhbHVlID0g
bnVsbDsKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAg
ICAgIGRpdi50ZXh0Q29udGVudCA9ICdmb28nOworICAgICAgICBjaGFyRGF0YU5vZGUgPSBkaXYu
Zmlyc3RDaGlsZDsKKyAgICAgICAgb2JzZXJ2ZXJXaXRoT2xkVmFsdWUgPSBuZXcgV2ViS2l0TXV0
YXRpb25PYnNlcnZlcihmdW5jdGlvbihtdXRhdGlvbnMpIHsKKyAgICAgICAgICAgIHdpbmRvdy5t
dXRhdGlvbnNXaXRoT2xkVmFsdWUgPSBtdXRhdGlvbnM7CisgICAgICAgIH0pOworICAgICAgICBv
YnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG11dGF0aW9ucykg
eworICAgICAgICAgICAgd2luZG93Lm11dGF0aW9ucyA9IG11dGF0aW9uczsKKyAgICAgICAgfSk7
CisgICAgICAgIG9ic2VydmVyV2l0aE9sZFZhbHVlLm9ic2VydmUoY2hhckRhdGFOb2RlLCB7Y2hh
cmFjdGVyRGF0YTogdHJ1ZSwgY2hhcmFjdGVyRGF0YU9sZFZhbHVlOiB0cnVlfSk7CisgICAgICAg
IG9ic2VydmVyLm9ic2VydmUoY2hhckRhdGFOb2RlLCB7Y2hhcmFjdGVyRGF0YTogdHJ1ZX0pOwor
ICAgICAgICBjaGFyRGF0YU5vZGUudGV4dENvbnRlbnQgPSAnYmFyJzsKKyAgICAgICAgc2V0VGlt
ZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICAg
ICAgc2hvdWxkQmUoJ211dGF0aW9uc1dpdGhPbGRWYWx1ZS5sZW5ndGgnLCAnMScpOworICAgICAg
ICBzaG91bGRCZSgnbXV0YXRpb25zV2l0aE9sZFZhbHVlWzBdLnR5cGUnLCAnImNoYXJhY3RlckRh
dGEiJyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNXaXRoT2xkVmFsdWVbMF0ub2xkVmFs
dWUnLCAnImZvbyInKTsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScp
OworICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImNoYXJhY3RlckRhdGEi
Jyk7CisgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ub2xkVmFsdWUnLCAnbnVsbCcpOwor
ICAgICAgICBvYnNlcnZlcldpdGhPbGRWYWx1ZS5kaXNjb25uZWN0KCk7CisgICAgICAgIG9ic2Vy
dmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgZGVidWcoJycpOworICAgICAgICBydW5OZXh0VGVz
dCgpOworICAgIH0KKworICAgIHN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RPbGRWYWx1ZVVu
aW9uTXVsdGlwbGVPYnNlcnZhdGlvbnMoKSB7CisgICAgdmFyIGRpdjsKKyAgICB2YXIgb2JzZXJ2
ZXI7CisKKyAgICBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICAgICAgZGVidWcoJ0FuIG9ic2VydmVy
IHdpdGggbXVsdGlwbGUgb2JzZXJ2YXRpb25zIHdpbGwgZ2V0IGNoYXJhY3RlckRhdGFPbGRWYWx1
ZSBpZiBhbnkgZW50cmllcyByZXF1ZXN0IGl0LicpOworICAgICAgICBtdXRhdGlvbnMgPSBudWxs
OworICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAg
ZGl2LnRleHRDb250ZW50ID0gJ2Zvbyc7CisgICAgICAgIGNoYXJEYXRhTm9kZSA9IGRpdi5maXJz
dENoaWxkOworICAgICAgICBvYnNlcnZlciA9IG5ldyBXZWJLaXRNdXRhdGlvbk9ic2VydmVyKGZ1
bmN0aW9uKG11dGF0aW9ucykgeworICAgICAgICAgICAgd2luZG93Lm11dGF0aW9ucyA9IG11dGF0
aW9uczsKKyAgICAgICAgfSk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZGl2LCB7Y2hhcmFj
dGVyRGF0YTogdHJ1ZSwgY2hhcmFjdGVyRGF0YU9sZFZhbHVlOiB0cnVlLCBzdWJ0cmVlOiB0cnVl
fSk7CisgICAgICAgIG9ic2VydmVyLm9ic2VydmUoY2hhckRhdGFOb2RlLCB7Y2hhcmFjdGVyRGF0
YTogdHJ1ZX0pOworICAgICAgICBjaGFyRGF0YU5vZGUudGV4dENvbnRlbnQgPSAnYmFyJzsKKyAg
ICAgICAgc2V0VGltZW91dChmaW5pc2gsIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlz
aCgpIHsKKyAgICAgICAgc2hvdWxkQmUoJ211dGF0aW9ucy5sZW5ndGgnLCAnMScpOworICAgICAg
ICBzaG91bGRCZSgnbXV0YXRpb25zWzBdLnR5cGUnLCAnImNoYXJhY3RlckRhdGEiJyk7CisgICAg
ICAgIHNob3VsZEJlKCdtdXRhdGlvbnNbMF0ub2xkVmFsdWUnLCAnImZvbyInKTsKKyAgICAgICAg
b2JzZXJ2ZXIuZGlzY29ubmVjdCgpOworICAgICAgICBkZWJ1ZygnJyk7CisgICAgICAgIHJ1bk5l
eHRUZXN0KCk7CisgICAgfQorCisgICAgc3RhcnQoKTsKK30KKwordmFyIHRlc3RzID0gWworICAg
IHRlc3RCYXNpYywKKyAgICB0ZXN0V3JvbmdUeXBlLAorICAgIHRlc3RNdWx0aXBsZU9ic2VydmVy
cywKKyAgICB0ZXN0T3JkZXJpbmdXcnRET01TdWJ0cmVlTW9kaWZpZWQsCisgICAgdGVzdE9sZFZh
bHVlLAorICAgIHRlc3RPbGRWYWx1ZUFzUmVxdWVzdGVkLAorICAgIHRlc3RPbGRWYWx1ZVVuaW9u
TXVsdGlwbGVPYnNlcnZhdGlvbnMKK107CiB2YXIgdGVzdEluZGV4ID0gMDsKIAogZnVuY3Rpb24g
cnVuTmV4dFRlc3QoKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzhkZDZkMDVhZGM4NGYyY2FiMDliM2E5YTNj
YzI1OTEwNzFlMjM1NS4uZWFlODdlZTBiNjA4NzA4MDAzYTFmMjI3NzcyYmZhYWMxNDkyMzYyOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDExLTEwLTI3ICBBZGFtIEtsZWluICA8YWRh
bWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtNdXRhdGlvbk9ic2VydmVyc10gU3VwcG9ydCBj
aGFyYWN0ZXJEYXRhT2xkVmFsdWUgZm9yIGNoYXJhY3RlckRhdGEgbXV0YXRpb25zCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg2MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE9qYW4gVmFmYWkuCisKKyAgICAgICAgKiBkb20vQ2hhcmFjdGVyRGF0YS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpoYXNPbGRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpp
c09sZFZhbHVlUmVxdWVzdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OmRp
c3BhdGNoTW9kaWZpZWRFdmVudCk6CisgICAgICAgICogZG9tL011dGF0aW9uUmVjb3JkLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uUmVjb3JkOjpjcmVhdGVDaGFyYWN0ZXJEYXRhKToK
KyAgICAgICAgKiBkb20vTXV0YXRpb25SZWNvcmQuaDoKKwogMjAxMS0xMC0zMSAgQW5kcmVhcyBL
bGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ1NTUnVsZTogRGV2aXJ0dWFsaXpl
IGluc2VydGVkSW50b1BhcmVudCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hh
cmFjdGVyRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKaW5k
ZXggMzdhN2ZiZmZiYTJhYTlmMzFlOTY2OTNiYjdhYzk3MjhiNTIzNGI1My4uNWQ5YzFiN2Y3MmYz
OTlhZDY5Nzk4OTMwYzUxYWVhOWE5NWNmZGQyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0NoYXJhY3RlckRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJE
YXRhLmNwcApAQCAtMTkwLDE2ICsxOTAsNTIgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjp1cGRhdGVS
ZW5kZXJlcih1bnNpZ25lZCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwgdW5zaWduZWQgbGVuZ3QKICAg
ICAgICAgdG9SZW5kZXJUZXh0KHJlbmRlcmVyKCkpLT5zZXRUZXh0V2l0aE9mZnNldChtX2RhdGEs
IG9mZnNldE9mUmVwbGFjZWREYXRhLCBsZW5ndGhPZlJlcGxhY2VkRGF0YSk7CiB9CiAKLXZvaWQg
Q2hhcmFjdGVyRGF0YTo6ZGlzcGF0Y2hNb2RpZmllZEV2ZW50KFN0cmluZ0ltcGwqIG9sZERhdGEp
Ci17CiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKK3N0YXRpYyBpbmxpbmUgYm9vbCBo
YXNPbGRWYWx1ZShNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zKQoreworICAgIHJldHVy
biBvcHRpb25zICYgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6Q2hhcmFjdGVyRGF0YU9sZFZhbHVl
OworfQorCitzdGF0aWMgYm9vbCBpc09sZFZhbHVlUmVxdWVzdGVkKGNvbnN0IEhhc2hNYXA8V2Vi
S2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zPiYgb2JzZXJ2ZXJz
KQoreworICAgIGZvciAoSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25P
YnNlcnZlck9wdGlvbnM+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJzLmJlZ2luKCk7
IGl0ZXIgIT0gb2JzZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGhhc09sZFZh
bHVlKGl0ZXItPnNlY29uZCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBlbnF1ZXVlQ2hhcmFjdGVyRGF0YU11dGF0
aW9uUmVjb3JkKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgb2xkRGF0YSkKK3sKICAgICBIYXNo
TWFwPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucz4gb2Jz
ZXJ2ZXJzOwotICAgIGdldFJlZ2lzdGVyZWRNdXRhdGlvbk9ic2VydmVyc09mVHlwZShvYnNlcnZl
cnMsIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkNoYXJhY3RlckRhdGEpOwotICAgIGlmICghb2Jz
ZXJ2ZXJzLmlzRW1wdHkoKSkgewotICAgICAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0
aW9uID0gTXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUNoYXJhY3RlckRhdGEodGhpcyk7Ci0gICAgICAg
IGZvciAoSGFzaE1hcDxXZWJLaXRNdXRhdGlvbk9ic2VydmVyKiwgTXV0YXRpb25PYnNlcnZlck9w
dGlvbnM+OjppdGVyYXRvciBpdGVyID0gb2JzZXJ2ZXJzLmJlZ2luKCk7IGl0ZXIgIT0gb2JzZXJ2
ZXJzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICAgICAgICAgaXRlci0+Zmlyc3QtPmVucXVldWVN
dXRhdGlvblJlY29yZChtdXRhdGlvbik7CisgICAgbm9kZS0+Z2V0UmVnaXN0ZXJlZE11dGF0aW9u
T2JzZXJ2ZXJzT2ZUeXBlKG9ic2VydmVycywgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6Q2hhcmFj
dGVyRGF0YSk7CisgICAgaWYgKG9ic2VydmVycy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIEZJWE1FOiBGYWN0b3IgdGhpcyBsb2dpYyBvdXQgdG8gYXZvaWQgZHVwbGljYXRp
b24gd2l0aCBhdHRyaWJ1dGVPbGRWYWx1ZS4KKyAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11
dGF0aW9uID0gTXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUNoYXJhY3RlckRhdGEobm9kZSwgaXNPbGRW
YWx1ZVJlcXVlc3RlZChvYnNlcnZlcnMpID8gb2xkRGF0YSA6IFN0cmluZygpKTsKKyAgICBSZWZQ
dHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uV2l0aE51bGxPbGRWYWx1ZTsKKyAgICBmb3IgKEhh
c2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zPjo6
aXRlcmF0b3IgaXRlciA9IG9ic2VydmVycy5iZWdpbigpOyBpdGVyICE9IG9ic2VydmVycy5lbmQo
KTsgKytpdGVyKSB7CisgICAgICAgIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIqIG9ic2VydmVyID0g
aXRlci0+Zmlyc3Q7CisgICAgICAgIGlmIChoYXNPbGRWYWx1ZShpdGVyLT5zZWNvbmQpKSB7Cisg
ICAgICAgICAgICBvYnNlcnZlci0+ZW5xdWV1ZU11dGF0aW9uUmVjb3JkKG11dGF0aW9uKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmICghbXV0YXRpb25XaXRo
TnVsbE9sZFZhbHVlKSB7CisgICAgICAgICAgICBpZiAobXV0YXRpb24tPm9sZFZhbHVlKCkuaXNO
dWxsKCkpCisgICAgICAgICAgICAgICAgbXV0YXRpb25XaXRoTnVsbE9sZFZhbHVlID0gbXV0YXRp
b247CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbXV0YXRpb25XaXRoTnVsbE9s
ZFZhbHVlID0gTXV0YXRpb25SZWNvcmQ6OmNyZWF0ZVdpdGhOdWxsT2xkVmFsdWUobXV0YXRpb24p
OworICAgICAgICB9CisgICAgICAgIG9ic2VydmVyLT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQobXV0
YXRpb25XaXRoTnVsbE9sZFZhbHVlKTsKICAgICB9Cit9CisjZW5kaWYgLy8gRU5BQkxFKE1VVEFU
SU9OX09CU0VSVkVSUykKKwordm9pZCBDaGFyYWN0ZXJEYXRhOjpkaXNwYXRjaE1vZGlmaWVkRXZl
bnQoU3RyaW5nSW1wbCogb2xkRGF0YSkKK3sKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJT
KQorICAgIGVucXVldWVDaGFyYWN0ZXJEYXRhTXV0YXRpb25SZWNvcmQodGhpcywgb2xkRGF0YSk7
CiAjZW5kaWYKICAgICBpZiAocGFyZW50Tm9kZSgpKQogICAgICAgICBwYXJlbnROb2RlKCktPmNo
aWxkcmVuQ2hhbmdlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDFkYWYzOThlMWU3NzVl
ZTYwNzgxYzUyNjZhMmU3N2MwNDU3YjljMDQuLjM5Y2FiZDgzNmEwMzU5N2I1OWY0NGUyMDE0NmRm
ZWMwZDAyNWVhOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTYzOCw2ICs2MzgsNyBAQCBz
dGF0aWMgdm9pZCBlbnF1ZXVlQXR0cmlidXRlc011dGF0aW9uUmVjb3JkKEVsZW1lbnQqIGVsZW1l
bnQsIGNvbnN0IFF1YWxpZmllZE5hbQogICAgIGlmIChvYnNlcnZlcnMuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKKyAgICAvLyBGSVhNRTogRmFjdG9yIHRoaXMgbG9naWMgb3V0IHRvIGF2
b2lkIGR1cGxpY2F0aW9uIHdpdGggY2hhcmFjdGVyRGF0YU9sZFZhbHVlLgogICAgIFJlZlB0cjxN
dXRhdGlvblJlY29yZD4gbXV0YXRpb24gPSBNdXRhdGlvblJlY29yZDo6Y3JlYXRlQXR0cmlidXRl
cyhlbGVtZW50LCBuYW1lLCBpc09sZFZhbHVlUmVxdWVzdGVkKG9ic2VydmVycykgPyBvbGRWYWx1
ZSA6IG51bGxBdG9tKTsKICAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG11dGF0aW9uV2l0aE51
bGxPbGRWYWx1ZTsKICAgICBmb3IgKEhhc2hNYXA8V2ViS2l0TXV0YXRpb25PYnNlcnZlciosIE11
dGF0aW9uT2JzZXJ2ZXJPcHRpb25zPjo6aXRlcmF0b3IgaXRlciA9IG9ic2VydmVycy5iZWdpbigp
OyBpdGVyICE9IG9ic2VydmVycy5lbmQoKTsgKytpdGVyKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0
aW9uUmVjb3JkLmNwcAppbmRleCAwODVkY2ZhYTVjNTFlZDMwMTAxNGMzODg3NGIzYTFmOWFiYWQw
MDg2Li4xZmVkZDFkYmZhMTY1ZjA5MDMxZDVjYzdjYjU4MjdjMWI3NjJiMmIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25SZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9NdXRhdGlvblJlY29yZC5jcHAKQEAgLTk1LDE2ICs5NSwxOSBAQCBwcml2YXRlOgog
CiBjbGFzcyBDaGFyYWN0ZXJEYXRhUmVjb3JkIDogcHVibGljIE11dGF0aW9uUmVjb3JkIHsKIHB1
YmxpYzoKLSAgICBDaGFyYWN0ZXJEYXRhUmVjb3JkKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KQor
ICAgIENoYXJhY3RlckRhdGFSZWNvcmQoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQsIGNvbnN0IFN0
cmluZyYgb2xkVmFsdWUpCiAgICAgICAgIDogbV90YXJnZXQodGFyZ2V0KQorICAgICAgICAsIG1f
b2xkVmFsdWUob2xkVmFsdWUpCiAgICAgewogICAgIH0KIAogcHJpdmF0ZToKICAgICB2aXJ0dWFs
IGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgTm9kZSog
dGFyZ2V0KCkgT1ZFUlJJREUgeyByZXR1cm4gbV90YXJnZXQuZ2V0KCk7IH0KKyAgICB2aXJ0dWFs
IFN0cmluZyBvbGRWYWx1ZSgpIE9WRVJSSURFIHsgcmV0dXJuIG1fb2xkVmFsdWU7IH0KIAogICAg
IFJlZlB0cjxOb2RlPiBtX3RhcmdldDsKKyAgICBTdHJpbmcgbV9vbGRWYWx1ZTsKIH07CiAKIGNs
YXNzIE11dGF0aW9uUmVjb3JkV2l0aE51bGxPbGRWYWx1ZSA6IHB1YmxpYyBNdXRhdGlvblJlY29y
ZCB7CkBAIC0xNTksOSArMTYyLDkgQEAgUGFzc1JlZlB0cjxNdXRhdGlvblJlY29yZD4gTXV0YXRp
b25SZWNvcmQ6OmNyZWF0ZUF0dHJpYnV0ZXMoUGFzc1JlZlB0cjxOb2RlPiB0YXIKICAgICByZXR1
cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8TXV0YXRpb25SZWNvcmQqPihuZXcgQXR0cmlidXRlc1Jl
Y29yZCh0YXJnZXQsIG5hbWUsIG9sZFZhbHVlKSkpOwogfQogCi1QYXNzUmVmUHRyPE11dGF0aW9u
UmVjb3JkPiBNdXRhdGlvblJlY29yZDo6Y3JlYXRlQ2hhcmFjdGVyRGF0YShQYXNzUmVmUHRyPE5v
ZGU+IHRhcmdldCkKK1Bhc3NSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IE11dGF0aW9uUmVjb3JkOjpj
cmVhdGVDaGFyYWN0ZXJEYXRhKFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBjb25zdCBTdHJpbmcm
IG9sZFZhbHVlKQogewotICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxNdXRhdGlvblJl
Y29yZCo+KG5ldyBDaGFyYWN0ZXJEYXRhUmVjb3JkKHRhcmdldCkpKTsKKyAgICByZXR1cm4gYWRv
cHRSZWYoc3RhdGljX2Nhc3Q8TXV0YXRpb25SZWNvcmQqPihuZXcgQ2hhcmFjdGVyRGF0YVJlY29y
ZCh0YXJnZXQsIG9sZFZhbHVlKSkpOwogfQogCiBQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBN
dXRhdGlvblJlY29yZDo6Y3JlYXRlV2l0aE51bGxPbGRWYWx1ZShQYXNzUmVmUHRyPE11dGF0aW9u
UmVjb3JkPiByZWNvcmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25S
ZWNvcmQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCmluZGV4IDNiZjAx
YTE5Yjk0NGEzYzFkZjBiMDdmOTI0NzBlZDgzODA2OGI4NmIuLjcwNDBlOWQ4OWE4ZDFjN2RiZjcy
MGMwZDRjODViZTA2ZjJlZGVjOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRh
dGlvblJlY29yZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvblJlY29yZC5oCkBA
IC00OCw3ICs0OCw3IEBAIGNsYXNzIE11dGF0aW9uUmVjb3JkIDogcHVibGljIFJlZkNvdW50ZWQ8
TXV0YXRpb25SZWNvcmQ+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhdGlv
blJlY29yZD4gY3JlYXRlQ2hpbGRMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBQYXNzUmVm
UHRyPE5vZGVMaXN0PiBhZGRlZCwgUGFzc1JlZlB0cjxOb2RlTGlzdD4gcmVtb3ZlZCwgUGFzc1Jl
ZlB0cjxOb2RlPiBwcmV2aW91c1NpYmxpbmcsIFBhc3NSZWZQdHI8Tm9kZT4gbmV4dFNpYmxpbmcp
OwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBjcmVhdGVBdHRyaWJ1dGVz
KFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0LCBjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRv
bWljU3RyaW5nJiBvbGRWYWx1ZSk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TXV0YXRpb25SZWNv
cmQ+IGNyZWF0ZUNoYXJhY3RlckRhdGEoUGFzc1JlZlB0cjxOb2RlPiB0YXJnZXQpOworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBjcmVhdGVDaGFyYWN0ZXJEYXRhKFBhc3NS
ZWZQdHI8Tm9kZT4gdGFyZ2V0LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlKTsKIAogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBjcmVhdGVXaXRoTnVsbE9sZFZhbHVlKFBhc3NS
ZWZQdHI8TXV0YXRpb25SZWNvcmQ+KTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>