<?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>27632</bug_id>
          
          <creation_ts>2009-07-23 17:16:29 -0700</creation_ts>
          <short_desc>Expose text segmentation through JavaScript</short_desc>
          <delta_ts>2009-09-10 16:01:12 -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>New Bugs</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Xiaomei Ji">xji</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>erikkay</cc>
    
    <cc>jshin</cc>
    
    <cc>mjs</cc>
    
    <cc>nickbaum</cc>
    
    <cc>sam</cc>
    
    <cc>xji</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>134320</commentid>
    <comment_count>0</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-07-23 17:16:29 -0700</bug_when>
    <thetext>specific use case is dictionary, which shows the word definition in its source language and accept-languages when user mouse over or click the word while browsing a webpage.

But such feature should be useful and benefit for other clients in other use cases.

After document.caretRangeFromPoint(), we are able to find out what is the character offset within an element under the mouse.
 
To further identify the word (especially for those languages that do not use space as word breaker), we will need webkit expose text segmentation through JavaScript.
Maybe by document.wordRangeFromPoint(int x, int y), which could extend document.caretRangeFromPoint() by create word range using startOfWord() and endOfWord() on the visible position computed in caretRanageFromPoint().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134590</commentid>
    <comment_count>1</comment_count>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2009-07-24 10:31:02 -0700</bug_when>
    <thetext>Webkit already has TextBreakingIterator in platform/text (implemented by various ports). So, we can leverage it to expose this to web apps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134599</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-07-24 10:46:09 -0700</bug_when>
    <thetext>Note that double-clicking for word selection doesn&apos;t currently use TextBreakingIterator internally. The results should be pretty similar in most cases though.

&gt; document.wordRangeFromPoint(int x, int y)

Document is not really appropriate to host this, because documents are not necessarily displayed on screen. Extending a DOMRange to word boundaries would be more in line with other APIs.

Another option would be to expose DOMSelection objects that are not tied to selection as visible to the user - this interface has a modify() method taking a granularity.

Finally, it should be possible to make this work reasonably well with current WebKit by using DOMSelection.modify, and then restoring the original selection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134603</commentid>
    <comment_count>3</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-07-24 10:56:00 -0700</bug_when>
    <thetext>Hi Alexey,

Thanks for your comments!
I have one question.
 
&gt; Document is not really appropriate to host this, because documents are not
&gt; necessarily displayed on screen. Extending a DOMRange to word boundaries would
&gt; be more in line with other APIs.

For example, if the API is range.extend(&apos;word&apos;), how should we handle if the range is not an empty one (its start offset != end offset).

Thanks,
Xiaomei</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134607</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-07-24 11:26:10 -0700</bug_when>
    <thetext>We could extend to word boundary on both sides (selecting several words, if the original range crossed them all), or we could just raise an exception. The former option seems more reasonable to me.

I was thinking of something more like document.extendRange(range, &quot;word&quot;).

Anyway, this new API is something that should be discussed with WebApps working group, &lt;http://www.w3.org/2008/webapps/&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141819</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-08-20 23:02:29 -0700</bug_when>
    <thetext>Bugzilla has experienced amnesia today, here is a comment that was lost:

--- Comment #5 from Xiaomei Ji &lt;xji@chromium.org&gt;  2009-08-20 11:30:01 PDT ---
Following spec has been proposed to both webkit-dev and public-webapps without
any further feedback.

If no object, I will go ahead to implement it in webkit.

*Syntax*: expands the range to the &apos;unit&apos; boundary.
interface Range {
  void  expand(in DOMString uint)
}

*Parameters*:
unit: String that specifies the units to move in the range, using one of the
following values:
word -- expand the range to include completed words. A word is the smallest
semantic form in one language. In languages use space to break word, such as
English, a word is a collection of characters terminated by a space or
punctuation.
sentence -- expand the range to include completed sentences. A sentence is a
collection of words terminated by punctuation.
block -- expand the range to include completed paragraphs.
document -- expand the range to include the whole document.

*Use case*:
To identify a semantic unit (such as a word) when user mouse over or mouse
click on a page. A specific use case is dictionary, which shows the
worddefinition when user mouse over or mouse click in a webpage.

*Example*:
This example returns the range containing the word user moused over or mouse
clicked (not double-clicked).

var range = document.caretRangeFromPoint(event.clientX, event.clientY);
range.expand(&apos;word&apos;);

Please refer to
http://dev.w3.org/csswg/cssom-view/#dom-documentview-caretrangefrompoint for
document.caretRangeFromPoint().

*Reference*: Microsoft&apos;s  spec: 
http://msdn.microsoft.com/en-us/library/ms536421(VS.85).aspx</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142490</commentid>
    <comment_count>6</comment_count>
      <attachid>38519</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-08-24 18:33:51 -0700</bug_when>
    <thetext>Created attachment 38519
patch w/ layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142628</commentid>
    <comment_count>7</comment_count>
      <attachid>38519</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-25 10:41:30 -0700</bug_when>
    <thetext>Comment on attachment 38519
patch w/ layout test

 else {
 1819         return;
 1820     }
no {}

No &quot;return;&quot; needed.

1     Position s = rangeCompliantEquivalent(start);
 1822     Position e = rangeCompliantEquivalent(end);
 1823     setStart(s.node(), s.deprecatedEditingOffset(), ec);
 1824     setEnd(e.node(), e.deprecatedEditingOffset(), ec);

That should be:

setStart(s.containerNode(), s.computeOffsetInContainerNode());
setEnd(e.containerNode(), e.computeOffsetInContainerNode());

no rangeCompliantEquivalent calls are needed if you use containerNode and computeOffsetInContainerNode

deprecatedEditingOffset() is basically always the wrong call to use. In general any call with &quot;deprecated&quot; in its name can be assumed to be. :)  The confusion here is that soooo much code still uses deprecatedEditingOffset() :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142719</commentid>
    <comment_count>8</comment_count>
      <attachid>38574</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-08-25 16:13:49 -0700</bug_when>
    <thetext>Created attachment 38574
patch w/ layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142736</commentid>
    <comment_count>9</comment_count>
      <attachid>38574</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-25 16:49:26 -0700</bug_when>
    <thetext>Comment on attachment 38574
patch w/ layout test

Ok, in general this looks fine.

+    VisiblePosition start = VisiblePosition(this-&gt;startPosition());
+    VisiblePosition end = VisiblePosition(this-&gt;endPosition());

Should just be:
+    VisiblePosition start(startPosition());
+    VisiblePosition end(endPosition());

I don&apos;t think this comment is really needed, but it&apos;s OK to leave too. :)
+    // Please refer to https://bugs.webkit.org/show_bug.cgi?id=27632 comment #5 for the spec.

This comment doesn&apos;t add anything:
+        // Range expand.

If you were a committer, I would just r+ and you could fix those nits on landing.  As is, it would be best if you could post one final patch. :)

Thanks!  Sorry I missed these on the first round.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142900</commentid>
    <comment_count>10</comment_count>
      <attachid>38624</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-08-26 11:28:59 -0700</bug_when>
    <thetext>Created attachment 38624
patch w/ layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142901</commentid>
    <comment_count>11</comment_count>
      <attachid>38625</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-08-26 11:32:18 -0700</bug_when>
    <thetext>Created attachment 38625
patch w/ layout test

Eric, Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144306</commentid>
    <comment_count>12</comment_count>
      <attachid>38625</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-02 14:16:09 -0700</bug_when>
    <thetext>Comment on attachment 38625
patch w/ layout test

For the future, it&apos;s much better when the test cases include their expected result.

For example:
shouldBe(&quot;range.toString()&quot;, &quot;Here&quot;);
is much clearer than:
+    log(&quot;word5: &quot; + range.toString());

Because implementers don&apos;t have to compare with a golden file to know if they&apos;ve passed/failed the test.


Even better is to use functions to make the test expectations even more readable, like:

shouldBe(&quot;expandRange(mydiv, 2, mydiv, 3, &apos;word&apos;)&quot;, &quot;Here&quot;);

Where &quot;expandRange&quot; is some locally defined function which does the right thing.

shouldBe will print the function call text and if it passed or failed.  

Use of the &quot;shouldBe&quot; asserts require the test to be a script test/DOM only test, which is documented here:
http://trac.webkit.org/wiki/Writing%20Layout%20Tests%20for%20DumpRenderTree

I&apos;ll r+ the patch for now.  If you&apos;d like to update the test more and upload a new patch that&apos;s great.  If you&apos;re pressed on time for other things that&apos;s OK too, and someone can mark this commit-queue+ tomorrow after you&apos;ve had a chance to see my comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144307</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-02 14:17:05 -0700</bug_when>
    <thetext>Well, technically speaking the &quot;shouldBe&quot; stuff doesn&apos;t require that your test be js-only, its just that make-js-test-wrappers includes the right LayoutTests/fast/resources/js-test-pre.js for you.  However you can just include those scripts manually to get the fancy functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145086</commentid>
    <comment_count>14</comment_count>
      <attachid>38625</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-09-06 21:56:02 -0700</bug_when>
    <thetext>Comment on attachment 38625
patch w/ layout test

Tomorrow was a while ago.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145088</commentid>
    <comment_count>15</comment_count>
      <attachid>38625</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-06 21:59:18 -0700</bug_when>
    <thetext>Comment on attachment 38625
patch w/ layout test

Rejecting patch 38625 from commit-queue.  This patch will require manual commit.

WebKitTools/Scripts/build-webkit failed with exit code 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145107</commentid>
    <comment_count>16</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-07 00:14:47 -0700</bug_when>
    <thetext>Unfortunately we don&apos;t currently save build logs on the commit bot, so I can&apos;t tell you the exact compile failure, but it should be pretty obvious if you try compiling on a Mac with tip of tree.

bugzilla-tool apply-patches 27632
or
bugzilla-tool land-patches 27632

would be an easy way to see the error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145501</commentid>
    <comment_count>17</comment_count>
      <attachid>38625</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-08 12:43:30 -0700</bug_when>
    <thetext>Comment on attachment 38625
patch w/ layout test

r- because this fails to build, per above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146334</commentid>
    <comment_count>18</comment_count>
      <attachid>39380</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-09-10 14:16:43 -0700</bug_when>
    <thetext>Created attachment 39380
patch w/ layout test

