<?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>47035</bug_id>
          
          <creation_ts>2010-10-01 17:57:08 -0700</creation_ts>
          <short_desc>Application cache selection algorithm should only be invoked after navigation</short_desc>
          <delta_ts>2010-10-05 10:08:40 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>288615</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-01 17:57:08 -0700</bug_when>
    <thetext>We don&apos;t implement this part of HTML5:

------------------
A start tag whose tag name is &quot;html&quot;
Create an element for the token in the HTML namespace. Append it to the Document object. Put this element in the stack of open elements.

If the Document is being loaded as part of navigation of a browsing context, then: if the newly created element has a manifest attribute whose value is not the empty string, then resolve the value of that attribute to an absolute URL, relative to the newly created element, and if that is successful, run the application cache selection algorithm with the resulting absolute URL with any &lt;fragment&gt; component removed; otherwise, if there is no such attribute, or its value is the empty string, or resolving its value fails, run the application cache selection algorithm with no manifest. The algorithm must be passed the Document object.
------------------

Instead, we always run the application cache selection algorithm, even if not loaded as part of navigation of a browsing context. That causes assertion failures and generally incorrect behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288616</commentid>
    <comment_count>1</comment_count>
      <attachid>69551</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-01 17:58:26 -0700</bug_when>
    <thetext>Created attachment 69551
test case (http/tests/appcache)

Firefox 3.6.10 has really weird behavior on this test - it passes at first, but fails when reloading the page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288617</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-01 18:00:03 -0700</bug_when>
    <thetext>An assertion fails if you e.g. just document.write(&quot;foobar&quot;) in a document associated with an appcache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288654</commentid>
    <comment_count>3</comment_count>
      <attachid>69565</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-01 22:58:57 -0700</bug_when>
    <thetext>Created attachment 69565
proposed fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288726</commentid>
    <comment_count>4</comment_count>
      <attachid>69565</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-02 15:32:41 -0700</bug_when>
    <thetext>Comment on attachment 69565
proposed fix

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

Please add a test case for an HTMLHtmlElement created by createElement being added to the document while the parser is running.

&gt; WebCore/dom/DocumentParser.h:92
&gt; +    void setWasLoadedAsPartOfNavigation() { m_wasLoadedAsPartOfNavigation = true; }
&gt; +    bool wasLoadedAsPartOfNavigation() const { return m_wasLoadedAsPartOfNavigation; }

Can we make this an argument to the constructor?  This API is much wider than we need.  Also, the getter can be protected if we the parser itself make the check.  Adding it to the constructor will also let us scope the bit to the HTMLDocumentParser, where it seems to belong according to the spec.

&gt; WebCore/html/HTMLHtmlElement.cpp:65
&gt; -    if (!document()-&gt;parsing())
&gt; +    if (!document()-&gt;parser() || !document()-&gt;parser()-&gt;wasLoadedAsPartOfNavigation())
&gt;          return;

This code looks wrong.  It only supposed to trigger for HTMLHtmlElement created by the parser.  It&apos;s entirely possible to createElement(&apos;html&apos;) and insert it into the document while the document has a parser that was loaded as part of navigation.

Instead of putting this code in insertedIntoDocument, we should put the code in a new method of HTMLHtmlElement that the parser calls explicitly in the proper state.

&gt; WebCore/loader/FrameLoader.cpp:614
&gt; +    m_frame-&gt;document()-&gt;parser()-&gt;setWasLoadedAsPartOfNavigation();

This works should be done by the DocumentWriter.  It&apos;s responsible for interacting with the parser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288733</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-02 20:08:49 -0700</bug_when>
    <thetext>&gt; Please add a test case for an HTMLHtmlElement created by createElement being added to the document while the parser is running.

Will do.

&gt; Can we make this an argument to the constructor?  This API is much wider than we need.  Also, the getter can be protected if we the parser itself make the check.  Adding it to the constructor will also let us scope the bit to the HTMLDocumentParser, where it seems to belong according to the spec.

XHTML is not different at all. Image documents etc also need this function to run to completion, for &quot;select cache without manifest URL&quot; branch to be taken. See section 6.5.3 &quot;Page load processing model for XML files&quot; and below for non-HTML content.

In fact, this is why I made it a separate function, not a constructor argument.

&gt; This code looks wrong.  It only supposed to trigger for HTMLHtmlElement created by the parser.  It&apos;s entirely possible to createElement(&apos;html&apos;) and insert it into the document while the document has a parser that was loaded as part of navigation.
&gt; 
&gt; Instead of putting this code in insertedIntoDocument, we should put the code in a new method of HTMLHtmlElement that the parser calls explicitly in the proper state.

Well, that would mean moving all of insertedIntoDocument() into this special function, for every document kind... Appcache cache selection is the only reason for its existence.

Perhaps that&apos;s what has to be be done indeed.

&gt; &gt; WebCore/loader/FrameLoader.cpp:614
&gt; &gt; +    m_frame-&gt;document()-&gt;parser()-&gt;setWasLoadedAsPartOfNavigation();
&gt; 
&gt; This works should be done by the DocumentWriter.  It&apos;s responsible for interacting with the parser.

Why is the parser exposed on Document if we can&apos;t talk to it? Sure, I could pass the arguments all the way through DocumentWriter constructor, and all Document derived class constructors, but I doubt that we gain more than we lose that way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288740</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-02 22:25:24 -0700</bug_when>
    <thetext>&gt; &gt; This code looks wrong.  It only supposed to trigger for HTMLHtmlElement created by the parser.  It&apos;s entirely possible to createElement(&apos;html&apos;) and insert it into the document while the document has a parser that was loaded as part of navigation.
&gt; &gt; 
&gt; &gt; Instead of putting this code in insertedIntoDocument, we should put the code in a new method of HTMLHtmlElement that the parser calls explicitly in the proper state.
&gt; 
&gt; Well, that would mean moving all of insertedIntoDocument() into this special function, for every document kind... Appcache cache selection is the only reason for its existence.
&gt; 
&gt; Perhaps that&apos;s what has to be be done indeed.

Is there another way to get the right behavior?  Whether to trigger this code depends on who&apos;s inserting the element into the document.

&gt; &gt; &gt; WebCore/loader/FrameLoader.cpp:614
&gt; &gt; &gt; +    m_frame-&gt;document()-&gt;parser()-&gt;setWasLoadedAsPartOfNavigation();
&gt; &gt; 
&gt; &gt; This works should be done by the DocumentWriter.  It&apos;s responsible for interacting with the parser.
&gt; 
&gt; Why is the parser exposed on Document if we can&apos;t talk to it? Sure, I could pass the arguments all the way through DocumentWriter constructor, and all Document derived class constructors, but I doubt that we gain more than we lose that way.

The abstraction boundaries in FrameLoader are very poor.  I have a long-term plan for cleaning them up, but that first requires moving all the code to the right place and then limiting the visibility of things you&apos;re not supposed to see.

This code shouldn&apos;t go in FrameLoader because FrameLoader shouldn&apos;t interact with the parser at all.  If you look at this diagram:

https://docs1.google.com/drawings/edit?id=1ko0LFteYpoXdmfYO1rYme6t-QXLPQdI1Z_ysejpOVYk&amp;hl=en

You&apos;ll see that it&apos;s DocumentLoader&apos;s job to interact with the parser.  FrameLoader&apos;s job is to shuffle DocumentLoaders around for the provisional/committed lifecycle.  DocumentLoader&apos;s job is to actually shove bytes into the document.  I&apos;ve managed to package most of FrameLoader&apos;s interaction with the parser up into DocumentWriter.  The next step is to move DocumentWrite from FrameLoader to DocumentLoader (and probably give it a better name).

I know all this stuff isn&apos;t super visible in the code at the moment, but hopefully it&apos;s on the road to improvement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289042</commentid>
    <comment_count>7</comment_count>
      <attachid>69658</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-04 11:56:38 -0700</bug_when>
    <thetext>Created attachment 69658
proposed fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289056</commentid>
    <comment_count>8</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-04 12:11:38 -0700</bug_when>
    <thetext>Attachment 69658 did not build on qt:
Build output: http://queues.webkit.org/results/4252002</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289060</commentid>
    <comment_count>9</comment_count>
      <attachid>69663</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-04 12:14:42 -0700</bug_when>
    <thetext>Created attachment 69663
with Qt build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289070</commentid>
    <comment_count>10</comment_count>
      <attachid>69663</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-04 12:24:02 -0700</bug_when>
    <thetext>Comment on attachment 69663
with Qt build fix

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

I&apos;m not super happy with how the bit ends up getting set on the parser, but I&apos;m not sure I have a better idea for how to do it.  Thanks for iterating on the patch.

&gt; WebCore/html/ImageDocument.cpp:200
&gt;      RefPtr&lt;Element&gt; rootElement = Document::createElement(htmlTag, false);
&gt;      appendChild(rootElement, ec);
&gt; +#if ENABLE(OFFLINE_WEB_APPLICATIONS)
&gt; +    static_cast&lt;HTMLHtmlElement*&gt;(rootElement.get())-&gt;insertedByParser();
&gt; +#endif

I should clean up all this stuff to go through the HTMLDocumentParser.

&gt; WebCore/html/parser/HTMLConstructionSite.h:-57
&gt; -    void insertHTMLHtmlElement(AtomicHTMLToken&amp;);

I take it this was unused.

&gt; WebCore/loader/DocumentWriter.cpp:254
&gt; +void DocumentWriter::setDocumentWasLoadedAsPartOfNavigation()
&gt; +{
&gt; +    m_frame-&gt;document()-&gt;parser()-&gt;setDocumentWasLoadedAsPartOfNavigation();
&gt; +}

This does kind of look silly.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289087</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-04 12:49:51 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/69026&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289097</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-04 13:16:43 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/69026 might have broken Qt Windows 32-bit Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289695</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-05 10:08:40 -0700</bug_when>
    <thetext>For the record, loaded as part of navigations means being loaded by the &quot;Navigating across documents&quot; algorithm: &lt;http://www.whatwg.org/specs/web-apps/current-work/complete/history.html#navigate&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>69551</attachid>
            <date>2010-10-01 17:58:26 -0700</date>
            <delta_ts>2010-10-01 17:58:26 -0700</delta_ts>
            <desc>test case (http/tests/appcache)</desc>
            <filename>document-write-html-element.html</filename>
            <type>text/html</type>
            <size>736</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">PHNjcmlwdD4KaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewogICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwogICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOwp9Cgp3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKQp7CiAgICBhbGVydCgib25s
b2FkIik7CiAgICBkb2N1bWVudC53cml0ZSgiPGh0bWwgbWFuaWZlc3Q9J3Jlc291cmNlcy9lbXB0
eS5tYW5pZmVzdCc+Iik7CiAgICBhcHBsaWNhdGlvbkNhY2hlLm9uY2FjaGVkID0gZnVuY3Rpb24o
KSB7CiAgICAgICAgYWxlcnQoIkZBSUw6IGFwcGNhY2hlIGNhY2hlZCIpOwogICAgfQogICAgYXBw
bGljYXRpb25DYWNoZS5vbm5vdXBkYXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgYWxlcnQoIkZB
SUw6IGFwcGNhY2hlIG5vdXBkYXRlIik7CiAgICB9CiAgICBhcHBsaWNhdGlvbkNhY2hlLm9uZXJy
b3IgPSBmdW5jdGlvbigpIHsKICAgICAgICBhbGVydCgiRkFJTDogYXBwY2FjaGUgZXJyb3IiKTsK
ICAgIH0KCiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIGRvY3VtZW50LndyaXRl
KCJET05FLiBQYXNzZWQgaWYgdGhlcmUgd2VyZSBubyBhbGVydHMgZGlzcGxheWVkLiIpOwogICAg
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCiAgICAgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKICAgIH0sIDEwMCk7Cn0KPC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69565</attachid>
            <date>2010-10-01 22:58:57 -0700</date>
            <delta_ts>2010-10-04 11:56:38 -0700</delta_ts>
            <desc>proposed fix</desc>
            <filename>AppcacheDocumentWrite.txt</filename>
            <type>text/plain</type>
            <size>8671</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODk3MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMTAtMDEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MDM1CisgICAgICAgIEFw
