<?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>32383</bug_id>
          
          <creation_ts>2009-12-10 10:52:45 -0800</creation_ts>
          <short_desc>Selecting article text at sfgate.com results in spurious back/forward entries</short_desc>
          <delta_ts>2009-12-24 16:42:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>History</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>http://www.sfgate.com</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>eric</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>170462</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-12-10 10:52:45 -0800</bug_when>
    <thetext>Selecting article text at sfgate.com results in spurious back/forward entries.

Steps:
- Visit http://www.sfgate.com
- Click any article
- Click and hold back button, note no extraneous entries in back/forward list
- Select portions of the article a few times.
- Notice each time you do this, Safari seems to go through a page load (based on the loading indicator in the location field)
- Click and hold back button again, note extraneous entries in back/forward list
- Back no longer takes you out of the article, due to all the extra entries

What&apos;s going on is that sfgate.com is doing some sort of tracking on mouse up after a selection by doing the following:
-Creating an iframe element with some forms
-Appending the iframe to the DOM
-Submitting the form
...then later:
-Removing the iframe from the DOM

The current heuristics WebKit has to not add a back/forward entry don&apos;t preclude this iframe form submission, so an entry gets added for the &quot;navigation&quot;

Without too much difficult, when a form is programmatically submitted we can note that:
A - The frame was *not* created by the parser - that is, it was dynamically created by script.
B - The form submission was not the result of a user event - that is, the submission was also done by script.

In this case, we can lock the back/forward list.

I can&apos;t think of a reasonable site this would break, and will know if this approach passes layout tests shortly.  At which point I&apos;ll post my patch.

This problem is in radar as &lt;rdar://problem/7342725&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170543</commentid>
    <comment_count>1</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-12-10 15:16:54 -0800</bug_when>
    <thetext>In further experimentation, it appears that Firefox implements this rule.  In testing:
1 - iframe created by the parser and submitted manually
2 - iframe created by the parser and submitted programmatically
3 - iframe created by script and submitted manually
4 - iframe created by script and submitted programmatically

#&apos;s 1-3 add a back/forward item in Firefox, whereas #4 does not, and that&apos;s what I&apos;ll be going for here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170629</commentid>
    <comment_count>2</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-12-10 20:27:34 -0800</bug_when>
    <thetext>This story keeps getting more bizarre - It appears we&apos;re the only ones that get dynamic iframe creation right.

The IE documentation for the &lt;iframe&gt; element has people complaining it is buggy and not reliable in IE - http://msdn.microsoft.com/en-us/library/ms535258(VS.85).aspx

Firefox also has a pretty gnarly bug - https://bugzilla.mozilla.org/show_bug.cgi?id=473396 &quot;Firefox does not draw appended contents of DOM created empty iframe.&quot;

In both Firefox and IE have almost exactly the same bug.  If you dynamically create and iframe and dynamically put some crap in it, then that crap doesn&apos;t render.  I will attach an example of this shortly called &quot;dynamic-auto.html&quot;.

Additionally, if that dynamically created iframe has a form and script submits it, the submission takes place and you do NOT get a back/forward entry.  This is true in both IE and FIrefox.

I will attach an example called &quot;parsed-auto.html&quot;.  In this example, an empty &lt;iframe&gt; element exists in the markup itself.  The only dynamic part of it is creating the form elements and adding them to the iframe, then submitting the form.  This works well in all 3.

These two tests give us the following matrix:

IE8:
Parsed iFrame, dynamic form and submission - NO BACK ENTRY
Dynamic iframe, dynamic form and submission - NO BACK ENTRY (along with other fun IE bugs)

Firefox:
Parsed iFrame, dynamic form and submission - BACK ENTRY ADDED
Dynamic iframe, dynamic form and submission - NO BACK ENTRY (along with other fun Firefox bugs)

WebKit:
Parsed iFrame, dynamic form and submission - BACK ENTRY ADDED
Dynamic iframe, dynamic form and submission - BACK ENTRY ADDED

If we changed to match both IE and Firefox in the Dynamically created iFrame case, we would fix this bug.  There would still be a difference between us and IE for the parsed &lt;iframe&gt; case but until I see that affect a real world site, I suggest we leave our behavior as-is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170630</commentid>
    <comment_count>3</comment_count>
      <attachid>44659</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-12-10 20:29:15 -0800</bug_when>
    <thetext>Created attachment 44659
Dynamically created iframe with automatic form submission (Our goal is to match both IE and Firefox and make this *not* add a back entry)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170631</commentid>
    <comment_count>4</comment_count>
      <attachid>44660</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-12-10 20:29:54 -0800</bug_when>
    <thetext>Created attachment 44660
Parsed &lt;iframe&gt; with dynamically added form - Firefox and IE differ here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170633</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-12-10 21:21:40 -0800</bug_when>
    <thetext>My upcoming patch causes 1 layout test failure, http/tests/navigation/onload-navigation-iframe-timeout.html

That test was added in http://trac.webkit.org/changeset/25410 which - amazingly - was fixing &quot;spurious back button entries at sfgate.com&quot;

The test states &quot;In this case, Safari and Firefox adds a history item but IE doesn&apos;t&quot; and the change in behavior is now we&apos;re *not* adding an item, and acting like IE.

I would argue that based on my exploration of this issue, the fact that my patch fixes sfgate.com now, and the previous sfgate issue remains fixed, that this layout test change is a progression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170636</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-12-10 21:31:58 -0800</bug_when>
    <thetext>FWIW, Opera matches IE behavior here - they do not add an extra item in either case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170637</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-12-10 21:33:53 -0800</bug_when>
    <thetext>Note that r25410 was a fix for https://bugs.webkit.org/show_bug.cgi?id=14957</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170638</commentid>
    <comment_count>8</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-12-10 21:43:55 -0800</bug_when>
    <thetext>If the patch I am about to submit is what lands to resolve this bug, then https://bugs.webkit.org/show_bug.cgi?id=22851 should be resolved also.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170639</commentid>
    <comment_count>9</comment_count>
      <attachid>44661</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-12-10 21:45:36 -0800</bug_when>
    <thetext>Created attachment 44661
Proposed fix, new layout tests, and updated results for 1 old test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170640</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-10 21:49:13 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44661 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170750</commentid>
    <comment_count>11</comment_count>
      <attachid>44661</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-12-11 07:27:53 -0800</bug_when>
    <thetext>Comment on attachment 44661
Proposed fix, new layout tests, and updated results for 1 old test.

I&apos;m not sure if &quot;created by parser and submitted by JavaScript&quot; is the right recipe here. For example, you can create frames using innerHTML and that counts as created by parser. Is the &quot;created by parser and submitted by JavaScript&quot; rule really what the other browsers are doing? How did you test that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170787</commentid>
    <comment_count>12</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-12-11 09:32:17 -0800</bug_when>
    <thetext>&quot;created by parser and submitted by JavaScript&quot; is - as far as my testing goes so far - COMPATIBLE with other browsers are doing.

I can&apos;t tell you with certainty that it is exactly what other browsers are doing because - IE and Firefox at least - both seem to have pretty nutty bugs with iframes created via document.createNode()

I will try your innerHTML case and see if I learn anything else.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170882</commentid>
    <comment_count>13</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-12-11 12:53:40 -0800</bug_when>
    <thetext>Darin has convinced me to match IE/Opera directly and never add back/forward entries for dynamic form submissions in iframes no matter how the iframe got there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170937</commentid>
    <comment_count>14</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-12-11 14:40:48 -0800</bug_when>
    <thetext>Changing to match my best understanding of IE8/Opera causes a series of layouttest regressions.

Failed results:
fast/forms/button-state-restore.html
http/tests/history/back-to-post.php	
http/tests/history/redirect-js-form-submit-0-seconds.html	
http/tests/history/redirect-js-form-submit-2-seconds.html	
http/tests/history/redirect-js-form-submit-before-load.html	
http/tests/navigation/back-send-referrer.html	

Timed out:
http/tests/cache/subresource-failover-to-network.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170953</commentid>
    <comment_count>15</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-12-11 15:18:50 -0800</bug_when>
    <thetext>Those failures reflect my patch implementing the wrong rule.

I meant to implement &quot;when forms in iframes are submitted by script, lock the back/forward list.&quot;
What I implemented was &quot;when ANY form in ANY frame is submitted by script, lock the back/forward list.&quot;

After implementing the correct rule I get NO change in behavior on existing layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170964</commentid>
    <comment_count>16</comment_count>
      <attachid>44715</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-12-11 15:45:53 -0800</bug_when>
    <thetext>Created attachment 44715
Much simpler rule, much simpler patch

This implements the rule &quot;if a form submission was done by javascript and is in an iframe, lock the back/forward list&quot;

It matches IE and Opera as best as I can figure, and doesn&apos;t change any other layout tests in the process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170965</commentid>
    <comment_count>17</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-11 15:48:52 -0800</bug_when>
    <thetext>I&apos;m slightly confused as to why this is marked as a sensitive (hidden) bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170968</commentid>
    <comment_count>18</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-12-11 15:51:45 -0800</bug_when>
    <thetext>Due to some accident...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170972</commentid>
    <comment_count>19</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-12-11 15:53:09 -0800</bug_when>
    <thetext>beidson@apple.com	2009-12-11 15:18:50 PST	 Group		Security-Sensitive


And I hadn&apos;t made any changes immediately before or after that.  I wonder how on earth I accidentally did that without meaning to.  heh.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170976</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-11 15:57:02 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44715 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170985</commentid>
    <comment_count>21</comment_count>
      <attachid>44715</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-12-11 16:20:55 -0800</bug_when>
    <thetext>Comment on attachment 44715
Much simpler rule, much simpler patch

Brady and I discussed some refinements:

    1) Using an enum instead of a boolean.
    2) Reducing the number of arguments to the public versions at least, of the submit function on HTMLFormElement.

I think this is OK to land as-is, but if you want to change to an enum that&apos;s cool too.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170999</commentid>
    <comment_count>22</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-12-11 17:35:11 -0800</bug_when>
    <thetext>Ran the suggested changes by Darin, and landed in http://trac.webkit.org/changeset/52033</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174821</commentid>
    <comment_count>23</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-12-24 16:42:27 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; Ran the suggested changes by Darin, and landed in
&gt; http://trac.webkit.org/changeset/52033

In case it hasn&apos;t been noticed so far: since the patch landed, the two new tests *dynamic-iframe-dynamic-form-back-entry.html, etc.) fail on the tiger build slaves. Does anyone plan to fix this or does this need a roll-out?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>44659</attachid>
            <date>2009-12-10 20:29:15 -0800</date>
            <delta_ts>2009-12-10 20:29:15 -0800</delta_ts>
            <desc>Dynamically created iframe with automatic form submission (Our goal is to match both IE and Firefox and make this *not* add a back entry)</desc>
            <filename>dynamic-auto.html</filename>
            <type>text/html</type>
            <size>929</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">PGh0bWw+CjxzY3JpcHQ+CgpmdW5jdGlvbiBydW5UZXN0KCkKewogICAgdmFyIGlmcmFtZSA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOwogICAgaWZyYW1lLnNldEF0dHJpYnV0ZSgi
bmFtZSIsICJnYXJiYWdlIik7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7
CgogICAgdmFyIG90aGVyRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDsK
ICAgIHZhciBvdGhlckJvZHkgPSBvdGhlckRvY3VtZW50LmJvZHk7CiAgICAKICAgIC8vIEZvciBJ
RS4uLgogICAgaWYgKCFvdGhlckJvZHkpIHsKICAgICAgICBvdGhlckJvZHkgPSBvdGhlckRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImJvZHkiKTsKICAgICAgICBvdGhlckRvY3VtZW50LmFwcGVuZENo
aWxkKG90aGVyQm9keSk7CiAgICB9CiAgICAKICAgIHZhciBmb3JtID0gb3RoZXJEb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJmb3JtIik7CiAgICBmb3JtLnNldEF0dHJpYnV0ZSgiYWN0aW9uIiwgImZv
cm0tcG9zdC10ZXN0Lmh0bWwiKTsKICAgIGZvcm0uc2V0QXR0cmlidXRlKCJuYW1lIiwgIlRoZU5h
bWVPZlRoZUZvcm0iKTsKICAgIGZvcm0uc2V0QXR0cmlidXRlKCJ0YXJnZXQiLCAiZ2FyYmFnZSIp
OwogICAgZm9ybS5zZXRBdHRyaWJ1dGUoIm1ldGhvZCIsICJwb3N0Iik7CiAgICB2YXIgYnV0dG9u
ID0gb3RoZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwogICAgYnV0dG9uLnNldEF0
dHJpYnV0ZSgidHlwZSIsICJzdWJtaXQiKTsKICAgIGZvcm0uYXBwZW5kQ2hpbGQoYnV0dG9uKTsK
ICAgIG90aGVyQm9keS5hcHBlbmRDaGlsZChmb3JtKTsKCiAgICBmb3JtLnN1Ym1pdCgpOwp9CgoK
PC9zY3JpcHQ+Cgo8Ym9keSBvbmxvYWQ9InNldFRpbWVvdXQoJ3J1blRlc3QoKTsnLCAxMDAwKTsi
Pgo8L2JvZHk+CjwvaHRtbD4=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>44660</attachid>
            <date>2009-12-10 20:29:54 -0800</date>
            <delta_ts>2009-12-10 20:29:54 -0800</delta_ts>
            <desc>Parsed &lt;iframe&gt; with dynamically added form - Firefox and IE differ here</desc>
            <filename>parsed-auto.html</filename>
            <type>text/html</type>
            <size>706</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">PGh0bWw+CjxzY3JpcHQ+CgpmdW5jdGlvbiBydW5UZXN0KCkKewogICAgdmFyIGlmcmFtZSA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJnYXJiYWdlIik7CgogICAgdmFyIG90aGVyRG9jdW1lbnQg
PSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDsKCiAgICB2YXIgZm9ybSA9IG90aGVyRG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiZm9ybSIpOwogICAgZm9ybS5zZXRBdHRyaWJ1dGUoImFjdGlv
biIsICJmb3JtLXBvc3QtdGVzdC5odG1sIik7CiAgICBmb3JtLnNldEF0dHJpYnV0ZSgibmFtZSIs
ICJUaGVOYW1lT2ZUaGVGb3JtIik7CiAgICBmb3JtLnNldEF0dHJpYnV0ZSgidGFyZ2V0IiwgImdh
cmJhZ2UiKTsKICAgIGZvcm0uc2V0QXR0cmlidXRlKCJtZXRob2QiLCAicG9zdCIpOwogICAgdmFy
IGJ1dHRvbiA9IG90aGVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKICAgIGJ1dHRv
bi5zZXRBdHRyaWJ1dGUoInR5cGUiLCAic3VibWl0Iik7CiAgICBmb3JtLmFwcGVuZENoaWxkKGJ1
dHRvbik7CiAgICBvdGhlckRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZm9ybSk7CgogICAgZm9y
bS5zdWJtaXQoKTsKfQoKCjwvc2NyaXB0PgoKPGJvZHkgb25sb2FkPSJzZXRUaW1lb3V0KCdydW5U
ZXN0KCk7JywgMTAwMCk7Ij4KPGlmcmFtZSBpZD0iZ2FyYmFnZSIgbmFtZT0iZ2FyYmFnZSI+PC9p
ZnJhbWU+CjwvYm9keT4KPC9odG1sPg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44661</attachid>
            <date>2009-12-10 21:45:36 -0800</date>
            <delta_ts>2009-12-11 15:45:53 -0800</delta_ts>
            <desc>Proposed fix, new layout tests, and updated results for 1 old test.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>34194</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTk3OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzAgQEAKKzIwMDktMTItMTAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS83MzQyNzI1PiBhbmQgaHR0cHM6Ly93ZWJraXQub3JnL2IvMzIzODMKKyAg
