Re: Is.Serializable

"Simone Busoli" <[email protected]> Mon, 8 Sep 2008 21:28:51 +0200
Newsgroups gmane.comp.windows.dotnet.nunit.user
Message-ID <[email protected]>
------=_Part_79349_6646098.1220902131809
Content-Type: multipart/alternative; 
	boundary="----=_Part_79350_20876809.1220902131809"

------=_Part_79350_20876809.1220902131809
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

So here's the patch, for both the BinarySerializable and XmlSerializable
constraints. I've followed your guide, I hope I did everything correctly.
Feedback welcome.

On Sun, Sep 7, 2008 at 7:35 PM, Charlie Poole
<[email protected]>wrote:

>  Fair Enough! I'll put it on both lists.
>
> Charlie
>
>  ------------------------------
> *From:* [email protected] [mailto:
> [email protected]] *On Behalf Of *Simone Busoli
> *Sent:* Sunday, September 07, 2008 12:24 AM
>
> *To:* Charlie Poole
> *Cc:* [email protected]
> *Subject:* Re: [Nunit-users] Is.Serializable
>
>  Hi Charlie,
> I'd prefer to work on it again, there's been some changes since I wrote it
> in the beginning, and it would be useful for me to get comfortable with
> them. If you agree, I think this would be the right moment to publish the
> list of steps required to create a new constraint.
>
> On Sun, Sep 7, 2008 at 1:33 AM, Charlie Poole <[email protected]
> > wrote:
>
>>  Hi Simone,
>>
>> I'm now back to looking at this patch, which I set aside while working on
>> other stuff.
>>
>> I agree with you about having two different constraints. Do you want me to
>> put in
>> the patch you sent and change the name to "Binary..." or would you like to
>> rework it?
>>
>> As noted, we do now have a generic AttributeConstraint.
>>
>> Charlie
>>
>>  ------------------------------
>>  *From:* Simone Busoli [mailto:[email protected]]
>> *Sent:* Thursday, August 14, 2008 11:15 AM
>> *To:* Charlie Poole
>> *Cc:* [email protected]
>>
>> *Subject:* Re: [Nunit-users] Is.Serializable
>>
>>
>>> To check just for the attribute or the interface
>>>   Is.Serializable() OR
>>>   Is.Serializable
>>>
>>> To check by trying to do it
>>>   Is.Serializable(formatter) OR
>>>   Is.Serializable.Using(formatter)
>>>
>>
>> I think that making Is.Serializable check for the presence of the
>> attribute on the class might be misleading, because its presence doesn't
>> mean it's serializable, and its absence doesn't mean it isn't. I think that
>> Is.Serializable should be used to check that an object is really
>> serializable, together with its references. That is, Is.Serializable should
>> come in two flavours, one that checks if it is serializable in binary
>> format, and another for xml. I'll come to this later.
>> About checking for the presence of the attribute, as you mentioned in a
>> comment to Fabio's feature request, I think it could be generalized with
>> Has.Attribute<> or Has.Attribute(Type).
>> So, given that the presence of an attribute is checked with a generic
>> Has.Attribute, the way I would tackle the true ability of an object graph to
>> serialize is either using Is.XmlSerializable and Is.BinarySerializable or
>> something equivalent. I don't get how you could pass in an instance of a
>> formatter; I guess you proposed it because you might want to be able to use
>> the assertion for other types of formatters not built into the .net fx s
>> well, but then how would you call their methods? Via reflection?
>>
>>
>>>
>>> The aternatives above are between using a method and using a property. It
>>> would be
>>> cool to use the property for te first example and the method for the
>>> second, but
>>> that's not possible.
>>>
>>> Most of our syntactic elements use a property format when there is no
>>> argument.
>>> When an element has an optional argument, then we are forced to use
>>> method
>>> syntax, which may look a bit odd. For example, we have to useIs.Ordered()
>>> rather than Is.Ordered - That example should be familiar to you :-)
>>>
>>> I lean toward "Using" or "With" or some other keyword.
>>>
>>> What do folks think?
>>>
>>
>> I'm fine with anything you choose. I don't think it's so important if it's
>> a property or a method, just let's try to be consistent :)
>>
>>
>>>
>>> Charlie
>>>
>>>   ------------------------------
>>> *From:* Simone Busoli [mailto:[email protected]]
>>> *Sent:* Thursday, August 14, 2008 12:16 AM
>>> *To:* Charlie Poole
>>> *Subject:* Re: [Nunit-users] Is.Serializable
>>>
>>>   Hmm, I just realized that what I'm doing is not enough for the object
>>> to be serializable. I noticed that the prerequisites for it to be
>>> serializable are quite different according to whether you want to serialize
>>> it to xml or to binary. For example, the binary serialization doesn't
>>> require classes to be public, while xml does. xml serialization doesn't
>>> require the serializable attribute, while the binary does. So I'm wondering
>>> if it could be the case to split the assertion in IsBinarySerializable and
>>> IsXmlSerializable, or check that it is both binary and xml serializable in
>>> the same assertion. Thoughts?
>>>
>>> On Thu, Aug 14, 2008 at 2:02 AM, Charlie Poole <
>>> [email protected]> wrote:
>>>
>>>>  Hi Simone,
>>>>
>>>> This looks good to me. Would you like to synch up and fix it so it works
>>>> with the latest code? My major
>>>> changes to Constraint, ConstraintBuilder, etc. are done and it would
>>>> give you a good way for you
>>>> to get familiar with those changes. Once it's done, you can either send
>>>> me a new patch or - if
>>>> you would like - I'll make you a commiter so you can add it yourself. If
>>>> you agree, I'll explain more
>>>> to you about review of code etc.
>>>>
>>>> Charlie
>>>>
>>>>  ------------------------------
>>>> *From:* [email protected] [mailto:
>>>> [email protected]] *On Behalf Of *Simone Busoli
>>>> *Sent:* Monday, August 11, 2008 7:11 AM
>>>> *To:* [email protected]
>>>> *Subject:* [Nunit-users] Is.Serializable
>>>>
>>>>  With regards to:
>>>> http://sourceforge.net/tracker/index.php?func=detail&aid=2028517&group_id=10749&atid=360749
>>>>
>>>> I have implemented a SerializableConstraint accessible via
>>>> Is.Serializable. The match is true if serialization to and deserialization
>>>> from a memory stream via a BinaryFormatter both succeed and the deserialized
>>>> object is not null. Otherwise the match returns false.
>>>>
>>>>
>>>
>>
>

------=_Part_79350_20876809.1220902131809
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

<div dir="ltr">So here&#39;s the patch, for both the BinarySerializable and XmlSerializable constraints. I&#39;ve followed your guide, I hope I did everything correctly. Feedback welcome.<br><br><div class="gmail_quote">On Sun, Sep 7, 2008 at 7:35 PM, Charlie Poole <span dir="ltr">&lt;<a href="mailto:[email protected]">[email protected]</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">