cGxpY2F0aW9uIGNhY2hlIHNlbGVjdGlvbiBhbGdvcml0aG0gc2hvdWxkIG9ubHkgaW52b2tlZCBh
ZnRlciBuYXZpZ2F0aW9uCisKKyAgICAgICAgVGVzdHM6IGh0dHAvdGVzdHMvYXBwY2FjaGUvZG9j
dW1lbnQtd3JpdGUtaHRtbC1lbGVtZW50LTIuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0
cy9hcHBjYWNoZS9kb2N1bWVudC13cml0ZS1odG1sLWVsZW1lbnQuaHRtbAorCisgICAgICAgICog
ZG9tL0RvY3VtZW50UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50UGFyc2Vy
OjpEb2N1bWVudFBhcnNlcik6CisgICAgICAgICogZG9tL0RvY3VtZW50UGFyc2VyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudFBhcnNlcjo6c2V0V2FzTG9hZGVkQXNQYXJ0T2ZOYXZpZ2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50UGFyc2VyOjp3YXNMb2FkZWRBc1BhcnRP
Zk5hdmlnYXRpb24pOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6cmVjZWl2ZWRGaXJzdERhdGEpOgorICAgICAgICBUcmFj
ayB3aGV0aGVyIHRoZSBkb2N1bWVudCBiZWluZyBwYXJzZWQgaXMgYmVpbmcgbG9hZGVkIGFzIHBh
cnQgb2YgbmF2aWdhdGlvbi4gVGhpcyBub3Rpb24gaXMKKyAgICAgICAgdXNlZCBpbiBIVE1MNSB3
aXRob3V0IGEgcmlnb3JvdXMgZGVmaW5pdGlvbiB0aGF0IEkgY291bGQgZmluZCAtIHRoaXMgc2Vl
bXMgdG8gYmUgYSBtZWFuaW5nZnVsCisgICAgICAgIGZvcm1hbGl6YXRpb24uCisKKyAgICAgICAg
KiBodG1sL0hUTUxIdG1sRWxlbWVudC5jcHA6IChXZWJDb3JlOjpIVE1MSHRtbEVsZW1lbnQ6Omlu
c2VydGVkSW50b0RvY3VtZW50KTogT25seSBydW4gdGhlCisgICAgICAgIGNhY2hlIHNlbGVjdGlv
biBhbGdvcml0aG0gaWYgdGhlIGRvY3VtZW50IGlzIGJlaW5nIGxvYWRlZCBhcyBwYXJ0IG9mIG5h
dmlnYXRpb24uIFdlIGRvbid0IAorICAgICAgICB3YW50IHRvIHN3aXRjaCBhc3NvY2lhdGVkIGFw
cGNhY2hlIGlzIHNvbWVvbmUgZG9jdW1lbnQud3JpdGVzIDxodG1sIG1hbmlmZXN0PS4uLj4uCisK
IDIwMTAtMTAtMDEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudFBhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnRQYXJzZXIuY3BwCShyZXZp
c2lvbiA2ODkwOCkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50UGFyc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIERvY3VtZW50UGFy
c2VyOjpEb2N1bWVudFBhcnNlcihEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBtX3N0YXRlKFBh
cnNpbmdTdGF0ZSkKKyAgICAsIG1fd2FzTG9hZGVkQXNQYXJ0T2ZOYXZpZ2F0aW9uKGZhbHNlKQog
ICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKIHsKICAgICBBU1NFUlQoZG9jdW1lbnQpOwpJbmRl
eDogV2ViQ29yZS9kb20vRG9jdW1lbnRQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Eb2N1bWVudFBhcnNlci5oCShyZXZpc2lvbiA2ODkwOCkKKysrIFdlYkNvcmUvZG9tL0RvY3Vt
ZW50UGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDkgQEAgcHVibGljOgogICAg
IC8vIGRldGFjaCBpcyBjYWxsZWQuCiAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwogCisgICAg
dm9pZCBzZXRXYXNMb2FkZWRBc1BhcnRPZk5hdmlnYXRpb24oKSB7IG1fd2FzTG9hZGVkQXNQYXJ0
T2ZOYXZpZ2F0aW9uID0gdHJ1ZTsgfQorICAgIGJvb2wgd2FzTG9hZGVkQXNQYXJ0T2ZOYXZpZ2F0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV93YXNMb2FkZWRBc1BhcnRPZk5hdmlnYXRpb247IH0KKwog
cHJvdGVjdGVkOgogICAgIERvY3VtZW50UGFyc2VyKERvY3VtZW50Kik7CiAKQEAgLTk5LDYgKzEw
Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIERldGFjaGVkU3RhdGUKICAgICB9OwogICAgIFBhcnNl
clN0YXRlIG1fc3RhdGU7CisgICAgYm9vbCBtX3dhc0xvYWRlZEFzUGFydE9mTmF2aWdhdGlvbjsK
IAogICAgIC8vIEV2ZXJ5IERvY3VtZW50UGFyc2VyIG5lZWRzIGEgcG9pbnRlciBiYWNrIHRvIHRo
ZSBkb2N1bWVudC4KICAgICAvLyBtX2RvY3VtZW50IHdpbGwgYmUgMCBhZnRlciB0aGUgcGFyc2Vy
IGlzIHN0b3BwZWQuCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEh0bWxFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEh0bWxFbGVtZW50LmNwcAkocmV2aXNpb24gNjg5
MDgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEh0bWxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUg
IkRvY3VtZW50UGFyc2VyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKIApAQCAtNjAsNyArNjEsNyBAQCB2b2lkIEhUTUxIdG1sRWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvRG9jdW1lCiB7CiAgICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7CiAg
ICAgCi0gICAgaWYgKCFkb2N1bWVudCgpLT5wYXJzaW5nKCkpCisgICAgaWYgKCFkb2N1bWVudCgp
LT5wYXJzZXIoKSB8fCAhZG9jdW1lbnQoKS0+cGFyc2VyKCktPndhc0xvYWRlZEFzUGFydE9mTmF2
aWdhdGlvbigpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWRvY3VtZW50KCktPmZyYW1l
KCkpCkBAIC03MCwxMiArNzEsOCBAQCB2b2lkIEhUTUxIdG1sRWxlbWVudDo6aW5zZXJ0ZWRJbnRv
RG9jdW1lCiAgICAgaWYgKCFkb2N1bWVudExvYWRlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Ly8gQ2hlY2sgdGhlIG1hbmlmZXN0IGF0dHJpYnV0ZQotICAgIC8vIEZJWE1FOiBSZXZpc2l0IHRo
aXMgd2hlbiB3ZSBnZXQgYSBjbGFyaWZpY2F0aW9uIGZyb20gd2hhdHdnIG9uIGhvdyB0byBoYW5k
bGUgZW1wdHkKLSAgICAvLyBtYW5pZmVzdCBhdHRyaWJ1dGVzLiBBcyBzcGVjJ2QsIGFuZCBjb2Rl
ZCBoZXJlLCB0aGUgc3lzdGVtIHdpbGwgaW5pdGlhdGUgYW4gdXBkYXRlCi0gICAgLy8gcGFzc2lu
ZyBpbiB0aGUgZG9jdW1lbnQgVVJMIGFzIHRoZSBtYW5pZmVzdCBVUkwuIFRoYXQncyBub3QgYSBn
b29kIHRoaW5nLgogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbWFuaWZlc3QgPSBnZXRBdHRyaWJ1
dGUobWFuaWZlc3RBdHRyKTsKLSAgICBpZiAobWFuaWZlc3QuaXNOdWxsKCkpCisgICAgaWYgKG1h
bmlmZXN0LmlzRW1wdHkoKSkKICAgICAgICAgZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2Fj
aGVIb3N0KCktPnNlbGVjdENhY2hlV2l0aG91dE1hbmlmZXN0KCk7CiAgICAgZWxzZQogICAgICAg
ICBkb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+c2VsZWN0Q2FjaGVXaXRo
TWFuaWZlc3QoZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwobWFuaWZlc3QpKTsKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDY4OTA4KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTEsNiArNjExLDcgQEAgdm9pZCBGcmFtZUxv
YWRlcjo6Y2xlYXIoYm9vbCBjbGVhcldpbmRvdwogdm9pZCBGcmFtZUxvYWRlcjo6cmVjZWl2ZWRG
aXJzdERhdGEoKQogewogICAgIHdyaXRlcigpLT5iZWdpbihtX3dvcmtpbmdVUkwsIGZhbHNlKTsK
KyAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5wYXJzZXIoKS0+c2V0V2FzTG9hZGVkQXNQYXJ0T2ZO
YXZpZ2F0aW9uKCk7CiAKICAgICBkaXNwYXRjaERpZENvbW1pdExvYWQoKTsKICAgICBkaXNwYXRj
aERpZENsZWFyV2luZG93T2JqZWN0c0luQWxsV29ybGRzKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2
ODk3MikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE2IEBACisyMDEwLTEwLTAxICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzAzNQorICAgICAgICBBcHBsaWNhdGlv
biBjYWNoZSBzZWxlY3Rpb24gYWxnb3JpdGhtIHNob3VsZCBvbmx5IGludm9rZWQgYWZ0ZXIgbmF2
aWdhdGlvbgorCisgICAgICAgICogaHR0cC90ZXN0cy9hcHBjYWNoZS9kb2N1bWVudC13cml0ZS1o
dG1sLWVsZW1lbnQtMi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
YXBwY2FjaGUvZG9jdW1lbnQtd3JpdGUtaHRtbC1lbGVtZW50LTIuaHRtbDogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy9hcHBjYWNoZS9kb2N1bWVudC13cml0ZS1odG1sLWVsZW1lbnQtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2FwcGNhY2hlL2RvY3VtZW50
LXdyaXRlLWh0bWwtZWxlbWVudC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2Fw
cGNhY2hlL3Jlc291cmNlcy9kb2N1bWVudC13cml0ZS1odG1sLWVsZW1lbnQubWFuaWZlc3Q6IEFk
ZGVkLgorCiAyMDEwLTEwLTAxICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNv
bT4KIAogICAgICAgICBSZW1vdmVkIGFuIGV4cGVjdGVkIHJlc3VsdCBmb3IgYSBwcmV2aW91c2x5
IHNraXBwZWQgdGVzdC4gVGhpcyB0ZXN0CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2Fw
cGNhY2hlL2RvY3VtZW50LXdyaXRlLWh0bWwtZWxlbWVudC0yLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL2RvY3VtZW50LXdyaXRlLWh0
bWwtZWxlbWVudC0yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvYXBwY2FjaGUvZG9jdW1lbnQtd3JpdGUtaHRtbC1lbGVtZW50LTItZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKK1NVQ0NFU1MsIG5vIGFzc2VydGlvbiBm
YWlsdXJlCithcHBsaWNhdGlvbkNhY2hlLnN0YXR1cyA9PSAxCkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2FwcGNhY2hlL2RvY3VtZW50LXdyaXRlLWh0bWwtZWxlbWVudC0yLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9kb2N1bWVudC13cml0
ZS1odG1sLWVsZW1lbnQtMi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9hcHBjYWNoZS9kb2N1bWVudC13cml0ZS1odG1sLWVsZW1lbnQtMi5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE5IEBACis8aHRtbCBtYW5pZmVzdD0icmVzb3VyY2VzL2RvY3VtZW50
LXdyaXRlLWh0bWwtZWxlbWVudC5tYW5pZmVzdCI+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0
aW9uIHRlc3QoKQoreworICAgIGRvY3VtZW50LndyaXRlKCJTVUNDRVNTLCBubyBhc3NlcnRpb24g
ZmFpbHVyZSIpOworICAgIGRvY3VtZW50LndyaXRlKCI8YnI+YXBwbGljYXRpb25DYWNoZS5zdGF0
dXMgPT0gIiArIGFwcGxpY2F0aW9uQ2FjaGUuc3RhdHVzKTsKKworICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKK30KKworYXBwbGljYXRpb25DYWNoZS5vbmNhY2hlZCA9IHRlc3Q7CithcHBsaWNhdGlv
bkNhY2hlLm9ubm91cGRhdGUgPSB0ZXN0OworPC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2FwcGNhY2hlL2RvY3VtZW50LXdyaXRlLWh0bWwtZWxlbWVudC1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9kb2N1bWVu
dC13cml0ZS1odG1sLWVsZW1lbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9kb2N1bWVudC13cml0ZS1odG1sLWVsZW1lbnQtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACitET05FLiBQYXNzZWQgaWYgdGhl
cmUgd2VyZSBubyBhbGVydHMgZGlzcGxheWVkLgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9hcHBjYWNoZS9kb2N1bWVudC13cml0ZS1odG1sLWVsZW1lbnQuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL2RvY3VtZW50LXdyaXRlLWh0bWwtZWxl
bWVudC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNo
ZS9kb2N1bWVudC13cml0ZS1odG1sLWVsZW1lbnQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyNiBAQAorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCit3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKQor
eworICAgIGRvY3VtZW50LndyaXRlKCI8aHRtbCBtYW5pZmVzdD0ncmVzb3VyY2VzL2RvY3VtZW50
LXdyaXRlLWh0bWwtZWxlbWVudC5tYW5pZmVzdCc+Iik7CisgICAgYXBwbGljYXRpb25DYWNoZS5v
bmNhY2hlZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBhbGVydCgiRkFJTDogYXBwY2FjaGUgY2Fj
aGVkIik7CisgICAgfQorICAgIGFwcGxpY2F0aW9uQ2FjaGUub25ub3VwZGF0ZSA9IGZ1bmN0aW9u
KCkgeworICAgICAgICBhbGVydCgiRkFJTDogYXBwY2FjaGUgbm91cGRhdGUiKTsKKyAgICB9Cisg
ICAgYXBwbGljYXRpb25DYWNoZS5vbmVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGFsZXJ0
KCJGQUlMOiBhcHBjYWNoZSBlcnJvciIpOworICAgIH0KKworICAgIHNldFRpbWVvdXQoZnVuY3Rp
b24oKSB7CisgICAgICAgIGRvY3VtZW50LndyaXRlKCJET05FLiBQYXNzZWQgaWYgdGhlcmUgd2Vy
ZSBubyBhbGVydHMgZGlzcGxheWVkLiIpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OworICAgIH0sIDEwMCk7Cit9Cis8L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVz
dHMvYXBwY2FjaGUvcmVzb3VyY2VzL2RvY3VtZW50LXdyaXRlLWh0bWwtZWxlbWVudC5tYW5pZmVz
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL3Jlc291cmNl
cy9kb2N1bWVudC13cml0ZS1odG1sLWVsZW1lbnQubWFuaWZlc3QJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL3Jlc291cmNlcy9kb2N1bWVudC13cml0ZS1o
dG1sLWVsZW1lbnQubWFuaWZlc3QJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK0NBQ0hFIE1B
TklGRVNUCg==
</data>
<flag name="review"
          id="59274"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69658</attachid>
            <date>2010-10-04 11:56:38 -0700</date>
            <delta_ts>2010-10-04 12:14:42 -0700</delta_ts>
            <desc>proposed fix</desc>
            <filename>AppcacheDocumentWrite.txt</filename>
            <type>text/plain</type>
            <size>23535</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTAyMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMTAtMTAtMDQgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MDM1CisgICAgICAgIEFw