ICAgICAgU2VsZWN0aW5nIGFydGljbGUgdGV4dCBhdCBzZmdhdGUuY29tIHJlc3VsdHMgaW4gc3B1
cmlvdXMgYmFjay9mb3J3YXJkIGVudHJpZXMKKworICAgICAgICBJZiBhbiBpZnJhbWUgaXMgY3Jl
YXRlZCBieSBqYXZhc2NyaXB0LCBkeW5hbWljYWxseSBidWlsdCB1cCB3aXRoIHNvbWUgZm9ybSBl
bGVtZW50cywgdGhlbgorICAgICAgICBzdWJtaXR0ZWQgYnkgdGhhdCBzYW1lIHNjcmlwdCwgd2Ug
d291bGQgYWRkIGEgYmFjay9mb3J3YXJkIGVudHJ5LiAgT3BlcmEsIElFLCBhbmQgRmlyZWZveCB3
b3VsZCBub3QuCisKKyAgICAgICAgQW5kIHRoaXMgaXMgd2hhdCBzZmdhdGUuY29tIGlzIGRvaW5n
IHdoZW4geW91IHNlbGVjdCB0ZXh0LiBMZXQncyBmaXggaXQsIHNoYWxsIHdlPworCisgICAgICAg
IFRlc3RzOiBodHRwL3Rlc3RzL25hdmlnYXRpb24vZHluYW1pYy1pZnJhbWUtZHluYW1pYy1mb3Jt
LWJhY2stZW50cnkuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Bh
cnNlZC1pZnJhbWUtZHluYW1pYy1mb3JtLWJhY2stZW50cnkuaHRtbAorCisgICAgICAgIFdoZW4g
ZGVjaWRpbmcgdGhlIHZhbHVlIGZvciB0aGUgbG9ja0JhY2tGb3J3YXJkTGlzdCBmbGFnLCB0YWtl
IGludG8gYWNjb3VudCB3aGV0aGVyIHRoZSBmcmFtZSdzIG93bmVyIHdhcyAKKyAgICAgICAgY3Jl
YXRlZCBieSBzY3JpcHQgYW5kIHdoZXRoZXIgdGhlIHN1Ym1pc3Npb24gd2FzIHRyaWdnZXJlZCBi
eSBqYXZhc2NyaXB0OgorICAgICAgICAqIGxvYWRlci9SZWRpcmVjdFNjaGVkdWxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZWRpcmVjdFNjaGVkdWxlcjo6c2NoZWR1bGVGb3JtU3VibWlzc2lv
bik6CisgICAgICAgICogbG9hZGVyL1JlZGlyZWN0U2NoZWR1bGVyLmg6CisKKyAgICAgICAgUHJv
cGFnYXRlIHdoZXRoZXIgb3Igbm90IHRoZSBzdWJtaXNzaW9uIHdhcyB0cmlnZ2VyZWQgYnkgamF2
YXNjcmlwdDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxGb3JtRWxlbWVudEN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxGb3JtRWxlbWVudDo6c3VibWl0KToKKyAgICAg
ICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9y
bUVsZW1lbnQ6OnN1Ym1pdCk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuaDoKKyAg
ICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXI6OnN1Ym1pdEZvcm0pOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5oOgorCisg
ICAgICAgIEFkZCB0aGUgY3JlYXRlZEJ5UGFyc2VyIGZsYWcgYmFjayB0byBIVE1MRnJhbWVPd25l
ckVsZW1lbnRzOgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudDo6SFRNTEZyYW1lT3duZXJFbGVt
ZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50OjpjcmVhdGVkQnlQYXJzZXIpOgorCisgICAg
ICAgIE1ha2Ugc3VyZSBhbGwgZGlyZWN0IGFuZCBpbmRpcmVjdCBzdWJjbGFzc2VzIG9mIEhUTUxG
cmFtZU93bmVyRWxlbWVudCBwYXNzIHRoYXQgZmxhZyBhbG9uZzoKKyAgICAgICAgKiBodG1sL0hU
TUxUYWdOYW1lcy5pbjoKKyAgICAgICAgKiBodG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50OjpIVE1MQXBwbGV0RWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQXBwbGV0RWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBo
dG1sL0hUTUxBcHBsZXRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MRW1iZWRFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQ6OkhUTUxFbWJlZEVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudDo6Y3JlYXRlKToKKyAgICAg
ICAgKiBodG1sL0hUTUxFbWJlZEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZUVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudDo6SFRNTEZyYW1l
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50OjpjcmVhdGUpOgor
ICAgICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEZy
YW1lRWxlbWVudEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudEJh
c2U6OkhUTUxGcmFtZUVsZW1lbnRCYXNlKToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZUVsZW1l
bnRCYXNlLmg6CisgICAgICAgICogaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudDo6SFRNTElGcmFtZUVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9I
VE1MSUZyYW1lRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OkhUTUxPYmplY3RFbGVtZW50
KToKKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxQbHVnSW5FbGVtZW50OjpIVE1MUGx1Z0luRWxlbWVudCk6CisgICAgICAgICogaHRt
bC9IVE1MUGx1Z0luRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFBsdWdJbkltYWdlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1l
bnQuaDoKKwogMjAwOS0xMi0xMCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDUxOTcxKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY2LDcgKzY2LDcgQEAgSlNWYWx1ZSBKU0hUTUxGb3JtRWxlbWVudDo6c3VibWl0
KEV4ZWNTdAogICAgIEZyYW1lKiBhY3RpdmVGcmFtZSA9IGFzSlNET01XaW5kb3coZXhlYy0+ZHlu
YW1pY0dsb2JhbE9iamVjdCgpKS0+aW1wbCgpLT5mcmFtZSgpOwogICAgIGlmICghYWN0aXZlRnJh
bWUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHN0YXRpY19jYXN0PEhUTUxG
b3JtRWxlbWVudCo+KGltcGwoKSktPnN1Ym1pdCgwLCBmYWxzZSwgIWFjdGl2ZUZyYW1lLT5zY3Jp
cHQoKS0+YW55UGFnZUlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpOworICAgIHN0YXRpY19jYXN0
PEhUTUxGb3JtRWxlbWVudCo+KGltcGwoKSktPnN1Ym1pdCgwLCBmYWxzZSwgIWFjdGl2ZUZyYW1l
LT5zY3JpcHQoKS0+YW55UGFnZUlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCksIHRydWUpOwogICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEFwcGxl
dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDUxOTcxKQorKysgV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTUgKzM1LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotaW5saW5lIEhUTUxBcHBsZXRFbGVt
ZW50OjpIVE1MQXBwbGV0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCogZG9jdW1lbnQpCi0gICAgOiBIVE1MUGx1Z0luRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVu
dCkKK2lubGluZSBIVE1MQXBwbGV0RWxlbWVudDo6SFRNTEFwcGxldEVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGNyZWF0ZWRCeVBh
cnNlcikKKyAgICA6IEhUTUxQbHVnSW5FbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBjcmVhdGVk
QnlQYXJzZXIpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoYXBwbGV0VGFnKSk7CiB9CiAKLVBh
c3NSZWZQdHI8SFRNTEFwcGxldEVsZW1lbnQ+IEhUTUxBcHBsZXRFbGVtZW50OjpjcmVhdGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorUGFzc1JlZlB0
cjxIVE1MQXBwbGV0RWxlbWVudD4gSFRNTEFwcGxldEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgY3JlYXRlZEJ5UGFy
c2VyKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTEFwcGxldEVsZW1lbnQodGFnTmFt
ZSwgZG9jdW1lbnQpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxBcHBsZXRFbGVtZW50
KHRhZ05hbWUsIGRvY3VtZW50LCBjcmVhdGVkQnlQYXJzZXIpKTsKIH0KIAogdm9pZCBIVE1MQXBw
bGV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQpJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmgJKHJldmlzaW9uIDUxOTcxKQorKysgV2ViQ29y
ZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MQXBwbGV0RWxlbWVudCA6IHB1Ymxp
YyBIVE1MUGx1Z0luRWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SFRN
TEFwcGxldEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MQXBwbGV0RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKIAogICAgIFN0
cmluZyBoc3BhY2UoKSBjb25zdDsKICAgICB2b2lkIHNldEhzcGFjZShjb25zdCBTdHJpbmcmKTsK
QEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VnNwYWNlKGNvbnN0IFN0cmlu
ZyYpOwogCiBwcml2YXRlOgotICAgIEhUTUxBcHBsZXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCopOworICAgIEhUTUxBcHBsZXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKIAogICAgIHZpcnR1YWwgaW50
IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQogCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTEVtYmVkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxFbWJl
ZEVsZW1lbnQuY3BwCShyZXZpc2lvbiA1MTk3MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRW1iZWRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTYgKzQyLDE2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotaW5saW5lIEhUTUxFbWJl
ZEVsZW1lbnQ6OkhUTUxFbWJlZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQqIGRvY3VtZW50KQotICAgIDogSFRNTFBsdWdJbkltYWdlRWxlbWVudCh0YWdOYW1l
LCBkb2N1bWVudCkKK2lubGluZSBIVE1MRW1iZWRFbGVtZW50OjpIVE1MRW1iZWRFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBjcmVh
dGVkQnlQYXJzZXIpCisgICAgOiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KHRhZ05hbWUsIGRvY3Vt
ZW50LCBjcmVhdGVkQnlQYXJzZXIpCiAgICAgLCBtX25lZWRXaWRnZXRVcGRhdGUoZmFsc2UpCiB7
CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoZW1iZWRUYWcpKTsKIH0KIAotUGFzc1JlZlB0cjxIVE1M
RW1iZWRFbGVtZW50PiBIVE1MRW1iZWRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorUGFzc1JlZlB0cjxIVE1MRW1iZWRFbGVt
ZW50PiBIVE1MRW1iZWRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEhUTUxFbWJlZEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxFbWJlZEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQs
IGNyZWF0ZWRCeVBhcnNlcikpOwogfQogCiBzdGF0aWMgaW5saW5lIFJlbmRlcldpZGdldCogZmlu
ZFdpZGdldFJlbmRlcmVyKGNvbnN0IE5vZGUqIG4pIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxF
bWJlZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVu
dC5oCShyZXZpc2lvbiA1MTk3MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEhUTUxFbWJlZEVsZW1lbnQgOiBwdWJsaWMgSFRNTFBsdWdJbkltYWdlRWxlbWVudCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVtYmVkRWxlbWVudD4gY3JlYXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEhUTUxFbWJlZEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQq
LCBib29sIGNyZWF0ZWRCeVBhcnNlcik7CiAKICAgICB2b2lkIHNldE5lZWRXaWRnZXRVcGRhdGUo
Ym9vbCBuZWVkV2lkZ2V0VXBkYXRlKSB7IG1fbmVlZFdpZGdldFVwZGF0ZSA9IG5lZWRXaWRnZXRV
cGRhdGU7IH0KIAogcHJpdmF0ZToKLSAgICBIVE1MRW1iZWRFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCopOworICAgIEhUTUxFbWJlZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOwogCiAgICAgdmlydHVhbCBI
VE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVz
Rm9yYmlkZGVuOyB9CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVy
biAwOyB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gNTE5NzEpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI5
LDcgKzMyOSw3IEBAIHN0YXRpYyB2b2lkIHRyYW5zZmVyTWFpbHRvUG9zdEZvcm1EYXRhVG8KICAg
ICB1cmwuc2V0UXVlcnkocXVlcnkpOwogfQogCi12b2lkIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0
KEV2ZW50KiBldmVudCwgYm9vbCBhY3RpdmF0ZVN1Ym1pdEJ1dHRvbiwgYm9vbCBsb2NrSGlzdG9y
eSkKK3ZvaWQgSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoRXZlbnQqIGV2ZW50LCBib29sIGFjdGl2
YXRlU3VibWl0QnV0dG9uLCBib29sIGxvY2tIaXN0b3J5LCBib29sIHN1Ym1pdHRlZEJ5SmF2YXNj
cmlwdCkKIHsKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBkb2N1bWVudCgpLT52aWV3KCk7CiAgICAg
RnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKQEAgLTM5MCwxNCArMzkwLDE0IEBA
IHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoRXZlbnQqIGV2ZW4KICAgICAgICAgICAgICAg
ICBtX3VybCA9IHVybC5zdHJpbmcoKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZnJh
bWUtPmxvYWRlcigpLT5zdWJtaXRGb3JtKCJQT1NUIiwgbV91cmwsIGRhdGEucmVsZWFzZSgpLCBt
X3RhcmdldCwgbV9mb3JtRGF0YUJ1aWxkZXIuZW5jb2RpbmdUeXBlKCksIFN0cmluZygpLCBsb2Nr
SGlzdG9yeSwgZXZlbnQsIGZvcm1TdGF0ZS5yZWxlYXNlKCkpOworICAgICAgICAgICAgZnJhbWUt
PmxvYWRlcigpLT5zdWJtaXRGb3JtKCJQT1NUIiwgbV91cmwsIGRhdGEucmVsZWFzZSgpLCBtX3Rh
cmdldCwgbV9mb3JtRGF0YUJ1aWxkZXIuZW5jb2RpbmdUeXBlKCksIFN0cmluZygpLCBsb2NrSGlz
dG9yeSwgc3VibWl0dGVkQnlKYXZhc2NyaXB0LCBldmVudCwgZm9ybVN0YXRlLnJlbGVhc2UoKSk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYm91bmRhcnkgPSBt
X2Zvcm1EYXRhQnVpbGRlci5nZW5lcmF0ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKCk7Ci0gICAgICAg
ICAgICBmcmFtZS0+bG9hZGVyKCktPnN1Ym1pdEZvcm0oIlBPU1QiLCBtX3VybCwgY3JlYXRlRm9y
bURhdGEoYm91bmRhcnkuZGF0YSgpKSwgbV90YXJnZXQsIG1fZm9ybURhdGFCdWlsZGVyLmVuY29k
aW5nVHlwZSgpLCBib3VuZGFyeS5kYXRhKCksIGxvY2tIaXN0b3J5LCBldmVudCwgZm9ybVN0YXRl
LnJlbGVhc2UoKSk7CisgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnN1Ym1pdEZvcm0oIlBP
U1QiLCBtX3VybCwgY3JlYXRlRm9ybURhdGEoYm91bmRhcnkuZGF0YSgpKSwgbV90YXJnZXQsIG1f
Zm9ybURhdGFCdWlsZGVyLmVuY29kaW5nVHlwZSgpLCBib3VuZGFyeS5kYXRhKCksIGxvY2tIaXN0
b3J5LCBzdWJtaXR0ZWRCeUphdmFzY3JpcHQsIGV2ZW50LCBmb3JtU3RhdGUucmVsZWFzZSgpKTsK
ICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fZm9ybURhdGFCdWlsZGVyLnNldElz
TXVsdGlQYXJ0Rm9ybShmYWxzZSk7Ci0gICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c3VibWl0Rm9y
bSgiR0VUIiwgbV91cmwsIGNyZWF0ZUZvcm1EYXRhKENTdHJpbmcoKSksIG1fdGFyZ2V0LCBTdHJp
bmcoKSwgU3RyaW5nKCksIGxvY2tIaXN0b3J5LCBldmVudCwgZm9ybVN0YXRlLnJlbGVhc2UoKSk7
CisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c3VibWl0Rm9ybSgiR0VUIiwgbV91cmwsIGNyZWF0
ZUZvcm1EYXRhKENTdHJpbmcoKSksIG1fdGFyZ2V0LCBTdHJpbmcoKSwgU3RyaW5nKCksIGxvY2tI
aXN0b3J5LCBzdWJtaXR0ZWRCeUphdmFzY3JpcHQsIGV2ZW50LCBmb3JtU3RhdGUucmVsZWFzZSgp
KTsKICAgICB9CiAKICAgICBpZiAobmVlZEJ1dHRvbkFjdGl2YXRpb24gJiYgZmlyc3RTdWNjZXNz
ZnVsU3VibWl0QnV0dG9uKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAkocmV2aXNpb24gNTE5
NzEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlSW1nRWxlbWVudChIVE1MSW1h
Z2VFbGVtZW50Kik7CiAKICAgICBib29sIHByZXBhcmVTdWJtaXQoRXZlbnQqKTsKLSAgICB2b2lk
IHN1Ym1pdChFdmVudCogPSAwLCBib29sIGFjdGl2YXRlU3VibWl0QnV0dG9uID0gZmFsc2UsIGJv
b2wgbG9ja0hpc3RvcnkgPSBmYWxzZSk7CisgICAgdm9pZCBzdWJtaXQoRXZlbnQqID0gMCwgYm9v
bCBhY3RpdmF0ZVN1Ym1pdEJ1dHRvbiA9IGZhbHNlLCBib29sIGxvY2tIaXN0b3J5ID0gZmFsc2Us
IGJvb2wgc3VibWl0dGVkQnlKYXZhc2NyaXB0ID0gZmFsc2UpOwogICAgIHZvaWQgcmVzZXQoKTsK
IAogICAgIC8vIFVzZWQgdG8gaW5kaWNhdGUgYSBtYWxmb3JtZWQgc3RhdGUgdG8ga2VlcCBmcm9t
IGFwcGx5aW5nIHRoZSBib3R0b20gbWFyZ2luIG9mIHRoZSBmb3JtLgpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxGcmFtZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
RnJhbWVFbGVtZW50LmNwcAkocmV2aXNpb24gNTE5NzEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZy
YW1lRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDggQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1pbmxpbmUgSFRNTEZy
YW1lRWxlbWVudDo6SFRNTEZyYW1lRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCogZG9jdW1lbnQpCi0gICAgOiBIVE1MRnJhbWVFbGVtZW50QmFzZSh0YWdOYW1l
LCBkb2N1bWVudCkKK2lubGluZSBIVE1MRnJhbWVFbGVtZW50OjpIVE1MRnJhbWVFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBjcmVh
dGVkQnlQYXJzZXIpCisgICAgOiBIVE1MRnJhbWVFbGVtZW50QmFzZSh0YWdOYW1lLCBkb2N1bWVu
dCwgY3JlYXRlZEJ5UGFyc2VyKQogICAgICwgbV9mcmFtZUJvcmRlcih0cnVlKQogICAgICwgbV9m
cmFtZUJvcmRlclNldChmYWxzZSkKICAgICAsIG1fbm9SZXNpemUoZmFsc2UpCkBAIC00Myw5ICs0
Myw5IEBAIGlubGluZSBIVE1MRnJhbWVFbGVtZW50OjpIVE1MRnJhbWVFbGVtZW4KICAgICBBU1NF
UlQoaGFzVGFnTmFtZShmcmFtZVRhZykpOwogfQogCi1QYXNzUmVmUHRyPEhUTUxGcmFtZUVsZW1l
bnQ+IEhUTUxGcmFtZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCogZG9jdW1lbnQpCitQYXNzUmVmUHRyPEhUTUxGcmFtZUVsZW1lbnQ+IEhUTUxG
cmFtZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCogZG9jdW1lbnQsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQogewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSFRNTEZyYW1lRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSFRNTEZyYW1lRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgY3JlYXRlZEJ5
UGFyc2VyKSk7CiB9CiAKIGJvb2wgSFRNTEZyYW1lRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChS
ZW5kZXJTdHlsZSopCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50LmgJKHJldmlzaW9uIDUxOTcx
KQorKysgV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxGcmFtZUVsZW1l
bnQgOiBwdWJsaWMgSFRNTEZyYW1lRWxlbWVudEJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEhUTUxGcmFtZUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRnJhbWVFbGVtZW50PiBjcmVh
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIp
OwogCiAgICAgYm9vbCBoYXNGcmFtZUJvcmRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVCb3Jk
ZXI7IH0KIApAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXROb1Jlc2l6ZShi
b29sKTsKIAogcHJpdmF0ZToKLSAgICBIVE1MRnJhbWVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCopOworICAgIEhUTUxGcmFtZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOwogCiAgICAgdmlydHVhbCBIVE1M
VGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9y
YmlkZGVuOyB9CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAw
OyB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAJKHJldmlzaW9uIDUx
OTcxKQorKysgV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDUsOCArNDUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxGcmFtZUVsZW1lbnRCYXNlOjpIVE1MRnJhbWVFbGVtZW50
QmFzZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCi0g
ICAgOiBIVE1MRnJhbWVPd25lckVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCitIVE1MRnJhbWVF
bGVtZW50QmFzZTo6SFRNTEZyYW1lRWxlbWVudEJhc2UoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKKyAgICA6IEhU
TUxGcmFtZU93bmVyRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgY3JlYXRlZEJ5UGFyc2VyKQog
ICAgICwgbV9zY3JvbGxpbmcoU2Nyb2xsYmFyQXV0bykKICAgICAsIG1fbWFyZ2luV2lkdGgoLTEp
CiAgICAgLCBtX21hcmdpbkhlaWdodCgtMSkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVF
bGVtZW50QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50
QmFzZS5oCShyZXZpc2lvbiA1MTk3MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50
QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICBpbnQg
aGVpZ2h0KCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICBIVE1MRnJhbWVFbGVtZW50QmFzZShj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICBIVE1MRnJhbWVFbGVtZW50QmFz
ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7
CiAKICAgICBib29sIGlzVVJMQWxsb3dlZCgpIGNvbnN0OwogCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TEZyYW1lT3duZXJFbGVtZW50LmNwcAkocmV2aXNpb24gNTE5NzEpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDEx
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSFRNTEZyYW1lT3duZXJFbGVtZW50OjpIVE1M
RnJhbWVPd25lckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQq
IGRvY3VtZW50KQorSFRNTEZyYW1lT3duZXJFbGVtZW50OjpIVE1MRnJhbWVPd25lckVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGNy
ZWF0ZWRCeVBhcnNlcikKICAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBDcmVh
dGVFbGVtZW50KQogICAgICwgbV9jb250ZW50RnJhbWUoMCkKICAgICAsIG1fc2FuZGJveEZsYWdz
KFNhbmRib3hOb25lKQorICAgICwgbV9jcmVhdGVkQnlQYXJzZXIoY3JlYXRlZEJ5UGFyc2VyKQog
ewogfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oCShyZXZpc2lvbiA1
MTk3MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDksOCArNDksMTAgQEAgcHVibGljOgogCiAgICAgU2FuZGJveEZsYWdzIHNhbmRi
b3hGbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fc2FuZGJveEZsYWdzOyB9CiAgICAgCisgICAgYm9v
bCBjcmVhdGVkQnlQYXJzZXIoKSBjb25zdCB7IHJldHVybiBtX2NyZWF0ZWRCeVBhcnNlcjsgfQor
ICAgIAogcHJvdGVjdGVkOgotICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOworICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFy
c2VyKTsKIAogICAgIHZvaWQgc2V0U2FuZGJveEZsYWdzKFNhbmRib3hGbGFncyk7CiAgICAgCkBA
IC02NCw2ICs2Niw3IEBAIHByaXZhdGU6CiAKICAgICBGcmFtZSogbV9jb250ZW50RnJhbWU7CiAg
ICAgU2FuZGJveEZsYWdzIG1fc2FuZGJveEZsYWdzOworICAgIGJvb2wgbV9jcmVhdGVkQnlQYXJz
ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TElGcmFtZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSUZyYW1l
RWxlbWVudC5jcHAJKHJldmlzaW9uIDUxOTcxKQorKysgV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTUgKzM2LDE1IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotaW5saW5lIEhUTUxJRnJh
bWVFbGVtZW50OjpIVE1MSUZyYW1lRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCogZG9jdW1lbnQpCi0gICAgOiBIVE1MRnJhbWVFbGVtZW50QmFzZSh0YWdOYW1l
LCBkb2N1bWVudCkKK2lubGluZSBIVE1MSUZyYW1lRWxlbWVudDo6SFRNTElGcmFtZUVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGNy
ZWF0ZWRCeVBhcnNlcikKKyAgICA6IEhUTUxGcmFtZUVsZW1lbnRCYXNlKHRhZ05hbWUsIGRvY3Vt
ZW50LCBjcmVhdGVkQnlQYXJzZXIpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoaWZyYW1lVGFn
KSk7CiB9CiAKLVBhc3NSZWZQdHI8SFRNTElGcmFtZUVsZW1lbnQ+IEhUTUxJRnJhbWVFbGVtZW50
OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50
KQorUGFzc1JlZlB0cjxIVE1MSUZyYW1lRWxlbWVudD4gSFRNTElGcmFtZUVsZW1lbnQ6OmNyZWF0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wg
Y3JlYXRlZEJ5UGFyc2VyKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTElGcmFtZUVs
ZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxJ
RnJhbWVFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBjcmVhdGVkQnlQYXJzZXIpKTsKIH0KIAog
Ym9vbCBIVE1MSUZyYW1lRWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MSUZyYW1lRWxlbWVudC5oCShyZXZpc2lvbiA1MTk3MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1M
SUZyYW1lRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMCArMzAsMTAgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MSUZyYW1lRWxlbWVudCA6IHB1YmxpYyBIVE1MRnJh
bWVFbGVtZW50QmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTElGcmFt
ZUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxIVE1MSUZyYW1lRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKIAogcHJpdmF0ZToKLSAg
ICBIVE1MSUZyYW1lRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAg
ICBIVE1MSUZyYW1lRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBib29s
IGNyZWF0ZWRCeVBhcnNlcik7CiAKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVx
dWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQogICAgIHZpcnR1
YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TE9iamVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA1MTk3MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1M
T2JqZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogaW5saW5lIEhUTUxP
YmplY3RFbGVtZW50OjpIVE1MT2JqZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKSAKLSAgICA6IEhU
TUxQbHVnSW5JbWFnZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCisgICAgOiBIVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBjcmVhdGVkQnlQYXJzZXIpCiAgICAgLCBt
X2RvY05hbWVkSXRlbSh0cnVlKQogICAgICwgbV9uZWVkV2lkZ2V0VXBkYXRlKCFjcmVhdGVkQnlQ
YXJzZXIpCiAgICAgLCBtX3VzZUZhbGxiYWNrQ29udGVudChmYWxzZSkKSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxQbHVnSW5FbGVtZW50LmNwcAkocmV2aXNpb24gNTE5NzEpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TFBsdWdJbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTFBsdWdJ
bkVsZW1lbnQ6OkhUTUxQbHVnSW5FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50KiBkb2MpCi0gICAgLy8gRklYTUU6IEFsd2F5cyBwYXNzaW5nIGZhbHNlIGFzIGNy
ZWF0ZWRCeVBhcnNlciBpcyBvZGQgKHNlZSBidWcyMjg1MSkuCi0gICAgOiBIVE1MRnJhbWVPd25l
ckVsZW1lbnQodGFnTmFtZSwgZG9jKQorSFRNTFBsdWdJbkVsZW1lbnQ6OkhUTUxQbHVnSW5FbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MsIGJvb2wgY3Jl
YXRlZEJ5UGFyc2VyKQorICAgIDogSFRNTEZyYW1lT3duZXJFbGVtZW50KHRhZ05hbWUsIGRvYywg
Y3JlYXRlZEJ5UGFyc2VyKQogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgICwg
bV9OUE9iamVjdCgwKQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaAkocmV2
aXNpb24gNTE5NzEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJvdGVjdGVkOgot
ICAgIEhUTUxQbHVnSW5FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50Kik7CisgICAgSFRNTFBsdWdJbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7CiAKICAgICB2aXJ0dWFsIHZvaWQg
ZGV0YWNoKCk7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDUxOTcxKQorKysgV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6SFRNTFBsdWdJbkltYWdlRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCi0gICAgOiBIVE1M
UGx1Z0luRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKK0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6
OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQqIGRvY3VtZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKKyAgICA6IEhUTUxQbHVnSW5F
bGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBjcmVhdGVkQnlQYXJzZXIpCiB7CiB9CiAKSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaAkocmV2aXNpb24gNTE5NzEpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIHVybCgpIGNvbnN0IHsgcmV0
dXJuIG1fdXJsOyB9CiAKIHByb3RlY3RlZDoKLSAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kik7CisgICAgSFRNTFBsdWdJbklt
YWdlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCosIGJvb2wg
Y3JlYXRlZEJ5UGFyc2VyKTsKIAogICAgIGJvb2wgaXNJbWFnZVR5cGUoKTsKIApJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxUYWdOYW1lcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TFRhZ05hbWVzLmluCShyZXZpc2lvbiA1MTk3MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFnTmFt
ZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTYsNyArNiw3IEBAIGEgaW50ZXJmYWNlTmFtZT1IVE1M
QW5jaG9yRWxlbWVudAogYWJiciBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CiBhY3JvbnltIGlu
dGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKIGFkZHJlc3MgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVu
dAotYXBwbGV0CithcHBsZXQgY29uc3RydWN0b3JOZWVkc0NyZWF0ZWRCeVBhcnNlcgogYXJlYQog
YXVkaW8gd3JhcHBlck9ubHlJZk1lZGlhSXNBdmFpbGFibGUsIGNvbmRpdGlvbmFsPVZJREVPLCBj
cmVhdGVXaXRoTmV3CiBiIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKQEAgLTM4LDExICszOCwx
MSBAQCBkaXYgY3JlYXRlV2l0aE5ldwogZGwgaW50ZXJmYWNlTmFtZT1IVE1MRExpc3RFbGVtZW50
LCBjcmVhdGVXaXRoTmV3LCBjcmVhdGVXaXRoTmV3CiBkdCBpbnRlcmZhY2VOYW1lPUhUTUxFbGVt
ZW50CiBlbSBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50Ci1lbWJlZAorZW1iZWQgY29uc3RydWN0
b3JOZWVkc0NyZWF0ZWRCeVBhcnNlcgogZmllbGRzZXQgaW50ZXJmYWNlTmFtZT1IVE1MRmllbGRT
ZXRFbGVtZW50LCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKIGZv
bnQgY3JlYXRlV2l0aE5ldwogZm9ybSBjcmVhdGVXaXRoTmV3Ci1mcmFtZQorZnJhbWUgY29uc3Ry
dWN0b3JOZWVkc0NyZWF0ZWRCeVBhcnNlcgogZnJhbWVzZXQgaW50ZXJmYWNlTmFtZT1IVE1MRnJh
bWVTZXRFbGVtZW50LCBjcmVhdGVXaXRoTmV3CiBoMSBpbnRlcmZhY2VOYW1lPUhUTUxIZWFkaW5n
RWxlbWVudCwgY3JlYXRlV2l0aE5ldwogaDIgaW50ZXJmYWNlTmFtZT1IVE1MSGVhZGluZ0VsZW1l
bnQsIGNyZWF0ZVdpdGhOZXcKQEAgLTU0LDcgKzU0LDcgQEAgaGVhZCBjcmVhdGVXaXRoTmV3CiBo
ciBpbnRlcmZhY2VOYW1lPUhUTUxIUkVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKIGh0bWwgY3JlYXRl
V2l0aE5ldwogaSBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50Ci1pZnJhbWUgaW50ZXJmYWNlTmFt
ZT1IVE1MSUZyYW1lRWxlbWVudAoraWZyYW1lIGludGVyZmFjZU5hbWU9SFRNTElGcmFtZUVsZW1l
bnQsIGNvbnN0cnVjdG9yTmVlZHNDcmVhdGVkQnlQYXJzZXIKIGltYWdlIG1hcFRvVGFnTmFtZT1p
bWcsIGNyZWF0ZVdpdGhOZXcKIGltZyBpbnRlcmZhY2VOYW1lPUhUTUxJbWFnZUVsZW1lbnQsIGNv
bnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudCwgY3JlYXRlV2l0aE5ldwogaW5wdXQgY29uc3RydWN0
b3JOZWVkc0Zvcm1FbGVtZW50LCBjcmVhdGVXaXRoTmV3CkluZGV4OiBXZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCShyZXZpc2lvbiA1MTk3MSkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDI3LDcgKzQyNyw3IEBAIEZyYW1lKiBGcmFtZUxvYWRlcjo6bG9h
ZFN1YmZyYW1lKEhUTUxGcmEKIAogdm9pZCBGcmFtZUxvYWRlcjo6c3VibWl0Rm9ybShjb25zdCBj
aGFyKiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdXJsLCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBmb3Jt
RGF0YSwKICAgICBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlw
ZSwgY29uc3QgU3RyaW5nJiBib3VuZGFyeSwKLSAgICBib29sIGxvY2tIaXN0b3J5LCBQYXNzUmVm
UHRyPEV2ZW50PiBldmVudCwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSkKKyAgICBi
b29sIGxvY2tIaXN0b3J5LCBib29sIHN1Ym1pdHRlZEJ5SmF2YXNjcmlwdCwgUGFzc1JlZlB0cjxF
dmVudD4gZXZlbnQsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGUpCiB7CiAgICAgQVNT
RVJUKGFjdGlvbik7CiAgICAgQVNTRVJUKHN0cmNtcChhY3Rpb24sICJHRVQiKSA9PSAwIHx8IHN0
cmNtcChhY3Rpb24sICJQT1NUIikgPT0gMCk7CkBAIC01MDIsNyArNTAyLDcgQEAgdm9pZCBGcmFt
ZUxvYWRlcjo6c3VibWl0Rm9ybShjb25zdCBjaGFyKgogICAgIGZyYW1lUmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKS5zZXRVUkwodSk7CiAgICAgYWRkSFRUUE9yaWdpbklmTmVlZGVkKGZyYW1lUmVx
dWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgb3V0Z29pbmdPcmlnaW4oKSk7CiAKLSAgICB0YXJnZXRG
cmFtZS0+cmVkaXJlY3RTY2hlZHVsZXIoKS0+c2NoZWR1bGVGb3JtU3VibWlzc2lvbihmcmFtZVJl
cXVlc3QsIGxvY2tIaXN0b3J5LCBldmVudCwgZm9ybVN0YXRlKTsKKyAgICB0YXJnZXRGcmFtZS0+
cmVkaXJlY3RTY2hlZHVsZXIoKS0+c2NoZWR1bGVGb3JtU3VibWlzc2lvbihmcmFtZVJlcXVlc3Qs
IGxvY2tIaXN0b3J5LCBzdWJtaXR0ZWRCeUphdmFzY3JpcHQsIGV2ZW50LCBmb3JtU3RhdGUpOwog
fQogCiB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wTG9hZGluZyhVbmxvYWRFdmVudFBvbGljeSB1bmxv
YWRFdmVudFBvbGljeSwgRGF0YWJhc2VQb2xpY3kgZGF0YWJhc2VQb2xpY3kpCkluZGV4OiBXZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmgJKHJldmlzaW9uIDUxOTcxKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDcgKzIxNSw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgc3VibWl0Rm9ybShjb25zdCBjaGFyKiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdXJsLAogICAg
ICAgICBQYXNzUmVmUHRyPEZvcm1EYXRhPiwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0
cmluZyYgY29udGVudFR5cGUsIGNvbnN0IFN0cmluZyYgYm91bmRhcnksCi0gICAgICAgIGJvb2wg
bG9ja0hpc3RvcnksIFBhc3NSZWZQdHI8RXZlbnQ+LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pOwor
ICAgICAgICBib29sIGxvY2tIaXN0b3J5LCBib29sIHN1Ym1pdHRlZEJ5SmF2YXNjcmlwdCwgUGFz
c1JlZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPik7CiAKICAgICB2b2lkIHN0b3Ao
KTsKICAgICB2b2lkIHN0b3BMb2FkaW5nKFVubG9hZEV2ZW50UG9saWN5LCBEYXRhYmFzZVBvbGlj
eSA9IERhdGFiYXNlUG9saWN5U3RvcCk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9SZWRpcmVjdFNj
aGVkdWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVkaXJlY3RTY2hlZHVs
ZXIuY3BwCShyZXZpc2lvbiA1MTk3MSkKKysrIFdlYkNvcmUvbG9hZGVyL1JlZGlyZWN0U2NoZWR1
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkZyYW1l
TG9hZFJlcXVlc3QuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkhUTUxG
b3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgogI2luY2x1
ZGUgIlBhZ2UuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIApAQCAtMjA2LDcgKzIw
Nyw3IEBAIHZvaWQgUmVkaXJlY3RTY2hlZHVsZXI6OnNjaGVkdWxlTG9jYXRpb24KIH0KIAogdm9p
ZCBSZWRpcmVjdFNjaGVkdWxlcjo6c2NoZWR1bGVGb3JtU3VibWlzc2lvbihjb25zdCBGcmFtZUxv
YWRSZXF1ZXN0JiBmcmFtZVJlcXVlc3QsCi0gICAgYm9vbCBsb2NrSGlzdG9yeSwgUGFzc1JlZlB0
cjxFdmVudD4gZXZlbnQsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGUpCisgICAgYm9v
bCBsb2NrSGlzdG9yeSwgYm9vbCBzdWJtaXR0ZWRCeUphdmFzY3JpcHQsIFBhc3NSZWZQdHI8RXZl
bnQ+IGV2ZW50LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gZm9ybVN0YXRlKQogewogICAgIEFTU0VS
VChtX2ZyYW1lLT5wYWdlKCkpOwogICAgIEFTU0VSVCghZnJhbWVSZXF1ZXN0LmlzRW1wdHkoKSk7
CkBAIC0yMTgsNyArMjE5LDEzIEBAIHZvaWQgUmVkaXJlY3RTY2hlZHVsZXI6OnNjaGVkdWxlRm9y
bVN1Ym0KICAgICAvLyBUaGlzIG1heSBoYXBwZW4gd2hlbiBhIGZyYW1lIGNoYW5nZXMgdGhlIGxv
Y2F0aW9uIG9mIGFub3RoZXIgZnJhbWUuCiAgICAgYm9vbCBkdXJpbmdMb2FkID0gIW1fZnJhbWUt
PmxvYWRlcigpLT5jb21taXR0ZWRGaXJzdFJlYWxEb2N1bWVudExvYWQoKTsKIAotICAgIHNjaGVk
dWxlKG5ldyBTY2hlZHVsZWRSZWRpcmVjdGlvbihmcmFtZVJlcXVlc3QsIGxvY2tIaXN0b3J5LCBt
dXN0TG9ja0JhY2tGb3J3YXJkTGlzdChtX2ZyYW1lKSwgZXZlbnQsIGZvcm1TdGF0ZSwgZHVyaW5n
TG9hZCkpOworICAgIC8vIElmIHRoZSBmcmFtZSB3YXMgY3JlYXRlZCBieSBhIHNjcmlwdCBhbmQg
dGhlIGZvcm0gc3VibWlzc2lvbiB3YXMgdHJpZ2dlcmVkIGJ5IGEgc2NyaXB0LCAKKyAgICAvLyBs
b2NrIHRoZSBiYWNrL2ZvcndhcmQgbGlzdC4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzgzIGZvciB0aGUgb3JpZ2luYWwgbW90aXZhdGlvbiBm
b3IgdGhpcy4KKworICAgIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCA9IG11c3RMb2NrQmFja0Zv
cndhcmRMaXN0KG1fZnJhbWUpIHx8IChtX2ZyYW1lLT5vd25lckVsZW1lbnQoKSAmJiAhbV9mcmFt
ZS0+b3duZXJFbGVtZW50KCktPmNyZWF0ZWRCeVBhcnNlcigpICYmIHN1Ym1pdHRlZEJ5SmF2YXNj
cmlwdCk7CisKKyAgICBzY2hlZHVsZShuZXcgU2NoZWR1bGVkUmVkaXJlY3Rpb24oZnJhbWVSZXF1
ZXN0LCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCwgZXZlbnQsIGZvcm1TdGF0ZSwg
ZHVyaW5nTG9hZCkpOwogfQogCiB2b2lkIFJlZGlyZWN0U2NoZWR1bGVyOjpzY2hlZHVsZVJlZnJl
c2goYm9vbCB3YXNVc2VyR2VzdHVyZSkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1JlZGlyZWN0U2No
ZWR1bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVkaXJlY3RTY2hlZHVsZXIu
aAkocmV2aXNpb24gNTE5NzEpCisrKyBXZWJDb3JlL2xvYWRlci9SZWRpcmVjdFNjaGVkdWxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2No
ZWR1bGVSZWRpcmVjdChkb3VibGUgZGVsYXksIGNvbnN0IFN0cmluZyYgdXJsKTsKICAgICB2b2lk
IHNjaGVkdWxlTG9jYXRpb25DaGFuZ2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYg
cmVmZXJyZXIsIGJvb2wgbG9ja0hpc3RvcnkgPSB0cnVlLCBib29sIGxvY2tCYWNrRm9yd2FyZExp
c3QgPSB0cnVlLCBib29sIHVzZXJHZXN0dXJlID0gZmFsc2UpOwotICAgIHZvaWQgc2NoZWR1bGVG
b3JtU3VibWlzc2lvbihjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgYm9vbCBsb2NrSGlzdG9yeSwg
UGFzc1JlZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPik7CisgICAgdm9pZCBzY2hl
ZHVsZUZvcm1TdWJtaXNzaW9uKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBib29sIGxvY2tIaXN0
b3J5LCBib29sIHN1Ym1pdHRlZEJ5SmF2YXNjcmlwdCwgUGFzc1JlZlB0cjxFdmVudD4sIFBhc3NS
ZWZQdHI8Rm9ybVN0YXRlPik7CiAgICAgdm9pZCBzY2hlZHVsZVJlZnJlc2goYm9vbCB1c2VyR2Vz
dHVyZSA9IGZhbHNlKTsKICAgICB2b2lkIHNjaGVkdWxlSGlzdG9yeU5hdmlnYXRpb24oaW50IHN0
ZXBzKTsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTE5NzgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAwOS0xMi0xMCAgQnJhZHkgRWlk
c29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzczNDI3MjU+IGFuZCBodHRwczovL3dl
YmtpdC5vcmcvYi8zMjM4MworICAgICAgICBTZWxlY3RpbmcgYXJ0aWNsZSB0ZXh0IGF0IHNmZ2F0
ZS5jb20gcmVzdWx0cyBpbiBzcHVyaW91cyBiYWNrL2ZvcndhcmQgZW50cmllcworCisgICAgICAg
ICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2R5bmFtaWMtaWZyYW1lLWR5bmFtaWMtZm9ybS1iYWNr
LWVudHJ5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0
aW9uL2R5bmFtaWMtaWZyYW1lLWR5bmFtaWMtZm9ybS1iYWNrLWVudHJ5Lmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9wYXJzZWQtaWZyYW1lLWR5bmFtaWMtZm9y
bS1iYWNrLWVudHJ5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9u
YXZpZ2F0aW9uL3BhcnNlZC1pZnJhbWUtZHluYW1pYy1mb3JtLWJhY2stZW50cnkuaHRtbDogQWRk
ZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy9ub3RpZnktZG9u
ZS5odG1sOiBBZGRlZC4KKworICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9vbmxvYWQt
bmF2aWdhdGlvbi1pZnJhbWUtdGltZW91dC1leHBlY3RlZC50eHQ6IFVwZGF0ZWQgdG8gcmVwcmVz
ZW50IHRoZQorICAgICAgICAgIHByb2dyZXNzaW9uIG9mIG1hdGNoaW5nIElFIGFuZCBPcGVyYS4K
KwogMjAwOS0xMi0xMCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9u
YXZpZ2F0aW9uL2R5bmFtaWMtaWZyYW1lLWR5bmFtaWMtZm9ybS1iYWNrLWVudHJ5LWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vZHlu
YW1pYy1pZnJhbWUtZHluYW1pYy1mb3JtLWJhY2stZW50cnktZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2R5bmFtaWMtaWZyYW1l
LWR5bmFtaWMtZm9ybS1iYWNrLWVudHJ5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw3IEBACitUaGlzIHRlc3Qgc2VlcyBpZiBkeW5hbWljYWxseSBjcmVhdGluZyBhbiBpZnJh
bWUsIGR5bmFtaWNhbGx5IGFkZGluZyBmb3JtIGVsZW1lbnRzIHRvIGl0LCBhbmQgZHluYW1pY2Fs
bHkgc3VibWl0dGluZyB0aGUgZm9ybSByZXN1bHQgaW4gYW4gZXh0cmEgYmFjay9mb3J3YXJkIGVu
dHJ5LiBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGVzZSBzdGVwcyBydW4gYWZ0ZXIgdGhlIGluaXRp
YWwgbG9hZCBpcyBjb21wbGV0ZSwgaGVuY2UgdGhlIHNldFRpbWVvdXQoKSBmb3IgcnVubmluZyB0
aGUgdGVzdC4KKworCis9PT09PT09PT09PT09PSBCYWNrIEZvcndhcmQgTGlzdCA9PT09PT09PT09
PT09PQorY3Vyci0+ICBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9keW5hbWljLWlm
cmFtZS1keW5hbWljLWZvcm0tYmFjay1lbnRyeS5odG1sICAqKm5hdiB0YXJnZXQqKgorICAgICAg
ICAgICAgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL25vdGlmeS1k
b25lLmh0bWwgKGluIGZyYW1lICJ0ZXN0RnJhbWUiKQorPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2
aWdhdGlvbi9keW5hbWljLWlmcmFtZS1keW5hbWljLWZvcm0tYmFjay1lbnRyeS5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9keW5hbWljLWlmcmFt
ZS1keW5hbWljLWZvcm0tYmFjay1lbnRyeS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2R5bmFtaWMtaWZyYW1lLWR5bmFtaWMtZm9ybS1iYWNr
LWVudHJ5Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzUgQEAKKzxodG1sPgorPHNjcmlw
dD4KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QmFja0ZvcndhcmRMaXN0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICB2YXIgaWZyYW1lID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiaWZyYW1lIik7CisgICAgaWZyYW1lLnNldEF0dHJpYnV0ZSgibmFtZSIs
ICJ0ZXN0RnJhbWUiKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7CisK
KyAgICB2YXIgb3RoZXJEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50Owor
CisgICAgdmFyIGZvcm0gPSBvdGhlckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZvcm0iKTsKKyAg
ICBmb3JtLnNldEF0dHJpYnV0ZSgiYWN0aW9uIiwgInJlc291cmNlcy9ub3RpZnktZG9uZS5odG1s
Iik7CisgICAgZm9ybS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAiVGVzdEZvcm0iKTsKKyAgICBmb3Jt
LnNldEF0dHJpYnV0ZSgidGFyZ2V0IiwgInRlc3RGcmFtZSIpOworICAgIGZvcm0uc2V0QXR0cmli
dXRlKCJtZXRob2QiLCAicG9zdCIpOworICAgIHZhciBidXR0b24gPSBvdGhlckRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImlucHV0Iik7CisgICAgYnV0dG9uLnNldEF0dHJpYnV0ZSgidHlwZSIsICJz
dWJtaXQiKTsKKyAgICBmb3JtLmFwcGVuZENoaWxkKGJ1dHRvbik7CisgICAgb3RoZXJEb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKGZvcm0pOworCisgICAgZm9ybS5zdWJtaXQoKTsKK30KKworPC9z
Y3JpcHQ+Cis8Ym9keSBvbmxvYWQ9InNldFRpbWVvdXQoJ3J1blRlc3QoKTsnLCAwKTsiPgorVGhp
cyB0ZXN0IHNlZXMgaWYgZHluYW1pY2FsbHkgY3JlYXRpbmcgYW4gaWZyYW1lLCBkeW5hbWljYWxs
eSBhZGRpbmcgZm9ybSBlbGVtZW50cyB0byBpdCwgYW5kIGR5bmFtaWNhbGx5IHN1Ym1pdHRpbmcg
dGhlIGZvcm0gcmVzdWx0IGluIGFuIGV4dHJhIGJhY2svZm9yd2FyZCBlbnRyeS4gIEl0IGlzIGlt
cG9ydGFudCB0aGF0IHRoZXNlIHN0ZXBzIHJ1biBhZnRlciB0aGUgaW5pdGlhbCBsb2FkIGlzIGNv
bXBsZXRlLCBoZW5jZSB0aGUgc2V0VGltZW91dCgpIGZvciBydW5uaW5nIHRoZSB0ZXN0Ljxicj4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlv
bi9vbmxvYWQtbmF2aWdhdGlvbi1pZnJhbWUtdGltZW91dC1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL29ubG9hZC1uYXZpZ2F0aW9u
LWlmcmFtZS10aW1lb3V0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTE5NzEpCisrKyBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vb25sb2FkLW5hdmlnYXRpb24taWZyYW1lLXRpbWVv
dXQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yLDggKzIsNiBAQCBJbiB0aGlzIGNh
c2UsIFNhZmFyaSBhbmQgRmlyZWZveCBhZGRzIGEgCiAKIAogPT09PT09PT09PT09PT0gQmFjayBG
b3J3YXJkIExpc3QgPT09PT09PT09PT09PT0KLSAgICAgICAgaHR0cDovLzEyNy4wLjAuMTo4MDAw
L25hdmlnYXRpb24vb25sb2FkLW5hdmlnYXRpb24taWZyYW1lLXRpbWVvdXQuaHRtbCAgKipuYXYg
dGFyZ2V0KioKLSAgICAgICAgICAgIGFib3V0OmJsYW5rIChpbiBmcmFtZSAibXlGcmFtZSIpCi1j
dXJyLT4gIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL29ubG9hZC1uYXZpZ2F0aW9u
LWlmcmFtZS10aW1lb3V0Lmh0bWwKLSAgICAgICAgICAgIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9u
YXZpZ2F0aW9uL3Jlc291cmNlcy9ibGFuay50eHQ/IChpbiBmcmFtZSAibXlGcmFtZSIpICAqKm5h
diB0YXJnZXQqKgorY3Vyci0+ICBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9vbmxv
YWQtbmF2aWdhdGlvbi1pZnJhbWUtdGltZW91dC5odG1sICAqKm5hdiB0YXJnZXQqKgorICAgICAg
ICAgICAgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL2JsYW5rLnR4
dD8gKGluIGZyYW1lICJteUZyYW1lIikKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24v
cGFyc2VkLWlmcmFtZS1keW5hbWljLWZvcm0tYmFjay1lbnRyeS1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhcnNlZC1pZnJhbWUt
ZHluYW1pYy1mb3JtLWJhY2stZW50cnktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhcnNlZC1pZnJhbWUtZHluYW1pYy1mb3Jt
LWJhY2stZW50cnktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKK1Ro
aXMgdGVzdCBzZWVzIGlmIHN0YXJ0aW5nIHdpdGggYW4gZW1wdHkgaWZyYW1lIGluIHRoZSBtYXJr
dXAsIGR5bmFtaWNhbGx5IGFkZGluZyBmb3JtIGVsZW1lbnRzIHRvIGl0LCBhbmQgZHluYW1pY2Fs
bHkgc3VibWl0dGluZyB0aGUgZm9ybSByZXN1bHQgaW4gYW4gZXh0cmEgYmFjay9mb3J3YXJkIGVu
dHJ5LiBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGVzZSBzdGVwcyBydW4gYWZ0ZXIgdGhlIGluaXRp
YWwgbG9hZCBpcyBjb21wbGV0ZSwgaGVuY2UgdGhlIHNldFRpbWVvdXQoKSBmb3IgcnVubmluZyB0
aGUgdGVzdC4KKworCis9PT09PT09PT09PT09PSBCYWNrIEZvcndhcmQgTGlzdCA9PT09PT09PT09
PT09PQorICAgICAgICBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9wYXJzZWQtaWZy
YW1lLWR5bmFtaWMtZm9ybS1iYWNrLWVudHJ5Lmh0bWwgICoqbmF2IHRhcmdldCoqCisgICAgICAg
ICAgICBhYm91dDpibGFuayAoaW4gZnJhbWUgInRlc3RGcmFtZSIpCitjdXJyLT4gIGh0dHA6Ly8x
MjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3BhcnNlZC1pZnJhbWUtZHluYW1pYy1mb3JtLWJhY2st
ZW50cnkuaHRtbAorICAgICAgICAgICAgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24v
cmVzb3VyY2VzL25vdGlmeS1kb25lLmh0bWwgKGluIGZyYW1lICJ0ZXN0RnJhbWUiKSAgKipuYXYg
dGFyZ2V0KioKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcGFyc2VkLWlmcmFtZS1k
eW5hbWljLWZvcm0tYmFjay1lbnRyeS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvbmF2aWdhdGlvbi9wYXJzZWQtaWZyYW1lLWR5bmFtaWMtZm9ybS1iYWNrLWVudHJ5
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24v
cGFyc2VkLWlmcmFtZS1keW5hbWljLWZvcm0tYmFjay1lbnRyeS5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDM0IEBACis8aHRtbD4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7
CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEJhY2tGb3J3YXJkTGlzdCgpOworICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgp
Cit7CisgICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0RnJhbWUi
KTsKKworICAgIHZhciBvdGhlckRvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1l
bnQ7CisKKyAgICB2YXIgZm9ybSA9IG90aGVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZm9ybSIp
OworICAgIGZvcm0uc2V0QXR0cmlidXRlKCJhY3Rpb24iLCAicmVzb3VyY2VzL25vdGlmeS1kb25l
Lmh0bWwiKTsKKyAgICBmb3JtLnNldEF0dHJpYnV0ZSgibmFtZSIsICJUZXN0Rm9ybSIpOworICAg
IGZvcm0uc2V0QXR0cmlidXRlKCJ0YXJnZXQiLCAidGVzdEZyYW1lIik7CisgICAgZm9ybS5zZXRB
dHRyaWJ1dGUoIm1ldGhvZCIsICJwb3N0Iik7CisgICAgdmFyIGJ1dHRvbiA9IG90aGVyRG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKKyAgICBidXR0b24uc2V0QXR0cmlidXRlKCJ0eXBl
IiwgInN1Ym1pdCIpOworICAgIGZvcm0uYXBwZW5kQ2hpbGQoYnV0dG9uKTsKKyAgICBvdGhlckRv
Y3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZm9ybSk7CisKKyAgICBmb3JtLnN1Ym1pdCgpOworfQor
Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0ic2V0VGltZW91dCgncnVuVGVzdCgpOycsIDApOyI+
CitUaGlzIHRlc3Qgc2VlcyBpZiBzdGFydGluZyB3aXRoIGFuIGVtcHR5IGlmcmFtZSBpbiB0aGUg
bWFya3VwLCBkeW5hbWljYWxseSBhZGRpbmcgZm9ybSBlbGVtZW50cyB0byBpdCwgYW5kIGR5bmFt
aWNhbGx5IHN1Ym1pdHRpbmcgdGhlIGZvcm0gcmVzdWx0IGluIGFuIGV4dHJhIGJhY2svZm9yd2Fy
ZCBlbnRyeS4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoZXNlIHN0ZXBzIHJ1biBhZnRlciB0aGUg
aW5pdGlhbCBsb2FkIGlzIGNvbXBsZXRlLCBoZW5jZSB0aGUgc2V0VGltZW91dCgpIGZvciBydW5u
aW5nIHRoZSB0ZXN0Ljxicj4KKzxpZnJhbWUgaWQ9InRlc3RGcmFtZSIgbmFtZT0idGVzdEZyYW1l
Ij48L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVz
dHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvbm90aWZ5LWRvbmUuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL25vdGlmeS1kb25lLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVz
b3VyY2VzL25vdGlmeS1kb25lLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNiBAQAorPGh0
bWw+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cis8L3NjcmlwdD4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44715</attachid>
            <date>2009-12-11 15:45:53 -0800</date>
            <delta_ts>2009-12-11 16:20:55 -0800</delta_ts>
            <desc>Much simpler rule, much simpler patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>14854</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjAyMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMDktMTItMTEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS83MzQyNzI1PiBhbmQgaHR0cHM6Ly93ZWJraXQub3JnL2IvMzIzODMKKyAg