<div>
<div><span><font face="Arial" color="#0000ff" size="2">Fair 
Enough! I&#39;ll put it on both lists.</font></span></div>
<div><span><font face="Arial" color="#0000ff" size="2"></font></span>&nbsp;</div>
<div><span><font face="Arial" color="#0000ff" size="2">Charlie</font></span></div><br>
<blockquote dir="ltr" style="padding-left:5px;margin-left:5px;border-left:#0000ff 2px solid;margin-right:0px">
  <div lang="en-us" dir="ltr" align="left">
  <hr>
  <font face="Tahoma" size="2"><div class="Ih2E3d"><b>From:</b> 
  <a href="mailto:[email protected]" target="_blank">[email protected]</a> 
  [mailto:<a href="mailto:[email protected]" target="_blank">[email protected]</a>] <b>On Behalf Of </b>Simone 
  Busoli<br></div><b>Sent:</b> Sunday, September 07, 2008 12:24 AM<div><div></div><div class="Wj3C7c"><br><b>To:</b> 
  Charlie Poole<br><b>Cc:</b> 
  <a href="mailto:[email protected]" target="_blank">[email protected]</a><br><b>Subject:</b> Re: [Nunit-users] 
  Is.Serializable<br></div></div></font><br></div><div><div></div><div class="Wj3C7c">
  <div></div>
  <div dir="ltr">Hi Charlie,
  <div><br></div>
  <div>I&#39;d prefer to work on it again, there&#39;s been some changes since I wrote 
  it in the beginning, and it would be useful for me to get comfortable with 
  them. If you agree, I think this would be the right moment to publish the list 
  of steps required to create a new constraint.<br><br>
  <div class="gmail_quote">On Sun, Sep 7, 2008 at 1:33 AM, Charlie Poole <span dir="ltr">&lt;<a href="mailto:[email protected]" target="_blank">[email protected]</a>&gt;</span> 
  wrote:<br>
  <blockquote class="gmail_quote" style="padding-left:1ex;margin:0px 0px 0px 0.8ex;border-left:#ccc 1px solid">
    <div>
    <div><span><font face="Arial" color="#0000ff" size="2">Hi 
    Simone,</font></span></div>
    <div><span><font face="Arial" color="#0000ff" size="2"></font></span>&nbsp;</div>
    <div><span><font face="Arial" color="#0000ff" size="2">I&#39;m now back to looking at 
    this patch, which I set aside while working on other 
    stuff.</font></span></div>
    <div><span><font face="Arial" color="#0000ff" size="2"></font></span>&nbsp;</div>
    <div><span><font face="Arial" color="#0000ff" size="2">I agree with you about 
    having two different constraints. Do you want me to put 
    in</font></span></div>
    <div><span><font face="Arial" color="#0000ff" size="2">the patch you sent and 
    change the name to &quot;Binary...&quot;&nbsp;or would you like to rework 
    it?</font></span></div>
    <div><span><font face="Arial" color="#0000ff" size="2"></font></span>&nbsp;</div>
    <div><span><font face="Arial" color="#0000ff" size="2">As noted, we do now have a 
    generic AttributeConstraint.</font></span></div>
    <div><span><font face="Arial" color="#0000ff" size="2"></font></span>&nbsp;</div>
    <div><span><font face="Arial" color="#0000ff" size="2">Charlie</font></span></div><br>
    <blockquote dir="ltr" style="padding-left:5px;margin-left:5px;border-left:#0000ff 2px solid;margin-right:0px">
      <div lang="en-us" dir="ltr" align="left">
      <hr>
      <font face="Tahoma" size="2">
      <div><b>From:</b> Simone Busoli [mailto:<a href="mailto:[email protected]" target="_blank">[email protected]</a>] <br></div><b>Sent:</b> 
      Thursday, August 14, 2008 11:15 AM<br><b>To:</b> Charlie 
      Poole<br><b>Cc:</b> <a href="mailto:[email protected]" target="_blank">[email protected]</a>
      <div>
      <div></div>
      <div><br><b>Subject:</b> Re: [Nunit-users] 
      Is.Serializable<br></div></div></font><br></div>
      <div>
      <div></div>
      <div>
      <div></div>
      <div dir="ltr">
      <div class="gmail_quote">
      <blockquote class="gmail_quote" style="padding-left:1ex;margin:0pt 0pt 0pt 0.8ex;border-left:rgb(204,204,204) 1px solid">
        <div><br>
        <div><span><font face="Arial" color="#0000ff" size="2">To check just for the 
        attribute or the interface</font></span></div>
        <div><span><font face="Arial" color="#0000ff" size="2">&nbsp; 
        Is.Serializable() OR</font></span></div>
        <div><span><font face="Arial" color="#0000ff" size="2">&nbsp; 
        Is.Serializable</font></span></div>
        <div><span><font face="Arial" color="#0000ff" size="2"></font></span>&nbsp;</div>
        <div><span><font face="Arial" color="#0000ff" size="2">To check by trying to 
        do it</font></span></div>
        <div><span><font face="Arial" color="#0000ff" size="2">&nbsp; 
        Is.Serializable(formatter) OR</font></span></div>
        <div><span><font face="Arial" color="#0000ff" size="2">&nbsp; 
        Is.Serializable.Using(formatter)</font></span></div></div></blockquote>
      <div><br>I think that making Is.Serializable check for the presence of the 
      attribute on the class might be misleading, because its presence doesn&#39;t 
      mean it&#39;s serializable, and its absence doesn&#39;t mean it isn&#39;t. I think 
      that Is.Serializable should be used to check that an object is really 
      serializable, together with its references. That is, Is.Serializable 
      should come in two flavours, one that checks if it is serializable in 
      binary format, and another for xml. I&#39;ll come to this later.<br>About 
      checking for the presence of the attribute, as you mentioned in a comment 
      to Fabio&#39;s feature request, I think it could be generalized with 
      Has.Attribute&lt;&gt; or Has.Attribute(Type).<br>So, given that the 
      presence of an attribute is checked with a generic Has.Attribute, the way 
      I would tackle the true ability of an object graph to serialize is either 
      using Is.XmlSerializable and Is.BinarySerializable or something 
      equivalent. I don&#39;t get how you could pass in an instance of a formatter; 
      I guess you proposed it because you might want to be able to use the 
      assertion for other types of formatters not built into the .net fx s well, 
      but then how would you call their methods? Via reflection?<br>&nbsp;</div>
      <blockquote class="gmail_quote" style="padding-left:1ex;margin:0pt 0pt 0pt 0.8ex;border-left:rgb(204,204,204) 1px solid">
        <div>
        <div><span><font face="Arial" color="#0000ff" size="2"></font></span></div>
        <div><span><font face="Arial" color="#0000ff" size="2"></font></span>&nbsp;</div>
        <div><span><font face="Arial" color="#0000ff" size="2">The aternatives above 
        are between using a method and using a property. It would 
        be</font></span></div>
        <div><span><font face="Arial" color="#0000ff" size="2">cool to use the 
        property for te first example and the method for the second, but 
        </font></span></div>
        <div><span><font face="Arial" color="#0000ff" size="2">that&#39;s not 
        possible.</font></span></div>
        <div><span><font face="Arial" color="#0000ff" size="2"></font></span>&nbsp;</div>
        <div><span><font face="Arial" color="#0000ff" size="2">Most of our syntactic 
        elements use a property format when there is no 
        argument.</font></span></div>
        <div><span><font face="Arial" color="#0000ff" size="2">When an element has an 
        optional argument, then we are forced to use method</font></span></div>
        <div><span><font face="Arial" color="#0000ff" size="2">syntax, which may look 
        a bit odd. For example, we have to use</font></span><span><font face="Arial" color="#0000ff" size="2"> Is.Ordered()</font></span></div>
        <div><span><font face="Arial" color="#0000ff" size="2">rather than Is.Ordered 
        - That example should be familiar to you :-)</font></span></div>
        <div><span><font face="Arial" color="#0000ff" size="2"></font></span>&nbsp;</div>
        <div><span><font face="Arial" color="#0000ff" size="2">I lean toward &quot;Using&quot; 
        or &quot;With&quot; or some other keyword.</font></span></div>
        <div><span><font face="Arial" color="#0000ff" size="2"></font></span>&nbsp;</div>
        <div><span><font face="Arial" color="#0000ff" size="2">What do folks 
        think?</font></span></div></div></blockquote>
      <div><br>I&#39;m fine with anything you choose. I don&#39;t think it&#39;s so 
      important if it&#39;s a property or a method, just let&#39;s try to be consistent 
      :)<br>&nbsp;</div>
      <blockquote class="gmail_quote" style="padding-left:1ex;margin:0pt 0pt 0pt 0.8ex;border-left:rgb(204,204,204) 1px solid">
        <div>
        <div><span><font face="Arial" color="#0000ff" size="2"></font></span></div>
        <div><span><font face="Arial" color="#0000ff" size="2"></font></span>&nbsp;</div><font color="#888888">
        <div><span><font face="Arial" color="#0000ff" size="2">Charlie</font></span></div><br></font>
        <blockquote dir="ltr" style="padding-left:5px;margin-left:5px;border-left:rgb(0,0,255) 2px solid;margin-right:0px">
          <div>
          <div lang="en-us" dir="ltr" align="left">
          <hr>
          <font face="Tahoma" size="2"><b>From:</b> Simone Busoli [mailto:<a href="mailto:[email protected]" target="_blank">[email protected]</a>] <br><b>Sent:</b> Thursday, 
          August 14, 2008 12:16 AM<br><b>To:</b> Charlie 
          Poole<br><b>Subject:</b> Re: [Nunit-users] 
          Is.Serializable<br></font><br></div>
          <div></div></div>
          <div>
          <div></div>
          <div>
          <div dir="ltr">Hmm, I just realized that what I&#39;m doing is not enough 
          for the object to be serializable. I noticed that the prerequisites 
          for it to be serializable are quite different according to whether you 
          want to serialize it to xml or to binary. For example, the binary 
          serialization doesn&#39;t require classes to be public, while xml does. 
          xml serialization doesn&#39;t require the serializable attribute, while 
          the binary does. So I&#39;m wondering if it could be the case to split the 
          assertion in IsBinarySerializable and IsXmlSerializable, or check that 
          it is both binary and xml serializable in the same assertion. 
          Thoughts?<br><br>
          <div class="gmail_quote">On Thu, Aug 14, 2008 at 2:02 AM, Charlie Poole 
          <span dir="ltr">&lt;<a href="mailto:[email protected]" target="_blank">[email protected]</a>&gt;</span> wrote:<br>
          <blockquote class="gmail_quote" style="padding-left:1ex;margin:0pt 0pt 0pt 0.8ex;border-left:rgb(204,204,204) 1px solid">
            <div>
            <div><span><font face="Arial" color="#0000ff" size="2">Hi 
            Simone,</font></span></div>
            <div><span><font face="Arial" color="#0000ff" size="2"></font></span>&nbsp;</div>
            <div><span><font face="Arial" color="#0000ff" size="2">This looks good to 
            me. Would you like to synch up and fix it so it works with the 
            latest code? My major</font></span></div>
            <div><span><font face="Arial" color="#0000ff" size="2">changes to 
            Constraint, ConstraintBuilder, etc. are done and it would give you a 
            good way for you</font></span></div>
            <div><span><font face="Arial" color="#0000ff" size="2">to get familiar 
            with those changes. Once it&#39;s done, you can either send me a new 
            patch or - if</font></span></div>
            <div><span><font face="Arial" color="#0000ff" size="2">you would like - 
            I&#39;ll make you a commiter so you can add it yourself. If you agree, 
            I&#39;ll explain more</font></span></div>
            <div><span><font face="Arial" color="#0000ff" size="2">to you about review 
            of code etc.</font></span></div>
            <div>&nbsp;</div>
            <div><span></span><font face="Arial"><font color="#0000ff"><font size="2">C<span>harlie</span></font></font></font><br></div>
            <blockquote dir="ltr" style="padding-left:5px;margin-left:5px;border-left:rgb(0,0,255) 2px solid;margin-right:0px">
              <div lang="en-us" dir="ltr" align="left">
              <hr>
              <font face="Tahoma" size="2"><b>From:</b> <a href="mailto:[email protected]" target="_blank">[email protected]</a> 
              [mailto:<a href="mailto:[email protected]" target="_blank">[email protected]</a>] <b>On 
              Behalf Of </b>Simone Busoli<br><b>Sent:</b> Monday, August 11, 
              2008 7:11 AM<br><b>To:</b> <a href="mailto:[email protected]" target="_blank">[email protected]</a><br><b>Subject:</b> 
              [Nunit-users] Is.Serializable<br></font><br></div>
              <div>
              <div></div>
              <div dir="ltr">With regards to: <a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=2028517&amp;group_id=10749&amp;atid=360749" target="_blank">http://sourceforge.net/tracker/index.php?func=detail&amp;aid=2028517&amp;group_id=10749&amp;atid=360749</a><br>