cGxpY2F0aW9uIGNhY2hlIHNlbGVjdGlvbiBhbGdvcml0aG0gc2hvdWxkIG9ubHkgYmUgaW52b2tl
ZCBhZnRlciBuYXZpZ2F0aW9uCisKKyAgICAgICAgVGVzdHM6IGh0dHAvdGVzdHMvYXBwY2FjaGUv
ZG9jdW1lbnQtd3JpdGUtaHRtbC1lbGVtZW50LTIuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90
ZXN0cy9hcHBjYWNoZS9kb2N1bWVudC13cml0ZS1odG1sLWVsZW1lbnQuaHRtbAorICAgICAgICAg
ICAgICAgaHR0cC90ZXN0cy9hcHBjYWNoZS9pbnNlcnQtaHRtbC1lbGVtZW50LXdpdGgtbWFuaWZl
c3QtMi5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL2FwcGNhY2hlL2luc2VydC1odG1s
LWVsZW1lbnQtd2l0aC1tYW5pZmVzdC5odG1sCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnRQYXJz
ZXIuY3BwOiAoV2ViQ29yZTo6RG9jdW1lbnRQYXJzZXI6OkRvY3VtZW50UGFyc2VyKToKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnRQYXJzZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50UGFy
c2VyOjpzZXREb2N1bWVudFdhc0xvYWRlZEFzUGFydE9mTmF2aWdhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudFBhcnNlcjo6ZG9jdW1lbnRXYXNMb2FkZWRBc1BhcnRPZk5hdmlnYXRp
b24pOgorICAgICAgICBUcmFjayB3aGV0aGVyIHRoZSBkb2N1bWVudCBiZWluZyBwYXJzZWQgaXMg
YmVpbmcgbG9hZGVkIGFzIHBhcnQgb2YgbmF2aWdhdGlvbi4KKworICAgICAgICAqIGh0bWwvSFRN
TEh0bWxFbGVtZW50LmNwcDogKFdlYkNvcmU6OkhUTUxIdG1sRWxlbWVudDo6aW5zZXJ0ZWRCeVBh
cnNlcik6IE9ubHkgcnVuIHRoZQorICAgICAgICBjYWNoZSBzZWxlY3Rpb24gYWxnb3JpdGhtIGlm
IHRoZSBkb2N1bWVudCBpcyBiZWluZyBsb2FkZWQgYXMgcGFydCBvZiBuYXZpZ2F0aW9uLiBXZSBk
b24ndCAKKyAgICAgICAgd2FudCB0byBzd2l0Y2ggYXNzb2NpYXRlZCBhcHBjYWNoZSBpcyBzb21l
b25lIGRvY3VtZW50LndyaXRlcyA8aHRtbCBtYW5pZmVzdD0uLi4+LgorCisgICAgICAgICogaHRt
bC9IVE1MSHRtbEVsZW1lbnQuaDogV2UgbmVlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gcGFy
c2luZyBhbmQgRE9NIG1hbmlwdWxhdGlvbiwgc28KKyAgICAgICAgdGhpcyBjb2RlIGNhbid0IGJl
IGluIEhUTUxIdG1sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKS4KKworICAgICAgICAq
IGRvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwOiAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQ
YXJzZXI6OnN0YXJ0RWxlbWVudE5zKToKKyAgICAgICAgKiBkb20vWE1MRG9jdW1lbnRQYXJzZXJR
dC5jcHA6IChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VTdGFydEVsZW1lbnQpOgor
ICAgICAgICAqIGh0bWwvSW1hZ2VEb2N1bWVudC5jcHA6IChXZWJDb3JlOjpJbWFnZURvY3VtZW50
OjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSk6CisgICAgICAgICogaHRtbC9NZWRpYURvY3VtZW50
LmNwcDogKFdlYkNvcmU6Ok1lZGlhRG9jdW1lbnRQYXJzZXI6OmNyZWF0ZURvY3VtZW50U3RydWN0
dXJlKToKKyAgICAgICAgKiBodG1sL1BsdWdpbkRvY3VtZW50LmNwcDogKFdlYkNvcmU6OlBsdWdp
bkRvY3VtZW50UGFyc2VyOjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSk6CisgICAgICAgICogaHRt
bC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwOiAoV2ViQ29yZTo6SFRNTENvbnN0cnVj
dGlvblNpdGU6Omluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKToKKyAgICAgICAgQ2hl
Y2sgZm9yIG1hbmlmZXN0IGF0dHJpYnV0ZSBpbiBjYXNlcyBzcGVjaWZpZWQgYnkgSFRNTDUuCisK
KyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oOiBSZW1vdmVkIHVu
dXNlZCBpbnNlcnRIVE1MSHRtbEVsZW1lbnQoKS4KKworICAgICAgICAqIGxvYWRlci9Eb2N1bWVu
dFdyaXRlci5jcHA6IChXZWJDb3JlOjpEb2N1bWVudFdyaXRlcjo6c2V0RG9jdW1lbnRXYXNMb2Fk
ZWRBc1BhcnRPZk5hdmlnYXRpb24pOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFdyaXRlci5o
OgorICAgICAgICBGb3J3YXJkIHRoaXMgY2FsbCB0byBEb2N1bWVudFBhcnNlciwgc2luY2UgRG9j
dW1lbnRXcml0ZXIgaXMgc3VwcG9zZWQgdG8gZW5jYXBzdWxhdGUgaXQuCisKKyAgICAgICAgKiBs
b2FkZXIvRnJhbWVMb2FkZXIuY3BwOiAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnJlY2VpdmVkRmly
c3REYXRhKTogUmVjZWl2aW5nIGRhdGEgZnJvbQorICAgICAgICBsb2FkZXIgbWVhbnMgYmVpbmcg
bG9hZGVkIGFzIHBhcnQgb2YgbmF2aWdhdGlvbi4gVGhpcyBub3Rpb24gaXMgdXNlZCBpbiBIVE1M
NSB3aXRob3V0IGEgcmlnb3JvdXMKKyAgICAgICAgZGVmaW5pdGlvbiB0aGF0IEkgY291bGQgZmlu
ZCAtIHRoaXMgc2VlbXMgdG8gYmUgYSBtZWFuaW5nZnVsIGZvcm1hbGl6YXRpb24uCisKIDIwMTAt
MTAtMDEgIFZpY3RvcmlhIEtpcnN0ICA8dnJrQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgSmFtZXMgUm9iaW5zb24uCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudFBhcnNlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnRQYXJzZXIuY3BwCShyZXZpc2lv
biA2ODkwOCkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50UGFyc2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNiArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIERvY3VtZW50UGFyc2Vy
OjpEb2N1bWVudFBhcnNlcihEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBtX3N0YXRlKFBhcnNp
bmdTdGF0ZSkKKyAgICAsIG1fZG9jdW1lbnRXYXNMb2FkZWRBc1BhcnRPZk5hdmlnYXRpb24oZmFs
c2UpCiAgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQogewogICAgIEFTU0VSVChkb2N1bWVudCk7
CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudFBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0RvY3VtZW50UGFyc2VyLmgJKHJldmlzaW9uIDY4OTA4KQorKysgV2ViQ29yZS9kb20v
RG9jdW1lbnRQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsOSBAQCBwdWJsaWM6
CiAgICAgLy8gZGV0YWNoIGlzIGNhbGxlZC4KICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CiAK
KyAgICB2b2lkIHNldERvY3VtZW50V2FzTG9hZGVkQXNQYXJ0T2ZOYXZpZ2F0aW9uKCkgeyBtX2Rv
Y3VtZW50V2FzTG9hZGVkQXNQYXJ0T2ZOYXZpZ2F0aW9uID0gdHJ1ZTsgfQorICAgIGJvb2wgZG9j
dW1lbnRXYXNMb2FkZWRBc1BhcnRPZk5hdmlnYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2RvY3Vt
ZW50V2FzTG9hZGVkQXNQYXJ0T2ZOYXZpZ2F0aW9uOyB9CisKIHByb3RlY3RlZDoKICAgICBEb2N1
bWVudFBhcnNlcihEb2N1bWVudCopOwogCkBAIC05OSw2ICsxMDIsNyBAQCBwcml2YXRlOgogICAg
ICAgICBEZXRhY2hlZFN0YXRlCiAgICAgfTsKICAgICBQYXJzZXJTdGF0ZSBtX3N0YXRlOworICAg
IGJvb2wgbV9kb2N1bWVudFdhc0xvYWRlZEFzUGFydE9mTmF2aWdhdGlvbjsKIAogICAgIC8vIEV2
ZXJ5IERvY3VtZW50UGFyc2VyIG5lZWRzIGEgcG9pbnRlciBiYWNrIHRvIHRoZSBkb2N1bWVudC4K
ICAgICAvLyBtX2RvY3VtZW50IHdpbGwgYmUgMCBhZnRlciB0aGUgcGFyc2VyIGlzIHN0b3BwZWQu
CkluZGV4OiBXZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAJKHJldmlzaW9u
IDY4OTA4KQorKysgV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzgsNyArMzgsOSBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTEVudGl0eVBhcnNlci5oIgorI2lu
Y2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgor
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKICNp
bmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJSZXNvdXJjZUVycm9y
LmgiCkBAIC04MjUsNiArODI3LDExIEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RWxl
bWVudE5zKGMKICAgICBpZiAobV92aWV3ICYmICFuZXdFbGVtZW50LT5hdHRhY2hlZCgpKQogICAg
ICAgICBuZXdFbGVtZW50LT5hdHRhY2goKTsKIAorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBM
SUNBVElPTlMpCisgICAgaWYgKG5ld0VsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1s
VGFnKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTEh0bWxFbGVtZW50Kj4obmV3RWxlbWVudC5n
ZXQoKSktPmluc2VydGVkQnlQYXJzZXIoKTsKKyNlbmRpZgorCiAgICAgaWYgKCFtX3BhcnNpbmdG
cmFnbWVudCAmJiBpc0ZpcnN0RWxlbWVudCAmJiBkb2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAg
ICBkb2N1bWVudCgpLT5mcmFtZSgpLT5sb2FkZXIoKS0+ZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRB
dmFpbGFibGUoKTsKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCShyZXZp
c2lvbiA2ODkwOCkKKysrIFdlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw3ICszNyw5IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MRW50aXR5UGFyc2VyLmgiCisjaW5j
bHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCisj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3Iu
aCIKQEAgLTUyNCw2ICs1MjYsMTEgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VTdGFy
dEVsZW1lbgogICAgIGlmIChtX3ZpZXcgJiYgIW5ld0VsZW1lbnQtPmF0dGFjaGVkKCkpCiAgICAg
ICAgIG5ld0VsZW1lbnQtPmF0dGFjaCgpOwogCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJ
Q0FUSU9OUykKKyAgICBpZiAobmV3RWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxU
YWcpKQorICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSHRtbEVsZW1lbnQqPihuZXdFbGVtZW50Lmdl
dCgpKS0+aW5zZXJ0ZWRJbnRvRG9jdW1lbnRCeVBhcnNlcigpOworI2VuZGlmCisKICAgICBpZiAo
aXNGaXJzdEVsZW1lbnQgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAgICAgZG9jdW1lbnQo
KS0+ZnJhbWUoKS0+bG9hZGVyKCktPmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKCk7
CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEh0bWxFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvSFRNTEh0bWxFbGVtZW50LmNwcAkocmV2aXNpb24gNjg5MDgpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTEh0bWxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiAr
MjcsNyBAQAogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50
UGFyc2VyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKIApA
QCAtNTYsMTEgKzU3LDEwIEBAIGJvb2wgSFRNTEh0bWxFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShB
dHQKIH0KIAogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi12b2lkIEhUTUxI
dG1sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQordm9pZCBIVE1MSHRtbEVsZW1lbnQ6
Omluc2VydGVkQnlQYXJzZXIoKQogewotICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1
bWVudCgpOwotICAgIAotICAgIGlmICghZG9jdW1lbnQoKS0+cGFyc2luZygpKQorICAgIC8vIFdo
ZW4gcGFyc2luZyBhIGZyYWdtZW50LCBpdHMgZHVtbXkgZG9jdW1lbnQgaGFzIGEgbnVsbCBwYXJz
ZXIuCisgICAgaWYgKCFkb2N1bWVudCgpLT5wYXJzZXIoKSB8fCAhZG9jdW1lbnQoKS0+cGFyc2Vy
KCktPmRvY3VtZW50V2FzTG9hZGVkQXNQYXJ0T2ZOYXZpZ2F0aW9uKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmICghZG9jdW1lbnQoKS0+ZnJhbWUoKSkKQEAgLTcwLDEyICs3MCw4IEBAIHZv
aWQgSFRNTEh0bWxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWUKICAgICBpZiAoIWRvY3VtZW50
TG9hZGVyKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBDaGVjayB0aGUgbWFuaWZlc3QgYXR0
cmlidXRlCi0gICAgLy8gRklYTUU6IFJldmlzaXQgdGhpcyB3aGVuIHdlIGdldCBhIGNsYXJpZmlj
YXRpb24gZnJvbSB3aGF0d2cgb24gaG93IHRvIGhhbmRsZSBlbXB0eQotICAgIC8vIG1hbmlmZXN0
IGF0dHJpYnV0ZXMuIEFzIHNwZWMnZCwgYW5kIGNvZGVkIGhlcmUsIHRoZSBzeXN0ZW0gd2lsbCBp
bml0aWF0ZSBhbiB1cGRhdGUKLSAgICAvLyBwYXNzaW5nIGluIHRoZSBkb2N1bWVudCBVUkwgYXMg
dGhlIG1hbmlmZXN0IFVSTC4gVGhhdCdzIG5vdCBhIGdvb2QgdGhpbmcuCiAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBtYW5pZmVzdCA9IGdldEF0dHJpYnV0ZShtYW5pZmVzdEF0dHIpOwotICAgIGlm
IChtYW5pZmVzdC5pc051bGwoKSkKKyAgICBpZiAobWFuaWZlc3QuaXNFbXB0eSgpKQogICAgICAg
ICBkb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+c2VsZWN0Q2FjaGVXaXRo
b3V0TWFuaWZlc3QoKTsKICAgICBlbHNlCiAgICAgICAgIGRvY3VtZW50TG9hZGVyLT5hcHBsaWNh
dGlvbkNhY2hlSG9zdCgpLT5zZWxlY3RDYWNoZVdpdGhNYW5pZmVzdChkb2N1bWVudCgpLT5jb21w
bGV0ZVVSTChtYW5pZmVzdCkpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxIdG1sRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSHRtbEVsZW1lbnQuaAkocmV2aXNpb24g
Njg5MDgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEh0bWxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDE0ICszMywxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEh0
bWxFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1M
SHRtbEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAor
I2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgdm9pZCBpbnNlcnRlZEJ5
UGFyc2VyKCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBIVE1MSHRtbEVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRy
aWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7Ci0KLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElD
QVRJT05TKQotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwotI2VuZGlm
CiB9OwogCiB9IC8vIG5hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcAkocmV2aXNp
b24gNjg5MDgpCisrKyBXZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1l
TG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSFRNTEh0
bWxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKQEAgLTE5NCw2ICsxOTUs
OSBAQCB2b2lkIEltYWdlRG9jdW1lbnQ6OmNyZWF0ZURvY3VtZW50U3RydWN0CiAgICAgCiAgICAg
UmVmUHRyPEVsZW1lbnQ+IHJvb3RFbGVtZW50ID0gRG9jdW1lbnQ6OmNyZWF0ZUVsZW1lbnQoaHRt
bFRhZywgZmFsc2UpOwogICAgIGFwcGVuZENoaWxkKHJvb3RFbGVtZW50LCBlYyk7CisjaWYgRU5B
QkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICBzdGF0aWNfY2FzdDxIVE1MSHRtbEVs
ZW1lbnQqPihyb290RWxlbWVudC5nZXQoKSktPmluc2VydGVkQnlQYXJzZXIoKTsKKyNlbmRpZgog
CiAgICAgaWYgKGZyYW1lKCkgJiYgZnJhbWUoKS0+bG9hZGVyKCkpCiAgICAgICAgIGZyYW1lKCkt
PmxvYWRlcigpLT5kaXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWlsYWJsZSgpOwpJbmRleDogV2Vi
Q29yZS9odG1sL01lZGlhRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9N
ZWRpYURvY3VtZW50LmNwcAkocmV2aXNpb24gNjg5MDgpCisrKyBXZWJDb3JlL2h0bWwvTWVkaWFE
b2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVt
YmVkRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKICNpbmNsdWRlICJLZXli
b2FyZEV2ZW50LmgiCkBAIC03MSw2ICs3Miw5IEBAIHZvaWQgTWVkaWFEb2N1bWVudFBhcnNlcjo6
Y3JlYXRlRG9jdW1lbnQKICAgICBFeGNlcHRpb25Db2RlIGVjOwogICAgIFJlZlB0cjxFbGVtZW50
PiByb290RWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQoaHRtbFRhZywgZmFsc2Up
OwogICAgIGRvY3VtZW50KCktPmFwcGVuZENoaWxkKHJvb3RFbGVtZW50LCBlYyk7CisjaWYgRU5B
QkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICBzdGF0aWNfY2FzdDxIVE1MSHRtbEVs
ZW1lbnQqPihyb290RWxlbWVudC5nZXQoKSktPmluc2VydGVkQnlQYXJzZXIoKTsKKyNlbmRpZgog
CiAgICAgaWYgKGRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAgICAgIGRvY3VtZW50KCktPmZyYW1l
KCktPmxvYWRlcigpLT5kaXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWlsYWJsZSgpOwpJbmRleDog
V2ViQ29yZS9odG1sL1BsdWdpbkRvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvUGx1Z2luRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA2ODkwOCkKKysrIFdlYkNvcmUvaHRtbC9Q
bHVnaW5Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAi
SFRNTEVtYmVkRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk1haW5SZXNvdXJjZUxvYWRlci5oIgogI2luY2x1
ZGUgIlBhZ2UuaCIKQEAgLTgzLDYgKzg0LDkgQEAgdm9pZCBQbHVnaW5Eb2N1bWVudFBhcnNlcjo6
Y3JlYXRlRG9jdW1lbgogICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgUmVmUHRyPEVsZW1lbnQ+
IHJvb3RFbGVtZW50ID0gZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudChodG1sVGFnLCBmYWxzZSk7
CiAgICAgZG9jdW1lbnQoKS0+YXBwZW5kQ2hpbGQocm9vdEVsZW1lbnQsIGVjKTsKKyNpZiBFTkFC
TEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgIHN0YXRpY19jYXN0PEhUTUxIdG1sRWxl
bWVudCo+KHJvb3RFbGVtZW50LmdldCgpKS0+aW5zZXJ0ZWRCeVBhcnNlcigpOworI2VuZGlmCiAK
ICAgICBpZiAoZG9jdW1lbnQoKS0+ZnJhbWUoKSAmJiBkb2N1bWVudCgpLT5mcmFtZSgpLT5sb2Fk
ZXIoKSkKICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPmRpc3BhdGNoRG9j
dW1lbnRFbGVtZW50QXZhaWxhYmxlKCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxD
b25zdHJ1Y3Rpb25TaXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAkocmV2aXNpb24gNjg5MDgpCisrKyBXZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDkg
KzE2OCwxMiBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpkaXNwYXRjaERvY3VtCiAKIHZv
aWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1M
KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQg
PSBIVE1MSHRtbEVsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKKyAgICBSZWZQdHI8SFRNTEh0
bWxFbGVtZW50PiBlbGVtZW50ID0gSFRNTEh0bWxFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCk7
CiAgICAgZWxlbWVudC0+c2V0QXR0cmlidXRlTWFwKHRva2VuLnRha2VBdHJpYnV0ZXMoKSwgbV9m
cmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwotICAgIG1fb3BlbkVsZW1lbnRzLnB1c2hIVE1M
SHRtbEVsZW1lbnQoYXR0YWNoKG1fZG9jdW1lbnQsIGVsZW1lbnQucmVsZWFzZSgpKSk7CisgICAg
bV9vcGVuRWxlbWVudHMucHVzaEhUTUxIdG1sRWxlbWVudChhdHRhY2g8RWxlbWVudD4obV9kb2N1
bWVudCwgZWxlbWVudC5nZXQoKSkpOworI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElP
TlMpCisgICAgZWxlbWVudC0+aW5zZXJ0ZWRCeVBhcnNlcigpOworI2VuZGlmCiAgICAgZGlzcGF0
Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGVJZk5lZWRlZCgpOwogfQogCkBAIC0yMzQsMTMgKzIz
Nyw2IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gSFRNTENvbnN0cnVjdGlvblNpdGUKICAgICByZXR1
cm4gYXR0YWNoKGN1cnJlbnRFbGVtZW50KCksIGNoaWxkKTsKIH0KIAotdm9pZCBIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEh0bWxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
Ci17Ci0gICAgQVNTRVJUKCFzaG91bGRGb3N0ZXJQYXJlbnQoKSk7Ci0gICAgbV9vcGVuRWxlbWVu
dHMucHVzaEhUTUxIdG1sRWxlbWVudChhdHRhY2hUb0N1cnJlbnQoY3JlYXRlSFRNTEVsZW1lbnQo
dG9rZW4pKSk7Ci0gICAgZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGVJZk5lZWRlZCgp
OwotfQotCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MSGVhZEVsZW1lbnQo
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKICAgICBBU1NFUlQoIXNob3VsZEZvc3RlclBhcmVu
dCgpKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmgJ
KHJldmlzaW9uIDY4OTA4KQorKysgV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9u
U2l0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw2IEBAIHB1YmxpYzoKICAgICB2b2lk
IGluc2VydEhUTUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOwogICAgIHZvaWQgaW5zZXJ0U2Vs
ZkNsb3NpbmdIVE1MRWxlbWVudChBdG9taWNIVE1MVG9rZW4mKTsKICAgICB2b2lkIGluc2VydEZv
cm1hdHRpbmdFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgaW5zZXJ0SFRNTEh0
bWxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOwogICAgIHZvaWQgaW5zZXJ0SFRNTEhlYWRFbGVt
ZW50KEF0b21pY0hUTUxUb2tlbiYpOwogICAgIHZvaWQgaW5zZXJ0SFRNTEJvZHlFbGVtZW50KEF0
b21pY0hUTUxUb2tlbiYpOwogICAgIHZvaWQgaW5zZXJ0SFRNTEZvcm1FbGVtZW50KEF0b21pY0hU
TUxUb2tlbiYsIGJvb2wgaXNEZW1vdGVkID0gZmFsc2UpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIv
RG9jdW1lbnRXcml0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50
V3JpdGVyLmNwcAkocmV2aXNpb24gNjg5MDgpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdy
aXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OCw0ICsyNDgsOSBAQCBTdHJpbmcgRG9jdW1l
bnRXcml0ZXI6OmRlcHJlY2F0ZWRGcmFtZUVuCiAgICAgcmV0dXJuIG1fZnJhbWUtPmxvYWRlcigp
LT51cmwoKS5pc0VtcHR5KCkgPyBtX2VuY29kaW5nIDogZW5jb2RpbmcoKTsKIH0KIAordm9pZCBE
b2N1bWVudFdyaXRlcjo6c2V0RG9jdW1lbnRXYXNMb2FkZWRBc1BhcnRPZk5hdmlnYXRpb24oKQor
eworICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnBhcnNlcigpLT5zZXREb2N1bWVudFdhc0xvYWRl
ZEFzUGFydE9mTmF2aWdhdGlvbigpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL0RvY3VtZW50V3JpdGVyLmgJKHJldmlzaW9uIDY4OTA4KQorKysgV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRXcml0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsOCBAQCBwdWJs
aWM6CiAgICAgVGV4dFJlc291cmNlRGVjb2RlciogY3JlYXRlRGVjb2RlcklmTmVlZGVkKCk7CiAg
ICAgdm9pZCByZXBvcnREYXRhUmVjZWl2ZWQoKTsKIAorICAgIHZvaWQgc2V0RG9jdW1lbnRXYXNM
b2FkZWRBc1BhcnRPZk5hdmlnYXRpb24oKTsKKwogcHJpdmF0ZToKICAgICBQYXNzUmVmUHRyPERv
Y3VtZW50PiBjcmVhdGVEb2N1bWVudChjb25zdCBLVVJMJik7CiAKSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAJKHJldmlzaW9uIDY4OTA4KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTEsNiArNjExLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6
Y2xlYXIoYm9vbCBjbGVhcldpbmRvdwogdm9pZCBGcmFtZUxvYWRlcjo6cmVjZWl2ZWRGaXJzdERh
dGEoKQogewogICAgIHdyaXRlcigpLT5iZWdpbihtX3dvcmtpbmdVUkwsIGZhbHNlKTsKKyAgICB3
cml0ZXIoKS0+c2V0RG9jdW1lbnRXYXNMb2FkZWRBc1BhcnRPZk5hdmlnYXRpb24oKTsKIAogICAg
IGRpc3BhdGNoRGlkQ29tbWl0TG9hZCgpOwogICAgIGRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmpl
Y3RzSW5BbGxXb3JsZHMoKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY5MDIyKQorKysgTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTAtMTAtMDQg
IEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ3MDM1CisgICAgICAgIEFwcGxpY2F0aW9uIGNhY2hlIHNlbGVjdGlvbiBh
bGdvcml0aG0gc2hvdWxkIG9ubHkgYmUgaW52b2tlZCBhZnRlciBuYXZpZ2F0aW9uCisKKyAgICAg
ICAgKiBodHRwL3Rlc3RzL2FwcGNhY2hlL2RvY3VtZW50LXdyaXRlLWh0bWwtZWxlbWVudC1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvYXBwY2FjaGUvZG9jdW1lbnQt
d3JpdGUtaHRtbC1lbGVtZW50Lmh0bWw6IEFkZGVkLgorICAgICAgICBBZnRlciBvbmxvYWQsIGRv
Y3VtZW50LndyaXRlIDxodG1sPiB3aXRoIG1hbmlmZXN0LiBJdCBzaG91bGRuJ3QgYmUgdXNlZCBm
b3IgY2FjaGUgc2VsZWN0aW9uLgorCisgICAgICAgICogaHR0cC90ZXN0cy9hcHBjYWNoZS9kb2N1
bWVudC13cml0ZS1odG1sLWVsZW1lbnQtMi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGh0dHAvdGVzdHMvYXBwY2FjaGUvZG9jdW1lbnQtd3JpdGUtaHRtbC1lbGVtZW50LTIuaHRtbDog
QWRkZWQuCisgICAgICAgIEFmdGVyIG9ubG9hZCwgZG9jdW1lbnQud3JpdGUgc29tZSB0ZXh0IGlu
dG8gYSBkb2N1bWVudCB0aGF0IGFscmVhZHkgaGFzIGEgbWFuaWZlc3QuIFRoZSBvcmlnaW5hbAor
ICAgICAgICBjYWNoZSBzaG91bGQgc3RheSBhc3NvY2lhdGVkIHdpdGggdGhlIGRvY3VtZW50LiBX
ZSB1c2VkIHRvIGZhaWwgb24gYW4gYXNzZXJ0aW9uIGhlcmUuCisKKyAgICAgICAgKiBodHRwL3Rl
c3RzL2FwcGNhY2hlL2luc2VydC1odG1sLWVsZW1lbnQtd2l0aC1tYW5pZmVzdC1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvYXBwY2FjaGUvaW5zZXJ0LWh0bWwtZWxl
bWVudC13aXRoLW1hbmlmZXN0Lmh0bWw6IEFkZGVkLgorICAgICAgICBSZXBsYWNlIDxodG1sPiBl
bGVtZW50IHdpdGggYW5vdGhlciBvbmUgd2hpbGUgcGFyc2luZy4gTWFuaWZlc3Qgc2hvdWxkbid0
IGJlIHRha2VuIGZyb20KKyAgICAgICAgdGhlIG5ldyBvbmUuCisKKyAgICAgICAgKiBodHRwL3Rl
c3RzL2FwcGNhY2hlL2luc2VydC1odG1sLWVsZW1lbnQtd2l0aC1tYW5pZmVzdC0yLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9hcHBjYWNoZS9pbnNlcnQtaHRtbC1l
bGVtZW50LXdpdGgtbWFuaWZlc3QtMi5odG1sOiBBZGRlZC4KKyAgICAgICAgUGFyc2UgYSBmcmFn
bWVudCB3aXRoIDxodG1sIG1hbmlmZXN0PS4uPiB3aGlsZSBwYXJzaW5nIGEgZG9jdW1lbnQuCisK
KyAgICAgICAgKiBodHRwL3Rlc3RzL2FwcGNhY2hlL3Jlc291cmNlcy9kb2N1bWVudC13cml0ZS1o
dG1sLWVsZW1lbnQubWFuaWZlc3Q6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvYXBwY2Fj
aGUvcmVzb3VyY2VzL2luc2VydC1odG1sLWVsZW1lbnQtd2l0aC1tYW5pZmVzdC5tYW5pZmVzdDog
QWRkZWQuCisKKzIwMTAtMTAtMDEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKworICAgICAgICAqIGh0
dHAvdGVzdHMvYXBwY2FjaGUvZG9jdW1lbnQtd3JpdGUtaHRtbC1lbGVtZW50LTItZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2FwcGNhY2hlL2RvY3VtZW50LXdyaXRl
LWh0bWwtZWxlbWVudC0yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvYXBwY2Fj
aGUvZG9jdW1lbnQtd3JpdGUtaHRtbC1lbGVtZW50LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy9hcHBjYWNoZS9kb2N1bWVudC13cml0ZS1odG1sLWVsZW1lbnQuaHRt
bDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9hcHBjYWNoZS9yZXNvdXJjZXMvZG9jdW1l
bnQtd3JpdGUtaHRtbC1lbGVtZW50Lm1hbmlmZXN0OiBBZGRlZC4KKwogMjAxMC0xMC0wNCAgQWRh
bSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgU2tpcCBhIHRpbWluZy1vdXQg
dGVzdCBvbiBXaW5kb3dzCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL2Rv
Y3VtZW50LXdyaXRlLWh0bWwtZWxlbWVudC0yLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL2RvY3VtZW50LXdyaXRlLWh0bWwtZWxlbWVu
dC0yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
YXBwY2FjaGUvZG9jdW1lbnQtd3JpdGUtaHRtbC1lbGVtZW50LTItZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKK1NVQ0NFU1MsIG5vIGFzc2VydGlvbiBmYWlsdXJlCith
cHBsaWNhdGlvbkNhY2hlLnN0YXR1cyA9PSAxCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2FwcGNhY2hlL2RvY3VtZW50LXdyaXRlLWh0bWwtZWxlbWVudC0yLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9kb2N1bWVudC13cml0ZS1odG1sLWVs
ZW1lbnQtMi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBj
YWNoZS9kb2N1bWVudC13cml0ZS1odG1sLWVsZW1lbnQtMi5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE5IEBACis8aHRtbCBtYW5pZmVzdD0icmVzb3VyY2VzL2RvY3VtZW50LXdyaXRlLWh0
bWwtZWxlbWVudC5tYW5pZmVzdCI+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3Qo
KQoreworICAgIGRvY3VtZW50LndyaXRlKCJTVUNDRVNTLCBubyBhc3NlcnRpb24gZmFpbHVyZSIp
OworICAgIGRvY3VtZW50LndyaXRlKCI8YnI+YXBwbGljYXRpb25DYWNoZS5zdGF0dXMgPT0gIiAr
IGFwcGxpY2F0aW9uQ2FjaGUuc3RhdHVzKTsKKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30K
KworYXBwbGljYXRpb25DYWNoZS5vbmNhY2hlZCA9IHRlc3Q7CithcHBsaWNhdGlvbkNhY2hlLm9u
bm91cGRhdGUgPSB0ZXN0OworPC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2FwcGNhY2hlL2RvY3VtZW50LXdyaXRlLWh0bWwtZWxlbWVudC1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9kb2N1bWVudC13cml0ZS1o
dG1sLWVsZW1lbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9hcHBjYWNoZS9kb2N1bWVudC13cml0ZS1odG1sLWVsZW1lbnQtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACitET05FLiBQYXNzZWQgaWYgdGhlcmUgd2VyZSBu
byBhbGVydHMgZGlzcGxheWVkLgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNo
ZS9kb2N1bWVudC13cml0ZS1odG1sLWVsZW1lbnQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL2RvY3VtZW50LXdyaXRlLWh0bWwtZWxlbWVudC5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9kb2N1bWVu
dC13cml0ZS1odG1sLWVsZW1lbnQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNiBAQAor
PHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2Fp
dFVudGlsRG9uZSgpOworfQorCit3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKQoreworICAgIGRv
Y3VtZW50LndyaXRlKCI8aHRtbCBtYW5pZmVzdD0ncmVzb3VyY2VzL2RvY3VtZW50LXdyaXRlLWh0
bWwtZWxlbWVudC5tYW5pZmVzdCc+Iik7CisgICAgYXBwbGljYXRpb25DYWNoZS5vbmNhY2hlZCA9
IGZ1bmN0aW9uKCkgeworICAgICAgICBhbGVydCgiRkFJTDogYXBwY2FjaGUgY2FjaGVkIik7Cisg
ICAgfQorICAgIGFwcGxpY2F0aW9uQ2FjaGUub25ub3VwZGF0ZSA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICBhbGVydCgiRkFJTDogYXBwY2FjaGUgbm91cGRhdGUiKTsKKyAgICB9CisgICAgYXBwbGlj
YXRpb25DYWNoZS5vbmVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGFsZXJ0KCJGQUlMOiBh
cHBjYWNoZSBlcnJvciIpOworICAgIH0KKworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGRvY3VtZW50LndyaXRlKCJET05FLiBQYXNzZWQgaWYgdGhlcmUgd2VyZSBubyBhbGVy
dHMgZGlzcGxheWVkLiIpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0s
IDEwMCk7Cit9Cis8L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2Fj
aGUvaW5zZXJ0LWh0bWwtZWxlbWVudC13aXRoLW1hbmlmZXN0LTItZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvaW5zZXJ0LWh0bWwtZWxl
bWVudC13aXRoLW1hbmlmZXN0LTItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9pbnNlcnQtaHRtbC1lbGVtZW50LXdpdGgtbWFuaWZl
c3QtMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK0RPTkUuIFBhc3Nl
ZCBpZiB0aGVyZSB3ZXJlIG5vIGFsZXJ0cyBkaXNwbGF5ZWQuCkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2FwcGNhY2hlL2luc2VydC1odG1sLWVsZW1lbnQtd2l0aC1tYW5pZmVzdC0yLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9pbnNlcnQt
aHRtbC1lbGVtZW50LXdpdGgtbWFuaWZlc3QtMi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9pbnNlcnQtaHRtbC1lbGVtZW50LXdpdGgtbWFuaWZl
c3QtMi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwIEBACis8aHRtbD4KKzxkaXY+PC9k
aXY+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5
VGFnTmFtZSgiZGl2IilbMF07CitkaXYuaW5uZXJIVE1MID0gJzxodG1sIG1hbmlmZXN0PSJyZXNv
dXJjZXMvaW5zZXJ0LWh0bWwtZWxlbWVudC13aXRoLW1hbmlmZXN0Lm1hbmlmZXN0Ij4nCisKK3dp
bmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpCit7CisgICAgYXBwbGljYXRpb25DYWNoZS5vbmNhY2hl
ZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBhbGVydCgiRkFJTDogYXBwY2FjaGUgY2FjaGVkIik7
CisgICAgfQorICAgIGFwcGxpY2F0aW9uQ2FjaGUub25ub3VwZGF0ZSA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICBhbGVydCgiRkFJTDogYXBwY2FjaGUgbm91cGRhdGUiKTsKKyAgICB9CisgICAgYXBw
bGljYXRpb25DYWNoZS5vbmVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGFsZXJ0KCJGQUlM
OiBhcHBjYWNoZSBlcnJvciIpOworICAgIH0KKworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7
CisgICAgICAgIGRvY3VtZW50LndyaXRlKCJET05FLiBQYXNzZWQgaWYgdGhlcmUgd2VyZSBubyBh
bGVydHMgZGlzcGxheWVkLiIpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAg
IH0sIDEwMCk7Cit9Cis8L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBw
Y2FjaGUvaW5zZXJ0LWh0bWwtZWxlbWVudC13aXRoLW1hbmlmZXN0LWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL2luc2VydC1odG1sLWVs
ZW1lbnQtd2l0aC1tYW5pZmVzdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL2luc2VydC1odG1sLWVsZW1lbnQtd2l0aC1tYW5pZmVz
dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK0RPTkUuIFBhc3NlZCBp
ZiB0aGVyZSB3ZXJlIG5vIGFsZXJ0cyBkaXNwbGF5ZWQuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2FwcGNhY2hlL2luc2VydC1odG1sLWVsZW1lbnQtd2l0aC1tYW5pZmVzdC5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvaW5zZXJ0LWh0bWwt
ZWxlbWVudC13aXRoLW1hbmlmZXN0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2FwcGNhY2hlL2luc2VydC1odG1sLWVsZW1lbnQtd2l0aC1tYW5pZmVzdC5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxIEBACis8aHRtbD4KKzxzY3JpcHQ+CitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30K
KworZG9jdW1lbnQucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTsKK3ZhciBu
ZXdIVE1MID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaHRtbCIpOworbmV3SFRNTC5zZXRBdHRy
aWJ1dGUoIm1hbmlmZXN0IiwgInJlc291cmNlcy9pbnNlcnQtaHRtbC1lbGVtZW50LXdpdGgtbWFu
aWZlc3QubWFuaWZlc3QiKTsKK2RvY3VtZW50LmFwcGVuZENoaWxkKG5ld0hUTUwpOworCit3aW5k
b3cub25sb2FkID0gZnVuY3Rpb24oKQoreworICAgIGFwcGxpY2F0aW9uQ2FjaGUub25jYWNoZWQg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgYWxlcnQoIkZBSUw6IGFwcGNhY2hlIGNhY2hlZCIpOwor
ICAgIH0KKyAgICBhcHBsaWNhdGlvbkNhY2hlLm9ubm91cGRhdGUgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgYWxlcnQoIkZBSUw6IGFwcGNhY2hlIG5vdXBkYXRlIik7CisgICAgfQorICAgIGFwcGxp
Y2F0aW9uQ2FjaGUub25lcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBhbGVydCgiRkFJTDog
YXBwY2FjaGUgZXJyb3IiKTsKKyAgICB9CisKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewor
ICAgICAgICBkb2N1bWVudC53cml0ZSgiRE9ORS4gUGFzc2VkIGlmIHRoZXJlIHdlcmUgbm8gYWxl
cnRzIGRpc3BsYXllZC4iKTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9
LCAxMDApOworfQorPC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNh
Y2hlL3Jlc291cmNlcy9kb2N1bWVudC13cml0ZS1odG1sLWVsZW1lbnQubWFuaWZlc3QKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9yZXNvdXJjZXMvZG9jdW1l
bnQtd3JpdGUtaHRtbC1lbGVtZW50Lm1hbmlmZXN0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9yZXNvdXJjZXMvZG9jdW1lbnQtd3JpdGUtaHRtbC1lbGVt
ZW50Lm1hbmlmZXN0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACitDQUNIRSBNQU5JRkVTVApJ
bmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9yZXNvdXJjZXMvaW5zZXJ0LWh0
bWwtZWxlbWVudC13aXRoLW1hbmlmZXN0Lm1hbmlmZXN0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvcmVzb3VyY2VzL2luc2VydC1odG1sLWVsZW1lbnQtd2l0
aC1tYW5pZmVzdC5tYW5pZmVzdAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvYXBwY2FjaGUvcmVzb3VyY2VzL2luc2VydC1odG1sLWVsZW1lbnQtd2l0aC1tYW5pZmVzdC5t
YW5pZmVzdAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorQ0FDSEUgTUFOSUZFU1QK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69663</attachid>
            <date>2010-10-04 12:14:42 -0700</date>
            <delta_ts>2010-10-04 12:24:02 -0700</delta_ts>
            <desc>with Qt build fix</desc>
            <filename>AppcacheDocumentWrite.txt</filename>
            <type>text/plain</type>
            <size>23523</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTAyMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMTAtMTAtMDQgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MDM1CisgICAgICAgIEFw
