<?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>24150</bug_id>
          
          <creation_ts>2009-02-24 18:31:31 -0800</creation_ts>
          <short_desc>Add virtual ScriptExecutionContext::encoding()</short_desc>
          <delta_ts>2009-03-19 16:54:03 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>24016</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dmitry Titov">dimich</reporter>
          <assigned_to name="Dmitry Titov">dimich</assigned_to>
          <cc>ap</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>110880</commentid>
    <comment_count>0</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-02-24 18:31:31 -0800</bug_when>
    <thetext>This also moved inputEncoding() to the SEC. The idea is to reflect actual encoding of loaded JavaScript (initially initialized from the parent context and then optionally changed by http response headers). This will allow to unvirtualize completeURL() and also properly &quot;inherit&quot; encoding in case of nested workers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110882</commentid>
    <comment_count>1</comment_count>
      <attachid>27950</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-02-24 18:34:07 -0800</bug_when>
    <thetext>Created attachment 27950
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110893</commentid>
    <comment_count>2</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-02-24 18:54:16 -0800</bug_when>
    <thetext>Minor comment:
&gt; String displayStringModifiedByEncoding(const String&amp; str) const {

I know you only moved the methods, but it would be nice to fix the { placement on the methods to follow WebKit style while you are doing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110934</commentid>
    <comment_count>3</comment_count>
      <attachid>27950</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-25 04:03:52 -0800</bug_when>
    <thetext>Comment on attachment 27950
Proposed patch

Why move displayStringModifiedByEncoding() to ScriptExecutionContext? It isn&apos;t needed there.

Keeping a full-blown TextResourceDecoder in SEC while it only needs TextEncoding doesn&apos;t look very good either. Document::m_decoder was the decoder used for document source - but worker script source is decoded elsewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111085</commentid>
    <comment_count>4</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-02-25 17:22:10 -0800</bug_when>
    <thetext>Agreed. Changing the title of the bug and attaching new patch.

Instead of moving the decoder, have a virtual method that returns the encoding as a String.

Document does what it did with decoder, while WorkerContext initially inherits the encoding from the parent context and then updates it after script loading.

Also update WorkerContext::completeURL to use the encoding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111089</commentid>
    <comment_count>5</comment_count>
      <attachid>27999</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-02-25 17:55:45 -0800</bug_when>
    <thetext>Created attachment 27999
Updated patch.

No more moving decoder :-)

It feels that amount of wiring the encoding string needs to propagate from Worker::notifyFinished to the WorkerContext is a bit excessive but I&apos;m not sure how to make it cleaner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111160</commentid>
    <comment_count>6</comment_count>
      <attachid>27999</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-26 04:52:10 -0800</bug_when>
    <thetext>Comment on attachment 27999
Updated patch.

&gt; +    String inputEncoding() const { return encoding(); }
&gt; +    String charset() const { return encoding(); }
&gt; +    String characterSet() const { return encoding(); }

You need to use &quot;return Document::encoding();&quot; syntax to avoid virtual dispatch. Please also consider making encoding() private (that would improve safety, but decrease clarity somewhat, as the functions won&apos;t be near each other any more).

&gt; +    // FIXME: nested workers need loading support. Consider adopting ThreadableLoader here.

Capital &quot;N&quot; is needed in &quot;nested&quot;.

&gt; -    // FIXME: does this need to provide a charset, like Document::completeURL does?
&gt; -    return KURL(m_location-&gt;url(), url);
&gt; +
&gt; +    if (m_encoding.isNull())
&gt; +        return KURL(m_location-&gt;url(), url);
&gt; +
&gt; +    return KURL(m_location-&gt;url(), url, TextEncoding(m_encoding));
&gt;  }

Have you tested that this is what Firefox does? I wouldn&apos;t be surprised if it always used UTF-8, and didn&apos;t inherit the encoding from the document at all.

This change needs an automated test.

&gt; +        String m_encoding;

Why is it better to store it as String, not as TextEncoding?

&gt; -        WorkerThread(const KURL&amp;, const String&amp; userAgent, const String&amp; sourceCode, WorkerObjectProxy*);
&gt; +        WorkerThread(const KURL&amp;, const String&amp; userAgent,  const String&amp; encoding, const String&amp; sourceCode, WorkerObjectProxy*);

Two spaces here.

r-, because this needs an automated test (XMLHttpRequest URL completion for now, but it&apos;s worth testing how Firefox decodes nested worker scripts and importScripts() content).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111948</commentid>
    <comment_count>7</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-03-02 18:22:32 -0800</bug_when>
    <thetext>Tested FF 3.1b2
Interestingly enough, they inherit encoding from the document - with a new worker on any nesting level starting from the encoding of the document rather then the parent script.
For XHR it&apos;s different - it always starts from utf8.
Will match the behavior and add a test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112331</commentid>
    <comment_count>8</comment_count>
      <attachid>28295</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-03-04 17:51:32 -0800</bug_when>
    <thetext>Created attachment 28295
updated patch.

Updated patch, now with test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112332</commentid>
    <comment_count>9</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-03-04 18:01:57 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 27999 [review])
&gt; &gt; +    String inputEncoding() const { return encoding(); }
&gt; &gt; +    String charset() const { return encoding(); }
&gt; &gt; +    String characterSet() const { return encoding(); }
&gt; 
&gt; You need to use &quot;return Document::encoding();&quot; syntax to avoid virtual
&gt; dispatch. 

Done.

&gt; Please also consider making encoding() private (that would improve
&gt; safety, but decrease clarity somewhat, as the functions won&apos;t be near each
&gt; other any more).

Moved the function in .h file (to another similar one, userAgent()) but not sure if making it private (and virtual) will help  - because on WorkerContext we&apos;ll need it public...

&gt; &gt; +    // FIXME: nested workers need loading support. Consider adopting ThreadableLoader here.
&gt; Capital &quot;N&quot; is needed in &quot;nested&quot;.

Done.

&gt; &gt; -    // FIXME: does this need to provide a charset, like Document::completeURL does?
&gt; &gt; -    return KURL(m_location-&gt;url(), url);
&gt; &gt; +
&gt; &gt; +    if (m_encoding.isNull())
&gt; &gt; +        return KURL(m_location-&gt;url(), url);
&gt; &gt; +
&gt; &gt; +    return KURL(m_location-&gt;url(), url, TextEncoding(m_encoding));
&gt; &gt;  }
&gt; 
&gt; Have you tested that this is what Firefox does? I wouldn&apos;t be surprised if it
&gt; always used UTF-8, and didn&apos;t inherit the encoding from the document at all.
&gt; 
&gt; This change needs an automated test.

That happened to be a very good suggestion! I&apos;ve tested FF and realized I&apos;m adding wrong behavior :-). So I&apos;ve changed the code and I&apos;m adding the test that verifies the behavior is same as in FF (and also pretty logical).
 
&gt; &gt; +        String m_encoding;
&gt; Why is it better to store it as String, not as TextEncoding?

It is only used as a string - to pass into script loader as initial value (now that we don&apos;t need to create TextEncoding in completeURL). So storing String is now simpler and perhaps faster.

&gt; &gt; +        WorkerThread(const KURL&amp;, const String&amp; userAgent,  const String&amp; encoding, const String&amp; sourceCode, WorkerObjectProxy*);
&gt; Two spaces here.

Done.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112350</commentid>
    <comment_count>10</comment_count>
      <attachid>28295</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-03-05 00:41:55 -0800</bug_when>
    <thetext>Comment on attachment 28295
updated patch.

That&apos;s very interesting, thanks! So, it turns out that the charset is inherited as a default for nested worker script decoding, correct?

&gt; +    // Note Document::completeURL provides a charset here (to encode query portion of url when
&gt; +    // submitting charset-encoded forms data). Workers always use UTF-8 which is default for KURL.
&gt;      return KURL(m_location-&gt;url(), url);

How does URL completion work in Firefox for Worker source and importScript() URLs? If I remember correctly, Firefox doesn&apos;t use document encoding for completing XHR URLs even on main thread, and we don&apos;t currently match this quirk.

If &apos;new Worker(relativeUrl)&apos; syntax uses UTF-8 even on main thread in Firefox, then we should consider moving XMLHttpRequest and Worker off completeURL entirely (but we&apos;ll need to test IE behavior for XHR URL completion then).

Any changes to XHR and Worker behavior on main thread will need a separate bug of course, but I&apos;d like to have a full understanding of correct expected behavior before going forward with this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112515</commentid>
    <comment_count>11</comment_count>
      <attachid>28345</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-03-05 20:09:41 -0800</bug_when>
    <thetext>Created attachment 28345
Updated the test so it runs in FF too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112517</commentid>
    <comment_count>12</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-03-05 20:27:23 -0800</bug_when>
    <thetext>Here are results of more testing. I think the nested case, which we don&apos;t implement yet, may be still &apos;in the works&apos;, especially wrt base url...

- tested version is FF 3.1b2
- &apos;XYZ&apos; below is a non-latin string
- &apos;document&apos; is the main html page
- &apos;first worker&apos; is a worker created by document
- &apos;nested worker&apos; is a worker created by the first worker
- (WK+) means behavior matched WebKit

In the document:

  new Worker(&apos;foo.php?query=XYZ&apos;);
    - query part of URL will be encoded using document&apos;s encoding (WK+)
    - relative URL will be completed using base URL of the document (WK+)
    - loaded script will be decoded using document&apos;s encoding or http header if any (WK+)

  XHR(&apos;foo.php?query=XYZ&apos;);
    - query part of URL will be encoded using UTF8 (in WK, document encoding)
    - relative URL will be completed using base URL of the document (WK+)
    - loaded content will be decoded using UTF8 or http header if any (WK+)

  &lt;iframe src=&apos;foo.php?query=XYZ&apos;&gt;
    - query part of URL will be encoded using document&apos;s encoding (WK+)
    - relative URL will be completed using base URL of the document (WK+)
    - loaded content will be decoded using document&apos;s encoding or http header if any (WK+)

inside first worker:

  new Worker(&apos;foo.php?query=XYZ&apos;);
  importScripts(&apos;foo.php?query=XYZ&apos;);
    - query part of URL will be encoded using document&apos;s encoding, even if first worker had different http header (WK not impl)
    - relative URL will be completed using base URL of the document, not the one of the first worker (WK not impl)
    - loaded script will be decoded using document&apos;s encoding or http header if any, even if first worker had different http header  (WK not impl)

XHR(&quot;foo.php?XXX&quot;)
    - query part of URL will be encoded using UTF8 (in WK, document encoding)
    - relative URL will be completed using base URL of the document (in WK, base url of the first worker)
    - loaded content will be decoded using UTF8 or http header if any (WK+)
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112557</commentid>
    <comment_count>13</comment_count>
      <attachid>28345</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-03-06 01:58:46 -0800</bug_when>
    <thetext>Comment on attachment 28345
Updated the test so it runs in FF too.

Thanks, that&apos;s very useful information! Much of the Gecko behavior looks like it may be unintentional indeed - would you be willing to file bugs with Mozilla? It could also be worth discussing this with WHATWG.

-    // FIXME: does this need to provide a charset, like Document::completeURL does?
+    // Note Document::completeURL provides a charset here (to encode query portion of url when
+    // submitting charset-encoded forms data). Workers always use UTF-8 which is default for KURL.
     return KURL(m_location-&gt;url(), url);

I think that the word &quot;Note&quot; is extraneous here - it&apos;s a comment, after all. Per your research, it is not clear that we&apos;ll want this behavior forever, given that Firefox uses document encoding for Worker and importScripts() URL completion. So, the FIXME still seems appropriate, perhaps amended with results of your research.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112651</commentid>
    <comment_count>14</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-03-06 13:37:33 -0800</bug_when>
    <thetext>Fixed the comment to be FIXME and landed in http://trac.webkit.org/changeset/41499

I&apos;ll follow up separately with FF on what is the right encodings and base URLs to be used there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112688</commentid>
    <comment_count>15</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-03-06 18:20:41 -0800</bug_when>
    <thetext>Retested with latest FF nightly (Minefield, 03/04/09)

There is progress - nested workers and importScripts now resolves relative URLs using the parent worker script&apos; base url (previously was using top-level document base URL) :-)

inside workers, non-latin portions of query in XHR URLs now are encoded using top document encoding (was UTF-8 before) - strange, in document they still use UTF-8
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114410</commentid>
    <comment_count>16</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-03-19 16:54:03 -0700</bug_when>
    <thetext>More info:
Discussion on WHATWG IRC and mailing list show that the spec will very soon capture the follwoing;
1. All URLs in Workers are encoded using UTF-8
2. &apos;Default&apos; encoding for scripts themselves is always UTF-8 unless overridden by Con tent-Type http header.

I&apos;ve filed bugs for FF and will file a new one for WebKit, to remove encoding() from ScriptExecutionContext().</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27950</attachid>
            <date>2009-02-24 18:34:07 -0800</date>
            <delta_ts>2009-02-25 17:55:45 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>7654</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MmNkMTQ1OC4uZTc1ZTI4NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAwOS0wMi0yNCAgRG1pdHJ5IFRpdG92