ICAgICAgU2VsZWN0aW5nIGFydGljbGUgdGV4dCBhdCBzZmdhdGUuY29tIHJlc3VsdHMgaW4gc3B1
cmlvdXMgYmFjay9mb3J3YXJkIGVudHJpZXMKKworICAgICAgICBJZiBhbiBpZnJhbWUgaGFkIGEg
Zm9ybSBhbmQgdGhhdCBmb3JtIGlzIHN1Ym1pdHRlZCBieSBqYXZhc2NyaXB0LCBJRSBhbmQgT3Bl
cmEgZG9uJ3QgYWRkIGJhY2svZm9yd2FyZCBlbnRyaWVzLgorICAgICAgICAKKyAgICAgICAgSW4g
dGhlIGNhc2Ugd2hlcmUgdGhlIGZyYW1lIHdhcyBhZGRlZCBkeW5hbWljYWxseSB2aWEgY3JlYXRl
RWxlbWVudCgpLCBGaXJlZm94IHdvdWxkIGxpa2UgdG8gYWRkIGEgYmFjayBlbnRyeQorICAgICAg
ICBidXQgaGFzIGEgYnVnIHRoYXQgcHJldmVudHMgdGhpcy4KKworICAgICAgICBUaGVyZWZvcmUg
YnkgYSBiaXphcnJlIGNvaW5jaWRlbmNlLCBXZWJLaXQgaXMgdGhlIGxvbmVyIGFuZCB0aGUgb25s
eSBlbmdpbmUgYWZmZWN0ZWQgYnkgc2ZnYXRlLmNvbSdzIHRlY2huaXF1ZS4KKworICAgICAgICBU
aGlzIHBhdGNoIGNoYW5nZXMgdXMgdG8gd2lsbGZ1bGx5IG1hdGNoIElFIGFuZCBPcGVyYSBhbmQg
Zml4ZXMgc2ZnYXRlLmNvbSBpbiB0aGUgcHJvY2Vzcy4KKworICAgICAgICBUZXN0czogaHR0cC90
ZXN0cy9uYXZpZ2F0aW9uL2R5bmFtaWMtaWZyYW1lLWR5bmFtaWMtZm9ybS1iYWNrLWVudHJ5Lmh0
bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9wYXJzZWQtaWZyYW1lLWR5
bmFtaWMtZm9ybS1iYWNrLWVudHJ5Lmh0bWwKKworICAgICAgICBDYXB0dXJlIHdoZXRoZXIgdGhl
IGZvcm0gd2FzIHN1Ym1pdHRlZCBieSBqYXZhc2NyaXB0OgorICAgICAgICAqIGxvYWRlci9Gb3Jt
U3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybVN0YXRlOjpGb3JtU3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9ybVN0YXRlOjpjcmVhdGUpOgorICAgICAgICAqIGxvYWRlci9Gb3Jt
U3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdGF0ZTo6c3VibWl0dGVkQnlKYXZhU2Ny
aXB0KToKKworICAgICAgICBXaGVuIGRlY2lkaW5nIHRoZSB2YWx1ZSBvZiB0aGUgbG9ja0JhY2tG
b3J3YXJkTGlzdCB2YXJpYWJsZSwgdGFrZSBzdWJtaXR0ZWRCeUphdmFTY3JpcHQoKSBpbnRvIGFj
Y291bnQ6CisgICAgICAgICogbG9hZGVyL1JlZGlyZWN0U2NoZWR1bGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlZGlyZWN0U2NoZWR1bGVyOjpzY2hlZHVsZUZvcm1TdWJtaXNzaW9uKTogCisK
KyAgICAgICAgUGFzcyB0aGUgc3VibWl0dGVkQnlKYXZhU2NyaXB0IGZsYWcgdXAgdGhlIGNoYWlu
IHRvIHdoZXJlIHRoZSBGb3JtU3RhdGUgb2JqZWN0IGlzIGNyZWF0ZWQ6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNIVE1MRm9ybUVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpzdWJtaXQpOgorICAg
ICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50Lmg6CisKIDIwMDktMTItMTEgIFNpbW9uIEZyYXNl
ciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4IGZvciBwbGF0
Zm9ybXMgd2hlcmUgQUNDRUxFUkFURURfQ09NUE9TSVRJTkcgaXMgbm90IGRlZmluZWQuCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcAko
cmV2aXNpb24gNTIwMTcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZvcm1FbGVtZW50
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBKU1ZhbHVlIEpTSFRN
TEZvcm1FbGVtZW50OjpzdWJtaXQoRXhlY1N0CiAgICAgRnJhbWUqIGFjdGl2ZUZyYW1lID0gYXNK
U0RPTVdpbmRvdyhleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCktPmZyYW1lKCk7
CiAgICAgaWYgKCFhY3RpdmVGcmFtZSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
ICAgc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oaW1wbCgpKS0+c3VibWl0KDAsIGZhbHNl
LCAhYWN0aXZlRnJhbWUtPnNjcmlwdCgpLT5hbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUo
KSk7CisgICAgc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oaW1wbCgpKS0+c3VibWl0KDAs
IGZhbHNlLCAhYWN0aXZlRnJhbWUtPnNjcmlwdCgpLT5hbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdl
c3R1cmUoKSwgdHJ1ZSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MRm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiA1MjAxNykKKysrIFdlYkNvcmUvaHRtbC9I
VE1MRm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjksNyArMzI5LDcgQEAgc3Rh
dGljIHZvaWQgdHJhbnNmZXJNYWlsdG9Qb3N0Rm9ybURhdGFUbwogICAgIHVybC5zZXRRdWVyeShx
dWVyeSk7CiB9CiAKLXZvaWQgSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoRXZlbnQqIGV2ZW50LCBi
b29sIGFjdGl2YXRlU3VibWl0QnV0dG9uLCBib29sIGxvY2tIaXN0b3J5KQordm9pZCBIVE1MRm9y
bUVsZW1lbnQ6OnN1Ym1pdChFdmVudCogZXZlbnQsIGJvb2wgYWN0aXZhdGVTdWJtaXRCdXR0b24s
IGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgc3VibWl0dGVkQnlKYXZhc2NyaXB0KQogewogICAgIEZy
YW1lVmlldyogdmlldyA9IGRvY3VtZW50KCktPnZpZXcoKTsKICAgICBGcmFtZSogZnJhbWUgPSBk
b2N1bWVudCgpLT5mcmFtZSgpOwpAQCAtMzY2LDcgKzM2Niw3IEBAIHZvaWQgSFRNTEZvcm1FbGVt
ZW50OjpzdWJtaXQoRXZlbnQqIGV2ZW4KICAgICAgICAgfQogICAgIH0KIAotICAgIFJlZlB0cjxG
b3JtU3RhdGU+IGZvcm1TdGF0ZSA9IEZvcm1TdGF0ZTo6Y3JlYXRlKHRoaXMsIGZvcm1WYWx1ZXMs
IGZyYW1lKTsKKyAgICBSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGUgPSBGb3JtU3RhdGU6OmNy
ZWF0ZSh0aGlzLCBmb3JtVmFsdWVzLCBmcmFtZSwgc3VibWl0dGVkQnlKYXZhc2NyaXB0KTsKIAog
ICAgIGlmIChuZWVkQnV0dG9uQWN0aXZhdGlvbiAmJiBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRCdXR0
b24pCiAgICAgICAgIGZpcnN0U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbi0+c2V0QWN0aXZhdGVkU3Vi
bWl0KHRydWUpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAkocmV2aXNpb24gNTIwMTcpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcg
Kzc4LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlSW1nRWxlbWVudChIVE1MSW1hZ2VFbGVt
ZW50Kik7CiAKICAgICBib29sIHByZXBhcmVTdWJtaXQoRXZlbnQqKTsKLSAgICB2b2lkIHN1Ym1p
dChFdmVudCogPSAwLCBib29sIGFjdGl2YXRlU3VibWl0QnV0dG9uID0gZmFsc2UsIGJvb2wgbG9j
a0hpc3RvcnkgPSBmYWxzZSk7CisgICAgdm9pZCBzdWJtaXQoRXZlbnQqID0gMCwgYm9vbCBhY3Rp
dmF0ZVN1Ym1pdEJ1dHRvbiA9IGZhbHNlLCBib29sIGxvY2tIaXN0b3J5ID0gZmFsc2UsIGJvb2wg
c3VibWl0dGVkQnlKYXZhc2NyaXB0ID0gZmFsc2UpOwogICAgIHZvaWQgcmVzZXQoKTsKIAogICAg
IC8vIFVzZWQgdG8gaW5kaWNhdGUgYSBtYWxmb3JtZWQgc3RhdGUgdG8ga2VlcCBmcm9tIGFwcGx5
aW5nIHRoZSBib3R0b20gbWFyZ2luIG9mIHRoZSBmb3JtLgpJbmRleDogV2ViQ29yZS9sb2FkZXIv
Rm9ybVN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Gb3JtU3RhdGUuY3Bw
CShyZXZpc2lvbiA1MjAxNykKKysrIFdlYkNvcmUvbG9hZGVyL0Zvcm1TdGF0ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDE2ICszNCwxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWlu
bGluZSBGb3JtU3RhdGU6OkZvcm1TdGF0ZShQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gZm9y
bSwgU3RyaW5nUGFpclZlY3RvciYgdGV4dEZpZWxkVmFsdWVzVG9BZG9wdCwgUGFzc1JlZlB0cjxG
cmFtZT4gc291cmNlRnJhbWUpCitpbmxpbmUgRm9ybVN0YXRlOjpGb3JtU3RhdGUoUGFzc1JlZlB0
cjxIVE1MRm9ybUVsZW1lbnQ+IGZvcm0sIFN0cmluZ1BhaXJWZWN0b3ImIHRleHRGaWVsZFZhbHVl
c1RvQWRvcHQsIFBhc3NSZWZQdHI8RnJhbWU+IHNvdXJjZUZyYW1lLCBib29sIHN1Ym1pdHRlZEJ5
SmF2YVNjcmlwdCkKICAgICA6IG1fZm9ybShmb3JtKQogICAgICwgbV9zb3VyY2VGcmFtZShzb3Vy
Y2VGcmFtZSkKKyAgICAsIG1fc3VibWl0dGVkQnlKYXZhU2NyaXB0KHN1Ym1pdHRlZEJ5SmF2YVNj
cmlwdCkKIHsKICAgICBtX3RleHRGaWVsZFZhbHVlcy5zd2FwKHRleHRGaWVsZFZhbHVlc1RvQWRv
cHQpOwogfQogCi1QYXNzUmVmUHRyPEZvcm1TdGF0ZT4gRm9ybVN0YXRlOjpjcmVhdGUoUGFzc1Jl
ZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGZvcm0sIFN0cmluZ1BhaXJWZWN0b3ImIHRleHRGaWVsZFZh
bHVlc1RvQWRvcHQsIFBhc3NSZWZQdHI8RnJhbWU+IHNvdXJjZUZyYW1lKQorUGFzc1JlZlB0cjxG
b3JtU3RhdGU+IEZvcm1TdGF0ZTo6Y3JlYXRlKFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBm
b3JtLCBTdHJpbmdQYWlyVmVjdG9yJiB0ZXh0RmllbGRWYWx1ZXNUb0Fkb3B0LCBQYXNzUmVmUHRy
PEZyYW1lPiBzb3VyY2VGcmFtZSwgYm9vbCBzdWJtaXR0ZWRCeUphdmFTY3JpcHQpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBGb3JtU3RhdGUoZm9ybSwgdGV4dEZpZWxkVmFsdWVzVG9BZG9w
dCwgc291cmNlRnJhbWUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZvcm1TdGF0ZShmb3Jt
LCB0ZXh0RmllbGRWYWx1ZXNUb0Fkb3B0LCBzb3VyY2VGcmFtZSwgc3VibWl0dGVkQnlKYXZhU2Ny
aXB0KSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0Zvcm1TdGF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0Zvcm1TdGF0ZS5oCShyZXZpc2lvbiA1MjAxNykKKysrIFdl
YkNvcmUvbG9hZGVyL0Zvcm1TdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxOCArNDAsMjAg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgRm9ybVN0YXRlIDogcHVibGljIFJl
ZkNvdW50ZWQ8Rm9ybVN0YXRlPiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxGb3JtU3RhdGU+IGNyZWF0ZShQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4sIFN0cmlu
Z1BhaXJWZWN0b3ImIHRleHRGaWVsZFZhbHVlc1RvQWRvcHQsIFBhc3NSZWZQdHI8RnJhbWU+KTsK
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBjcmVhdGUoUGFzc1JlZlB0cjxI
VE1MRm9ybUVsZW1lbnQ+LCBTdHJpbmdQYWlyVmVjdG9yJiB0ZXh0RmllbGRWYWx1ZXNUb0Fkb3B0
LCBQYXNzUmVmUHRyPEZyYW1lPiwgYm9vbCBzdWJtaXR0ZWRCeUphdmFTY3JpcHQpOwogCiAgICAg
ICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybS5nZXQoKTsg
fQogICAgICAgICBjb25zdCBTdHJpbmdQYWlyVmVjdG9yJiB0ZXh0RmllbGRWYWx1ZXMoKSBjb25z
dCB7IHJldHVybiBtX3RleHRGaWVsZFZhbHVlczsgfQogICAgICAgICBGcmFtZSogc291cmNlRnJh
bWUoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUZyYW1lLmdldCgpOyB9CisgICAgICAgIGJvb2wg
c3VibWl0dGVkQnlKYXZhU2NyaXB0KCkgY29uc3QgeyByZXR1cm4gbV9zdWJtaXR0ZWRCeUphdmFT
Y3JpcHQ7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEZvcm1TdGF0ZShQYXNzUmVmUHRyPEhU
TUxGb3JtRWxlbWVudD4sIFN0cmluZ1BhaXJWZWN0b3ImIHRleHRGaWVsZFZhbHVlc1RvQWRvcHQs
IFBhc3NSZWZQdHI8RnJhbWU+KTsKKyAgICAgICAgRm9ybVN0YXRlKFBhc3NSZWZQdHI8SFRNTEZv
cm1FbGVtZW50PiwgU3RyaW5nUGFpclZlY3RvciYgdGV4dEZpZWxkVmFsdWVzVG9BZG9wdCwgUGFz
c1JlZlB0cjxGcmFtZT4sIGJvb2wgc3VibWl0dGVkQnlKYXZhU2NyaXB0KTsKIAogICAgICAgICBS
ZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBtX2Zvcm07CiAgICAgICAgIFN0cmluZ1BhaXJWZWN0b3Ig
bV90ZXh0RmllbGRWYWx1ZXM7CiAgICAgICAgIFJlZlB0cjxGcmFtZT4gbV9zb3VyY2VGcmFtZTsK
KyAgICAgICAgYm9vbCBtX3N1Ym1pdHRlZEJ5SmF2YVNjcmlwdDsKICAgICB9OwogCiB9CkluZGV4
OiBXZWJDb3JlL2xvYWRlci9SZWRpcmVjdFNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvUmVkaXJlY3RTY2hlZHVsZXIuY3BwCShyZXZpc2lvbiA1MjAxNykKKysrIFdl
YkNvcmUvbG9hZGVyL1JlZGlyZWN0U2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzks
NiArMzksNyBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKICNpbmNsdWRlICJGcmFt
ZUxvYWRlci5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxG
cmFtZU93bmVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlIDx3dGYvQ3Vy
cmVudFRpbWUuaD4KIApAQCAtMjE4LDcgKzIxOSwxMiBAQCB2b2lkIFJlZGlyZWN0U2NoZWR1bGVy
OjpzY2hlZHVsZUZvcm1TdWJtCiAgICAgLy8gVGhpcyBtYXkgaGFwcGVuIHdoZW4gYSBmcmFtZSBj
aGFuZ2VzIHRoZSBsb2NhdGlvbiBvZiBhbm90aGVyIGZyYW1lLgogICAgIGJvb2wgZHVyaW5nTG9h
ZCA9ICFtX2ZyYW1lLT5sb2FkZXIoKS0+Y29tbWl0dGVkRmlyc3RSZWFsRG9jdW1lbnRMb2FkKCk7
CiAKLSAgICBzY2hlZHVsZShuZXcgU2NoZWR1bGVkUmVkaXJlY3Rpb24oZnJhbWVSZXF1ZXN0LCBs
b2NrSGlzdG9yeSwgbXVzdExvY2tCYWNrRm9yd2FyZExpc3QobV9mcmFtZSksIGV2ZW50LCBmb3Jt
U3RhdGUsIGR1cmluZ0xvYWQpKTsKKyAgICAvLyBJZiB0aGlzIGlzIGEgY2hpbGQgZnJhbWUgYW5k
IHRoZSBmb3JtIHN1Ym1pc3Npb24gd2FzIHRyaWdnZXJlZCBieSBhIHNjcmlwdCwgbG9jayB0aGUg
YmFjay9mb3J3YXJkIGxpc3QuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zMjM4MyBmb3IgdGhlIG9yaWdpbmFsIG1vdGl2YXRpb24gZm9yIHRoaXMu
CisKKyAgICBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QgPSBtdXN0TG9ja0JhY2tGb3J3YXJkTGlz
dChtX2ZyYW1lKSB8fCAoZm9ybVN0YXRlLT5zdWJtaXR0ZWRCeUphdmFTY3JpcHQoKSAmJiBmb3Jt
U3RhdGUtPnNvdXJjZUZyYW1lKCktPnRyZWUoKS0+cGFyZW50KCkpOworCisgICAgc2NoZWR1bGUo
bmV3IFNjaGVkdWxlZFJlZGlyZWN0aW9uKGZyYW1lUmVxdWVzdCwgbG9ja0hpc3RvcnksIGxvY2tC
YWNrRm9yd2FyZExpc3QsIGV2ZW50LCBmb3JtU3RhdGUsIGR1cmluZ0xvYWQpKTsKIH0KIAogdm9p
ZCBSZWRpcmVjdFNjaGVkdWxlcjo6c2NoZWR1bGVSZWZyZXNoKGJvb2wgd2FzVXNlckdlc3R1cmUp
CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiA1MjAxNykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDA5LTEyLTExICBCcmFkeSBFaWRzb24gIDxi
ZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzM0MjcyNT4gYW5kIGh0dHBzOi8vd2Via2l0Lm9y
Zy9iLzMyMzgzCisgICAgICAgIFNlbGVjdGluZyBhcnRpY2xlIHRleHQgYXQgc2ZnYXRlLmNvbSBy
ZXN1bHRzIGluIHNwdXJpb3VzIGJhY2svZm9yd2FyZCBlbnRyaWVzCisKKyAgICAgICAgKiBodHRw
L3Rlc3RzL25hdmlnYXRpb24vZHluYW1pYy1pZnJhbWUtZHluYW1pYy1mb3JtLWJhY2stZW50cnkt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vZHlu
YW1pYy1pZnJhbWUtZHluYW1pYy1mb3JtLWJhY2stZW50cnkuaHRtbDogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhcnNlZC1pZnJhbWUtZHluYW1pYy1mb3JtLWJhY2st
ZW50cnktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRp
b24vcGFyc2VkLWlmcmFtZS1keW5hbWljLWZvcm0tYmFjay1lbnRyeS5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL25vdGlmeS1kb25lLmh0bWw6
IEFkZGVkLgorCiAyMDA5LTEyLTExICBEcmV3IFdpbHNvbiAgPGF0d2lsc29uQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9keW5hbWljLWlmcmFtZS1keW5hbWljLWZvcm0tYmFjay1l
bnRyeS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9u
YXZpZ2F0aW9uL2R5bmFtaWMtaWZyYW1lLWR5bmFtaWMtZm9ybS1iYWNrLWVudHJ5LWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9k
eW5hbWljLWlmcmFtZS1keW5hbWljLWZvcm0tYmFjay1lbnRyeS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNyBAQAorVGhpcyB0ZXN0IHNlZXMgaWYgZHluYW1pY2FsbHkgY3Jl
YXRpbmcgYW4gaWZyYW1lLCBkeW5hbWljYWxseSBhZGRpbmcgZm9ybSBlbGVtZW50cyB0byBpdCwg
YW5kIGR5bmFtaWNhbGx5IHN1Ym1pdHRpbmcgdGhlIGZvcm0gcmVzdWx0IGluIGFuIGV4dHJhIGJh
Y2svZm9yd2FyZCBlbnRyeS4gSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlc2Ugc3RlcHMgcnVuIGFm
dGVyIHRoZSBpbml0aWFsIGxvYWQgaXMgY29tcGxldGUsIGhlbmNlIHRoZSBzZXRUaW1lb3V0KCkg
Zm9yIHJ1bm5pbmcgdGhlIHRlc3QuCisKKworPT09PT09PT09PT09PT0gQmFjayBGb3J3YXJkIExp
c3QgPT09PT09PT09PT09PT0KK2N1cnItPiAgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRp
b24vZHluYW1pYy1pZnJhbWUtZHluYW1pYy1mb3JtLWJhY2stZW50cnkuaHRtbCAgKipuYXYgdGFy
Z2V0KioKKyAgICAgICAgICAgIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291
cmNlcy9ub3RpZnktZG9uZS5odG1sIChpbiBmcmFtZSAidGVzdEZyYW1lIikKKz09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL25hdmlnYXRpb24vZHluYW1pYy1pZnJhbWUtZHluYW1pYy1mb3JtLWJhY2stZW50
cnkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24v
ZHluYW1pYy1pZnJhbWUtZHluYW1pYy1mb3JtLWJhY2stZW50cnkuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9keW5hbWljLWlmcmFtZS1keW5h
bWljLWZvcm0tYmFjay1lbnRyeS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1IEBACis8
aHRtbD4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEJhY2tGb3J3YXJkTGlzdCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBBc1RleHQoKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgdmFyIGlmcmFt
ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworICAgIGlmcmFtZS5zZXRBdHRy
aWJ1dGUoIm5hbWUiLCAidGVzdEZyYW1lIik7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGls
ZChpZnJhbWUpOworCisgICAgdmFyIG90aGVyRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRv
dy5kb2N1bWVudDsKKworICAgIHZhciBmb3JtID0gb3RoZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJmb3JtIik7CisgICAgZm9ybS5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsICJyZXNvdXJjZXMvbm90
aWZ5LWRvbmUuaHRtbCIpOworICAgIGZvcm0uc2V0QXR0cmlidXRlKCJuYW1lIiwgIlRlc3RGb3Jt
Iik7CisgICAgZm9ybS5zZXRBdHRyaWJ1dGUoInRhcmdldCIsICJ0ZXN0RnJhbWUiKTsKKyAgICBm
b3JtLnNldEF0dHJpYnV0ZSgibWV0aG9kIiwgInBvc3QiKTsKKyAgICB2YXIgYnV0dG9uID0gb3Ro
ZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOworICAgIGJ1dHRvbi5zZXRBdHRyaWJ1
dGUoInR5cGUiLCAic3VibWl0Iik7CisgICAgZm9ybS5hcHBlbmRDaGlsZChidXR0b24pOworICAg
IG90aGVyRG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmb3JtKTsKKworICAgIGZvcm0uc3VibWl0
KCk7Cit9CisKKzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPSJzZXRUaW1lb3V0KCdydW5UZXN0KCk7
JywgMCk7Ij4KK1RoaXMgdGVzdCBzZWVzIGlmIGR5bmFtaWNhbGx5IGNyZWF0aW5nIGFuIGlmcmFt
ZSwgZHluYW1pY2FsbHkgYWRkaW5nIGZvcm0gZWxlbWVudHMgdG8gaXQsIGFuZCBkeW5hbWljYWxs
eSBzdWJtaXR0aW5nIHRoZSBmb3JtIHJlc3VsdCBpbiBhbiBleHRyYSBiYWNrL2ZvcndhcmQgZW50
cnkuICBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGVzZSBzdGVwcyBydW4gYWZ0ZXIgdGhlIGluaXRp
YWwgbG9hZCBpcyBjb21wbGV0ZSwgaGVuY2UgdGhlIHNldFRpbWVvdXQoKSBmb3IgcnVubmluZyB0
aGUgdGVzdC48YnI+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL25hdmlnYXRpb24vcGFyc2VkLWlmcmFtZS1keW5hbWljLWZvcm0tYmFjay1lbnRyeS1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9u
L3BhcnNlZC1pZnJhbWUtZHluYW1pYy1mb3JtLWJhY2stZW50cnktZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhcnNlZC1pZnJh
bWUtZHluYW1pYy1mb3JtLWJhY2stZW50cnktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDcgQEAKK1RoaXMgdGVzdCBzZWVzIGlmIHN0YXJ0aW5nIHdpdGggYW4gZW1wdHkgaWZy
YW1lIGluIHRoZSBtYXJrdXAsIGR5bmFtaWNhbGx5IGFkZGluZyBmb3JtIGVsZW1lbnRzIHRvIGl0
LCBhbmQgZHluYW1pY2FsbHkgc3VibWl0dGluZyB0aGUgZm9ybSByZXN1bHQgaW4gYW4gZXh0cmEg
YmFjay9mb3J3YXJkIGVudHJ5LiBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGVzZSBzdGVwcyBydW4g
YWZ0ZXIgdGhlIGluaXRpYWwgbG9hZCBpcyBjb21wbGV0ZSwgaGVuY2UgdGhlIHNldFRpbWVvdXQo
KSBmb3IgcnVubmluZyB0aGUgdGVzdC4KKworCis9PT09PT09PT09PT09PSBCYWNrIEZvcndhcmQg
TGlzdCA9PT09PT09PT09PT09PQorY3Vyci0+ICBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdh
dGlvbi9wYXJzZWQtaWZyYW1lLWR5bmFtaWMtZm9ybS1iYWNrLWVudHJ5Lmh0bWwgICoqbmF2IHRh
cmdldCoqCisgICAgICAgICAgICBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNv
dXJjZXMvbm90aWZ5LWRvbmUuaHRtbCAoaW4gZnJhbWUgInRlc3RGcmFtZSIpCis9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJbmRleDogTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhcnNlZC1pZnJhbWUtZHluYW1pYy1mb3JtLWJhY2stZW50
cnkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24v
cGFyc2VkLWlmcmFtZS1keW5hbWljLWZvcm0tYmFjay1lbnRyeS5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhcnNlZC1pZnJhbWUtZHluYW1p
Yy1mb3JtLWJhY2stZW50cnkuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNCBAQAorPGh0
bWw+Cis8c2NyaXB0PgorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBCYWNrRm9yd2FyZExpc3QoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIHZhciBpZnJhbWUg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdEZyYW1lIik7CisKKyAgICB2YXIgb3RoZXJE
b2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50OworCisgICAgdmFyIGZvcm0g
PSBvdGhlckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZvcm0iKTsKKyAgICBmb3JtLnNldEF0dHJp
YnV0ZSgiYWN0aW9uIiwgInJlc291cmNlcy9ub3RpZnktZG9uZS5odG1sIik7CisgICAgZm9ybS5z
ZXRBdHRyaWJ1dGUoIm5hbWUiLCAiVGVzdEZvcm0iKTsKKyAgICBmb3JtLnNldEF0dHJpYnV0ZSgi
dGFyZ2V0IiwgInRlc3RGcmFtZSIpOworICAgIGZvcm0uc2V0QXR0cmlidXRlKCJtZXRob2QiLCAi
cG9zdCIpOworICAgIHZhciBidXR0b24gPSBvdGhlckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlu
cHV0Iik7CisgICAgYnV0dG9uLnNldEF0dHJpYnV0ZSgidHlwZSIsICJzdWJtaXQiKTsKKyAgICBm
b3JtLmFwcGVuZENoaWxkKGJ1dHRvbik7CisgICAgb3RoZXJEb2N1bWVudC5ib2R5LmFwcGVuZENo
aWxkKGZvcm0pOworCisgICAgZm9ybS5zdWJtaXQoKTsKK30KKworPC9zY3JpcHQ+Cis8Ym9keSBv
bmxvYWQ9InNldFRpbWVvdXQoJ3J1blRlc3QoKTsnLCAwKTsiPgorVGhpcyB0ZXN0IHNlZXMgaWYg
c3RhcnRpbmcgd2l0aCBhbiBlbXB0eSBpZnJhbWUgaW4gdGhlIG1hcmt1cCwgZHluYW1pY2FsbHkg
YWRkaW5nIGZvcm0gZWxlbWVudHMgdG8gaXQsIGFuZCBkeW5hbWljYWxseSBzdWJtaXR0aW5nIHRo
ZSBmb3JtIHJlc3VsdCBpbiBhbiBleHRyYSBiYWNrL2ZvcndhcmQgZW50cnkuICBJdCBpcyBpbXBv
cnRhbnQgdGhhdCB0aGVzZSBzdGVwcyBydW4gYWZ0ZXIgdGhlIGluaXRpYWwgbG9hZCBpcyBjb21w
bGV0ZSwgaGVuY2UgdGhlIHNldFRpbWVvdXQoKSBmb3IgcnVubmluZyB0aGUgdGVzdC48YnI+Cis8
aWZyYW1lIGlkPSJ0ZXN0RnJhbWUiIG5hbWU9InRlc3RGcmFtZSI+PC9pZnJhbWU+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3Vy
Y2VzL25vdGlmeS1kb25lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy9ub3RpZnktZG9uZS5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy9ub3RpZnktZG9uZS5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDggQEAKKzxodG1sPgorPHNjcmlwdD4KK2lmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOworPC9zY3JpcHQ+Cis8Ym9keT4KK1RoaXMgcGFnZSBjYWxscyBsYXlvdXRUZXN0
Q29udHJvbGxlci5ub3RpZnlEb25lKCkuCis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="26621"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>