<br>I 
              have implemented a SerializableConstraint accessible via 
              Is.Serializable. The match is true if serialization to and 
              deserialization from a memory stream via a BinaryFormatter both 
              succeed and the deserialized object is not null. Otherwise the 
              match returns 
          false.<br></div></div></blockquote></div></blockquote></div><br></div></div></div></blockquote></div></blockquote></div><br></div></div></div></blockquote></div></blockquote></div><br></div></div></div></div></blockquote>
</div>
</blockquote></div><br></div>

------=_Part_79350_20876809.1220902131809--

------=_Part_79349_6646098.1220902131809
Content-Type: application/octet-stream; name=serializable.patch
Content-Transfer-Encoding: base64
X-Attachment-Id: f_fkvhkugj0
Content-Disposition: attachment; filename=serializable.patch

SW5kZXg6IHNvbHV0aW9ucy92czIwMDgvTlVuaXRGcmFtZXdvcmsvZnJhbWV3b3JrL251bml0LmZy
YW1ld29yay5kbGwuY3Nwcm9qDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3QvbnVuaXQv
bnVuaXQyMC9zb2x1dGlvbnMvdnMyMDA4L05Vbml0RnJhbWV3b3JrL2ZyYW1ld29yay9udW5pdC5m
cmFtZXdvcmsuZGxsLmNzcHJvaix2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQNCmRpZmYgLXUg
LXIxLjE0IG51bml0LmZyYW1ld29yay5kbGwuY3Nwcm9qDQotLS0gc29sdXRpb25zL3ZzMjAwOC9O
VW5pdEZyYW1ld29yay9mcmFtZXdvcmsvbnVuaXQuZnJhbWV3b3JrLmRsbC5jc3Byb2oJNSBTZXAg
MjAwOCAyMjozNDoxOSAtMDAwMAkxLjE0DQorKysgc29sdXRpb25zL3ZzMjAwOC9OVW5pdEZyYW1l
d29yay9mcmFtZXdvcmsvbnVuaXQuZnJhbWV3b3JrLmRsbC5jc3Byb2oJOCBTZXAgMjAwOCAxODox
MToxMCAtMDAwMA0KQEAgLTEsNyArMSw3IEBADQog77u/PFByb2plY3QgRGVmYXVsdFRhcmdldHM9
IkJ1aWxkIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNi
dWlsZC8yMDAzIiBUb29sc1ZlcnNpb249IjMuNSI+DQogICA8UHJvcGVydHlHcm91cD4NCiAgICAg
PFByb2plY3RUeXBlPkxvY2FsPC9Qcm9qZWN0VHlwZT4NCi0gICAgPFByb2R1Y3RWZXJzaW9uPjku
MC4yMTAyMjwvUHJvZHVjdFZlcnNpb24+DQorICAgIDxQcm9kdWN0VmVyc2lvbj45LjAuMzA3Mjk8
L1Byb2R1Y3RWZXJzaW9uPg0KICAgICA8U2NoZW1hVmVyc2lvbj4yLjA8L1NjaGVtYVZlcnNpb24+
DQogICAgIDxQcm9qZWN0R3VpZD57ODNERDdFMTItQTcwNS00REJBLTlENzEtMDlDODk3M0Q5Mzgy
fTwvUHJvamVjdEd1aWQ+DQogICAgIDxDb25maWd1cmF0aW9uIENvbmRpdGlvbj0iICckKENvbmZp
Z3VyYXRpb24pJyA9PSAnJyAiPkRlYnVnPC9Db25maWd1cmF0aW9uPg0KQEAgLTE3Myw2ICsxNzMs
OSBAQA0KICAgICAgIDxMaW5rPkNvbnN0cmFpbnRzXFNhbWVBc0NvbnN0cmFpbnQuY3M8L0xpbms+
DQogICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4NCiAgICAgPC9Db21waWxlPg0KKyAgICA8
Q29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcTlVuaXRGcmFtZXdvcmtcZnJhbWV3b3Jr
XENvbnN0cmFpbnRzXFNlcmlhbGl6YWJsZUNvbnN0cmFpbnRzLmNzIj4NCisgICAgICA8TGluaz5D
b25zdHJhaW50c1xTZXJpYWxpemFibGVDb25zdHJhaW50cy5jczwvTGluaz4NCisgICAgPC9Db21w
aWxlPg0KICAgICA8Q29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcTlVuaXRGcmFtZXdv
cmtcZnJhbWV3b3JrXENvbnN0cmFpbnRzXFN0cmluZ0NvbnN0cmFpbnRzLmNzIj4NCiAgICAgICA8
TGluaz5Db25zdHJhaW50c1xTdHJpbmdDb25zdHJhaW50cy5jczwvTGluaz4NCiAgICAgICA8U3Vi
VHlwZT5Db2RlPC9TdWJUeXBlPg0KSW5kZXg6IHNvbHV0aW9ucy92czIwMDgvTlVuaXRGcmFtZXdv
cmsvdGVzdHMvbnVuaXQuZnJhbWV3b3JrLnRlc3RzLmNzcHJvag0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZp
bGU6IC9jdnNyb290L251bml0L251bml0MjAvc29sdXRpb25zL3ZzMjAwOC9OVW5pdEZyYW1ld29y
ay90ZXN0cy9udW5pdC5mcmFtZXdvcmsudGVzdHMuY3Nwcm9qLHYNCnJldHJpZXZpbmcgcmV2aXNp
b24gMS45DQpkaWZmIC11IC1yMS45IG51bml0LmZyYW1ld29yay50ZXN0cy5jc3Byb2oNCi0tLSBz
b2x1dGlvbnMvdnMyMDA4L05Vbml0RnJhbWV3b3JrL3Rlc3RzL251bml0LmZyYW1ld29yay50ZXN0
cy5jc3Byb2oJNSBTZXAgMjAwOCAyMjozNDoxOSAtMDAwMAkxLjkNCisrKyBzb2x1dGlvbnMvdnMy
MDA4L05Vbml0RnJhbWV3b3JrL3Rlc3RzL251bml0LmZyYW1ld29yay50ZXN0cy5jc3Byb2oJOCBT
ZXAgMjAwOCAxOToyMTozMiAtMDAwMA0KQEAgLTEsNyArMSw3IEBADQog77u/PFByb2plY3QgRGVm
YXVsdFRhcmdldHM9IkJ1aWxkIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9k
ZXZlbG9wZXIvbXNidWlsZC8yMDAzIiBUb29sc1ZlcnNpb249IjMuNSI+DQogICA8UHJvcGVydHlH
cm91cD4NCiAgICAgPFByb2plY3RUeXBlPkxvY2FsPC9Qcm9qZWN0VHlwZT4NCi0gICAgPFByb2R1
Y3RWZXJzaW9uPjkuMC4yMTAyMjwvUHJvZHVjdFZlcnNpb24+DQorICAgIDxQcm9kdWN0VmVyc2lv
bj45LjAuMzA3Mjk8L1Byb2R1Y3RWZXJzaW9uPg0KICAgICA8U2NoZW1hVmVyc2lvbj4yLjA8L1Nj
aGVtYVZlcnNpb24+DQogICAgIDxQcm9qZWN0R3VpZD57OEMzMjY0MzEtQUU1Ny00NjQ1LUFDQzEt
QTkwQTBCNDI1MTI5fTwvUHJvamVjdEd1aWQ+DQogICAgIDxDb25maWd1cmF0aW9uIENvbmRpdGlv
bj0iICckKENvbmZpZ3VyYXRpb24pJyA9PSAnJyAiPkRlYnVnPC9Db25maWd1cmF0aW9uPg0KQEAg
LTE2Niw2ICsxNjYsOSBAQA0KICAgICAgIDxMaW5rPkNvbnN0cmFpbnRzXFNhbWVBc1Rlc3QuY3M8
L0xpbms+DQogICAgICAgPFN1YlR5cGU+Q29kZTwvU3ViVHlwZT4NCiAgICAgPC9Db21waWxlPg0K
KyAgICA8Q29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcTlVuaXRGcmFtZXdvcmtcdGVz
dHNcQ29uc3RyYWludHNcU2VyaWFsaXphYmxlQ29uc3RyYWludFRlc3QuY3MiPg0KKyAgICAgIDxM
aW5rPkNvbnN0cmFpbnRzXFNlcmlhbGl6YWJsZUNvbnN0cmFpbnRUZXN0LmNzPC9MaW5rPg0KKyAg
ICA8L0NvbXBpbGU+DQogICAgIDxDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xOVW5p
dEZyYW1ld29ya1x0ZXN0c1xDb25zdHJhaW50c1xTdHJpbmdDb25zdHJhaW50VGVzdHMuY3MiPg0K
ICAgICAgIDxMaW5rPkNvbnN0cmFpbnRzXFN0cmluZ0NvbnN0cmFpbnRUZXN0cy5jczwvTGluaz4N
CiAgICAgICA8U3ViVHlwZT5Db2RlPC9TdWJUeXBlPg0KQEAgLTI0OSw2ICsyNTIsOSBAQA0KICAg
ICA8Q29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcTlVuaXRGcmFtZXdvcmtcdGVzdHNc
U3ludGF4XFByb3BlcnR5VGVzdHMuY3MiPg0KICAgICAgIDxMaW5rPlN5bnRheFxQcm9wZXJ0eVRl
c3RzLmNzPC9MaW5rPg0KICAgICA8L0NvbXBpbGU+DQorICAgIDxDb21waWxlIEluY2x1ZGU9Ii4u
XC4uXC4uXC4uXHNyY1xOVW5pdEZyYW1ld29ya1x0ZXN0c1xTeW50YXhcU2VyaWFsaXphYmxlQ29u
c3RyYWludHMuY3MiPg0KKyAgICAgIDxMaW5rPlN5bnRheFxTZXJpYWxpemFibGVDb25zdHJhaW50
cy5jczwvTGluaz4NCisgICAgPC9Db21waWxlPg0KICAgICA8Q29tcGlsZSBJbmNsdWRlPSIuLlwu
LlwuLlwuLlxzcmNcTlVuaXRGcmFtZXdvcmtcdGVzdHNcU3ludGF4XFNpbXBsZUNvbnN0cmFpbnRz
LmNzIj4NCiAgICAgICA8TGluaz5TeW50YXhcU2ltcGxlQ29uc3RyYWludHMuY3M8L0xpbms+DQog
ICAgIDwvQ29tcGlsZT4NCkluZGV4OiBzcmMvTlVuaXRGcmFtZXdvcmsvZnJhbWV3b3JrL0NvbnN0
cmFpbnRzL0NvbnN0cmFpbnRGYWN0b3J5LmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jv
b3QvbnVuaXQvbnVuaXQyMC9zcmMvTlVuaXRGcmFtZXdvcmsvZnJhbWV3b3JrL0NvbnN0cmFpbnRz
L0NvbnN0cmFpbnRGYWN0b3J5LmNzLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS43DQpkaWZmIC11
IC1yMS43IENvbnN0cmFpbnRGYWN0b3J5LmNzDQotLS0gc3JjL05Vbml0RnJhbWV3b3JrL2ZyYW1l
d29yay9Db25zdHJhaW50cy9Db25zdHJhaW50RmFjdG9yeS5jcwk2IFNlcCAyMDA4IDIyOjAyOjI3
IC0wMDAwCTEuNw0KKysrIHNyYy9OVW5pdEZyYW1ld29yay9mcmFtZXdvcmsvQ29uc3RyYWludHMv
Q29uc3RyYWludEZhY3RvcnkuY3MJOCBTZXAgMjAwOCAxOToyMTozMSAtMDAwMA0KQEAgLTY2NCw1
ICs2NjQsMjYgQEANCiAgICAgICAgICAgICByZXR1cm4gbmV3IENvbGxlY3Rpb25Db250YWluc0Nv
bnN0cmFpbnQoZXhwZWN0ZWQpOw0KICAgICAgICAgfQ0KICAgICAgICAgI2VuZHJlZ2lvbg0KKw0K
KyAgICAgICAgI3JlZ2lvbiBTZXJpYWxpemFibGUgQ29uc3RyYWludHMNCisgICAgICAgIC8vLyA8
c3VtbWFyeT4NCisgICAgICAgIC8vLyBCaW5hcnlTZXJpYWxpemFibGUgcmV0dXJucyBhIGNvbnN0
cmFpbnQgdGhhdCB0ZXN0cyB3aGV0aGVyIA0KKyAgICAgICAgLy8vIGFuIG9iamVjdCBncmFwaCBp
cyBzZXJpYWxpemFibGUgaW4gYmluYXJ5IGZvcm1hdC4NCisgICAgICAgIC8vLyA8L3N1bW1hcnk+
DQorICAgICAgICBwdWJsaWMgQ29uc3RyYWludEV4cHJlc3Npb24gQmluYXJ5U2VyaWFsaXphYmxl
DQorICAgICAgICB7DQorICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIElzLkJpbmFyeVNlcmlhbGl6
YWJsZTsgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICAvLy8gPHN1bW1hcnk+DQor
ICAgICAgICAvLy8gWG1sU2VyaWFsaXphYmxlIHJldHVybnMgYSBjb25zdHJhaW50IHRoYXQgdGVz
dHMgd2hldGhlciANCisgICAgICAgIC8vLyBhbiBvYmplY3QgZ3JhcGggaXMgc2VyaWFsaXphYmxl
IGluIHhtbCBmb3JtYXQuDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgcHVibGlj
IENvbnN0cmFpbnRFeHByZXNzaW9uIFhtbFNlcmlhbGl6YWJsZQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIGdldCB7IHJldHVybiBJcy5YbWxTZXJpYWxpemFibGU7IH0NCisgICAgICAgIH0NCisN
CisgICAgICAgICNlbmRyZWdpb24NCiAgICAgfQ0KIH0NCkluZGV4OiBzcmMvTlVuaXRGcmFtZXdv
cmsvZnJhbWV3b3JrL0NvbnN0cmFpbnRzL1BhcnRpYWxDb25zdHJhaW50RXhwcmVzc2lvbi5jcw0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnNyb290L251bml0L251bml0MjAvc3JjL05Vbml0RnJh
bWV3b3JrL2ZyYW1ld29yay9Db25zdHJhaW50cy9QYXJ0aWFsQ29uc3RyYWludEV4cHJlc3Npb24u
Y3Msdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjQNCmRpZmYgLXUgLXIxLjQgUGFydGlhbENvbnN0
cmFpbnRFeHByZXNzaW9uLmNzDQotLS0gc3JjL05Vbml0RnJhbWV3b3JrL2ZyYW1ld29yay9Db25z
dHJhaW50cy9QYXJ0aWFsQ29uc3RyYWludEV4cHJlc3Npb24uY3MJNiBTZXAgMjAwOCAyMjowMjoy
NyAtMDAwMAkxLjQNCisrKyBzcmMvTlVuaXRGcmFtZXdvcmsvZnJhbWV3b3JrL0NvbnN0cmFpbnRz
L1BhcnRpYWxDb25zdHJhaW50RXhwcmVzc2lvbi5jcwk4IFNlcCAyMDA4IDE5OjEyOjE2IC0wMDAw
DQpAQCAtNDUwLDYgKzQ1MCwyOCBAQA0KICAgICAgICAgfQ0KICAgICAgICAgI2VuZHJlZ2lvbg0K
IA0KKyAgICAgICAgI3JlZ2lvbiBTZXJpYWxpemFibGUgQ29uc3RyYWludHMNCisNCisgICAgICAg
IC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBSZXNvbHZlcyB0aGUgY2hhaW4gb2YgY29uc3Ry
YWludHMgdXNpbmcNCisgICAgICAgIC8vLyBCaW5hcnlTZXJpYWxpemFibGVDb25zdHJhaW50IGFz
IGJhc2UuDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgcHVibGljIENvbnN0cmFp
bnRFeHByZXNzaW9uIEJpbmFyeVNlcmlhbGl6YWJsZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IGdldCB7IHJldHVybiBBcHBlbmQobmV3IEJpbmFyeVNlcmlhbGl6YWJsZUNvbnN0cmFpbnQoKSk7
IH0NCisgICAgICAgIH0NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBS
ZXNvbHZlcyB0aGUgY2hhaW4gb2YgY29uc3RyYWludHMgdXNpbmcNCisgICAgICAgIC8vLyBYbWxT
ZXJpYWxpemFibGVDb25zdHJhaW50IGFzIGJhc2UuDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0K
KyAgICAgICAgcHVibGljIENvbnN0cmFpbnRFeHByZXNzaW9uIFhtbFNlcmlhbGl6YWJsZQ0KKyAg
ICAgICAgew0KKyAgICAgICAgICAgIGdldCB7IHJldHVybiBBcHBlbmQobmV3IFhtbFNlcmlhbGl6
YWJsZUNvbnN0cmFpbnQoKSk7IH0NCisgICAgICAgIH0NCisNCisgICAgICAgICNlbmRyZWdpb24N
CisNCiAgICAgICAgICNyZWdpb24gT3BlcmF0b3JzDQogDQogICAgICAgICAjcmVnaW9uIE5vdA0K
SW5kZXg6IHNyYy9OVW5pdEZyYW1ld29yay9mcmFtZXdvcmsvSXMuY3MNCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJD
UyBmaWxlOiAvY3Zzcm9vdC9udW5pdC9udW5pdDIwL3NyYy9OVW5pdEZyYW1ld29yay9mcmFtZXdv
cmsvSXMuY3Msdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjcNCmRpZmYgLXUgLXIxLjcgSXMuY3MN
Ci0tLSBzcmMvTlVuaXRGcmFtZXdvcmsvZnJhbWV3b3JrL0lzLmNzCTYgU2VwIDIwMDggMjA6NDc6
MDMgLTAwMDAJMS43DQorKysgc3JjL05Vbml0RnJhbWV3b3JrL2ZyYW1ld29yay9Jcy5jcwk4IFNl
cCAyMDA4IDE5OjE0OjE0IC0wMDAwDQpAQCAtODksNiArODksMjIgQEANCiAgICAgICAgICAgICBn
ZXQgeyByZXR1cm4gbmV3IFBhcnRpYWxDb25zdHJhaW50RXhwcmVzc2lvbigpLlVuaXF1ZTsgfQ0K
ICAgICAgICAgfQ0KIA0KKyAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KKyAgICAgICAgLy8vIElzLkJp
bmFyeVNlcmlhbGl6YWJsZSByZXR1cm5zIGEgY29uc3RyYWludCB0aGF0IHRlc3RzIHdoZXRoZXIg
YW4gb2JqZWN0IGdyYXBoIGlzIHNlcmlhbGl6YWJsZSBpbiBiaW5hcnkgZm9ybWF0Lg0KKyAgICAg
ICAgLy8vIDwvc3VtbWFyeT4NCisgICAgICAgIHB1YmxpYyBzdGF0aWMgQ29uc3RyYWludEV4cHJl
c3Npb24gQmluYXJ5U2VyaWFsaXphYmxlDQorICAgICAgICB7DQorICAgICAgICAgICAgZ2V0IHsg
cmV0dXJuIG5ldyBQYXJ0aWFsQ29uc3RyYWludEV4cHJlc3Npb24oKS5CaW5hcnlTZXJpYWxpemFi
bGU7IH0NCisgICAgICAgIH0NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8v
LyBJcy5YbWxTZXJpYWxpemFibGUgcmV0dXJucyBhIGNvbnN0cmFpbnQgdGhhdCB0ZXN0cyB3aGV0
aGVyIGFuIG9iamVjdCBncmFwaCBpcyBzZXJpYWxpemFibGUgaW4geG1sIGZvcm1hdC4NCisgICAg
ICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICBwdWJsaWMgc3RhdGljIENvbnN0cmFpbnRFeHBy
ZXNzaW9uIFhtbFNlcmlhbGl6YWJsZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGdldCB7IHJl
dHVybiBuZXcgUGFydGlhbENvbnN0cmFpbnRFeHByZXNzaW9uKCkuWG1sU2VyaWFsaXphYmxlOyB9
DQorICAgICAgICB9DQorDQogICAgICAgICAjZW5kcmVnaW9uDQogDQogICAgICAgICAjcmVnaW9u
IENvbnN0cmFpbnRzIHdpdGggYW4gZXhwZWN0ZWQgdmFsdWUNCi0tLSBmcmFtZXdvcmsvQ29uc3Ry
YWludHMvU2VyaWFsaXphYmxlQ29uc3RyYWludHMuY3MNCisrKyBmcmFtZXdvcmsvQ29uc3RyYWlu
dHMvU2VyaWFsaXphYmxlQ29uc3RyYWludHMuY3MNCkBAIC0wLDAgKzEsMTU5IEBADQorLy8gKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKg0KKy8vIENvcHlyaWdodCAyMDA3LCBDaGFybGllIFBvb2xlDQorLy8gVGhpcyBpcyBmcmVl
IHNvZnR3YXJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBOVW5pdCBsaWNlbnNlLiBZb3UgbWF5DQorLy8g
b2J0YWluIGEgY29weSBvZiB0aGUgbGljZW5zZSBhdCBodHRwOi8vbnVuaXQub3JnLz9wPWxpY2Vu
c2Umcj0yLjQNCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqDQorDQordXNpbmcgU3lzdGVtOw0KK3VzaW5nIFN5c3RlbS5J
TzsNCit1c2luZyBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uOw0KK3VzaW5nIFN5c3RlbS5S
dW50aW1lLlNlcmlhbGl6YXRpb24uRm9ybWF0dGVycy5CaW5hcnk7DQordXNpbmcgU3lzdGVtLlht
bC5TZXJpYWxpemF0aW9uOw0KKw0KK25hbWVzcGFjZSBOVW5pdC5GcmFtZXdvcmsuQ29uc3RyYWlu
dHMNCit7DQorICAgICNyZWdpb24gQmluYXJ5U2VyaWFsaXphYmxlQ29uc3RyYWludA0KKw0KKyAg
ICAvLy8gPHN1bW1hcnk+DQorICAgIC8vLyBCaW5hcnlTZXJpYWxpemFibGVDb25zdHJhaW50IHRl
c3RzIHdoZXRoZXIgDQorICAgIC8vLyBhbiBvYmplY3QgaXMgc2VyaWFsaXphYmxlIGluIGJpbmFy
eSBmb3JtYXQuDQorICAgIC8vLyA8L3N1bW1hcnk+DQorICAgIHB1YmxpYyBjbGFzcyBCaW5hcnlT
ZXJpYWxpemFibGVDb25zdHJhaW50IDogQ29uc3RyYWludA0KKyAgICB7DQorICAgICAgICByZWFk
b25seSBCaW5hcnlGb3JtYXR0ZXIgc2VyaWFsaXplciA9IG5ldyBCaW5hcnlGb3JtYXR0ZXIoKTsN
CisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8vLyBUZXN0IHdoZXRoZXIgdGhl
IGNvbnN0cmFpbnQgaXMgc2F0aXNmaWVkIGJ5IGEgZ2l2ZW4gdmFsdWUNCisgICAgICAgIC8vLyA8
L3N1bW1hcnk+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImFjdHVhbCI+VGhlIHZhbHVlIHRv
IGJlIHRlc3RlZDwvcGFyYW0+DQorICAgICAgICAvLy8gPHJldHVybnM+VHJ1ZSBmb3Igc3VjY2Vz
cywgZmFsc2UgZm9yIGZhaWx1cmU8L3JldHVybnM+DQorICAgICAgICBwdWJsaWMgb3ZlcnJpZGUg
Ym9vbCBNYXRjaGVzKG9iamVjdCBhY3R1YWwpDQorICAgICAgICB7DQorICAgICAgICAgICAgdGhp
cy5hY3R1YWwgPSBhY3R1YWw7DQorDQorICAgICAgICAgICAgaWYoYWN0dWFsID09IG51bGwpDQor
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbigpOw0KKw0KKyAgICAg
ICAgICAgIHZhciBzdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7DQorDQorICAgICAgICAgICAg
dHJ5DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBzZXJpYWxpemVyLlNlcmlhbGl6
ZShzdHJlYW0sIGFjdHVhbCk7DQorDQorICAgICAgICAgICAgICAgIHN0cmVhbS5TZWVrKDAsIFNl
ZWtPcmlnaW4uQmVnaW4pOw0KKw0KKyAgICAgICAgICAgICAgICBvYmplY3QgdmFsdWUgPSBzZXJp
YWxpemVyLkRlc2VyaWFsaXplKHN0cmVhbSk7DQorDQorICAgICAgICAgICAgICAgIHJldHVybiB2
YWx1ZSAhPSBudWxsOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBjYXRjaCAoU2VyaWFs
aXphdGlvbkV4Y2VwdGlvbikNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICAvLy8gPHN1
bW1hcnk+DQorICAgICAgICAvLy8gV3JpdGUgdGhlIGNvbnN0cmFpbnQgZGVzY3JpcHRpb24gdG8g
YSBNZXNzYWdlV3JpdGVyDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgLy8vIDxw
YXJhbSBuYW1lPSJ3cml0ZXIiPlRoZSB3cml0ZXIgb24gd2hpY2ggdGhlIGRlc2NyaXB0aW9uIGlz
IGRpc3BsYXllZDwvcGFyYW0+DQorICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgdm9pZCBXcml0ZURl
c2NyaXB0aW9uVG8oTWVzc2FnZVdyaXRlciB3cml0ZXIpDQorICAgICAgICB7DQorICAgICAgICAg
ICAgd3JpdGVyLldyaXRlKCJiaW5hcnkgc2VyaWFsaXphYmxlIik7DQorICAgICAgICB9DQorDQor
ICAgICAgICAvLy8gPHN1bW1hcnk+DQorICAgICAgICAvLy8gV3JpdGUgdGhlIGFjdHVhbCB2YWx1
ZSBmb3IgYSBmYWlsaW5nIGNvbnN0cmFpbnQgdGVzdCB0byBhDQorICAgICAgICAvLy8gTWVzc2Fn
ZVdyaXRlci4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2ltcGx5IHdyaXRlcw0KKyAgICAg
ICAgLy8vIHRoZSByYXcgdmFsdWUgb2YgYWN0dWFsLCBsZWF2aW5nIGl0IHRvIHRoZSB3cml0ZXIg
dG8NCisgICAgICAgIC8vLyBwZXJmb3JtIGFueSBmb3JtYXR0aW5nLg0KKyAgICAgICAgLy8vIDwv
c3VtbWFyeT4NCisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0id3JpdGVyIj5UaGUgd3JpdGVyIG9u
IHdoaWNoIHRoZSBhY3R1YWwgdmFsdWUgaXMgZGlzcGxheWVkPC9wYXJhbT4NCisgICAgICAgIHB1
YmxpYyBvdmVycmlkZSB2b2lkIFdyaXRlQWN0dWFsVmFsdWVUbyhNZXNzYWdlV3JpdGVyIHdyaXRl
cikNCisgICAgICAgIHsNCisgICAgICAgICAgICB3cml0ZXIuV3JpdGUoIjx7MH0+IiwgYWN0dWFs
LkdldFR5cGUoKS5OYW1lKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHB1YmxpYyBvdmVycmlk
ZSBzdHJpbmcgVG9TdHJpbmcoKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiAiPGJp
bmFyeXNlcmlhbGl6YWJsZT4iOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgICNlbmRyZWdp
b24NCisgICAgDQorICAgICNyZWdpb24gWG1sU2VyaWFsaXphYmxlQ29uc3RyYWludA0KKw0KKyAg
ICAvLy8gPHN1bW1hcnk+DQorICAgIC8vLyBCaW5hcnlTZXJpYWxpemFibGVDb25zdHJhaW50IHRl
c3RzIHdoZXRoZXIgDQorICAgIC8vLyBhbiBvYmplY3QgaXMgc2VyaWFsaXphYmxlIGluIGJpbmFy
eSBmb3JtYXQuDQorICAgIC8vLyA8L3N1bW1hcnk+DQorICAgIHB1YmxpYyBjbGFzcyBYbWxTZXJp
YWxpemFibGVDb25zdHJhaW50IDogQ29uc3RyYWludA0KKyAgICB7DQorICAgICAgICBwcml2YXRl
IFhtbFNlcmlhbGl6ZXIgc2VyaWFsaXplcjsNCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisg
ICAgICAgIC8vLyBUZXN0IHdoZXRoZXIgdGhlIGNvbnN0cmFpbnQgaXMgc2F0aXNmaWVkIGJ5IGEg
Z2l2ZW4gdmFsdWUNCisgICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICAvLy8gPHBhcmFt
IG5hbWU9ImFjdHVhbCI+VGhlIHZhbHVlIHRvIGJlIHRlc3RlZDwvcGFyYW0+DQorICAgICAgICAv
Ly8gPHJldHVybnM+VHJ1ZSBmb3Igc3VjY2VzcywgZmFsc2UgZm9yIGZhaWx1cmU8L3JldHVybnM+
DQorICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBNYXRjaGVzKG9iamVjdCBhY3R1YWwpDQor
ICAgICAgICB7DQorICAgICAgICAgICAgdGhpcy5hY3R1YWwgPSBhY3R1YWw7DQorDQorICAgICAg
ICAgICAgaWYoYWN0dWFsID09IG51bGwpDQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmd1
bWVudEV4Y2VwdGlvbigpOw0KKw0KKyAgICAgICAgICAgIHZhciBzdHJlYW0gPSBuZXcgTWVtb3J5
U3RyZWFtKCk7DQorDQorICAgICAgICAgICAgdHJ5DQorICAgICAgICAgICAgew0KKyAgICAgICAg
ICAgICAgICBzZXJpYWxpemVyID0gbmV3IFhtbFNlcmlhbGl6ZXIoYWN0dWFsLkdldFR5cGUoKSk7
DQorDQorICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXIuU2VyaWFsaXplKHN0cmVhbSwgYWN0dWFs
KTsNCisNCisgICAgICAgICAgICAgICAgc3RyZWFtLlNlZWsoMCwgU2Vla09yaWdpbi5CZWdpbik7
DQorDQorICAgICAgICAgICAgICAgIG9iamVjdCB2YWx1ZSA9IHNlcmlhbGl6ZXIuRGVzZXJpYWxp
emUoc3RyZWFtKTsNCisNCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICE9IG51bGw7DQor
ICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGNhdGNoIChOb3RTdXBwb3J0ZWRFeGNlcHRpb24p
DQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAg
ICAgICAgfQ0KKyAgICAgICAgICAgIGNhdGNoIChJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKQ0K
KyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAg
ICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4NCisgICAgICAgIC8v
LyBXcml0ZSB0aGUgY29uc3RyYWludCBkZXNjcmlwdGlvbiB0byBhIE1lc3NhZ2VXcml0ZXINCisg
ICAgICAgIC8vLyA8L3N1bW1hcnk+DQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9IndyaXRlciI+
VGhlIHdyaXRlciBvbiB3aGljaCB0aGUgZGVzY3JpcHRpb24gaXMgZGlzcGxheWVkPC9wYXJhbT4N
CisgICAgICAgIHB1YmxpYyBvdmVycmlkZSB2b2lkIFdyaXRlRGVzY3JpcHRpb25UbyhNZXNzYWdl
V3JpdGVyIHdyaXRlcikNCisgICAgICAgIHsNCisgICAgICAgICAgICB3cml0ZXIuV3JpdGUoInht
bCBzZXJpYWxpemFibGUiKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vLyA8c3VtbWFyeT4N
CisgICAgICAgIC8vLyBXcml0ZSB0aGUgYWN0dWFsIHZhbHVlIGZvciBhIGZhaWxpbmcgY29uc3Ry
YWludCB0ZXN0IHRvIGENCisgICAgICAgIC8vLyBNZXNzYWdlV3JpdGVyLiBUaGUgZGVmYXVsdCBp
bXBsZW1lbnRhdGlvbiBzaW1wbHkgd3JpdGVzDQorICAgICAgICAvLy8gdGhlIHJhdyB2YWx1ZSBv
ZiBhY3R1YWwsIGxlYXZpbmcgaXQgdG8gdGhlIHdyaXRlciB0bw0KKyAgICAgICAgLy8vIHBlcmZv
cm0gYW55IGZvcm1hdHRpbmcuDQorICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KKyAgICAgICAgLy8v
IDxwYXJhbSBuYW1lPSJ3cml0ZXIiPlRoZSB3cml0ZXIgb24gd2hpY2ggdGhlIGFjdHVhbCB2YWx1
ZSBpcyBkaXNwbGF5ZWQ8L3BhcmFtPg0KKyAgICAgICAgcHVibGljIG92ZXJyaWRlIHZvaWQgV3Jp
dGVBY3R1YWxWYWx1ZVRvKE1lc3NhZ2VXcml0ZXIgd3JpdGVyKQ0KKyAgICAgICAgew0KKyAgICAg
ICAgICAgIHdyaXRlci5Xcml0ZSgiPHswfT4iLCBhY3R1YWwuR2V0VHlwZSgpLk5hbWUpOw0KKyAg
ICAgICAgfQ0KKw0KKyAgICAgICAgcHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpDQor
ICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuICI8eG1sc2VyaWFsaXphYmxlPiI7DQorICAg
ICAgICB9DQorICAgIH0NCisNCisgICAgI2VuZHJlZ2lvbg0KKw0KK30NCg0KLS0tIHRlc3RzL0Nv
bnN0cmFpbnRzL1NlcmlhbGl6YWJsZUNvbnN0cmFpbnRUZXN0LmNzDQorKysgdGVzdHMvQ29uc3Ry
YWludHMvU2VyaWFsaXphYmxlQ29uc3RyYWludFRlc3QuY3MNCkBAIC0wLDAgKzEsNTkgQEANCisv
LyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqDQorLy8gQ29weXJpZ2h0IDIwMDcsIENoYXJsaWUgUG9vbGUNCisvLyBUaGlzIGlz
IGZyZWUgc29mdHdhcmUgbGljZW5zZWQgdW5kZXIgdGhlIE5Vbml0IGxpY2Vuc2UuIFlvdSBtYXkN
CisvLyBvYnRhaW4gYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGF0IGh0dHA6Ly9udW5pdC5vcmcvP3A9
bGljZW5zZSZyPTIuNA0KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCit1c2luZyBTeXN0ZW07DQordXNpbmcgU3lz
dGVtLkNvbGxlY3Rpb25zOw0KK3VzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOw0KKw0K
K25hbWVzcGFjZSBOVW5pdC5GcmFtZXdvcmsuQ29uc3RyYWludHMuVGVzdHMNCit7DQorICAgIFtU
ZXN0Rml4dHVyZV0NCisgICAgcHVibGljIGNsYXNzIEJpbmFyeVNlcmlhbGl6YWJsZVRlc3QgOiBD
b25zdHJhaW50VGVzdEJhc2VXaXRoQXJndW1lbnRFeGNlcHRpb24NCisgICAgew0KKwkJW1NldFVw
XQ0KKyAgICAgICAgcHVibGljIHZvaWQgU2V0VXAoKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg
IHRoZUNvbnN0cmFpbnQgPSBuZXcgQmluYXJ5U2VyaWFsaXphYmxlQ29uc3RyYWludCgpOw0KKyAg
ICAgICAgICAgIGV4cGVjdGVkRGVzY3JpcHRpb24gPSAiYmluYXJ5IHNlcmlhbGl6YWJsZSI7DQor
ICAgICAgICAgICAgc3RyaW5nUmVwcmVzZW50YXRpb24gPSAiPGJpbmFyeXNlcmlhbGl6YWJsZT4i
Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgb2JqZWN0W10gU3VjY2Vzc0RhdGEgPSBuZXcgb2Jq
ZWN0W10geyAxLCAiYSIsIG5ldyBBcnJheUxpc3QoKSwgbmV3IEludGVybmFsV2l0aFNlcmlhbGl6
YWJsZUF0dHJpYnV0ZUNsYXNzKCkgfTsNCisgICAgICAgIA0KKyAgICAgICAgb2JqZWN0W10gRmFp
bHVyZURhdGEgPSBuZXcgb2JqZWN0W10geyBuZXcgSW50ZXJuYWxDbGFzcygpIH07DQorDQorICAg
ICAgICBzdHJpbmdbXSBBY3R1YWxWYWx1ZXMgPSBuZXcgc3RyaW5nW10geyAiPEludGVybmFsQ2xh
c3M+IiB9OyANCisNCisgICAgICAgIG9iamVjdFtdIEludmFsaWREYXRhID0gbmV3IG9iamVjdFtd
IHsgbnVsbCB9Ow0KKyAgICB9DQorDQorICAgIFtUZXN0Rml4dHVyZV0NCisgICAgcHVibGljIGNs
YXNzIFhtbFNlcmlhbGl6YWJsZVRlc3QgOiBDb25zdHJhaW50VGVzdEJhc2VXaXRoQXJndW1lbnRF
eGNlcHRpb24NCisgICAgew0KKyAgICAgICAgW1NldFVwXQ0KKyAgICAgICAgcHVibGljIHZvaWQg
U2V0VXAoKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHRoZUNvbnN0cmFpbnQgPSBuZXcgWG1s
U2VyaWFsaXphYmxlQ29uc3RyYWludCgpOw0KKyAgICAgICAgICAgIGV4cGVjdGVkRGVzY3JpcHRp
b24gPSAieG1sIHNlcmlhbGl6YWJsZSI7DQorICAgICAgICAgICAgc3RyaW5nUmVwcmVzZW50YXRp
b24gPSAiPHhtbHNlcmlhbGl6YWJsZT4iOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgb2JqZWN0
W10gU3VjY2Vzc0RhdGEgPSBuZXcgb2JqZWN0W10geyAxLCAiYSIsIG5ldyBBcnJheUxpc3QoKSB9
Ow0KKw0KKyAgICAgICAgb2JqZWN0W10gRmFpbHVyZURhdGEgPSBuZXcgb2JqZWN0W10geyBuZXcg
RGljdGlvbmFyeTxzdHJpbmcsIHN0cmluZz4oKSwgbmV3IEludGVybmFsQ2xhc3MoKSwgbmV3IElu
dGVybmFsV2l0aFNlcmlhbGl6YWJsZUF0dHJpYnV0ZUNsYXNzKCkgfTsNCisNCisgICAgICAgIHN0
cmluZ1tdIEFjdHVhbFZhbHVlcyA9IG5ldyBzdHJpbmdbXSB7ICI8RGljdGlvbmFyeWAyPiIsICI8
SW50ZXJuYWxDbGFzcz4iLCAiPEludGVybmFsV2l0aFNlcmlhbGl6YWJsZUF0dHJpYnV0ZUNsYXNz
PiIgfTsNCisNCisgICAgICAgIG9iamVjdFtdIEludmFsaWREYXRhID0gbmV3IG9iamVjdFtdIHsg
bnVsbCB9Ow0KKyAgICB9DQorDQorICAgIGludGVybmFsIGNsYXNzIEludGVybmFsQ2xhc3MNCisg
ICAge30NCisNCisgICAgW1NlcmlhbGl6YWJsZV0NCisgICAgaW50ZXJuYWwgY2xhc3MgSW50ZXJu
YWxXaXRoU2VyaWFsaXphYmxlQXR0cmlidXRlQ2xhc3MNCisgICAge30NCit9DQoNCi0tLSB0ZXN0
cy9TeW50YXgvU2VyaWFsaXphYmxlQ29uc3RyYWludHMuY3MNCisrKyB0ZXN0cy9TeW50YXgvU2Vy
aWFsaXphYmxlQ29uc3RyYWludHMuY3MNCkBAIC0wLDAgKzEsMjggQEANCivvu79uYW1lc3BhY2Ug
TlVuaXQuRnJhbWV3b3JrLlN5bnRheA0KK3sNCisgICAgW1Rlc3RGaXh0dXJlXQ0KKyAgICBwdWJs
aWMgY2xhc3MgQmluYXJ5U2VyaWFsaXphYmxlVGVzdCA6IFN5bnRheFRlc3QNCisgICAgew0KKyAg
ICAgICAgW1NldFVwXQ0KKyAgICAgICAgcHVibGljIHZvaWQgU2V0VXAoKQ0KKyAgICAgICAgew0K
KyAgICAgICAgICAgIHBhcnNlVHJlZSA9ICI8YmluYXJ5c2VyaWFsaXphYmxlPiI7DQorICAgICAg
ICAgICAgc3RhdGljU3ludGF4ID0gSXMuQmluYXJ5U2VyaWFsaXphYmxlOw0KKyAgICAgICAgICAg
IGluaGVyaXRlZFN5bnRheCA9IEhlbHBlcigpLkJpbmFyeVNlcmlhbGl6YWJsZTsNCisgICAgICAg
ICAgICBidWlsZGVyU3ludGF4ID0gQnVpbGRlcigpLkJpbmFyeVNlcmlhbGl6YWJsZTsNCisgICAg
ICAgIH0NCisgICAgfQ0KKw0KKyAgICBbVGVzdEZpeHR1cmVdDQorICAgIHB1YmxpYyBjbGFzcyBY
bWxTZXJpYWxpemFibGVUZXN0IDogU3ludGF4VGVzdA0KKyAgICB7DQorICAgICAgICBbU2V0VXBd
DQorICAgICAgICBwdWJsaWMgdm9pZCBTZXRVcCgpDQorICAgICAgICB7DQorICAgICAgICAgICAg
cGFyc2VUcmVlID0gIjx4bWxzZXJpYWxpemFibGU+IjsNCisgICAgICAgICAgICBzdGF0aWNTeW50
YXggPSBJcy5YbWxTZXJpYWxpemFibGU7DQorICAgICAgICAgICAgaW5oZXJpdGVkU3ludGF4ID0g
SGVscGVyKCkuWG1sU2VyaWFsaXphYmxlOw0KKyAgICAgICAgICAgIGJ1aWxkZXJTeW50YXggPSBC
dWlsZGVyKCkuWG1sU2VyaWFsaXphYmxlOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KDQoNCg==

------=_Part_79349_6646098.1220902131809
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
------=_Part_79349_6646098.1220902131809
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Nunit-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/nunit-users

------=_Part_79349_6646098.1220902131809--