ICA8ZGltaWNoQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjQxNTAKKyAgICAgICAgTW92ZSBUZXh0UmVzb3VyY2VEZWNvZGVyIChtX2RlY29kZXIpIGZyb20g
RG9jdW1lbnQgdG8gU2NyaXB0RXhlY3V0aW9uQ29udGV4dC4KKyAgICAgICAgVGhpcyBhbGxvd3Mg
dXNpbmcgZW5jb2RpbmdzIGluIFdvcmtlcnMgZm9yIFVSTCBjb21wbGV0aW9uIGFuZCBsb2FkaW5n
IHNjcmlwdHMuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6On5Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y29t
cGxldGVVUkwpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOiBSZW1vdmUgbV9kZWNvZGVyLCBk
ZWNvZGVyKCksIHNldERlY29kZXIoKSwgaW5wdXRFbmNvZGluZygpIGFuZCBhIGZldyBpbmxpbmUg
CisgICAgICAgIG1ldGhvZHMgYWNjZXNzaW5nIHRoZSBkZWNvZGVyLiBUaGV5IGFyZSBnb2luZyB0
byBTY3JpcHRFeGVjdXRpb25Db250ZXh0LgorCisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
aW5wdXRFbmNvZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpzZXREZWNvZGVyKToKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZGVjb2Rlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpkaXNwbGF5U3RyaW5nTW9kaWZp
ZWRCeUVuY29kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OmRpc3BsYXlCdWZmZXJNb2RpZmllZEJ5RW5jb2RpbmcpOgorCiAyMDA5LTAyLTIzICBKdWxpZW4g
Q2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDg2ZmEzNmUuLmZmNmQwM2EgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
QEAgLTQ1Miw4ICs0NTIsNiBAQCBEb2N1bWVudDo6fkRvY3VtZW50KCkKIAogICAgIGNsZWFyQVhP
YmplY3RDYWNoZSgpOwogCi0gICAgbV9kZWNvZGVyID0gMDsKLSAgICAKICAgICB1bnNpZ25lZCBj
b3VudCA9IHNpemVvZihtX25hbWVDb2xsZWN0aW9uSW5mbykgLyBzaXplb2YobV9uYW1lQ29sbGVj
dGlvbkluZm9bMF0pOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQog
ICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9uYW1lQ29sbGVjdGlvbkluZm9baV0pOwpAQCAtODMw
LDEzICs4MjgsNiBAQCBTdHJpbmcgRG9jdW1lbnQ6OnJlYWR5U3RhdGUoKSBjb25zdAogICAgIHJl
dHVybiBTdHJpbmcoKTsKIH0KIAotU3RyaW5nIERvY3VtZW50OjppbnB1dEVuY29kaW5nKCkgY29u
c3QKLXsKLSAgICBpZiAoVGV4dFJlc291cmNlRGVjb2RlciogZCA9IGRlY29kZXIoKSkKLSAgICAg
ICAgcmV0dXJuIGQtPmVuY29kaW5nKCkubmFtZSgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0K
LQogU3RyaW5nIERvY3VtZW50OjpkZWZhdWx0Q2hhcnNldCgpIGNvbnN0CiB7CiAgICAgaWYgKFNl
dHRpbmdzKiBzZXR0aW5ncyA9IHRoaXMtPnNldHRpbmdzKCkpCkBAIC0zMTU5LDExICszMTUwLDYg
QEAgSFRNTE1hcEVsZW1lbnQgKkRvY3VtZW50OjpnZXRJbWFnZU1hcChjb25zdCBTdHJpbmcmIHVy
bCkgY29uc3QKICAgICByZXR1cm4gbV9pbWFnZU1hcHNCeU5hbWUuZ2V0KG1hcE5hbWUuaW1wbCgp
KTsKIH0KIAotdm9pZCBEb2N1bWVudDo6c2V0RGVjb2RlcihQYXNzUmVmUHRyPFRleHRSZXNvdXJj
ZURlY29kZXI+IGRlY29kZXIpCi17Ci0gICAgbV9kZWNvZGVyID0gZGVjb2RlcjsKLX0KLQogS1VS
TCBEb2N1bWVudDo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0CiB7CiAgICAg
Ly8gQWx3YXlzIHJldHVybiBhIG51bGwgVVJMIHdoZW4gcGFzc2VkIGEgbnVsbCBzdHJpbmcuCkBA
IC0zMTcxLDkgKzMxNTcsOSBAQCBLVVJMIERvY3VtZW50Ojpjb21wbGV0ZVVSTChjb25zdCBTdHJp
bmcmIHVybCkgY29uc3QKICAgICAvLyBTZWUgYWxzbyBbQ1NTXVN0eWxlU2hlZXQ6OmNvbXBsZXRl
VVJMKGNvbnN0IFN0cmluZyYpCiAgICAgaWYgKHVybC5pc051bGwoKSkKICAgICAgICAgcmV0dXJu
IEtVUkwoKTsKLSAgICBpZiAoIW1fZGVjb2RlcikKKyAgICBpZiAoIWRlY29kZXIoKSkKICAgICAg
ICAgcmV0dXJuIEtVUkwobV9iYXNlVVJMLCB1cmwpOwotICAgIHJldHVybiBLVVJMKG1fYmFzZVVS
TCwgdXJsLCBtX2RlY29kZXItPmVuY29kaW5nKCkpOworICAgIHJldHVybiBLVVJMKG1fYmFzZVVS
TCwgdXJsLCBkZWNvZGVyKCktPmVuY29kaW5nKCkpOwogfQogCiB2b2lkIERvY3VtZW50OjpzZXRJ
blBhZ2VDYWNoZShib29sIGZsYWcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
IGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCBiZTA2OTYyLi40ZTE0NDY0IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgK
QEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgotI2lu
Y2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1
ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgpA
QCAtMTAzLDcgKzEwMiw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTdHlsZVNo
ZWV0OwogICAgIGNsYXNzIFN0eWxlU2hlZXRMaXN0OwogICAgIGNsYXNzIFRleHQ7Ci0gICAgY2xh
c3MgVGV4dFJlc291cmNlRGVjb2RlcjsKICAgICBjbGFzcyBUb2tlbml6ZXI7CiAgICAgY2xhc3Mg
VHJlZVdhbGtlcjsKICAgICBjbGFzcyBYTUxIdHRwUmVxdWVzdDsKQEAgLTI0Miw3ICsyNDAsNyBA
QCBwdWJsaWM6CiAKICAgICBFbGVtZW50KiBlbGVtZW50RnJvbVBvaW50KGludCB4LCBpbnQgeSkg
Y29uc3Q7CiAgICAgU3RyaW5nIHJlYWR5U3RhdGUoKSBjb25zdDsKLSAgICBTdHJpbmcgaW5wdXRF
bmNvZGluZygpIGNvbnN0OworCiAgICAgU3RyaW5nIGRlZmF1bHRDaGFyc2V0KCkgY29uc3Q7CiAK
ICAgICBTdHJpbmcgY2hhcnNldCgpIGNvbnN0IHsgcmV0dXJuIGlucHV0RW5jb2RpbmcoKTsgfQpA
QCAtOTgwLDI0ICs5NzgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTaG91bGRDcmVhdGVSZW5k
ZXJlcnMoYm9vbCk7CiAgICAgYm9vbCBzaG91bGRDcmVhdGVSZW5kZXJlcnMoKTsKICAgICAKLSAg
ICB2b2lkIHNldERlY29kZXIoUGFzc1JlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPik7Ci0gICAg
VGV4dFJlc291cmNlRGVjb2RlciogZGVjb2RlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2Rlci5n
ZXQoKTsgfQotCi0gICAgU3RyaW5nIGRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcoY29u
c3QgU3RyaW5nJiBzdHIpIGNvbnN0IHsKLSAgICAgICAgaWYgKG1fZGVjb2RlcikKLSAgICAgICAg
ICAgIHJldHVybiBtX2RlY29kZXItPmVuY29kaW5nKCkuZGlzcGxheVN0cmluZyhzdHIuaW1wbCgp
KTsKLSAgICAgICAgcmV0dXJuIHN0cjsKLSAgICB9Ci0gICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBs
PiBkaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
c3RyKSBjb25zdCB7Ci0gICAgICAgIGlmIChtX2RlY29kZXIpCi0gICAgICAgICAgICByZXR1cm4g
bV9kZWNvZGVyLT5lbmNvZGluZygpLmRpc3BsYXlTdHJpbmcoc3RyKTsKLSAgICAgICAgcmV0dXJu
IHN0cjsKLSAgICB9Ci0gICAgdm9pZCBkaXNwbGF5QnVmZmVyTW9kaWZpZWRCeUVuY29kaW5nKFVD
aGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbikgY29uc3QgewotICAgICAgICBpZiAobV9kZWNvZGVy
KQotICAgICAgICAgICAgbV9kZWNvZGVyLT5lbmNvZGluZygpLmRpc3BsYXlCdWZmZXIoYnVmZmVy
LCBsZW4pOwotICAgIH0KLQogICAgIC8vIFF1aXJrIGZvciB0aGUgYmVuZWZpdCBvZiBBcHBsZSdz
IERpY3Rpb25hcnkgYXBwbGljYXRpb24uCiAgICAgdm9pZCBzZXRGcmFtZUVsZW1lbnRzU2hvdWxk
SWdub3JlU2Nyb2xsaW5nKGJvb2wgaWdub3JlKSB7IG1fZnJhbWVFbGVtZW50c1Nob3VsZElnbm9y
ZVNjcm9sbGluZyA9IGlnbm9yZTsgfQogICAgIGJvb2wgZnJhbWVFbGVtZW50c1Nob3VsZElnbm9y
ZVNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVFbGVtZW50c1Nob3VsZElnbm9yZVNj
cm9sbGluZzsgfQpAQCAtMTA2Myw4ICsxMDQzLDYgQEAgcHJpdmF0ZToKICAgICBSZW5kZXJPYmpl
Y3QqIG1fc2F2ZWRSZW5kZXJlcjsKICAgICBpbnQgbV9zZWN1cmVGb3JtczsKICAgICAKLSAgICBS
ZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOwotCiAgICAgLy8gV2UgbWFpbnRh
aW4gdGhlIGludmFyaWFudCB0aGF0IG1fZHVwbGljYXRlSWRzIGlzIHRoZSBjb3VudCBvZiBhbGwg
ZWxlbWVudHMgd2l0aCBhIGdpdmVuIElECiAgICAgLy8gZXhjbHVkaW5nIHRoZSBvbmUgcmVmZXJl
bmNlZCBpbiBtX2VsZW1lbnRzQnlJZCwgaWYgYW55LiBUaGlzIG1lYW5zIGl0IG9uZSBsZXNzIHRo
YW4gdGhlIHRvdGFsIGNvdW50CiAgICAgLy8gd2hlbiB0aGUgZmlyc3Qgbm9kZSB3aXRoIGEgZ2l2
ZW4gSUQgaXMgY2FjaGVkLCBvdGhlcndpc2UgdGhlIHNhbWUgYXMgdGhlIHRvdGFsIGNvdW50Lgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAgYi9XZWJD
b3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAppbmRleCBjNTE4NzM0Li5jM2E5ODRh
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAorKysg
Yi9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcApAQCAtMTkxLDYgKzE5MSwx
OCBAQCBET01UaW1lciogU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZmluZFRpbWVvdXQoaW50IHRp
bWVvdXRJZCkKICAgICByZXR1cm4gbV90aW1lb3V0cy5nZXQodGltZW91dElkKTsKIH0KIAorU3Ry
aW5nIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmlucHV0RW5jb2RpbmcoKSBjb25zdAoreworICAg
IGlmIChtX2RlY29kZXIpCisgICAgICAgIHJldHVybiBtX2RlY29kZXItPmVuY29kaW5nKCkubmFt
ZSgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKyAgICAKK3ZvaWQgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6c2V0RGVjb2RlcihQYXNzUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGRlY29k
ZXIpCit7CisgICAgbV9kZWNvZGVyID0gZGVjb2RlcjsKK30KKwogU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6VGFzazo6flRhc2soKQogewogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oIGIvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
CmluZGV4IGNmMzI3ZDcuLmEwYzVkMDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaAorKysgYi9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkNvbnNvbGUuaCIKICNpbmNsdWRlICJL
VVJMLmgiCisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgpAQCAtMTAxLDYgKzEwMiwyNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZvaWQgcmVtb3ZlVGltZW91dChpbnQgdGltZW91dElkKTsKICAgICAgICAgRE9NVGltZXIqIGZp
bmRUaW1lb3V0KGludCB0aW1lb3V0SWQpOwogCisgICAgICAgIFN0cmluZyBpbnB1dEVuY29kaW5n
KCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0RGVjb2RlcihQYXNzUmVmUHRyPFRleHRSZXNvdXJj
ZURlY29kZXI+KTsKKyAgICAgICAgVGV4dFJlc291cmNlRGVjb2RlciogZGVjb2RlcigpIGNvbnN0
IHsgcmV0dXJuIG1fZGVjb2Rlci5nZXQoKTsgfQorICAgICAgICAKKyAgICAgICAgU3RyaW5nIGRp
c3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcoY29uc3QgU3RyaW5nJiBzdHIpIGNvbnN0IHsK
KyAgICAgICAgICAgIGlmIChtX2RlY29kZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fZGVj
b2Rlci0+ZW5jb2RpbmcoKS5kaXNwbGF5U3RyaW5nKHN0ci5pbXBsKCkpOworICAgICAgICAgICAg
cmV0dXJuIHN0cjsKKyAgICAgICAgfQorICAgICAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGRp
c3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBzdHIp
IGNvbnN0IHsKKyAgICAgICAgICAgIGlmIChtX2RlY29kZXIpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKS5kaXNwbGF5U3RyaW5nKHN0cik7CisgICAgICAgICAg
ICByZXR1cm4gc3RyOworICAgICAgICB9CisgICAgICAgIHZvaWQgZGlzcGxheUJ1ZmZlck1vZGlm
aWVkQnlFbmNvZGluZyhVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW4pIGNvbnN0IHsKKyAgICAg
ICAgICAgIGlmIChtX2RlY29kZXIpCisgICAgICAgICAgICAgICAgbV9kZWNvZGVyLT5lbmNvZGlu
ZygpLmRpc3BsYXlCdWZmZXIoYnVmZmVyLCBsZW4pOworICAgICAgICB9CiAgICAgcHJvdGVjdGVk
OgogICAgICAgICAvLyBFeHBsaWNpdGx5IG92ZXJyaWRlIHRoZSBzZWN1cml0eSBvcmlnaW4gZm9y
IHRoaXMgc2NyaXB0IGNvbnRleHQuCiAgICAgICAgIC8vIE5vdGU6IEl0IGlzIGRhbmdlcm91cyB0
byBjaGFuZ2UgdGhlIHNlY3VyaXR5IG9yaWdpbiBvZiBhIHNjcmlwdCBjb250ZXh0CkBAIC0xMTEs
NiArMTMwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGNvbnN0IEtV
UkwmIHZpcnR1YWxVUkwoKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgS1VSTCB2aXJ0dWFs
Q29tcGxldGVVUkwoY29uc3QgU3RyaW5nJikgY29uc3QgPSAwOwogCisgICAgICAgIFJlZlB0cjxU
ZXh0UmVzb3VyY2VEZWNvZGVyPiBtX2RlY29kZXI7CiAgICAgICAgIFJlZlB0cjxTZWN1cml0eU9y
aWdpbj4gbV9zZWN1cml0eU9yaWdpbjsKIAogICAgICAgICBIYXNoU2V0PE1lc3NhZ2VQb3J0Kj4g
bV9tZXNzYWdlUG9ydHM7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27999</attachid>
            <date>2009-02-25 17:55:45 -0800</date>
            <delta_ts>2009-03-04 17:51:32 -0800</delta_ts>
            <desc>Updated patch.</desc>
            <filename>patch_v2.txt</filename>
            <type>text/plain</type>
            <size>15314</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NGZjZTI2OS4uZDhlMDRlZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAwOS0wMi0yNSAgRG1pdHJ5IFRpdG92