cGxpY2F0aW9uIGNhY2hlIHNlbGVjdGlvbiBhbGdvcml0aG0gc2hvdWxkIG9ubHkgYmUgaW52b2tl
ZCBhZnRlciBuYXZpZ2F0aW9uCisKKyAgICAgICAgVGVzdHM6IGh0dHAvdGVzdHMvYXBwY2FjaGUv
ZG9jdW1lbnQtd3JpdGUtaHRtbC1lbGVtZW50LTIuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90
ZXN0cy9hcHBjYWNoZS9kb2N1bWVudC13cml0ZS1odG1sLWVsZW1lbnQuaHRtbAorICAgICAgICAg
ICAgICAgaHR0cC90ZXN0cy9hcHBjYWNoZS9pbnNlcnQtaHRtbC1lbGVtZW50LXdpdGgtbWFuaWZl
c3QtMi5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL2FwcGNhY2hlL2luc2VydC1odG1s
LWVsZW1lbnQtd2l0aC1tYW5pZmVzdC5odG1sCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnRQYXJz
ZXIuY3BwOiAoV2ViQ29yZTo6RG9jdW1lbnRQYXJzZXI6OkRvY3VtZW50UGFyc2VyKToKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnRQYXJzZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50UGFy
c2VyOjpzZXREb2N1bWVudFdhc0xvYWRlZEFzUGFydE9mTmF2aWdhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudFBhcnNlcjo6ZG9jdW1lbnRXYXNMb2FkZWRBc1BhcnRPZk5hdmlnYXRp
b24pOgorICAgICAgICBUcmFjayB3aGV0aGVyIHRoZSBkb2N1bWVudCBiZWluZyBwYXJzZWQgaXMg
YmVpbmcgbG9hZGVkIGFzIHBhcnQgb2YgbmF2aWdhdGlvbi4KKworICAgICAgICAqIGh0bWwvSFRN
TEh0bWxFbGVtZW50LmNwcDogKFdlYkNvcmU6OkhUTUxIdG1sRWxlbWVudDo6aW5zZXJ0ZWRCeVBh
cnNlcik6IE9ubHkgcnVuIHRoZQorICAgICAgICBjYWNoZSBzZWxlY3Rpb24gYWxnb3JpdGhtIGlm
IHRoZSBkb2N1bWVudCBpcyBiZWluZyBsb2FkZWQgYXMgcGFydCBvZiBuYXZpZ2F0aW9uLiBXZSBk
b24ndCAKKyAgICAgICAgd2FudCB0byBzd2l0Y2ggYXNzb2NpYXRlZCBhcHBjYWNoZSBpcyBzb21l
b25lIGRvY3VtZW50LndyaXRlcyA8aHRtbCBtYW5pZmVzdD0uLi4+LgorCisgICAgICAgICogaHRt
bC9IVE1MSHRtbEVsZW1lbnQuaDogV2UgbmVlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gcGFy
c2luZyBhbmQgRE9NIG1hbmlwdWxhdGlvbiwgc28KKyAgICAgICAgdGhpcyBjb2RlIGNhbid0IGJl
IGluIEhUTUxIdG1sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKS4KKworICAgICAgICAq
IGRvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwOiAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQ
YXJzZXI6OnN0YXJ0RWxlbWVudE5zKToKKyAgICAgICAgKiBkb20vWE1MRG9jdW1lbnRQYXJzZXJR
dC5jcHA6IChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VTdGFydEVsZW1lbnQpOgor
ICAgICAgICAqIGh0bWwvSW1hZ2VEb2N1bWVudC5jcHA6IChXZWJDb3JlOjpJbWFnZURvY3VtZW50
OjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSk6CisgICAgICAgICogaHRtbC9NZWRpYURvY3VtZW50
LmNwcDogKFdlYkNvcmU6Ok1lZGlhRG9jdW1lbnRQYXJzZXI6OmNyZWF0ZURvY3VtZW50U3RydWN0
dXJlKToKKyAgICAgICAgKiBodG1sL1BsdWdpbkRvY3VtZW50LmNwcDogKFdlYkNvcmU6OlBsdWdp
bkRvY3VtZW50UGFyc2VyOjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSk6CisgICAgICAgICogaHRt
bC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwOiAoV2ViQ29yZTo6SFRNTENvbnN0cnVj
dGlvblNpdGU6Omluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKToKKyAgICAgICAgQ2hl
Y2sgZm9yIG1hbmlmZXN0IGF0dHJpYnV0ZSBpbiBjYXNlcyBzcGVjaWZpZWQgYnkgSFRNTDUuCisK
KyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oOiBSZW1vdmVkIHVu
dXNlZCBpbnNlcnRIVE1MSHRtbEVsZW1lbnQoKS4KKworICAgICAgICAqIGxvYWRlci9Eb2N1bWVu
dFdyaXRlci5jcHA6IChXZWJDb3JlOjpEb2N1bWVudFdyaXRlcjo6c2V0RG9jdW1lbnRXYXNMb2Fk
ZWRBc1BhcnRPZk5hdmlnYXRpb24pOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFdyaXRlci5o
OgorICAgICAgICBGb3J3YXJkIHRoaXMgY2FsbCB0byBEb2N1bWVudFBhcnNlciwgc2luY2UgRG9j
dW1lbnRXcml0ZXIgaXMgc3VwcG9zZWQgdG8gZW5jYXBzdWxhdGUgaXQuCisKKyAgICAgICAgKiBs
b2FkZXIvRnJhbWVMb2FkZXIuY3BwOiAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnJlY2VpdmVkRmly
c3REYXRhKTogUmVjZWl2aW5nIGRhdGEgZnJvbQorICAgICAgICBsb2FkZXIgbWVhbnMgYmVpbmcg
bG9hZGVkIGFzIHBhcnQgb2YgbmF2aWdhdGlvbi4gVGhpcyBub3Rpb24gaXMgdXNlZCBpbiBIVE1M
NSB3aXRob3V0IGEgcmlnb3JvdXMKKyAgICAgICAgZGVmaW5pdGlvbiB0aGF0IEkgY291bGQgZmlu
ZCAtIHRoaXMgc2VlbXMgdG8gYmUgYSBtZWFuaW5nZnVsIGZvcm1hbGl6YXRpb24uCisKIDIwMTAt
MTAtMDEgIFZpY3RvcmlhIEtpcnN0ICA8dnJrQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgSmFtZXMgUm9iaW5zb24uCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudFBhcnNlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnRQYXJzZXIuY3BwCShyZXZpc2lv
biA2ODkwOCkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50UGFyc2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNiArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIERvY3VtZW50UGFyc2Vy
OjpEb2N1bWVudFBhcnNlcihEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBtX3N0YXRlKFBhcnNp
bmdTdGF0ZSkKKyAgICAsIG1fZG9jdW1lbnRXYXNMb2FkZWRBc1BhcnRPZk5hdmlnYXRpb24oZmFs
c2UpCiAgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQogewogICAgIEFTU0VSVChkb2N1bWVudCk7
CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudFBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0RvY3VtZW50UGFyc2VyLmgJKHJldmlzaW9uIDY4OTA4KQorKysgV2ViQ29yZS9kb20v
RG9jdW1lbnRQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsOSBAQCBwdWJsaWM6
CiAgICAgLy8gZGV0YWNoIGlzIGNhbGxlZC4KICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CiAK
KyAgICB2b2lkIHNldERvY3VtZW50V2FzTG9hZGVkQXNQYXJ0T2ZOYXZpZ2F0aW9uKCkgeyBtX2Rv
Y3VtZW50V2FzTG9hZGVkQXNQYXJ0T2ZOYXZpZ2F0aW9uID0gdHJ1ZTsgfQorICAgIGJvb2wgZG9j
dW1lbnRXYXNMb2FkZWRBc1BhcnRPZk5hdmlnYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2RvY3Vt
ZW50V2FzTG9hZGVkQXNQYXJ0T2ZOYXZpZ2F0aW9uOyB9CisKIHByb3RlY3RlZDoKICAgICBEb2N1
bWVudFBhcnNlcihEb2N1bWVudCopOwogCkBAIC05OSw2ICsxMDIsNyBAQCBwcml2YXRlOgogICAg
ICAgICBEZXRhY2hlZFN0YXRlCiAgICAgfTsKICAgICBQYXJzZXJTdGF0ZSBtX3N0YXRlOworICAg
IGJvb2wgbV9kb2N1bWVudFdhc0xvYWRlZEFzUGFydE9mTmF2aWdhdGlvbjsKIAogICAgIC8vIEV2
ZXJ5IERvY3VtZW50UGFyc2VyIG5lZWRzIGEgcG9pbnRlciBiYWNrIHRvIHRoZSBkb2N1bWVudC4K
ICAgICAvLyBtX2RvY3VtZW50IHdpbGwgYmUgMCBhZnRlciB0aGUgcGFyc2VyIGlzIHN0b3BwZWQu
CkluZGV4OiBXZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAJKHJldmlzaW9u
IDY4OTA4KQorKysgV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzgsNyArMzgsOSBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTEVudGl0eVBhcnNlci5oIgorI2lu
Y2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgor
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKICNp
bmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJSZXNvdXJjZUVycm9y
LmgiCkBAIC04MjUsNiArODI3LDExIEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RWxl
bWVudE5zKGMKICAgICBpZiAobV92aWV3ICYmICFuZXdFbGVtZW50LT5hdHRhY2hlZCgpKQogICAg
ICAgICBuZXdFbGVtZW50LT5hdHRhY2goKTsKIAorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBM
SUNBVElPTlMpCisgICAgaWYgKG5ld0VsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1s
VGFnKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTEh0bWxFbGVtZW50Kj4obmV3RWxlbWVudC5n
ZXQoKSktPmluc2VydGVkQnlQYXJzZXIoKTsKKyNlbmRpZgorCiAgICAgaWYgKCFtX3BhcnNpbmdG
cmFnbWVudCAmJiBpc0ZpcnN0RWxlbWVudCAmJiBkb2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAg
ICBkb2N1bWVudCgpLT5mcmFtZSgpLT5sb2FkZXIoKS0+ZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRB
dmFpbGFibGUoKTsKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCShyZXZp
c2lvbiA2ODkwOCkKKysrIFdlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw3ICszNyw5IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MRW50aXR5UGFyc2VyLmgiCisjaW5j
bHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCisj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3Iu
aCIKQEAgLTUyNCw2ICs1MjYsMTEgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VTdGFy
dEVsZW1lbgogICAgIGlmIChtX3ZpZXcgJiYgIW5ld0VsZW1lbnQtPmF0dGFjaGVkKCkpCiAgICAg
ICAgIG5ld0VsZW1lbnQtPmF0dGFjaCgpOwogCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJ
Q0FUSU9OUykKKyAgICBpZiAobmV3RWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxU
YWcpKQorICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSHRtbEVsZW1lbnQqPihuZXdFbGVtZW50Lmdl
dCgpKS0+aW5zZXJ0ZWRCeVBhcnNlcigpOworI2VuZGlmCisKICAgICBpZiAoaXNGaXJzdEVsZW1l
bnQgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+
bG9hZGVyKCktPmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKCk7CiB9CkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTEh0bWxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTEh0bWxFbGVtZW50LmNwcAkocmV2aXNpb24gNjg5MDgpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTEh0bWxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2lu
Y2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50UGFyc2VyLmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKIApAQCAtNTYsMTEgKzU3
LDEwIEBAIGJvb2wgSFRNTEh0bWxFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHQKIH0KIAogI2lm
IEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi12b2lkIEhUTUxIdG1sRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQordm9pZCBIVE1MSHRtbEVsZW1lbnQ6Omluc2VydGVkQnlQ
YXJzZXIoKQogewotICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAg
IAotICAgIGlmICghZG9jdW1lbnQoKS0+cGFyc2luZygpKQorICAgIC8vIFdoZW4gcGFyc2luZyBh
IGZyYWdtZW50LCBpdHMgZHVtbXkgZG9jdW1lbnQgaGFzIGEgbnVsbCBwYXJzZXIuCisgICAgaWYg
KCFkb2N1bWVudCgpLT5wYXJzZXIoKSB8fCAhZG9jdW1lbnQoKS0+cGFyc2VyKCktPmRvY3VtZW50
V2FzTG9hZGVkQXNQYXJ0T2ZOYXZpZ2F0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
ICghZG9jdW1lbnQoKS0+ZnJhbWUoKSkKQEAgLTcwLDEyICs3MCw4IEBAIHZvaWQgSFRNTEh0bWxF
bGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWUKICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKQogICAg
ICAgICByZXR1cm47CiAKLSAgICAvLyBDaGVjayB0aGUgbWFuaWZlc3QgYXR0cmlidXRlCi0gICAg
Ly8gRklYTUU6IFJldmlzaXQgdGhpcyB3aGVuIHdlIGdldCBhIGNsYXJpZmljYXRpb24gZnJvbSB3
aGF0d2cgb24gaG93IHRvIGhhbmRsZSBlbXB0eQotICAgIC8vIG1hbmlmZXN0IGF0dHJpYnV0ZXMu
IEFzIHNwZWMnZCwgYW5kIGNvZGVkIGhlcmUsIHRoZSBzeXN0ZW0gd2lsbCBpbml0aWF0ZSBhbiB1
cGRhdGUKLSAgICAvLyBwYXNzaW5nIGluIHRoZSBkb2N1bWVudCBVUkwgYXMgdGhlIG1hbmlmZXN0
IFVSTC4gVGhhdCdzIG5vdCBhIGdvb2QgdGhpbmcuCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBt
YW5pZmVzdCA9IGdldEF0dHJpYnV0ZShtYW5pZmVzdEF0dHIpOwotICAgIGlmIChtYW5pZmVzdC5p
c051bGwoKSkKKyAgICBpZiAobWFuaWZlc3QuaXNFbXB0eSgpKQogICAgICAgICBkb2N1bWVudExv
YWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+c2VsZWN0Q2FjaGVXaXRob3V0TWFuaWZlc3Qo
KTsKICAgICBlbHNlCiAgICAgICAgIGRvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9z
dCgpLT5zZWxlY3RDYWNoZVdpdGhNYW5pZmVzdChkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChtYW5p
ZmVzdCkpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxIdG1sRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MSHRtbEVsZW1lbnQuaAkocmV2aXNpb24gNjg5MDgpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTEh0bWxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE0ICsz
MywxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEh0bWxFbGVtZW50PiBj
cmVhdGUoRG9jdW1lbnQqKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MSHRtbEVsZW1lbnQ+
IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAorI2lmIEVOQUJMRShP
RkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgdm9pZCBpbnNlcnRlZEJ5UGFyc2VyKCk7Cisj
ZW5kaWYKKwogcHJpdmF0ZToKICAgICBIVE1MSHRtbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Kik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmli
dXRlKikgY29uc3Q7Ci0KLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAg
IHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwotI2VuZGlmCiB9OwogCiB9IC8v
IG5hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcAkocmV2aXNpb24gNjg5MDgpCisr
KyBXZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50
LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgog
I2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKQEAgLTE5NCw2ICsxOTUsOSBAQCB2b2lkIElt
YWdlRG9jdW1lbnQ6OmNyZWF0ZURvY3VtZW50U3RydWN0CiAgICAgCiAgICAgUmVmUHRyPEVsZW1l
bnQ+IHJvb3RFbGVtZW50ID0gRG9jdW1lbnQ6OmNyZWF0ZUVsZW1lbnQoaHRtbFRhZywgZmFsc2Up
OwogICAgIGFwcGVuZENoaWxkKHJvb3RFbGVtZW50LCBlYyk7CisjaWYgRU5BQkxFKE9GRkxJTkVf
V0VCX0FQUExJQ0FUSU9OUykKKyAgICBzdGF0aWNfY2FzdDxIVE1MSHRtbEVsZW1lbnQqPihyb290
RWxlbWVudC5nZXQoKSktPmluc2VydGVkQnlQYXJzZXIoKTsKKyNlbmRpZgogCiAgICAgaWYgKGZy
YW1lKCkgJiYgZnJhbWUoKS0+bG9hZGVyKCkpCiAgICAgICAgIGZyYW1lKCktPmxvYWRlcigpLT5k
aXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWlsYWJsZSgpOwpJbmRleDogV2ViQ29yZS9odG1sL01l
ZGlhRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9NZWRpYURvY3VtZW50
LmNwcAkocmV2aXNpb24gNjg5MDgpCisrKyBXZWJDb3JlL2h0bWwvTWVkaWFEb2N1bWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVtYmVkRWxlbWVudC5o
IgorI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgog
I2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50Lmgi
CkBAIC03MSw2ICs3Miw5IEBAIHZvaWQgTWVkaWFEb2N1bWVudFBhcnNlcjo6Y3JlYXRlRG9jdW1l
bnQKICAgICBFeGNlcHRpb25Db2RlIGVjOwogICAgIFJlZlB0cjxFbGVtZW50PiByb290RWxlbWVu
dCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQoaHRtbFRhZywgZmFsc2UpOwogICAgIGRvY3Vt
ZW50KCktPmFwcGVuZENoaWxkKHJvb3RFbGVtZW50LCBlYyk7CisjaWYgRU5BQkxFKE9GRkxJTkVf
V0VCX0FQUExJQ0FUSU9OUykKKyAgICBzdGF0aWNfY2FzdDxIVE1MSHRtbEVsZW1lbnQqPihyb290
RWxlbWVudC5nZXQoKSktPmluc2VydGVkQnlQYXJzZXIoKTsKKyNlbmRpZgogCiAgICAgaWYgKGRv
Y3VtZW50KCktPmZyYW1lKCkpCiAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigp
LT5kaXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWlsYWJsZSgpOwpJbmRleDogV2ViQ29yZS9odG1s
L1BsdWdpbkRvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvUGx1Z2luRG9j
dW1lbnQuY3BwCShyZXZpc2lvbiA2ODkwOCkKKysrIFdlYkNvcmUvaHRtbC9QbHVnaW5Eb2N1bWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVtYmVkRWxl
bWVudC5oIgorI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgogI2luY2x1ZGUgIk1haW5SZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
QEAgLTgzLDYgKzg0LDkgQEAgdm9pZCBQbHVnaW5Eb2N1bWVudFBhcnNlcjo6Y3JlYXRlRG9jdW1l
bgogICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IHJvb3RFbGVtZW50
ID0gZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudChodG1sVGFnLCBmYWxzZSk7CiAgICAgZG9jdW1l
bnQoKS0+YXBwZW5kQ2hpbGQocm9vdEVsZW1lbnQsIGVjKTsKKyNpZiBFTkFCTEUoT0ZGTElORV9X
RUJfQVBQTElDQVRJT05TKQorICAgIHN0YXRpY19jYXN0PEhUTUxIdG1sRWxlbWVudCo+KHJvb3RF
bGVtZW50LmdldCgpKS0+aW5zZXJ0ZWRCeVBhcnNlcigpOworI2VuZGlmCiAKICAgICBpZiAoZG9j
dW1lbnQoKS0+ZnJhbWUoKSAmJiBkb2N1bWVudCgpLT5mcmFtZSgpLT5sb2FkZXIoKSkKICAgICAg
ICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50
QXZhaWxhYmxlKCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25T
aXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rp
b25TaXRlLmNwcAkocmV2aXNpb24gNjg5MDgpCisrKyBXZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxD
b25zdHJ1Y3Rpb25TaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDkgKzE2OCwxMiBAQCB2
b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpkaXNwYXRjaERvY3VtCiAKIHZvaWQgSFRNTENvbnN0
cnVjdGlvblNpdGU6Omluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKEF0b21pY0hUTUxU
b2tlbiYgdG9rZW4pCiB7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBIVE1MSHRtbEVs
ZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKKyAgICBSZWZQdHI8SFRNTEh0bWxFbGVtZW50PiBl
bGVtZW50ID0gSFRNTEh0bWxFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCk7CiAgICAgZWxlbWVu
dC0+c2V0QXR0cmlidXRlTWFwKHRva2VuLnRha2VBdHJpYnV0ZXMoKSwgbV9mcmFnbWVudFNjcmlw
dGluZ1Blcm1pc3Npb24pOwotICAgIG1fb3BlbkVsZW1lbnRzLnB1c2hIVE1MSHRtbEVsZW1lbnQo
YXR0YWNoKG1fZG9jdW1lbnQsIGVsZW1lbnQucmVsZWFzZSgpKSk7CisgICAgbV9vcGVuRWxlbWVu
dHMucHVzaEhUTUxIdG1sRWxlbWVudChhdHRhY2g8RWxlbWVudD4obV9kb2N1bWVudCwgZWxlbWVu
dC5nZXQoKSkpOworI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgZWxl
bWVudC0+aW5zZXJ0ZWRCeVBhcnNlcigpOworI2VuZGlmCiAgICAgZGlzcGF0Y2hEb2N1bWVudEVs
ZW1lbnRBdmFpbGFibGVJZk5lZWRlZCgpOwogfQogCkBAIC0yMzQsMTMgKzIzNyw2IEBAIFBhc3NS
ZWZQdHI8RWxlbWVudD4gSFRNTENvbnN0cnVjdGlvblNpdGUKICAgICByZXR1cm4gYXR0YWNoKGN1
cnJlbnRFbGVtZW50KCksIGNoaWxkKTsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
aW5zZXJ0SFRNTEh0bWxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCi17Ci0gICAgQVNT
RVJUKCFzaG91bGRGb3N0ZXJQYXJlbnQoKSk7Ci0gICAgbV9vcGVuRWxlbWVudHMucHVzaEhUTUxI
dG1sRWxlbWVudChhdHRhY2hUb0N1cnJlbnQoY3JlYXRlSFRNTEVsZW1lbnQodG9rZW4pKSk7Ci0g
ICAgZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGVJZk5lZWRlZCgpOwotfQotCiB2b2lk
IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MSGVhZEVsZW1lbnQoQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKIHsKICAgICBBU1NFUlQoIXNob3VsZEZvc3RlclBhcmVudCgpKTsKSW5kZXg6
IFdlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmgJKHJldmlzaW9uIDY4
OTA4KQorKysgV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NCw3ICs1NCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGluc2VydEhUTUxF
bGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOwogICAgIHZvaWQgaW5zZXJ0U2VsZkNsb3NpbmdIVE1M
RWxlbWVudChBdG9taWNIVE1MVG9rZW4mKTsKICAgICB2b2lkIGluc2VydEZvcm1hdHRpbmdFbGVt
ZW50KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgaW5zZXJ0SFRNTEh0bWxFbGVtZW50KEF0
b21pY0hUTUxUb2tlbiYpOwogICAgIHZvaWQgaW5zZXJ0SFRNTEhlYWRFbGVtZW50KEF0b21pY0hU
TUxUb2tlbiYpOwogICAgIHZvaWQgaW5zZXJ0SFRNTEJvZHlFbGVtZW50KEF0b21pY0hUTUxUb2tl
biYpOwogICAgIHZvaWQgaW5zZXJ0SFRNTEZvcm1FbGVtZW50KEF0b21pY0hUTUxUb2tlbiYsIGJv
b2wgaXNEZW1vdGVkID0gZmFsc2UpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcAko
cmV2aXNpb24gNjg5MDgpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0OCw0ICsyNDgsOSBAQCBTdHJpbmcgRG9jdW1lbnRXcml0ZXI6OmRl
cHJlY2F0ZWRGcmFtZUVuCiAgICAgcmV0dXJuIG1fZnJhbWUtPmxvYWRlcigpLT51cmwoKS5pc0Vt
cHR5KCkgPyBtX2VuY29kaW5nIDogZW5jb2RpbmcoKTsKIH0KIAordm9pZCBEb2N1bWVudFdyaXRl
cjo6c2V0RG9jdW1lbnRXYXNMb2FkZWRBc1BhcnRPZk5hdmlnYXRpb24oKQoreworICAgIG1fZnJh
bWUtPmRvY3VtZW50KCktPnBhcnNlcigpLT5zZXREb2N1bWVudFdhc0xvYWRlZEFzUGFydE9mTmF2
aWdhdGlvbigpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2xv
YWRlci9Eb2N1bWVudFdyaXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3Vt
ZW50V3JpdGVyLmgJKHJldmlzaW9uIDY4OTA4KQorKysgV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRX
cml0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsOCBAQCBwdWJsaWM6CiAgICAgVGV4
dFJlc291cmNlRGVjb2RlciogY3JlYXRlRGVjb2RlcklmTmVlZGVkKCk7CiAgICAgdm9pZCByZXBv
cnREYXRhUmVjZWl2ZWQoKTsKIAorICAgIHZvaWQgc2V0RG9jdW1lbnRXYXNMb2FkZWRBc1BhcnRP
Zk5hdmlnYXRpb24oKTsKKwogcHJpdmF0ZToKICAgICBQYXNzUmVmUHRyPERvY3VtZW50PiBjcmVh
dGVEb2N1bWVudChjb25zdCBLVVJMJik7CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJl
dmlzaW9uIDY4OTA4KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MTEsNiArNjExLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2xlYXIoYm9vbCBj
bGVhcldpbmRvdwogdm9pZCBGcmFtZUxvYWRlcjo6cmVjZWl2ZWRGaXJzdERhdGEoKQogewogICAg
IHdyaXRlcigpLT5iZWdpbihtX3dvcmtpbmdVUkwsIGZhbHNlKTsKKyAgICB3cml0ZXIoKS0+c2V0
RG9jdW1lbnRXYXNMb2FkZWRBc1BhcnRPZk5hdmlnYXRpb24oKTsKIAogICAgIGRpc3BhdGNoRGlk
Q29tbWl0TG9hZCgpOwogICAgIGRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RzSW5BbGxXb3Js
ZHMoKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY5MDIyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTAtMTAtMDQgIEFsZXhleSBQcm9z
a3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ3MDM1CisgICAgICAgIEFwcGxpY2F0aW9uIGNhY2hlIHNlbGVjdGlvbiBhbGdvcml0aG0gc2hv
dWxkIG9ubHkgYmUgaW52b2tlZCBhZnRlciBuYXZpZ2F0aW9uCisKKyAgICAgICAgKiBodHRwL3Rl
c3RzL2FwcGNhY2hlL2RvY3VtZW50LXdyaXRlLWh0bWwtZWxlbWVudC1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvYXBwY2FjaGUvZG9jdW1lbnQtd3JpdGUtaHRtbC1l
bGVtZW50Lmh0bWw6IEFkZGVkLgorICAgICAgICBBZnRlciBvbmxvYWQsIGRvY3VtZW50LndyaXRl
IDxodG1sPiB3aXRoIG1hbmlmZXN0LiBJdCBzaG91bGRuJ3QgYmUgdXNlZCBmb3IgY2FjaGUgc2Vs
ZWN0aW9uLgorCisgICAgICAgICogaHR0cC90ZXN0cy9hcHBjYWNoZS9kb2N1bWVudC13cml0ZS1o
dG1sLWVsZW1lbnQtMi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
YXBwY2FjaGUvZG9jdW1lbnQtd3JpdGUtaHRtbC1lbGVtZW50LTIuaHRtbDogQWRkZWQuCisgICAg
ICAgIEFmdGVyIG9ubG9hZCwgZG9jdW1lbnQud3JpdGUgc29tZSB0ZXh0IGludG8gYSBkb2N1bWVu
dCB0aGF0IGFscmVhZHkgaGFzIGEgbWFuaWZlc3QuIFRoZSBvcmlnaW5hbAorICAgICAgICBjYWNo
ZSBzaG91bGQgc3RheSBhc3NvY2lhdGVkIHdpdGggdGhlIGRvY3VtZW50LiBXZSB1c2VkIHRvIGZh
aWwgb24gYW4gYXNzZXJ0aW9uIGhlcmUuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2FwcGNhY2hl
L2luc2VydC1odG1sLWVsZW1lbnQtd2l0aC1tYW5pZmVzdC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGh0dHAvdGVzdHMvYXBwY2FjaGUvaW5zZXJ0LWh0bWwtZWxlbWVudC13aXRoLW1h
bmlmZXN0Lmh0bWw6IEFkZGVkLgorICAgICAgICBSZXBsYWNlIDxodG1sPiBlbGVtZW50IHdpdGgg
YW5vdGhlciBvbmUgd2hpbGUgcGFyc2luZy4gTWFuaWZlc3Qgc2hvdWxkbid0IGJlIHRha2VuIGZy
b20KKyAgICAgICAgdGhlIG5ldyBvbmUuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2FwcGNhY2hl
L2luc2VydC1odG1sLWVsZW1lbnQtd2l0aC1tYW5pZmVzdC0yLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogaHR0cC90ZXN0cy9hcHBjYWNoZS9pbnNlcnQtaHRtbC1lbGVtZW50LXdpdGgt
bWFuaWZlc3QtMi5odG1sOiBBZGRlZC4KKyAgICAgICAgUGFyc2UgYSBmcmFnbWVudCB3aXRoIDxo
dG1sIG1hbmlmZXN0PS4uPiB3aGlsZSBwYXJzaW5nIGEgZG9jdW1lbnQuCisKKyAgICAgICAgKiBo
dHRwL3Rlc3RzL2FwcGNhY2hlL3Jlc291cmNlcy9kb2N1bWVudC13cml0ZS1odG1sLWVsZW1lbnQu
bWFuaWZlc3Q6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvYXBwY2FjaGUvcmVzb3VyY2Vz
L2luc2VydC1odG1sLWVsZW1lbnQtd2l0aC1tYW5pZmVzdC5tYW5pZmVzdDogQWRkZWQuCisKKzIw
MTAtMTAtMDEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKworICAgICAgICAqIGh0dHAvdGVzdHMvYXBw
Y2FjaGUvZG9jdW1lbnQtd3JpdGUtaHRtbC1lbGVtZW50LTItZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL2FwcGNhY2hlL2RvY3VtZW50LXdyaXRlLWh0bWwtZWxlbWVu
dC0yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvYXBwY2FjaGUvZG9jdW1lbnQt
d3JpdGUtaHRtbC1lbGVtZW50LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90
ZXN0cy9hcHBjYWNoZS9kb2N1bWVudC13cml0ZS1odG1sLWVsZW1lbnQuaHRtbDogQWRkZWQuCisg
ICAgICAgICogaHR0cC90ZXN0cy9hcHBjYWNoZS9yZXNvdXJjZXMvZG9jdW1lbnQtd3JpdGUtaHRt
bC1lbGVtZW50Lm1hbmlmZXN0OiBBZGRlZC4KKwogMjAxMC0xMC0wNCAgQWRhbSBSb2JlbiAgPGFy
b2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgU2tpcCBhIHRpbWluZy1vdXQgdGVzdCBvbiBXaW5k
b3dzCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL2RvY3VtZW50LXdyaXRl
LWh0bWwtZWxlbWVudC0yLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2FwcGNhY2hlL2RvY3VtZW50LXdyaXRlLWh0bWwtZWxlbWVudC0yLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvZG9j
dW1lbnQtd3JpdGUtaHRtbC1lbGVtZW50LTItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDIgQEAKK1NVQ0NFU1MsIG5vIGFzc2VydGlvbiBmYWlsdXJlCithcHBsaWNhdGlvbkNh
Y2hlLnN0YXR1cyA9PSAxCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL2Rv
Y3VtZW50LXdyaXRlLWh0bWwtZWxlbWVudC0yLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9kb2N1bWVudC13cml0ZS1odG1sLWVsZW1lbnQtMi5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9kb2N1bWVu
dC13cml0ZS1odG1sLWVsZW1lbnQtMi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5IEBA
Cis8aHRtbCBtYW5pZmVzdD0icmVzb3VyY2VzL2RvY3VtZW50LXdyaXRlLWh0bWwtZWxlbWVudC5t
YW5pZmVzdCI+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIGRv
Y3VtZW50LndyaXRlKCJTVUNDRVNTLCBubyBhc3NlcnRpb24gZmFpbHVyZSIpOworICAgIGRvY3Vt
ZW50LndyaXRlKCI8YnI+YXBwbGljYXRpb25DYWNoZS5zdGF0dXMgPT0gIiArIGFwcGxpY2F0aW9u
Q2FjaGUuc3RhdHVzKTsKKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworYXBwbGljYXRp
b25DYWNoZS5vbmNhY2hlZCA9IHRlc3Q7CithcHBsaWNhdGlvbkNhY2hlLm9ubm91cGRhdGUgPSB0
ZXN0OworPC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL2Rv
Y3VtZW50LXdyaXRlLWh0bWwtZWxlbWVudC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9kb2N1bWVudC13cml0ZS1odG1sLWVsZW1lbnQt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBj
YWNoZS9kb2N1bWVudC13cml0ZS1odG1sLWVsZW1lbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxIEBACitET05FLiBQYXNzZWQgaWYgdGhlcmUgd2VyZSBubyBhbGVydHMgZGlz
cGxheWVkLgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9kb2N1bWVudC13
cml0ZS1odG1sLWVsZW1lbnQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2FwcGNhY2hlL2RvY3VtZW50LXdyaXRlLWh0bWwtZWxlbWVudC5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9kb2N1bWVudC13cml0ZS1odG1s
LWVsZW1lbnQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNiBAQAorPHNjcmlwdD4KK2lm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
OworfQorCit3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKQoreworICAgIGRvY3VtZW50LndyaXRl
KCI8aHRtbCBtYW5pZmVzdD0ncmVzb3VyY2VzL2RvY3VtZW50LXdyaXRlLWh0bWwtZWxlbWVudC5t
YW5pZmVzdCc+Iik7CisgICAgYXBwbGljYXRpb25DYWNoZS5vbmNhY2hlZCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICBhbGVydCgiRkFJTDogYXBwY2FjaGUgY2FjaGVkIik7CisgICAgfQorICAgIGFw
cGxpY2F0aW9uQ2FjaGUub25ub3VwZGF0ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICBhbGVydCgi
RkFJTDogYXBwY2FjaGUgbm91cGRhdGUiKTsKKyAgICB9CisgICAgYXBwbGljYXRpb25DYWNoZS5v
bmVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGFsZXJ0KCJGQUlMOiBhcHBjYWNoZSBlcnJv
ciIpOworICAgIH0KKworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGRvY3Vt
ZW50LndyaXRlKCJET05FLiBQYXNzZWQgaWYgdGhlcmUgd2VyZSBubyBhbGVydHMgZGlzcGxheWVk
LiIpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0sIDEwMCk7Cit9Cis8
L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvaW5zZXJ0LWh0
bWwtZWxlbWVudC13aXRoLW1hbmlmZXN0LTItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvaW5zZXJ0LWh0bWwtZWxlbWVudC13aXRoLW1h
bmlmZXN0LTItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9hcHBjYWNoZS9pbnNlcnQtaHRtbC1lbGVtZW50LXdpdGgtbWFuaWZlc3QtMi1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK0RPTkUuIFBhc3NlZCBpZiB0aGVyZSB3
ZXJlIG5vIGFsZXJ0cyBkaXNwbGF5ZWQuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2Fw
cGNhY2hlL2luc2VydC1odG1sLWVsZW1lbnQtd2l0aC1tYW5pZmVzdC0yLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9pbnNlcnQtaHRtbC1lbGVtZW50
LXdpdGgtbWFuaWZlc3QtMi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9hcHBjYWNoZS9pbnNlcnQtaHRtbC1lbGVtZW50LXdpdGgtbWFuaWZlc3QtMi5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwIEBACis8aHRtbD4KKzxkaXY+PC9kaXY+Cis8c2NyaXB0
PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCk7Cit9CisKK3ZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZGl2
IilbMF07CitkaXYuaW5uZXJIVE1MID0gJzxodG1sIG1hbmlmZXN0PSJyZXNvdXJjZXMvaW5zZXJ0
LWh0bWwtZWxlbWVudC13aXRoLW1hbmlmZXN0Lm1hbmlmZXN0Ij4nCisKK3dpbmRvdy5vbmxvYWQg
PSBmdW5jdGlvbigpCit7CisgICAgYXBwbGljYXRpb25DYWNoZS5vbmNhY2hlZCA9IGZ1bmN0aW9u
KCkgeworICAgICAgICBhbGVydCgiRkFJTDogYXBwY2FjaGUgY2FjaGVkIik7CisgICAgfQorICAg
IGFwcGxpY2F0aW9uQ2FjaGUub25ub3VwZGF0ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICBhbGVy
dCgiRkFJTDogYXBwY2FjaGUgbm91cGRhdGUiKTsKKyAgICB9CisgICAgYXBwbGljYXRpb25DYWNo
ZS5vbmVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGFsZXJ0KCJGQUlMOiBhcHBjYWNoZSBl
cnJvciIpOworICAgIH0KKworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGRv
Y3VtZW50LndyaXRlKCJET05FLiBQYXNzZWQgaWYgdGhlcmUgd2VyZSBubyBhbGVydHMgZGlzcGxh
eWVkLiIpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0sIDEwMCk7Cit9
Cis8L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvaW5zZXJ0
LWh0bWwtZWxlbWVudC13aXRoLW1hbmlmZXN0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL2luc2VydC1odG1sLWVsZW1lbnQtd2l0aC1t
YW5pZmVzdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2FwcGNhY2hlL2luc2VydC1odG1sLWVsZW1lbnQtd2l0aC1tYW5pZmVzdC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK0RPTkUuIFBhc3NlZCBpZiB0aGVyZSB3ZXJl
IG5vIGFsZXJ0cyBkaXNwbGF5ZWQuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNh
Y2hlL2luc2VydC1odG1sLWVsZW1lbnQtd2l0aC1tYW5pZmVzdC5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvaW5zZXJ0LWh0bWwtZWxlbWVudC13aXRo
LW1hbmlmZXN0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2Fw
cGNhY2hlL2luc2VydC1odG1sLWVsZW1lbnQtd2l0aC1tYW5pZmVzdC5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDMxIEBACis8aHRtbD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKworZG9jdW1lbnQu
cmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTsKK3ZhciBuZXdIVE1MID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiaHRtbCIpOworbmV3SFRNTC5zZXRBdHRyaWJ1dGUoIm1hbmlm
ZXN0IiwgInJlc291cmNlcy9pbnNlcnQtaHRtbC1lbGVtZW50LXdpdGgtbWFuaWZlc3QubWFuaWZl
c3QiKTsKK2RvY3VtZW50LmFwcGVuZENoaWxkKG5ld0hUTUwpOworCit3aW5kb3cub25sb2FkID0g
ZnVuY3Rpb24oKQoreworICAgIGFwcGxpY2F0aW9uQ2FjaGUub25jYWNoZWQgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgYWxlcnQoIkZBSUw6IGFwcGNhY2hlIGNhY2hlZCIpOworICAgIH0KKyAgICBh
cHBsaWNhdGlvbkNhY2hlLm9ubm91cGRhdGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgYWxlcnQo
IkZBSUw6IGFwcGNhY2hlIG5vdXBkYXRlIik7CisgICAgfQorICAgIGFwcGxpY2F0aW9uQ2FjaGUu
b25lcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBhbGVydCgiRkFJTDogYXBwY2FjaGUgZXJy
b3IiKTsKKyAgICB9CisKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICBkb2N1
bWVudC53cml0ZSgiRE9ORS4gUGFzc2VkIGlmIHRoZXJlIHdlcmUgbm8gYWxlcnRzIGRpc3BsYXll
ZC4iKTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9LCAxMDApOworfQor
PC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL3Jlc291cmNl
cy9kb2N1bWVudC13cml0ZS1odG1sLWVsZW1lbnQubWFuaWZlc3QKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9yZXNvdXJjZXMvZG9jdW1lbnQtd3JpdGUtaHRt
bC1lbGVtZW50Lm1hbmlmZXN0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9hcHBjYWNoZS9yZXNvdXJjZXMvZG9jdW1lbnQtd3JpdGUtaHRtbC1lbGVtZW50Lm1hbmlmZXN0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACitDQUNIRSBNQU5JRkVTVApJbmRleDogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9yZXNvdXJjZXMvaW5zZXJ0LWh0bWwtZWxlbWVudC13
aXRoLW1hbmlmZXN0Lm1hbmlmZXN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvYXBwY2FjaGUvcmVzb3VyY2VzL2luc2VydC1odG1sLWVsZW1lbnQtd2l0aC1tYW5pZmVzdC5t
YW5pZmVzdAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUv
cmVzb3VyY2VzL2luc2VydC1odG1sLWVsZW1lbnQtd2l0aC1tYW5pZmVzdC5tYW5pZmVzdAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSBAQAorQ0FDSEUgTUFOSUZFU1QK
</data>
<flag name="review"
          id="59379"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>