I have no idea how I checked my local build was successful last time. Sorry for the inconvenience!
Uploaded the patch again. And changed the test to have expected results in test file (but I did not try hard enough to make shouldBe work, instead, I used my own log printing.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146336</commentid>
    <comment_count>19</comment_count>
      <attachid>39380</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-10 14:22:14 -0700</bug_when>
    <thetext>Comment on attachment 39380
patch w/ layout test

LGTM.

Technically I think that the webkit style for JS it to put spaces around all operators, like &quot;i=0&quot; should be &quot;i = 0&quot;.  But it&apos;s totally OK as is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146345</commentid>
    <comment_count>20</comment_count>
      <attachid>39380</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-09-10 14:42:37 -0700</bug_when>
    <thetext>Comment on attachment 39380
patch w/ layout test

Rejecting patch 39380 from commit-queue.

This patch will require manual commit. [&apos;WebKitTools/Scripts/run-webkit-tests&apos;, &apos;--no-launch-safari&apos;, &apos;--quiet&apos;, &apos;--exit-after-n-failures=1&apos;] failed with exit code 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146350</commentid>
    <comment_count>21</comment_count>
      <attachid>39380</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-10 14:50:05 -0700</bug_when>
    <thetext>Comment on attachment 39380
patch w/ layout test

storage/database-lock-after-reload.html -&gt; failed

I need to file a bug about that test, this is not the first commit to fail from it being flakey.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146380</commentid>
    <comment_count>22</comment_count>
      <attachid>39380</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-09-10 16:01:05 -0700</bug_when>
    <thetext>Comment on attachment 39380
patch w/ layout test

Clearing flags on attachment: 39380

Committed r48271: &lt;http://trac.webkit.org/changeset/48271&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146381</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-09-10 16:01:12 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38519</attachid>
            <date>2009-08-24 18:33:51 -0700</date>
            <delta_ts>2009-08-25 16:13:49 -0700</delta_ts>
            <desc>patch w/ layout test</desc>
            <filename>27632.v1</filename>
            <type>text/plain</type>
            <size>17963</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzczNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMDktMDgtMjQgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxt
ZW50IFJhbmdlLmV4cGFuZCgpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Mjc2MzIKKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9SYW5nZS9yYW5nZS1l
eHBhbmQuaHRtbAorCisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJhbmdlOjpleHBhbmQpOgorICAgICAgICAqIGRvbS9SYW5nZS5oOgorICAgICAgICAqIGRvbS9S
YW5nZS5pZGw6CisKIDIwMDktMDgtMjQgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYkNvcmUvZG9t
L1JhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHJldmlzaW9u
IDQ3NjM5KQorKysgV2ViQ29yZS9kb20vUmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2
ICszMyw3IEBACiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgog
I2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgorI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAj
aW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgogI2luY2x1ZGUg
PHN0ZGlvLmg+CkBAIC0xNzk4LDQgKzE3OTksMzAgQEAgdm9pZCBSYW5nZTo6dGV4dE5vZGVTcGxp
dChUZXh0KiBvbGROb2RlKQogICAgIGJvdW5kYXJ5VGV4dE5vZGVzU3BsaXQobV9lbmQsIG9sZE5v
ZGUpOwogfQogCit2b2lkIFJhbmdlOjpleHBhbmQoY29uc3QgU3RyaW5nJiB1bml0LCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSBWaXNpYmxlUG9zaXRp
b24odGhpcy0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kID0gVmlz
aWJsZVBvc2l0aW9uKHRoaXMtPmVuZFBvc2l0aW9uKCkpOworICAgIGlmICh1bml0ID09ICJ3b3Jk
IikgeworICAgICAgICBzdGFydCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0KTsKKyAgICAgICAgZW5kID0g
ZW5kT2ZXb3JkKGVuZCk7CisgICAgfSBlbHNlIGlmICh1bml0ID09ICJzZW50ZW5jZSIpIHsKKyAg
ICAgICAgc3RhcnQgPSBzdGFydE9mU2VudGVuY2Uoc3RhcnQpOworICAgICAgICBlbmQgPSBlbmRP
ZlNlbnRlbmNlKGVuZCk7CisgICAgfSBlbHNlIGlmICh1bml0ID09ICJibG9jayIpIHsKKyAgICAg
ICAgc3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHN0YXJ0KTsKKyAgICAgICAgZW5kID0gZW5kT2ZQ
YXJhZ3JhcGgoZW5kKTsKKyAgICB9IGVsc2UgaWYgKHVuaXQgPT0gImRvY3VtZW50IikgeworICAg
ICAgICBzdGFydCA9IHN0YXJ0T2ZEb2N1bWVudChzdGFydCk7CisgICAgICAgIGVuZCA9IGVuZE9m
RG9jdW1lbnQoZW5kKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IFBvc2l0aW9uIHMgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoc3RhcnQpOworICAgIFBvc2l0
aW9uIGUgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoZW5kKTsKKyAgICBzZXRTdGFydChzLm5v
ZGUoKSwgcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlYyk7CisgICAgc2V0RW5kKGUubm9k
ZSgpLCBlLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKKyAgICByZXR1cm47Cit9CisK
IH0KSW5kZXg6IFdlYkNvcmUvZG9tL1JhbmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
UmFuZ2UuaAkocmV2aXNpb24gNDc2MzkpCisrKyBXZWJDb3JlL2RvbS9SYW5nZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTIsNiArMTEyLDkgQEAgcHVibGljOgogICAgIHZvaWQgdGV4dE5vZGVzTWVy
Z2VkKE5vZGVXaXRoSW5kZXgmIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCk7CiAgICAgdm9pZCB0
ZXh0Tm9kZVNwbGl0KFRleHQqIG9sZE5vZGUpOwogCisgICAgLy8gUGxlYXNlIHJlZmVyIHRvIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzYzMiBjb21tZW50ICM1IGZv
ciB0aGUgc3BlYy4KKyAgICB2b2lkIGV4cGFuZChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2Rl
Jik7CisKICNpZm5kZWYgTkRFQlVHCiAgICAgdm9pZCBmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyKiBi
dWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvZG9t
L1JhbmdlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9SYW5nZS5pZGwJKHJldmlzaW9u
IDQ3NjM5KQorKysgV2ViQ29yZS9kb20vUmFuZ2UuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIs
NiArMTEyLDEwIEBAIG1vZHVsZSByYW5nZXMgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluIGxvbmcgb2Zmc2V0KQogICAgICAgICAgICAgcmFpc2VzKFJhbmdlRXhjZXB0aW9uLCBE
T01FeGNlcHRpb24pOwogCisgICAgICAgIC8vIFJhbmdlIGV4cGFuZC4KKyAgICAgICAgdm9pZCBl
eHBhbmQoaW4gRE9NU3RyaW5nIHVuaXQpCisgICAgICAgICAgICByYWlzZXMoUmFuZ2VFeGNlcHRp
b24sIERPTUV4Y2VwdGlvbik7CisKICNpZiAhZGVmaW5lZChMQU5HVUFHRV9KQVZBU0NSSVBUKSB8
fCAhTEFOR1VBR0VfSkFWQVNDUklQVAogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIHRleHQ7CiAjZW5kaWYKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3NzM3KQorKysgTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMDgtMjQg
IFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBSYW5nZS5leHBhbmQoKS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3NjMyCisKKyAgICAg
ICAgKiBmYXN0L2RvbS9SYW5nZS9yYW5nZS1leHBhbmQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2RvbS9SYW5nZS9yYW5nZS1leHBhbmQuaHRtbDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dDoKKwogMjAw
OS0wOC0yNCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1Jhbmdl
L3JhbmdlLWV4cGFuZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9kb20vUmFuZ2UvcmFuZ2UtZXhwYW5kLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL3JhbmdlLWV4cGFuZC1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTQgQEAKK1RoaXMgaXMgdGhlIGJlZ2luIG9mIGEgYmxvY2suIEEg
YmxvY2sgaXMgYSBjb2xsZWN0aW9uIG9mIHNlbnRlbmNlcy4gRWFjaCBzZW50ZW5jZSBiZWdpbnMg
d2l0aCBjYXBpdGFsIGxldHRlciBhbmQgZW5kcyB3aXRoIGEgcHVuY3R1YXRpb24uCisKK05vdywg
YSBzZW50ZW5jZSBpcyBkaXZpZGVkIGludG8gbXVsdGlwbGUgbGluZXMuCisKK1JvbGwgdGhlIG1v
dXNlIGFyb3VuZCB0aGUgcGFnZS4gVGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBtb3VzZSBwb2ludGVy
IGFyZSBjdXJyZW50bHkgYXRvcCBhbiBlbGVtZW50Cit3aG9zZSBJRCBpczoiIi4KKworQ2VsbCBB
MQlDZWxsIEIxCitDZWxsIEEyCUNlbGwgQjIKK1NlY3Rpb24gMQorCit0ZXh0LgorCitTZWN0aW9u
IDIKKwordGV4dC4KKworSGVyZSBpcyBhIHBvc2l0aW9uZWQgZWxlbWVudC4KK+WcqOeUsuWei0gx
TjHmtYHmhJ/lj6/og73lh7rnjrDlpKfmtYHooYznmoTorablkYrlo7DkuK3vvIzmmKjlpKnlj6zl
vIDnmoTmsZ/oi4/nnIEyMDA5LTIwMTDlubTluqbmtYHmhJ/pmLLliLbnoJTorqjkvJrms6jlrprk
uI7lvoDlubTkuI3lkIzjgILmr4/lubTpg73kvJrlj6zlvIDnmoTkuIDmrKHkvovkvJrvvIzku4rl
ubTotrPotrPmj5DliY3kuobkuIDkuKrmnIjvvJvkvJrkuIrnoJTorqjnmoTkuLvpopjvvIzlt7Lk
u47ku6XliY3nmoTlraPoioLmgKfmtYHmhJ/vvIzlj5jmiJDku6XnlLLlnotIMU4x5rWB5oSf5Li6
6YeN54K544CCCivXkdec16nXm9eqINep16gg15TXl9eV16Ug15TXkteZ15HXlSDXnNeU16rXp9ek
15XXqiDXotec15nXlSDXkdei16fXkdeV16og15TXoNeX15nXmdeq15Ug15zXk9eo15XXqSDXnteU
157Xldei157Xk9eZ150g15zXp9eV16jXoSDXpteV16LXqNeZ150g16nXmdeo15XXqiDXpteR15DX
mSDXkNeVINec15DXldee15k6ICLXlNee16rXp9eZ16TXmdedINem15HXldei15nXnSwg157XmSDX
qdeo15XXpteUINec15nXmdem15Ig15DXqiDXlNee15PXmdeg15Qg16jXldem15Qg15LXnSDXnNep
16jXqiDXkNeV16rXlCIKKz09PT09PT09PSBSRVNVTFQgPT09PT09PT09PT09PT09PT09PT09PT09
PT0KK2RvY3VtZW50MTogVGhpcyBpcyB0aGUgYmVnaW4gb2YgYSBibG9jay4gQSBibG9jayBpcyBh
IGNvbGxlY3Rpb24gb2Ygc2VudGVuY2VzLiBFYWNoIHNlbnRlbmNlIGJlZ2lucyB3aXRoIGNhcGl0
YWwgbGV0dGVyIGFuZCBlbmRzIHdpdGggYSBwdW5jdHVhdGlvbi4gTm93LCBhIHNlbnRlbmNlIGlz
IGRpdmlkZWQgaW50byBtdWx0aXBsZSBsaW5lcy4gUm9sbCB0aGUgbW91c2UgYXJvdW5kIHRoZSBw
YWdlLiBUaGUgY29vcmRpbmF0ZXMgb2YgdGhlIG1vdXNlIHBvaW50ZXIgYXJlIGN1cnJlbnRseSBh
dG9wIGFuIGVsZW1lbnR3aG9zZSBJRCBpczoiIi4gQ2VsbCBBMSBDZWxsIEIxIENlbGwgQTIgQ2Vs
bCBCMiBTZWN0aW9uIDEgdGV4dC4gU2VjdGlvbiAyIHRleHQuIEhlcmUgaXMgYSBwb3NpdGlvbmVk
IGVsZW1lbnQuIOWcqOeUsuWei0gxTjHmtYHmhJ/lj6/og73lh7rnjrDlpKfmtYHooYznmoTorabl
kYrlo7DkuK3vvIzmmKjlpKnlj6zlvIDnmoTmsZ/oi4/nnIEyMDA5LTIwMTDlubTluqbmtYHmhJ/p
mLLliLbnoJTorqjkvJrms6jlrprkuI7lvoDlubTkuI3lkIzjgILmr4/lubTpg73kvJrlj6zlvIDn
moTkuIDmrKHkvovkvJrvvIzku4rlubTotrPotrPmj5DliY3kuobkuIDkuKrmnIjvvJvkvJrkuIrn
oJTorqjnmoTkuLvpopjvvIzlt7Lku47ku6XliY3nmoTlraPoioLmgKfmtYHmhJ/vvIzlj5jmiJDk
u6XnlLLlnotIMU4x5rWB5oSf5Li66YeN54K544CCINeR15zXqdeb16og16nXqCDXlNeX15XXpSDX
lNeS15nXkdeVINec15TXqten16TXldeqINei15zXmdeVINeR16LXp9eR15XXqiDXlNeg15fXmdeZ
16rXlSDXnNeT16jXldepINee15TXnteV16LXnteT15nXnSDXnNen15XXqNehINem15XXoteo15nX
nSDXqdeZ16jXldeqINem15HXkNeZINeQ15Ug15zXkNeV157XmTogIteU157Xqten15nXpNeZ150g
16bXkdeV16LXmdedLCDXnteZINep16jXldem15Qg15zXmdeZ16bXkiDXkNeqINeU157Xk9eZ16DX
lCDXqNeV16bXlCDXktedINec16nXqNeqINeQ15XXqteUIiA9PT09PT09PT0gUkVTVUxUID09PT09
PT09PT09PT09PT09PT09PT09PT09CitibG9jazI6IENlbGwgQTEKK2Jsb2NrMzogQ2VsbCBBMQor
YmxvY2s0OiBDZWxsIEExIENlbGwgQjEKK3NlbnRlbmNlNTogUm9sbCB0aGUgbW91c2UgYXJvdW5k
IHRoZSBwYWdlLgorc2VudGVuY2U2OiBSb2xsIHRoZSBtb3VzZSBhcm91bmQgdGhlIHBhZ2UuCitz
ZW50ZW5jZTc6IFJvbGwgdGhlIG1vdXNlIGFyb3VuZCB0aGUgcGFnZS4gVGhlIGNvb3JkaW5hdGVz
IG9mIHRoZSBtb3VzZSBwb2ludGVyIGFyZSBjdXJyZW50bHkgYXRvcCBhbiBlbGVtZW50CitzZW50
ZW5jZTg6IE5vdywgYSBzZW50ZW5jZSBpcyBkaXZpZGVkIGludG8gbXVsdGlwbGUgbGluZXMuCitz
ZW50ZW5jZTk6IE5vdywgYSBzZW50ZW5jZSBpcyBkaXZpZGVkIGludG8gbXVsdGlwbGUgbGluZXMu
CitzZW50ZW5jZTEwOiBpcyBkaXZpZGVkIGludG8gbXVsdGlwbGUgbGluZXMuCitzZW50ZW5jZTEx
OiBtdWx0aXBsZSBsaW5lcy4KK3dvcmQxOiBIZXJlCit3b3JkMjogSGVyZQord29yZDM6IEhlcmUK
K3dvcmQ0OiBIZXJlCit3b3JkNTogSGVyZQord29yZDY6IEhlcmUKK3dvcmQ3OiBIZXJlCit3b3Jk
ODogSGVyZQord29yZDk6IEhlcmUgaXMKK3dvcmQxMDogSGVyZSBpcword29yZDExOiBIZXJlIGlz
Cit3b3JkMTI6IEhlcmUgaXMKK3dvcmQxMzogSGVyZQord29yZDE0OiBIZXJlIGlzIGEgcG9zaXRp
b25lZCBlbGVtZW50LiDlnKjnlLLlnotIMU4x5rWB5oSf5Y+v6IO95Ye6546w5aSn5rWB6KGM55qE
6K2m5ZGK5aOw5Lit77yM5pio5aSp5Y+s5byA55qE5rGf6IuP55yBMjAwOS0yMDEw5bm05bqm5rWB
5oSf6Ziy5Yi256CU6K6o5Lya5rOo5a6a5LiO5b6A5bm05LiN5ZCM44CC5q+P5bm06YO95Lya5Y+s
5byA55qE5LiA5qyh5L6L5Lya77yM5LuK5bm06Laz6Laz5o+Q5YmN5LqG5LiA5Liq5pyI77yb5Lya
5LiK56CU6K6o55qE5Li76aKY77yM5bey5LuO5Lul5YmN55qE5a2j6IqC5oCn5rWB5oSf77yM5Y+Y
5oiQ5Lul55Sy5Z6LSDFOMea1geaEn+S4uumHjeeCueOAgiDXkdec16nXm9eqCitDaGluZXNlIHdv
cmQwOiDlnKgKK0NoaW5lc2Ugd29yZDE6IOeUsgorQ2hpbmVzZSB3b3JkMjog5Z6LCitDaGluZXNl
IHNlbnRlbmNlOiDlnKjnlLLlnotIMU4x5rWB5oSf5Y+v6IO95Ye6546w5aSn5rWB6KGM55qE6K2m
5ZGK5aOw5Lit77yM5pio5aSp5Y+s5byA55qE5rGf6IuP55yBMjAwOS0yMDEw5bm05bqm5rWB5oSf
6Ziy5Yi256CU6K6o5Lya5rOo5a6a5LiO5b6A5bm05LiN5ZCM44CCCitDaGluZXNlIGJsb2NrOiDl
nKjnlLLlnotIMU4x5rWB5oSf5Y+v6IO95Ye6546w5aSn5rWB6KGM55qE6K2m5ZGK5aOw5Lit77yM
5pio5aSp5Y+s5byA55qE5rGf6IuP55yBMjAwOS0yMDEw5bm05bqm5rWB5oSf6Ziy5Yi256CU6K6o
5Lya5rOo5a6a5LiO5b6A5bm05LiN5ZCM44CC5q+P5bm06YO95Lya5Y+s5byA55qE5LiA5qyh5L6L
5Lya77yM5LuK5bm06Laz6Laz5o+Q5YmN5LqG5LiA5Liq5pyI77yb5Lya5LiK56CU6K6o55qE5Li7
6aKY77yM5bey5LuO5Lul5YmN55qE5a2j6IqC5oCn5rWB5oSf77yM5Y+Y5oiQ5Lul55Sy5Z6LSDFO
Mea1geaEn+S4uumHjeeCueOAggorSGVicmV3IHdvcmQ6INeR15zXqdeb16oKK0hlYnJldyBzZW50
ZW5jZTog15HXnNep15vXqiDXqdeoINeU15fXldelINeU15LXmdeR15Ug15zXlNeq16fXpNeV16og
16LXnNeZ15Ug15HXoten15HXldeqINeU16DXl9eZ15nXqteVINec15PXqNeV16kg157XlNee15XX
otee15PXmdedINec16fXldeo16Eg16bXldei16jXmdedINep15nXqNeV16og16bXkdeQ15kg15DX
lSDXnNeQ15XXnteZOiAi15TXnteq16fXmdek15nXnSDXpteR15XXoteZ150sINee15kg16nXqNeV
16bXlCDXnNeZ15nXpteSINeQ16og15TXnteT15nXoNeUINeo15XXpteUINeS150g15zXqdeo16og
15DXldeq15QiCitIZWJyZXcgYmxvY2s6INeR15zXqdeb16og16nXqCDXlNeX15XXpSDXlNeS15nX
kdeVINec15TXqten16TXldeqINei15zXmdeVINeR16LXp9eR15XXqiDXlNeg15fXmdeZ16rXlSDX
nNeT16jXldepINee15TXnteV16LXnteT15nXnSDXnNen15XXqNehINem15XXoteo15nXnSDXqdeZ
16jXldeqINem15HXkNeZINeQ15Ug15zXkNeV157XmTogIteU157Xqten15nXpNeZ150g16bXkdeV
16LXmdedLCDXnteZINep16jXldem15Qg15zXmdeZ16bXkiDXkNeqINeU157Xk9eZ16DXlCDXqNeV
16bXlCDXktedINec16nXqNeqINeQ15XXqteUIgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20v
UmFuZ2UvcmFuZ2UtZXhwYW5kLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9k
b20vUmFuZ2UvcmFuZ2UtZXhwYW5kLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9SYW5nZS9yYW5nZS1leHBhbmQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
NTEgQEAKKzxodG1sPgorPGhlYWQ+Cis8TUVUQSBIVFRQLUVRVUlWPSJDT05URU5ULVRZUEUiIENP
TlRFTlQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+VGVzdCBmb3IgUmFuZ2Uu
ZXhwYW5kKCk8L3RpdGxlPgorPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhzdHIpIHsKKyAgICB2YXIg
bGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaSIpOworICAgIGxpLmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKHN0cikpOworICAgIHZhciBjb25zb2xlID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKTsKKyAgICBjb25zb2xlLmFwcGVuZENoaWxkKGxpKTsK
K30KKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAg
bG9nKCI9PT09PT09PT0gUkVTVUxUID09PT09PT09PT09PT09PT09PT09PT09PT09Iik7CisgICAg
Ly8gdGVzdCAxIC0gRXhwYW5kIHRvIGRvY3VtZW50LgorICAgIHZhciByYW5nZSA9IGRvY3VtZW50
LmNyZWF0ZVJhbmdlKCk7CisgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
bXlzcGFuIik7CisgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgMCk7CisgICAgcmFuZ2Uuc2V0RW5k
KG5vZGUsIDApOworICAgIHJhbmdlLmV4cGFuZCgnZG9jdW1lbnQnKTsKKyAgICBsb2coImRvY3Vt
ZW50MTogIiArIHJhbmdlLnRvU3RyaW5nKCkpOworCisgICAgLy8gdGVzdCAyIC0gRXhwYW5kIHRv
IGJsb2NrLgorICAgIHZhciBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRkX0ExIik7
CisgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgMCk7CisgICAgcmFuZ2Uuc2V0RW5kKG5vZGUsIDAp
OworICAgIHJhbmdlLmV4cGFuZCgnYmxvY2snKTsKKyAgICBsb2coImJsb2NrMjogIiArIHJhbmdl
LnRvU3RyaW5nKCkpOworCisgICAgLy8gdGVzdCAzIC0gRXhwYW5kIHRvIGJsb2NrLCBkaWZmZXJl
bnQgcmFuZ2Ugc3RhcnQgYW5kIGVuZCBvZmZzZXQuCisgICAgbm9kZSA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJ0ZF9BMSIpLmZpcnN0Q2hpbGQ7CisgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwg
MSk7CisgICAgcmFuZ2Uuc2V0RW5kKG5vZGUsIDIpOworICAgIHJhbmdlLmV4cGFuZCgnYmxvY2sn
KTsKKyAgICBsb2coImJsb2NrMzogIiArIHJhbmdlLnRvU3RyaW5nKCkpOworCisgICAgLy8gdGVz
dCA0IC0gRXhwYW5kIHRvIGJsb2NrLCBkaWZmZXJlbnQgcmFuZ2Ugc3RhcnQgYW5kIGVuZCBub2Rl
LgorICAgIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGRfQTEiKTsKKyAgICB2YXIg
ZW5kTm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZF9CMSIpOworICAgIHJhbmdlLnNl
dFN0YXJ0KG5vZGUsIDApOworICAgIHJhbmdlLnNldEVuZChlbmROb2RlLCAwKTsKKyAgICByYW5n
ZS5leHBhbmQoJ2Jsb2NrJyk7CisgICAgbG9nKCJibG9jazQ6ICIgKyByYW5nZS50b1N0cmluZygp
KTsKKworICAgIC8vIHRlc3QgNSAtIEV4cGFuZCB0byBzZW50ZW5jZS4KKyAgICBub2RlID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImluc3RydWN0aW9ucyIpOworICAgIHJhbmdlLnNldFN0YXJ0
KG5vZGUsIDApOworICAgIHJhbmdlLnNldEVuZChub2RlLCAwKTsKKyAgICByYW5nZS5leHBhbmQo
J3NlbnRlbmNlJyk7CisgICAgbG9nKCJzZW50ZW5jZTU6ICIgKyByYW5nZS50b1N0cmluZygpKTsK
KworICAgIC8vIHRlc3QgNiAtIEV4cGFuZCB0byBzZW50ZW5jZSwgZGlmZmVyZW50IHJhbmdlIHN0
YXJ0IGFuZCBlbmQgb2Zmc2V0LgorICAgIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
aW5zdHJ1Y3Rpb25zIikuZmlyc3RDaGlsZDsKKyAgICByYW5nZS5zZXRTdGFydChub2RlLCAxKTsK
KyAgICByYW5nZS5zZXRFbmQobm9kZSwgMik7CisgICAgcmFuZ2UuZXhwYW5kKCdzZW50ZW5jZScp
OworICAgIGxvZygic2VudGVuY2U2OiAiICsgcmFuZ2UudG9TdHJpbmcoKSk7CisKKyAgICAvLyB0
ZXN0IDcgLSBFeHBhbmQgdG8gc2VudGVuY2UsIGRpZmZlcmVudCByYW5nZSBzdGFydCBhbmQgZW5k
IG5vZGUuCisgICAgbm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbnN0cnVjdGlvbnMi
KTsKKyAgICBlbmROb2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm15YnIiKTsKKyAgICBy
YW5nZS5zZXRTdGFydChub2RlLCAwKTsKKyAgICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgMCk7Cisg
ICAgcmFuZ2UuZXhwYW5kKCdzZW50ZW5jZScpOworICAgIGxvZygic2VudGVuY2U3OiAiICsgcmFu
Z2UudG9TdHJpbmcoKSk7CisKKyAgICAvLyB0ZXN0IDggLSBTZW50ZW5jZSBkb2VzIG5vdCBnbyB1
cHN0cmVhbT8KKyAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm11bHRpbGluZVNl
bnRlbmNlIik7CisgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgMCk7CisgICAgcmFuZ2Uuc2V0RW5k
KG5vZGUsIDApOworICAgIHJhbmdlLmV4cGFuZCgnc2VudGVuY2UnKTsKKyAgICBsb2coInNlbnRl
bmNlODogIiArIHJhbmdlLnRvU3RyaW5nKCkpOworICAgIAorICAgIG5vZGUgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgibXVsdGlsaW5lU2VudGVuY2UiKS5maXJzdENoaWxkOworICAgIHJhbmdl
LnNldFN0YXJ0KG5vZGUsIDEpOworICAgIHJhbmdlLnNldEVuZChub2RlLCA1KTsKKyAgICByYW5n
ZS5leHBhbmQoJ3NlbnRlbmNlJyk7CisgICAgbG9nKCJzZW50ZW5jZTk6ICIgKyByYW5nZS50b1N0
cmluZygpKTsKKyAgICAKKyAgICByYW5nZS5zZXRTdGFydChub2RlLCAyMCk7CisgICAgcmFuZ2Uu
c2V0RW5kKG5vZGUsIDIwKTsKKyAgICByYW5nZS5leHBhbmQoJ3NlbnRlbmNlJyk7CisgICAgbG9n
KCJzZW50ZW5jZTEwOiAiICsgcmFuZ2UudG9TdHJpbmcoKSk7CisgICAgCisgICAgcmFuZ2Uuc2V0
U3RhcnQobm9kZSwgNDApOworICAgIHJhbmdlLnNldEVuZChub2RlLCA0MCk7CisgICAgcmFuZ2Uu
ZXhwYW5kKCdzZW50ZW5jZScpOworICAgIGxvZygic2VudGVuY2UxMTogIiArIHJhbmdlLnRvU3Ry
aW5nKCkpOworICAgIAorICAgIC8vIEV4cGFuZCB3b3JkLgorICAgIC8vIFNhbWUgcmFuZ2Ugc3Rh
cnQgYW5kIGVuZCwgYm90aCBhdCB0aGUgYmVnaW4gb2Ygd29yZC4KKyAgICBub2RlID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoIm15ZGl2Iik7CisgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgMCk7
CisgICAgcmFuZ2Uuc2V0RW5kKG5vZGUsIDApOworICAgIHJhbmdlLmV4cGFuZCgnd29yZCcpOwor
ICAgIGxvZygid29yZDE6ICIgKyByYW5nZS50b1N0cmluZygpKTsKKyAgICAKKyAgICAvLyBTYW1l
IHJhbmdlIHN0YXJ0IGFuZCBlbmQsIGJvdGggYXQgdGhlIGJlZ2luIG9mIGEgd29yZC4KKyAgICBu
b2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm15ZGl2IikuZmlyc3RDaGlsZDsKKyAgICBy
YW5nZS5zZXRTdGFydChub2RlLCAxKTsKKyAgICByYW5nZS5zZXRFbmQobm9kZSwgMSk7CisgICAg
cmFuZ2UuZXhwYW5kKCd3b3JkJyk7CisgICAgbG9nKCJ3b3JkMjogIiArIHJhbmdlLnRvU3RyaW5n
KCkpOworICAgIAorICAgIC8vIFNhbWUgcmFuZ2Ugc3RhcnQgYW5kIGVuZCwgYm90aCBhdCB0aGUg
bWlkZGxlIG9mIGEgd29yZC4KKyAgICByYW5nZS5zZXRTdGFydChub2RlLCAzKTsKKyAgICByYW5n
ZS5zZXRFbmQobm9kZSwgMyk7CisgICAgcmFuZ2UuZXhwYW5kKCd3b3JkJyk7CisgICAgbG9nKCJ3
b3JkMzogIiArIHJhbmdlLnRvU3RyaW5nKCkpOworICAgIAorICAgIC8vIFNhbWUgcmFuZ2Ugc3Rh
cnQgYW5kIGVuZCwgYm90aCBhdCB0aGUgZW5kIG9mIGEgd29yZC4KKyAgICByYW5nZS5zZXRTdGFy
dChub2RlLCA0KTsKKyAgICByYW5nZS5zZXRFbmQobm9kZSwgNCk7CisgICAgcmFuZ2UuZXhwYW5k
KCd3b3JkJyk7CisgICAgbG9nKCJ3b3JkNDogIiArIHJhbmdlLnRvU3RyaW5nKCkpOworICAgIAor
ICAgIC8vIERpZmZlcmVudCByYW5nZSBzdGFydCBhbmQgZW5kIG9mZnNldCwgYm90aCBhdCB0aGUg
bWlkZGxlIG9mIGEgd29yZC4KKyAgICByYW5nZS5zZXRTdGFydChub2RlLCAyKTsKKyAgICByYW5n
ZS5zZXRFbmQobm9kZSwgMyk7CisgICAgcmFuZ2UuZXhwYW5kKCd3b3JkJyk7CisgICAgbG9nKCJ3
b3JkNTogIiArIHJhbmdlLnRvU3RyaW5nKCkpOworICAgCisgICAgLy8gRGlmZmVyZW50IHJhbmdl
IHN0YXJ0IGFuZCBlbmQgb2Zmc2V0LCBzdGFydCBhdCB0aGUgYmVnaW4gb2YgYSB3b3JkLAorICAg
IC8vIGFuZCBlbmQgYXQgdGhlIGVuZCBvZiBhIHdvcmQuCisgICAgcmFuZ2Uuc2V0U3RhcnQobm9k
ZSwgMSk7CisgICAgcmFuZ2Uuc2V0RW5kKG5vZGUsIDQpOworICAgIHJhbmdlLmV4cGFuZCgnd29y
ZCcpOworICAgIGxvZygid29yZDY6ICIgKyByYW5nZS50b1N0cmluZygpKTsKKyAgIAorICAgIC8v
IERpZmZlcmVudCByYW5nZSBzdGFydCBhbmQgZW5kIG9mZnNldCwgc3RhcnQgYXQgdGhlIGJlZ2lu
IG9mIGEgd29yZCwKKyAgICAvLyBhbmQgZW5kIGF0IHRoZSBtaWRkbGUgb2YgYSB3b3JkLgorICAg
IHJhbmdlLnNldFN0YXJ0KG5vZGUsIDEpOworICAgIHJhbmdlLnNldEVuZChub2RlLCAzKTsKKyAg
ICByYW5nZS5leHBhbmQoJ3dvcmQnKTsKKyAgICBsb2coIndvcmQ3OiAiICsgcmFuZ2UudG9TdHJp
bmcoKSk7CisgICAKKyAgICAvLyBEaWZmZXJlbnQgcmFuZ2Ugc3RhcnQgYW5kIGVuZCBvZmZzZXQs
IHN0YXJ0IGF0IHRoZSBtaWRkbGUgb2YgYSB3b3JkLAorICAgIC8vIGFuZCBlbmQgYXQgdGhlIGVu
ZCBvZiBhIHdvcmQuCisgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgMik7CisgICAgcmFuZ2Uuc2V0
RW5kKG5vZGUsIDQpOworICAgIHJhbmdlLmV4cGFuZCgnd29yZCcpOworICAgIGxvZygid29yZDg6
ICIgKyByYW5nZS50b1N0cmluZygpKTsKKyAgIAorICAgIC8vIEFjcm9zcyBtb3JlIHRoYW4gMSB3
b3JkLgorICAgIC8vIFN0YXJ0IGF0IHRoZSBiZWdpbiBvZiAxc3Qgd29yZCwgZW5kIGF0IHRoZSBl
bmQgb2YgbGFzdCB3b3JkLgorICAgIHJhbmdlLnNldFN0YXJ0KG5vZGUsIDEpOworICAgIHJhbmdl
LnNldEVuZChub2RlLCA3KTsKKyAgICByYW5nZS5leHBhbmQoJ3dvcmQnKTsKKyAgICBsb2coIndv
cmQ5OiAiICsgcmFuZ2UudG9TdHJpbmcoKSk7CisgICAKKyAgICAvLyBTdGFydCBhdCB0aGUgbWlk
ZGxlIG9mIDFzdCB3b3JkLCBlbmQgYXQgdGhlIG1pZGRsZSBvZiBsYXN0IHdvcmQuCisgICAgcmFu
Z2Uuc2V0U3RhcnQobm9kZSwgMik7CisgICAgcmFuZ2Uuc2V0RW5kKG5vZGUsIDYpOworICAgIHJh
bmdlLmV4cGFuZCgnd29yZCcpOworICAgIGxvZygid29yZDEwOiAiICsgcmFuZ2UudG9TdHJpbmco
KSk7CisKKyAgICAvLyBTdGFydCBhdCB0aGUgYmVnaW4gb2YgMXN0IHdvcmQsIGVuZCBhdCB0aGUg
bWlkZGxlIG9mIGxhc3Qgd29yZC4KKyAgICByYW5nZS5zZXRTdGFydChub2RlLCAxKTsKKyAgICBy
YW5nZS5zZXRFbmQobm9kZSwgNik7CisgICAgcmFuZ2UuZXhwYW5kKCd3b3JkJyk7CisgICAgbG9n
KCJ3b3JkMTE6ICIgKyByYW5nZS50b1N0cmluZygpKTsKKworICAgIC8vIFN0YXJ0IGF0IHRoZSBt
aWRkbGUgb2YgMXN0IHdvcmQsIGVuZCBhdCB0aGUgZW5kIG9mIGxhc3Qgd29yZC4KKyAgICByYW5n
ZS5zZXRTdGFydChub2RlLCAyKTsKKyAgICByYW5nZS5zZXRFbmQobm9kZSwgNyk7CisgICAgcmFu
Z2UuZXhwYW5kKCd3b3JkJyk7CisgICAgbG9nKCJ3b3JkMTI6ICIgKyByYW5nZS50b1N0cmluZygp
KTsKKworICAgIC8vIFdvcmQgYW5kIHNwYWNlLgorICAgIHJhbmdlLnNldFN0YXJ0KG5vZGUsIDQp
OworICAgIHJhbmdlLnNldEVuZChub2RlLCA1KTsKKyAgICByYW5nZS5leHBhbmQoJ3dvcmQnKTsK
KyAgICBsb2coIndvcmQxMzogIiArIHJhbmdlLnRvU3RyaW5nKCkpOworCisgICAgLy8gV29yZCBh
Y3Jvc3MgZGlmZmVyZW50IG5vZGVzLgorICAgIGVuZE5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiaGUtZGl2Iik7CisgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgMSk7CisgICAgcmFuZ2Uu
c2V0RW5kKGVuZE5vZGUsIDApOworICAgIHJhbmdlLmV4cGFuZCgnd29yZCcpOworICAgIGxvZygi
d29yZDE0OiAiICsgcmFuZ2UudG9TdHJpbmcoKSk7CisKKyAgICAvLyBUZXN0IGZvciBDaGluZXNl
LiBObyBDaGluZXNlIHNlZ21lbnRhdGlvbiBpbiBwbGF0Zm9ybS9tYWMuCisgICAgbm9kZSA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJ6aC1DTi1kaXYiKS5maXJzdENoaWxkOworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAgICAgIHJhbmdlLnNldFN0YXJ0KG5vZGUsIGkp
OworICAgICAgICByYW5nZS5zZXRFbmQobm9kZSwgaSk7CisgICAgICAgIHJhbmdlLmV4cGFuZCgn
d29yZCcpOworICAgICAgICBsb2coIkNoaW5lc2Ugd29yZCIgKyBpICsgIjogIiArIHJhbmdlLnRv
U3RyaW5nKCkpOworICAgIH0KKworICAgIHJhbmdlLmV4cGFuZCgnc2VudGVuY2UnKTsKKyAgICBs
b2coIkNoaW5lc2Ugc2VudGVuY2U6ICIgKyByYW5nZS50b1N0cmluZygpKTsKKworICAgIHJhbmdl
LmV4cGFuZCgnYmxvY2snKTsKKyAgICBsb2coIkNoaW5lc2UgYmxvY2s6ICIgKyByYW5nZS50b1N0
cmluZygpKTsKKworICAgIC8vIFRlc3QgZm9yIEhlYnJldy4KKyAgICBub2RlID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImhlLWRpdiIpLmZpcnN0Q2hpbGQ7CisgICAgcmFuZ2Uuc2V0U3RhcnQo
bm9kZSwgMSk7CisgICAgcmFuZ2Uuc2V0RW5kKG5vZGUsIDEpOworICAgIHJhbmdlLmV4cGFuZCgn
d29yZCcpOworICAgIGxvZygiSGVicmV3IHdvcmQ6ICIgKyByYW5nZS50b1N0cmluZygpKTsKKwor
ICAgIHJhbmdlLmV4cGFuZCgnc2VudGVuY2UnKTsKKyAgICBsb2coIkhlYnJldyBzZW50ZW5jZTog
IiArIHJhbmdlLnRvU3RyaW5nKCkpOworCisgICAgbm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJoZS1kaXYiKTsKKyAgICByYW5nZS5zZXRTdGFydChub2RlLCAwKTsKKyAgICByYW5nZS5z
ZXRFbmQobm9kZSwgMCk7CisgICAgcmFuZ2UuZXhwYW5kKCdibG9jaycpOworICAgIGxvZygiSGVi
cmV3IGJsb2NrOiAiICsgcmFuZ2UudG9TdHJpbmcoKSk7Cit9Cis8L3NjcmlwdD4KKzxib2R5IG9u
bG9hZD0idGVzdCgpIj4KKzxwPlRoaXMgaXMgdGhlIGJlZ2luIG9mIGEgYmxvY2suIEEgYmxvY2sg
aXMgYSBjb2xsZWN0aW9uIG9mIHNlbnRlbmNlcy4gRWFjaCBzZW50ZW5jZSBiZWdpbnMgd2l0aCBj
YXBpdGFsCitsZXR0ZXIgYW5kIGVuZHMgd2l0aCBhIHB1bmN0dWF0aW9uLgorPC9wPgorPHAgaWQ9
Im11bHRpbGluZVNlbnRlbmNlIj5Ob3csIGEgc2VudGVuY2UKK2lzIGRpdmlkZWQgaW50bworbXVs
dGlwbGUgbGluZXMuCis8L3A+Cis8cCBpZD0iaW5zdHJ1Y3Rpb25zIj5Sb2xsIHRoZSBtb3VzZSBh
cm91bmQgdGhlIHBhZ2UuIFRoZSBjb29yZGluYXRlcworb2YgdGhlIG1vdXNlIHBvaW50ZXIgYXJl
IGN1cnJlbnRseSBhdG9wIGFuIGVsZW1lbnQ8YnIgaWQ9Im15YnIiPndob3NlIElEIAoraXM6Ijxz
cGFuIGlkPSJteXNwYW4iIHN0eWxlPSJmb250LXdlaWdodDpib2xkIj48L3NwYW4+Ii48L3A+CisK
Kzx0YWJsZSBib3JkZXI9MSBpZD0ibXlUYWJsZSI+Cis8dHIgaWQ9InRyMSI+CisgICAgPHRkIGlk
PSJ0ZF9BMSI+Q2VsbCBBMTwvdGQ+CisgICAgPHRkIGlkPSJ0ZF9CMSI+Q2VsbCBCMTwvdGQ+Cis8
L3RyPgorPHRyIGlkPSJ0cjIiPgorICAgIDx0ZCBpZD0idGRfQTIiPkNlbGwgQTI8L3RkPgorICAg
IDx0ZCBpZD0idGRfQjIiPkNlbGwgQjI8L3RkPgorPC90cj4KKzwvdGFibGU+Cis8aDIgaWQ9InNl
YzEiPlNlY3Rpb24gMTwvaDI+Cis8cCBpZD0icDEiPnRleHQuPC9wPgorPGgyIGlkPSJzZWMyIj5T
ZWN0aW9uIDI8L2gyPgorPHAgaWQ9InAyIj50ZXh0LjwvcD4KKzxkaXYgaWQ9Im15ZGl2IiBzdHls
ZT0icG9zaXRpb246YWJzb2x1dGU7IHRvcDozNDA7IGxlZnQ6MzAwOyBiYWNrZ3JvdW5kLWNvbG9y
OnllbGxvdyI+CitIZXJlIGlzIGEgcG9zaXRpb25lZCBlbGVtZW50LjwvZGl2PgorPGRpdiBpZD0i
emgtQ04tZGl2Ij7lnKjnlLLlnotIMU4x5rWB5oSf5Y+v6IO95Ye6546w5aSn5rWB6KGM55qE6K2m
5ZGK5aOw5Lit77yM5pio5aSp5Y+s5byA55qE5rGf6IuP55yBMjAwOS0yMDEw5bm05bqm5rWB5oSf
6Ziy5Yi256CU6K6o5Lya5rOo5a6a5LiO5b6A5bm05LiN5ZCM44CC5q+P5bm06YO95Lya5Y+s5byA
55qE5LiA5qyh5L6L5Lya77yM5LuK5bm06Laz6Laz5o+Q5YmN5LqG5LiA5Liq5pyI77yb5Lya5LiK
56CU6K6o55qE5Li76aKY77yM5bey5LuO5Lul5YmN55qE5a2j6IqC5oCn5rWB5oSf77yM5Y+Y5oiQ
5Lul55Sy5Z6LSDFOMea1geaEn+S4uumHjeeCueOAgjwvZGl2PgorPGRpdiBpZD0iaGUtZGl2Ij7X
kdec16nXm9eqINep16gg15TXl9eV16Ug15TXkteZ15HXlSDXnNeU16rXp9ek15XXqiDXotec15nX
lSDXkdei16fXkdeV16og15TXoNeX15nXmdeq15Ug15zXk9eo15XXqSDXnteU157Xldei157Xk9eZ
150g15zXp9eV16jXoSDXpteV16LXqNeZ150g16nXmdeo15XXqiDXpteR15DXmSDXkNeVINec15DX
ldee15k6ICLXlNee16rXp9eZ16TXmdedINem15HXldei15nXnSwg157XmSDXqdeo15XXpteUINec
15nXmdem15Ig15DXqiDXlNee15PXmdeg15Qg16jXldem15Qg15LXnSDXnNep16jXqiDXkNeV16rX
lCI8L2Rpdj4KKzx1bCBpZD0iY29uc29sZSI+PC91bD4KKworPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXBy
b3BlcnRpZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA0NzYzOSkKKysrIExheW91dFRlc3RzL2Zh
c3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMTIsNiArMTIxMiw3IEBAIHdpbmRvdy5SYW5nZS5wcm90b3R5cGUuY29tcGFyZVBv
aW50IFtmdW4KIHdpbmRvdy5SYW5nZS5wcm90b3R5cGUuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50
IFtmdW5jdGlvbl0KIHdpbmRvdy5SYW5nZS5wcm90b3R5cGUuZGVsZXRlQ29udGVudHMgW2Z1bmN0
aW9uXQogd2luZG93LlJhbmdlLnByb3RvdHlwZS5kZXRhY2ggW2Z1bmN0aW9uXQord2luZG93LlJh
bmdlLnByb3RvdHlwZS5leHBhbmQgW2Z1bmN0aW9uXQogd2luZG93LlJhbmdlLnByb3RvdHlwZS5l
eHRyYWN0Q29udGVudHMgW2Z1bmN0aW9uXQogd2luZG93LlJhbmdlLnByb3RvdHlwZS5pbnNlcnRO
b2RlIFtmdW5jdGlvbl0KIHdpbmRvdy5SYW5nZS5wcm90b3R5cGUuaW50ZXJzZWN0c05vZGUgW2Z1
bmN0aW9uXQo=
</data>
<flag name="review"
          id="19532"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38574</attachid>
            <date>2009-08-25 16:13:49 -0700</date>
            <delta_ts>2009-08-26 11:28:59 -0700</delta_ts>
            <desc>patch w/ layout test</desc>
            <filename>27632.v2</filename>
            <type>text/plain</type>
            <size>17881</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzczNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMDktMDgtMjQgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxt
ZW50IFJhbmdlLmV4cGFuZCgpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Mjc2MzIKKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9SYW5nZS9yYW5nZS1l
eHBhbmQuaHRtbAorCisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJhbmdlOjpleHBhbmQpOgorICAgICAgICAqIGRvbS9SYW5nZS5oOgorICAgICAgICAqIGRvbS9S
YW5nZS5pZGw6CisKIDIwMDktMDgtMjQgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYkNvcmUvZG9t
L1JhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHJldmlzaW9u
IDQ3NjM5KQorKysgV2ViQ29yZS9kb20vUmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2
ICszMyw3IEBACiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgog
I2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgorI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAj
aW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgogI2luY2x1ZGUg
PHN0ZGlvLmg+CkBAIC0xNzk4LDQgKzE3OTksMjYgQEAgdm9pZCBSYW5nZTo6dGV4dE5vZGVTcGxp
dChUZXh0KiBvbGROb2RlKQogICAgIGJvdW5kYXJ5VGV4dE5vZGVzU3BsaXQobV9lbmQsIG9sZE5v
ZGUpOwogfQogCit2b2lkIFJhbmdlOjpleHBhbmQoY29uc3QgU3RyaW5nJiB1bml0LCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSBWaXNpYmxlUG9zaXRp
b24odGhpcy0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kID0gVmlz
aWJsZVBvc2l0aW9uKHRoaXMtPmVuZFBvc2l0aW9uKCkpOworICAgIGlmICh1bml0ID09ICJ3b3Jk
IikgeworICAgICAgICBzdGFydCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0KTsKKyAgICAgICAgZW5kID0g
ZW5kT2ZXb3JkKGVuZCk7CisgICAgfSBlbHNlIGlmICh1bml0ID09ICJzZW50ZW5jZSIpIHsKKyAg
ICAgICAgc3RhcnQgPSBzdGFydE9mU2VudGVuY2Uoc3RhcnQpOworICAgICAgICBlbmQgPSBlbmRP
ZlNlbnRlbmNlKGVuZCk7CisgICAgfSBlbHNlIGlmICh1bml0ID09ICJibG9jayIpIHsKKyAgICAg
ICAgc3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHN0YXJ0KTsKKyAgICAgICAgZW5kID0gZW5kT2ZQ
YXJhZ3JhcGgoZW5kKTsKKyAgICB9IGVsc2UgaWYgKHVuaXQgPT0gImRvY3VtZW50IikgeworICAg
ICAgICBzdGFydCA9IHN0YXJ0T2ZEb2N1bWVudChzdGFydCk7CisgICAgICAgIGVuZCA9IGVuZE9m
RG9jdW1lbnQoZW5kKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuOworICAgIHNldFN0YXJ0
KHN0YXJ0LmNvbnRhaW5lck5vZGUoKSwgc3RhcnQuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9k
ZSgpLCBlYyk7CisgICAgc2V0RW5kKGVuZC5jb250YWluZXJOb2RlKCksIGVuZC5jb21wdXRlT2Zm
c2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKK30KKwogfQpJbmRleDogV2ViQ29yZS9kb20vUmFu
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9SYW5nZS5oCShyZXZpc2lvbiA0NzYzOSkK
KysrIFdlYkNvcmUvZG9tL1JhbmdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMiw2ICsxMTIsOSBA
QCBwdWJsaWM6CiAgICAgdm9pZCB0ZXh0Tm9kZXNNZXJnZWQoTm9kZVdpdGhJbmRleCYgb2xkTm9k
ZSwgdW5zaWduZWQgb2Zmc2V0KTsKICAgICB2b2lkIHRleHROb2RlU3BsaXQoVGV4dCogb2xkTm9k
ZSk7CiAKKyAgICAvLyBQbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI3NjMyIGNvbW1lbnQgIzUgZm9yIHRoZSBzcGVjLgorICAgIHZvaWQgZXhw
YW5kKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKwogI2lmbmRlZiBOREVCVUcKICAg
ICB2b2lkIGZvcm1hdEZvckRlYnVnZ2VyKGNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBj
b25zdDsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9kb20vUmFuZ2UuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL1JhbmdlLmlkbAkocmV2aXNpb24gNDc2MzkpCisrKyBXZWJDb3JlL2RvbS9S
YW5nZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTExMiw2ICsxMTIsMTAgQEAgbW9kdWxlIHJhbmdl
cyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gbG9uZyBvZmZzZXQpCiAgICAg
ICAgICAgICByYWlzZXMoUmFuZ2VFeGNlcHRpb24sIERPTUV4Y2VwdGlvbik7CiAKKyAgICAgICAg
Ly8gUmFuZ2UgZXhwYW5kLgorICAgICAgICB2b2lkIGV4cGFuZChpbiBET01TdHJpbmcgdW5pdCkK
KyAgICAgICAgICAgIHJhaXNlcyhSYW5nZUV4Y2VwdGlvbiwgRE9NRXhjZXB0aW9uKTsKKwogI2lm
ICFkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpIHx8ICFMQU5HVUFHRV9KQVZBU0NSSVBUCiAg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdGV4dDsKICNlbmRpZgpJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gNDc3MzcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNCBAQAorMjAwOS0wOC0yNCAgWGlhb21laSBKaSAgPHhqaUBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW1wbGVtZW50IFJhbmdlLmV4cGFuZCgpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Mjc2MzIKKworICAgICAgICAqIGZhc3QvZG9tL1JhbmdlL3Jhbmdl
LWV4cGFuZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL1JhbmdlL3Jh
bmdlLWV4cGFuZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9XaW5kb3cvd2luZG93
LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0OgorCiAyMDA5LTA4LTI0ICBBbGV4ZXkgUHJvc2t1cnlh
a292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvcmFuZ2UtZXhwYW5kLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5nZS9yYW5nZS1leHBhbmQt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2Uv
cmFuZ2UtZXhwYW5kLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NCBAQAor
VGhpcyBpcyB0aGUgYmVnaW4gb2YgYSBibG9jay4gQSBibG9jayBpcyBhIGNvbGxlY3Rpb24gb2Yg
c2VudGVuY2VzLiBFYWNoIHNlbnRlbmNlIGJlZ2lucyB3aXRoIGNhcGl0YWwgbGV0dGVyIGFuZCBl
bmRzIHdpdGggYSBwdW5jdHVhdGlvbi4KKworTm93LCBhIHNlbnRlbmNlIGlzIGRpdmlkZWQgaW50
byBtdWx0aXBsZSBsaW5lcy4KKworUm9sbCB0aGUgbW91c2UgYXJvdW5kIHRoZSBwYWdlLiBUaGUg
Y29vcmRpbmF0ZXMgb2YgdGhlIG1vdXNlIHBvaW50ZXIgYXJlIGN1cnJlbnRseSBhdG9wIGFuIGVs
ZW1lbnQKK3dob3NlIElEIGlzOiIiLgorCitDZWxsIEExCUNlbGwgQjEKK0NlbGwgQTIJQ2VsbCBC
MgorU2VjdGlvbiAxCisKK3RleHQuCisKK1NlY3Rpb24gMgorCit0ZXh0LgorCitIZXJlIGlzIGEg
cG9zaXRpb25lZCBlbGVtZW50Lgor5Zyo55Sy5Z6LSDFOMea1geaEn+WPr+iDveWHuueOsOWkp+a1
geihjOeahOitpuWRiuWjsOS4re+8jOaYqOWkqeWPrOW8gOeahOaxn+iLj+ecgTIwMDktMjAxMOW5
tOW6pua1geaEn+mYsuWItueglOiuqOS8muazqOWumuS4juW+gOW5tOS4jeWQjOOAguavj+W5tOmD
veS8muWPrOW8gOeahOS4gOasoeS+i+S8mu+8jOS7iuW5tOi2s+i2s+aPkOWJjeS6huS4gOS4quac
iO+8m+S8muS4iueglOiuqOeahOS4u+mimO+8jOW3suS7juS7peWJjeeahOWto+iKguaAp+a1geaE
n++8jOWPmOaIkOS7peeUsuWei0gxTjHmtYHmhJ/kuLrph43ngrnjgIIKK9eR15zXqdeb16og16nX
qCDXlNeX15XXpSDXlNeS15nXkdeVINec15TXqten16TXldeqINei15zXmdeVINeR16LXp9eR15XX
qiDXlNeg15fXmdeZ16rXlSDXnNeT16jXldepINee15TXnteV16LXnteT15nXnSDXnNen15XXqNeh
INem15XXoteo15nXnSDXqdeZ16jXldeqINem15HXkNeZINeQ15Ug15zXkNeV157XmTogIteU157X
qten15nXpNeZ150g16bXkdeV16LXmdedLCDXnteZINep16jXldem15Qg15zXmdeZ16bXkiDXkNeq
INeU157Xk9eZ16DXlCDXqNeV16bXlCDXktedINec16nXqNeqINeQ15XXqteUIgorPT09PT09PT09
IFJFU1VMVCA9PT09PT09PT09PT09PT09PT09PT09PT09PQorZG9jdW1lbnQxOiBUaGlzIGlzIHRo
ZSBiZWdpbiBvZiBhIGJsb2NrLiBBIGJsb2NrIGlzIGEgY29sbGVjdGlvbiBvZiBzZW50ZW5jZXMu
IEVhY2ggc2VudGVuY2UgYmVnaW5zIHdpdGggY2FwaXRhbCBsZXR0ZXIgYW5kIGVuZHMgd2l0aCBh
IHB1bmN0dWF0aW9uLiBOb3csIGEgc2VudGVuY2UgaXMgZGl2aWRlZCBpbnRvIG11bHRpcGxlIGxp
bmVzLiBSb2xsIHRoZSBtb3VzZSBhcm91bmQgdGhlIHBhZ2UuIFRoZSBjb29yZGluYXRlcyBvZiB0
aGUgbW91c2UgcG9pbnRlciBhcmUgY3VycmVudGx5IGF0b3AgYW4gZWxlbWVudHdob3NlIElEIGlz
OiIiLiBDZWxsIEExIENlbGwgQjEgQ2VsbCBBMiBDZWxsIEIyIFNlY3Rpb24gMSB0ZXh0LiBTZWN0
aW9uIDIgdGV4dC4gSGVyZSBpcyBhIHBvc2l0aW9uZWQgZWxlbWVudC4g5Zyo55Sy5Z6LSDFOMea1
geaEn+WPr+iDveWHuueOsOWkp+a1geihjOeahOitpuWRiuWjsOS4re+8jOaYqOWkqeWPrOW8gOea
hOaxn+iLj+ecgTIwMDktMjAxMOW5tOW6pua1geaEn+mYsuWItueglOiuqOS8muazqOWumuS4juW+
gOW5tOS4jeWQjOOAguavj+W5tOmDveS8muWPrOW8gOeahOS4gOasoeS+i+S8mu+8jOS7iuW5tOi2
s+i2s+aPkOWJjeS6huS4gOS4quaciO+8m+S8muS4iueglOiuqOeahOS4u+mimO+8jOW3suS7juS7
peWJjeeahOWto+iKguaAp+a1geaEn++8jOWPmOaIkOS7peeUsuWei0gxTjHmtYHmhJ/kuLrph43n
grnjgIIg15HXnNep15vXqiDXqdeoINeU15fXldelINeU15LXmdeR15Ug15zXlNeq16fXpNeV16og
16LXnNeZ15Ug15HXoten15HXldeqINeU16DXl9eZ15nXqteVINec15PXqNeV16kg157XlNee15XX
otee15PXmdedINec16fXldeo16Eg16bXldei16jXmdedINep15nXqNeV16og16bXkdeQ15kg15DX
lSDXnNeQ15XXnteZOiAi15TXnteq16fXmdek15nXnSDXpteR15XXoteZ150sINee15kg16nXqNeV
16bXlCDXnNeZ15nXpteSINeQ16og15TXnteT15nXoNeUINeo15XXpteUINeS150g15zXqdeo16og
15DXldeq15QiID09PT09PT09PSBSRVNVTFQgPT09PT09PT09PT09PT09PT09PT09PT09PT0KK2Js
b2NrMjogQ2VsbCBBMQorYmxvY2szOiBDZWxsIEExCitibG9jazQ6IENlbGwgQTEgQ2VsbCBCMQor
c2VudGVuY2U1OiBSb2xsIHRoZSBtb3VzZSBhcm91bmQgdGhlIHBhZ2UuCitzZW50ZW5jZTY6IFJv
bGwgdGhlIG1vdXNlIGFyb3VuZCB0aGUgcGFnZS4KK3NlbnRlbmNlNzogUm9sbCB0aGUgbW91c2Ug
YXJvdW5kIHRoZSBwYWdlLiBUaGUgY29vcmRpbmF0ZXMgb2YgdGhlIG1vdXNlIHBvaW50ZXIgYXJl
IGN1cnJlbnRseSBhdG9wIGFuIGVsZW1lbnQKK3NlbnRlbmNlODogTm93LCBhIHNlbnRlbmNlIGlz
IGRpdmlkZWQgaW50byBtdWx0aXBsZSBsaW5lcy4KK3NlbnRlbmNlOTogTm93LCBhIHNlbnRlbmNl
IGlzIGRpdmlkZWQgaW50byBtdWx0aXBsZSBsaW5lcy4KK3NlbnRlbmNlMTA6IGlzIGRpdmlkZWQg
aW50byBtdWx0aXBsZSBsaW5lcy4KK3NlbnRlbmNlMTE6IG11bHRpcGxlIGxpbmVzLgord29yZDE6
IEhlcmUKK3dvcmQyOiBIZXJlCit3b3JkMzogSGVyZQord29yZDQ6IEhlcmUKK3dvcmQ1OiBIZXJl
Cit3b3JkNjogSGVyZQord29yZDc6IEhlcmUKK3dvcmQ4OiBIZXJlCit3b3JkOTogSGVyZSBpcwor
d29yZDEwOiBIZXJlIGlzCit3b3JkMTE6IEhlcmUgaXMKK3dvcmQxMjogSGVyZSBpcword29yZDEz
OiBIZXJlCit3b3JkMTQ6IEhlcmUgaXMgYSBwb3NpdGlvbmVkIGVsZW1lbnQuIOWcqOeUsuWei0gx
TjHmtYHmhJ/lj6/og73lh7rnjrDlpKfmtYHooYznmoTorablkYrlo7DkuK3vvIzmmKjlpKnlj6zl
vIDnmoTmsZ/oi4/nnIEyMDA5LTIwMTDlubTluqbmtYHmhJ/pmLLliLbnoJTorqjkvJrms6jlrprk
uI7lvoDlubTkuI3lkIzjgILmr4/lubTpg73kvJrlj6zlvIDnmoTkuIDmrKHkvovkvJrvvIzku4rl
ubTotrPotrPmj5DliY3kuobkuIDkuKrmnIjvvJvkvJrkuIrnoJTorqjnmoTkuLvpopjvvIzlt7Lk
u47ku6XliY3nmoTlraPoioLmgKfmtYHmhJ/vvIzlj5jmiJDku6XnlLLlnotIMU4x5rWB5oSf5Li6
6YeN54K544CCINeR15zXqdeb16oKK0NoaW5lc2Ugd29yZDA6IOWcqAorQ2hpbmVzZSB3b3JkMTog
55SyCitDaGluZXNlIHdvcmQyOiDlnosKK0NoaW5lc2Ugc2VudGVuY2U6IOWcqOeUsuWei0gxTjHm
tYHmhJ/lj6/og73lh7rnjrDlpKfmtYHooYznmoTorablkYrlo7DkuK3vvIzmmKjlpKnlj6zlvIDn
moTmsZ/oi4/nnIEyMDA5LTIwMTDlubTluqbmtYHmhJ/pmLLliLbnoJTorqjkvJrms6jlrprkuI7l
voDlubTkuI3lkIzjgIIKK0NoaW5lc2UgYmxvY2s6IOWcqOeUsuWei0gxTjHmtYHmhJ/lj6/og73l
h7rnjrDlpKfmtYHooYznmoTorablkYrlo7DkuK3vvIzmmKjlpKnlj6zlvIDnmoTmsZ/oi4/nnIEy
MDA5LTIwMTDlubTluqbmtYHmhJ/pmLLliLbnoJTorqjkvJrms6jlrprkuI7lvoDlubTkuI3lkIzj
gILmr4/lubTpg73kvJrlj6zlvIDnmoTkuIDmrKHkvovkvJrvvIzku4rlubTotrPotrPmj5DliY3k
uobkuIDkuKrmnIjvvJvkvJrkuIrnoJTorqjnmoTkuLvpopjvvIzlt7Lku47ku6XliY3nmoTlraPo
ioLmgKfmtYHmhJ/vvIzlj5jmiJDku6XnlLLlnotIMU4x5rWB5oSf5Li66YeN54K544CCCitIZWJy
ZXcgd29yZDog15HXnNep15vXqgorSGVicmV3IHNlbnRlbmNlOiDXkdec16nXm9eqINep16gg15TX
l9eV16Ug15TXkteZ15HXlSDXnNeU16rXp9ek15XXqiDXotec15nXlSDXkdei16fXkdeV16og15TX
oNeX15nXmdeq15Ug15zXk9eo15XXqSDXnteU157Xldei157Xk9eZ150g15zXp9eV16jXoSDXpteV
16LXqNeZ150g16nXmdeo15XXqiDXpteR15DXmSDXkNeVINec15DXldee15k6ICLXlNee16rXp9eZ
16TXmdedINem15HXldei15nXnSwg157XmSDXqdeo15XXpteUINec15nXmdem15Ig15DXqiDXlNee
15PXmdeg15Qg16jXldem15Qg15LXnSDXnNep16jXqiDXkNeV16rXlCIKK0hlYnJldyBibG9jazog
15HXnNep15vXqiDXqdeoINeU15fXldelINeU15LXmdeR15Ug15zXlNeq16fXpNeV16og16LXnNeZ
15Ug15HXoten15HXldeqINeU16DXl9eZ15nXqteVINec15PXqNeV16kg157XlNee15XXotee15PX
mdedINec16fXldeo16Eg16bXldei16jXmdedINep15nXqNeV16og16bXkdeQ15kg15DXlSDXnNeQ
15XXnteZOiAi15TXnteq16fXmdek15nXnSDXpteR15XXoteZ150sINee15kg16nXqNeV16bXlCDX
nNeZ15nXpteSINeQ16og15TXnteT15nXoNeUINeo15XXpteUINeS150g15zXqdeo16og15DXldeq
15QiCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5nZS9yYW5nZS1leHBhbmQuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5nZS9yYW5nZS1leHBhbmQuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL3JhbmdlLWV4cGFu
ZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1MSBAQAorPGh0bWw+Cis8aGVhZD4KKzxN
RVRBIEhUVFAtRVFVSVY9IkNPTlRFTlQtVFlQRSIgQ09OVEVOVD0idGV4dC9odG1sOyBjaGFyc2V0
PVVURi04Ij4KKzx0aXRsZT5UZXN0IGZvciBSYW5nZS5leHBhbmQoKTwvdGl0bGU+Cis8c2NyaXB0
PgorZnVuY3Rpb24gbG9nKHN0cikgeworICAgIHZhciBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImxpIik7CisgICAgbGkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3Ry
KSk7CisgICAgdmFyIGNvbnNvbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIp
OworICAgIGNvbnNvbGUuYXBwZW5kQ2hpbGQobGkpOworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sK
KyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICBsb2coIj09PT09PT09PSBSRVNVTFQgPT09
PT09PT09PT09PT09PT09PT09PT09PT0iKTsKKyAgICAvLyB0ZXN0IDEgLSBFeHBhbmQgdG8gZG9j
dW1lbnQuCisgICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKKyAgICB2YXIg
bm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteXNwYW4iKTsKKyAgICByYW5nZS5zZXRT
dGFydChub2RlLCAwKTsKKyAgICByYW5nZS5zZXRFbmQobm9kZSwgMCk7CisgICAgcmFuZ2UuZXhw
YW5kKCdkb2N1bWVudCcpOworICAgIGxvZygiZG9jdW1lbnQxOiAiICsgcmFuZ2UudG9TdHJpbmco
KSk7CisKKyAgICAvLyB0ZXN0IDIgLSBFeHBhbmQgdG8gYmxvY2suCisgICAgdmFyIG5vZGUgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGRfQTEiKTsKKyAgICByYW5nZS5zZXRTdGFydChub2Rl
LCAwKTsKKyAgICByYW5nZS5zZXRFbmQobm9kZSwgMCk7CisgICAgcmFuZ2UuZXhwYW5kKCdibG9j
aycpOworICAgIGxvZygiYmxvY2syOiAiICsgcmFuZ2UudG9TdHJpbmcoKSk7CisKKyAgICAvLyB0
ZXN0IDMgLSBFeHBhbmQgdG8gYmxvY2ssIGRpZmZlcmVudCByYW5nZSBzdGFydCBhbmQgZW5kIG9m
ZnNldC4KKyAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRkX0ExIikuZmlyc3RD
aGlsZDsKKyAgICByYW5nZS5zZXRTdGFydChub2RlLCAxKTsKKyAgICByYW5nZS5zZXRFbmQobm9k
ZSwgMik7CisgICAgcmFuZ2UuZXhwYW5kKCdibG9jaycpOworICAgIGxvZygiYmxvY2szOiAiICsg
cmFuZ2UudG9TdHJpbmcoKSk7CisKKyAgICAvLyB0ZXN0IDQgLSBFeHBhbmQgdG8gYmxvY2ssIGRp
ZmZlcmVudCByYW5nZSBzdGFydCBhbmQgZW5kIG5vZGUuCisgICAgbm9kZSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJ0ZF9BMSIpOworICAgIHZhciBlbmROb2RlID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInRkX0IxIik7CisgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgMCk7CisgICAgcmFu
Z2Uuc2V0RW5kKGVuZE5vZGUsIDApOworICAgIHJhbmdlLmV4cGFuZCgnYmxvY2snKTsKKyAgICBs
b2coImJsb2NrNDogIiArIHJhbmdlLnRvU3RyaW5nKCkpOworCisgICAgLy8gdGVzdCA1IC0gRXhw
YW5kIHRvIHNlbnRlbmNlLgorICAgIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW5z
dHJ1Y3Rpb25zIik7CisgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgMCk7CisgICAgcmFuZ2Uuc2V0
RW5kKG5vZGUsIDApOworICAgIHJhbmdlLmV4cGFuZCgnc2VudGVuY2UnKTsKKyAgICBsb2coInNl
bnRlbmNlNTogIiArIHJhbmdlLnRvU3RyaW5nKCkpOworCisgICAgLy8gdGVzdCA2IC0gRXhwYW5k
IHRvIHNlbnRlbmNlLCBkaWZmZXJlbnQgcmFuZ2Ugc3RhcnQgYW5kIGVuZCBvZmZzZXQuCisgICAg
bm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbnN0cnVjdGlvbnMiKS5maXJzdENoaWxk
OworICAgIHJhbmdlLnNldFN0YXJ0KG5vZGUsIDEpOworICAgIHJhbmdlLnNldEVuZChub2RlLCAy
KTsKKyAgICByYW5nZS5leHBhbmQoJ3NlbnRlbmNlJyk7CisgICAgbG9nKCJzZW50ZW5jZTY6ICIg
KyByYW5nZS50b1N0cmluZygpKTsKKworICAgIC8vIHRlc3QgNyAtIEV4cGFuZCB0byBzZW50ZW5j
ZSwgZGlmZmVyZW50IHJhbmdlIHN0YXJ0IGFuZCBlbmQgbm9kZS4KKyAgICBub2RlID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImluc3RydWN0aW9ucyIpOworICAgIGVuZE5vZGUgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgibXliciIpOworICAgIHJhbmdlLnNldFN0YXJ0KG5vZGUsIDApOwor
ICAgIHJhbmdlLnNldEVuZChlbmROb2RlLCAwKTsKKyAgICByYW5nZS5leHBhbmQoJ3NlbnRlbmNl
Jyk7CisgICAgbG9nKCJzZW50ZW5jZTc6ICIgKyByYW5nZS50b1N0cmluZygpKTsKKworICAgIC8v
IHRlc3QgOCAtIFNlbnRlbmNlIGRvZXMgbm90IGdvIHVwc3RyZWFtPworICAgIG5vZGUgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgibXVsdGlsaW5lU2VudGVuY2UiKTsKKyAgICByYW5nZS5zZXRT
dGFydChub2RlLCAwKTsKKyAgICByYW5nZS5zZXRFbmQobm9kZSwgMCk7CisgICAgcmFuZ2UuZXhw
YW5kKCdzZW50ZW5jZScpOworICAgIGxvZygic2VudGVuY2U4OiAiICsgcmFuZ2UudG9TdHJpbmco
KSk7CisgICAgCisgICAgbm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtdWx0aWxpbmVT
ZW50ZW5jZSIpLmZpcnN0Q2hpbGQ7CisgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgMSk7CisgICAg
cmFuZ2Uuc2V0RW5kKG5vZGUsIDUpOworICAgIHJhbmdlLmV4cGFuZCgnc2VudGVuY2UnKTsKKyAg
ICBsb2coInNlbnRlbmNlOTogIiArIHJhbmdlLnRvU3RyaW5nKCkpOworICAgIAorICAgIHJhbmdl
LnNldFN0YXJ0KG5vZGUsIDIwKTsKKyAgICByYW5nZS5zZXRFbmQobm9kZSwgMjApOworICAgIHJh
bmdlLmV4cGFuZCgnc2VudGVuY2UnKTsKKyAgICBsb2coInNlbnRlbmNlMTA6ICIgKyByYW5nZS50
b1N0cmluZygpKTsKKyAgICAKKyAgICByYW5nZS5zZXRTdGFydChub2RlLCA0MCk7CisgICAgcmFu
Z2Uuc2V0RW5kKG5vZGUsIDQwKTsKKyAgICByYW5nZS5leHBhbmQoJ3NlbnRlbmNlJyk7CisgICAg
bG9nKCJzZW50ZW5jZTExOiAiICsgcmFuZ2UudG9TdHJpbmcoKSk7CisgICAgCisgICAgLy8gRXhw
YW5kIHdvcmQuCisgICAgLy8gU2FtZSByYW5nZSBzdGFydCBhbmQgZW5kLCBib3RoIGF0IHRoZSBi
ZWdpbiBvZiB3b3JkLgorICAgIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXlkaXYi
KTsKKyAgICByYW5nZS5zZXRTdGFydChub2RlLCAwKTsKKyAgICByYW5nZS5zZXRFbmQobm9kZSwg
MCk7CisgICAgcmFuZ2UuZXhwYW5kKCd3b3JkJyk7CisgICAgbG9nKCJ3b3JkMTogIiArIHJhbmdl
LnRvU3RyaW5nKCkpOworICAgIAorICAgIC8vIFNhbWUgcmFuZ2Ugc3RhcnQgYW5kIGVuZCwgYm90
aCBhdCB0aGUgYmVnaW4gb2YgYSB3b3JkLgorICAgIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgibXlkaXYiKS5maXJzdENoaWxkOworICAgIHJhbmdlLnNldFN0YXJ0KG5vZGUsIDEpOwor
ICAgIHJhbmdlLnNldEVuZChub2RlLCAxKTsKKyAgICByYW5nZS5leHBhbmQoJ3dvcmQnKTsKKyAg
ICBsb2coIndvcmQyOiAiICsgcmFuZ2UudG9TdHJpbmcoKSk7CisgICAgCisgICAgLy8gU2FtZSBy
YW5nZSBzdGFydCBhbmQgZW5kLCBib3RoIGF0IHRoZSBtaWRkbGUgb2YgYSB3b3JkLgorICAgIHJh
bmdlLnNldFN0YXJ0KG5vZGUsIDMpOworICAgIHJhbmdlLnNldEVuZChub2RlLCAzKTsKKyAgICBy
YW5nZS5leHBhbmQoJ3dvcmQnKTsKKyAgICBsb2coIndvcmQzOiAiICsgcmFuZ2UudG9TdHJpbmco
KSk7CisgICAgCisgICAgLy8gU2FtZSByYW5nZSBzdGFydCBhbmQgZW5kLCBib3RoIGF0IHRoZSBl
bmQgb2YgYSB3b3JkLgorICAgIHJhbmdlLnNldFN0YXJ0KG5vZGUsIDQpOworICAgIHJhbmdlLnNl
dEVuZChub2RlLCA0KTsKKyAgICByYW5nZS5leHBhbmQoJ3dvcmQnKTsKKyAgICBsb2coIndvcmQ0
OiAiICsgcmFuZ2UudG9TdHJpbmcoKSk7CisgICAgCisgICAgLy8gRGlmZmVyZW50IHJhbmdlIHN0
YXJ0IGFuZCBlbmQgb2Zmc2V0LCBib3RoIGF0IHRoZSBtaWRkbGUgb2YgYSB3b3JkLgorICAgIHJh
bmdlLnNldFN0YXJ0KG5vZGUsIDIpOworICAgIHJhbmdlLnNldEVuZChub2RlLCAzKTsKKyAgICBy
YW5nZS5leHBhbmQoJ3dvcmQnKTsKKyAgICBsb2coIndvcmQ1OiAiICsgcmFuZ2UudG9TdHJpbmco
KSk7CisgICAKKyAgICAvLyBEaWZmZXJlbnQgcmFuZ2Ugc3RhcnQgYW5kIGVuZCBvZmZzZXQsIHN0
YXJ0IGF0IHRoZSBiZWdpbiBvZiBhIHdvcmQsCisgICAgLy8gYW5kIGVuZCBhdCB0aGUgZW5kIG9m
IGEgd29yZC4KKyAgICByYW5nZS5zZXRTdGFydChub2RlLCAxKTsKKyAgICByYW5nZS5zZXRFbmQo
bm9kZSwgNCk7CisgICAgcmFuZ2UuZXhwYW5kKCd3b3JkJyk7CisgICAgbG9nKCJ3b3JkNjogIiAr
IHJhbmdlLnRvU3RyaW5nKCkpOworICAgCisgICAgLy8gRGlmZmVyZW50IHJhbmdlIHN0YXJ0IGFu
ZCBlbmQgb2Zmc2V0LCBzdGFydCBhdCB0aGUgYmVnaW4gb2YgYSB3b3JkLAorICAgIC8vIGFuZCBl
bmQgYXQgdGhlIG1pZGRsZSBvZiBhIHdvcmQuCisgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgMSk7
CisgICAgcmFuZ2Uuc2V0RW5kKG5vZGUsIDMpOworICAgIHJhbmdlLmV4cGFuZCgnd29yZCcpOwor
ICAgIGxvZygid29yZDc6ICIgKyByYW5nZS50b1N0cmluZygpKTsKKyAgIAorICAgIC8vIERpZmZl
cmVudCByYW5nZSBzdGFydCBhbmQgZW5kIG9mZnNldCwgc3RhcnQgYXQgdGhlIG1pZGRsZSBvZiBh
IHdvcmQsCisgICAgLy8gYW5kIGVuZCBhdCB0aGUgZW5kIG9mIGEgd29yZC4KKyAgICByYW5nZS5z
ZXRTdGFydChub2RlLCAyKTsKKyAgICByYW5nZS5zZXRFbmQobm9kZSwgNCk7CisgICAgcmFuZ2Uu
ZXhwYW5kKCd3b3JkJyk7CisgICAgbG9nKCJ3b3JkODogIiArIHJhbmdlLnRvU3RyaW5nKCkpOwor
ICAgCisgICAgLy8gQWNyb3NzIG1vcmUgdGhhbiAxIHdvcmQuCisgICAgLy8gU3RhcnQgYXQgdGhl
IGJlZ2luIG9mIDFzdCB3b3JkLCBlbmQgYXQgdGhlIGVuZCBvZiBsYXN0IHdvcmQuCisgICAgcmFu
Z2Uuc2V0U3RhcnQobm9kZSwgMSk7CisgICAgcmFuZ2Uuc2V0RW5kKG5vZGUsIDcpOworICAgIHJh
bmdlLmV4cGFuZCgnd29yZCcpOworICAgIGxvZygid29yZDk6ICIgKyByYW5nZS50b1N0cmluZygp
KTsKKyAgIAorICAgIC8vIFN0YXJ0IGF0IHRoZSBtaWRkbGUgb2YgMXN0IHdvcmQsIGVuZCBhdCB0
aGUgbWlkZGxlIG9mIGxhc3Qgd29yZC4KKyAgICByYW5nZS5zZXRTdGFydChub2RlLCAyKTsKKyAg
ICByYW5nZS5zZXRFbmQobm9kZSwgNik7CisgICAgcmFuZ2UuZXhwYW5kKCd3b3JkJyk7CisgICAg
bG9nKCJ3b3JkMTA6ICIgKyByYW5nZS50b1N0cmluZygpKTsKKworICAgIC8vIFN0YXJ0IGF0IHRo
ZSBiZWdpbiBvZiAxc3Qgd29yZCwgZW5kIGF0IHRoZSBtaWRkbGUgb2YgbGFzdCB3b3JkLgorICAg
IHJhbmdlLnNldFN0YXJ0KG5vZGUsIDEpOworICAgIHJhbmdlLnNldEVuZChub2RlLCA2KTsKKyAg
ICByYW5nZS5leHBhbmQoJ3dvcmQnKTsKKyAgICBsb2coIndvcmQxMTogIiArIHJhbmdlLnRvU3Ry
aW5nKCkpOworCisgICAgLy8gU3RhcnQgYXQgdGhlIG1pZGRsZSBvZiAxc3Qgd29yZCwgZW5kIGF0
IHRoZSBlbmQgb2YgbGFzdCB3b3JkLgorICAgIHJhbmdlLnNldFN0YXJ0KG5vZGUsIDIpOworICAg
IHJhbmdlLnNldEVuZChub2RlLCA3KTsKKyAgICByYW5nZS5leHBhbmQoJ3dvcmQnKTsKKyAgICBs
b2coIndvcmQxMjogIiArIHJhbmdlLnRvU3RyaW5nKCkpOworCisgICAgLy8gV29yZCBhbmQgc3Bh
Y2UuCisgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgNCk7CisgICAgcmFuZ2Uuc2V0RW5kKG5vZGUs
IDUpOworICAgIHJhbmdlLmV4cGFuZCgnd29yZCcpOworICAgIGxvZygid29yZDEzOiAiICsgcmFu
Z2UudG9TdHJpbmcoKSk7CisKKyAgICAvLyBXb3JkIGFjcm9zcyBkaWZmZXJlbnQgbm9kZXMuCisg
ICAgZW5kTm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoZS1kaXYiKTsKKyAgICByYW5n
ZS5zZXRTdGFydChub2RlLCAxKTsKKyAgICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgMCk7CisgICAg
cmFuZ2UuZXhwYW5kKCd3b3JkJyk7CisgICAgbG9nKCJ3b3JkMTQ6ICIgKyByYW5nZS50b1N0cmlu
ZygpKTsKKworICAgIC8vIFRlc3QgZm9yIENoaW5lc2UuIE5vIENoaW5lc2Ugc2VnbWVudGF0aW9u
IGluIHBsYXRmb3JtL21hYy4KKyAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInpo
LUNOLWRpdiIpLmZpcnN0Q2hpbGQ7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyArK2kpIHsK
KyAgICAgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgaSk7CisgICAgICAgIHJhbmdlLnNldEVuZChu
b2RlLCBpKTsKKyAgICAgICAgcmFuZ2UuZXhwYW5kKCd3b3JkJyk7CisgICAgICAgIGxvZygiQ2hp
bmVzZSB3b3JkIiArIGkgKyAiOiAiICsgcmFuZ2UudG9TdHJpbmcoKSk7CisgICAgfQorCisgICAg
cmFuZ2UuZXhwYW5kKCdzZW50ZW5jZScpOworICAgIGxvZygiQ2hpbmVzZSBzZW50ZW5jZTogIiAr
IHJhbmdlLnRvU3RyaW5nKCkpOworCisgICAgcmFuZ2UuZXhwYW5kKCdibG9jaycpOworICAgIGxv
ZygiQ2hpbmVzZSBibG9jazogIiArIHJhbmdlLnRvU3RyaW5nKCkpOworCisgICAgLy8gVGVzdCBm
b3IgSGVicmV3LgorICAgIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGUtZGl2Iiku
Zmlyc3RDaGlsZDsKKyAgICByYW5nZS5zZXRTdGFydChub2RlLCAxKTsKKyAgICByYW5nZS5zZXRF
bmQobm9kZSwgMSk7CisgICAgcmFuZ2UuZXhwYW5kKCd3b3JkJyk7CisgICAgbG9nKCJIZWJyZXcg
d29yZDogIiArIHJhbmdlLnRvU3RyaW5nKCkpOworCisgICAgcmFuZ2UuZXhwYW5kKCdzZW50ZW5j
ZScpOworICAgIGxvZygiSGVicmV3IHNlbnRlbmNlOiAiICsgcmFuZ2UudG9TdHJpbmcoKSk7CisK
KyAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhlLWRpdiIpOworICAgIHJhbmdl
LnNldFN0YXJ0KG5vZGUsIDApOworICAgIHJhbmdlLnNldEVuZChub2RlLCAwKTsKKyAgICByYW5n
ZS5leHBhbmQoJ2Jsb2NrJyk7CisgICAgbG9nKCJIZWJyZXcgYmxvY2s6ICIgKyByYW5nZS50b1N0
cmluZygpKTsKK30KKzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPSJ0ZXN0KCkiPgorPHA+VGhpcyBp
cyB0aGUgYmVnaW4gb2YgYSBibG9jay4gQSBibG9jayBpcyBhIGNvbGxlY3Rpb24gb2Ygc2VudGVu
Y2VzLiBFYWNoIHNlbnRlbmNlIGJlZ2lucyB3aXRoIGNhcGl0YWwKK2xldHRlciBhbmQgZW5kcyB3
aXRoIGEgcHVuY3R1YXRpb24uCis8L3A+Cis8cCBpZD0ibXVsdGlsaW5lU2VudGVuY2UiPk5vdywg
YSBzZW50ZW5jZQoraXMgZGl2aWRlZCBpbnRvCittdWx0aXBsZSBsaW5lcy4KKzwvcD4KKzxwIGlk
PSJpbnN0cnVjdGlvbnMiPlJvbGwgdGhlIG1vdXNlIGFyb3VuZCB0aGUgcGFnZS4gVGhlIGNvb3Jk
aW5hdGVzCitvZiB0aGUgbW91c2UgcG9pbnRlciBhcmUgY3VycmVudGx5IGF0b3AgYW4gZWxlbWVu
dDxiciBpZD0ibXliciI+d2hvc2UgSUQgCitpczoiPHNwYW4gaWQ9Im15c3BhbiIgc3R5bGU9ImZv
bnQtd2VpZ2h0OmJvbGQiPjwvc3Bhbj4iLjwvcD4KKworPHRhYmxlIGJvcmRlcj0xIGlkPSJteVRh
YmxlIj4KKzx0ciBpZD0idHIxIj4KKyAgICA8dGQgaWQ9InRkX0ExIj5DZWxsIEExPC90ZD4KKyAg
ICA8dGQgaWQ9InRkX0IxIj5DZWxsIEIxPC90ZD4KKzwvdHI+Cis8dHIgaWQ9InRyMiI+CisgICAg
PHRkIGlkPSJ0ZF9BMiI+Q2VsbCBBMjwvdGQ+CisgICAgPHRkIGlkPSJ0ZF9CMiI+Q2VsbCBCMjwv
dGQ+Cis8L3RyPgorPC90YWJsZT4KKzxoMiBpZD0ic2VjMSI+U2VjdGlvbiAxPC9oMj4KKzxwIGlk
PSJwMSI+dGV4dC48L3A+Cis8aDIgaWQ9InNlYzIiPlNlY3Rpb24gMjwvaDI+Cis8cCBpZD0icDIi
PnRleHQuPC9wPgorPGRpdiBpZD0ibXlkaXYiIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsgdG9w
OjM0MDsgbGVmdDozMDA7IGJhY2tncm91bmQtY29sb3I6eWVsbG93Ij4KK0hlcmUgaXMgYSBwb3Np
dGlvbmVkIGVsZW1lbnQuPC9kaXY+Cis8ZGl2IGlkPSJ6aC1DTi1kaXYiPuWcqOeUsuWei0gxTjHm
tYHmhJ/lj6/og73lh7rnjrDlpKfmtYHooYznmoTorablkYrlo7DkuK3vvIzmmKjlpKnlj6zlvIDn
moTmsZ/oi4/nnIEyMDA5LTIwMTDlubTluqbmtYHmhJ/pmLLliLbnoJTorqjkvJrms6jlrprkuI7l
voDlubTkuI3lkIzjgILmr4/lubTpg73kvJrlj6zlvIDnmoTkuIDmrKHkvovkvJrvvIzku4rlubTo
trPotrPmj5DliY3kuobkuIDkuKrmnIjvvJvkvJrkuIrnoJTorqjnmoTkuLvpopjvvIzlt7Lku47k
u6XliY3nmoTlraPoioLmgKfmtYHmhJ/vvIzlj5jmiJDku6XnlLLlnotIMU4x5rWB5oSf5Li66YeN
54K544CCPC9kaXY+Cis8ZGl2IGlkPSJoZS1kaXYiPteR15zXqdeb16og16nXqCDXlNeX15XXpSDX
lNeS15nXkdeVINec15TXqten16TXldeqINei15zXmdeVINeR16LXp9eR15XXqiDXlNeg15fXmdeZ
16rXlSDXnNeT16jXldepINee15TXnteV16LXnteT15nXnSDXnNen15XXqNehINem15XXoteo15nX
nSDXqdeZ16jXldeqINem15HXkNeZINeQ15Ug15zXkNeV157XmTogIteU157Xqten15nXpNeZ150g
16bXkdeV16LXmdedLCDXnteZINep16jXldem15Qg15zXmdeZ16bXkiDXkNeqINeU157Xk9eZ16DX
lCDXqNeV16bXlCDXktedINec16nXqNeqINeQ15XXqteUIjwvZGl2PgorPHVsIGlkPSJjb25zb2xl
Ij48L3VsPgorCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9X
aW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDQ3NjM5KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9w
ZXJ0aWVzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTIxMiw2ICsxMjEyLDcgQEAg
d2luZG93LlJhbmdlLnByb3RvdHlwZS5jb21wYXJlUG9pbnQgW2Z1bgogd2luZG93LlJhbmdlLnBy
b3RvdHlwZS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgW2Z1bmN0aW9uXQogd2luZG93LlJhbmdl
LnByb3RvdHlwZS5kZWxldGVDb250ZW50cyBbZnVuY3Rpb25dCiB3aW5kb3cuUmFuZ2UucHJvdG90
eXBlLmRldGFjaCBbZnVuY3Rpb25dCit3aW5kb3cuUmFuZ2UucHJvdG90eXBlLmV4cGFuZCBbZnVu
Y3Rpb25dCiB3aW5kb3cuUmFuZ2UucHJvdG90eXBlLmV4dHJhY3RDb250ZW50cyBbZnVuY3Rpb25d
CiB3aW5kb3cuUmFuZ2UucHJvdG90eXBlLmluc2VydE5vZGUgW2Z1bmN0aW9uXQogd2luZG93LlJh
bmdlLnByb3RvdHlwZS5pbnRlcnNlY3RzTm9kZSBbZnVuY3Rpb25dCg==
</data>
<flag name="review"
          id="19580"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38624</attachid>
            <date>2009-08-26 11:28:59 -0700</date>
            <delta_ts>2009-08-26 11:32:18 -0700</delta_ts>
            <desc>patch w/ layout test</desc>
            <filename>27632.v3</filename>
            <type>text/plain</type>
            <size>17894</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzczNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMDktMDgtMjQgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxt
ZW50IFJhbmdlLmV4cGFuZCgpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Mjc2MzIKKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9SYW5nZS9yYW5nZS1l
eHBhbmQuaHRtbAorCisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJhbmdlOjpleHBhbmQpOgorICAgICAgICAqIGRvbS9SYW5nZS5oOgorICAgICAgICAqIGRvbS9S
YW5nZS5pZGw6CisKIDIwMDktMDgtMjQgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYkNvcmUvZG9t
L1JhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHJldmlzaW9u
IDQ3NjM5KQorKysgV2ViQ29yZS9kb20vUmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2
ICszMyw3IEBACiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgog
I2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgorI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAj
aW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgogI2luY2x1ZGUg
PHN0ZGlvLmg+CkBAIC0xNzk4LDQgKzE3OTksMjYgQEAgdm9pZCBSYW5nZTo6dGV4dE5vZGVTcGxp
dChUZXh0KiBvbGROb2RlKQogICAgIGJvdW5kYXJ5VGV4dE5vZGVzU3BsaXQobV9lbmQsIG9sZE5v
ZGUpOwogfQogCit2b2lkIFJhbmdlOjpleHBhbmQoY29uc3QgU3RyaW5nJiB1bml0LCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc3RhcnRQb3NpdGlvbigp
KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kKGVuZFBvc2l0aW9uKCkpOworICAgIGlmICh1bml0
ID09ICJ3b3JkIikgeworICAgICAgICBzdGFydCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0KTsKKyAgICAg
ICAgZW5kID0gZW5kT2ZXb3JkKGVuZCk7CisgICAgfSBlbHNlIGlmICh1bml0ID09ICJzZW50ZW5j
ZSIpIHsKKyAgICAgICAgc3RhcnQgPSBzdGFydE9mU2VudGVuY2Uoc3RhcnQpOworICAgICAgICBl
bmQgPSBlbmRPZlNlbnRlbmNlKGVuZCk7CisgICAgfSBlbHNlIGlmICh1bml0ID09ICJibG9jayIp
IHsKKyAgICAgICAgc3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHN0YXJ0KTsKKyAgICAgICAgZW5k
ID0gZW5kT2ZQYXJhZ3JhcGgoZW5kKTsKKyAgICB9IGVsc2UgaWYgKHVuaXQgPT0gImRvY3VtZW50
IikgeworICAgICAgICBzdGFydCA9IHN0YXJ0T2ZEb2N1bWVudChzdGFydCk7CisgICAgICAgIGVu
ZCA9IGVuZE9mRG9jdW1lbnQoZW5kKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuOworICAg
IHNldFN0YXJ0KHN0YXJ0LmNvbnRhaW5lck5vZGUoKSwgc3RhcnQuY29tcHV0ZU9mZnNldEluQ29u
dGFpbmVyTm9kZSgpLCBlYyk7CisgICAgc2V0RW5kKGVuZC5jb250YWluZXJOb2RlKCksIGVuZC5j
b21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKK30KKwogfQpJbmRleDogV2ViQ29y
ZS9kb20vUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9SYW5nZS5oCShyZXZpc2lv
biA0NzYzOSkKKysrIFdlYkNvcmUvZG9tL1JhbmdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMiw2
ICsxMTIsMTAgQEAgcHVibGljOgogICAgIHZvaWQgdGV4dE5vZGVzTWVyZ2VkKE5vZGVXaXRoSW5k
ZXgmIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCk7CiAgICAgdm9pZCB0ZXh0Tm9kZVNwbGl0KFRl
eHQqIG9sZE5vZGUpOwogCisgICAgLy8gRXhwYW5kIHJhbmdlIHRvIGEgdW5pdCAod29yZCBvciBz
ZW50ZW5jZSBvciBibG9jayBvciBkb2N1bWVudCkgYm91bmRhcnkuCisgICAgLy8gUGxlYXNlIHJl
ZmVyIHRvIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzYzMiBjb21t
ZW50ICM1ICAgICAvLyBmb3IgZGV0YWlscy4KKyAgICB2b2lkIGV4cGFuZChjb25zdCBTdHJpbmcm
LCBFeGNlcHRpb25Db2RlJik7CisKICNpZm5kZWYgTkRFQlVHCiAgICAgdm9pZCBmb3JtYXRGb3JE
ZWJ1Z2dlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CiAjZW5kaWYKSW5k
ZXg6IFdlYkNvcmUvZG9tL1JhbmdlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9SYW5n
ZS5pZGwJKHJldmlzaW9uIDQ3NjM5KQorKysgV2ViQ29yZS9kb20vUmFuZ2UuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTIsNiArMTEyLDkgQEAgbW9kdWxlIHJhbmdlcyB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW4gbG9uZyBvZmZzZXQpCiAgICAgICAgICAgICByYWlzZXMoUmFu
Z2VFeGNlcHRpb24sIERPTUV4Y2VwdGlvbik7CiAKKyAgICAgICAgdm9pZCBleHBhbmQoaW4gRE9N
U3RyaW5nIHVuaXQpCisgICAgICAgICAgICByYWlzZXMoUmFuZ2VFeGNlcHRpb24sIERPTUV4Y2Vw
dGlvbik7CisKICNpZiAhZGVmaW5lZChMQU5HVUFHRV9KQVZBU0NSSVBUKSB8fCAhTEFOR1VBR0Vf
SkFWQVNDUklQVAogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHRleHQ7CiAj
ZW5kaWYKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3NzM3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMDgtMjQgIFhpYW9tZWkgSmkg
IDx4amlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEltcGxlbWVudCBSYW5nZS5leHBhbmQoKS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3NjMyCisKKyAgICAgICAgKiBmYXN0L2Rv
bS9SYW5nZS9yYW5nZS1leHBhbmQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2RvbS9SYW5nZS9yYW5nZS1leHBhbmQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20v
V2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dDoKKwogMjAwOS0wOC0yNCAgQWxl
eGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBBZGxlci4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL3JhbmdlLWV4cGFu
ZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2Uv
cmFuZ2UtZXhwYW5kLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvZG9tL1JhbmdlL3JhbmdlLWV4cGFuZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNTQgQEAKK1RoaXMgaXMgdGhlIGJlZ2luIG9mIGEgYmxvY2suIEEgYmxvY2sgaXMgYSBj
b2xsZWN0aW9uIG9mIHNlbnRlbmNlcy4gRWFjaCBzZW50ZW5jZSBiZWdpbnMgd2l0aCBjYXBpdGFs
IGxldHRlciBhbmQgZW5kcyB3aXRoIGEgcHVuY3R1YXRpb24uCisKK05vdywgYSBzZW50ZW5jZSBp
cyBkaXZpZGVkIGludG8gbXVsdGlwbGUgbGluZXMuCisKK1JvbGwgdGhlIG1vdXNlIGFyb3VuZCB0
aGUgcGFnZS4gVGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBtb3VzZSBwb2ludGVyIGFyZSBjdXJyZW50
bHkgYXRvcCBhbiBlbGVtZW50Cit3aG9zZSBJRCBpczoiIi4KKworQ2VsbCBBMQlDZWxsIEIxCitD
ZWxsIEEyCUNlbGwgQjIKK1NlY3Rpb24gMQorCit0ZXh0LgorCitTZWN0aW9uIDIKKwordGV4dC4K
KworSGVyZSBpcyBhIHBvc2l0aW9uZWQgZWxlbWVudC4KK+WcqOeUsuWei0gxTjHmtYHmhJ/lj6/o
g73lh7rnjrDlpKfmtYHooYznmoTorablkYrlo7DkuK3vvIzmmKjlpKnlj6zlvIDnmoTmsZ/oi4/n
nIEyMDA5LTIwMTDlubTluqbmtYHmhJ/pmLLliLbnoJTorqjkvJrms6jlrprkuI7lvoDlubTkuI3l
kIzjgILmr4/lubTpg73kvJrlj6zlvIDnmoTkuIDmrKHkvovkvJrvvIzku4rlubTotrPotrPmj5Dl
iY3kuobkuIDkuKrmnIjvvJvkvJrkuIrnoJTorqjnmoTkuLvpopjvvIzlt7Lku47ku6XliY3nmoTl
raPoioLmgKfmtYHmhJ/vvIzlj5jmiJDku6XnlLLlnotIMU4x5rWB5oSf5Li66YeN54K544CCCivX
kdec16nXm9eqINep16gg15TXl9eV16Ug15TXkteZ15HXlSDXnNeU16rXp9ek15XXqiDXotec15nX
lSDXkdei16fXkdeV16og15TXoNeX15nXmdeq15Ug15zXk9eo15XXqSDXnteU157Xldei157Xk9eZ
150g15zXp9eV16jXoSDXpteV16LXqNeZ150g16nXmdeo15XXqiDXpteR15DXmSDXkNeVINec15DX
ldee15k6ICLXlNee16rXp9eZ16TXmdedINem15HXldei15nXnSwg157XmSDXqdeo15XXpteUINec
15nXmdem15Ig15DXqiDXlNee15PXmdeg15Qg16jXldem15Qg15LXnSDXnNep16jXqiDXkNeV16rX
lCIKKz09PT09PT09PSBSRVNVTFQgPT09PT09PT09PT09PT09PT09PT09PT09PT0KK2RvY3VtZW50
MTogVGhpcyBpcyB0aGUgYmVnaW4gb2YgYSBibG9jay4gQSBibG9jayBpcyBhIGNvbGxlY3Rpb24g
b2Ygc2VudGVuY2VzLiBFYWNoIHNlbnRlbmNlIGJlZ2lucyB3aXRoIGNhcGl0YWwgbGV0dGVyIGFu
ZCBlbmRzIHdpdGggYSBwdW5jdHVhdGlvbi4gTm93LCBhIHNlbnRlbmNlIGlzIGRpdmlkZWQgaW50
byBtdWx0aXBsZSBsaW5lcy4gUm9sbCB0aGUgbW91c2UgYXJvdW5kIHRoZSBwYWdlLiBUaGUgY29v
cmRpbmF0ZXMgb2YgdGhlIG1vdXNlIHBvaW50ZXIgYXJlIGN1cnJlbnRseSBhdG9wIGFuIGVsZW1l
bnR3aG9zZSBJRCBpczoiIi4gQ2VsbCBBMSBDZWxsIEIxIENlbGwgQTIgQ2VsbCBCMiBTZWN0aW9u
IDEgdGV4dC4gU2VjdGlvbiAyIHRleHQuIEhlcmUgaXMgYSBwb3NpdGlvbmVkIGVsZW1lbnQuIOWc
qOeUsuWei0gxTjHmtYHmhJ/lj6/og73lh7rnjrDlpKfmtYHooYznmoTorablkYrlo7DkuK3vvIzm
mKjlpKnlj6zlvIDnmoTmsZ/oi4/nnIEyMDA5LTIwMTDlubTluqbmtYHmhJ/pmLLliLbnoJTorqjk
vJrms6jlrprkuI7lvoDlubTkuI3lkIzjgILmr4/lubTpg73kvJrlj6zlvIDnmoTkuIDmrKHkvovk
vJrvvIzku4rlubTotrPotrPmj5DliY3kuobkuIDkuKrmnIjvvJvkvJrkuIrnoJTorqjnmoTkuLvp
opjvvIzlt7Lku47ku6XliY3nmoTlraPoioLmgKfmtYHmhJ/vvIzlj5jmiJDku6XnlLLlnotIMU4x
5rWB5oSf5Li66YeN54K544CCINeR15zXqdeb16og16nXqCDXlNeX15XXpSDXlNeS15nXkdeVINec
15TXqten16TXldeqINei15zXmdeVINeR16LXp9eR15XXqiDXlNeg15fXmdeZ16rXlSDXnNeT16jX
ldepINee15TXnteV16LXnteT15nXnSDXnNen15XXqNehINem15XXoteo15nXnSDXqdeZ16jXldeq
INem15HXkNeZINeQ15Ug15zXkNeV157XmTogIteU157Xqten15nXpNeZ150g16bXkdeV16LXmded
LCDXnteZINep16jXldem15Qg15zXmdeZ16bXkiDXkNeqINeU157Xk9eZ16DXlCDXqNeV16bXlCDX
ktedINec16nXqNeqINeQ15XXqteUIiA9PT09PT09PT0gUkVTVUxUID09PT09PT09PT09PT09PT09
PT09PT09PT09CitibG9jazI6IENlbGwgQTEKK2Jsb2NrMzogQ2VsbCBBMQorYmxvY2s0OiBDZWxs
IEExIENlbGwgQjEKK3NlbnRlbmNlNTogUm9sbCB0aGUgbW91c2UgYXJvdW5kIHRoZSBwYWdlLgor
c2VudGVuY2U2OiBSb2xsIHRoZSBtb3VzZSBhcm91bmQgdGhlIHBhZ2UuCitzZW50ZW5jZTc6IFJv
bGwgdGhlIG1vdXNlIGFyb3VuZCB0aGUgcGFnZS4gVGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBtb3Vz
ZSBwb2ludGVyIGFyZSBjdXJyZW50bHkgYXRvcCBhbiBlbGVtZW50CitzZW50ZW5jZTg6IE5vdywg
YSBzZW50ZW5jZSBpcyBkaXZpZGVkIGludG8gbXVsdGlwbGUgbGluZXMuCitzZW50ZW5jZTk6IE5v
dywgYSBzZW50ZW5jZSBpcyBkaXZpZGVkIGludG8gbXVsdGlwbGUgbGluZXMuCitzZW50ZW5jZTEw
OiBpcyBkaXZpZGVkIGludG8gbXVsdGlwbGUgbGluZXMuCitzZW50ZW5jZTExOiBtdWx0aXBsZSBs
aW5lcy4KK3dvcmQxOiBIZXJlCit3b3JkMjogSGVyZQord29yZDM6IEhlcmUKK3dvcmQ0OiBIZXJl
Cit3b3JkNTogSGVyZQord29yZDY6IEhlcmUKK3dvcmQ3OiBIZXJlCit3b3JkODogSGVyZQord29y
ZDk6IEhlcmUgaXMKK3dvcmQxMDogSGVyZSBpcword29yZDExOiBIZXJlIGlzCit3b3JkMTI6IEhl
cmUgaXMKK3dvcmQxMzogSGVyZQord29yZDE0OiBIZXJlIGlzIGEgcG9zaXRpb25lZCBlbGVtZW50
LiDlnKjnlLLlnotIMU4x5rWB5oSf5Y+v6IO95Ye6546w5aSn5rWB6KGM55qE6K2m5ZGK5aOw5Lit
77yM5pio5aSp5Y+s5byA55qE5rGf6IuP55yBMjAwOS0yMDEw5bm05bqm5rWB5oSf6Ziy5Yi256CU
6K6o5Lya5rOo5a6a5LiO5b6A5bm05LiN5ZCM44CC5q+P5bm06YO95Lya5Y+s5byA55qE5LiA5qyh
5L6L5Lya77yM5LuK5bm06Laz6Laz5o+Q5YmN5LqG5LiA5Liq5pyI77yb5Lya5LiK56CU6K6o55qE
5Li76aKY77yM5bey5LuO5Lul5YmN55qE5a2j6IqC5oCn5rWB5oSf77yM5Y+Y5oiQ5Lul55Sy5Z6L
SDFOMea1geaEn+S4uumHjeeCueOAgiDXkdec16nXm9eqCitDaGluZXNlIHdvcmQwOiDlnKgKK0No
aW5lc2Ugd29yZDE6IOeUsgorQ2hpbmVzZSB3b3JkMjog5Z6LCitDaGluZXNlIHNlbnRlbmNlOiDl
nKjnlLLlnotIMU4x5rWB5oSf5Y+v6IO95Ye6546w5aSn5rWB6KGM55qE6K2m5ZGK5aOw5Lit77yM
5pio5aSp5Y+s5byA55qE5rGf6IuP55yBMjAwOS0yMDEw5bm05bqm5rWB5oSf6Ziy5Yi256CU6K6o
5Lya5rOo5a6a5LiO5b6A5bm05LiN5ZCM44CCCitDaGluZXNlIGJsb2NrOiDlnKjnlLLlnotIMU4x
5rWB5oSf5Y+v6IO95Ye6546w5aSn5rWB6KGM55qE6K2m5ZGK5aOw5Lit77yM5pio5aSp5Y+s5byA
55qE5rGf6IuP55yBMjAwOS0yMDEw5bm05bqm5rWB5oSf6Ziy5Yi256CU6K6o5Lya5rOo5a6a5LiO
5b6A5bm05LiN5ZCM44CC5q+P5bm06YO95Lya5Y+s5byA55qE5LiA5qyh5L6L5Lya77yM5LuK5bm0
6Laz6Laz5o+Q5YmN5LqG5LiA5Liq5pyI77yb5Lya5LiK56CU6K6o55qE5Li76aKY77yM5bey5LuO
5Lul5YmN55qE5a2j6IqC5oCn5rWB5oSf77yM5Y+Y5oiQ5Lul55Sy5Z6LSDFOMea1geaEn+S4uumH
jeeCueOAggorSGVicmV3IHdvcmQ6INeR15zXqdeb16oKK0hlYnJldyBzZW50ZW5jZTog15HXnNep
15vXqiDXqdeoINeU15fXldelINeU15LXmdeR15Ug15zXlNeq16fXpNeV16og16LXnNeZ15Ug15HX
oten15HXldeqINeU16DXl9eZ15nXqteVINec15PXqNeV16kg157XlNee15XXotee15PXmdedINec
16fXldeo16Eg16bXldei16jXmdedINep15nXqNeV16og16bXkdeQ15kg15DXlSDXnNeQ15XXnteZ
OiAi15TXnteq16fXmdek15nXnSDXpteR15XXoteZ150sINee15kg16nXqNeV16bXlCDXnNeZ15nX
pteSINeQ16og15TXnteT15nXoNeUINeo15XXpteUINeS150g15zXqdeo16og15DXldeq15QiCitI
ZWJyZXcgYmxvY2s6INeR15zXqdeb16og16nXqCDXlNeX15XXpSDXlNeS15nXkdeVINec15TXqten
16TXldeqINei15zXmdeVINeR16LXp9eR15XXqiDXlNeg15fXmdeZ16rXlSDXnNeT16jXldepINee
15TXnteV16LXnteT15nXnSDXnNen15XXqNehINem15XXoteo15nXnSDXqdeZ16jXldeqINem15HX
kNeZINeQ15Ug15zXkNeV157XmTogIteU157Xqten15nXpNeZ150g16bXkdeV16LXmdedLCDXnteZ
INep16jXldem15Qg15zXmdeZ16bXkiDXkNeqINeU157Xk9eZ16DXlCDXqNeV16bXlCDXktedINec
16nXqNeqINeQ15XXqteUIgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvcmFuZ2Ut
ZXhwYW5kLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvcmFu
Z2UtZXhwYW5kLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5n
ZS9yYW5nZS1leHBhbmQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNTEgQEAKKzxodG1s
PgorPGhlYWQ+Cis8TUVUQSBIVFRQLUVRVUlWPSJDT05URU5ULVRZUEUiIENPTlRFTlQ9InRleHQv
aHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+VGVzdCBmb3IgUmFuZ2UuZXhwYW5kKCk8L3Rp
dGxlPgorPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhzdHIpIHsKKyAgICB2YXIgbGkgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJsaSIpOworICAgIGxpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKHN0cikpOworICAgIHZhciBjb25zb2xlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNvbnNvbGUiKTsKKyAgICBjb25zb2xlLmFwcGVuZENoaWxkKGxpKTsKK30KKworZnVuY3Rp
b24gdGVzdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgbG9nKCI9PT09PT09
PT0gUkVTVUxUID09PT09PT09PT09PT09PT09PT09PT09PT09Iik7CisgICAgLy8gdGVzdCAxIC0g
RXhwYW5kIHRvIGRvY3VtZW50LgorICAgIHZhciByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdl
KCk7CisgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXlzcGFuIik7Cisg
ICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgMCk7CisgICAgcmFuZ2Uuc2V0RW5kKG5vZGUsIDApOwor
ICAgIHJhbmdlLmV4cGFuZCgnZG9jdW1lbnQnKTsKKyAgICBsb2coImRvY3VtZW50MTogIiArIHJh
bmdlLnRvU3RyaW5nKCkpOworCisgICAgLy8gdGVzdCAyIC0gRXhwYW5kIHRvIGJsb2NrLgorICAg
IHZhciBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRkX0ExIik7CisgICAgcmFuZ2Uu
c2V0U3RhcnQobm9kZSwgMCk7CisgICAgcmFuZ2Uuc2V0RW5kKG5vZGUsIDApOworICAgIHJhbmdl
LmV4cGFuZCgnYmxvY2snKTsKKyAgICBsb2coImJsb2NrMjogIiArIHJhbmdlLnRvU3RyaW5nKCkp
OworCisgICAgLy8gdGVzdCAzIC0gRXhwYW5kIHRvIGJsb2NrLCBkaWZmZXJlbnQgcmFuZ2Ugc3Rh
cnQgYW5kIGVuZCBvZmZzZXQuCisgICAgbm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0
ZF9BMSIpLmZpcnN0Q2hpbGQ7CisgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgMSk7CisgICAgcmFu
Z2Uuc2V0RW5kKG5vZGUsIDIpOworICAgIHJhbmdlLmV4cGFuZCgnYmxvY2snKTsKKyAgICBsb2co
ImJsb2NrMzogIiArIHJhbmdlLnRvU3RyaW5nKCkpOworCisgICAgLy8gdGVzdCA0IC0gRXhwYW5k
IHRvIGJsb2NrLCBkaWZmZXJlbnQgcmFuZ2Ugc3RhcnQgYW5kIGVuZCBub2RlLgorICAgIG5vZGUg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGRfQTEiKTsKKyAgICB2YXIgZW5kTm9kZSA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZF9CMSIpOworICAgIHJhbmdlLnNldFN0YXJ0KG5vZGUs
IDApOworICAgIHJhbmdlLnNldEVuZChlbmROb2RlLCAwKTsKKyAgICByYW5nZS5leHBhbmQoJ2Js
b2NrJyk7CisgICAgbG9nKCJibG9jazQ6ICIgKyByYW5nZS50b1N0cmluZygpKTsKKworICAgIC8v
IHRlc3QgNSAtIEV4cGFuZCB0byBzZW50ZW5jZS4KKyAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImluc3RydWN0aW9ucyIpOworICAgIHJhbmdlLnNldFN0YXJ0KG5vZGUsIDApOwor
ICAgIHJhbmdlLnNldEVuZChub2RlLCAwKTsKKyAgICByYW5nZS5leHBhbmQoJ3NlbnRlbmNlJyk7
CisgICAgbG9nKCJzZW50ZW5jZTU6ICIgKyByYW5nZS50b1N0cmluZygpKTsKKworICAgIC8vIHRl
c3QgNiAtIEV4cGFuZCB0byBzZW50ZW5jZSwgZGlmZmVyZW50IHJhbmdlIHN0YXJ0IGFuZCBlbmQg
b2Zmc2V0LgorICAgIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW5zdHJ1Y3Rpb25z
IikuZmlyc3RDaGlsZDsKKyAgICByYW5nZS5zZXRTdGFydChub2RlLCAxKTsKKyAgICByYW5nZS5z
ZXRFbmQobm9kZSwgMik7CisgICAgcmFuZ2UuZXhwYW5kKCdzZW50ZW5jZScpOworICAgIGxvZygi
c2VudGVuY2U2OiAiICsgcmFuZ2UudG9TdHJpbmcoKSk7CisKKyAgICAvLyB0ZXN0IDcgLSBFeHBh
bmQgdG8gc2VudGVuY2UsIGRpZmZlcmVudCByYW5nZSBzdGFydCBhbmQgZW5kIG5vZGUuCisgICAg
bm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbnN0cnVjdGlvbnMiKTsKKyAgICBlbmRO
b2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm15YnIiKTsKKyAgICByYW5nZS5zZXRTdGFy
dChub2RlLCAwKTsKKyAgICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgMCk7CisgICAgcmFuZ2UuZXhw
YW5kKCdzZW50ZW5jZScpOworICAgIGxvZygic2VudGVuY2U3OiAiICsgcmFuZ2UudG9TdHJpbmco
KSk7CisKKyAgICAvLyB0ZXN0IDggLSBTZW50ZW5jZSBkb2VzIG5vdCBnbyB1cHN0cmVhbT8KKyAg
ICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm11bHRpbGluZVNlbnRlbmNlIik7Cisg
ICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgMCk7CisgICAgcmFuZ2Uuc2V0RW5kKG5vZGUsIDApOwor
ICAgIHJhbmdlLmV4cGFuZCgnc2VudGVuY2UnKTsKKyAgICBsb2coInNlbnRlbmNlODogIiArIHJh
bmdlLnRvU3RyaW5nKCkpOworICAgIAorICAgIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgibXVsdGlsaW5lU2VudGVuY2UiKS5maXJzdENoaWxkOworICAgIHJhbmdlLnNldFN0YXJ0KG5v
ZGUsIDEpOworICAgIHJhbmdlLnNldEVuZChub2RlLCA1KTsKKyAgICByYW5nZS5leHBhbmQoJ3Nl
bnRlbmNlJyk7CisgICAgbG9nKCJzZW50ZW5jZTk6ICIgKyByYW5nZS50b1N0cmluZygpKTsKKyAg
ICAKKyAgICByYW5nZS5zZXRTdGFydChub2RlLCAyMCk7CisgICAgcmFuZ2Uuc2V0RW5kKG5vZGUs
IDIwKTsKKyAgICByYW5nZS5leHBhbmQoJ3NlbnRlbmNlJyk7CisgICAgbG9nKCJzZW50ZW5jZTEw
OiAiICsgcmFuZ2UudG9TdHJpbmcoKSk7CisgICAgCisgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwg
NDApOworICAgIHJhbmdlLnNldEVuZChub2RlLCA0MCk7CisgICAgcmFuZ2UuZXhwYW5kKCdzZW50
ZW5jZScpOworICAgIGxvZygic2VudGVuY2UxMTogIiArIHJhbmdlLnRvU3RyaW5nKCkpOworICAg
IAorICAgIC8vIEV4cGFuZCB3b3JkLgorICAgIC8vIFNhbWUgcmFuZ2Ugc3RhcnQgYW5kIGVuZCwg
Ym90aCBhdCB0aGUgYmVnaW4gb2Ygd29yZC4KKyAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoIm15ZGl2Iik7CisgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgMCk7CisgICAgcmFuZ2Uu
c2V0RW5kKG5vZGUsIDApOworICAgIHJhbmdlLmV4cGFuZCgnd29yZCcpOworICAgIGxvZygid29y
ZDE6ICIgKyByYW5nZS50b1N0cmluZygpKTsKKyAgICAKKyAgICAvLyBTYW1lIHJhbmdlIHN0YXJ0
IGFuZCBlbmQsIGJvdGggYXQgdGhlIGJlZ2luIG9mIGEgd29yZC4KKyAgICBub2RlID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoIm15ZGl2IikuZmlyc3RDaGlsZDsKKyAgICByYW5nZS5zZXRTdGFy
dChub2RlLCAxKTsKKyAgICByYW5nZS5zZXRFbmQobm9kZSwgMSk7CisgICAgcmFuZ2UuZXhwYW5k
KCd3b3JkJyk7CisgICAgbG9nKCJ3b3JkMjogIiArIHJhbmdlLnRvU3RyaW5nKCkpOworICAgIAor
ICAgIC8vIFNhbWUgcmFuZ2Ugc3RhcnQgYW5kIGVuZCwgYm90aCBhdCB0aGUgbWlkZGxlIG9mIGEg
d29yZC4KKyAgICByYW5nZS5zZXRTdGFydChub2RlLCAzKTsKKyAgICByYW5nZS5zZXRFbmQobm9k
ZSwgMyk7CisgICAgcmFuZ2UuZXhwYW5kKCd3b3JkJyk7CisgICAgbG9nKCJ3b3JkMzogIiArIHJh
bmdlLnRvU3RyaW5nKCkpOworICAgIAorICAgIC8vIFNhbWUgcmFuZ2Ugc3RhcnQgYW5kIGVuZCwg
Ym90aCBhdCB0aGUgZW5kIG9mIGEgd29yZC4KKyAgICByYW5nZS5zZXRTdGFydChub2RlLCA0KTsK
KyAgICByYW5nZS5zZXRFbmQobm9kZSwgNCk7CisgICAgcmFuZ2UuZXhwYW5kKCd3b3JkJyk7Cisg
ICAgbG9nKCJ3b3JkNDogIiArIHJhbmdlLnRvU3RyaW5nKCkpOworICAgIAorICAgIC8vIERpZmZl
cmVudCByYW5nZSBzdGFydCBhbmQgZW5kIG9mZnNldCwgYm90aCBhdCB0aGUgbWlkZGxlIG9mIGEg
d29yZC4KKyAgICByYW5nZS5zZXRTdGFydChub2RlLCAyKTsKKyAgICByYW5nZS5zZXRFbmQobm9k
ZSwgMyk7CisgICAgcmFuZ2UuZXhwYW5kKCd3b3JkJyk7CisgICAgbG9nKCJ3b3JkNTogIiArIHJh
bmdlLnRvU3RyaW5nKCkpOworICAgCisgICAgLy8gRGlmZmVyZW50IHJhbmdlIHN0YXJ0IGFuZCBl
bmQgb2Zmc2V0LCBzdGFydCBhdCB0aGUgYmVnaW4gb2YgYSB3b3JkLAorICAgIC8vIGFuZCBlbmQg
YXQgdGhlIGVuZCBvZiBhIHdvcmQuCisgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgMSk7CisgICAg
cmFuZ2Uuc2V0RW5kKG5vZGUsIDQpOworICAgIHJhbmdlLmV4cGFuZCgnd29yZCcpOworICAgIGxv
Zygid29yZDY6ICIgKyByYW5nZS50b1N0cmluZygpKTsKKyAgIAorICAgIC8vIERpZmZlcmVudCBy
YW5nZSBzdGFydCBhbmQgZW5kIG9mZnNldCwgc3RhcnQgYXQgdGhlIGJlZ2luIG9mIGEgd29yZCwK
KyAgICAvLyBhbmQgZW5kIGF0IHRoZSBtaWRkbGUgb2YgYSB3b3JkLgorICAgIHJhbmdlLnNldFN0
YXJ0KG5vZGUsIDEpOworICAgIHJhbmdlLnNldEVuZChub2RlLCAzKTsKKyAgICByYW5nZS5leHBh
bmQoJ3dvcmQnKTsKKyAgICBsb2coIndvcmQ3OiAiICsgcmFuZ2UudG9TdHJpbmcoKSk7CisgICAK
KyAgICAvLyBEaWZmZXJlbnQgcmFuZ2Ugc3RhcnQgYW5kIGVuZCBvZmZzZXQsIHN0YXJ0IGF0IHRo
ZSBtaWRkbGUgb2YgYSB3b3JkLAorICAgIC8vIGFuZCBlbmQgYXQgdGhlIGVuZCBvZiBhIHdvcmQu
CisgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgMik7CisgICAgcmFuZ2Uuc2V0RW5kKG5vZGUsIDQp
OworICAgIHJhbmdlLmV4cGFuZCgnd29yZCcpOworICAgIGxvZygid29yZDg6ICIgKyByYW5nZS50
b1N0cmluZygpKTsKKyAgIAorICAgIC8vIEFjcm9zcyBtb3JlIHRoYW4gMSB3b3JkLgorICAgIC8v
IFN0YXJ0IGF0IHRoZSBiZWdpbiBvZiAxc3Qgd29yZCwgZW5kIGF0IHRoZSBlbmQgb2YgbGFzdCB3
b3JkLgorICAgIHJhbmdlLnNldFN0YXJ0KG5vZGUsIDEpOworICAgIHJhbmdlLnNldEVuZChub2Rl
LCA3KTsKKyAgICByYW5nZS5leHBhbmQoJ3dvcmQnKTsKKyAgICBsb2coIndvcmQ5OiAiICsgcmFu
Z2UudG9TdHJpbmcoKSk7CisgICAKKyAgICAvLyBTdGFydCBhdCB0aGUgbWlkZGxlIG9mIDFzdCB3
b3JkLCBlbmQgYXQgdGhlIG1pZGRsZSBvZiBsYXN0IHdvcmQuCisgICAgcmFuZ2Uuc2V0U3RhcnQo
bm9kZSwgMik7CisgICAgcmFuZ2Uuc2V0RW5kKG5vZGUsIDYpOworICAgIHJhbmdlLmV4cGFuZCgn
d29yZCcpOworICAgIGxvZygid29yZDEwOiAiICsgcmFuZ2UudG9TdHJpbmcoKSk7CisKKyAgICAv
LyBTdGFydCBhdCB0aGUgYmVnaW4gb2YgMXN0IHdvcmQsIGVuZCBhdCB0aGUgbWlkZGxlIG9mIGxh
c3Qgd29yZC4KKyAgICByYW5nZS5zZXRTdGFydChub2RlLCAxKTsKKyAgICByYW5nZS5zZXRFbmQo
bm9kZSwgNik7CisgICAgcmFuZ2UuZXhwYW5kKCd3b3JkJyk7CisgICAgbG9nKCJ3b3JkMTE6ICIg
KyByYW5nZS50b1N0cmluZygpKTsKKworICAgIC8vIFN0YXJ0IGF0IHRoZSBtaWRkbGUgb2YgMXN0
IHdvcmQsIGVuZCBhdCB0aGUgZW5kIG9mIGxhc3Qgd29yZC4KKyAgICByYW5nZS5zZXRTdGFydChu
b2RlLCAyKTsKKyAgICByYW5nZS5zZXRFbmQobm9kZSwgNyk7CisgICAgcmFuZ2UuZXhwYW5kKCd3
b3JkJyk7CisgICAgbG9nKCJ3b3JkMTI6ICIgKyByYW5nZS50b1N0cmluZygpKTsKKworICAgIC8v
IFdvcmQgYW5kIHNwYWNlLgorICAgIHJhbmdlLnNldFN0YXJ0KG5vZGUsIDQpOworICAgIHJhbmdl
LnNldEVuZChub2RlLCA1KTsKKyAgICByYW5nZS5leHBhbmQoJ3dvcmQnKTsKKyAgICBsb2coIndv
cmQxMzogIiArIHJhbmdlLnRvU3RyaW5nKCkpOworCisgICAgLy8gV29yZCBhY3Jvc3MgZGlmZmVy
ZW50IG5vZGVzLgorICAgIGVuZE5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGUtZGl2
Iik7CisgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgMSk7CisgICAgcmFuZ2Uuc2V0RW5kKGVuZE5v
ZGUsIDApOworICAgIHJhbmdlLmV4cGFuZCgnd29yZCcpOworICAgIGxvZygid29yZDE0OiAiICsg
cmFuZ2UudG9TdHJpbmcoKSk7CisKKyAgICAvLyBUZXN0IGZvciBDaGluZXNlLiBObyBDaGluZXNl
IHNlZ21lbnRhdGlvbiBpbiBwbGF0Zm9ybS9tYWMuCisgICAgbm9kZSA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJ6aC1DTi1kaXYiKS5maXJzdENoaWxkOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgMzsgKytpKSB7CisgICAgICAgIHJhbmdlLnNldFN0YXJ0KG5vZGUsIGkpOworICAgICAgICBy
YW5nZS5zZXRFbmQobm9kZSwgaSk7CisgICAgICAgIHJhbmdlLmV4cGFuZCgnd29yZCcpOworICAg
ICAgICBsb2coIkNoaW5lc2Ugd29yZCIgKyBpICsgIjogIiArIHJhbmdlLnRvU3RyaW5nKCkpOwor
ICAgIH0KKworICAgIHJhbmdlLmV4cGFuZCgnc2VudGVuY2UnKTsKKyAgICBsb2coIkNoaW5lc2Ug
c2VudGVuY2U6ICIgKyByYW5nZS50b1N0cmluZygpKTsKKworICAgIHJhbmdlLmV4cGFuZCgnYmxv
Y2snKTsKKyAgICBsb2coIkNoaW5lc2UgYmxvY2s6ICIgKyByYW5nZS50b1N0cmluZygpKTsKKwor
ICAgIC8vIFRlc3QgZm9yIEhlYnJldy4KKyAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImhlLWRpdiIpLmZpcnN0Q2hpbGQ7CisgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgMSk7Cisg
ICAgcmFuZ2Uuc2V0RW5kKG5vZGUsIDEpOworICAgIHJhbmdlLmV4cGFuZCgnd29yZCcpOworICAg
IGxvZygiSGVicmV3IHdvcmQ6ICIgKyByYW5nZS50b1N0cmluZygpKTsKKworICAgIHJhbmdlLmV4
cGFuZCgnc2VudGVuY2UnKTsKKyAgICBsb2coIkhlYnJldyBzZW50ZW5jZTogIiArIHJhbmdlLnRv
U3RyaW5nKCkpOworCisgICAgbm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoZS1kaXYi
KTsKKyAgICByYW5nZS5zZXRTdGFydChub2RlLCAwKTsKKyAgICByYW5nZS5zZXRFbmQobm9kZSwg
MCk7CisgICAgcmFuZ2UuZXhwYW5kKCdibG9jaycpOworICAgIGxvZygiSGVicmV3IGJsb2NrOiAi
ICsgcmFuZ2UudG9TdHJpbmcoKSk7Cit9Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0idGVzdCgp
Ij4KKzxwPlRoaXMgaXMgdGhlIGJlZ2luIG9mIGEgYmxvY2suIEEgYmxvY2sgaXMgYSBjb2xsZWN0
aW9uIG9mIHNlbnRlbmNlcy4gRWFjaCBzZW50ZW5jZSBiZWdpbnMgd2l0aCBjYXBpdGFsCitsZXR0
ZXIgYW5kIGVuZHMgd2l0aCBhIHB1bmN0dWF0aW9uLgorPC9wPgorPHAgaWQ9Im11bHRpbGluZVNl
bnRlbmNlIj5Ob3csIGEgc2VudGVuY2UKK2lzIGRpdmlkZWQgaW50bworbXVsdGlwbGUgbGluZXMu
Cis8L3A+Cis8cCBpZD0iaW5zdHJ1Y3Rpb25zIj5Sb2xsIHRoZSBtb3VzZSBhcm91bmQgdGhlIHBh
Z2UuIFRoZSBjb29yZGluYXRlcworb2YgdGhlIG1vdXNlIHBvaW50ZXIgYXJlIGN1cnJlbnRseSBh
dG9wIGFuIGVsZW1lbnQ8YnIgaWQ9Im15YnIiPndob3NlIElEIAoraXM6IjxzcGFuIGlkPSJteXNw
YW4iIHN0eWxlPSJmb250LXdlaWdodDpib2xkIj48L3NwYW4+Ii48L3A+CisKKzx0YWJsZSBib3Jk
ZXI9MSBpZD0ibXlUYWJsZSI+Cis8dHIgaWQ9InRyMSI+CisgICAgPHRkIGlkPSJ0ZF9BMSI+Q2Vs
bCBBMTwvdGQ+CisgICAgPHRkIGlkPSJ0ZF9CMSI+Q2VsbCBCMTwvdGQ+Cis8L3RyPgorPHRyIGlk
PSJ0cjIiPgorICAgIDx0ZCBpZD0idGRfQTIiPkNlbGwgQTI8L3RkPgorICAgIDx0ZCBpZD0idGRf
QjIiPkNlbGwgQjI8L3RkPgorPC90cj4KKzwvdGFibGU+Cis8aDIgaWQ9InNlYzEiPlNlY3Rpb24g
MTwvaDI+Cis8cCBpZD0icDEiPnRleHQuPC9wPgorPGgyIGlkPSJzZWMyIj5TZWN0aW9uIDI8L2gy
PgorPHAgaWQ9InAyIj50ZXh0LjwvcD4KKzxkaXYgaWQ9Im15ZGl2IiBzdHlsZT0icG9zaXRpb246
YWJzb2x1dGU7IHRvcDozNDA7IGxlZnQ6MzAwOyBiYWNrZ3JvdW5kLWNvbG9yOnllbGxvdyI+CitI
ZXJlIGlzIGEgcG9zaXRpb25lZCBlbGVtZW50LjwvZGl2PgorPGRpdiBpZD0iemgtQ04tZGl2Ij7l
nKjnlLLlnotIMU4x5rWB5oSf5Y+v6IO95Ye6546w5aSn5rWB6KGM55qE6K2m5ZGK5aOw5Lit77yM
5pio5aSp5Y+s5byA55qE5rGf6IuP55yBMjAwOS0yMDEw5bm05bqm5rWB5oSf6Ziy5Yi256CU6K6o
5Lya5rOo5a6a5LiO5b6A5bm05LiN5ZCM44CC5q+P5bm06YO95Lya5Y+s5byA55qE5LiA5qyh5L6L
5Lya77yM5LuK5bm06Laz6Laz5o+Q5YmN5LqG5LiA5Liq5pyI77yb5Lya5LiK56CU6K6o55qE5Li7
6aKY77yM5bey5LuO5Lul5YmN55qE5a2j6IqC5oCn5rWB5oSf77yM5Y+Y5oiQ5Lul55Sy5Z6LSDFO
Mea1geaEn+S4uumHjeeCueOAgjwvZGl2PgorPGRpdiBpZD0iaGUtZGl2Ij7Xkdec16nXm9eqINep
16gg15TXl9eV16Ug15TXkteZ15HXlSDXnNeU16rXp9ek15XXqiDXotec15nXlSDXkdei16fXkdeV
16og15TXoNeX15nXmdeq15Ug15zXk9eo15XXqSDXnteU157Xldei157Xk9eZ150g15zXp9eV16jX
oSDXpteV16LXqNeZ150g16nXmdeo15XXqiDXpteR15DXmSDXkNeVINec15DXldee15k6ICLXlNee
16rXp9eZ16TXmdedINem15HXldei15nXnSwg157XmSDXqdeo15XXpteUINec15nXmdem15Ig15DX
qiDXlNee15PXmdeg15Qg16jXldem15Qg15LXnSDXnNep16jXqiDXkNeV16rXlCI8L2Rpdj4KKzx1
bCBpZD0iY29uc29sZSI+PC91bD4KKworPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiA0NzYzOSkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRv
dy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEyMTIs
NiArMTIxMiw3IEBAIHdpbmRvdy5SYW5nZS5wcm90b3R5cGUuY29tcGFyZVBvaW50IFtmdW4KIHdp
bmRvdy5SYW5nZS5wcm90b3R5cGUuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IFtmdW5jdGlvbl0K
IHdpbmRvdy5SYW5nZS5wcm90b3R5cGUuZGVsZXRlQ29udGVudHMgW2Z1bmN0aW9uXQogd2luZG93
LlJhbmdlLnByb3RvdHlwZS5kZXRhY2ggW2Z1bmN0aW9uXQord2luZG93LlJhbmdlLnByb3RvdHlw
ZS5leHBhbmQgW2Z1bmN0aW9uXQogd2luZG93LlJhbmdlLnByb3RvdHlwZS5leHRyYWN0Q29udGVu
dHMgW2Z1bmN0aW9uXQogd2luZG93LlJhbmdlLnByb3RvdHlwZS5pbnNlcnROb2RlIFtmdW5jdGlv
bl0KIHdpbmRvdy5SYW5nZS5wcm90b3R5cGUuaW50ZXJzZWN0c05vZGUgW2Z1bmN0aW9uXQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38625</attachid>
            <date>2009-08-26 11:32:18 -0700</date>
            <delta_ts>2009-09-10 14:16:43 -0700</delta_ts>
            <desc>patch w/ layout test</desc>
            <filename>27632.v4</filename>
            <type>text/plain</type>
            <size>17896</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzczNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMDktMDgtMjQgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxt
ZW50IFJhbmdlLmV4cGFuZCgpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Mjc2MzIKKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9SYW5nZS9yYW5nZS1l
eHBhbmQuaHRtbAorCisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJhbmdlOjpleHBhbmQpOgorICAgICAgICAqIGRvbS9SYW5nZS5oOgorICAgICAgICAqIGRvbS9S
YW5nZS5pZGw6CisKIDIwMDktMDgtMjQgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYkNvcmUvZG9t
L1JhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHJldmlzaW9u
IDQ3NjM5KQorKysgV2ViQ29yZS9kb20vUmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2
ICszMyw3IEBACiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgog
I2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgorI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAj
aW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgogI2luY2x1ZGUg
PHN0ZGlvLmg+CkBAIC0xNzk4LDQgKzE3OTksMjYgQEAgdm9pZCBSYW5nZTo6dGV4dE5vZGVTcGxp
dChUZXh0KiBvbGROb2RlKQogICAgIGJvdW5kYXJ5VGV4dE5vZGVzU3BsaXQobV9lbmQsIG9sZE5v
ZGUpOwogfQogCit2b2lkIFJhbmdlOjpleHBhbmQoY29uc3QgU3RyaW5nJiB1bml0LCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc3RhcnRQb3NpdGlvbigp
KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kKGVuZFBvc2l0aW9uKCkpOworICAgIGlmICh1bml0
ID09ICJ3b3JkIikgeworICAgICAgICBzdGFydCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0KTsKKyAgICAg
ICAgZW5kID0gZW5kT2ZXb3JkKGVuZCk7CisgICAgfSBlbHNlIGlmICh1bml0ID09ICJzZW50ZW5j
ZSIpIHsKKyAgICAgICAgc3RhcnQgPSBzdGFydE9mU2VudGVuY2Uoc3RhcnQpOworICAgICAgICBl
bmQgPSBlbmRPZlNlbnRlbmNlKGVuZCk7CisgICAgfSBlbHNlIGlmICh1bml0ID09ICJibG9jayIp
IHsKKyAgICAgICAgc3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHN0YXJ0KTsKKyAgICAgICAgZW5k
ID0gZW5kT2ZQYXJhZ3JhcGgoZW5kKTsKKyAgICB9IGVsc2UgaWYgKHVuaXQgPT0gImRvY3VtZW50
IikgeworICAgICAgICBzdGFydCA9IHN0YXJ0T2ZEb2N1bWVudChzdGFydCk7CisgICAgICAgIGVu
ZCA9IGVuZE9mRG9jdW1lbnQoZW5kKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuOworICAg
IHNldFN0YXJ0KHN0YXJ0LmNvbnRhaW5lck5vZGUoKSwgc3RhcnQuY29tcHV0ZU9mZnNldEluQ29u
dGFpbmVyTm9kZSgpLCBlYyk7CisgICAgc2V0RW5kKGVuZC5jb250YWluZXJOb2RlKCksIGVuZC5j
b21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKK30KKwogfQpJbmRleDogV2ViQ29y
ZS9kb20vUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9SYW5nZS5oCShyZXZpc2lv
biA0NzYzOSkKKysrIFdlYkNvcmUvZG9tL1JhbmdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMiw2
ICsxMTIsMTEgQEAgcHVibGljOgogICAgIHZvaWQgdGV4dE5vZGVzTWVyZ2VkKE5vZGVXaXRoSW5k
ZXgmIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCk7CiAgICAgdm9pZCB0ZXh0Tm9kZVNwbGl0KFRl
eHQqIG9sZE5vZGUpOwogCisgICAgLy8gRXhwYW5kIHJhbmdlIHRvIGEgdW5pdCAod29yZCBvciBz
ZW50ZW5jZSBvciBibG9jayBvciBkb2N1bWVudCkgYm91bmRhcnkuCisgICAgLy8gUGxlYXNlIHJl
ZmVyIHRvIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzYzMiBjb21t
ZW50ICM1IAorICAgIC8vIGZvciBkZXRhaWxzLgorICAgIHZvaWQgZXhwYW5kKGNvbnN0IFN0cmlu
ZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKwogI2lmbmRlZiBOREVCVUcKICAgICB2b2lkIGZvcm1hdEZv
ckRlYnVnZ2VyKGNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKICNlbmRpZgpJ
bmRleDogV2ViQ29yZS9kb20vUmFuZ2UuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1Jh
bmdlLmlkbAkocmV2aXNpb24gNDc2MzkpCisrKyBXZWJDb3JlL2RvbS9SYW5nZS5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTExMiw2ICsxMTIsOSBAQCBtb2R1bGUgcmFuZ2VzIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbiBsb25nIG9mZnNldCkKICAgICAgICAgICAgIHJhaXNlcyhS
YW5nZUV4Y2VwdGlvbiwgRE9NRXhjZXB0aW9uKTsKIAorICAgICAgICB2b2lkIGV4cGFuZChpbiBE
T01TdHJpbmcgdW5pdCkKKyAgICAgICAgICAgIHJhaXNlcyhSYW5nZUV4Y2VwdGlvbiwgRE9NRXhj
ZXB0aW9uKTsKKwogI2lmICFkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpIHx8ICFMQU5HVUFH
RV9KQVZBU0NSSVBUCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdGV4dDsK
ICNlbmRpZgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDc3MzcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAwOS0wOC0yNCAgWGlhb21laSBK
aSAgPHhqaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW1wbGVtZW50IFJhbmdlLmV4cGFuZCgpLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc2MzIKKworICAgICAgICAqIGZhc3Qv
ZG9tL1JhbmdlL3JhbmdlLWV4cGFuZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvZG9tL1JhbmdlL3JhbmdlLWV4cGFuZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Rv
bS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0OgorCiAyMDA5LTA4LTI0ICBB
bGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvcmFuZ2UtZXhw
YW5kLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5n
ZS9yYW5nZS1leHBhbmQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9kb20vUmFuZ2UvcmFuZ2UtZXhwYW5kLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1NCBAQAorVGhpcyBpcyB0aGUgYmVnaW4gb2YgYSBibG9jay4gQSBibG9jayBpcyBh
IGNvbGxlY3Rpb24gb2Ygc2VudGVuY2VzLiBFYWNoIHNlbnRlbmNlIGJlZ2lucyB3aXRoIGNhcGl0
YWwgbGV0dGVyIGFuZCBlbmRzIHdpdGggYSBwdW5jdHVhdGlvbi4KKworTm93LCBhIHNlbnRlbmNl
IGlzIGRpdmlkZWQgaW50byBtdWx0aXBsZSBsaW5lcy4KKworUm9sbCB0aGUgbW91c2UgYXJvdW5k
IHRoZSBwYWdlLiBUaGUgY29vcmRpbmF0ZXMgb2YgdGhlIG1vdXNlIHBvaW50ZXIgYXJlIGN1cnJl
bnRseSBhdG9wIGFuIGVsZW1lbnQKK3dob3NlIElEIGlzOiIiLgorCitDZWxsIEExCUNlbGwgQjEK
K0NlbGwgQTIJQ2VsbCBCMgorU2VjdGlvbiAxCisKK3RleHQuCisKK1NlY3Rpb24gMgorCit0ZXh0
LgorCitIZXJlIGlzIGEgcG9zaXRpb25lZCBlbGVtZW50Lgor5Zyo55Sy5Z6LSDFOMea1geaEn+WP
r+iDveWHuueOsOWkp+a1geihjOeahOitpuWRiuWjsOS4re+8jOaYqOWkqeWPrOW8gOeahOaxn+iL
j+ecgTIwMDktMjAxMOW5tOW6pua1geaEn+mYsuWItueglOiuqOS8muazqOWumuS4juW+gOW5tOS4
jeWQjOOAguavj+W5tOmDveS8muWPrOW8gOeahOS4gOasoeS+i+S8mu+8jOS7iuW5tOi2s+i2s+aP
kOWJjeS6huS4gOS4quaciO+8m+S8muS4iueglOiuqOeahOS4u+mimO+8jOW3suS7juS7peWJjeea
hOWto+iKguaAp+a1geaEn++8jOWPmOaIkOS7peeUsuWei0gxTjHmtYHmhJ/kuLrph43ngrnjgIIK
K9eR15zXqdeb16og16nXqCDXlNeX15XXpSDXlNeS15nXkdeVINec15TXqten16TXldeqINei15zX
mdeVINeR16LXp9eR15XXqiDXlNeg15fXmdeZ16rXlSDXnNeT16jXldepINee15TXnteV16LXnteT
15nXnSDXnNen15XXqNehINem15XXoteo15nXnSDXqdeZ16jXldeqINem15HXkNeZINeQ15Ug15zX
kNeV157XmTogIteU157Xqten15nXpNeZ150g16bXkdeV16LXmdedLCDXnteZINep16jXldem15Qg
15zXmdeZ16bXkiDXkNeqINeU157Xk9eZ16DXlCDXqNeV16bXlCDXktedINec16nXqNeqINeQ15XX
qteUIgorPT09PT09PT09IFJFU1VMVCA9PT09PT09PT09PT09PT09PT09PT09PT09PQorZG9jdW1l
bnQxOiBUaGlzIGlzIHRoZSBiZWdpbiBvZiBhIGJsb2NrLiBBIGJsb2NrIGlzIGEgY29sbGVjdGlv
biBvZiBzZW50ZW5jZXMuIEVhY2ggc2VudGVuY2UgYmVnaW5zIHdpdGggY2FwaXRhbCBsZXR0ZXIg
YW5kIGVuZHMgd2l0aCBhIHB1bmN0dWF0aW9uLiBOb3csIGEgc2VudGVuY2UgaXMgZGl2aWRlZCBp
bnRvIG11bHRpcGxlIGxpbmVzLiBSb2xsIHRoZSBtb3VzZSBhcm91bmQgdGhlIHBhZ2UuIFRoZSBj
b29yZGluYXRlcyBvZiB0aGUgbW91c2UgcG9pbnRlciBhcmUgY3VycmVudGx5IGF0b3AgYW4gZWxl
bWVudHdob3NlIElEIGlzOiIiLiBDZWxsIEExIENlbGwgQjEgQ2VsbCBBMiBDZWxsIEIyIFNlY3Rp
b24gMSB0ZXh0LiBTZWN0aW9uIDIgdGV4dC4gSGVyZSBpcyBhIHBvc2l0aW9uZWQgZWxlbWVudC4g
5Zyo55Sy5Z6LSDFOMea1geaEn+WPr+iDveWHuueOsOWkp+a1geihjOeahOitpuWRiuWjsOS4re+8
jOaYqOWkqeWPrOW8gOeahOaxn+iLj+ecgTIwMDktMjAxMOW5tOW6pua1geaEn+mYsuWItueglOiu
qOS8muazqOWumuS4juW+gOW5tOS4jeWQjOOAguavj+W5tOmDveS8muWPrOW8gOeahOS4gOasoeS+
i+S8mu+8jOS7iuW5tOi2s+i2s+aPkOWJjeS6huS4gOS4quaciO+8m+S8muS4iueglOiuqOeahOS4
u+mimO+8jOW3suS7juS7peWJjeeahOWto+iKguaAp+a1geaEn++8jOWPmOaIkOS7peeUsuWei0gx
TjHmtYHmhJ/kuLrph43ngrnjgIIg15HXnNep15vXqiDXqdeoINeU15fXldelINeU15LXmdeR15Ug
15zXlNeq16fXpNeV16og16LXnNeZ15Ug15HXoten15HXldeqINeU16DXl9eZ15nXqteVINec15PX
qNeV16kg157XlNee15XXotee15PXmdedINec16fXldeo16Eg16bXldei16jXmdedINep15nXqNeV
16og16bXkdeQ15kg15DXlSDXnNeQ15XXnteZOiAi15TXnteq16fXmdek15nXnSDXpteR15XXoteZ
150sINee15kg16nXqNeV16bXlCDXnNeZ15nXpteSINeQ16og15TXnteT15nXoNeUINeo15XXpteU
INeS150g15zXqdeo16og15DXldeq15QiID09PT09PT09PSBSRVNVTFQgPT09PT09PT09PT09PT09
PT09PT09PT09PT0KK2Jsb2NrMjogQ2VsbCBBMQorYmxvY2szOiBDZWxsIEExCitibG9jazQ6IENl
bGwgQTEgQ2VsbCBCMQorc2VudGVuY2U1OiBSb2xsIHRoZSBtb3VzZSBhcm91bmQgdGhlIHBhZ2Uu
CitzZW50ZW5jZTY6IFJvbGwgdGhlIG1vdXNlIGFyb3VuZCB0aGUgcGFnZS4KK3NlbnRlbmNlNzog
Um9sbCB0aGUgbW91c2UgYXJvdW5kIHRoZSBwYWdlLiBUaGUgY29vcmRpbmF0ZXMgb2YgdGhlIG1v
dXNlIHBvaW50ZXIgYXJlIGN1cnJlbnRseSBhdG9wIGFuIGVsZW1lbnQKK3NlbnRlbmNlODogTm93
LCBhIHNlbnRlbmNlIGlzIGRpdmlkZWQgaW50byBtdWx0aXBsZSBsaW5lcy4KK3NlbnRlbmNlOTog
Tm93LCBhIHNlbnRlbmNlIGlzIGRpdmlkZWQgaW50byBtdWx0aXBsZSBsaW5lcy4KK3NlbnRlbmNl
MTA6IGlzIGRpdmlkZWQgaW50byBtdWx0aXBsZSBsaW5lcy4KK3NlbnRlbmNlMTE6IG11bHRpcGxl
IGxpbmVzLgord29yZDE6IEhlcmUKK3dvcmQyOiBIZXJlCit3b3JkMzogSGVyZQord29yZDQ6IEhl
cmUKK3dvcmQ1OiBIZXJlCit3b3JkNjogSGVyZQord29yZDc6IEhlcmUKK3dvcmQ4OiBIZXJlCit3
b3JkOTogSGVyZSBpcword29yZDEwOiBIZXJlIGlzCit3b3JkMTE6IEhlcmUgaXMKK3dvcmQxMjog
SGVyZSBpcword29yZDEzOiBIZXJlCit3b3JkMTQ6IEhlcmUgaXMgYSBwb3NpdGlvbmVkIGVsZW1l
bnQuIOWcqOeUsuWei0gxTjHmtYHmhJ/lj6/og73lh7rnjrDlpKfmtYHooYznmoTorablkYrlo7Dk
uK3vvIzmmKjlpKnlj6zlvIDnmoTmsZ/oi4/nnIEyMDA5LTIwMTDlubTluqbmtYHmhJ/pmLLliLbn
oJTorqjkvJrms6jlrprkuI7lvoDlubTkuI3lkIzjgILmr4/lubTpg73kvJrlj6zlvIDnmoTkuIDm
rKHkvovkvJrvvIzku4rlubTotrPotrPmj5DliY3kuobkuIDkuKrmnIjvvJvkvJrkuIrnoJTorqjn
moTkuLvpopjvvIzlt7Lku47ku6XliY3nmoTlraPoioLmgKfmtYHmhJ/vvIzlj5jmiJDku6XnlLLl
notIMU4x5rWB5oSf5Li66YeN54K544CCINeR15zXqdeb16oKK0NoaW5lc2Ugd29yZDA6IOWcqAor
Q2hpbmVzZSB3b3JkMTog55SyCitDaGluZXNlIHdvcmQyOiDlnosKK0NoaW5lc2Ugc2VudGVuY2U6
IOWcqOeUsuWei0gxTjHmtYHmhJ/lj6/og73lh7rnjrDlpKfmtYHooYznmoTorablkYrlo7DkuK3v
vIzmmKjlpKnlj6zlvIDnmoTmsZ/oi4/nnIEyMDA5LTIwMTDlubTluqbmtYHmhJ/pmLLliLbnoJTo
rqjkvJrms6jlrprkuI7lvoDlubTkuI3lkIzjgIIKK0NoaW5lc2UgYmxvY2s6IOWcqOeUsuWei0gx
TjHmtYHmhJ/lj6/og73lh7rnjrDlpKfmtYHooYznmoTorablkYrlo7DkuK3vvIzmmKjlpKnlj6zl
vIDnmoTmsZ/oi4/nnIEyMDA5LTIwMTDlubTluqbmtYHmhJ/pmLLliLbnoJTorqjkvJrms6jlrprk
uI7lvoDlubTkuI3lkIzjgILmr4/lubTpg73kvJrlj6zlvIDnmoTkuIDmrKHkvovkvJrvvIzku4rl
ubTotrPotrPmj5DliY3kuobkuIDkuKrmnIjvvJvkvJrkuIrnoJTorqjnmoTkuLvpopjvvIzlt7Lk
u47ku6XliY3nmoTlraPoioLmgKfmtYHmhJ/vvIzlj5jmiJDku6XnlLLlnotIMU4x5rWB5oSf5Li6
6YeN54K544CCCitIZWJyZXcgd29yZDog15HXnNep15vXqgorSGVicmV3IHNlbnRlbmNlOiDXkdec
16nXm9eqINep16gg15TXl9eV16Ug15TXkteZ15HXlSDXnNeU16rXp9ek15XXqiDXotec15nXlSDX
kdei16fXkdeV16og15TXoNeX15nXmdeq15Ug15zXk9eo15XXqSDXnteU157Xldei157Xk9eZ150g
15zXp9eV16jXoSDXpteV16LXqNeZ150g16nXmdeo15XXqiDXpteR15DXmSDXkNeVINec15DXldee
15k6ICLXlNee16rXp9eZ16TXmdedINem15HXldei15nXnSwg157XmSDXqdeo15XXpteUINec15nX
mdem15Ig15DXqiDXlNee15PXmdeg15Qg16jXldem15Qg15LXnSDXnNep16jXqiDXkNeV16rXlCIK
K0hlYnJldyBibG9jazog15HXnNep15vXqiDXqdeoINeU15fXldelINeU15LXmdeR15Ug15zXlNeq
16fXpNeV16og16LXnNeZ15Ug15HXoten15HXldeqINeU16DXl9eZ15nXqteVINec15PXqNeV16kg
157XlNee15XXotee15PXmdedINec16fXldeo16Eg16bXldei16jXmdedINep15nXqNeV16og16bX
kdeQ15kg15DXlSDXnNeQ15XXnteZOiAi15TXnteq16fXmdek15nXnSDXpteR15XXoteZ150sINee
15kg16nXqNeV16bXlCDXnNeZ15nXpteSINeQ16og15TXnteT15nXoNeUINeo15XXpteUINeS150g
15zXqdeo16og15DXldeq15QiCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5nZS9yYW5n
ZS1leHBhbmQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5nZS9y
YW5nZS1leHBhbmQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1Jh
bmdlL3JhbmdlLWV4cGFuZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1MSBAQAorPGh0
bWw+Cis8aGVhZD4KKzxNRVRBIEhUVFAtRVFVSVY9IkNPTlRFTlQtVFlQRSIgQ09OVEVOVD0idGV4
dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5UZXN0IGZvciBSYW5nZS5leHBhbmQoKTwv
dGl0bGU+Cis8c2NyaXB0PgorZnVuY3Rpb24gbG9nKHN0cikgeworICAgIHZhciBsaSA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImxpIik7CisgICAgbGkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUoc3RyKSk7CisgICAgdmFyIGNvbnNvbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiY29uc29sZSIpOworICAgIGNvbnNvbGUuYXBwZW5kQ2hpbGQobGkpOworfQorCitmdW5j
dGlvbiB0ZXN0KCkKK3sKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICBsb2coIj09PT09
PT09PSBSRVNVTFQgPT09PT09PT09PT09PT09PT09PT09PT09PT0iKTsKKyAgICAvLyB0ZXN0IDEg
LSBFeHBhbmQgdG8gZG9jdW1lbnQuCisgICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFu
Z2UoKTsKKyAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteXNwYW4iKTsK
KyAgICByYW5nZS5zZXRTdGFydChub2RlLCAwKTsKKyAgICByYW5nZS5zZXRFbmQobm9kZSwgMCk7
CisgICAgcmFuZ2UuZXhwYW5kKCdkb2N1bWVudCcpOworICAgIGxvZygiZG9jdW1lbnQxOiAiICsg
cmFuZ2UudG9TdHJpbmcoKSk7CisKKyAgICAvLyB0ZXN0IDIgLSBFeHBhbmQgdG8gYmxvY2suCisg
ICAgdmFyIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGRfQTEiKTsKKyAgICByYW5n
ZS5zZXRTdGFydChub2RlLCAwKTsKKyAgICByYW5nZS5zZXRFbmQobm9kZSwgMCk7CisgICAgcmFu
Z2UuZXhwYW5kKCdibG9jaycpOworICAgIGxvZygiYmxvY2syOiAiICsgcmFuZ2UudG9TdHJpbmco
KSk7CisKKyAgICAvLyB0ZXN0IDMgLSBFeHBhbmQgdG8gYmxvY2ssIGRpZmZlcmVudCByYW5nZSBz
dGFydCBhbmQgZW5kIG9mZnNldC4KKyAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InRkX0ExIikuZmlyc3RDaGlsZDsKKyAgICByYW5nZS5zZXRTdGFydChub2RlLCAxKTsKKyAgICBy
YW5nZS5zZXRFbmQobm9kZSwgMik7CisgICAgcmFuZ2UuZXhwYW5kKCdibG9jaycpOworICAgIGxv
ZygiYmxvY2szOiAiICsgcmFuZ2UudG9TdHJpbmcoKSk7CisKKyAgICAvLyB0ZXN0IDQgLSBFeHBh
bmQgdG8gYmxvY2ssIGRpZmZlcmVudCByYW5nZSBzdGFydCBhbmQgZW5kIG5vZGUuCisgICAgbm9k
ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZF9BMSIpOworICAgIHZhciBlbmROb2RlID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRkX0IxIik7CisgICAgcmFuZ2Uuc2V0U3RhcnQobm9k
ZSwgMCk7CisgICAgcmFuZ2Uuc2V0RW5kKGVuZE5vZGUsIDApOworICAgIHJhbmdlLmV4cGFuZCgn
YmxvY2snKTsKKyAgICBsb2coImJsb2NrNDogIiArIHJhbmdlLnRvU3RyaW5nKCkpOworCisgICAg
Ly8gdGVzdCA1IC0gRXhwYW5kIHRvIHNlbnRlbmNlLgorICAgIG5vZGUgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiaW5zdHJ1Y3Rpb25zIik7CisgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgMCk7
CisgICAgcmFuZ2Uuc2V0RW5kKG5vZGUsIDApOworICAgIHJhbmdlLmV4cGFuZCgnc2VudGVuY2Un
KTsKKyAgICBsb2coInNlbnRlbmNlNTogIiArIHJhbmdlLnRvU3RyaW5nKCkpOworCisgICAgLy8g
dGVzdCA2IC0gRXhwYW5kIHRvIHNlbnRlbmNlLCBkaWZmZXJlbnQgcmFuZ2Ugc3RhcnQgYW5kIGVu
ZCBvZmZzZXQuCisgICAgbm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbnN0cnVjdGlv
bnMiKS5maXJzdENoaWxkOworICAgIHJhbmdlLnNldFN0YXJ0KG5vZGUsIDEpOworICAgIHJhbmdl
LnNldEVuZChub2RlLCAyKTsKKyAgICByYW5nZS5leHBhbmQoJ3NlbnRlbmNlJyk7CisgICAgbG9n
KCJzZW50ZW5jZTY6ICIgKyByYW5nZS50b1N0cmluZygpKTsKKworICAgIC8vIHRlc3QgNyAtIEV4
cGFuZCB0byBzZW50ZW5jZSwgZGlmZmVyZW50IHJhbmdlIHN0YXJ0IGFuZCBlbmQgbm9kZS4KKyAg
ICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImluc3RydWN0aW9ucyIpOworICAgIGVu
ZE5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXliciIpOworICAgIHJhbmdlLnNldFN0
YXJ0KG5vZGUsIDApOworICAgIHJhbmdlLnNldEVuZChlbmROb2RlLCAwKTsKKyAgICByYW5nZS5l
eHBhbmQoJ3NlbnRlbmNlJyk7CisgICAgbG9nKCJzZW50ZW5jZTc6ICIgKyByYW5nZS50b1N0cmlu
ZygpKTsKKworICAgIC8vIHRlc3QgOCAtIFNlbnRlbmNlIGRvZXMgbm90IGdvIHVwc3RyZWFtPwor
ICAgIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXVsdGlsaW5lU2VudGVuY2UiKTsK
KyAgICByYW5nZS5zZXRTdGFydChub2RlLCAwKTsKKyAgICByYW5nZS5zZXRFbmQobm9kZSwgMCk7
CisgICAgcmFuZ2UuZXhwYW5kKCdzZW50ZW5jZScpOworICAgIGxvZygic2VudGVuY2U4OiAiICsg
cmFuZ2UudG9TdHJpbmcoKSk7CisgICAgCisgICAgbm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJtdWx0aWxpbmVTZW50ZW5jZSIpLmZpcnN0Q2hpbGQ7CisgICAgcmFuZ2Uuc2V0U3RhcnQo
bm9kZSwgMSk7CisgICAgcmFuZ2Uuc2V0RW5kKG5vZGUsIDUpOworICAgIHJhbmdlLmV4cGFuZCgn
c2VudGVuY2UnKTsKKyAgICBsb2coInNlbnRlbmNlOTogIiArIHJhbmdlLnRvU3RyaW5nKCkpOwor
ICAgIAorICAgIHJhbmdlLnNldFN0YXJ0KG5vZGUsIDIwKTsKKyAgICByYW5nZS5zZXRFbmQobm9k
ZSwgMjApOworICAgIHJhbmdlLmV4cGFuZCgnc2VudGVuY2UnKTsKKyAgICBsb2coInNlbnRlbmNl
MTA6ICIgKyByYW5nZS50b1N0cmluZygpKTsKKyAgICAKKyAgICByYW5nZS5zZXRTdGFydChub2Rl
LCA0MCk7CisgICAgcmFuZ2Uuc2V0RW5kKG5vZGUsIDQwKTsKKyAgICByYW5nZS5leHBhbmQoJ3Nl
bnRlbmNlJyk7CisgICAgbG9nKCJzZW50ZW5jZTExOiAiICsgcmFuZ2UudG9TdHJpbmcoKSk7Cisg
ICAgCisgICAgLy8gRXhwYW5kIHdvcmQuCisgICAgLy8gU2FtZSByYW5nZSBzdGFydCBhbmQgZW5k
LCBib3RoIGF0IHRoZSBiZWdpbiBvZiB3b3JkLgorICAgIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgibXlkaXYiKTsKKyAgICByYW5nZS5zZXRTdGFydChub2RlLCAwKTsKKyAgICByYW5n
ZS5zZXRFbmQobm9kZSwgMCk7CisgICAgcmFuZ2UuZXhwYW5kKCd3b3JkJyk7CisgICAgbG9nKCJ3
b3JkMTogIiArIHJhbmdlLnRvU3RyaW5nKCkpOworICAgIAorICAgIC8vIFNhbWUgcmFuZ2Ugc3Rh
cnQgYW5kIGVuZCwgYm90aCBhdCB0aGUgYmVnaW4gb2YgYSB3b3JkLgorICAgIG5vZGUgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgibXlkaXYiKS5maXJzdENoaWxkOworICAgIHJhbmdlLnNldFN0
YXJ0KG5vZGUsIDEpOworICAgIHJhbmdlLnNldEVuZChub2RlLCAxKTsKKyAgICByYW5nZS5leHBh
bmQoJ3dvcmQnKTsKKyAgICBsb2coIndvcmQyOiAiICsgcmFuZ2UudG9TdHJpbmcoKSk7CisgICAg
CisgICAgLy8gU2FtZSByYW5nZSBzdGFydCBhbmQgZW5kLCBib3RoIGF0IHRoZSBtaWRkbGUgb2Yg
YSB3b3JkLgorICAgIHJhbmdlLnNldFN0YXJ0KG5vZGUsIDMpOworICAgIHJhbmdlLnNldEVuZChu
b2RlLCAzKTsKKyAgICByYW5nZS5leHBhbmQoJ3dvcmQnKTsKKyAgICBsb2coIndvcmQzOiAiICsg
cmFuZ2UudG9TdHJpbmcoKSk7CisgICAgCisgICAgLy8gU2FtZSByYW5nZSBzdGFydCBhbmQgZW5k
LCBib3RoIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgorICAgIHJhbmdlLnNldFN0YXJ0KG5vZGUsIDQp
OworICAgIHJhbmdlLnNldEVuZChub2RlLCA0KTsKKyAgICByYW5nZS5leHBhbmQoJ3dvcmQnKTsK
KyAgICBsb2coIndvcmQ0OiAiICsgcmFuZ2UudG9TdHJpbmcoKSk7CisgICAgCisgICAgLy8gRGlm
ZmVyZW50IHJhbmdlIHN0YXJ0IGFuZCBlbmQgb2Zmc2V0LCBib3RoIGF0IHRoZSBtaWRkbGUgb2Yg
YSB3b3JkLgorICAgIHJhbmdlLnNldFN0YXJ0KG5vZGUsIDIpOworICAgIHJhbmdlLnNldEVuZChu
b2RlLCAzKTsKKyAgICByYW5nZS5leHBhbmQoJ3dvcmQnKTsKKyAgICBsb2coIndvcmQ1OiAiICsg
cmFuZ2UudG9TdHJpbmcoKSk7CisgICAKKyAgICAvLyBEaWZmZXJlbnQgcmFuZ2Ugc3RhcnQgYW5k
IGVuZCBvZmZzZXQsIHN0YXJ0IGF0IHRoZSBiZWdpbiBvZiBhIHdvcmQsCisgICAgLy8gYW5kIGVu
ZCBhdCB0aGUgZW5kIG9mIGEgd29yZC4KKyAgICByYW5nZS5zZXRTdGFydChub2RlLCAxKTsKKyAg
ICByYW5nZS5zZXRFbmQobm9kZSwgNCk7CisgICAgcmFuZ2UuZXhwYW5kKCd3b3JkJyk7CisgICAg
bG9nKCJ3b3JkNjogIiArIHJhbmdlLnRvU3RyaW5nKCkpOworICAgCisgICAgLy8gRGlmZmVyZW50
IHJhbmdlIHN0YXJ0IGFuZCBlbmQgb2Zmc2V0LCBzdGFydCBhdCB0aGUgYmVnaW4gb2YgYSB3b3Jk
LAorICAgIC8vIGFuZCBlbmQgYXQgdGhlIG1pZGRsZSBvZiBhIHdvcmQuCisgICAgcmFuZ2Uuc2V0
U3RhcnQobm9kZSwgMSk7CisgICAgcmFuZ2Uuc2V0RW5kKG5vZGUsIDMpOworICAgIHJhbmdlLmV4
cGFuZCgnd29yZCcpOworICAgIGxvZygid29yZDc6ICIgKyByYW5nZS50b1N0cmluZygpKTsKKyAg
IAorICAgIC8vIERpZmZlcmVudCByYW5nZSBzdGFydCBhbmQgZW5kIG9mZnNldCwgc3RhcnQgYXQg
dGhlIG1pZGRsZSBvZiBhIHdvcmQsCisgICAgLy8gYW5kIGVuZCBhdCB0aGUgZW5kIG9mIGEgd29y
ZC4KKyAgICByYW5nZS5zZXRTdGFydChub2RlLCAyKTsKKyAgICByYW5nZS5zZXRFbmQobm9kZSwg
NCk7CisgICAgcmFuZ2UuZXhwYW5kKCd3b3JkJyk7CisgICAgbG9nKCJ3b3JkODogIiArIHJhbmdl
LnRvU3RyaW5nKCkpOworICAgCisgICAgLy8gQWNyb3NzIG1vcmUgdGhhbiAxIHdvcmQuCisgICAg
Ly8gU3RhcnQgYXQgdGhlIGJlZ2luIG9mIDFzdCB3b3JkLCBlbmQgYXQgdGhlIGVuZCBvZiBsYXN0
IHdvcmQuCisgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgMSk7CisgICAgcmFuZ2Uuc2V0RW5kKG5v
ZGUsIDcpOworICAgIHJhbmdlLmV4cGFuZCgnd29yZCcpOworICAgIGxvZygid29yZDk6ICIgKyBy
YW5nZS50b1N0cmluZygpKTsKKyAgIAorICAgIC8vIFN0YXJ0IGF0IHRoZSBtaWRkbGUgb2YgMXN0
IHdvcmQsIGVuZCBhdCB0aGUgbWlkZGxlIG9mIGxhc3Qgd29yZC4KKyAgICByYW5nZS5zZXRTdGFy
dChub2RlLCAyKTsKKyAgICByYW5nZS5zZXRFbmQobm9kZSwgNik7CisgICAgcmFuZ2UuZXhwYW5k
KCd3b3JkJyk7CisgICAgbG9nKCJ3b3JkMTA6ICIgKyByYW5nZS50b1N0cmluZygpKTsKKworICAg
IC8vIFN0YXJ0IGF0IHRoZSBiZWdpbiBvZiAxc3Qgd29yZCwgZW5kIGF0IHRoZSBtaWRkbGUgb2Yg
bGFzdCB3b3JkLgorICAgIHJhbmdlLnNldFN0YXJ0KG5vZGUsIDEpOworICAgIHJhbmdlLnNldEVu
ZChub2RlLCA2KTsKKyAgICByYW5nZS5leHBhbmQoJ3dvcmQnKTsKKyAgICBsb2coIndvcmQxMTog
IiArIHJhbmdlLnRvU3RyaW5nKCkpOworCisgICAgLy8gU3RhcnQgYXQgdGhlIG1pZGRsZSBvZiAx
c3Qgd29yZCwgZW5kIGF0IHRoZSBlbmQgb2YgbGFzdCB3b3JkLgorICAgIHJhbmdlLnNldFN0YXJ0
KG5vZGUsIDIpOworICAgIHJhbmdlLnNldEVuZChub2RlLCA3KTsKKyAgICByYW5nZS5leHBhbmQo
J3dvcmQnKTsKKyAgICBsb2coIndvcmQxMjogIiArIHJhbmdlLnRvU3RyaW5nKCkpOworCisgICAg
Ly8gV29yZCBhbmQgc3BhY2UuCisgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgNCk7CisgICAgcmFu
Z2Uuc2V0RW5kKG5vZGUsIDUpOworICAgIHJhbmdlLmV4cGFuZCgnd29yZCcpOworICAgIGxvZygi
d29yZDEzOiAiICsgcmFuZ2UudG9TdHJpbmcoKSk7CisKKyAgICAvLyBXb3JkIGFjcm9zcyBkaWZm
ZXJlbnQgbm9kZXMuCisgICAgZW5kTm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoZS1k
aXYiKTsKKyAgICByYW5nZS5zZXRTdGFydChub2RlLCAxKTsKKyAgICByYW5nZS5zZXRFbmQoZW5k
Tm9kZSwgMCk7CisgICAgcmFuZ2UuZXhwYW5kKCd3b3JkJyk7CisgICAgbG9nKCJ3b3JkMTQ6ICIg
KyByYW5nZS50b1N0cmluZygpKTsKKworICAgIC8vIFRlc3QgZm9yIENoaW5lc2UuIE5vIENoaW5l
c2Ugc2VnbWVudGF0aW9uIGluIHBsYXRmb3JtL21hYy4KKyAgICBub2RlID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInpoLUNOLWRpdiIpLmZpcnN0Q2hpbGQ7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAzOyArK2kpIHsKKyAgICAgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgaSk7CisgICAgICAg
IHJhbmdlLnNldEVuZChub2RlLCBpKTsKKyAgICAgICAgcmFuZ2UuZXhwYW5kKCd3b3JkJyk7Cisg
ICAgICAgIGxvZygiQ2hpbmVzZSB3b3JkIiArIGkgKyAiOiAiICsgcmFuZ2UudG9TdHJpbmcoKSk7
CisgICAgfQorCisgICAgcmFuZ2UuZXhwYW5kKCdzZW50ZW5jZScpOworICAgIGxvZygiQ2hpbmVz
ZSBzZW50ZW5jZTogIiArIHJhbmdlLnRvU3RyaW5nKCkpOworCisgICAgcmFuZ2UuZXhwYW5kKCdi
bG9jaycpOworICAgIGxvZygiQ2hpbmVzZSBibG9jazogIiArIHJhbmdlLnRvU3RyaW5nKCkpOwor
CisgICAgLy8gVGVzdCBmb3IgSGVicmV3LgorICAgIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiaGUtZGl2IikuZmlyc3RDaGlsZDsKKyAgICByYW5nZS5zZXRTdGFydChub2RlLCAxKTsK
KyAgICByYW5nZS5zZXRFbmQobm9kZSwgMSk7CisgICAgcmFuZ2UuZXhwYW5kKCd3b3JkJyk7Cisg
ICAgbG9nKCJIZWJyZXcgd29yZDogIiArIHJhbmdlLnRvU3RyaW5nKCkpOworCisgICAgcmFuZ2Uu
ZXhwYW5kKCdzZW50ZW5jZScpOworICAgIGxvZygiSGVicmV3IHNlbnRlbmNlOiAiICsgcmFuZ2Uu
dG9TdHJpbmcoKSk7CisKKyAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhlLWRp
diIpOworICAgIHJhbmdlLnNldFN0YXJ0KG5vZGUsIDApOworICAgIHJhbmdlLnNldEVuZChub2Rl
LCAwKTsKKyAgICByYW5nZS5leHBhbmQoJ2Jsb2NrJyk7CisgICAgbG9nKCJIZWJyZXcgYmxvY2s6
ICIgKyByYW5nZS50b1N0cmluZygpKTsKK30KKzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPSJ0ZXN0
KCkiPgorPHA+VGhpcyBpcyB0aGUgYmVnaW4gb2YgYSBibG9jay4gQSBibG9jayBpcyBhIGNvbGxl
Y3Rpb24gb2Ygc2VudGVuY2VzLiBFYWNoIHNlbnRlbmNlIGJlZ2lucyB3aXRoIGNhcGl0YWwKK2xl
dHRlciBhbmQgZW5kcyB3aXRoIGEgcHVuY3R1YXRpb24uCis8L3A+Cis8cCBpZD0ibXVsdGlsaW5l
U2VudGVuY2UiPk5vdywgYSBzZW50ZW5jZQoraXMgZGl2aWRlZCBpbnRvCittdWx0aXBsZSBsaW5l
cy4KKzwvcD4KKzxwIGlkPSJpbnN0cnVjdGlvbnMiPlJvbGwgdGhlIG1vdXNlIGFyb3VuZCB0aGUg
cGFnZS4gVGhlIGNvb3JkaW5hdGVzCitvZiB0aGUgbW91c2UgcG9pbnRlciBhcmUgY3VycmVudGx5
IGF0b3AgYW4gZWxlbWVudDxiciBpZD0ibXliciI+d2hvc2UgSUQgCitpczoiPHNwYW4gaWQ9Im15
c3BhbiIgc3R5bGU9ImZvbnQtd2VpZ2h0OmJvbGQiPjwvc3Bhbj4iLjwvcD4KKworPHRhYmxlIGJv
cmRlcj0xIGlkPSJteVRhYmxlIj4KKzx0ciBpZD0idHIxIj4KKyAgICA8dGQgaWQ9InRkX0ExIj5D
ZWxsIEExPC90ZD4KKyAgICA8dGQgaWQ9InRkX0IxIj5DZWxsIEIxPC90ZD4KKzwvdHI+Cis8dHIg
aWQ9InRyMiI+CisgICAgPHRkIGlkPSJ0ZF9BMiI+Q2VsbCBBMjwvdGQ+CisgICAgPHRkIGlkPSJ0
ZF9CMiI+Q2VsbCBCMjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxoMiBpZD0ic2VjMSI+U2VjdGlv
biAxPC9oMj4KKzxwIGlkPSJwMSI+dGV4dC48L3A+Cis8aDIgaWQ9InNlYzIiPlNlY3Rpb24gMjwv
aDI+Cis8cCBpZD0icDIiPnRleHQuPC9wPgorPGRpdiBpZD0ibXlkaXYiIHN0eWxlPSJwb3NpdGlv
bjphYnNvbHV0ZTsgdG9wOjM0MDsgbGVmdDozMDA7IGJhY2tncm91bmQtY29sb3I6eWVsbG93Ij4K
K0hlcmUgaXMgYSBwb3NpdGlvbmVkIGVsZW1lbnQuPC9kaXY+Cis8ZGl2IGlkPSJ6aC1DTi1kaXYi
PuWcqOeUsuWei0gxTjHmtYHmhJ/lj6/og73lh7rnjrDlpKfmtYHooYznmoTorablkYrlo7DkuK3v
vIzmmKjlpKnlj6zlvIDnmoTmsZ/oi4/nnIEyMDA5LTIwMTDlubTluqbmtYHmhJ/pmLLliLbnoJTo
rqjkvJrms6jlrprkuI7lvoDlubTkuI3lkIzjgILmr4/lubTpg73kvJrlj6zlvIDnmoTkuIDmrKHk
vovkvJrvvIzku4rlubTotrPotrPmj5DliY3kuobkuIDkuKrmnIjvvJvkvJrkuIrnoJTorqjnmoTk
uLvpopjvvIzlt7Lku47ku6XliY3nmoTlraPoioLmgKfmtYHmhJ/vvIzlj5jmiJDku6XnlLLlnotI
MU4x5rWB5oSf5Li66YeN54K544CCPC9kaXY+Cis8ZGl2IGlkPSJoZS1kaXYiPteR15zXqdeb16og
16nXqCDXlNeX15XXpSDXlNeS15nXkdeVINec15TXqten16TXldeqINei15zXmdeVINeR16LXp9eR
15XXqiDXlNeg15fXmdeZ16rXlSDXnNeT16jXldepINee15TXnteV16LXnteT15nXnSDXnNen15XX
qNehINem15XXoteo15nXnSDXqdeZ16jXldeqINem15HXkNeZINeQ15Ug15zXkNeV157XmTogIteU
157Xqten15nXpNeZ150g16bXkdeV16LXmdedLCDXnteZINep16jXldem15Qg15zXmdeZ16bXkiDX
kNeqINeU157Xk9eZ16DXlCDXqNeV16bXlCDXktedINec16nXqNeqINeQ15XXqteUIjwvZGl2Pgor
PHVsIGlkPSJjb25zb2xlIj48L3VsPgorCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDQ3NjM5KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vV2lu
ZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTIx
Miw2ICsxMjEyLDcgQEAgd2luZG93LlJhbmdlLnByb3RvdHlwZS5jb21wYXJlUG9pbnQgW2Z1bgog
d2luZG93LlJhbmdlLnByb3RvdHlwZS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgW2Z1bmN0aW9u
XQogd2luZG93LlJhbmdlLnByb3RvdHlwZS5kZWxldGVDb250ZW50cyBbZnVuY3Rpb25dCiB3aW5k
b3cuUmFuZ2UucHJvdG90eXBlLmRldGFjaCBbZnVuY3Rpb25dCit3aW5kb3cuUmFuZ2UucHJvdG90
eXBlLmV4cGFuZCBbZnVuY3Rpb25dCiB3aW5kb3cuUmFuZ2UucHJvdG90eXBlLmV4dHJhY3RDb250
ZW50cyBbZnVuY3Rpb25dCiB3aW5kb3cuUmFuZ2UucHJvdG90eXBlLmluc2VydE5vZGUgW2Z1bmN0
aW9uXQogd2luZG93LlJhbmdlLnByb3RvdHlwZS5pbnRlcnNlY3RzTm9kZSBbZnVuY3Rpb25dCg==
</data>
<flag name="review"
          id="19625"
          type_id="1"
          status="-"
          setter="eric"
    />
    <flag name="commit-queue"
          id="20178"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39380</attachid>
            <date>2009-09-10 14:16:43 -0700</date>
            <delta_ts>2009-09-10 16:01:05 -0700</delta_ts>
            <desc>patch w/ layout test</desc>
            <filename>27632.v5</filename>
            <type>text/plain</type>
            <size>18792</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODIxMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMDktMDgtMjQgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxt
ZW50IFJhbmdlLmV4cGFuZCgpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Mjc2MzIKKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9SYW5nZS9yYW5nZS1l
eHBhbmQuaHRtbAorCisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJhbmdlOjpleHBhbmQpOgorICAgICAgICAqIGRvbS9SYW5nZS5oOgorICAgICAgICAqIGRvbS9S
YW5nZS5pZGw6CisKIDIwMDktMDktMDkgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBXZWJDb3JlL2Rv
bS9SYW5nZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vUmFuZ2UuY3BwCShyZXZpc2lv
biA0ODIxMikKKysrIFdlYkNvcmUvZG9tL1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKKyNpbmNsdWRlICJodG1sZWRpdGluZy5oIgog
I2luY2x1ZGUgIm1hcmt1cC5oIgogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKICNpbmNsdWRl
IDxzdGRpby5oPgpAQCAtMTc5OCw0ICsxNzk5LDI2IEBAIHZvaWQgUmFuZ2U6OnRleHROb2RlU3Bs
aXQoVGV4dCogb2xkTm9kZSkKICAgICBib3VuZGFyeVRleHROb2Rlc1NwbGl0KG1fZW5kLCBvbGRO
b2RlKTsKIH0KIAordm9pZCBSYW5nZTo6ZXhwYW5kKGNvbnN0IFN0cmluZyYgdW5pdCwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHN0YXJ0UG9zaXRpb24o
KSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZChlbmRQb3NpdGlvbigpKTsKKyAgICBpZiAodW5p
dCA9PSAid29yZCIpIHsKKyAgICAgICAgc3RhcnQgPSBzdGFydE9mV29yZChzdGFydCk7CisgICAg
ICAgIGVuZCA9IGVuZE9mV29yZChlbmQpOworICAgIH0gZWxzZSBpZiAodW5pdCA9PSAic2VudGVu
Y2UiKSB7CisgICAgICAgIHN0YXJ0ID0gc3RhcnRPZlNlbnRlbmNlKHN0YXJ0KTsKKyAgICAgICAg
ZW5kID0gZW5kT2ZTZW50ZW5jZShlbmQpOworICAgIH0gZWxzZSBpZiAodW5pdCA9PSAiYmxvY2si
KSB7CisgICAgICAgIHN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzdGFydCk7CisgICAgICAgIGVu
ZCA9IGVuZE9mUGFyYWdyYXBoKGVuZCk7CisgICAgfSBlbHNlIGlmICh1bml0ID09ICJkb2N1bWVu
dCIpIHsKKyAgICAgICAgc3RhcnQgPSBzdGFydE9mRG9jdW1lbnQoc3RhcnQpOworICAgICAgICBl
bmQgPSBlbmRPZkRvY3VtZW50KGVuZCk7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybjsKKyAg
ICBzZXRTdGFydChzdGFydC5kZWVwRXF1aXZhbGVudCgpLmNvbnRhaW5lck5vZGUoKSwgc3RhcnQu
ZGVlcEVxdWl2YWxlbnQoKS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKKyAg
ICBzZXRFbmQoZW5kLmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpLCBlbmQuZGVlcEVx
dWl2YWxlbnQoKS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKK30KKwogfQpJ
bmRleDogV2ViQ29yZS9kb20vUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9SYW5n
ZS5oCShyZXZpc2lvbiA0ODIxMikKKysrIFdlYkNvcmUvZG9tL1JhbmdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExMiw2ICsxMTIsMTEgQEAgcHVibGljOgogICAgIHZvaWQgdGV4dE5vZGVzTWVyZ2Vk
KE5vZGVXaXRoSW5kZXgmIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCk7CiAgICAgdm9pZCB0ZXh0
Tm9kZVNwbGl0KFRleHQqIG9sZE5vZGUpOwogCisgICAgLy8gRXhwYW5kIHJhbmdlIHRvIGEgdW5p
dCAod29yZCBvciBzZW50ZW5jZSBvciBibG9jayBvciBkb2N1bWVudCkgYm91bmRhcnkuCisgICAg
Ly8gUGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNzYzMiBjb21tZW50ICM1IAorICAgIC8vIGZvciBkZXRhaWxzLgorICAgIHZvaWQgZXhwYW5k
KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKwogI2lmbmRlZiBOREVCVUcKICAgICB2
b2lkIGZvcm1hdEZvckRlYnVnZ2VyKGNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25z
dDsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9kb20vUmFuZ2UuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL1JhbmdlLmlkbAkocmV2aXNpb24gNDgyMTIpCisrKyBXZWJDb3JlL2RvbS9SYW5n
ZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTExMiw2ICsxMTIsOSBAQCBtb2R1bGUgcmFuZ2VzIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBsb25nIG9mZnNldCkKICAgICAgICAg
ICAgIHJhaXNlcyhSYW5nZUV4Y2VwdGlvbiwgRE9NRXhjZXB0aW9uKTsKIAorICAgICAgICB2b2lk
IGV4cGFuZChpbiBET01TdHJpbmcgdW5pdCkKKyAgICAgICAgICAgIHJhaXNlcyhSYW5nZUV4Y2Vw
dGlvbiwgRE9NRXhjZXB0aW9uKTsKKwogI2lmICFkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQp
IHx8ICFMQU5HVUFHRV9KQVZBU0NSSVBUCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgdGV4dDsKICNlbmRpZgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDgyMTIpCisrKyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAwOS0wOC0y
NCAgWGlhb21laSBKaSAgPHhqaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IFJhbmdlLmV4cGFuZCgpLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc2MzIKKworICAg
ICAgICAqIGZhc3QvZG9tL1JhbmdlL3JhbmdlLWV4cGFuZC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvZG9tL1JhbmdlL3JhbmdlLWV4cGFuZC5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0OgorCiAy
MDA5LTA5LTA5ICBFcmlrIEFydmlkc3NvbiAgPGFydkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5n
ZS9yYW5nZS1leHBhbmQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvZG9tL1JhbmdlL3JhbmdlLWV4cGFuZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5nZS9yYW5nZS1leHBhbmQtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDIxIEBACitUaGlzIGlzIHRoZSBiZWdpbiBvZiBhIGJsb2NrLiBB
IGJsb2NrIGlzIGEgY29sbGVjdGlvbiBvZiBzZW50ZW5jZXMuIEVhY2ggc2VudGVuY2UgYmVnaW5z
IHdpdGggY2FwaXRhbCBsZXR0ZXIgYW5kIGVuZHMgd2l0aCBhIHB1bmN0dWF0aW9uLgorCitOb3cs
IGEgc2VudGVuY2UgaXMgZGl2aWRlZCBpbnRvIG11bHRpcGxlIGxpbmVzLgorCitSb2xsIHRoZSBt
b3VzZSBhcm91bmQgdGhlIHBhZ2UuIFRoZSBjb29yZGluYXRlcyBvZiB0aGUgbW91c2UgcG9pbnRl
ciBhcmUgY3VycmVudGx5IGF0b3AgYW4gZWxlbWVudAord2hvc2UgSUQgaXM6IiIuCisKK0NlbGwg
QTEJQ2VsbCBCMQorQ2VsbCBBMglDZWxsIEIyCitTZWN0aW9uIDEKKwordGV4dC4KKworU2VjdGlv
biAyCisKK3RleHQuCisKK0hlcmUgaXMgYSBwb3NpdGlvbmVkIGVsZW1lbnQuCivlnKjnlLLlnotI
MU4x5rWB5oSf5Y+v6IO95Ye6546w5aSn5rWB6KGM55qE6K2m5ZGK5aOw5Lit77yM5pio5aSp5Y+s
5byA55qE5rGf6IuP55yBMjAwOS0yMDEw5bm05bqm5rWB5oSf6Ziy5Yi256CU6K6o5Lya5rOo5a6a
5LiO5b6A5bm05LiN5ZCM44CC5q+P5bm06YO95Lya5Y+s5byA55qE5LiA5qyh5L6L5Lya77yM5LuK
5bm06Laz6Laz5o+Q5YmN5LqG5LiA5Liq5pyI77yb5Lya5LiK56CU6K6o55qE5Li76aKY77yM5bey
5LuO5Lul5YmN55qE5a2j6IqC5oCn5rWB5oSf77yM5Y+Y5oiQ5Lul55Sy5Z6LSDFOMea1geaEn+S4
uumHjeeCueOAggor15HXnNep15vXqiDXqdeoINeU15fXldelINeU15LXmdeR15Ug15zXlNeq16fX
pNeV16og16LXnNeZ15Ug15HXoten15HXldeqINeU16DXl9eZ15nXqteVINec15PXqNeV16kg157X
lNee15XXotee15PXmdedINec16fXldeo16Eg16bXldei16jXmdedINep15nXqNeV16og16bXkdeQ
15kg15DXlSDXnNeQ15XXnteZOiAi15TXnteq16fXmdek15nXnSDXpteR15XXoteZ150sINee15kg
16nXqNeV16bXlCDXnNeZ15nXpteSINeQ16og15TXnteT15nXoNeUINeo15XXpteUINeS150g15zX
qdeo16og15DXldeq15QiCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL3Jhbmdl
LWV4cGFuZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL3Jh
bmdlLWV4cGFuZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFu
Z2UvcmFuZ2UtZXhwYW5kLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjI4IEBACis8aHRt
bD4KKzxoZWFkPgorPE1FVEEgSFRUUC1FUVVJVj0iQ09OVEVOVC1UWVBFIiBDT05URU5UPSJ0ZXh0
L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPlRlc3QgZm9yIFJhbmdlLmV4cGFuZCgpPC90
aXRsZT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2coc3RyKQoreworICAgIHZhciBsaSA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImxpIik7CisgICAgbGkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUoc3RyKSk7CisgICAgdmFyIGNvbnNvbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiY29uc29sZSIpOworICAgIGNvbnNvbGUuYXBwZW5kQ2hpbGQobGkpOworfQorCitmdW5j
dGlvbiBhc3NlcnRFcXVhbCh0ZXN0X25hbWUsIGFjdHVhbCwgZXhwZWN0ZWQpCit7CisgICAgaWYg
KGFjdHVhbCAhPSBleHBlY3RlZCkgeworICAgICAgICBsb2coIj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0iKTsKKyAgICAgICAgbG9nKCJGQUlMRUQgdGVzdCAiICsgdGVzdF9uYW1l
KTsKKyAgICAgICAgbG9nKCJhY3R1YWw6ICIgKyBhY3R1YWwpOworICAgICAgICBsb2coImV4cGVj
dGVkOiAiICsgZXhwZWN0ZWQpOworICAgICAgICBpZiAoYWN0dWFsLmxlbmd0aCAhPSBleHBlY3Rl
ZC5sZW5ndGgpIHsKKyAgICAgICAgICAgIGxvZygibGVuZ3RoICE9IiArICI7IGFjdHVhbC5sZW5n
dGg6ICIgKyBhY3R1YWwubGVuZ3RoICsgIjsgZXhwZWN0ZWQubGVuZ3RoOiAiICsgZXhwZWN0ZWQu
bGVuZ3RoKTsKKyAgICAgICAgICAgIGxvZygiZXNjYXBlZCBhY3R1YWw6ICIgKyBlc2NhcGUoYWN0
dWFsKSk7CisgICAgICAgICAgICBsb2coImVzY2FwZWQgZXhwZWN0ZWQ6ICIgKyBlc2NhcGUoZXhw
ZWN0ZWQpKTsKKyAgICAgICAgICAgIHZhciBsZW5ndGggPSBhY3R1YWwubGVuZ3RoOworICAgICAg
ICAgICAgaWYgKGFjdHVhbC5sZW5ndGggPiBleHBlY3RlZC5sZW5ndGgpCisgICAgICAgICAgICAg
ICAgbGVuZ3RoID0gZXhwZWN0ZWQubGVuZ3RoOworICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBp
PGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgbG9nKCJpOiAiICsgaSArICI7IGFjdHVh
bDogIiArIGFjdHVhbFtpXSArICI7IGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRbaV0pOworICAgICAg
ICAgICAgICAgIGlmIChhY3R1YWxbaV0gIT0gZXhwZWN0ZWRbaV0pCisgICAgICAgICAgICAgICAg
ICAgIGxvZygiIT0iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIGxvZygiYWN0dWFsOiAiICsgZXNjYXBlKGFjdHVhbCkpOworICAgICAgICAg
ICAgbG9nKCJleHBlY3RlZDogIiArIGVzY2FwZShleHBlY3RlZCkpOworICAgICAgICAgICAgZm9y
ICh2YXIgaT0wOyBpPGFjdHVhbC5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGxvZygi
aTogIiArIGkgKyAiOyBhY3R1YWw6ICIgKyBhY3R1YWxbaV0gKyAiOyBleHBlY3RlZDogIiArIGV4
cGVjdGVkW2ldKTsKKyAgICAgICAgICAgICAgICBpZiAoYWN0dWFsW2ldICE9IGV4cGVjdGVkW2ld
KQorICAgICAgICAgICAgICAgICAgICBsb2coIiE9Iik7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24gZXhwYW5kUmFuZ2VTdHJpbmco
cmFuZ2UsIHN0YXJ0SWQsIHN0YXJ0T2Zmc2V0LCBlbmRJZCwgZW5kT2Zmc2V0LCBleHBhbmRVbml0
LCBmaXJzdENoaWxkKQoreworICAgIHZhciBzdGFydE5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZChzdGFydElkKTsKKyAgICBpZiAoZmlyc3RDaGlsZCA9PSB0cnVlKQorICAgICAgICBzdGFy
dE5vZGUgPSBzdGFydE5vZGUuZmlyc3RDaGlsZDsKKyAgICB2YXIgZW5kTm9kZSA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKGVuZElkKTsKKyAgICBpZiAoZmlyc3RDaGlsZCA9PSB0cnVlKQorICAg
ICAgICBlbmROb2RlID0gZW5kTm9kZS5maXJzdENoaWxkOworICAgIHJhbmdlLnNldFN0YXJ0KHN0
YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpOworICAgIHJhbmdlLnNldEVuZChlbmROb2RlLCBlbmRPZmZz
ZXQpOworICAgIHJhbmdlLmV4cGFuZChleHBhbmRVbml0KTsKKyAgICByZXR1cm4gcmFuZ2UudG9T
dHJpbmcoKTsKK30KKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworCisgICAgLy8gdGVzdCAxIC0gRXhwYW5kIHRvIGRvY3VtZW50LgorICAgIHZhciByYW5nZSA9
IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CisgICAgdmFyIGFjdHVhbCA9IGV4cGFuZFJhbmdlU3Ry
aW5nKHJhbmdlLCAnbXlzcGFuJywgMCwgJ215c3BhbicsIDAsICdkb2N1bWVudCcsIGZhbHNlKTsK
KyAgICB2YXIgZXhwZWN0ZWQgPSAnVGhpcyBpcyB0aGUgYmVnaW4gb2YgYSBibG9jay4gQSBibG9j
ayBpcyBhIGNvbGxlY3Rpb24gb2Ygc2VudGVuY2VzLiBFYWNoIHNlbnRlbmNlIGJlZ2lucyB3aXRo
IGNhcGl0YWxceDBBbGV0dGVyIGFuZCBlbmRzIHdpdGggYSBwdW5jdHVhdGlvbi5ceDBBXHgwQU5v
dywgYSBzZW50ZW5jZVx4MEFpcyBkaXZpZGVkIGludG9ceDBBbXVsdGlwbGUgbGluZXMuXHgwQVx4
MEFSb2xsIHRoZSBtb3VzZSBhcm91bmQgdGhlIHBhZ2UuIFRoZSBjb29yZGluYXRlc1x4MEFvZiB0
aGUgbW91c2UgcG9pbnRlciBhcmUgY3VycmVudGx5IGF0b3AgYW4gZWxlbWVudHdob3NlIElEIFx4
MEFpczoiIi5ceDBBXHgwQVx4MEFceDBBICAgIENlbGwgQTFceDBBICAgIENlbGwgQjFceDBBXHgw
QVx4MEEgICAgQ2VsbCBBMlx4MEEgICAgQ2VsbCBCMlx4MEFceDBBXHgwQVNlY3Rpb24gMVx4MEF0
ZXh0Llx4MEFTZWN0aW9uIDJceDBBdGV4dC5ceDBBXHgwQUhlcmUgaXMgYSBwb3NpdGlvbmVkIGVs
ZW1lbnQuXHgwQeWcqOeUsuWei0gxTjHmtYHmhJ/lj6/og73lh7rnjrDlpKfmtYHooYznmoTorabl
kYrlo7DkuK3vvIzmmKjlpKnlj6zlvIDnmoTmsZ/oi4/nnIEyMDA5LTIwMTDlubTluqbmtYHmhJ/p
mLLliLbnoJTorqjkvJrms6jlrprkuI7lvoDlubTkuI3lkIzjgILmr4/lubTpg73kvJrlj6zlvIDn
moTkuIDmrKHkvovkvJrvvIzku4rlubTotrPotrPmj5DliY3kuobkuIDkuKrmnIjvvJvkvJrkuIrn
oJTorqjnmoTkuLvpopjvvIzlt7Lku47ku6XliY3nmoTlraPoioLmgKfmtYHmhJ/vvIzlj5jmiJDk
u6XnlLLlnotIMU4x5rWB5oSf5Li66YeN54K544CCXHgwQdeR15zXqdeb16og16nXqCDXlNeX15XX
pSDXlNeS15nXkdeVINec15TXqten16TXldeqINei15zXmdeVINeR16LXp9eR15XXqiDXlNeg15fX
mdeZ16rXlSDXnNeT16jXldepINee15TXnteV16LXnteT15nXnSDXnNen15XXqNehINem15XXoteo
15nXnSDXqdeZ16jXldeqINem15HXkNeZINeQ15Ug15zXkNeV157XmTogIteU157Xqten15nXpNeZ
150g16bXkdeV16LXmdedLCDXnteZINep16jXldem15Qg15zXmdeZ16bXkiDXkNeqINeU157Xk9eZ
16DXlCDXqNeV16bXlCDXktedINec16nXqNeqINeQ15XXqteUIicKKyAgICBhc3NlcnRFcXVhbCgi
ZG9jdW1lbnQxIiwgYWN0dWFsLCBleHBlY3RlZCk7CisKKyAgICAvLyB0ZXN0IDIgLSBFeHBhbmQg
dG8gYmxvY2suCisgICAgYWN0dWFsID0gZXhwYW5kUmFuZ2VTdHJpbmcocmFuZ2UsICd0ZF9BMScs
IDAsICd0ZF9BMScsIDAsICdibG9jaycsIGZhbHNlKTsKKyAgICBhc3NlcnRFcXVhbCgiYmxvY2sy
IiwgYWN0dWFsLCAiQ2VsbCBBMSIpOworCisgICAgLy8gdGVzdCAzIC0gRXhwYW5kIHRvIGJsb2Nr
LCBkaWZmZXJlbnQgcmFuZ2Ugc3RhcnQgYW5kIGVuZCBvZmZzZXQuCisgICAgYWN0dWFsID0gZXhw
YW5kUmFuZ2VTdHJpbmcocmFuZ2UsICd0ZF9BMScsIDEsICd0ZF9BMScsIDIsICdibG9jaycsIHRy
dWUpOworICAgIGFzc2VydEVxdWFsKCJibG9jazMiLCBhY3R1YWwsICJDZWxsIEExIik7CisKKyAg
ICAvLyB0ZXN0IDQgLSBFeHBhbmQgdG8gYmxvY2ssIGRpZmZlcmVudCByYW5nZSBzdGFydCBhbmQg
ZW5kIG5vZGUuCisgICAgYWN0dWFsID0gZXhwYW5kUmFuZ2VTdHJpbmcocmFuZ2UsICd0ZF9BMScs
IDAsICd0ZF9CMScsIDAsICdibG9jaycsIGZhbHNlKTsKKyAgICBhc3NlcnRFcXVhbCgiYmxvY2s0
IiwgYWN0dWFsLCAiQ2VsbCBBMVx4MEEgICAgQ2VsbCBCMSIpOworCisgICAgLy8gdGVzdCA1IC0g
RXhwYW5kIHRvIHNlbnRlbmNlLgorICAgIGFjdHVhbCA9IGV4cGFuZFJhbmdlU3RyaW5nKHJhbmdl
LCAnaW5zdHJ1Y3Rpb25zJywgMCwgJ2luc3RydWN0aW9ucycsIDAsICdzZW50ZW5jZScsIGZhbHNl
KTsKKyAgICBhc3NlcnRFcXVhbCgic2VudGVuY2U1IiwgYWN0dWFsLCAiUm9sbCB0aGUgbW91c2Ug
YXJvdW5kIHRoZSBwYWdlLiAiKTsKKworICAgIC8vIHRlc3QgNiAtIEV4cGFuZCB0byBzZW50ZW5j
ZSwgZGlmZmVyZW50IHJhbmdlIHN0YXJ0IGFuZCBlbmQgb2Zmc2V0LgorICAgIGFjdHVhbCA9IGV4
cGFuZFJhbmdlU3RyaW5nKHJhbmdlLCAnaW5zdHJ1Y3Rpb25zJywgMSwgJ2luc3RydWN0aW9ucycs
IDIsICdzZW50ZW5jZScsIHRydWUpOworICAgIGFzc2VydEVxdWFsKCJzZW50ZW5jZTYiLCBhY3R1
YWwsICJSb2xsIHRoZSBtb3VzZSBhcm91bmQgdGhlIHBhZ2UuICIpOworCisgICAgLy8gdGVzdCA3
IC0gRXhwYW5kIHRvIHNlbnRlbmNlLCBkaWZmZXJlbnQgcmFuZ2Ugc3RhcnQgYW5kIGVuZCBub2Rl
LgorICAgIGFjdHVhbCA9IGV4cGFuZFJhbmdlU3RyaW5nKHJhbmdlLCAnaW5zdHJ1Y3Rpb25zJywg
MCwgJ215YnInLCAwLCAnc2VudGVuY2UnLCBmYWxzZSk7CisgICAgYXNzZXJ0RXF1YWwoInNlbnRl
bmNlNyIsIGFjdHVhbCwgIlJvbGwgdGhlIG1vdXNlIGFyb3VuZCB0aGUgcGFnZS4gVGhlIGNvb3Jk
aW5hdGVzXHgwQW9mIHRoZSBtb3VzZSBwb2ludGVyIGFyZSBjdXJyZW50bHkgYXRvcCBhbiBlbGVt
ZW50Iik7CisKKyAgICAvLyB0ZXN0IDggLSBTZW50ZW5jZSBkb2VzIG5vdCBnbyB1cHN0cmVhbT8K
KyAgICBhY3R1YWwgPSBleHBhbmRSYW5nZVN0cmluZyhyYW5nZSwgJ211bHRpbGluZVNlbnRlbmNl
JywgMCwgJ211bHRpbGluZVNlbnRlbmNlJywgMCwgJ3NlbnRlbmNlJywgZmFsc2UpOworICAgIGFz
c2VydEVxdWFsKCJzZW50ZW5jZTgiLCBhY3R1YWwsICJOb3csIGEgc2VudGVuY2VceDBBaXMgZGl2
aWRlZCBpbnRvXHgwQW11bHRpcGxlIGxpbmVzLlx4MEFceDBBIik7CisgICAgCisgICAgYWN0dWFs
ID0gZXhwYW5kUmFuZ2VTdHJpbmcocmFuZ2UsICdtdWx0aWxpbmVTZW50ZW5jZScsIDEsICdtdWx0
aWxpbmVTZW50ZW5jZScsIDUsICdzZW50ZW5jZScsIHRydWUpOworICAgIGFzc2VydEVxdWFsKCJz
ZW50ZW5jZTkiLCBhY3R1YWwsICJOb3csIGEgc2VudGVuY2VceDBBaXMgZGl2aWRlZCBpbnRvXHgw
QW11bHRpcGxlIGxpbmVzLlx4MEFceDBBIik7CisgICAgCisgICAgYWN0dWFsID0gZXhwYW5kUmFu
Z2VTdHJpbmcocmFuZ2UsICdtdWx0aWxpbmVTZW50ZW5jZScsIDIwLCAnbXVsdGlsaW5lU2VudGVu
Y2UnLCAyMCwgJ3NlbnRlbmNlJywgdHJ1ZSk7CisgICAgYXNzZXJ0RXF1YWwoInNlbnRlbmNlMTAi
LCBhY3R1YWwsICJpcyBkaXZpZGVkIGludG9ceDBBbXVsdGlwbGUgbGluZXMuXHgwQVx4MEEiKTsK
KyAgICAKKyAgICBhY3R1YWwgPSBleHBhbmRSYW5nZVN0cmluZyhyYW5nZSwgJ211bHRpbGluZVNl
bnRlbmNlJywgNDAsICdtdWx0aWxpbmVTZW50ZW5jZScsIDQwLCAnc2VudGVuY2UnLCB0cnVlKTsK
KyAgICBhc3NlcnRFcXVhbCgic2VudGVuY2UxMSIsIGFjdHVhbCwgIm11bHRpcGxlIGxpbmVzLlx4
MEFceDBBIik7CisgICAgCisgICAgLy8gRXhwYW5kIHdvcmQuCisgICAgLy8gU2FtZSByYW5nZSBz
dGFydCBhbmQgZW5kLCBib3RoIGF0IHRoZSBiZWdpbiBvZiB3b3JkLgorICAgIGFjdHVhbCA9IGV4
cGFuZFJhbmdlU3RyaW5nKHJhbmdlLCAnbXlkaXYnLCAwLCAnbXlkaXYnLCAwLCAnd29yZCcsIGZh
bHNlKTsKKyAgICBhc3NlcnRFcXVhbCgid29yZDEiLCBhY3R1YWwsICJIZXJlIik7CisgICAgCisg
ICAgLy8gU2FtZSByYW5nZSBzdGFydCBhbmQgZW5kLCBib3RoIGF0IHRoZSBiZWdpbiBvZiBhIHdv
cmQuCisgICAgYWN0dWFsID0gZXhwYW5kUmFuZ2VTdHJpbmcocmFuZ2UsICdteWRpdicsIDEsICdt
eWRpdicsIDEsICd3b3JkJywgdHJ1ZSk7CisgICAgYXNzZXJ0RXF1YWwoIndvcmQyIiwgYWN0dWFs
LCAiSGVyZSIpOworICAgIAorICAgIC8vIFNhbWUgcmFuZ2Ugc3RhcnQgYW5kIGVuZCwgYm90aCBh
dCB0aGUgbWlkZGxlIG9mIGEgd29yZC4KKyAgICBhY3R1YWwgPSBleHBhbmRSYW5nZVN0cmluZyhy
YW5nZSwgJ215ZGl2JywgMywgJ215ZGl2JywgMywgJ3dvcmQnLCB0cnVlKTsKKyAgICBhc3NlcnRF
cXVhbCgid29yZDMiLCBhY3R1YWwsICJIZXJlIik7CisgICAgCisgICAgLy8gU2FtZSByYW5nZSBz
dGFydCBhbmQgZW5kLCBib3RoIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgorICAgIGFjdHVhbCA9IGV4
cGFuZFJhbmdlU3RyaW5nKHJhbmdlLCAnbXlkaXYnLCA0LCAnbXlkaXYnLCA0LCAnd29yZCcsIHRy
dWUpOworICAgIGFzc2VydEVxdWFsKCJ3b3JkNCIsIGFjdHVhbCwgIkhlcmUiKTsKKyAgICAKKyAg
ICAvLyBEaWZmZXJlbnQgcmFuZ2Ugc3RhcnQgYW5kIGVuZCBvZmZzZXQsIGJvdGggYXQgdGhlIG1p
ZGRsZSBvZiBhIHdvcmQuCisgICAgYWN0dWFsID0gZXhwYW5kUmFuZ2VTdHJpbmcocmFuZ2UsICdt
eWRpdicsIDIsICdteWRpdicsIDMsICd3b3JkJywgdHJ1ZSk7CisgICAgYXNzZXJ0RXF1YWwoIndv
cmQ1IiwgYWN0dWFsLCAiSGVyZSIpOworICAgCisgICAgLy8gRGlmZmVyZW50IHJhbmdlIHN0YXJ0
IGFuZCBlbmQgb2Zmc2V0LCBzdGFydCBhdCB0aGUgYmVnaW4gb2YgYSB3b3JkLAorICAgIC8vIGFu
ZCBlbmQgYXQgdGhlIGVuZCBvZiBhIHdvcmQuCisgICAgYWN0dWFsID0gZXhwYW5kUmFuZ2VTdHJp
bmcocmFuZ2UsICdteWRpdicsIDUsICdteWRpdicsIDQsICd3b3JkJywgdHJ1ZSk7CisgICAgYXNz
ZXJ0RXF1YWwoIndvcmQ2IiwgYWN0dWFsLCAiSGVyZSIpOworICAgCisgICAgLy8gRGlmZmVyZW50
IHJhbmdlIHN0YXJ0IGFuZCBlbmQgb2Zmc2V0LCBzdGFydCBhdCB0aGUgYmVnaW4gb2YgYSB3b3Jk
LAorICAgIC8vIGFuZCBlbmQgYXQgdGhlIG1pZGRsZSBvZiBhIHdvcmQuCisgICAgYWN0dWFsID0g
ZXhwYW5kUmFuZ2VTdHJpbmcocmFuZ2UsICdteWRpdicsIDEsICdteWRpdicsIDMsICd3b3JkJywg
dHJ1ZSk7CisgICAgYXNzZXJ0RXF1YWwoIndvcmQ3IiwgYWN0dWFsLCAiSGVyZSIpOworICAgCisg
ICAgLy8gRGlmZmVyZW50IHJhbmdlIHN0YXJ0IGFuZCBlbmQgb2Zmc2V0LCBzdGFydCBhdCB0aGUg
bWlkZGxlIG9mIGEgd29yZCwKKyAgICAvLyBhbmQgZW5kIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgor
ICAgIGFjdHVhbCA9IGV4cGFuZFJhbmdlU3RyaW5nKHJhbmdlLCAnbXlkaXYnLCAyLCAnbXlkaXYn
LCA0LCAnd29yZCcsIHRydWUpOworICAgIGFzc2VydEVxdWFsKCJ3b3JkOCIsIGFjdHVhbCwgIkhl
cmUiKTsKKyAgIAorICAgIC8vIEFjcm9zcyBtb3JlIHRoYW4gMSB3b3JkLgorICAgIC8vIFN0YXJ0
IGF0IHRoZSBiZWdpbiBvZiAxc3Qgd29yZCwgZW5kIGF0IHRoZSBlbmQgb2YgbGFzdCB3b3JkLgor
ICAgIGFjdHVhbCA9IGV4cGFuZFJhbmdlU3RyaW5nKHJhbmdlLCAnbXlkaXYnLCAxLCAnbXlkaXYn
LCA3LCAnd29yZCcsIHRydWUpOworICAgIGFzc2VydEVxdWFsKCJ3b3JkOSIsIGFjdHVhbCwgIkhl
cmUgaXMiKTsKKyAgIAorICAgIC8vIFN0YXJ0IGF0IHRoZSBtaWRkbGUgb2YgMXN0IHdvcmQsIGVu
ZCBhdCB0aGUgbWlkZGxlIG9mIGxhc3Qgd29yZC4KKyAgICBhY3R1YWwgPSBleHBhbmRSYW5nZVN0
cmluZyhyYW5nZSwgJ215ZGl2JywgMiwgJ215ZGl2JywgNiwgJ3dvcmQnLCB0cnVlKTsKKyAgICBh
c3NlcnRFcXVhbCgid29yZDEwIiwgYWN0dWFsLCAiSGVyZSBpcyIpOworCisgICAgLy8gU3RhcnQg
YXQgdGhlIGJlZ2luIG9mIDFzdCB3b3JkLCBlbmQgYXQgdGhlIG1pZGRsZSBvZiBsYXN0IHdvcmQu
CisgICAgYWN0dWFsID0gZXhwYW5kUmFuZ2VTdHJpbmcocmFuZ2UsICdteWRpdicsIDEsICdteWRp
dicsIDYsICd3b3JkJywgdHJ1ZSk7CisgICAgYXNzZXJ0RXF1YWwoIndvcmQxMSIsIGFjdHVhbCwg
IkhlcmUgaXMiKTsKKworICAgIC8vIFN0YXJ0IGF0IHRoZSBtaWRkbGUgb2YgMXN0IHdvcmQsIGVu
ZCBhdCB0aGUgZW5kIG9mIGxhc3Qgd29yZC4KKyAgICBhY3R1YWwgPSBleHBhbmRSYW5nZVN0cmlu
ZyhyYW5nZSwgJ215ZGl2JywgMiwgJ215ZGl2JywgNywgJ3dvcmQnLCB0cnVlKTsKKyAgICBhc3Nl
cnRFcXVhbCgid29yZDEyIiwgYWN0dWFsLCAiSGVyZSBpcyIpOworCisgICAgLy8gV29yZCBhbmQg
c3BhY2UuCisgICAgYWN0dWFsID0gZXhwYW5kUmFuZ2VTdHJpbmcocmFuZ2UsICdteWRpdicsIDQs
ICdteWRpdicsIDUsICd3b3JkJywgdHJ1ZSk7CisgICAgYXNzZXJ0RXF1YWwoIndvcmQxMyIsIGFj
dHVhbCwgIkhlcmUgIik7CisKKyAgICAvLyBXb3JkIGFjcm9zcyBkaWZmZXJlbnQgbm9kZXMuCisg
ICAgYWN0dWFsID0gZXhwYW5kUmFuZ2VTdHJpbmcocmFuZ2UsICdteWRpdicsIDEsICdoZS1kaXYn
LCAwLCAnd29yZCcsIHRydWUpOworICAgIGFzc2VydEVxdWFsKCJ3b3JkMTQiLCBhY3R1YWwsICJI
ZXJlIGlzIGEgcG9zaXRpb25lZCBlbGVtZW50Llx4MEHlnKjnlLLlnotIMU4x5rWB5oSf5Y+v6IO9
5Ye6546w5aSn5rWB6KGM55qE6K2m5ZGK5aOw5Lit77yM5pio5aSp5Y+s5byA55qE5rGf6IuP55yB
MjAwOS0yMDEw5bm05bqm5rWB5oSf6Ziy5Yi256CU6K6o5Lya5rOo5a6a5LiO5b6A5bm05LiN5ZCM
44CC5q+P5bm06YO95Lya5Y+s5byA55qE5LiA5qyh5L6L5Lya77yM5LuK5bm06Laz6Laz5o+Q5YmN
5LqG5LiA5Liq5pyI77yb5Lya5LiK56CU6K6o55qE5Li76aKY77yM5bey5LuO5Lul5YmN55qE5a2j
6IqC5oCn5rWB5oSf77yM5Y+Y5oiQ5Lul55Sy5Z6LSDFOMea1geaEn+S4uumHjeeCueOAglx4MEHX
kdec16nXm9eqIik7CisKKyAgICAvLyBUZXN0IGZvciBDaGluZXNlLiBObyBDaGluZXNlIHNlZ21l
bnRhdGlvbiBpbiBwbGF0Zm9ybS9tYWMuCisgICAgYWN0dWFsID0gZXhwYW5kUmFuZ2VTdHJpbmco
cmFuZ2UsICd6aC1DTi1kaXYnLCAwLCAnemgtQ04tZGl2JywgMCwgJ3dvcmQnLCB0cnVlKTsKKyAg
ICBhc3NlcnRFcXVhbCgiQ2hpbmVzZSB3b3JkMCIsIGFjdHVhbCwgIuWcqCIpOworICAgIGFjdHVh
bCA9IGV4cGFuZFJhbmdlU3RyaW5nKHJhbmdlLCAnemgtQ04tZGl2JywgMSwgJ3poLUNOLWRpdics
IDEsICd3b3JkJywgdHJ1ZSk7CisgICAgYXNzZXJ0RXF1YWwoIkNoaW5lc2Ugd29yZDEiLCBhY3R1
YWwsICLnlLIiKTsKKyAgICBhY3R1YWwgPSBleHBhbmRSYW5nZVN0cmluZyhyYW5nZSwgJ3poLUNO
LWRpdicsIDIsICd6aC1DTi1kaXYnLCAyLCAnd29yZCcsIHRydWUpOworICAgIGFzc2VydEVxdWFs
KCJDaGluZXNlIHdvcmQxIiwgYWN0dWFsLCAi5Z6LIik7CisKKyAgICBhY3R1YWwgPSBleHBhbmRS
YW5nZVN0cmluZyhyYW5nZSwgJ3poLUNOLWRpdicsIDMsICd6aC1DTi1kaXYnLCAzLCAnc2VudGVu
Y2UnLCB0cnVlKTsKKyAgICBhc3NlcnRFcXVhbCgiQ2hpbmVzZSBzZW50ZW5jZTogIiwgYWN0dWFs
LCAi5Zyo55Sy5Z6LSDFOMea1geaEn+WPr+iDveWHuueOsOWkp+a1geihjOeahOitpuWRiuWjsOS4
re+8jOaYqOWkqeWPrOW8gOeahOaxn+iLj+ecgTIwMDktMjAxMOW5tOW6pua1geaEn+mYsuWItueg
lOiuqOS8muazqOWumuS4juW+gOW5tOS4jeWQjOOAgiIpOworCisgICAgYWN0dWFsID0gZXhwYW5k
UmFuZ2VTdHJpbmcocmFuZ2UsICd6aC1DTi1kaXYnLCAzLCAnemgtQ04tZGl2JywgMywgJ2Jsb2Nr
JywgdHJ1ZSk7CisgICAgYXNzZXJ0RXF1YWwoIkNoaW5lc2UgYmxvY2s6ICIsIGFjdHVhbCwgIuWc
qOeUsuWei0gxTjHmtYHmhJ/lj6/og73lh7rnjrDlpKfmtYHooYznmoTorablkYrlo7DkuK3vvIzm
mKjlpKnlj6zlvIDnmoTmsZ/oi4/nnIEyMDA5LTIwMTDlubTluqbmtYHmhJ/pmLLliLbnoJTorqjk
vJrms6jlrprkuI7lvoDlubTkuI3lkIzjgILmr4/lubTpg73kvJrlj6zlvIDnmoTkuIDmrKHkvovk
vJrvvIzku4rlubTotrPotrPmj5DliY3kuobkuIDkuKrmnIjvvJvkvJrkuIrnoJTorqjnmoTkuLvp
opjvvIzlt7Lku47ku6XliY3nmoTlraPoioLmgKfmtYHmhJ/vvIzlj5jmiJDku6XnlLLlnotIMU4x
5rWB5oSf5Li66YeN54K544CCIik7CisKKyAgICAvLyBUZXN0IGZvciBIZWJyZXcuCisgICAgYWN0
dWFsID0gZXhwYW5kUmFuZ2VTdHJpbmcocmFuZ2UsICdoZS1kaXYnLCAxLCAnaGUtZGl2JywgMSwg
J3dvcmQnLCB0cnVlKTsKKyAgICBhc3NlcnRFcXVhbCgiSGVicmV3IHdvcmQiLCBhY3R1YWwsICAi
15HXnNep15vXqiIpOworCisgICAgYWN0dWFsID0gZXhwYW5kUmFuZ2VTdHJpbmcocmFuZ2UsICdo
ZS1kaXYnLCAxLCAnaGUtZGl2JywgMSwgJ3NlbnRlbmNlJywgdHJ1ZSk7CisgICAgYXNzZXJ0RXF1
YWwoIkhlYnJldyBzZW50ZW5jZSIsIGFjdHVhbCwgJ9eR15zXqdeb16og16nXqCDXlNeX15XXpSDX
lNeS15nXkdeVINec15TXqten16TXldeqINei15zXmdeVINeR16LXp9eR15XXqiDXlNeg15fXmdeZ
16rXlSDXnNeT16jXldepINee15TXnteV16LXnteT15nXnSDXnNen15XXqNehINem15XXoteo15nX
nSDXqdeZ16jXldeqINem15HXkNeZINeQ15Ug15zXkNeV157XmTogIteU157Xqten15nXpNeZ150g
16bXkdeV16LXmdedLCDXnteZINep16jXldem15Qg15zXmdeZ16bXkiDXkNeqINeU157Xk9eZ16DX
lCDXqNeV16bXlCDXktedINec16nXqNeqINeQ15XXqteUIicgKTsKKworICAgIGFjdHVhbCA9IGV4
cGFuZFJhbmdlU3RyaW5nKHJhbmdlLCAnaGUtZGl2JywgMCwgJ2hlLWRpdicsIDAsICdzZW50ZW5j
ZScsIGZhbHNlKTsKKyAgICBhc3NlcnRFcXVhbCgiSGVicmV3IGJsb2NrIiwgYWN0dWFsLCAn15HX
nNep15vXqiDXqdeoINeU15fXldelINeU15LXmdeR15Ug15zXlNeq16fXpNeV16og16LXnNeZ15Ug
15HXoten15HXldeqINeU16DXl9eZ15nXqteVINec15PXqNeV16kg157XlNee15XXotee15PXmded
INec16fXldeo16Eg16bXldei16jXmdedINep15nXqNeV16og16bXkdeQ15kg15DXlSDXnNeQ15XX
nteZOiAi15TXnteq16fXmdek15nXnSDXpteR15XXoteZ150sINee15kg16nXqNeV16bXlCDXnNeZ
15nXpteSINeQ16og15TXnteT15nXoNeUINeo15XXpteUINeS150g15zXqdeo16og15DXldeq15Qi
JyAgICApOworfQorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9InRlc3QoKSI+Cis8cD5UaGlzIGlz
IHRoZSBiZWdpbiBvZiBhIGJsb2NrLiBBIGJsb2NrIGlzIGEgY29sbGVjdGlvbiBvZiBzZW50ZW5j
ZXMuIEVhY2ggc2VudGVuY2UgYmVnaW5zIHdpdGggY2FwaXRhbAorbGV0dGVyIGFuZCBlbmRzIHdp
dGggYSBwdW5jdHVhdGlvbi4KKzwvcD4KKzxwIGlkPSJtdWx0aWxpbmVTZW50ZW5jZSI+Tm93LCBh
IHNlbnRlbmNlCitpcyBkaXZpZGVkIGludG8KK211bHRpcGxlIGxpbmVzLgorPC9wPgorPHAgaWQ9
Imluc3RydWN0aW9ucyI+Um9sbCB0aGUgbW91c2UgYXJvdW5kIHRoZSBwYWdlLiBUaGUgY29vcmRp
bmF0ZXMKK29mIHRoZSBtb3VzZSBwb2ludGVyIGFyZSBjdXJyZW50bHkgYXRvcCBhbiBlbGVtZW50
PGJyIGlkPSJteWJyIj53aG9zZSBJRCAKK2lzOiI8c3BhbiBpZD0ibXlzcGFuIiBzdHlsZT0iZm9u
dC13ZWlnaHQ6Ym9sZCI+PC9zcGFuPiIuPC9wPgorCis8dGFibGUgYm9yZGVyPTEgaWQ9Im15VGFi
bGUiPgorPHRyIGlkPSJ0cjEiPgorICAgIDx0ZCBpZD0idGRfQTEiPkNlbGwgQTE8L3RkPgorICAg
IDx0ZCBpZD0idGRfQjEiPkNlbGwgQjE8L3RkPgorPC90cj4KKzx0ciBpZD0idHIyIj4KKyAgICA8
dGQgaWQ9InRkX0EyIj5DZWxsIEEyPC90ZD4KKyAgICA8dGQgaWQ9InRkX0IyIj5DZWxsIEIyPC90
ZD4KKzwvdHI+Cis8L3RhYmxlPgorPGgyIGlkPSJzZWMxIj5TZWN0aW9uIDE8L2gyPgorPHAgaWQ9
InAxIj50ZXh0LjwvcD4KKzxoMiBpZD0ic2VjMiI+U2VjdGlvbiAyPC9oMj4KKzxwIGlkPSJwMiI+
dGV4dC48L3A+Cis8ZGl2IGlkPSJteWRpdiIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyB0b3A6
MzQwOyBsZWZ0OjMwMDsgYmFja2dyb3VuZC1jb2xvcjp5ZWxsb3ciPgorSGVyZSBpcyBhIHBvc2l0
aW9uZWQgZWxlbWVudC48L2Rpdj4KKzxkaXYgaWQ9InpoLUNOLWRpdiI+5Zyo55Sy5Z6LSDFOMea1
geaEn+WPr+iDveWHuueOsOWkp+a1geihjOeahOitpuWRiuWjsOS4re+8jOaYqOWkqeWPrOW8gOea
hOaxn+iLj+ecgTIwMDktMjAxMOW5tOW6pua1geaEn+mYsuWItueglOiuqOS8muazqOWumuS4juW+
gOW5tOS4jeWQjOOAguavj+W5tOmDveS8muWPrOW8gOeahOS4gOasoeS+i+S8mu+8jOS7iuW5tOi2
s+i2s+aPkOWJjeS6huS4gOS4quaciO+8m+S8muS4iueglOiuqOeahOS4u+mimO+8jOW3suS7juS7
peWJjeeahOWto+iKguaAp+a1geaEn++8jOWPmOaIkOS7peeUsuWei0gxTjHmtYHmhJ/kuLrph43n
grnjgII8L2Rpdj4KKzxkaXYgaWQ9ImhlLWRpdiI+15HXnNep15vXqiDXqdeoINeU15fXldelINeU
15LXmdeR15Ug15zXlNeq16fXpNeV16og16LXnNeZ15Ug15HXoten15HXldeqINeU16DXl9eZ15nX
qteVINec15PXqNeV16kg157XlNee15XXotee15PXmdedINec16fXldeo16Eg16bXldei16jXmded
INep15nXqNeV16og16bXkdeQ15kg15DXlSDXnNeQ15XXnteZOiAi15TXnteq16fXmdek15nXnSDX
pteR15XXoteZ150sINee15kg16nXqNeV16bXlCDXnNeZ15nXpteSINeQ16og15TXnteT15nXoNeU
INeo15XXpteUINeS150g15zXqdeo16og15DXldeq15QiPC9kaXY+Cis8dWwgaWQ9ImNvbnNvbGUi
PjwvdWw+CisKKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1dp
bmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gNDgyMTIpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3Bl
cnRpZXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMjE1LDYgKzEyMTUsNyBAQCB3
aW5kb3cuUmFuZ2UucHJvdG90eXBlLmNvbXBhcmVQb2ludCBbZnVuCiB3aW5kb3cuUmFuZ2UucHJv
dG90eXBlLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBbZnVuY3Rpb25dCiB3aW5kb3cuUmFuZ2Uu
cHJvdG90eXBlLmRlbGV0ZUNvbnRlbnRzIFtmdW5jdGlvbl0KIHdpbmRvdy5SYW5nZS5wcm90b3R5
cGUuZGV0YWNoIFtmdW5jdGlvbl0KK3dpbmRvdy5SYW5nZS5wcm90b3R5cGUuZXhwYW5kIFtmdW5j
dGlvbl0KIHdpbmRvdy5SYW5nZS5wcm90b3R5cGUuZXh0cmFjdENvbnRlbnRzIFtmdW5jdGlvbl0K
IHdpbmRvdy5SYW5nZS5wcm90b3R5cGUuaW5zZXJ0Tm9kZSBbZnVuY3Rpb25dCiB3aW5kb3cuUmFu
Z2UucHJvdG90eXBlLmludGVyc2VjdHNOb2RlIFtmdW5jdGlvbl0K
</data>

          </attachment>
      

    </bug>

</bugzilla>