ICA8ZGltaWNoQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjQxNTAKKyAgICAgICAgQWRkIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZW5jb2Rp
bmcoKQorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjplbmNvZGluZyk6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6aW5wdXRFbmNvZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6Y2hhcnNldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y2hhcmFjdGVyU2V0
KToKKyAgICAgICAgQWRkIG5ldyB2aXJ0dWFsIG1ldGhvZCBhbmQgcm91dGUgRE9NIHN5bm9ueW0g
ZnVuY3Rpb25zIG9uIERvY3VtZW50IHRocm91Z2ggaXQuCisKKyAgICAgICAgKiBkb20vU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Oldvcmtlcjo6V29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6
bm90aWZ5RmluaXNoZWQpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpXb3JrZXJDb250ZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OmVuY29kaW5nKToKKyAgICAgICAgKiB3b3JrZXJzL1dv
cmtlckNvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OmNyZWF0ZSk6
CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0UHJveHkuaDoKKyAgICAgICAgKiB3b3Jr
ZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck1l
c3NhZ2luZ1Byb3h5OjpzdGFydFdvcmtlckNvbnRleHQpOgorICAgICAgICAqIHdvcmtlcnMvV29y
a2VyTWVzc2FnaW5nUHJveHkuaDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclRocmVhZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRTdGFydHVwRGF0YTo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZFN0YXJ0dXBEYXRhOjpXb3JrZXJUaHJlYWRTdGFy
dHVwRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OldvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZCk6CisgICAgICAgICogd29ya2Vycy9Xb3Jr
ZXJUaHJlYWQuaDoKKyAgICAgICAgQWxsIG9mIHRoZSBhYm92ZSByb3V0ZSB0aGUgJ2VuY29kaW5n
JyBwYXJhbWV0ZXIgb2YgcGFyZW50IGNvbnRleHQgdG8gdGhlIG5ldworICAgICAgICBpbnN0YW5j
ZSBvZiBXb3JrZXJDb250ZXh0IC0gZnJvbSBXb3JrZXI6Om5vdGlmeUZpbmlzaGVkKCkgdmlhIFdv
cmtlck1lc3NhZ2luZ1Byb3h5IAorICAgICAgICB0aHJvdWdoIFdvcmtlclRocmVhZCB0aHJvdWdo
IFdvcmtlclRocmVhZFN0YXJ0dXBEYXRhIGFuZCBpbnRvIGNvbnN0cnVjdG9yIG9mIFdvcmtlckNv
bnRleHQuCisKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OmNvbXBsZXRlVVJMKTog
VXNlIHRoZSBlbmNvZGluZygpIGluIGNvbXBsZXRpb24gb2YgVVJMLgorCiAyMDA5LTAyLTI1ICBK
aWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbGV4
ZXkgUHJvc2t1cnlha292LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDg2ZmEzNmUuLjY1MjMzYmYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKQEAgLTgzMCw3ICs4MzAsNyBAQCBTdHJpbmcgRG9jdW1lbnQ6OnJlYWR5U3RhdGUoKSBjb25z
dAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotU3RyaW5nIERvY3VtZW50OjppbnB1dEVuY29k
aW5nKCkgY29uc3QKK1N0cmluZyBEb2N1bWVudDo6ZW5jb2RpbmcoKSBjb25zdAogewogICAgIGlm
IChUZXh0UmVzb3VyY2VEZWNvZGVyKiBkID0gZGVjb2RlcigpKQogICAgICAgICByZXR1cm4gZC0+
ZW5jb2RpbmcoKS5uYW1lKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCBiZTA2OTYyLi5mYzkzNTE4IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAg
LTI0MiwxMSArMjQyLDE1IEBAIHB1YmxpYzoKIAogICAgIEVsZW1lbnQqIGVsZW1lbnRGcm9tUG9p
bnQoaW50IHgsIGludCB5KSBjb25zdDsKICAgICBTdHJpbmcgcmVhZHlTdGF0ZSgpIGNvbnN0Owot
ICAgIFN0cmluZyBpbnB1dEVuY29kaW5nKCkgY29uc3Q7CisKICAgICBTdHJpbmcgZGVmYXVsdENo
YXJzZXQoKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIFN0cmluZyBlbmNvZGluZygpIGNvbnN0
OwogCi0gICAgU3RyaW5nIGNoYXJzZXQoKSBjb25zdCB7IHJldHVybiBpbnB1dEVuY29kaW5nKCk7
IH0KLSAgICBTdHJpbmcgY2hhcmFjdGVyU2V0KCkgY29uc3QgeyByZXR1cm4gaW5wdXRFbmNvZGlu
ZygpOyB9CisgICAgLy8gU3lub255bXMgYmFja2luZyBzaW1pbGFyIERPTSBhdHRyaWJ1dGVzLgor
ICAgIFN0cmluZyBpbnB1dEVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gZW5jb2RpbmcoKTsgfQor
ICAgIFN0cmluZyBjaGFyc2V0KCkgY29uc3QgeyByZXR1cm4gZW5jb2RpbmcoKTsgfQorICAgIFN0
cmluZyBjaGFyYWN0ZXJTZXQoKSBjb25zdCB7IHJldHVybiBlbmNvZGluZygpOyB9CiAKICAgICB2
b2lkIHNldENoYXJzZXQoY29uc3QgU3RyaW5nJik7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9t
L1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBiL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaAppbmRleCBjZjMyN2Q3Li44NjdkMzRmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9T
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgKKysrIGIvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oCkBAIC02MCw2ICs2MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
S1VSTCBjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHVybCkgY29uc3QgeyByZXR1cm4gdmlydHVh
bENvbXBsZXRlVVJMKHVybCk7IH0KIAogICAgICAgICB2aXJ0dWFsIFN0cmluZyB1c2VyQWdlbnQo
Y29uc3QgS1VSTCYpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZW5jb2Rpbmco
KSBjb25zdCA9IDA7CiAKICAgICAgICAgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9zZWN1cml0eU9yaWdpbi5nZXQoKTsgfQogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCmlu
ZGV4IDBiYzlkYTIuLmE0NDk2ODAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIu
Y3BwCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCkBAIC02NCwxMSArNjQsMTEgQEAg
V29ya2VyOjpXb3JrZXIoY29uc3QgU3RyaW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8v
IEZJWE1FOiAnaW5oZXJpdCcgY2hhcnNldCBhbmQgYWN0dWFsIGxvYWRpbmcgc3VwcG9ydCBmcm9t
IG9yaWdpbmFsIGRvY3VtZW50IHRvIGVuYWJsZSBuZXN0ZWQgd29ya2Vycy4KKyAgICAvLyBGSVhN
RTogbmVzdGVkIHdvcmtlcnMgbmVlZCBsb2FkaW5nIHN1cHBvcnQuIENvbnNpZGVyIGFkb3B0aW5n
IFRocmVhZGFibGVMb2FkZXIgaGVyZS4KICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5pc0RvY3VtZW50KCkpOwogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0
PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKIAotICAgIG1fY2FjaGVkU2Ny
aXB0ID0gZG9jdW1lbnQtPmRvY0xvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KG1fc2NyaXB0VVJMLCBk
b2N1bWVudC0+Y2hhcnNldCgpKTsKKyAgICBtX2NhY2hlZFNjcmlwdCA9IGRvY3VtZW50LT5kb2NM
b2FkZXIoKS0+cmVxdWVzdFNjcmlwdChtX3NjcmlwdFVSTCwgc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5lbmNvZGluZygpKTsKICAgICBpZiAoIW1fY2FjaGVkU2NyaXB0KSB7CiAgICAgICAgIGRp
c3BhdGNoRXJyb3JFdmVudCgpOwogICAgICAgICByZXR1cm47CkBAIC0xMTgsNyArMTE4LDcgQEAg
dm9pZCBXb3JrZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKiB1bnVzZWRSZXNvdXJj
ZSkKICAgICBpZiAobV9jYWNoZWRTY3JpcHQtPmVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgZGlz
cGF0Y2hFcnJvckV2ZW50KCk7CiAgICAgZWxzZQotICAgICAgICBtX2NvbnRleHRQcm94eS0+c3Rh
cnRXb3JrZXJDb250ZXh0KG1fc2NyaXB0VVJMLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnVz
ZXJBZ2VudChtX3NjcmlwdFVSTCksIG1fY2FjaGVkU2NyaXB0LT5zY3JpcHQoKSk7CisgICAgICAg
IG1fY29udGV4dFByb3h5LT5zdGFydFdvcmtlckNvbnRleHQobV9zY3JpcHRVUkwsIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+dXNlckFnZW50KG1fc2NyaXB0VVJMKSwgbV9jYWNoZWRTY3JpcHQt
PmVuY29kaW5nKCksIG1fY2FjaGVkU2NyaXB0LT5zY3JpcHQoKSk7CiAKICAgICBtX2NhY2hlZFNj
cmlwdC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwogICAgIG1fY2FjaGVkU2NyaXB0ID0gMDsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcCBiL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJDb250ZXh0LmNwcAppbmRleCBhMjlhOGU0Li43MWFlM2FiIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dv
cmtlckNvbnRleHQuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50
LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgIldvcmtlckxvY2F0aW9u
LmgiCiAjaW5jbHVkZSAiV29ya2VyTmF2aWdhdG9yLmgiCiAjaW5jbHVkZSAiV29ya2VyT2JqZWN0
UHJveHkuaCIKQEAgLTQ3LDkgKzQ4LDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV29y
a2VyQ29udGV4dDo6V29ya2VyQ29udGV4dChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
dXNlckFnZW50LCBXb3JrZXJUaHJlYWQqIHRocmVhZCkKK1dvcmtlckNvbnRleHQ6OldvcmtlckNv
bnRleHQoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3Ry
aW5nJiBlbmNvZGluZywgV29ya2VyVGhyZWFkKiB0aHJlYWQpCiAgICAgOiBtX3VybCh1cmwpCiAg
ICAgLCBtX3VzZXJBZ2VudCh1c2VyQWdlbnQpCisgICAgLCBtX2VuY29kaW5nKGVuY29kaW5nKQog
ICAgICwgbV9sb2NhdGlvbihXb3JrZXJMb2NhdGlvbjo6Y3JlYXRlKHVybCkpCiAgICAgLCBtX3Nj
cmlwdChuZXcgV29ya2VyU2NyaXB0Q29udHJvbGxlcih0aGlzKSkKICAgICAsIG1fdGhyZWFkKHRo
cmVhZCkKQEAgLTg1LDggKzg3LDExIEBAIEtVUkwgV29ya2VyQ29udGV4dDo6Y29tcGxldGVVUkwo
Y29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0CiAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBjaGFuZ2Ug
dGhlIEtVUkwgY29uc3RydWN0b3IgdG8gaGF2ZSB0aGlzIGJlaGF2aW9yPwogICAgIGlmICh1cmwu
aXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBLVVJMKCk7Ci0gICAgLy8gRklYTUU6IGRvZXMgdGhp
cyBuZWVkIHRvIHByb3ZpZGUgYSBjaGFyc2V0LCBsaWtlIERvY3VtZW50Ojpjb21wbGV0ZVVSTCBk
b2VzPwotICAgIHJldHVybiBLVVJMKG1fbG9jYXRpb24tPnVybCgpLCB1cmwpOworCisgICAgaWYg
KG1fZW5jb2RpbmcuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBLVVJMKG1fbG9jYXRpb24tPnVy
bCgpLCB1cmwpOworCisgICAgcmV0dXJuIEtVUkwobV9sb2NhdGlvbi0+dXJsKCksIHVybCwgVGV4
dEVuY29kaW5nKG1fZW5jb2RpbmcpKTsKIH0KIAogU3RyaW5nIFdvcmtlckNvbnRleHQ6OnVzZXJB
Z2VudChjb25zdCBLVVJMJikgY29uc3QKQEAgLTk0LDYgKzk5LDExIEBAIFN0cmluZyBXb3JrZXJD
b250ZXh0Ojp1c2VyQWdlbnQoY29uc3QgS1VSTCYpIGNvbnN0CiAgICAgcmV0dXJuIG1fdXNlckFn
ZW50OwogfQogCitTdHJpbmcgV29ya2VyQ29udGV4dDo6ZW5jb2RpbmcoKSBjb25zdAoreworICAg
IHJldHVybiBtX2VuY29kaW5nOworfQorCiBXb3JrZXJOYXZpZ2F0b3IqIFdvcmtlckNvbnRleHQ6
Om5hdmlnYXRvcigpIGNvbnN0CiB7CiAgICAgaWYgKCFtX25hdmlnYXRvcikKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmggYi9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
Q29udGV4dC5oCmluZGV4IDQxNGUxM2EuLjIyNTU1NTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJDb250ZXh0LmgKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQu
aApAQCAtNDgsOSArNDgsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBXb3Jr
ZXJDb250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8V29ya2VyQ29udGV4dD4sIHB1YmxpYyBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LCBwdWJsaWMgRXZlbnRUYXJnZXQgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2VyQ29udGV4dD4gY3JlYXRlKGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIFdvcmtlclRocmVhZCogdGhyZWFkKQorICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJDb250ZXh0PiBjcmVhdGUoY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBlbmNvZGluZywgV29y
a2VyVGhyZWFkKiB0aHJlYWQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgV29ya2VyQ29udGV4dCh1cmwsIHVzZXJBZ2VudCwgdGhyZWFkKSk7CisgICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtlckNvbnRleHQodXJsLCB1c2VyQWdlbnQsIGVuY29k
aW5nLCB0aHJlYWQpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgfldvcmtlckNvbnRl
eHQoKTsKQEAgLTYzLDYgKzYzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBLVVJM
IGNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgU3Ry
aW5nIHVzZXJBZ2VudChjb25zdCBLVVJMJikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgU3RyaW5n
IGVuY29kaW5nKCkgY29uc3Q7CiAKICAgICAgICAgV29ya2VyTG9jYXRpb24qIGxvY2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi5nZXQoKTsgfQogICAgICAgICBXb3JrZXJOYXZpZ2F0
b3IqIG5hdmlnYXRvcigpIGNvbnN0OwpAQCAtMTA3LDEzICsxMDgsMTQgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CiAK
LSAgICAgICAgV29ya2VyQ29udGV4dChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiwgV29ya2Vy
VGhyZWFkKik7CisgICAgICAgIFdvcmtlckNvbnRleHQoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcsIFdvcmtlclRocmVhZCopOwogCiAgICAgICAgIHZp
cnR1YWwgY29uc3QgS1VSTCYgdmlydHVhbFVSTCgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIEtV
UkwgdmlydHVhbENvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCiAgICAgICAgIEtV
UkwgbV91cmw7CiAgICAgICAgIFN0cmluZyBtX3VzZXJBZ2VudDsKKyAgICAgICAgU3RyaW5nIG1f
ZW5jb2Rpbmc7CiAgICAgICAgIFJlZlB0cjxXb3JrZXJMb2NhdGlvbj4gbV9sb2NhdGlvbjsKICAg
ICAgICAgbXV0YWJsZSBSZWZQdHI8V29ya2VyTmF2aWdhdG9yPiBtX25hdmlnYXRvcjsKIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHRQcm94eS5oIGIvV2ViQ29yZS93
b3JrZXJzL1dvcmtlckNvbnRleHRQcm94eS5oCmluZGV4IGM4ZjU3NjEuLjg3OTI1ZGYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0UHJveHkuaAorKysgYi9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyQ29udGV4dFByb3h5LmgKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgfldvcmtlckNvbnRleHRQcm94eSgpIHt9CiAK
LSAgICAgICAgdmlydHVhbCB2b2lkIHN0YXJ0V29ya2VyQ29udGV4dChjb25zdCBLVVJMJiBzY3Jp
cHRVUkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUp
ID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHN0YXJ0V29ya2VyQ29udGV4dChjb25zdCBLVVJM
JiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIGVuY29k
aW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUpID0gMDsKIAogICAgICAgICB2aXJ0dWFsIHZv
aWQgdGVybWluYXRlV29ya2VyQ29udGV4dCgpID0gMDsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS93
b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJN
ZXNzYWdpbmdQcm94eS5jcHAKaW5kZXggZmFjYjA4Yy4uZmFjZTRkZCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcAorKysgYi9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwCkBAIC0xOTYsOSArMTk2LDkgQEAgV29ya2VyTWVz
c2FnaW5nUHJveHk6On5Xb3JrZXJNZXNzYWdpbmdQcm94eSgpCiAgICAgICAgICAgIHx8IChtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpICYmIGN1cnJlbnRUaHJlYWQo
KSA9PSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LmdldCgpKS0+dGhyZWFkKCktPnRocmVhZElEKCkpKTsKIH0KIAotdm9pZCBXb3JrZXJNZXNzYWdp
bmdQcm94eTo6c3RhcnRXb3JrZXJDb250ZXh0KGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3Qg
U3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSkKK3ZvaWQgV29ya2Vy
TWVzc2FnaW5nUHJveHk6OnN0YXJ0V29ya2VyQ29udGV4dChjb25zdCBLVVJMJiBzY3JpcHRVUkws
IGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBjb25zdCBT
dHJpbmcmIHNvdXJjZUNvZGUpCiB7Ci0gICAgUmVmUHRyPFdvcmtlclRocmVhZD4gdGhyZWFkID0g
V29ya2VyVGhyZWFkOjpjcmVhdGUoc2NyaXB0VVJMLCB1c2VyQWdlbnQsIHNvdXJjZUNvZGUsIHRo
aXMpOworICAgIFJlZlB0cjxXb3JrZXJUaHJlYWQ+IHRocmVhZCA9IFdvcmtlclRocmVhZDo6Y3Jl
YXRlKHNjcmlwdFVSTCwgdXNlckFnZW50LCBlbmNvZGluZywgc291cmNlQ29kZSwgdGhpcyk7CiAg
ICAgd29ya2VyVGhyZWFkQ3JlYXRlZCh0aHJlYWQpOwogICAgIHRocmVhZC0+c3RhcnQoKTsKIH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5oIGIvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmgKaW5kZXggM2M4NTg3Ni4uY2RhMTI1
YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmgKKysr
IGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmgKQEAgLTUwLDcgKzUwLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIC8vIEltcGxlbWVudGF0aW9ucyBvZiBX
b3JrZXJDb250ZXh0UHJveHkuCiAgICAgICAgIC8vIChPbmx5IHVzZSB0aGVzZSBtZXRob2RzIGlu
IHRoZSB3b3JrZXIgb2JqZWN0IHRocmVhZC4pCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzdGFydFdv
cmtlckNvbnRleHQoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2Vu
dCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHN0YXJ0
V29ya2VyQ29udGV4dChjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgdXNlckFn
ZW50LCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUpOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgdGVybWluYXRlV29ya2VyQ29udGV4dCgpOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQoY29uc3QgU3RyaW5nJiBtZXNz
YWdlKTsKICAgICAgICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Owpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAgYi9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyVGhyZWFkLmNwcAppbmRleCAzZDY1ODZmLi5lYWQ0ZjY2IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcAorKysgYi9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyVGhyZWFkLmNwcApAQCAtNDMsMzQgKzQzLDM2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBzdHJ1Y3QgV29ya2VyVGhyZWFkU3RhcnR1cERhdGEgOiBOb25jb3B5YWJsZSB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIHN0ZDo6YXV0b19wdHI8V29ya2VyVGhyZWFkU3RhcnR1cERhdGE+IGNyZWF0
ZShjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBT
dHJpbmcmIHNvdXJjZUNvZGUpCisgICAgc3RhdGljIHN0ZDo6YXV0b19wdHI8V29ya2VyVGhyZWFk
U3RhcnR1cERhdGE+IGNyZWF0ZShjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYg
dXNlckFnZW50LCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZUNv
ZGUpCiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjphdXRvX3B0cjxXb3JrZXJUaHJlYWRTdGFy
dHVwRGF0YT4obmV3IFdvcmtlclRocmVhZFN0YXJ0dXBEYXRhKHNjcmlwdFVSTCwgdXNlckFnZW50
LCBzb3VyY2VDb2RlKSk7CisgICAgICAgIHJldHVybiBzdGQ6OmF1dG9fcHRyPFdvcmtlclRocmVh
ZFN0YXJ0dXBEYXRhPihuZXcgV29ya2VyVGhyZWFkU3RhcnR1cERhdGEoc2NyaXB0VVJMLCB1c2Vy
QWdlbnQsIGVuY29kaW5nLCBzb3VyY2VDb2RlKSk7CiAgICAgfQogCiAgICAgS1VSTCBtX3Njcmlw
dFVSTDsKICAgICBTdHJpbmcgbV91c2VyQWdlbnQ7CisgICAgU3RyaW5nIG1fZW5jb2Rpbmc7CiAg
ICAgU3RyaW5nIG1fc291cmNlQ29kZTsKIHByaXZhdGU6Ci0gICAgV29ya2VyVGhyZWFkU3RhcnR1
cERhdGEoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29u
c3QgU3RyaW5nJiBzb3VyY2VDb2RlKTsKKyAgICBXb3JrZXJUaHJlYWRTdGFydHVwRGF0YShjb25z
dCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcm
IGVuY29kaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUpOwogfTsKIAotV29ya2VyVGhyZWFk
U3RhcnR1cERhdGE6OldvcmtlclRocmVhZFN0YXJ0dXBEYXRhKGNvbnN0IEtVUkwmIHNjcmlwdFVS
TCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSkKK1dv
cmtlclRocmVhZFN0YXJ0dXBEYXRhOjpXb3JrZXJUaHJlYWRTdGFydHVwRGF0YShjb25zdCBLVVJM
JiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIGVuY29k
aW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUpCiAgICAgOiBtX3NjcmlwdFVSTChzY3JpcHRV
UkwuY29weSgpKQogICAgICwgbV91c2VyQWdlbnQodXNlckFnZW50LmNvcHkoKSkKKyAgICAsIG1f
ZW5jb2RpbmcoZW5jb2RpbmcuY29weSgpKQogICAgICwgbV9zb3VyY2VDb2RlKHNvdXJjZUNvZGUu
Y29weSgpKQogewogfQogCi1QYXNzUmVmUHRyPFdvcmtlclRocmVhZD4gV29ya2VyVGhyZWFkOjpj
cmVhdGUoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29u
c3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJPYmplY3RQcm94eSogd29ya2VyT2JqZWN0UHJv
eHkpCitQYXNzUmVmUHRyPFdvcmtlclRocmVhZD4gV29ya2VyVGhyZWFkOjpjcmVhdGUoY29uc3Qg
S1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBl
bmNvZGluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJPYmplY3RQcm94eSogd29y
a2VyT2JqZWN0UHJveHkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJUaHJlYWQo
c2NyaXB0VVJMLCB1c2VyQWdlbnQsIHNvdXJjZUNvZGUsIHdvcmtlck9iamVjdFByb3h5KSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJUaHJlYWQoc2NyaXB0VVJMLCB1c2VyQWdlbnQs
IGVuY29kaW5nLCBzb3VyY2VDb2RlLCB3b3JrZXJPYmplY3RQcm94eSkpOwogfQogCi1Xb3JrZXJU
aHJlYWQ6OldvcmtlclRocmVhZChjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYg
dXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlck9iamVjdFByb3h5KiB3
b3JrZXJPYmplY3RQcm94eSkKK1dvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKGNvbnN0IEtVUkwm
IHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgZW5jb2Rp
bmcsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSwgV29ya2VyT2JqZWN0UHJveHkqIHdvcmtlck9i
amVjdFByb3h5KQogICAgIDogbV90aHJlYWRJRCgwKQogICAgICwgbV93b3JrZXJPYmplY3RQcm94
eSh3b3JrZXJPYmplY3RQcm94eSkKLSAgICAsIG1fc3RhcnR1cERhdGEoV29ya2VyVGhyZWFkU3Rh
cnR1cERhdGE6OmNyZWF0ZShzY3JpcHRVUkwsIHVzZXJBZ2VudCwgc291cmNlQ29kZSkpCisgICAg
LCBtX3N0YXJ0dXBEYXRhKFdvcmtlclRocmVhZFN0YXJ0dXBEYXRhOjpjcmVhdGUoc2NyaXB0VVJM
LCB1c2VyQWdlbnQsIGVuY29kaW5nLCBzb3VyY2VDb2RlKSkKIHsKIH0KIApAQCAtMTAwLDcgKzEw
Miw3IEBAIHZvaWQqIFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkKCkKIHsKICAgICB7CiAgICAg
ICAgIE11dGV4TG9ja2VyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKLSAgICAgICAgbV93
b3JrZXJDb250ZXh0ID0gV29ya2VyQ29udGV4dDo6Y3JlYXRlKG1fc3RhcnR1cERhdGEtPm1fc2Ny
aXB0VVJMLCBtX3N0YXJ0dXBEYXRhLT5tX3VzZXJBZ2VudCwgdGhpcyk7CisgICAgICAgIG1fd29y
a2VyQ29udGV4dCA9IFdvcmtlckNvbnRleHQ6OmNyZWF0ZShtX3N0YXJ0dXBEYXRhLT5tX3Njcmlw
dFVSTCwgbV9zdGFydHVwRGF0YS0+bV91c2VyQWdlbnQsIG1fc3RhcnR1cERhdGEtPm1fZW5jb2Rp
bmcsIHRoaXMpOwogICAgICAgICBpZiAobV9ydW5Mb29wLnRlcm1pbmF0ZWQoKSkgewogICAgICAg
ICAgICAgLy8gVGhlIHdvcmtlciB3YXMgdGVybWluYXRlZCBiZWZvcmUgdGhlIHRocmVhZCBoYWQg
YSBjaGFuY2UgdG8gcnVuLiBTaW5jZSB0aGUgY29udGV4dCBkaWRuJ3QgZXhpc3QgeWV0LCAKICAg
ICAgICAgICAgIC8vIGZvcmJpZEV4ZWN1dGlvbigpIGNvdWxkbid0IGJlIGNhbGxlZCBmcm9tIHN0
b3AoKS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaCBiL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaAppbmRleCBmMWE4YTUyLi43MjBkOGZiIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmgKKysrIGIvV2ViQ29yZS93b3JrZXJz
L1dvcmtlclRocmVhZC5oCkBAIC00NCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgIGNsYXNzIFdvcmtlclRocmVhZCA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtlclRocmVhZD4g
ewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2VyVGhyZWFkPiBj
cmVhdGUoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29u
c3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJPYmplY3RQcm94eSopOworICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxXb3JrZXJUaHJlYWQ+IGNyZWF0ZShjb25zdCBLVVJMJiBzY3JpcHRVUkws
IGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBjb25zdCBT
dHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlck9iamVjdFByb3h5Kik7CiAgICAgICAgIH5Xb3JrZXJU
aHJlYWQoKTsKIAogICAgICAgICBib29sIHN0YXJ0KCk7CkBAIC01NSw3ICs1NSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgV29ya2VyT2JqZWN0UHJveHkqIHdvcmtlck9iamVjdFBy
b3h5KCkgY29uc3QgeyByZXR1cm4gbV93b3JrZXJPYmplY3RQcm94eTsgfQogCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgV29ya2VyVGhyZWFkKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHVzZXJB
Z2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJPYmplY3RQcm94eSopOworICAg
ICAgICBXb3JrZXJUaHJlYWQoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCAg
Y29uc3QgU3RyaW5nJiBlbmNvZGluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJP
YmplY3RQcm94eSopOwogCiAgICAgICAgIHN0YXRpYyB2b2lkKiB3b3JrZXJUaHJlYWRTdGFydCh2
b2lkKik7CiAgICAgICAgIHZvaWQqIHdvcmtlclRocmVhZCgpOwo=
</data>
<flag name="review"
          id="13643"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28295</attachid>
            <date>2009-03-04 17:51:32 -0800</date>
            <delta_ts>2009-03-05 20:09:41 -0800</delta_ts>
            <desc>updated patch.</desc>
            <filename>patch_v2.txt</filename>
            <type>text/plain</type>
            <size>25092</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyMjk1MTRmLi4yNzgzNDY5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDktMDMt
MDQgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI0MTUwCisgICAgICAgIEFkZCB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OmVuY29kaW5nKCkKKworICAgICAgICBUZXN0IHRvIHZlcmlmeSBob3cgdGhlIHRl
eHQgZW5jb2RpbmcgaW4gd29ya2VycyBpcyB1c2VkLgorICAgICAgICBTY3JpcHQgZGVjb2Rpbmcg
YW5kIHVybCBjb21wbGV0aW9uIGlzIGNoZWNrZWQsIHdpdGggYW5kCisgICAgICAgIHcvbyBodHRw
ICdDb250ZW50LVR5cGU6IC4uLjtjaGFyc2V0PS4uLicgaGVhZGVyLgorCisgICAgICAgICogaHR0
cC90ZXN0cy93b3JrZXJzL3Jlc291cmNlcy93b3JrZXItZW5jb2RlZC5waHA6IEFkZGVkLgorICAg
ICAgICAqIGh0dHAvdGVzdHMvd29ya2Vycy9yZXNvdXJjZXMveGhyLXF1ZXJ5LXV0ZjgucGhwOiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dvcmtlcnMvcmVzb3VyY2VzL3hoci1yZXNwb25z
ZS5waHA6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd29ya2Vycy90ZXh0LWVuY29kaW5n
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy93b3JrZXJzL3RleHQt
ZW5jb2RpbmcuaHRtbDogQWRkZWQuCisKIDIwMDktMDMtMDQgIFBhbWVsYSBHcmVlbmUgIDxwYW1A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd29ya2Vycy9yZXNvdXJjZXMvd29ya2VyLWVu
Y29kZWQucGhwIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3JrZXJzL3Jlc291cmNlcy93b3Jr
ZXItZW5jb2RlZC5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEzNTE2
ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd29ya2Vycy9yZXNv
dXJjZXMvd29ya2VyLWVuY29kZWQucGhwCkBAIC0wLDAgKzEsMzQgQEAKKzw/cGhwCitoZWFkZXIo
IkV4cGlyZXM6IFRodSwgMDEgRGVjIDIwMDMgMTY6MDA6MDAgR01UIik7CitoZWFkZXIoIkNhY2hl
LUNvbnRyb2w6IG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUiKTsKK2hlYWRlcigiUHJhZ21hOiBu
by1jYWNoZSIpOworCisvLyBQYXJlbnQgZG9jdW1lbnQgaGFzIFdpbmRvd3MtMTI1MSBlbmNvZGlu
Zy4gVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgd29ya2VyIHNjcmlwdCBnZXRzIGRlY29kZWQgdXNp
bmcKKy8vIHBhcmVudCBkb2N1bWVudCBlbmNvZGluZyBvciB0aGUgb25lIGluIGh0dHAgaGVhZGVy
LCBpZiBzcGVjaWZpZWQuCiskY2hhcnNldD0kX0dFVFsnY2hhcnNldCddOworaWYgKCRjaGFyc2V0
ID09ICJrb2k4LXIiKSB7CisgICAgaGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlw
dDtjaGFyc2V0PWtvaTgtciIpOworICAgIHByaW50KCJwb3N0TWVzc2FnZSgnSGFzIGh0dHAgaGVh
ZGVyIHdpdGggY2hhcnNldD1rb2k4LXInKTsiKTsKK30gZWxzZSB7CisgICAgaGVhZGVyKCJDb250
ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdCIpOworICAgIHByaW50KCJwb3N0TWVzc2FnZSgnSGFz
IG5vIGh0dHAgaGVhZGVyIHdpdGggY2hhcnNldCcpOyIpOworfQorCitwcmludCgicG9zdE1lc3Nh
Z2UoJ09yaWdpbmFsIHRlc3Qgc3RyaW5nOiAnICsgU3RyaW5nLmZyb21DaGFyQ29kZSgweDQxRiwg
MHg0NDAsIDB4NDM4LCAweDQzMiwgMHg0MzUsIDB4NDQyKSk7Iik7CitwcmludCgicG9zdE1lc3Nh
Z2UoJ1Rlc3Q6IFx4RjBceEQyXHhDOVx4RDdceEM1XHhENCAoZW5jb2RlZCB1c2luZyBrb2k4LXIp
LicpOyIpOworcHJpbnQoInBvc3RNZXNzYWdlKCdUZXN0OiBceENGXHhGMFx4RThceEUyXHhFNVx4
RjIgKGVuY29kZWQgdXNpbmcgV2luZG93cy0xMjUxKS4nKTsiKTsKKworLy8gVGVzdCBob3cgWEhS
IGRlY29kZXMgaXRzIHJlc3BvbnNlIHRleHQuIFNob3VsZCBiZSBVVEY4IG9yIGEgY2hhcnNldCBm
cm9tIGh0dHAgaGVhZGVyLgorcHJpbnQoInZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsg
eGhyLm9wZW4oJ0dFVCcsICd4aHItcmVzcG9uc2UucGhwJywgZmFsc2UpOyIpOworcHJpbnQoInho
ci5zZW5kKCk7IHBvc3RNZXNzYWdlKHhoci5yZXNwb25zZVRleHQpOyIpOworCitwcmludCgidmFy
IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOyB4aHIub3BlbignR0VUJywgJ3hoci1yZXNwb25z
ZS5waHA/Y2hhcnNldD1rb2k4LXInLCBmYWxzZSk7Iik7CitwcmludCgieGhyLnNlbmQoKTsgcG9z
dE1lc3NhZ2UoeGhyLnJlc3BvbnNlVGV4dCk7Iik7CisKKy8vIFRlc3QgdGhhdCBVUkwgY29tcGxl
dGlvbiBpcyBkb25lIHVzaW5nIFVURi04LCByZWdhcmRsZXNzIG9mIHRoZSB3b3JrZXIncyBzY3Jp
cHQgZW5jb2RpbmcuCisvLyBUaGUgc2VydmVyIHNjcmlwdCB2ZXJpZmllcyB0aGF0IHF1ZXJ5IHBh
cmFtZXRlciBpcyBlbmNvZGVkIGluIFVURi04LgorcHJpbnQoInZhciB4aHIgPSBuZXcgWE1MSHR0
cFJlcXVlc3QoKTsgeGhyLm9wZW4oJ0dFVCcsICd4aHItcXVlcnktdXRmOC5waHA/cXVlcnk9JyAr
IFN0cmluZy5mcm9tQ2hhckNvZGUoMHg0MUYsIDB4NDQwLCAweDQzOCwgMHg0MzIsIDB4NDM1LCAw
eDQ0MiksIGZhbHNlKTsiKTsKK3ByaW50KCJ4aHIuc2VuZCgpOyBwb3N0TWVzc2FnZSh4aHIucmVz
cG9uc2VUZXh0KTsiKTsKKworcHJpbnQoInBvc3RNZXNzYWdlKCdleGl0Jyk7Iik7Cis/PgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3JrZXJzL3Jlc291cmNlcy94aHItcXVl
cnktdXRmOC5waHAgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvcmVzb3VyY2VzL3ho
ci1xdWVyeS11dGY4LnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjFm
MjU2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3JrZXJzL3Jl
c291cmNlcy94aHItcXVlcnktdXRmOC5waHAKQEAgLTAsMCArMSw5IEBACis8P3BocAoraGVhZGVy
KCJFeHBpcmVzOiBUaHUsIDAxIERlYyAyMDAzIDE2OjAwOjAwIEdNVCIpOworaGVhZGVyKCJDYWNo
ZS1Db250cm9sOiBuby1jYWNoZSwgbXVzdC1yZXZhbGlkYXRlIik7CitoZWFkZXIoIlByYWdtYTog
bm8tY2FjaGUiKTsKKworJHF1ZXJ5PSRfR0VUWydxdWVyeSddOworcHJpbnQoIlhIUiBxdWVyeTog
Iik7CitwcmludCgkcXVlcnkpOworPz4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvd29ya2Vycy9yZXNvdXJjZXMveGhyLXJlc3BvbnNlLnBocCBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvd29ya2Vycy9yZXNvdXJjZXMveGhyLXJlc3BvbnNlLnBocApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi41OGJiZDNiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy93b3JrZXJzL3Jlc291cmNlcy94aHItcmVzcG9uc2UucGhwCkBAIC0wLDAg
KzEsMTYgQEAKKzw/cGhwCitoZWFkZXIoIkV4cGlyZXM6IFRodSwgMDEgRGVjIDIwMDMgMTY6MDA6
MDAgR01UIik7CitoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlLCBtdXN0LXJldmFsaWRh
dGUiKTsKK2hlYWRlcigiUHJhZ21hOiBuby1jYWNoZSIpOworCisvLyBUaGUgWEhSIHJlc3BvbnNl
IGNvbnRhaW5zIHdvcmQgJ9Cf0YDQuNCy0LXRgiEnIChIZWxsbyEpLCBpbiBrb2k4LXIgZW5jb2Rp
bmcgKHdpdGggaHR0cCBoZWFkZXIpIG9yIGluIHV0ZjguCisvLyBJdCBzaG91bGQgYWx3YXlzIGJl
IGRlY29kZWQgYXMgJ9Cf0YDQuNCy0LXRgiEnLCByZWdhcmRsZXNzIG9mIHRoZSBwYXJlbnQgZG9j
dW1lbnQvd29ya2VyIGVuY29kaW5nLgorJGNoYXJzZXQ9JF9HRVRbJ2NoYXJzZXQnXTsKK2lmICgk
Y2hhcnNldCA9PSAia29pOC1yIikgeworICAgIGhlYWRlcigiQ29udGVudC1UeXBlOiB0ZXh0L3Bs
YWluOyBjaGFyc2V0PWtvaTgtciIpOworICAgIHByaW50KCJYSFI6IFx4RjBceEQyXHhDOVx4RDdc
eEM1XHhENCIpOworfSBlbHNlIHsKKyAgICBoZWFkZXIoIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFp
bjsiKTsKKyAgICBwcmludCgiWEhSOiDQn9GA0LjQstC10YIiKTsKK30KKz8+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvdGV4dC1lbmNvZGluZy1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvdGV4dC1lbmNvZGluZy1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZhNTIwMgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd29ya2Vycy90ZXh0LWVuY29kaW5n
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI5IEBACitUaGlzIHRlc3QgdmVyaWZpZXMgaGFuZGxp
bmcgb2YgdGV4dCBlbmNvZGluZyBpbiB3b3JrZXJzLiBUaGUgYmVoYXZpb3IgbWF0Y2hlcyBGRjMu
MWIyIHdpdGggYSBzaW5nbGUgZXhjbHVzaW9uIChzZWUgYmVsb3cpLgorVGhpcyBpcyB3aGF0J3Mg
dGVzdGVkOgorLSBJZiBodHRwIGhlYWRlciAnQ29udGVudC1UeXBlJyB3aXRoICdjaGFyc2V0JyBz
cGVjaWZpZWQgaXMgb24gcmVzcG9uc2Ugd2l0aCB3b3JrZXIgc2NyaXB0IG9yIFhIUiBwYXlsb2Fk
LCB0aGF0IGVuY29kaW5nIGlzIHVzZWQuCistIEluIGFic2Vuc2Ugb2YgaHR0cCBoZWFkZXIsIHRo
ZSBzY3JpcHQgb2YgdGhlIHdvcmtlciBpcyBkZWNvZGVkIHVzaW5nIHRoZSB0ZXh0IGVuY29kaW5n
IG9mIHRoZSBwYXJlbnQgZG9jdW1lbnQuCistIEluIGFic2Vuc2Ugb2YgaHR0cCBoZWFkZXIsIHRo
ZSBjb250ZW50IG9mIHRoZSBYSFIgcmVxdWVzdCBpcyBkZWNvZGVkIHVzaW5nIFVURi04LgorLSBU
aGUgVVJMcyB1c2VkIGluIHdvcmtlcnMgKGZvciBzdWJ3b3JrZXJzIG9yIFhIUikgYXJlIGFsd2F5
cyBlbmNvZGVkIHVzaW5nIFVURi04IChpbiByZWd1bGFyIGh0bWwgZG9jdW1lbnRzIHBhcnRzIG9m
IHRoZSBxdWVyeSBhbiBoYXNoIG1heSBiZSBlbmNvZGVkIHdpdGggb3RoZXIgZW5jb2RpbmdzKS4K
Ky0gVGhlIGJhc2UgVVJMIGZvciB0aGUgd29ya2VyICh1c2VkIHRvIHJlc29sdmUgcmVsYXRpdmUg
VVJMcyBmb3Igc3Vid29ya2VycyBhbmQgWEhSKSBpcyB0aGUgVVJMIG9mIGl0cyBzY3JpcHQuIE5v
dGU6IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gRkYgMy4xYjIgd2hpY2ggaXMgdXNpbmcgdGhlIFVS
TCBvZiB0aGUgcGFyZW50IGRvY3VtZW50LCB3aGljaCBtYXkgYmUgYSBidWcgKFRCRCkuCisKK0Rv
Y3VtZW50IGVuY29kaW5nOiB3aW5kb3dzLTEyNTEKK0RvY3VtZW50LCBXb3JrZXJzOiBBbGwgWEhS
IHJlc3BvbnNlcyBzaG91bGQgbWF0Y2ggdGhpczog0J/RgNC40LLQtdGCCitEb2N1bWVudDogOiBY
SFI6INCf0YDQuNCy0LXRggorRG9jdW1lbnQ6INCf0YDQvtCy0LXRgNC60LAKK3dvcmtlciAxOiBI
YXMgbm8gaHR0cCBoZWFkZXIgd2l0aCBjaGFyc2V0Cit3b3JrZXIgMTogT3JpZ2luYWwgdGVzdCBz
dHJpbmc6INCf0YDQuNCy0LXRggord29ya2VyIDE6IFRlc3Q6INCf0YDQuNCy0LXRgiAoZW5jb2Rl
ZCB1c2luZyBXaW5kb3dzLTEyNTEpLgord29ya2VyIDE6IFRlc3Q6INGA0KLQmdCn0JXQpCAoZW5j
b2RlZCB1c2luZyBrb2k4LXIpLgord29ya2VyIDE6IFhIUiBxdWVyeTog0J/RgNC40LLQtdGCCit3
b3JrZXIgMTogWEhSOiDQn9GA0LjQstC10YIKK3dvcmtlciAxOiBYSFI6INCf0YDQuNCy0LXRggor
d29ya2VyIDE6IGV4aXQKK3dvcmtlciAyOiBIYXMgaHR0cCBoZWFkZXIgd2l0aCBjaGFyc2V0PWtv
aTgtcgord29ya2VyIDI6IE9yaWdpbmFsIHRlc3Qgc3RyaW5nOiDQn9GA0LjQstC10YIKK3dvcmtl
ciAyOiBUZXN0OiDQn9GA0LjQstC10YIgKGVuY29kZWQgdXNpbmcga29pOC1yKS4KK3dvcmtlciAy
OiBUZXN0OiDQvtCf0KXQkdCV0KAgKGVuY29kZWQgdXNpbmcgV2luZG93cy0xMjUxKS4KK3dvcmtl
ciAyOiBYSFIgcXVlcnk6INCf0YDQuNCy0LXRggord29ya2VyIDI6IFhIUjog0J/RgNC40LLQtdGC
Cit3b3JrZXIgMjogWEhSOiDQn9GA0LjQstC10YIKK3dvcmtlciAyOiBleGl0CisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd29ya2Vycy90ZXh0LWVuY29kaW5nLmh0bWwgYi9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvdGV4dC1lbmNvZGluZy5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYjhjYzcKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvdGV4dC1lbmNvZGluZy5odG1sCkBAIC0wLDAg
KzEsNjkgQEAKKzxodG1sPgorPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50
PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUxIj4KKzxib2R5PgorVGhpcyB0ZXN0IHZl
cmlmaWVzIGhhbmRsaW5nIG9mIHRleHQgZW5jb2RpbmcgaW4gd29ya2Vycy4gVGhlIGJlaGF2aW9y
IG1hdGNoZXMgRkYzLjFiMiB3aXRoIGEgc2luZ2xlIGV4Y2x1c2lvbiAoc2VlIGJlbG93KS48YnI+
CitUaGlzIGlzIHdoYXQncyB0ZXN0ZWQ6PGJyPgorLSBJZiBodHRwIGhlYWRlciAnQ29udGVudC1U
eXBlJyB3aXRoICdjaGFyc2V0JyBzcGVjaWZpZWQgaXMgb24gcmVzcG9uc2Ugd2l0aCB3b3JrZXIg
c2NyaXB0IG9yIFhIUiBwYXlsb2FkLCB0aGF0IGVuY29kaW5nIGlzIHVzZWQuPGJyPgorLSBJbiBh
YnNlbnNlIG9mIGh0dHAgaGVhZGVyLCB0aGUgc2NyaXB0IG9mIHRoZSB3b3JrZXIgaXMgZGVjb2Rl
ZCB1c2luZyB0aGUgdGV4dCBlbmNvZGluZyBvZiB0aGUgcGFyZW50IGRvY3VtZW50Ljxicj4KKy0g
SW4gYWJzZW5zZSBvZiBodHRwIGhlYWRlciwgdGhlIGNvbnRlbnQgb2YgdGhlIFhIUiByZXF1ZXN0
IGlzIGRlY29kZWQgdXNpbmcgVVRGLTguPGJyPgorLSBUaGUgVVJMcyB1c2VkIGluIHdvcmtlcnMg
KGZvciBzdWJ3b3JrZXJzIG9yIFhIUikgYXJlIGFsd2F5cyBlbmNvZGVkIHVzaW5nIFVURi04IChp
biByZWd1bGFyIGh0bWwgZG9jdW1lbnRzIHBhcnRzIG9mIHRoZSBxdWVyeSBhbiBoYXNoIG1heSBi
ZSBlbmNvZGVkIHdpdGggb3RoZXIgZW5jb2RpbmdzKS48YnI+CistIFRoZSBiYXNlIFVSTCBmb3Ig
dGhlIHdvcmtlciAodXNlZCB0byByZXNvbHZlIHJlbGF0aXZlIFVSTHMgZm9yIHN1YndvcmtlcnMg
YW5kIFhIUikgaXMgdGhlIFVSTCBvZiBpdHMgc2NyaXB0LiBOb3RlOiB0aGlzIGlzIGRpZmZlcmVu
dCBmcm9tIEZGIDMuMWIyIHdoaWNoIGlzIHVzaW5nIHRoZSBVUkwgb2YgdGhlIHBhcmVudCBkb2N1
bWVudCwgd2hpY2ggbWF5IGJlIGEgYnVnIChUQkQpLjxicj48YnI+CisKKzxkaXYgc3R5bGU9ImJh
Y2tncm91bmQ6YmVpZ2U7IHBhZGRpbmc6MTBweDsiIGlkPSJzdGF0dXMiPjwvZGl2PgorCis8c2Ny
aXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7Cit9CisKKy8vIFdhaXQgZm9yIHRoaXMgbWFueSB3b3JrZXJzIHRvIGZpbmlzaCB0
aGVpciB0ZXN0cy4KKy8vIFdoZW4gd29ya2VyIGlzIGRvbmUsIGl0IHNlbmRzICdleGl0JyBtZXNz
YWdlLgordmFyIHdvcmtlckNvdW50ID0gMjsKKworLy8gTWVzc2FnZXMgZnJvbSB3b3JrZXJzIGlu
IHNlcGFyYXRlIHRocmVhZHMgd2lsbCBjb21lIGluIHVuc3RhYmxlIG9yZGVyLiBTb3J0IHRoZW0g
dG8gaGF2ZSBhIHN0YWJsZSB0ZXN0LgordmFyIHN0YXR1c1N0cmluZ3MgPSBuZXcgQXJyYXk7CisK
K2Z1bmN0aW9uIGZpbmlzaFRlc3QoKQoreworICAgIHN0YXR1c1N0cmluZ3Muc29ydCgpOworICAg
IHZhciBzdGF0dXNfcGFuZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3RhdHVzIik7Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0dXNTdHJpbmdzLmxlbmd0aDsgKytpKSB7CisgICAg
ICAgIHN0YXR1c19wYW5lbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdGF0
dXNTdHJpbmdzW2ldKSk7CisgICAgICAgIHN0YXR1c19wYW5lbC5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJiciIpKTsKKyAgICB9CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
bm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBsb2coc291cmNlLCBtc2cpCit7CisgICAgc3Rh
dHVzU3RyaW5ncy5wdXNoKHNvdXJjZSArICI6ICIgKyBtc2cpOworCisgICAgaWYgKG1zZyA9PSAi
ZXhpdCIgJiYgLS13b3JrZXJDb3VudCA9PSAwKQorICAgICAgICBmaW5pc2hUZXN0KCk7Cit9IAor
CisvLyBPdXRwdXQgY3VycmVudCBjaGFyc2V0IGFuZCBhIHN0cmluZyBpbiB0aGF0IGVuY29kaW5n
IHRvIG1ha2UKKy8vIHN1cmUgdGhpcyBkb2N1bWVudCBpcyBkZWNvZGVkIGFzIFdpbmRvd3MtMTI1
MS4KK2xvZygiRG9jdW1lbnQgZW5jb2RpbmciLCBkb2N1bWVudC5jaGFyc2V0KTsKK2xvZygiRG9j
dW1lbnQiLCAiz/Du4uXw6uAiKTsKKworbG9nKCJEb2N1bWVudCwgV29ya2VycyIsICJBbGwgWEhS
IHJlc3BvbnNlcyBzaG91bGQgbWF0Y2ggdGhpczogIiArIFN0cmluZy5mcm9tQ2hhckNvZGUoMHg0
MUYsIDB4NDQwLCAweDQzOCwgMHg0MzIsIDB4NDM1LCAweDQ0MikpOworCisvLyBSdW4gYSB3b3Jr
ZXIgdy9vIGh0dHAgaGVhZGVyLiBJdCBzaG91bGQgaW5oZXJpdCB0aGUgZW5jb2Rpbmcgb2YgdGhl
IGRvY3VtZW50LgordmFyIHdvcmtlcjEgPSBuZXcgV29ya2VyKCJyZXNvdXJjZXMvd29ya2VyLWVu
Y29kZWQucGhwIik7Cit3b3JrZXIxLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2dCkgeyBsb2coIndv
cmtlciAxIiwgZXZ0LmRhdGEpOyB9OworCisvLyBSdW4gYSB3b3JrZXIgd2l0aCBodHRwIGhlYWRl
ciBzcGVjaWZ5aW5nIGNoYXJzZXQuIFRoaXMgbmV3IGNoYXJzZXQgc2hvdWxkIGJlIGluIGVmZmVj
dC4KK3ZhciB3b3JrZXIyID0gbmV3IFdvcmtlcigicmVzb3VyY2VzL3dvcmtlci1lbmNvZGVkLnBo
cD9jaGFyc2V0PWtvaTgtciIpOword29ya2VyMi5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpIHsg
bG9nKCJ3b3JrZXIgMiIsIGV2dC5kYXRhKTsgfTsKKworLy8gUmVxdWVzdCBzb21lIGNvbnRlbnQu
IEl0IHNob3VsZCBiZSBkZWNvZGVkIHVzaW5nIFVURi04IGV2ZW4gdGhvdWdoIGN1cnJlbnQgZG9j
dW1lbnQgaXMgV2luZG93cy0xMjUxLgordmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO3ho
ci5vcGVuKCJHRVQiLCAicmVzb3VyY2VzL3hoci1yZXNwb25zZS5waHAiLCBmYWxzZSk7Cit4aHIu
c2VuZCgpO2xvZygiRG9jdW1lbnQ6ICIsIHhoci5yZXNwb25zZVRleHQpOworCis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KKworICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyZTYwNWMzLi44N2U3OTRmIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBA
CisyMDA5LTAzLTA0ICBEbWl0cnkgVGl0b3YgIDxkaW1pY2hAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDE1MAorICAgICAgICBBZGQgdmlydHVhbCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjplbmNvZGluZygpCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0
cy93b3JrZXJzL3RleHQtZW5jb2RpbmcuaHRtbAorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjplbmNvZGluZyk6CisgICAgICAgICogZG9t
L0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aW5wdXRFbmNvZGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y2hhcnNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudDo6Y2hhcmFjdGVyU2V0KToKKyAgICAgICAgQWRkIG5ldyB2aXJ0dWFsIG1ldGhv
ZCBhbmQgcm91dGUgRE9NIHN5bm9ueW0gZnVuY3Rpb25zIG9uIERvY3VtZW50IHRocm91Z2ggaXQu
CisKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oOgorICAgICAgICAqIHdv
cmtlcnMvV29ya2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6V29ya2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6bm90aWZ5RmluaXNoZWQpOgorICAgICAgICAqIHdvcmtl
cnMvV29ya2VyQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpX
b3JrZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OmVuY29kaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OmNvbXBsZXRlVVJMKTogQWRkZWQg
Y29tbWVudCBvbiB3aHkgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBEb2N1bWVudDo6Y29tcGxldGVV
UkwKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlckNvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0
UHJveHkuaDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Oldvcmtlck1lc3NhZ2luZ1Byb3h5OjpzdGFydFdvcmtlckNvbnRleHQp
OgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuaDoKKyAgICAgICAgKiB3
b3JrZXJzL1dvcmtlclRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRT
dGFydHVwRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZFN0YXJ0
dXBEYXRhOjpXb3JrZXJUaHJlYWRTdGFydHVwRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJUaHJlYWQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6Oldvcmtl
clRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZCk6
CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJUaHJlYWQuaDoKKyAgICAgICAgQWxsIG9mIHRoZSBh
Ym92ZSByb3V0ZSB0aGUgJ2VuY29kaW5nJyBwYXJhbWV0ZXIgb2YgcGFyZW50IGNvbnRleHQgdG8g
dGhlIG5ldworICAgICAgICBpbnN0YW5jZSBvZiBXb3JrZXJDb250ZXh0IC0gZnJvbSBXb3JrZXI6
Om5vdGlmeUZpbmlzaGVkKCkgdmlhIFdvcmtlck1lc3NhZ2luZ1Byb3h5CisgICAgICAgIHRocm91
Z2ggV29ya2VyVGhyZWFkIHRocm91Z2ggV29ya2VyVGhyZWFkU3RhcnR1cERhdGEgYW5kIGludG8g
Y29uc3RydWN0b3Igb2YgV29ya2VyQ29udGV4dC4KKwogMjAwOS0wMy0wNCAgQWRhbSBMYW5nbGV5
ICA8YWdsQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCmluZGV4IDllNjVkYjUuLmVhOWRlYjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTgyNyw3ICs4Mjcs
NyBAQCBTdHJpbmcgRG9jdW1lbnQ6OnJlYWR5U3RhdGUoKSBjb25zdAogICAgIHJldHVybiBTdHJp
bmcoKTsKIH0KIAotU3RyaW5nIERvY3VtZW50OjppbnB1dEVuY29kaW5nKCkgY29uc3QKK1N0cmlu
ZyBEb2N1bWVudDo6ZW5jb2RpbmcoKSBjb25zdAogewogICAgIGlmIChUZXh0UmVzb3VyY2VEZWNv
ZGVyKiBkID0gZGVjb2RlcigpKQogICAgICAgICByZXR1cm4gZC0+ZW5jb2RpbmcoKS5uYW1lKCk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaAppbmRleCBjZjMyOGRhLi5jOWIyMTg0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTI0MSwxMSArMjQxLDEzIEBA
IHB1YmxpYzoKIAogICAgIEVsZW1lbnQqIGVsZW1lbnRGcm9tUG9pbnQoaW50IHgsIGludCB5KSBj
b25zdDsKICAgICBTdHJpbmcgcmVhZHlTdGF0ZSgpIGNvbnN0OwotICAgIFN0cmluZyBpbnB1dEVu
Y29kaW5nKCkgY29uc3Q7Ci0gICAgU3RyaW5nIGRlZmF1bHRDaGFyc2V0KCkgY29uc3Q7CiAKLSAg
ICBTdHJpbmcgY2hhcnNldCgpIGNvbnN0IHsgcmV0dXJuIGlucHV0RW5jb2RpbmcoKTsgfQotICAg
IFN0cmluZyBjaGFyYWN0ZXJTZXQoKSBjb25zdCB7IHJldHVybiBpbnB1dEVuY29kaW5nKCk7IH0K
KyAgICBTdHJpbmcgZGVmYXVsdENoYXJzZXQoKSBjb25zdDsKKyAgICAKKyAgICAvLyBTeW5vbnlt
cyBiYWNraW5nIHNpbWlsYXIgRE9NIGF0dHJpYnV0ZXMuIFVzZSBEb2N1bWVudDo6ZW5jb2Rpbmco
KSB0byBhdm9pZCB2aXJ0dWFsIGRpc3BhdGNoLgorICAgIFN0cmluZyBpbnB1dEVuY29kaW5nKCkg
Y29uc3QgeyByZXR1cm4gRG9jdW1lbnQ6OmVuY29kaW5nKCk7IH0KKyAgICBTdHJpbmcgY2hhcnNl
dCgpIGNvbnN0IHsgcmV0dXJuIERvY3VtZW50OjplbmNvZGluZygpOyB9CisgICAgU3RyaW5nIGNo
YXJhY3RlclNldCgpIGNvbnN0IHsgcmV0dXJuIERvY3VtZW50OjplbmNvZGluZygpOyB9CiAKICAg
ICB2b2lkIHNldENoYXJzZXQoY29uc3QgU3RyaW5nJik7CiAKQEAgLTQ0NCw2ICs0NDYsNyBAQCBw
dWJsaWM6CiAgICAgS1VSTCBjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmKSBjb25zdDsKIAogICAg
IHZpcnR1YWwgU3RyaW5nIHVzZXJBZ2VudChjb25zdCBLVVJMJikgY29uc3Q7CisgICAgdmlydHVh
bCBTdHJpbmcgZW5jb2RpbmcoKSBjb25zdDsKIAogICAgIC8vIGZyb20gY2FjaGVkT2JqZWN0Q2xp
ZW50CiAgICAgdmlydHVhbCB2b2lkIHNldENTU1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmws
IGNvbnN0IFN0cmluZyYgY2hhcnNldCwgY29uc3QgQ2FjaGVkQ1NTU3R5bGVTaGVldCopOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIGIvV2ViQ29yZS9k
b20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCmluZGV4IGNmMzI3ZDcuLjg2N2QzNGYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAorKysgYi9XZWJDb3Jl
L2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKQEAgLTYwLDYgKzYwLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBLVVJMIGNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYgdXJsKSBj
b25zdCB7IHJldHVybiB2aXJ0dWFsQ29tcGxldGVVUkwodXJsKTsgfQogCiAgICAgICAgIHZpcnR1
YWwgU3RyaW5nIHVzZXJBZ2VudChjb25zdCBLVVJMJikgY29uc3QgPSAwOworICAgICAgICB2aXJ0
dWFsIFN0cmluZyBlbmNvZGluZygpIGNvbnN0ID0gMDsKIAogICAgICAgICBTZWN1cml0eU9yaWdp
biogc2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX3NlY3VyaXR5T3JpZ2luLmdldCgp
OyB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwIGIvV2ViQ29yZS93
b3JrZXJzL1dvcmtlci5jcHAKaW5kZXggMGJjOWRhMi4uNjAwOWM4ZiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlci5jcHAKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAK
QEAgLTY0LDExICs2NCwxMSBAQCBXb3JrZXI6Oldvcmtlcihjb25zdCBTdHJpbmcmIHVybCwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgLy8gRklYTUU6ICdpbmhlcml0JyBjaGFyc2V0IGFuZCBhY3R1YWwg
bG9hZGluZyBzdXBwb3J0IGZyb20gb3JpZ2luYWwgZG9jdW1lbnQgdG8gZW5hYmxlIG5lc3RlZCB3
b3JrZXJzLgorICAgIC8vIEZJWE1FOiBOZXN0ZWQgd29ya2VycyBuZWVkIGxvYWRpbmcgc3VwcG9y
dC4gQ29uc2lkZXIgYWRvcHRpbmcgVGhyZWFkYWJsZUxvYWRlciBoZXJlLgogICAgIEFTU0VSVChz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzRG9jdW1lbnQoKSk7CiAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
OwogCi0gICAgbV9jYWNoZWRTY3JpcHQgPSBkb2N1bWVudC0+ZG9jTG9hZGVyKCktPnJlcXVlc3RT
Y3JpcHQobV9zY3JpcHRVUkwsIGRvY3VtZW50LT5jaGFyc2V0KCkpOworICAgIG1fY2FjaGVkU2Ny
aXB0ID0gZG9jdW1lbnQtPmRvY0xvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KG1fc2NyaXB0VVJMLCBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmVuY29kaW5nKCkpOwogICAgIGlmICghbV9jYWNoZWRT
Y3JpcHQpIHsKICAgICAgICAgZGlzcGF0Y2hFcnJvckV2ZW50KCk7CiAgICAgICAgIHJldHVybjsK
QEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIFdvcmtlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVz
b3VyY2UqIHVudXNlZFJlc291cmNlKQogICAgIGlmIChtX2NhY2hlZFNjcmlwdC0+ZXJyb3JPY2N1
cnJlZCgpKQogICAgICAgICBkaXNwYXRjaEVycm9yRXZlbnQoKTsKICAgICBlbHNlCi0gICAgICAg
IG1fY29udGV4dFByb3h5LT5zdGFydFdvcmtlckNvbnRleHQobV9zY3JpcHRVUkwsIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+dXNlckFnZW50KG1fc2NyaXB0VVJMKSwgbV9jYWNoZWRTY3JpcHQt
PnNjcmlwdCgpKTsKKyAgICAgICAgbV9jb250ZXh0UHJveHktPnN0YXJ0V29ya2VyQ29udGV4dCht
X3NjcmlwdFVSTCwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51c2VyQWdlbnQobV9zY3JpcHRV
UkwpLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmVuY29kaW5nKCksIG1fY2FjaGVkU2NyaXB0
LT5zY3JpcHQoKSk7CiAKICAgICBtX2NhY2hlZFNjcmlwdC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwog
ICAgIG1fY2FjaGVkU2NyaXB0ID0gMDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJDb250ZXh0LmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAppbmRleCBh
MjlhOGU0Li42NWJiYzA3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4
dC5jcHAKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCkBAIC00Nyw5ICs0
NywxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdvcmtlckNvbnRleHQ6OldvcmtlckNv
bnRleHQoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgV29ya2VyVGhy
ZWFkKiB0aHJlYWQpCitXb3JrZXJDb250ZXh0OjpXb3JrZXJDb250ZXh0KGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcsIFdvcmtl
clRocmVhZCogdGhyZWFkKQogICAgIDogbV91cmwodXJsKQogICAgICwgbV91c2VyQWdlbnQodXNl
ckFnZW50KQorICAgICwgbV9lbmNvZGluZyhlbmNvZGluZykKICAgICAsIG1fbG9jYXRpb24oV29y
a2VyTG9jYXRpb246OmNyZWF0ZSh1cmwpKQogICAgICwgbV9zY3JpcHQobmV3IFdvcmtlclNjcmlw
dENvbnRyb2xsZXIodGhpcykpCiAgICAgLCBtX3RocmVhZCh0aHJlYWQpCkBAIC04NSw3ICs4Niw4
IEBAIEtVUkwgV29ya2VyQ29udGV4dDo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNv
bnN0CiAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBjaGFuZ2UgdGhlIEtVUkwgY29uc3RydWN0b3Ig
dG8gaGF2ZSB0aGlzIGJlaGF2aW9yPwogICAgIGlmICh1cmwuaXNOdWxsKCkpCiAgICAgICAgIHJl
dHVybiBLVVJMKCk7Ci0gICAgLy8gRklYTUU6IGRvZXMgdGhpcyBuZWVkIHRvIHByb3ZpZGUgYSBj
aGFyc2V0LCBsaWtlIERvY3VtZW50Ojpjb21wbGV0ZVVSTCBkb2VzPworICAgIC8vIE5vdGUgRG9j
dW1lbnQ6OmNvbXBsZXRlVVJMIHByb3ZpZGVzIGEgY2hhcnNldCBoZXJlICh0byBlbmNvZGUgcXVl
cnkgcG9ydGlvbiBvZiB1cmwgd2hlbgorICAgIC8vIHN1Ym1pdHRpbmcgY2hhcnNldC1lbmNvZGVk
IGZvcm1zIGRhdGEpLiBXb3JrZXJzIGFsd2F5cyB1c2UgVVRGLTggd2hpY2ggaXMgZGVmYXVsdCBm
b3IgS1VSTC4KICAgICByZXR1cm4gS1VSTChtX2xvY2F0aW9uLT51cmwoKSwgdXJsKTsKIH0KIApA
QCAtOTQsNiArOTYsMTEgQEAgU3RyaW5nIFdvcmtlckNvbnRleHQ6OnVzZXJBZ2VudChjb25zdCBL
VVJMJikgY29uc3QKICAgICByZXR1cm4gbV91c2VyQWdlbnQ7CiB9CiAKK1N0cmluZyBXb3JrZXJD
b250ZXh0OjplbmNvZGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZW5jb2Rpbmc7Cit9CisK
IFdvcmtlck5hdmlnYXRvciogV29ya2VyQ29udGV4dDo6bmF2aWdhdG9yKCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fbmF2aWdhdG9yKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNv
bnRleHQuaCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmgKaW5kZXggNDE0ZTEzYS4u
MjI1NTU1NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaAorKysg
Yi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCkBAIC00OCw5ICs0OCw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFdvcmtlckNvbnRleHQgOiBwdWJsaWMgUmVmQ291
bnRlZDxXb3JrZXJDb250ZXh0PiwgcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHB1Ymxp
YyBFdmVudFRhcmdldCB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxX
b3JrZXJDb250ZXh0PiBjcmVhdGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHVzZXJB
Z2VudCwgV29ya2VyVGhyZWFkKiB0aHJlYWQpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdv
cmtlckNvbnRleHQ+IGNyZWF0ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdXNlckFn
ZW50LCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBXb3JrZXJUaHJlYWQqIHRocmVhZCkKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJDb250ZXh0KHVybCwg
dXNlckFnZW50LCB0aHJlYWQpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29y
a2VyQ29udGV4dCh1cmwsIHVzZXJBZ2VudCwgZW5jb2RpbmcsIHRocmVhZCkpOwogICAgICAgICB9
CiAKICAgICAgICAgdmlydHVhbCB+V29ya2VyQ29udGV4dCgpOwpAQCAtNjMsNiArNjMsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEtVUkwgY29tcGxldGVVUkwoY29uc3QgU3RyaW5n
JikgY29uc3Q7CiAKICAgICAgICAgdmlydHVhbCBTdHJpbmcgdXNlckFnZW50KGNvbnN0IEtVUkwm
KSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZW5jb2RpbmcoKSBjb25zdDsKIAogICAg
ICAgICBXb3JrZXJMb2NhdGlvbiogbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9u
LmdldCgpOyB9CiAgICAgICAgIFdvcmtlck5hdmlnYXRvciogbmF2aWdhdG9yKCkgY29uc3Q7CkBA
IC0xMDcsMTMgKzEwOCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRl
cmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KIAotICAgICAgICBXb3JrZXJDb250ZXh0KGNv
bnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBXb3JrZXJUaHJlYWQqKTsKKyAgICAgICAgV29ya2Vy
Q29udGV4dChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBlbmNvZGlu
ZywgV29ya2VyVGhyZWFkKik7CiAKICAgICAgICAgdmlydHVhbCBjb25zdCBLVVJMJiB2aXJ0dWFs
VVJMKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgS1VSTCB2aXJ0dWFsQ29tcGxldGVVUkwoY29u
c3QgU3RyaW5nJikgY29uc3Q7CiAKICAgICAgICAgS1VSTCBtX3VybDsKICAgICAgICAgU3RyaW5n
IG1fdXNlckFnZW50OworICAgICAgICBTdHJpbmcgbV9lbmNvZGluZzsKICAgICAgICAgUmVmUHRy
PFdvcmtlckxvY2F0aW9uPiBtX2xvY2F0aW9uOwogICAgICAgICBtdXRhYmxlIFJlZlB0cjxXb3Jr
ZXJOYXZpZ2F0b3I+IG1fbmF2aWdhdG9yOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyQ29udGV4dFByb3h5LmggYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dFByb3h5
LmgKaW5kZXggYzhmNTc2MS4uODc5MjVkZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dv
cmtlckNvbnRleHRQcm94eS5oCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0UHJv
eHkuaApAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmly
dHVhbCB+V29ya2VyQ29udGV4dFByb3h5KCkge30KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc3Rh
cnRXb3JrZXJDb250ZXh0KGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2Vy
QWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSkgPSAwOworICAgICAgICB2aXJ0dWFsIHZv
aWQgc3RhcnRXb3JrZXJDb250ZXh0KGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5n
JiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgc291cmNl
Q29kZSkgPSAwOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCB0ZXJtaW5hdGVXb3JrZXJDb250ZXh0
KCkgPSAwOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJv
eHkuY3BwIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcAppbmRleCA0
YjM0NjU4Li5jNjBhZjVjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2Fn
aW5nUHJveHkuY3BwCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5j
cHAKQEAgLTE5OCw5ICsxOTgsOSBAQCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6fldvcmtlck1lc3Nh
Z2luZ1Byb3h5KCkKICAgICAgICAgICAgfHwgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNX
b3JrZXJDb250ZXh0KCkgJiYgY3VycmVudFRocmVhZCgpID09IHN0YXRpY19jYXN0PFdvcmtlckNv
bnRleHQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCkpLT50aHJlYWQoKS0+dGhyZWFk
SUQoKSkpOwogfQogCi12b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5OjpzdGFydFdvcmtlckNvbnRl
eHQoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VDb2RlKQordm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6c3RhcnRXb3Jr
ZXJDb250ZXh0KGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQs
IGNvbnN0IFN0cmluZyYgZW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSkKIHsKLSAg
ICBSZWZQdHI8V29ya2VyVGhyZWFkPiB0aHJlYWQgPSBXb3JrZXJUaHJlYWQ6OmNyZWF0ZShzY3Jp
cHRVUkwsIHVzZXJBZ2VudCwgc291cmNlQ29kZSwgdGhpcyk7CisgICAgUmVmUHRyPFdvcmtlclRo
cmVhZD4gdGhyZWFkID0gV29ya2VyVGhyZWFkOjpjcmVhdGUoc2NyaXB0VVJMLCB1c2VyQWdlbnQs
IGVuY29kaW5nLCBzb3VyY2VDb2RlLCB0aGlzKTsKICAgICB3b3JrZXJUaHJlYWRDcmVhdGVkKHRo
cmVhZCk7CiAgICAgdGhyZWFkLT5zdGFydCgpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmggYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2Fn
aW5nUHJveHkuaAppbmRleCA4ZDgxZGViLi5lMzA0NGQ0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuaAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
TWVzc2FnaW5nUHJveHkuaApAQCAtNTAsNyArNTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICAgICAgLy8gSW1wbGVtZW50YXRpb25zIG9mIFdvcmtlckNvbnRleHRQcm94eS4KICAgICAg
ICAgLy8gKE9ubHkgdXNlIHRoZXNlIG1ldGhvZHMgaW4gdGhlIHdvcmtlciBvYmplY3QgdGhyZWFk
LikKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0YXJ0V29ya2VyQ29udGV4dChjb25zdCBLVVJMJiBz
Y3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNv
ZGUpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRXb3JrZXJDb250ZXh0KGNvbnN0IEtVUkwm
IHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgZW5jb2Rp
bmcsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB0ZXJt
aW5hdGVXb3JrZXJDb250ZXh0KCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRv
V29ya2VyQ29udGV4dChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogICAgICAgICB2aXJ0dWFsIGJv
b2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyVGhyZWFkLmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCmlu
ZGV4IDlhNWVlMjEuLmI0ZjNhYjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJU
aHJlYWQuY3BwCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCkBAIC00Mywz
NCArNDMsMzYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0cnVjdCBXb3JrZXJUaHJlYWRTdGFy
dHVwRGF0YSA6IE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjphdXRvX3B0
cjxXb3JrZXJUaHJlYWRTdGFydHVwRGF0YT4gY3JlYXRlKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwg
Y29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSkKKyAgICBz
dGF0aWMgc3RkOjphdXRvX3B0cjxXb3JrZXJUaHJlYWRTdGFydHVwRGF0YT4gY3JlYXRlKGNvbnN0
IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYg
ZW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBzdGQ6OmF1dG9fcHRyPFdvcmtlclRocmVhZFN0YXJ0dXBEYXRhPihuZXcgV29ya2VyVGhyZWFk
U3RhcnR1cERhdGEoc2NyaXB0VVJMLCB1c2VyQWdlbnQsIHNvdXJjZUNvZGUpKTsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6YXV0b19wdHI8V29ya2VyVGhyZWFkU3RhcnR1cERhdGE+KG5ldyBXb3JrZXJU
aHJlYWRTdGFydHVwRGF0YShzY3JpcHRVUkwsIHVzZXJBZ2VudCwgZW5jb2RpbmcsIHNvdXJjZUNv
ZGUpKTsKICAgICB9CiAKICAgICBLVVJMIG1fc2NyaXB0VVJMOwogICAgIFN0cmluZyBtX3VzZXJB
Z2VudDsKKyAgICBTdHJpbmcgbV9lbmNvZGluZzsKICAgICBTdHJpbmcgbV9zb3VyY2VDb2RlOwog
cHJpdmF0ZToKLSAgICBXb3JrZXJUaHJlYWRTdGFydHVwRGF0YShjb25zdCBLVVJMJiBzY3JpcHRV
UkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUpOwor
ICAgIFdvcmtlclRocmVhZFN0YXJ0dXBEYXRhKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3Qg
U3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcsIGNvbnN0IFN0cmluZyYg
c291cmNlQ29kZSk7CiB9OwogCi1Xb3JrZXJUaHJlYWRTdGFydHVwRGF0YTo6V29ya2VyVGhyZWFk
U3RhcnR1cERhdGEoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2Vu
dCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlKQorV29ya2VyVGhyZWFkU3RhcnR1cERhdGE6Oldv
cmtlclRocmVhZFN0YXJ0dXBEYXRhKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5n
JiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgc291cmNl
Q29kZSkKICAgICA6IG1fc2NyaXB0VVJMKHNjcmlwdFVSTC5jb3B5KCkpCiAgICAgLCBtX3VzZXJB
Z2VudCh1c2VyQWdlbnQuY29weSgpKQorICAgICwgbV9lbmNvZGluZyhlbmNvZGluZy5jb3B5KCkp
CiAgICAgLCBtX3NvdXJjZUNvZGUoc291cmNlQ29kZS5jb3B5KCkpCiB7CiB9CiAKLVBhc3NSZWZQ
dHI8V29ya2VyVGhyZWFkPiBXb3JrZXJUaHJlYWQ6OmNyZWF0ZShjb25zdCBLVVJMJiBzY3JpcHRV
UkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdv
cmtlck9iamVjdFByb3h5KiB3b3JrZXJPYmplY3RQcm94eSkKK1Bhc3NSZWZQdHI8V29ya2VyVGhy
ZWFkPiBXb3JrZXJUaHJlYWQ6OmNyZWF0ZShjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0
cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBjb25zdCBTdHJpbmcmIHNv
dXJjZUNvZGUsIFdvcmtlck9iamVjdFByb3h5KiB3b3JrZXJPYmplY3RQcm94eSkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtlclRocmVhZChzY3JpcHRVUkwsIHVzZXJBZ2VudCwgc291
cmNlQ29kZSwgd29ya2VyT2JqZWN0UHJveHkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdv
cmtlclRocmVhZChzY3JpcHRVUkwsIHVzZXJBZ2VudCwgZW5jb2RpbmcsIHNvdXJjZUNvZGUsIHdv
cmtlck9iamVjdFByb3h5KSk7CiB9CiAKLVdvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKGNvbnN0
IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYg
c291cmNlQ29kZSwgV29ya2VyT2JqZWN0UHJveHkqIHdvcmtlck9iamVjdFByb3h5KQorV29ya2Vy
VGhyZWFkOjpXb3JrZXJUaHJlYWQoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcm
IHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBlbmNvZGluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VD
b2RlLCBXb3JrZXJPYmplY3RQcm94eSogd29ya2VyT2JqZWN0UHJveHkpCiAgICAgOiBtX3RocmVh
ZElEKDApCiAgICAgLCBtX3dvcmtlck9iamVjdFByb3h5KHdvcmtlck9iamVjdFByb3h5KQotICAg
ICwgbV9zdGFydHVwRGF0YShXb3JrZXJUaHJlYWRTdGFydHVwRGF0YTo6Y3JlYXRlKHNjcmlwdFVS
TCwgdXNlckFnZW50LCBzb3VyY2VDb2RlKSkKKyAgICAsIG1fc3RhcnR1cERhdGEoV29ya2VyVGhy
ZWFkU3RhcnR1cERhdGE6OmNyZWF0ZShzY3JpcHRVUkwsIHVzZXJBZ2VudCwgZW5jb2RpbmcsIHNv
dXJjZUNvZGUpKQogewogfQogCkBAIC0xMDAsNyArMTAyLDcgQEAgdm9pZCogV29ya2VyVGhyZWFk
Ojp3b3JrZXJUaHJlYWQoKQogewogICAgIHsKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX3Ro
cmVhZENyZWF0aW9uTXV0ZXgpOwotICAgICAgICBtX3dvcmtlckNvbnRleHQgPSBXb3JrZXJDb250
ZXh0OjpjcmVhdGUobV9zdGFydHVwRGF0YS0+bV9zY3JpcHRVUkwsIG1fc3RhcnR1cERhdGEtPm1f
dXNlckFnZW50LCB0aGlzKTsKKyAgICAgICAgbV93b3JrZXJDb250ZXh0ID0gV29ya2VyQ29udGV4
dDo6Y3JlYXRlKG1fc3RhcnR1cERhdGEtPm1fc2NyaXB0VVJMLCBtX3N0YXJ0dXBEYXRhLT5tX3Vz
ZXJBZ2VudCwgbV9zdGFydHVwRGF0YS0+bV9lbmNvZGluZywgdGhpcyk7CiAgICAgICAgIGlmICht
X3J1bkxvb3AudGVybWluYXRlZCgpKSB7CiAgICAgICAgICAgICAvLyBUaGUgd29ya2VyIHdhcyB0
ZXJtaW5hdGVkIGJlZm9yZSB0aGUgdGhyZWFkIGhhZCBhIGNoYW5jZSB0byBydW4uIFNpbmNlIHRo
ZSBjb250ZXh0IGRpZG4ndCBleGlzdCB5ZXQsIAogICAgICAgICAgICAgLy8gZm9yYmlkRXhlY3V0
aW9uKCkgY291bGRuJ3QgYmUgY2FsbGVkIGZyb20gc3RvcCgpLgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlclRocmVhZC5oIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5o
CmluZGV4IGYxYThhNTIuLmIwYWJiODMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJUaHJlYWQuaAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmgKQEAgLTQ0LDcg
KzQ0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgV29ya2VyVGhyZWFkIDog
cHVibGljIFJlZkNvdW50ZWQ8V29ya2VyVGhyZWFkPiB7CiAgICAgcHVibGljOgotICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJUaHJlYWQ+IGNyZWF0ZShjb25zdCBLVVJMJiBzY3JpcHRV
UkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdv
cmtlck9iamVjdFByb3h5Kik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlclRocmVh
ZD4gY3JlYXRlKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQs
IGNvbnN0IFN0cmluZyYgZW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSwgV29ya2Vy
T2JqZWN0UHJveHkqKTsKICAgICAgICAgfldvcmtlclRocmVhZCgpOwogCiAgICAgICAgIGJvb2wg
c3RhcnQoKTsKQEAgLTU1LDcgKzU1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBX
b3JrZXJPYmplY3RQcm94eSogd29ya2VyT2JqZWN0UHJveHkoKSBjb25zdCB7IHJldHVybiBtX3dv
cmtlck9iamVjdFByb3h5OyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBXb3JrZXJUaHJlYWQo
Y29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJj
ZUNvZGUsIFdvcmtlck9iamVjdFByb3h5Kik7CisgICAgICAgIFdvcmtlclRocmVhZChjb25zdCBL
VVJMJiwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcsIGNv
bnN0IFN0cmluZyYgc291cmNlQ29kZSwgV29ya2VyT2JqZWN0UHJveHkqKTsKIAogICAgICAgICBz
dGF0aWMgdm9pZCogd29ya2VyVGhyZWFkU3RhcnQodm9pZCopOwogICAgICAgICB2b2lkKiB3b3Jr
ZXJUaHJlYWQoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28345</attachid>
            <date>2009-03-05 20:09:41 -0800</date>
            <delta_ts>2009-03-06 01:58:46 -0800</delta_ts>
            <desc>Updated the test so it runs in FF too.</desc>
            <filename>patch_v3.txt</filename>
            <type>text/plain</type>
            <size>25390</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyMjk1MTRmLi4yNzgzNDY5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDktMDMt
MDQgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI0MTUwCisgICAgICAgIEFkZCB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OmVuY29kaW5nKCkKKworICAgICAgICBUZXN0IHRvIHZlcmlmeSBob3cgdGhlIHRl
eHQgZW5jb2RpbmcgaW4gd29ya2VycyBpcyB1c2VkLgorICAgICAgICBTY3JpcHQgZGVjb2Rpbmcg
YW5kIHVybCBjb21wbGV0aW9uIGlzIGNoZWNrZWQsIHdpdGggYW5kCisgICAgICAgIHcvbyBodHRw
ICdDb250ZW50LVR5cGU6IC4uLjtjaGFyc2V0PS4uLicgaGVhZGVyLgorCisgICAgICAgICogaHR0
cC90ZXN0cy93b3JrZXJzL3Jlc291cmNlcy93b3JrZXItZW5jb2RlZC5waHA6IEFkZGVkLgorICAg
ICAgICAqIGh0dHAvdGVzdHMvd29ya2Vycy9yZXNvdXJjZXMveGhyLXF1ZXJ5LXV0ZjgucGhwOiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dvcmtlcnMvcmVzb3VyY2VzL3hoci1yZXNwb25z
ZS5waHA6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd29ya2Vycy90ZXh0LWVuY29kaW5n
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy93b3JrZXJzL3RleHQt
ZW5jb2RpbmcuaHRtbDogQWRkZWQuCisKIDIwMDktMDMtMDQgIFBhbWVsYSBHcmVlbmUgIDxwYW1A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd29ya2Vycy9yZXNvdXJjZXMvd29ya2VyLWVu
Y29kZWQucGhwIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3JrZXJzL3Jlc291cmNlcy93b3Jr
ZXItZW5jb2RlZC5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEzNTE2
ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd29ya2Vycy9yZXNv
dXJjZXMvd29ya2VyLWVuY29kZWQucGhwCkBAIC0wLDAgKzEsMzQgQEAKKzw/cGhwCitoZWFkZXIo
IkV4cGlyZXM6IFRodSwgMDEgRGVjIDIwMDMgMTY6MDA6MDAgR01UIik7CitoZWFkZXIoIkNhY2hl
LUNvbnRyb2w6IG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUiKTsKK2hlYWRlcigiUHJhZ21hOiBu
by1jYWNoZSIpOworCisvLyBQYXJlbnQgZG9jdW1lbnQgaGFzIFdpbmRvd3MtMTI1MSBlbmNvZGlu
Zy4gVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgd29ya2VyIHNjcmlwdCBnZXRzIGRlY29kZWQgdXNp
bmcKKy8vIHBhcmVudCBkb2N1bWVudCBlbmNvZGluZyBvciB0aGUgb25lIGluIGh0dHAgaGVhZGVy
LCBpZiBzcGVjaWZpZWQuCiskY2hhcnNldD0kX0dFVFsnY2hhcnNldCddOworaWYgKCRjaGFyc2V0
ID09ICJrb2k4LXIiKSB7CisgICAgaGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlw
dDtjaGFyc2V0PWtvaTgtciIpOworICAgIHByaW50KCJwb3N0TWVzc2FnZSgnSGFzIGh0dHAgaGVh
ZGVyIHdpdGggY2hhcnNldD1rb2k4LXInKTsiKTsKK30gZWxzZSB7CisgICAgaGVhZGVyKCJDb250
ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdCIpOworICAgIHByaW50KCJwb3N0TWVzc2FnZSgnSGFz
IG5vIGh0dHAgaGVhZGVyIHdpdGggY2hhcnNldCcpOyIpOworfQorCitwcmludCgicG9zdE1lc3Nh
Z2UoJ09yaWdpbmFsIHRlc3Qgc3RyaW5nOiAnICsgU3RyaW5nLmZyb21DaGFyQ29kZSgweDQxRiwg
MHg0NDAsIDB4NDM4LCAweDQzMiwgMHg0MzUsIDB4NDQyKSk7Iik7CitwcmludCgicG9zdE1lc3Nh
Z2UoJ1Rlc3Q6IFx4RjBceEQyXHhDOVx4RDdceEM1XHhENCAoZW5jb2RlZCB1c2luZyBrb2k4LXIp
LicpOyIpOworcHJpbnQoInBvc3RNZXNzYWdlKCdUZXN0OiBceENGXHhGMFx4RThceEUyXHhFNVx4
RjIgKGVuY29kZWQgdXNpbmcgV2luZG93cy0xMjUxKS4nKTsiKTsKKworLy8gVGVzdCBob3cgWEhS
IGRlY29kZXMgaXRzIHJlc3BvbnNlIHRleHQuIFNob3VsZCBiZSBVVEY4IG9yIGEgY2hhcnNldCBm
cm9tIGh0dHAgaGVhZGVyLgorcHJpbnQoInZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsg
eGhyLm9wZW4oJ0dFVCcsICd4aHItcmVzcG9uc2UucGhwJywgZmFsc2UpOyIpOworcHJpbnQoInho
ci5zZW5kKCk7IHBvc3RNZXNzYWdlKHhoci5yZXNwb25zZVRleHQpOyIpOworCitwcmludCgidmFy
IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOyB4aHIub3BlbignR0VUJywgJ3hoci1yZXNwb25z
ZS5waHA/Y2hhcnNldD1rb2k4LXInLCBmYWxzZSk7Iik7CitwcmludCgieGhyLnNlbmQoKTsgcG9z
dE1lc3NhZ2UoeGhyLnJlc3BvbnNlVGV4dCk7Iik7CisKKy8vIFRlc3QgdGhhdCBVUkwgY29tcGxl
dGlvbiBpcyBkb25lIHVzaW5nIFVURi04LCByZWdhcmRsZXNzIG9mIHRoZSB3b3JrZXIncyBzY3Jp
cHQgZW5jb2RpbmcuCisvLyBUaGUgc2VydmVyIHNjcmlwdCB2ZXJpZmllcyB0aGF0IHF1ZXJ5IHBh
cmFtZXRlciBpcyBlbmNvZGVkIGluIFVURi04LgorcHJpbnQoInZhciB4aHIgPSBuZXcgWE1MSHR0
cFJlcXVlc3QoKTsgeGhyLm9wZW4oJ0dFVCcsICd4aHItcXVlcnktdXRmOC5waHA/cXVlcnk9JyAr
IFN0cmluZy5mcm9tQ2hhckNvZGUoMHg0MUYsIDB4NDQwLCAweDQzOCwgMHg0MzIsIDB4NDM1LCAw
eDQ0MiksIGZhbHNlKTsiKTsKK3ByaW50KCJ4aHIuc2VuZCgpOyBwb3N0TWVzc2FnZSh4aHIucmVz
cG9uc2VUZXh0KTsiKTsKKworcHJpbnQoInBvc3RNZXNzYWdlKCdleGl0Jyk7Iik7Cis/PgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3JrZXJzL3Jlc291cmNlcy94aHItcXVl
cnktdXRmOC5waHAgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvcmVzb3VyY2VzL3ho
ci1xdWVyeS11dGY4LnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmU4
NzJkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3JrZXJzL3Jl
c291cmNlcy94aHItcXVlcnktdXRmOC5waHAKQEAgLTAsMCArMSwxNCBAQAorPD9waHAKK2hlYWRl
cigiRXhwaXJlczogVGh1LCAwMSBEZWMgMjAwMyAxNjowMDowMCBHTVQiKTsKK2hlYWRlcigiQ2Fj
aGUtQ29udHJvbDogbm8tY2FjaGUsIG11c3QtcmV2YWxpZGF0ZSIpOworaGVhZGVyKCJQcmFnbWE6
IG5vLWNhY2hlIik7CisKKyRxdWVyeT0kX0dFVFsncXVlcnknXTsKK2lmICgkcXVlcnkgPT0gIlx4
RDBceDlGXHhEMVx4ODBceEQwXHhCOFx4RDBceEIyXHhEMFx4QjVceEQxXHg4MiIpIHsKKyAgICBw
cmludCgiUEFTUzogWEhSIHF1ZXJ5IHdhcyBlbmNvZGVkIGluIFVURi04OiAiKTsKKyAgICBwcmlu
dCgkcXVlcnkpOworfSBlbHNlIHsKKyAgICBwcmludCgiRkFJTDogWEhSIHF1ZXJ5IHdhcyBOT1Qg
ZW5jb2RlZCBpbiBVVEYtODogIik7CisgICAgcHJpbnQoJHF1ZXJ5KTsKK30KKz8+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvcmVzb3VyY2VzL3hoci1yZXNwb25z
ZS5waHAgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvcmVzb3VyY2VzL3hoci1yZXNw
b25zZS5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThiYmQzYgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd29ya2Vycy9yZXNvdXJjZXMv
eGhyLXJlc3BvbnNlLnBocApAQCAtMCwwICsxLDE2IEBACis8P3BocAoraGVhZGVyKCJFeHBpcmVz
OiBUaHUsIDAxIERlYyAyMDAzIDE2OjAwOjAwIEdNVCIpOworaGVhZGVyKCJDYWNoZS1Db250cm9s
OiBuby1jYWNoZSwgbXVzdC1yZXZhbGlkYXRlIik7CitoZWFkZXIoIlByYWdtYTogbm8tY2FjaGUi
KTsKKworLy8gVGhlIFhIUiByZXNwb25zZSBjb250YWlucyB3b3JkICfQn9GA0LjQstC10YIhJyAo
SGVsbG8hKSwgaW4ga29pOC1yIGVuY29kaW5nICh3aXRoIGh0dHAgaGVhZGVyKSBvciBpbiB1dGY4
LgorLy8gSXQgc2hvdWxkIGFsd2F5cyBiZSBkZWNvZGVkIGFzICfQn9GA0LjQstC10YIhJywgcmVn
YXJkbGVzcyBvZiB0aGUgcGFyZW50IGRvY3VtZW50L3dvcmtlciBlbmNvZGluZy4KKyRjaGFyc2V0
PSRfR0VUWydjaGFyc2V0J107CitpZiAoJGNoYXJzZXQgPT0gImtvaTgtciIpIHsKKyAgICBoZWFk
ZXIoIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1rb2k4LXIiKTsKKyAgICBwcmlu
dCgiWEhSOiBceEYwXHhEMlx4QzlceEQ3XHhDNVx4RDQiKTsKK30gZWxzZSB7CisgICAgaGVhZGVy
KCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47Iik7CisgICAgcHJpbnQoIlhIUjog0J/RgNC40LLQ
tdGCIik7Cit9Cis/PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3JrZXJz
L3RleHQtZW5jb2RpbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3Jr
ZXJzL3RleHQtZW5jb2RpbmctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjhkMDYyMTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3dvcmtlcnMvdGV4dC1lbmNvZGluZy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyOSBAQAor
VGhpcyB0ZXN0IHZlcmlmaWVzIGhhbmRsaW5nIG9mIHRleHQgZW5jb2RpbmcgaW4gd29ya2Vycy4g
VGhlIGJlaGF2aW9yIG1hdGNoZXMgRkYzLjFiMiB3aXRoIGEgc2luZ2xlIGV4Y2x1c2lvbiAoc2Vl
IGJlbG93KS4KK1RoaXMgaXMgd2hhdCdzIHRlc3RlZDoKKy0gSWYgaHR0cCBoZWFkZXIgJ0NvbnRl
bnQtVHlwZScgd2l0aCAnY2hhcnNldCcgc3BlY2lmaWVkIGlzIG9uIHJlc3BvbnNlIHdpdGggd29y
a2VyIHNjcmlwdCBvciBYSFIgcGF5bG9hZCwgdGhhdCBlbmNvZGluZyBpcyB1c2VkLgorLSBJbiBh
YnNlbnNlIG9mIGh0dHAgaGVhZGVyLCB0aGUgc2NyaXB0IG9mIHRoZSB3b3JrZXIgaXMgZGVjb2Rl
ZCB1c2luZyB0aGUgdGV4dCBlbmNvZGluZyBvZiB0aGUgcGFyZW50IGRvY3VtZW50LgorLSBJbiBh
YnNlbnNlIG9mIGh0dHAgaGVhZGVyLCB0aGUgY29udGVudCBvZiB0aGUgWEhSIHJlcXVlc3QgaXMg
ZGVjb2RlZCB1c2luZyBVVEYtOC4KKy0gVGhlIFVSTHMgdXNlZCBpbiB3b3JrZXJzIChmb3Igc3Vi
d29ya2VycyBvciBYSFIpIGFyZSBhbHdheXMgZW5jb2RlZCB1c2luZyBVVEYtOCAoaW4gcmVndWxh
ciBodG1sIGRvY3VtZW50cyBwYXJ0cyBvZiB0aGUgcXVlcnkgYW4gaGFzaCBtYXkgYmUgZW5jb2Rl
ZCB3aXRoIG90aGVyIGVuY29kaW5ncykuCistIFRoZSBiYXNlIFVSTCBmb3IgdGhlIHdvcmtlciAo
dXNlZCB0byByZXNvbHZlIHJlbGF0aXZlIFVSTHMgZm9yIHN1YndvcmtlcnMgYW5kIFhIUikgaXMg
dGhlIFVSTCBvZiBpdHMgc2NyaXB0LiBOb3RlOiB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIEZGIDMu
MWIyIHdoaWNoIGlzIHVzaW5nIHRoZSBVUkwgb2YgdGhlIHBhcmVudCBkb2N1bWVudCwgd2hpY2gg
bWF5IGJlIGEgYnVnIChUQkQpLgorCitEb2N1bWVudCBlbmNvZGluZzogd2luZG93cy0xMjUxCitE
b2N1bWVudCwgV29ya2VyczogQWxsIFhIUiByZXNwb25zZXMgc2hvdWxkIG1hdGNoIHRoaXM6INCf
0YDQuNCy0LXRggorRG9jdW1lbnQ6IDogWEhSOiDQn9GA0LjQstC10YIKK0RvY3VtZW50OiDQn9GA
0L7QstC10YDQutCwCit3b3JrZXIgMTogSGFzIG5vIGh0dHAgaGVhZGVyIHdpdGggY2hhcnNldAor
d29ya2VyIDE6IE9yaWdpbmFsIHRlc3Qgc3RyaW5nOiDQn9GA0LjQstC10YIKK3dvcmtlciAxOiBQ
QVNTOiBYSFIgcXVlcnkgd2FzIGVuY29kZWQgaW4gVVRGLTg6INCf0YDQuNCy0LXRggord29ya2Vy
IDE6IFRlc3Q6INCf0YDQuNCy0LXRgiAoZW5jb2RlZCB1c2luZyBXaW5kb3dzLTEyNTEpLgord29y
a2VyIDE6IFRlc3Q6INGA0KLQmdCn0JXQpCAoZW5jb2RlZCB1c2luZyBrb2k4LXIpLgord29ya2Vy
IDE6IFhIUjog0J/RgNC40LLQtdGCCit3b3JrZXIgMTogWEhSOiDQn9GA0LjQstC10YIKK3dvcmtl
ciAxOiBleGl0Cit3b3JrZXIgMjogSGFzIGh0dHAgaGVhZGVyIHdpdGggY2hhcnNldD1rb2k4LXIK
K3dvcmtlciAyOiBPcmlnaW5hbCB0ZXN0IHN0cmluZzog0J/RgNC40LLQtdGCCit3b3JrZXIgMjog
UEFTUzogWEhSIHF1ZXJ5IHdhcyBlbmNvZGVkIGluIFVURi04OiDQn9GA0LjQstC10YIKK3dvcmtl
ciAyOiBUZXN0OiDQn9GA0LjQstC10YIgKGVuY29kZWQgdXNpbmcga29pOC1yKS4KK3dvcmtlciAy
OiBUZXN0OiDQvtCf0KXQkdCV0KAgKGVuY29kZWQgdXNpbmcgV2luZG93cy0xMjUxKS4KK3dvcmtl
ciAyOiBYSFI6INCf0YDQuNCy0LXRggord29ya2VyIDI6IFhIUjog0J/RgNC40LLQtdGCCit3b3Jr
ZXIgMjogZXhpdAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMv
dGV4dC1lbmNvZGluZy5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3JrZXJzL3RleHQt
ZW5jb2RpbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmE1Yzdk
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3JrZXJzL3RleHQt
ZW5jb2RpbmcuaHRtbApAQCAtMCwwICsxLDcwIEBACis8aHRtbD4KKzxtZXRhIGh0dHAtZXF1aXY9
ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MSI+
Cis8Ym9keT4KK1RoaXMgdGVzdCB2ZXJpZmllcyBoYW5kbGluZyBvZiB0ZXh0IGVuY29kaW5nIGlu
IHdvcmtlcnMuIFRoZSBiZWhhdmlvciBtYXRjaGVzIEZGMy4xYjIgd2l0aCBhIHNpbmdsZSBleGNs
dXNpb24gKHNlZSBiZWxvdykuPGJyPgorVGhpcyBpcyB3aGF0J3MgdGVzdGVkOjxicj4KKy0gSWYg
aHR0cCBoZWFkZXIgJ0NvbnRlbnQtVHlwZScgd2l0aCAnY2hhcnNldCcgc3BlY2lmaWVkIGlzIG9u
IHJlc3BvbnNlIHdpdGggd29ya2VyIHNjcmlwdCBvciBYSFIgcGF5bG9hZCwgdGhhdCBlbmNvZGlu
ZyBpcyB1c2VkLjxicj4KKy0gSW4gYWJzZW5zZSBvZiBodHRwIGhlYWRlciwgdGhlIHNjcmlwdCBv
ZiB0aGUgd29ya2VyIGlzIGRlY29kZWQgdXNpbmcgdGhlIHRleHQgZW5jb2Rpbmcgb2YgdGhlIHBh
cmVudCBkb2N1bWVudC48YnI+CistIEluIGFic2Vuc2Ugb2YgaHR0cCBoZWFkZXIsIHRoZSBjb250
ZW50IG9mIHRoZSBYSFIgcmVxdWVzdCBpcyBkZWNvZGVkIHVzaW5nIFVURi04Ljxicj4KKy0gVGhl
IFVSTHMgdXNlZCBpbiB3b3JrZXJzIChmb3Igc3Vid29ya2VycyBvciBYSFIpIGFyZSBhbHdheXMg
ZW5jb2RlZCB1c2luZyBVVEYtOCAoaW4gcmVndWxhciBodG1sIGRvY3VtZW50cyBwYXJ0cyBvZiB0
aGUgcXVlcnkgYW4gaGFzaCBtYXkgYmUgZW5jb2RlZCB3aXRoIG90aGVyIGVuY29kaW5ncykuPGJy
PgorLSBUaGUgYmFzZSBVUkwgZm9yIHRoZSB3b3JrZXIgKHVzZWQgdG8gcmVzb2x2ZSByZWxhdGl2
ZSBVUkxzIGZvciBzdWJ3b3JrZXJzIGFuZCBYSFIpIGlzIHRoZSBVUkwgb2YgaXRzIHNjcmlwdC4g
Tm90ZTogdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBGRiAzLjFiMiB3aGljaCBpcyB1c2luZyB0aGUg
VVJMIG9mIHRoZSBwYXJlbnQgZG9jdW1lbnQsIHdoaWNoIG1heSBiZSBhIGJ1ZyAoVEJEKS48YnI+
PGJyPgorCis8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOmJlaWdlOyBwYWRkaW5nOjEwcHg7IiBpZD0i
c3RhdHVzIj48L2Rpdj4KKworPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCisvLyBXYWl0IGZvciB0aGlzIG1h
bnkgd29ya2VycyB0byBmaW5pc2ggdGhlaXIgdGVzdHMuCisvLyBXaGVuIHdvcmtlciBpcyBkb25l
LCBpdCBzZW5kcyAnZXhpdCcgbWVzc2FnZS4KK3ZhciB3b3JrZXJDb3VudCA9IDI7CisKKy8vIE1l
c3NhZ2VzIGZyb20gd29ya2VycyBpbiBzZXBhcmF0ZSB0aHJlYWRzIHdpbGwgY29tZSBpbiB1bnN0
YWJsZSBvcmRlci4gU29ydCB0aGVtIHRvIGhhdmUgYSBzdGFibGUgdGVzdC4KK3ZhciBzdGF0dXNT
dHJpbmdzID0gbmV3IEFycmF5OworCitmdW5jdGlvbiBmaW5pc2hUZXN0KCkKK3sKKyAgICBzdGF0
dXNTdHJpbmdzLnNvcnQoKTsKKyAgICB2YXIgc3RhdHVzX3BhbmVsID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInN0YXR1cyIpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdHVzU3RyaW5n
cy5sZW5ndGg7ICsraSkgeworICAgICAgICBzdGF0dXNfcGFuZWwuYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUoc3RhdHVzU3RyaW5nc1tpXSkpOworICAgICAgICBzdGF0dXNfcGFu
ZWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7CisgICAgfQorICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gbG9nKHNvdXJjZSwgbXNnKQorewor
ICAgIHN0YXR1c1N0cmluZ3MucHVzaChzb3VyY2UgKyAiOiAiICsgbXNnKTsKKworICAgIGlmICht
c2cgPT0gImV4aXQiICYmIC0td29ya2VyQ291bnQgPT0gMCkKKyAgICAgICAgZmluaXNoVGVzdCgp
OworfSAKKworLy8gT3V0cHV0IGN1cnJlbnQgY2hhcnNldCBhbmQgYSBzdHJpbmcgaW4gdGhhdCBl
bmNvZGluZyB0byBtYWtlCisvLyBzdXJlIHRoaXMgZG9jdW1lbnQgaXMgZGVjb2RlZCBhcyBXaW5k
b3dzLTEyNTEuCitsb2coIkRvY3VtZW50IGVuY29kaW5nIiwgZG9jdW1lbnQuaW5wdXRFbmNvZGlu
Zyk7Citsb2coIkRvY3VtZW50IiwgIs/w7uLl8OrgIik7CisKK2xvZygiRG9jdW1lbnQsIFdvcmtl
cnMiLCAiQWxsIFhIUiByZXNwb25zZXMgc2hvdWxkIG1hdGNoIHRoaXM6ICIgKyBTdHJpbmcuZnJv
bUNoYXJDb2RlKDB4NDFGLCAweDQ0MCwgMHg0MzgsIDB4NDMyLCAweDQzNSwgMHg0NDIpKTsKKwor
Ly8gUnVuIGEgd29ya2VyIHcvbyBodHRwIGhlYWRlci4gSXQgc2hvdWxkIGluaGVyaXQgdGhlIGVu
Y29kaW5nIG9mIHRoZSBkb2N1bWVudC4KK3ZhciB3b3JrZXIxID0gbmV3IFdvcmtlcigicmVzb3Vy
Y2VzL3dvcmtlci1lbmNvZGVkLnBocCIpOword29ya2VyMS5vbm1lc3NhZ2UgPSBmdW5jdGlvbihl
dnQpIHsgbG9nKCJ3b3JrZXIgMSIsIGV2dC5kYXRhKTsgfTsKKworLy8gUnVuIGEgd29ya2VyIHdp
dGggaHR0cCBoZWFkZXIgc3BlY2lmeWluZyBjaGFyc2V0LiBUaGlzIG5ldyBjaGFyc2V0IHNob3Vs
ZCBiZSBpbiBlZmZlY3QuCit2YXIgd29ya2VyMiA9IG5ldyBXb3JrZXIoInJlc291cmNlcy93b3Jr
ZXItZW5jb2RlZC5waHA/Y2hhcnNldD1rb2k4LXIiKTsKK3dvcmtlcjIub25tZXNzYWdlID0gZnVu
Y3Rpb24oZXZ0KSB7IGxvZygid29ya2VyIDIiLCBldnQuZGF0YSk7IH07CisKKy8vIFJlcXVlc3Qg
c29tZSBjb250ZW50LiBJdCBzaG91bGQgYmUgZGVjb2RlZCB1c2luZyBVVEYtOCBldmVuIHRob3Vn
aCBjdXJyZW50IGRvY3VtZW50IGlzIFdpbmRvd3MtMTI1MS4KK3ZhciB4aHIgPSBuZXcgWE1MSHR0
cFJlcXVlc3QoKTt4aHIub3BlbigiR0VUIiwgInJlc291cmNlcy94aHItcmVzcG9uc2UucGhwIiwg
ZmFsc2UpOworeGhyLnNlbmQoKTtsb2coIkRvY3VtZW50OiAiLCB4aHIucmVzcG9uc2VUZXh0KTsK
KworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CisKKyAgICAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmU2MDVjMy4uODdlNzk0ZiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw0NSBAQAorMjAwOS0wMy0wNCAgRG1pdHJ5IFRpdG92ICA8ZGltaWNoQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQxNTAKKyAgICAgICAgQWRk
IHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZW5jb2RpbmcoKQorCisgICAgICAgIFRl
c3Q6IGh0dHAvdGVzdHMvd29ya2Vycy90ZXh0LWVuY29kaW5nLmh0bWwKKworICAgICAgICAqIGRv
bS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZW5jb2RpbmcpOgor
ICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Omlu
cHV0RW5jb2RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNoYXJzZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNoYXJhY3RlclNldCk6CisgICAgICAgIEFkZCBuZXcg
dmlydHVhbCBtZXRob2QgYW5kIHJvdXRlIERPTSBzeW5vbnltIGZ1bmN0aW9ucyBvbiBEb2N1bWVu
dCB0aHJvdWdoIGl0LgorCisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaDoK
KyAgICAgICAgKiB3b3JrZXJzL1dvcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXI6
Oldvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAg
ICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyQ29udGV4dDo6V29ya2VyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250
ZXh0OjplbmNvZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0Ojpjb21wbGV0
ZVVSTCk6IEFkZGVkIGNvbW1lbnQgb24gd2h5IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gRG9jdW1l
bnQ6OmNvbXBsZXRlVVJMCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpjcmVhdGUpOgorICAgICAgICAqIHdvcmtlcnMv
V29ya2VyQ29udGV4dFByb3h5Lmg6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQ
cm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6c3RhcnRX
b3JrZXJDb250ZXh0KToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5Lmg6
CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyVGhyZWFkU3RhcnR1cERhdGE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJUaHJlYWRTdGFydHVwRGF0YTo6V29ya2VyVGhyZWFkU3RhcnR1cERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyVGhyZWFkOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
VGhyZWFkOjpXb3JrZXJUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkOjp3
b3JrZXJUaHJlYWQpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyVGhyZWFkLmg6CisgICAgICAg
IEFsbCBvZiB0aGUgYWJvdmUgcm91dGUgdGhlICdlbmNvZGluZycgcGFyYW1ldGVyIG9mIHBhcmVu
dCBjb250ZXh0IHRvIHRoZSBuZXcKKyAgICAgICAgaW5zdGFuY2Ugb2YgV29ya2VyQ29udGV4dCAt
IGZyb20gV29ya2VyOjpub3RpZnlGaW5pc2hlZCgpIHZpYSBXb3JrZXJNZXNzYWdpbmdQcm94eQor
ICAgICAgICB0aHJvdWdoIFdvcmtlclRocmVhZCB0aHJvdWdoIFdvcmtlclRocmVhZFN0YXJ0dXBE
YXRhIGFuZCBpbnRvIGNvbnN0cnVjdG9yIG9mIFdvcmtlckNvbnRleHQuCisKIDIwMDktMDMtMDQg
IEFkYW0gTGFuZ2xleSAgPGFnbEBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEZpc2hlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA5ZTY1ZGI1Li5lYTlkZWI5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBA
IC04MjcsNyArODI3LDcgQEAgU3RyaW5nIERvY3VtZW50OjpyZWFkeVN0YXRlKCkgY29uc3QKICAg
ICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBEb2N1bWVudDo6aW5wdXRFbmNvZGluZygp
IGNvbnN0CitTdHJpbmcgRG9jdW1lbnQ6OmVuY29kaW5nKCkgY29uc3QKIHsKICAgICBpZiAoVGV4
dFJlc291cmNlRGVjb2RlciogZCA9IGRlY29kZXIoKSkKICAgICAgICAgcmV0dXJuIGQtPmVuY29k
aW5nKCkubmFtZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmgKaW5kZXggY2YzMjhkYS4uYzliMjE4NCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0yNDEs
MTEgKzI0MSwxMyBAQCBwdWJsaWM6CiAKICAgICBFbGVtZW50KiBlbGVtZW50RnJvbVBvaW50KGlu
dCB4LCBpbnQgeSkgY29uc3Q7CiAgICAgU3RyaW5nIHJlYWR5U3RhdGUoKSBjb25zdDsKLSAgICBT
dHJpbmcgaW5wdXRFbmNvZGluZygpIGNvbnN0OwotICAgIFN0cmluZyBkZWZhdWx0Q2hhcnNldCgp
IGNvbnN0OwogCi0gICAgU3RyaW5nIGNoYXJzZXQoKSBjb25zdCB7IHJldHVybiBpbnB1dEVuY29k
aW5nKCk7IH0KLSAgICBTdHJpbmcgY2hhcmFjdGVyU2V0KCkgY29uc3QgeyByZXR1cm4gaW5wdXRF
bmNvZGluZygpOyB9CisgICAgU3RyaW5nIGRlZmF1bHRDaGFyc2V0KCkgY29uc3Q7CisgICAgCisg
ICAgLy8gU3lub255bXMgYmFja2luZyBzaW1pbGFyIERPTSBhdHRyaWJ1dGVzLiBVc2UgRG9jdW1l
bnQ6OmVuY29kaW5nKCkgdG8gYXZvaWQgdmlydHVhbCBkaXNwYXRjaC4KKyAgICBTdHJpbmcgaW5w
dXRFbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIERvY3VtZW50OjplbmNvZGluZygpOyB9CisgICAg
U3RyaW5nIGNoYXJzZXQoKSBjb25zdCB7IHJldHVybiBEb2N1bWVudDo6ZW5jb2RpbmcoKTsgfQor
ICAgIFN0cmluZyBjaGFyYWN0ZXJTZXQoKSBjb25zdCB7IHJldHVybiBEb2N1bWVudDo6ZW5jb2Rp
bmcoKTsgfQogCiAgICAgdm9pZCBzZXRDaGFyc2V0KGNvbnN0IFN0cmluZyYpOwogCkBAIC00NDQs
NiArNDQ2LDcgQEAgcHVibGljOgogICAgIEtVUkwgY29tcGxldGVVUkwoY29uc3QgU3RyaW5nJikg
Y29uc3Q7CiAKICAgICB2aXJ0dWFsIFN0cmluZyB1c2VyQWdlbnQoY29uc3QgS1VSTCYpIGNvbnN0
OworICAgIHZpcnR1YWwgU3RyaW5nIGVuY29kaW5nKCkgY29uc3Q7CiAKICAgICAvLyBmcm9tIGNh
Y2hlZE9iamVjdENsaWVudAogICAgIHZpcnR1YWwgdm9pZCBzZXRDU1NTdHlsZVNoZWV0KGNvbnN0
IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIGNvbnN0IENhY2hlZENTU1N0eWxl
U2hlZXQqKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCBiL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAppbmRleCBjZjMyN2Q3Li44
NjdkMzRmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgK
KysrIGIvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCkBAIC02MCw2ICs2MCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgS1VSTCBjb21wbGV0ZVVSTChjb25zdCBT
dHJpbmcmIHVybCkgY29uc3QgeyByZXR1cm4gdmlydHVhbENvbXBsZXRlVVJMKHVybCk7IH0KIAog
ICAgICAgICB2aXJ0dWFsIFN0cmluZyB1c2VyQWdlbnQoY29uc3QgS1VSTCYpIGNvbnN0ID0gMDsK
KyAgICAgICAgdmlydHVhbCBTdHJpbmcgZW5jb2RpbmcoKSBjb25zdCA9IDA7CiAKICAgICAgICAg
U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9zZWN1cml0
eU9yaWdpbi5nZXQoKTsgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNw
cCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCmluZGV4IDBiYzlkYTIuLjYwMDljOGYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCisrKyBiL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXIuY3BwCkBAIC02NCwxMSArNjQsMTEgQEAgV29ya2VyOjpXb3JrZXIoY29uc3QgU3Ry
aW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiAnaW5oZXJpdCcgY2hhcnNl
dCBhbmQgYWN0dWFsIGxvYWRpbmcgc3VwcG9ydCBmcm9tIG9yaWdpbmFsIGRvY3VtZW50IHRvIGVu
YWJsZSBuZXN0ZWQgd29ya2Vycy4KKyAgICAvLyBGSVhNRTogTmVzdGVkIHdvcmtlcnMgbmVlZCBs
b2FkaW5nIHN1cHBvcnQuIENvbnNpZGVyIGFkb3B0aW5nIFRocmVhZGFibGVMb2FkZXIgaGVyZS4K
ICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0RvY3VtZW50KCkpOwogICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKTsKIAotICAgIG1fY2FjaGVkU2NyaXB0ID0gZG9jdW1lbnQtPmRvY0xvYWRl
cigpLT5yZXF1ZXN0U2NyaXB0KG1fc2NyaXB0VVJMLCBkb2N1bWVudC0+Y2hhcnNldCgpKTsKKyAg
ICBtX2NhY2hlZFNjcmlwdCA9IGRvY3VtZW50LT5kb2NMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdCht
X3NjcmlwdFVSTCwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5lbmNvZGluZygpKTsKICAgICBp
ZiAoIW1fY2FjaGVkU2NyaXB0KSB7CiAgICAgICAgIGRpc3BhdGNoRXJyb3JFdmVudCgpOwogICAg
ICAgICByZXR1cm47CkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBXb3JrZXI6Om5vdGlmeUZpbmlz
aGVkKENhY2hlZFJlc291cmNlKiB1bnVzZWRSZXNvdXJjZSkKICAgICBpZiAobV9jYWNoZWRTY3Jp
cHQtPmVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgZGlzcGF0Y2hFcnJvckV2ZW50KCk7CiAgICAg
ZWxzZQotICAgICAgICBtX2NvbnRleHRQcm94eS0+c3RhcnRXb3JrZXJDb250ZXh0KG1fc2NyaXB0
VVJMLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnVzZXJBZ2VudChtX3NjcmlwdFVSTCksIG1f
Y2FjaGVkU2NyaXB0LT5zY3JpcHQoKSk7CisgICAgICAgIG1fY29udGV4dFByb3h5LT5zdGFydFdv
cmtlckNvbnRleHQobV9zY3JpcHRVUkwsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dXNlckFn
ZW50KG1fc2NyaXB0VVJMKSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5lbmNvZGluZygpLCBt
X2NhY2hlZFNjcmlwdC0+c2NyaXB0KCkpOwogCiAgICAgbV9jYWNoZWRTY3JpcHQtPnJlbW92ZUNs
aWVudCh0aGlzKTsKICAgICBtX2NhY2hlZFNjcmlwdCA9IDA7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4
dC5jcHAKaW5kZXggYTI5YThlNC4uNjViYmMwNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJz
L1dvcmtlckNvbnRleHQuY3BwCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNw
cApAQCAtNDcsOSArNDcsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Xb3JrZXJDb250
ZXh0OjpXb3JrZXJDb250ZXh0KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB1c2VyQWdl
bnQsIFdvcmtlclRocmVhZCogdGhyZWFkKQorV29ya2VyQ29udGV4dDo6V29ya2VyQ29udGV4dChj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIGVu
Y29kaW5nLCBXb3JrZXJUaHJlYWQqIHRocmVhZCkKICAgICA6IG1fdXJsKHVybCkKICAgICAsIG1f
dXNlckFnZW50KHVzZXJBZ2VudCkKKyAgICAsIG1fZW5jb2RpbmcoZW5jb2RpbmcpCiAgICAgLCBt
X2xvY2F0aW9uKFdvcmtlckxvY2F0aW9uOjpjcmVhdGUodXJsKSkKICAgICAsIG1fc2NyaXB0KG5l
dyBXb3JrZXJTY3JpcHRDb250cm9sbGVyKHRoaXMpKQogICAgICwgbV90aHJlYWQodGhyZWFkKQpA
QCAtODUsNyArODYsOCBAQCBLVVJMIFdvcmtlckNvbnRleHQ6OmNvbXBsZXRlVVJMKGNvbnN0IFN0
cmluZyYgdXJsKSBjb25zdAogICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgY2hhbmdlIHRoZSBLVVJM
IGNvbnN0cnVjdG9yIHRvIGhhdmUgdGhpcyBiZWhhdmlvcj8KICAgICBpZiAodXJsLmlzTnVsbCgp
KQogICAgICAgICByZXR1cm4gS1VSTCgpOwotICAgIC8vIEZJWE1FOiBkb2VzIHRoaXMgbmVlZCB0
byBwcm92aWRlIGEgY2hhcnNldCwgbGlrZSBEb2N1bWVudDo6Y29tcGxldGVVUkwgZG9lcz8KKyAg
ICAvLyBOb3RlIERvY3VtZW50Ojpjb21wbGV0ZVVSTCBwcm92aWRlcyBhIGNoYXJzZXQgaGVyZSAo
dG8gZW5jb2RlIHF1ZXJ5IHBvcnRpb24gb2YgdXJsIHdoZW4KKyAgICAvLyBzdWJtaXR0aW5nIGNo
YXJzZXQtZW5jb2RlZCBmb3JtcyBkYXRhKS4gV29ya2VycyBhbHdheXMgdXNlIFVURi04IHdoaWNo
IGlzIGRlZmF1bHQgZm9yIEtVUkwuCiAgICAgcmV0dXJuIEtVUkwobV9sb2NhdGlvbi0+dXJsKCks
IHVybCk7CiB9CiAKQEAgLTk0LDYgKzk2LDExIEBAIFN0cmluZyBXb3JrZXJDb250ZXh0Ojp1c2Vy
QWdlbnQoY29uc3QgS1VSTCYpIGNvbnN0CiAgICAgcmV0dXJuIG1fdXNlckFnZW50OwogfQogCitT
dHJpbmcgV29ya2VyQ29udGV4dDo6ZW5jb2RpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2Vu
Y29kaW5nOworfQorCiBXb3JrZXJOYXZpZ2F0b3IqIFdvcmtlckNvbnRleHQ6Om5hdmlnYXRvcigp
IGNvbnN0CiB7CiAgICAgaWYgKCFtX25hdmlnYXRvcikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJDb250ZXh0LmggYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCmlu
ZGV4IDQxNGUxM2EuLjIyNTU1NTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJD
b250ZXh0LmgKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaApAQCAtNDgsOSAr
NDgsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBXb3JrZXJDb250ZXh0IDog
cHVibGljIFJlZkNvdW50ZWQ8V29ya2VyQ29udGV4dD4sIHB1YmxpYyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0LCBwdWJsaWMgRXZlbnRUYXJnZXQgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8V29ya2VyQ29udGV4dD4gY3JlYXRlKGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiB1c2VyQWdlbnQsIFdvcmtlclRocmVhZCogdGhyZWFkKQorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXb3JrZXJDb250ZXh0PiBjcmVhdGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBlbmNvZGluZywgV29ya2VyVGhyZWFkKiB0
aHJlYWQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29ya2Vy
Q29udGV4dCh1cmwsIHVzZXJBZ2VudCwgdGhyZWFkKSk7CisgICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFdvcmtlckNvbnRleHQodXJsLCB1c2VyQWdlbnQsIGVuY29kaW5nLCB0aHJlYWQp
KTsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgfldvcmtlckNvbnRleHQoKTsKQEAgLTYz
LDYgKzYzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBLVVJMIGNvbXBsZXRlVVJM
KGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIHVzZXJBZ2Vu
dChjb25zdCBLVVJMJikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIGVuY29kaW5nKCkg
Y29uc3Q7CiAKICAgICAgICAgV29ya2VyTG9jYXRpb24qIGxvY2F0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9sb2NhdGlvbi5nZXQoKTsgfQogICAgICAgICBXb3JrZXJOYXZpZ2F0b3IqIG5hdmlnYXRv
cigpIGNvbnN0OwpAQCAtMTA3LDEzICsxMDgsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CiAKLSAgICAgICAgV29y
a2VyQ29udGV4dChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiwgV29ya2VyVGhyZWFkKik7Cisg
ICAgICAgIFdvcmtlckNvbnRleHQoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYgZW5jb2RpbmcsIFdvcmtlclRocmVhZCopOwogCiAgICAgICAgIHZpcnR1YWwgY29uc3Qg
S1VSTCYgdmlydHVhbFVSTCgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIEtVUkwgdmlydHVhbENv
bXBsZXRlVVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCiAgICAgICAgIEtVUkwgbV91cmw7CiAg
ICAgICAgIFN0cmluZyBtX3VzZXJBZ2VudDsKKyAgICAgICAgU3RyaW5nIG1fZW5jb2Rpbmc7CiAg
ICAgICAgIFJlZlB0cjxXb3JrZXJMb2NhdGlvbj4gbV9sb2NhdGlvbjsKICAgICAgICAgbXV0YWJs
ZSBSZWZQdHI8V29ya2VyTmF2aWdhdG9yPiBtX25hdmlnYXRvcjsKIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckNvbnRleHRQcm94eS5oIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtl
ckNvbnRleHRQcm94eS5oCmluZGV4IGM4ZjU3NjEuLjg3OTI1ZGYgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0UHJveHkuaAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyQ29udGV4dFByb3h5LmgKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIHZpcnR1YWwgfldvcmtlckNvbnRleHRQcm94eSgpIHt9CiAKLSAgICAgICAgdmly
dHVhbCB2b2lkIHN0YXJ0V29ya2VyQ29udGV4dChjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0
IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUpID0gMDsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHN0YXJ0V29ya2VyQ29udGV4dChjb25zdCBLVVJMJiBzY3JpcHRVUkws
IGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBjb25zdCBT
dHJpbmcmIHNvdXJjZUNvZGUpID0gMDsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgdGVybWluYXRl
V29ya2VyQ29udGV4dCgpID0gMDsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtl
ck1lc3NhZ2luZ1Byb3h5LmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94
eS5jcHAKaW5kZXggNGIzNDY1OC4uYzYwYWY1YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJz
L1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVz
c2FnaW5nUHJveHkuY3BwCkBAIC0xOTgsOSArMTk4LDkgQEAgV29ya2VyTWVzc2FnaW5nUHJveHk6
On5Xb3JrZXJNZXNzYWdpbmdQcm94eSgpCiAgICAgICAgICAgIHx8IChtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpICYmIGN1cnJlbnRUaHJlYWQoKSA9PSBzdGF0aWNf
Y2FzdDxXb3JrZXJDb250ZXh0Kj4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpKS0+dGhy
ZWFkKCktPnRocmVhZElEKCkpKTsKIH0KIAotdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6c3Rh
cnRXb3JrZXJDb250ZXh0KGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2Vy
QWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSkKK3ZvaWQgV29ya2VyTWVzc2FnaW5nUHJv
eHk6OnN0YXJ0V29ya2VyQ29udGV4dChjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmlu
ZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZUNvZGUpCiB7Ci0gICAgUmVmUHRyPFdvcmtlclRocmVhZD4gdGhyZWFkID0gV29ya2VyVGhyZWFk
OjpjcmVhdGUoc2NyaXB0VVJMLCB1c2VyQWdlbnQsIHNvdXJjZUNvZGUsIHRoaXMpOworICAgIFJl
ZlB0cjxXb3JrZXJUaHJlYWQ+IHRocmVhZCA9IFdvcmtlclRocmVhZDo6Y3JlYXRlKHNjcmlwdFVS
TCwgdXNlckFnZW50LCBlbmNvZGluZywgc291cmNlQ29kZSwgdGhpcyk7CiAgICAgd29ya2VyVGhy
ZWFkQ3JlYXRlZCh0aHJlYWQpOwogICAgIHRocmVhZC0+c3RhcnQoKTsKIH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5oIGIvV2ViQ29yZS93b3JrZXJz
L1dvcmtlck1lc3NhZ2luZ1Byb3h5LmgKaW5kZXggOGQ4MWRlYi4uZTMwNDRkNCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmgKKysrIGIvV2ViQ29yZS93
b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmgKQEAgLTUwLDcgKzUwLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgICAgIC8vIEltcGxlbWVudGF0aW9ucyBvZiBXb3JrZXJDb250ZXh0
UHJveHkuCiAgICAgICAgIC8vIChPbmx5IHVzZSB0aGVzZSBtZXRob2RzIGluIHRoZSB3b3JrZXIg
b2JqZWN0IHRocmVhZC4pCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzdGFydFdvcmtlckNvbnRleHQo
Y29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VDb2RlKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHN0YXJ0V29ya2VyQ29udGV4
dChjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBT
dHJpbmcmIGVuY29kaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUpOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgdGVybWluYXRlV29ya2VyQ29udGV4dCgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQg
cG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKICAgICAg
ICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
VGhyZWFkLmNwcAppbmRleCA5YTVlZTIxLi5iNGYzYWI0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyVGhyZWFkLmNwcAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFk
LmNwcApAQCAtNDMsMzQgKzQzLDM2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdHJ1Y3QgV29y
a2VyVGhyZWFkU3RhcnR1cERhdGEgOiBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IHN0ZDo6YXV0b19wdHI8V29ya2VyVGhyZWFkU3RhcnR1cERhdGE+IGNyZWF0ZShjb25zdCBLVVJM
JiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJj
ZUNvZGUpCisgICAgc3RhdGljIHN0ZDo6YXV0b19wdHI8V29ya2VyVGhyZWFkU3RhcnR1cERhdGE+
IGNyZWF0ZShjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBj
b25zdCBTdHJpbmcmIGVuY29kaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUpCiAgICAgewot
ICAgICAgICByZXR1cm4gc3RkOjphdXRvX3B0cjxXb3JrZXJUaHJlYWRTdGFydHVwRGF0YT4obmV3
IFdvcmtlclRocmVhZFN0YXJ0dXBEYXRhKHNjcmlwdFVSTCwgdXNlckFnZW50LCBzb3VyY2VDb2Rl
KSk7CisgICAgICAgIHJldHVybiBzdGQ6OmF1dG9fcHRyPFdvcmtlclRocmVhZFN0YXJ0dXBEYXRh
PihuZXcgV29ya2VyVGhyZWFkU3RhcnR1cERhdGEoc2NyaXB0VVJMLCB1c2VyQWdlbnQsIGVuY29k
aW5nLCBzb3VyY2VDb2RlKSk7CiAgICAgfQogCiAgICAgS1VSTCBtX3NjcmlwdFVSTDsKICAgICBT
dHJpbmcgbV91c2VyQWdlbnQ7CisgICAgU3RyaW5nIG1fZW5jb2Rpbmc7CiAgICAgU3RyaW5nIG1f
c291cmNlQ29kZTsKIHByaXZhdGU6Ci0gICAgV29ya2VyVGhyZWFkU3RhcnR1cERhdGEoY29uc3Qg
S1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBz
b3VyY2VDb2RlKTsKKyAgICBXb3JrZXJUaHJlYWRTdGFydHVwRGF0YShjb25zdCBLVVJMJiBzY3Jp
cHRVUkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBj
b25zdCBTdHJpbmcmIHNvdXJjZUNvZGUpOwogfTsKIAotV29ya2VyVGhyZWFkU3RhcnR1cERhdGE6
OldvcmtlclRocmVhZFN0YXJ0dXBEYXRhKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3Ry
aW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSkKK1dvcmtlclRocmVhZFN0
YXJ0dXBEYXRhOjpXb3JrZXJUaHJlYWRTdGFydHVwRGF0YShjb25zdCBLVVJMJiBzY3JpcHRVUkws
IGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBjb25zdCBT
dHJpbmcmIHNvdXJjZUNvZGUpCiAgICAgOiBtX3NjcmlwdFVSTChzY3JpcHRVUkwuY29weSgpKQog
ICAgICwgbV91c2VyQWdlbnQodXNlckFnZW50LmNvcHkoKSkKKyAgICAsIG1fZW5jb2RpbmcoZW5j
b2RpbmcuY29weSgpKQogICAgICwgbV9zb3VyY2VDb2RlKHNvdXJjZUNvZGUuY29weSgpKQogewog
fQogCi1QYXNzUmVmUHRyPFdvcmtlclRocmVhZD4gV29ya2VyVGhyZWFkOjpjcmVhdGUoY29uc3Qg
S1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBz
b3VyY2VDb2RlLCBXb3JrZXJPYmplY3RQcm94eSogd29ya2VyT2JqZWN0UHJveHkpCitQYXNzUmVm
UHRyPFdvcmtlclRocmVhZD4gV29ya2VyVGhyZWFkOjpjcmVhdGUoY29uc3QgS1VSTCYgc2NyaXB0
VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBlbmNvZGluZywgY29u
c3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJPYmplY3RQcm94eSogd29ya2VyT2JqZWN0UHJv
eHkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJUaHJlYWQoc2NyaXB0VVJMLCB1
c2VyQWdlbnQsIHNvdXJjZUNvZGUsIHdvcmtlck9iamVjdFByb3h5KSk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBXb3JrZXJUaHJlYWQoc2NyaXB0VVJMLCB1c2VyQWdlbnQsIGVuY29kaW5nLCBz
b3VyY2VDb2RlLCB3b3JrZXJPYmplY3RQcm94eSkpOwogfQogCi1Xb3JrZXJUaHJlYWQ6Oldvcmtl
clRocmVhZChjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBj
b25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlck9iamVjdFByb3h5KiB3b3JrZXJPYmplY3RQ
cm94eSkKK1dvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwg
Y29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcsIGNvbnN0IFN0
cmluZyYgc291cmNlQ29kZSwgV29ya2VyT2JqZWN0UHJveHkqIHdvcmtlck9iamVjdFByb3h5KQog
ICAgIDogbV90aHJlYWRJRCgwKQogICAgICwgbV93b3JrZXJPYmplY3RQcm94eSh3b3JrZXJPYmpl
Y3RQcm94eSkKLSAgICAsIG1fc3RhcnR1cERhdGEoV29ya2VyVGhyZWFkU3RhcnR1cERhdGE6OmNy
ZWF0ZShzY3JpcHRVUkwsIHVzZXJBZ2VudCwgc291cmNlQ29kZSkpCisgICAgLCBtX3N0YXJ0dXBE
YXRhKFdvcmtlclRocmVhZFN0YXJ0dXBEYXRhOjpjcmVhdGUoc2NyaXB0VVJMLCB1c2VyQWdlbnQs
IGVuY29kaW5nLCBzb3VyY2VDb2RlKSkKIHsKIH0KIApAQCAtMTAwLDcgKzEwMiw3IEBAIHZvaWQq
IFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkKCkKIHsKICAgICB7CiAgICAgICAgIE11dGV4TG9j
a2VyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKLSAgICAgICAgbV93b3JrZXJDb250ZXh0
ID0gV29ya2VyQ29udGV4dDo6Y3JlYXRlKG1fc3RhcnR1cERhdGEtPm1fc2NyaXB0VVJMLCBtX3N0
YXJ0dXBEYXRhLT5tX3VzZXJBZ2VudCwgdGhpcyk7CisgICAgICAgIG1fd29ya2VyQ29udGV4dCA9
IFdvcmtlckNvbnRleHQ6OmNyZWF0ZShtX3N0YXJ0dXBEYXRhLT5tX3NjcmlwdFVSTCwgbV9zdGFy
dHVwRGF0YS0+bV91c2VyQWdlbnQsIG1fc3RhcnR1cERhdGEtPm1fZW5jb2RpbmcsIHRoaXMpOwog
ICAgICAgICBpZiAobV9ydW5Mb29wLnRlcm1pbmF0ZWQoKSkgewogICAgICAgICAgICAgLy8gVGhl
IHdvcmtlciB3YXMgdGVybWluYXRlZCBiZWZvcmUgdGhlIHRocmVhZCBoYWQgYSBjaGFuY2UgdG8g
cnVuLiBTaW5jZSB0aGUgY29udGV4dCBkaWRuJ3QgZXhpc3QgeWV0LCAKICAgICAgICAgICAgIC8v
IGZvcmJpZEV4ZWN1dGlvbigpIGNvdWxkbid0IGJlIGNhbGxlZCBmcm9tIHN0b3AoKS4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaCBiL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJUaHJlYWQuaAppbmRleCBmMWE4YTUyLi5iMGFiYjgzIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyVGhyZWFkLmgKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVh
ZC5oCkBAIC00NCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFdv
cmtlclRocmVhZCA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtlclRocmVhZD4gewogICAgIHB1Ymxp
YzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2VyVGhyZWFkPiBjcmVhdGUoY29uc3Qg
S1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBz
b3VyY2VDb2RlLCBXb3JrZXJPYmplY3RQcm94eSopOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxXb3JrZXJUaHJlYWQ+IGNyZWF0ZShjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmlu
ZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZUNvZGUsIFdvcmtlck9iamVjdFByb3h5Kik7CiAgICAgICAgIH5Xb3JrZXJUaHJlYWQoKTsKIAog
ICAgICAgICBib29sIHN0YXJ0KCk7CkBAIC01NSw3ICs1NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgV29ya2VyT2JqZWN0UHJveHkqIHdvcmtlck9iamVjdFByb3h5KCkgY29uc3Qg
eyByZXR1cm4gbV93b3JrZXJPYmplY3RQcm94eTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAg
V29ya2VyVGhyZWFkKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJPYmplY3RQcm94eSopOworICAgICAgICBXb3JrZXJU
aHJlYWQoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcm
IGVuY29kaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlck9iamVjdFByb3h5Kik7
CiAKICAgICAgICAgc3RhdGljIHZvaWQqIHdvcmtlclRocmVhZFN0YXJ0KHZvaWQqKTsKICAgICAg
ICAgdm9pZCogd29ya2VyVGhyZWFkKCk7Cg==
</data>
<flag name="review"
          id="13881"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>