<?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>81408</bug_id>
          
          <creation_ts>2012-03-16 14:33:34 -0700</creation_ts>
          <short_desc>visual word movement: using cache to decrease the number of collectLeafBoxesInLogicalOrder on RootInlineBox</short_desc>
          <delta_ts>2012-03-21 17:21:09 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>25298</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Xiaomei Ji">xji</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>580969</commentid>
    <comment_count>0</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2012-03-16 14:33:34 -0700</bug_when>
    <thetext>visual word movement: using cache to decrease the number of collectLeafBoxesInLogicalOrder on RootInlineBox</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580978</commentid>
    <comment_count>1</comment_count>
      <attachid>132385</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2012-03-16 14:44:02 -0700</bug_when>
    <thetext>Created attachment 132385
patch w/ layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580997</commentid>
    <comment_count>2</comment_count>
      <attachid>132385</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-16 14:58:12 -0700</bug_when>
    <thetext>Comment on attachment 132385
patch w/ layout test

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

&gt; Source/WebCore/editing/visible_units.cpp:173
&gt; +    const Vector&lt;InlineBox*&gt;&amp; leafBoxesInLogicalOrder() const { return m_leafBoxes; }

Can we call these functions just &quot;collect&quot; and &quot;boxes&quot;? It&apos;s redundant to repeat it in the function names.

&gt; Source/WebCore/editing/visible_units.cpp:174
&gt; +    

We should probably add a function to find the index of a box in the vector.

&gt; Source/WebCore/editing/visible_units.cpp:197
&gt; +    const Vector&lt;InlineBox*&gt;&amp;  leafBoxesInLogicalOrder = rootAndLeafBoxes.collectLeafBoxesInLogicalOrder(root);

It seems like this local variable is redundant.

&gt; Source/WebCore/editing/visible_units.cpp:235
&gt; +        if (!rootAndLeafBoxes.leafBoxesInLogicalOrder().size())

We should just add size() to simplify the expression here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581973</commentid>
    <comment_count>3</comment_count>
      <attachid>132385</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2012-03-19 11:28:18 -0700</bug_when>
    <thetext>Comment on attachment 132385
patch w/ layout test

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

&gt;&gt; Source/WebCore/editing/visible_units.cpp:173
&gt;&gt; +    const Vector&lt;InlineBox*&gt;&amp; leafBoxesInLogicalOrder() const { return m_leafBoxes; }
&gt; 
&gt; Can we call these functions just &quot;collect&quot; and &quot;boxes&quot;? It&apos;s redundant to repeat it in the function names.

changed to &quot;collectBoxes&quot;. the other function is removed.

&gt;&gt; Source/WebCore/editing/visible_units.cpp:174
&gt;&gt; +    
&gt; 
&gt; We should probably add a function to find the index of a box in the vector.

done.

&gt;&gt; Source/WebCore/editing/visible_units.cpp:197
&gt;&gt; +    const Vector&lt;InlineBox*&gt;&amp;  leafBoxesInLogicalOrder = rootAndLeafBoxes.collectLeafBoxesInLogicalOrder(root);
&gt; 
&gt; It seems like this local variable is redundant.

The code is changed. Most of the functionalities are encapsulate in CachedRootAndLeafBoxesInLogicalOrder now.

&gt;&gt; Source/WebCore/editing/visible_units.cpp:235
&gt;&gt; +        if (!rootAndLeafBoxes.leafBoxesInLogicalOrder().size())
&gt; 
&gt; We should just add size() to simplify the expression here.

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581977</commentid>
    <comment_count>4</comment_count>
      <attachid>132616</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2012-03-19 11:30:41 -0700</bug_when>
    <thetext>Created attachment 132616
patch w/ layout test

Comparing with previous patch, this patch encapsulates information better. previousBoxInLine and nextBoxInLine are removed, and their functionality are moved inside CachedRootAndLeafBoxesInLogicalOrder as previousTextBox and nextTextBox.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584437</commentid>
    <comment_count>5</comment_count>
      <attachid>132616</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-21 11:50:07 -0700</bug_when>
    <thetext>Comment on attachment 132616
patch w/ layout test

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

r=me provided numOfBoxes is renamed to something else.

&gt; Source/WebCore/editing/visible_units.cpp:160
&gt; +class CachedRootAndLeafBoxesInLogicalOrder {

It might be better to call it CachedLogicallyOrderedLeafBoxes since we&apos;re not exactly caching root inline boxes.
We&apos;re caching leaf boxes under a particular root box.

&gt; Source/WebCore/editing/visible_units.cpp:167
&gt; +    size_t numOfBoxes() const { return m_leafBoxes.size(); }

Again, please don&apos;t use abbreviations like &quot;num&quot;. Here, &quot;size()&quot; or &quot;length()&quot; would suffice since the class is called CachedRootAndLeafBoxesInLogicalOrder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584646</commentid>
    <comment_count>6</comment_count>
      <attachid>132616</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2012-03-21 14:47:24 -0700</bug_when>
    <thetext>Comment on attachment 132616
patch w/ layout test

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

&gt;&gt; Source/WebCore/editing/visible_units.cpp:160
&gt;&gt; +class CachedRootAndLeafBoxesInLogicalOrder {
&gt; 
&gt; It might be better to call it CachedLogicallyOrderedLeafBoxes since we&apos;re not exactly caching root inline boxes.
&gt; We&apos;re caching leaf boxes under a particular root box.

done. And changed the local variable name from &quot;rootAndLeafBoxes&quot; to &quot;leafBoxes&quot;.

&gt;&gt; Source/WebCore/editing/visible_units.cpp:167
&gt;&gt; +    size_t numOfBoxes() const { return m_leafBoxes.size(); }
&gt; 
&gt; Again, please don&apos;t use abbreviations like &quot;num&quot;. Here, &quot;size()&quot; or &quot;length()&quot; would suffice since the class is called CachedRootAndLeafBoxesInLogicalOrder.

changed to &quot;size()&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584663</commentid>
    <comment_count>7</comment_count>
      <attachid>133120</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2012-03-21 15:08:12 -0700</bug_when>
    <thetext>Created attachment 133120
patch w/ layout test

sync-ed and address comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584668</commentid>
    <comment_count>8</comment_count>
      <attachid>133120</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2012-03-21 15:12:35 -0700</bug_when>
    <thetext>Comment on attachment 133120
patch w/ layout test

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

&gt; Source/WebCore/editing/visible_units.cpp:-374
&gt; -        Vector&lt;UChar, 1024&gt; string;

I moved this to outside of loop (it is always clear-ed before use in wordBreakIteratorForMinOffsetBoundary() and wordBreakIteratorForMaxOffsetBoundary().

&gt; Source/WebCore/editing/visible_units.cpp:407
&gt; +            iter = wordBreakIteratorForMinOffsetBoundary(visiblePosition, textBox, previousBoxLength, previousBoxInDifferentBlock, string, leafBoxes);

After sync, this function&apos;s parameter becomes a bit lengthy. Do you think it is better to inline those 2 functions (wordBreakIteratorForMinOffsetBoundary and wordBreakIteratorForMaxOffsetBoundary) or worth to introduce a struct to hold those parameters? Neither of them sounds elegant for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584674</commentid>
    <comment_count>9</comment_count>
      <attachid>133120</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-21 15:14:59 -0700</bug_when>
    <thetext>Comment on attachment 133120
patch w/ layout test

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

&gt;&gt; Source/WebCore/editing/visible_units.cpp:407
&gt;&gt; +            iter = wordBreakIteratorForMinOffsetBoundary(visiblePosition, textBox, previousBoxLength, previousBoxInDifferentBlock, string, leafBoxes);
&gt; 
&gt; After sync, this function&apos;s parameter becomes a bit lengthy. Do you think it is better to inline those 2 functions (wordBreakIteratorForMinOffsetBoundary and wordBreakIteratorForMaxOffsetBoundary) or worth to introduce a struct to hold those parameters? Neither of them sounds elegant for me.

We can do that in a follow up patch :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584709</commentid>
    <comment_count>10</comment_count>
      <attachid>133129</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2012-03-21 15:41:43 -0700</bug_when>
    <thetext>Created attachment 133129
patch

add the change of &quot;moving string declared in visualWordPosition() to outside of loop&quot; in WebCore/ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584800</commentid>
    <comment_count>11</comment_count>
      <attachid>133129</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-21 17:21:04 -0700</bug_when>
    <thetext>Comment on attachment 133129
patch

Clearing flags on attachment: 133129

Committed r111624: &lt;http://trac.webkit.org/changeset/111624&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584802</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-21 17:21:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132385</attachid>
            <date>2012-03-16 14:44:02 -0700</date>
            <delta_ts>2012-03-19 11:30:41 -0700</delta_ts>
            <desc>patch w/ layout test</desc>
            <filename>81408.v1</filename>
            <type>text/plain</type>
            <size>13126</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMTA2NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDEyLTAzLTE2ICBYaWFvbWVp
IEppICA8eGppQGNocm9taXVtLm9yZz4KKworICAgICAgICB2aXN1YWwgd29yZCBtb3ZlbWVudDog
dXNpbmcgY2FjaGUgdG8gZGVjcmVhc2UgdGhlIG51bWJlciBvZiBjb2xsZWN0TGVhZkJveGVzSW5M
b2dpY2FsT3JkZXIgb24gUm9vdElubGluZUJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE0MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGVkaXRpbmcvdmlzaWJsZV91bml0cy5jcHA6CisgICAgICAg
IChDYWNoZWRSb290QW5kTGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIpOiBBZGRlZCBjbGFzcyB0byBj
YWNoZSB0aGUgUm9vdElubGluZUJveCBhbmQgaXRzIGxlYWYgYm94ZXMgaW4gbG9naWNhbCBvcmRl
ci4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJvb3RBbmRMZWFmQm94ZXNJbkxvZ2ljYWxPcmRl
cjo6bGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRSb290QW5kTGVhZkJveGVzSW5Mb2dpY2FsT3JkZXI6OkNhY2hlZFJv
b3RBbmRMZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRS
b290QW5kTGVhZkJveGVzSW5Mb2dpY2FsT3JkZXI6OmNvbGxlY3RMZWFmQm94ZXNJbkxvZ2ljYWxP
cmRlcik6CisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91c0JveEluTGluZSk6IFBhc3NpbmcgaW4g
Q2FjaGVkUm9vdEFuZExlYWZCb3hlc0luTG9naWNhbE9yZGVyIG9iamVjdCBhcm91bmQuCisgICAg
ICAgIChXZWJDb3JlOjpsb2dpY2FsbHlQcmV2aW91c0JveCk6CisgICAgICAgIChXZWJDb3JlOjpu
ZXh0Qm94SW5MaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmxvZ2ljYWxseU5leHRCb3gpOgorICAg
ICAgICAoV2ViQ29yZTo6d29yZEJyZWFrSXRlcmF0b3JGb3JNaW5PZmZzZXRCb3VuZGFyeSk6Cisg
ICAgICAgIChXZWJDb3JlOjp3b3JkQnJlYWtJdGVyYXRvckZvck1heE9mZnNldEJvdW5kYXJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OnZpc3VhbFdvcmRQb3NpdGlvbik6CisKIDIwMTItMDMtMTYgIEVt
aWwgQSBFa2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEZpeCByb3VuZGluZyBh
bmQgdXNhZ2Ugb2YgTGF5b3V0VW5pdHMgaW4gUmVuZGVyQm94TW9kZWxPYmplY3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkocmV2aXNpb24gMTExMDIxKQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTY2LDEzICsxNjYsMzUgQEAgc3RhdGljIGludCBib3hJbmRleEluVmVjdG9yKGNvbnN0
IElubGluZQogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3QgSW5saW5lVGV4dEJveCog
cHJldmlvdXNCb3hJbkxpbmUoY29uc3QgUm9vdElubGluZUJveCogcm9vdCwgY29uc3QgSW5saW5l
VGV4dEJveCogYm94LCBWZWN0b3I8SW5saW5lQm94Kj4mIGxlYWZCb3hlc0luTG9naWNhbE9yZGVy
KQorY2xhc3MgQ2FjaGVkUm9vdEFuZExlYWZCb3hlc0luTG9naWNhbE9yZGVyIHsKK3B1YmxpYzoK
KyAgICBDYWNoZWRSb290QW5kTGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIoKTsKKyAgICBjb25zdCBW
ZWN0b3I8SW5saW5lQm94Kj4mIGNvbGxlY3RMZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcihjb25zdCBS
b290SW5saW5lQm94Kik7CisgICAgY29uc3QgVmVjdG9yPElubGluZUJveCo+JiBsZWFmQm94ZXNJ
bkxvZ2ljYWxPcmRlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGVhZkJveGVzOyB9CisgICAgCitwcml2
YXRlOgorICAgIGNvbnN0IFJvb3RJbmxpbmVCb3gqIG1fcm9vdElubGluZUJveDsKKyAgICBWZWN0
b3I8SW5saW5lQm94Kj4gbV9sZWFmQm94ZXM7Cit9OworCitDYWNoZWRSb290QW5kTGVhZkJveGVz
SW5Mb2dpY2FsT3JkZXI6OkNhY2hlZFJvb3RBbmRMZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcigpIDog
bV9yb290SW5saW5lQm94KDApIHsgfTsKKworY29uc3QgVmVjdG9yPElubGluZUJveCo+JiBDYWNo
ZWRSb290QW5kTGVhZkJveGVzSW5Mb2dpY2FsT3JkZXI6OmNvbGxlY3RMZWFmQm94ZXNJbkxvZ2lj
YWxPcmRlcihjb25zdCBSb290SW5saW5lQm94KiByb290KQoreworICAgIGlmIChtX3Jvb3RJbmxp
bmVCb3ggIT0gcm9vdCkgeworICAgICAgICBtX3Jvb3RJbmxpbmVCb3ggPSByb290OworICAgICAg
ICBtX2xlYWZCb3hlcy5jbGVhcigpOworICAgICAgICByb290LT5jb2xsZWN0TGVhZkJveGVzSW5M
b2dpY2FsT3JkZXIobV9sZWFmQm94ZXMpOworICAgIH0KKyAgICByZXR1cm4gbV9sZWFmQm94ZXM7
Cit9CisKK3N0YXRpYyBjb25zdCBJbmxpbmVUZXh0Qm94KiBwcmV2aW91c0JveEluTGluZShjb25z
dCBSb290SW5saW5lQm94KiByb290LCBjb25zdCBJbmxpbmVUZXh0Qm94KiBib3gsIENhY2hlZFJv
b3RBbmRMZWFmQm94ZXNJbkxvZ2ljYWxPcmRlciYgcm9vdEFuZExlYWZCb3hlcykKIHsKICAgICBp
ZiAoIXJvb3QpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgbGVhZkJveGVzSW5Mb2dpY2FsT3Jk
ZXIuY2xlYXIoKTsKLSAgICByb290LT5jb2xsZWN0TGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIobGVh
ZkJveGVzSW5Mb2dpY2FsT3JkZXIpOworICAgIGNvbnN0IFZlY3RvcjxJbmxpbmVCb3gqPiYgIGxl
YWZCb3hlc0luTG9naWNhbE9yZGVyID0gcm9vdEFuZExlYWZCb3hlcy5jb2xsZWN0TGVhZkJveGVz
SW5Mb2dpY2FsT3JkZXIocm9vdCk7CiAKICAgICAvLyBJZiBib3ggaXMgbnVsbCwgcm9vdCBpcyBi
b3gncyBwcmV2aW91cyBSb290SW5saW5lQm94LCBhbmQgcHJldmlvdXNCb3ggaXMgdGhlIGxhc3Qg
bG9naWNhbCBib3ggaW4gcm9vdC4KICAgICBpbnQgYm94SW5kZXggPSBsZWFmQm94ZXNJbkxvZ2lj
YWxPcmRlci5zaXplKCkgLSAxOwpAQCAtMTg3LDE2ICsyMDksMTUgQEAgc3RhdGljIGNvbnN0IElu
bGluZVRleHRCb3gqIHByZXZpb3VzQm94SQogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgY29u
c3QgSW5saW5lVGV4dEJveCogbG9naWNhbGx5UHJldmlvdXNCb3goY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiB2aXNpYmxlUG9zaXRpb24sIGNvbnN0IElubGluZVRleHRCb3gqIHRleHRCb3gsIGJvb2wm
IHByZXZpb3VzQm94SW5EaWZmZXJlbnRCbG9jaykKK3N0YXRpYyBjb25zdCBJbmxpbmVUZXh0Qm94
KiBsb2dpY2FsbHlQcmV2aW91c0JveChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3Np
dGlvbiwgY29uc3QgSW5saW5lVGV4dEJveCogdGV4dEJveCwgYm9vbCYgcHJldmlvdXNCb3hJbkRp
ZmZlcmVudEJsb2NrLCBDYWNoZWRSb290QW5kTGVhZkJveGVzSW5Mb2dpY2FsT3JkZXImIHJvb3RB
bmRMZWFmQm94ZXMpCiB7CiAgICAgY29uc3QgSW5saW5lQm94KiBzdGFydEJveCA9IHRleHRCb3g7
Ci0gICAgVmVjdG9yPElubGluZUJveCo+IGxlYWZCb3hlc0luTG9naWNhbE9yZGVyOwogCi0gICAg
Y29uc3QgSW5saW5lVGV4dEJveCogcHJldmlvdXNCb3ggPSBwcmV2aW91c0JveEluTGluZShzdGFy
dEJveC0+cm9vdCgpLCB0ZXh0Qm94LCBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcik7CisgICAgY29u
c3QgSW5saW5lVGV4dEJveCogcHJldmlvdXNCb3ggPSBwcmV2aW91c0JveEluTGluZShzdGFydEJv
eC0+cm9vdCgpLCB0ZXh0Qm94LCByb290QW5kTGVhZkJveGVzKTsKICAgICBpZiAocHJldmlvdXNC
b3gpCiAgICAgICAgIHJldHVybiBwcmV2aW91c0JveDsKIAotICAgIHByZXZpb3VzQm94ID0gcHJl
dmlvdXNCb3hJbkxpbmUoc3RhcnRCb3gtPnJvb3QoKS0+cHJldlJvb3RCb3goKSwgMCwgbGVhZkJv
eGVzSW5Mb2dpY2FsT3JkZXIpOworICAgIHByZXZpb3VzQm94ID0gcHJldmlvdXNCb3hJbkxpbmUo
c3RhcnRCb3gtPnJvb3QoKS0+cHJldlJvb3RCb3goKSwgMCwgcm9vdEFuZExlYWZCb3hlcyk7CiAg
ICAgaWYgKHByZXZpb3VzQm94KQogICAgICAgICByZXR1cm4gcHJldmlvdXNCb3g7CiAKQEAgLTIw
NSwyNiArMjI2LDI1IEBAIHN0YXRpYyBjb25zdCBJbmxpbmVUZXh0Qm94KiBsb2dpY2FsbHlQcmUK
ICAgICAgICAgaWYgKCFwcmV2aW91c1Jvb3QpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICBwcmV2aW91c0JveCA9IHByZXZpb3VzQm94SW5MaW5lKHByZXZpb3VzUm9vdCwgMCwgbGVhZkJv
eGVzSW5Mb2dpY2FsT3JkZXIpOworICAgICAgICBwcmV2aW91c0JveCA9IHByZXZpb3VzQm94SW5M
aW5lKHByZXZpb3VzUm9vdCwgMCwgcm9vdEFuZExlYWZCb3hlcyk7CiAgICAgICAgIGlmIChwcmV2
aW91c0JveCkgewogICAgICAgICAgICAgcHJldmlvdXNCb3hJbkRpZmZlcmVudEJsb2NrID0gdHJ1
ZTsKICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c0JveDsKICAgICAgICAgfQogCi0gICAgICAg
IGlmICghbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIuc2l6ZSgpKQorICAgICAgICBpZiAoIXJvb3RB
bmRMZWFmQm94ZXMubGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIoKS5zaXplKCkpCiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgc3RhcnRCb3ggPSBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRlclswXTsK
KyAgICAgICAgc3RhcnRCb3ggPSByb290QW5kTGVhZkJveGVzLmxlYWZCb3hlc0luTG9naWNhbE9y
ZGVyKClbMF07CiAgICAgfQogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3QgSW5saW5l
VGV4dEJveCogbmV4dEJveEluTGluZShjb25zdCBSb290SW5saW5lQm94KiByb290LCBjb25zdCBJ
bmxpbmVUZXh0Qm94KiBib3gsIFZlY3RvcjxJbmxpbmVCb3gqPiYgbGVhZkJveGVzSW5Mb2dpY2Fs
T3JkZXIpCitzdGF0aWMgY29uc3QgSW5saW5lVGV4dEJveCogbmV4dEJveEluTGluZShjb25zdCBS
b290SW5saW5lQm94KiByb290LCBjb25zdCBJbmxpbmVUZXh0Qm94KiBib3gsIENhY2hlZFJvb3RB
bmRMZWFmQm94ZXNJbkxvZ2ljYWxPcmRlciYgcm9vdEFuZExlYWZCb3hlcykKIHsKICAgICBpZiAo
IXJvb3QpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIu
Y2xlYXIoKTsKLSAgICByb290LT5jb2xsZWN0TGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIobGVhZkJv
eGVzSW5Mb2dpY2FsT3JkZXIpOworICAgIGNvbnN0IFZlY3RvcjxJbmxpbmVCb3gqPiYgIGxlYWZC
b3hlc0luTG9naWNhbE9yZGVyID0gcm9vdEFuZExlYWZCb3hlcy5jb2xsZWN0TGVhZkJveGVzSW5M
b2dpY2FsT3JkZXIocm9vdCk7CiAKICAgICAvLyBJZiBib3ggaXMgbnVsbCwgcm9vdCBpcyBib3gn
cyBuZXh0IFJvb3RJbmxpbmVCb3gsIGFuZCBuZXh0Qm94IGlzIHRoZSBmaXJzdCBsb2dpY2FsIGJv
eCBpbiByb290LgogICAgIC8vIE90aGVyd2lzZSwgcm9vdCBpcyBib3gncyBSb290SW5saW5lQm94
LCBhbmQgbmV4dEJveCBpcyB0aGUgbmV4dCBsb2dpY2FsIGJveCBpbiB0aGUgc2FtZSBsaW5lLgpA
QCAtMjQwLDE2ICsyNjAsMTUgQEAgc3RhdGljIGNvbnN0IElubGluZVRleHRCb3gqIG5leHRCb3hJ
bkxpbgogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3QgSW5saW5lVGV4dEJveCogbG9n
aWNhbGx5TmV4dEJveChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbiwgY29u
c3QgSW5saW5lVGV4dEJveCogdGV4dEJveCwgYm9vbCYgbmV4dEJveEluRGlmZmVyZW50QmxvY2sp
CitzdGF0aWMgY29uc3QgSW5saW5lVGV4dEJveCogbG9naWNhbGx5TmV4dEJveChjb25zdCBWaXNp
YmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbiwgY29uc3QgSW5saW5lVGV4dEJveCogdGV4dEJv
eCwgYm9vbCYgbmV4dEJveEluRGlmZmVyZW50QmxvY2ssIENhY2hlZFJvb3RBbmRMZWFmQm94ZXNJ
bkxvZ2ljYWxPcmRlciYgcm9vdEFuZExlYWZCb3hlcykKIHsKICAgICBjb25zdCBJbmxpbmVCb3gq
IHN0YXJ0Qm94ID0gdGV4dEJveDsKLSAgICBWZWN0b3I8SW5saW5lQm94Kj4gbGVhZkJveGVzSW5M
b2dpY2FsT3JkZXI7CiAKLSAgICBjb25zdCBJbmxpbmVUZXh0Qm94KiBuZXh0Qm94ID0gbmV4dEJv
eEluTGluZShzdGFydEJveC0+cm9vdCgpLCB0ZXh0Qm94LCBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRl
cik7CisgICAgY29uc3QgSW5saW5lVGV4dEJveCogbmV4dEJveCA9IG5leHRCb3hJbkxpbmUoc3Rh
cnRCb3gtPnJvb3QoKSwgdGV4dEJveCwgcm9vdEFuZExlYWZCb3hlcyk7CiAgICAgaWYgKG5leHRC
b3gpCiAgICAgICAgIHJldHVybiBuZXh0Qm94OwogCi0gICAgbmV4dEJveCA9IG5leHRCb3hJbkxp
bmUoc3RhcnRCb3gtPnJvb3QoKS0+bmV4dFJvb3RCb3goKSwgMCwgbGVhZkJveGVzSW5Mb2dpY2Fs
T3JkZXIpOworICAgIG5leHRCb3ggPSBuZXh0Qm94SW5MaW5lKHN0YXJ0Qm94LT5yb290KCktPm5l
eHRSb290Qm94KCksIDAsIHJvb3RBbmRMZWFmQm94ZXMpOwogICAgIGlmIChuZXh0Qm94KQogICAg
ICAgICByZXR1cm4gbmV4dEJveDsKIApAQCAtMjU4LDI2ICsyNzcsMjYgQEAgc3RhdGljIGNvbnN0
IElubGluZVRleHRCb3gqIGxvZ2ljYWxseU5leAogICAgICAgICBpZiAoIW5leHRSb290KQogICAg
ICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgbmV4dEJveCA9IG5leHRCb3hJbkxpbmUobmV4dFJv
b3QsIDAsIGxlYWZCb3hlc0luTG9naWNhbE9yZGVyKTsKKyAgICAgICAgbmV4dEJveCA9IG5leHRC
b3hJbkxpbmUobmV4dFJvb3QsIDAsIHJvb3RBbmRMZWFmQm94ZXMpOwogICAgICAgICBpZiAobmV4
dEJveCkgewogICAgICAgICAgICAgbmV4dEJveEluRGlmZmVyZW50QmxvY2sgPSB0cnVlOwogICAg
ICAgICAgICAgcmV0dXJuIG5leHRCb3g7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIWxlYWZC
b3hlc0luTG9naWNhbE9yZGVyLnNpemUoKSkKKyAgICAgICAgaWYgKCFyb290QW5kTGVhZkJveGVz
LmxlYWZCb3hlc0luTG9naWNhbE9yZGVyKCkuc2l6ZSgpKQogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIHN0YXJ0Qm94ID0gbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXJbMF07CisgICAgICAgIHN0
YXJ0Qm94ID0gcm9vdEFuZExlYWZCb3hlcy5sZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcigpWzBdOwog
ICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiB3b3Jk
QnJlYWtJdGVyYXRvckZvck1pbk9mZnNldEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
dmlzaWJsZVBvc2l0aW9uLCBjb25zdCBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LAotICAgICBpbnQm
IHByZXZpb3VzQm94TGVuZ3RoLCBib29sJiBwcmV2aW91c0JveEluRGlmZmVyZW50QmxvY2spCisg
ICAgIGludCYgcHJldmlvdXNCb3hMZW5ndGgsIGJvb2wmIHByZXZpb3VzQm94SW5EaWZmZXJlbnRC
bG9jaywgQ2FjaGVkUm9vdEFuZExlYWZCb3hlc0luTG9naWNhbE9yZGVyJiByb290QW5kTGVhZkJv
eGVzKQogewogICAgIHByZXZpb3VzQm94SW5EaWZmZXJlbnRCbG9jayA9IGZhbHNlOwogCiAgICAg
Ly8gRklYTUU6IEhhbmRsZSB0aGUgY2FzZSB3aGVuIHdlIGRvbid0IGhhdmUgYW4gaW5saW5lIHRl
eHQgYm94LgotICAgIGNvbnN0IElubGluZVRleHRCb3gqIHByZXZpb3VzQm94ID0gbG9naWNhbGx5
UHJldmlvdXNCb3godmlzaWJsZVBvc2l0aW9uLCB0ZXh0Qm94LCBwcmV2aW91c0JveEluRGlmZmVy
ZW50QmxvY2spOworICAgIGNvbnN0IElubGluZVRleHRCb3gqIHByZXZpb3VzQm94ID0gbG9naWNh
bGx5UHJldmlvdXNCb3godmlzaWJsZVBvc2l0aW9uLCB0ZXh0Qm94LCBwcmV2aW91c0JveEluRGlm
ZmVyZW50QmxvY2ssIHJvb3RBbmRMZWFmQm94ZXMpOwogCiAgICAgaW50IGxlbiA9IDA7CiAgICAg
VmVjdG9yPFVDaGFyLCAxMDI0PiBzdHJpbmc7CkBAIC0yOTIsMTIgKzMxMSwxMiBAQCBzdGF0aWMg
VGV4dEJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhCiAgICAgcmV0dXJuIHdvcmRCcmVha0l0
ZXJhdG9yKHN0cmluZy5kYXRhKCksIGxlbik7CiB9IAogCi1zdGF0aWMgVGV4dEJyZWFrSXRlcmF0
b3IqIHdvcmRCcmVha0l0ZXJhdG9yRm9yTWF4T2Zmc2V0Qm91bmRhcnkoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIGNvbnN0IElubGluZVRleHRCb3gqIHRleHRCb3gsIGJv
b2wmIG5leHRCb3hJbkRpZmZlcmVudEJsb2NrKQorc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiB3
b3JkQnJlYWtJdGVyYXRvckZvck1heE9mZnNldEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlv
biYgdmlzaWJsZVBvc2l0aW9uLCBjb25zdCBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBib29sJiBu
ZXh0Qm94SW5EaWZmZXJlbnRCbG9jaywgQ2FjaGVkUm9vdEFuZExlYWZCb3hlc0luTG9naWNhbE9y
ZGVyJiByb290QW5kTGVhZkJveGVzKQogewogICAgIG5leHRCb3hJbkRpZmZlcmVudEJsb2NrID0g
ZmFsc2U7CiAKICAgICAvLyBGSVhNRTogSGFuZGxlIHRoZSBjYXNlIHdoZW4gd2UgZG9uJ3QgaGF2
ZSBhbiBpbmxpbmUgdGV4dCBib3guCi0gICAgY29uc3QgSW5saW5lVGV4dEJveCogbmV4dEJveCA9
IGxvZ2ljYWxseU5leHRCb3godmlzaWJsZVBvc2l0aW9uLCB0ZXh0Qm94LCBuZXh0Qm94SW5EaWZm
ZXJlbnRCbG9jayk7CisgICAgY29uc3QgSW5saW5lVGV4dEJveCogbmV4dEJveCA9IGxvZ2ljYWxs
eU5leHRCb3godmlzaWJsZVBvc2l0aW9uLCB0ZXh0Qm94LCBuZXh0Qm94SW5EaWZmZXJlbnRCbG9j
aywgcm9vdEFuZExlYWZCb3hlcyk7CiAKICAgICBpbnQgbGVuID0gMDsKICAgICBWZWN0b3I8VUNo
YXIsIDEwMjQ+IHN0cmluZzsKQEAgLTM0MCw2ICszNTksOCBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0
aW9uIHZpc3VhbFdvcmRQb3NpdGlvCiAgICAgVmlzaWJsZVBvc2l0aW9uIGN1cnJlbnQgPSB2aXNp
YmxlUG9zaXRpb247CiAgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXIgPSAwOwogCisgICAgQ2Fj
aGVkUm9vdEFuZExlYWZCb3hlc0luTG9naWNhbE9yZGVyIHJvb3RBbmRMZWFmQm94ZXM7CisKICAg
ICB3aGlsZSAoMSkgewogICAgICAgICBWaXNpYmxlUG9zaXRpb24gYWRqYWNlbnRDaGFyYWN0ZXJQ
b3NpdGlvbiA9IGRpcmVjdGlvbiA9PSBNb3ZlUmlnaHQgPyBjdXJyZW50LnJpZ2h0KHRydWUpIDog
Y3VycmVudC5sZWZ0KHRydWUpOyAKICAgICAgICAgaWYgKGFkamFjZW50Q2hhcmFjdGVyUG9zaXRp
b24gPT0gY3VycmVudCB8fCBhZGphY2VudENoYXJhY3RlclBvc2l0aW9uLmlzTnVsbCgpKQpAQCAt
MzYzLDkgKzM4NCw5IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzdWFsV29yZFBvc2l0aW8K
ICAgICAgICAgYm9vbCBtb3ZpbmdJbnRvTmV3Qm94ID0gcHJldmlvdXNseVZpc2l0ZWRCb3ggIT0g
Ym94OwogCiAgICAgICAgIGlmIChvZmZzZXRJbkJveCA9PSBib3gtPmNhcmV0TWluT2Zmc2V0KCkp
Ci0gICAgICAgICAgICBpdGVyID0gd29yZEJyZWFrSXRlcmF0b3JGb3JNaW5PZmZzZXRCb3VuZGFy
eSh2aXNpYmxlUG9zaXRpb24sIHRleHRCb3gsIHByZXZpb3VzQm94TGVuZ3RoLCBwcmV2aW91c0Jv
eEluRGlmZmVyZW50QmxvY2spOworICAgICAgICAgICAgaXRlciA9IHdvcmRCcmVha0l0ZXJhdG9y
Rm9yTWluT2Zmc2V0Qm91bmRhcnkodmlzaWJsZVBvc2l0aW9uLCB0ZXh0Qm94LCBwcmV2aW91c0Jv
eExlbmd0aCwgcHJldmlvdXNCb3hJbkRpZmZlcmVudEJsb2NrLCByb290QW5kTGVhZkJveGVzKTsK
ICAgICAgICAgZWxzZSBpZiAob2Zmc2V0SW5Cb3ggPT0gYm94LT5jYXJldE1heE9mZnNldCgpKQot
ICAgICAgICAgICAgaXRlciA9IHdvcmRCcmVha0l0ZXJhdG9yRm9yTWF4T2Zmc2V0Qm91bmRhcnko
dmlzaWJsZVBvc2l0aW9uLCB0ZXh0Qm94LCBuZXh0Qm94SW5EaWZmZXJlbnRCbG9jayk7CisgICAg
ICAgICAgICBpdGVyID0gd29yZEJyZWFrSXRlcmF0b3JGb3JNYXhPZmZzZXRCb3VuZGFyeSh2aXNp
YmxlUG9zaXRpb24sIHRleHRCb3gsIG5leHRCb3hJbkRpZmZlcmVudEJsb2NrLCByb290QW5kTGVh
ZkJveGVzKTsKICAgICAgICAgZWxzZSBpZiAobW92aW5nSW50b05ld0JveCkgewogICAgICAgICAg
ICAgaXRlciA9IHdvcmRCcmVha0l0ZXJhdG9yKHRleHRCb3gtPnRleHRSZW5kZXJlcigpLT50ZXh0
KCktPmNoYXJhY3RlcnMoKSArIHRleHRCb3gtPnN0YXJ0KCksIHRleHRCb3gtPmxlbigpKTsKICAg
ICAgICAgICAgIHByZXZpb3VzbHlWaXNpdGVkQm94ID0gYm94OwpJbmRleDogTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24g
MTExMDY2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMTItMDMtMTYgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIHZpc3VhbCB3b3JkIG1vdmVtZW50OiB1c2luZyBjYWNoZSB0byBkZWNyZWFzZSB0aGUg
bnVtYmVyIG9mIGNvbGxlY3RMZWFmQm94ZXNJbkxvZ2ljYWxPcmRlciBvbiBSb290SW5saW5lQm94
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTQwOAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZWRpdGlu
Zy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LXNpbmdsZS1zcGFjZS1vbmUtZWxlbWVu
dC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3Jk
LXZpc3VhbGx5LXNpbmdsZS1zcGFjZS1vbmUtZWxlbWVudC5odG1sOgorICAgICAgICAgIEFkZCBh
IHRlc3QgY2FzZSB0aGF0IGEgd29yZCBpcyBzcHJlYWRpbmcgYWNyb3NzIG11bHRpcGxlIGlubGlu
ZSBib3hlcy4KKwogMjAxMi0wMy0xNiAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxl
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIG5ldyBtYWMgYmFzZWxpbmVzIGFmdGVyIGh0dHA6
Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzEwODE4NQpJbmRleDogTGF5b3V0VGVzdHMvZWRp
dGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LXNpbmdsZS1zcGFjZS1vbmUtZWxl
bWVudC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxl
Y3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LXNpbmdsZS1zcGFjZS1vbmUtZWxlbWVudC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDExMTAyMSkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0
aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1zaW5nbGUtc3BhY2Utb25lLWVsZW1lbnQtZXhwZWN0
ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5NywxMSBAQCBNb3ZlIGxlZnQgYnkgb25l
IHdvcmQKICIgb3BxIHJzdCAiWzgsIDUsIDFdLCAiYWJjIGRlZiBoaWogIls4LCA0LCAwXQogVGVz
dCAxOSwgTFRSOgogTW92ZSByaWdodCBieSBvbmUgd29yZAorImFiYyBkZWYgdGhpcyJbMCwgNCwg
OF0sICJlbmQgb3BxIHJzdCAiWzQsIDgsIDExXQorTW92ZSBsZWZ0IGJ5IG9uZSB3b3JkCisiZW5k
IG9wcSByc3QgIlsxMSwgOCwgNF0sICJhYmMgZGVmIHRoaXMiWzgsIDQsIDBdCitUZXN0IDIwLCBM
VFI6CitNb3ZlIHJpZ2h0IGJ5IG9uZSB3b3JkCiA8RElWPlswXQogTW92ZSBsZWZ0IGJ5IG9uZSB3
b3JkCiA8RElWPlswXQpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1i
eS13b3JkLXZpc3VhbGx5LXNpbmdsZS1zcGFjZS1vbmUtZWxlbWVudC5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1z
aW5nbGUtc3BhY2Utb25lLWVsZW1lbnQuaHRtbAkocmV2aXNpb24gMTExMDIxKQorKysgTGF5b3V0
VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LXNpbmdsZS1zcGFj
ZS1vbmUtZWxlbWVudC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw4IEBAIHdoZXJl
IGNoaWxkX25vZGVfaW5kZXggaXMgb3B0aW9uYWwsIGRlZmEKIDwhLS0gVGVzdCB3aXRoIGltYWdl
IC0tIG5vbi1pbmxpbmUtdGV4dC1ib3ggLS0+CiA8ZGl2IGlkPSJkXzEiIGRpcj1sdHIgY2xhc3M9
InRlc3RfbW92ZV9ieV93b3JkIiBjb250ZW50ZWRpdGFibGUgdGl0bGU9IltkXzEsIDAsIDFdW2Rf
MSwgNCwgMV1bZF8xLCA4LCAxXVtkXzEsIDEsIDNdW2RfMSwgNSwgM11bZF8xLCA4LCAzXXxbZF8x
LCA4LCAzXVtkXzEsIDUsIDNdW2RfMSwgMSwgM11bZF8xLCA4LCAxXVtkXzEsIDQsIDFdW2RfMSwg
MCwgMV0iPmFiYyBkZWYgaGlqIDxpbWcgc3JjPS4uLy4uL2FjY2Vzc2liaWxpdHkvcmVzb3VyY2Vz
L2Nha2UucG5nPiBvcHEgcnN0IDwvZGl2PgogCis8ZGl2IGlkPSJkXzIiIGRpcj1sdHIgY2xhc3M9
InRlc3RfbW92ZV9ieV93b3JkIiBjb250ZW50ZWRpdGFibGUgdGl0bGU9IltkXzIsIDAsIDFdW2Rf
MiwgNCwgMV1bZF8yLCA4LCAxXVtkXzIsIDQsIDVdW2RfMiwgOCwgNV1bZF8yLCAxMSwgNV18W2Rf
MiwgMTEsIDVdW2RfMiwgOCwgNV1bZF8yLCA0LCA1XVtkXzIsIDgsIDFdW2RfMiwgNCwgMV1bZF8y
LCAwLCAxXSI+YWJjIGRlZiB0aGlzPHNwYW4+aXM8L3NwYW4+PHNwYW4+b25lPC9zcGFuPjxzcGFu
PndvcmQ8L3NwYW4+ZW5kIG9wcSByc3QgPC9kaXY+CisKIDwhLS0gZW1wdHkgZGl2IC0tPgogPGRp
diBkaXI9bHRyIGNsYXNzPSJ0ZXN0X21vdmVfYnlfd29yZCIgdGl0bGU9IjB8MCIgY29udGVudGVk
aXRhYmxlPjwvZGl2PgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132616</attachid>
            <date>2012-03-19 11:30:41 -0700</date>
            <delta_ts>2012-03-21 15:08:12 -0700</delta_ts>
            <desc>patch w/ layout test</desc>
            <filename>81408.v2</filename>
            <type>text/plain</type>
            <size>15037</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMTIwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEyLTAzLTE5ICBYaWFvbWVp
IEppICA8eGppQGNocm9taXVtLm9yZz4KKworICAgICAgICB2aXN1YWwgd29yZCBtb3ZlbWVudDog
dXNpbmcgY2FjaGUgdG8gZGVjcmVhc2UgdGhlIG51bWJlciBvZiBjb2xsZWN0TGVhZkJveGVzSW5M
b2dpY2FsT3JkZXIgb24gUm9vdElubGluZUJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE0MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGVkaXRpbmcvdmlzaWJsZV91bml0cy5jcHA6CisgICAgICAg
IChDYWNoZWRSb290QW5kTGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIpOiBBZGQgY2xhc3MgdG8gY2Fj
aGUgdGhlIFJvb3RJbmxpbmVCb3ggYW5kIGl0cyBsZWFmIGJveGVzIGluIGxvZ2ljYWwgb3JkZXIu
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSb290QW5kTGVhZkJveGVzSW5Mb2dpY2FsT3JkZXI6
Om51bU9mQm94ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUm9vdEFuZExlYWZCb3hlc0lu
TG9naWNhbE9yZGVyOjpmaXJzdEJveCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhY2hlZFJvb3RBbmRMZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcjo6Q2FjaGVkUm9vdEFu
ZExlYWZCb3hlc0luTG9naWNhbE9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJvb3RB
bmRMZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcjo6cHJldmlvdXNUZXh0Qm94KToKKyAgICAgICAgKFdl
YkNvcmU6OkNhY2hlZFJvb3RBbmRMZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcjo6bmV4dFRleHRCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUm9vdEFuZExlYWZCb3hlc0luTG9naWNhbE9yZGVy
Ojpjb2xsZWN0Qm94ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUm9vdEFuZExlYWZCb3hl
c0luTG9naWNhbE9yZGVyOjpib3hJbmRleEluTGVhdmVzKToKKyAgICAgICAgKFdlYkNvcmU6Omxv
Z2ljYWxseVByZXZpb3VzQm94KTogUGFzcyBDYWNoZWRSb290QW5kTGVhZkJveGVzSW5Mb2dpY2Fs
T3JkZXIgb2JqZWN0IGFyb3VuZC4KKyAgICAgICAgKFdlYkNvcmU6OmxvZ2ljYWxseU5leHRCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6d29yZEJyZWFrSXRlcmF0b3JGb3JNaW5PZmZzZXRCb3VuZGFy
eSk6CisgICAgICAgIChXZWJDb3JlOjp3b3JkQnJlYWtJdGVyYXRvckZvck1heE9mZnNldEJvdW5k
YXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OnZpc3VhbFdvcmRQb3NpdGlvbik6CisKIDIwMTItMDMt
MTkgIE1pa2UgTGF3dGhlciAgPG1pa2VsYXd0aGVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBD
U1MzIGNhbGM6IG1ha2UgbWFzayBpbWFnZXMgd29yayB3aXRoIG1peGVkIHBlcmNlbnQvYWJzb2x1
dGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkocmV2aXNp
b24gMTExMDIxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTU3LDQ2ICsxNTcsOTUgQEAgc3RhdGljIGNvbnN0IFJvb3RJbmxp
bmVCb3gqIG5leHRSb290SW5saQogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGJveElu
ZGV4SW5WZWN0b3IoY29uc3QgSW5saW5lVGV4dEJveCogYm94LCBjb25zdCBWZWN0b3I8SW5saW5l
Qm94Kj4mIGxlYWZCb3hlc0luTG9naWNhbE9yZGVyKQorY2xhc3MgQ2FjaGVkUm9vdEFuZExlYWZC
b3hlc0luTG9naWNhbE9yZGVyIHsKK3B1YmxpYzoKKyAgICBDYWNoZWRSb290QW5kTGVhZkJveGVz
SW5Mb2dpY2FsT3JkZXIoKTsKKworICAgIGNvbnN0IElubGluZVRleHRCb3gqIHByZXZpb3VzVGV4
dEJveChjb25zdCBSb290SW5saW5lQm94KiwgY29uc3QgSW5saW5lVGV4dEJveCopOworICAgIGNv
bnN0IElubGluZVRleHRCb3gqIG5leHRUZXh0Qm94KGNvbnN0IFJvb3RJbmxpbmVCb3gqLCBjb25z
dCBJbmxpbmVUZXh0Qm94Kik7CisKKyAgICBzaXplX3QgbnVtT2ZCb3hlcygpIGNvbnN0IHsgcmV0
dXJuIG1fbGVhZkJveGVzLnNpemUoKTsgfQorICAgIGNvbnN0IElubGluZUJveCogZmlyc3RCb3go
KSBjb25zdCB7IHJldHVybiBtX2xlYWZCb3hlc1swXTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBj
b25zdCBWZWN0b3I8SW5saW5lQm94Kj4mIGNvbGxlY3RCb3hlcyhjb25zdCBSb290SW5saW5lQm94
Kik7CisgICAgaW50IGJveEluZGV4SW5MZWF2ZXMoY29uc3QgSW5saW5lVGV4dEJveCopOworCisg
ICAgY29uc3QgUm9vdElubGluZUJveCogbV9yb290SW5saW5lQm94OworICAgIFZlY3RvcjxJbmxp
bmVCb3gqPiBtX2xlYWZCb3hlczsKK307CisKK0NhY2hlZFJvb3RBbmRMZWFmQm94ZXNJbkxvZ2lj
YWxPcmRlcjo6Q2FjaGVkUm9vdEFuZExlYWZCb3hlc0luTG9naWNhbE9yZGVyKCkgOiBtX3Jvb3RJ
bmxpbmVCb3goMCkgeyB9OworCitjb25zdCBJbmxpbmVUZXh0Qm94KiBDYWNoZWRSb290QW5kTGVh
ZkJveGVzSW5Mb2dpY2FsT3JkZXI6OnByZXZpb3VzVGV4dEJveChjb25zdCBSb290SW5saW5lQm94
KiByb290LCBjb25zdCBJbmxpbmVUZXh0Qm94KiBib3gpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRlci5zaXplKCk7ICsraSkgewotICAgICAgICBp
ZiAoYm94ID09IGxlYWZCb3hlc0luTG9naWNhbE9yZGVyW2ldKQotICAgICAgICAgICAgcmV0dXJu
IGk7CisgICAgaWYgKCFyb290KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNvbGxlY3RCb3hl
cyhyb290KTsKKworICAgIC8vIElmIGJveCBpcyBudWxsLCByb290IGlzIGJveCdzIHByZXZpb3Vz
IFJvb3RJbmxpbmVCb3gsIGFuZCBwcmV2aW91c0JveCBpcyB0aGUgbGFzdCBsb2dpY2FsIGJveCBp
biByb290LgorICAgIGludCBib3hJbmRleCA9IG1fbGVhZkJveGVzLnNpemUoKSAtIDE7CisgICAg
aWYgKGJveCkKKyAgICAgICAgYm94SW5kZXggPSBib3hJbmRleEluTGVhdmVzKGJveCkgLSAxOwor
CisgICAgZm9yIChpbnQgaSA9IGJveEluZGV4OyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAo
bV9sZWFmQm94ZXNbaV0tPmlzSW5saW5lVGV4dEJveCgpKQorICAgICAgICAgICAgcmV0dXJuIHRv
SW5saW5lVGV4dEJveChtX2xlYWZCb3hlc1tpXSk7CiAgICAgfQorCiAgICAgcmV0dXJuIDA7CiB9
CiAKLXN0YXRpYyBjb25zdCBJbmxpbmVUZXh0Qm94KiBwcmV2aW91c0JveEluTGluZShjb25zdCBS
b290SW5saW5lQm94KiByb290LCBjb25zdCBJbmxpbmVUZXh0Qm94KiBib3gsIFZlY3RvcjxJbmxp
bmVCb3gqPiYgbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIpCitjb25zdCBJbmxpbmVUZXh0Qm94KiBD
YWNoZWRSb290QW5kTGVhZkJveGVzSW5Mb2dpY2FsT3JkZXI6Om5leHRUZXh0Qm94KGNvbnN0IFJv
b3RJbmxpbmVCb3gqIHJvb3QsIGNvbnN0IElubGluZVRleHRCb3gqIGJveCkKIHsKICAgICBpZiAo
IXJvb3QpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIu
Y2xlYXIoKTsKLSAgICByb290LT5jb2xsZWN0TGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIobGVhZkJv
eGVzSW5Mb2dpY2FsT3JkZXIpOworICAgIGNvbGxlY3RCb3hlcyhyb290KTsKIAotICAgIC8vIElm
IGJveCBpcyBudWxsLCByb290IGlzIGJveCdzIHByZXZpb3VzIFJvb3RJbmxpbmVCb3gsIGFuZCBw
cmV2aW91c0JveCBpcyB0aGUgbGFzdCBsb2dpY2FsIGJveCBpbiByb290LgotICAgIGludCBib3hJ
bmRleCA9IGxlYWZCb3hlc0luTG9naWNhbE9yZGVyLnNpemUoKSAtIDE7CisgICAgLy8gSWYgYm94
IGlzIG51bGwsIHJvb3QgaXMgYm94J3MgbmV4dCBSb290SW5saW5lQm94LCBhbmQgbmV4dEJveCBp
cyB0aGUgZmlyc3QgbG9naWNhbCBib3ggaW4gcm9vdC4KKyAgICAvLyBPdGhlcndpc2UsIHJvb3Qg
aXMgYm94J3MgUm9vdElubGluZUJveCwgYW5kIG5leHRCb3ggaXMgdGhlIG5leHQgbG9naWNhbCBi
b3ggaW4gdGhlIHNhbWUgbGluZS4KKyAgICBzaXplX3QgbmV4dEJveEluZGV4ID0gMDsKICAgICBp
ZiAoYm94KQotICAgICAgICBib3hJbmRleCA9IGJveEluZGV4SW5WZWN0b3IoYm94LCBsZWFmQm94
ZXNJbkxvZ2ljYWxPcmRlcikgLSAxOworICAgICAgICBuZXh0Qm94SW5kZXggPSBib3hJbmRleElu
TGVhdmVzKGJveCkgKyAxOwogCi0gICAgZm9yIChpbnQgaSA9IGJveEluZGV4OyBpID49IDA7IC0t
aSkgewotICAgICAgICBpZiAobGVhZkJveGVzSW5Mb2dpY2FsT3JkZXJbaV0tPmlzSW5saW5lVGV4
dEJveCgpKQotICAgICAgICAgICAgcmV0dXJuIHRvSW5saW5lVGV4dEJveChsZWFmQm94ZXNJbkxv
Z2ljYWxPcmRlcltpXSk7CisgICAgZm9yIChzaXplX3QgaSA9IG5leHRCb3hJbmRleDsgaSA8IG1f
bGVhZkJveGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2xlYWZCb3hlc1tpXS0+aXNJ
bmxpbmVUZXh0Qm94KCkpCisgICAgICAgICAgICByZXR1cm4gdG9JbmxpbmVUZXh0Qm94KG1fbGVh
ZkJveGVzW2ldKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworY29uc3QgVmVjdG9yPElu
bGluZUJveCo+JiBDYWNoZWRSb290QW5kTGVhZkJveGVzSW5Mb2dpY2FsT3JkZXI6OmNvbGxlY3RC
b3hlcyhjb25zdCBSb290SW5saW5lQm94KiByb290KQoreworICAgIGlmIChtX3Jvb3RJbmxpbmVC
b3ggIT0gcm9vdCkgeworICAgICAgICBtX3Jvb3RJbmxpbmVCb3ggPSByb290OworICAgICAgICBt
X2xlYWZCb3hlcy5jbGVhcigpOworICAgICAgICByb290LT5jb2xsZWN0TGVhZkJveGVzSW5Mb2dp
Y2FsT3JkZXIobV9sZWFmQm94ZXMpOwogICAgIH0KKyAgICByZXR1cm4gbV9sZWFmQm94ZXM7Cit9
CiAKK2ludCBDYWNoZWRSb290QW5kTGVhZkJveGVzSW5Mb2dpY2FsT3JkZXI6OmJveEluZGV4SW5M
ZWF2ZXMoY29uc3QgSW5saW5lVGV4dEJveCogYm94KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9sZWFmQm94ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGJveCA9PSBtX2xl
YWZCb3hlc1tpXSkKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KICAgICByZXR1cm4gMDsK
IH0KIAotc3RhdGljIGNvbnN0IElubGluZVRleHRCb3gqIGxvZ2ljYWxseVByZXZpb3VzQm94KGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uLCBjb25zdCBJbmxpbmVUZXh0Qm94
KiB0ZXh0Qm94LCBib29sJiBwcmV2aW91c0JveEluRGlmZmVyZW50QmxvY2spCitzdGF0aWMgY29u
c3QgSW5saW5lVGV4dEJveCogbG9naWNhbGx5UHJldmlvdXNCb3goY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiB2aXNpYmxlUG9zaXRpb24sIGNvbnN0IElubGluZVRleHRCb3gqIHRleHRCb3gsIGJvb2wm
IHByZXZpb3VzQm94SW5EaWZmZXJlbnRCbG9jaywgQ2FjaGVkUm9vdEFuZExlYWZCb3hlc0luTG9n
aWNhbE9yZGVyJiByb290QW5kTGVhZkJveGVzKQogewogICAgIGNvbnN0IElubGluZUJveCogc3Rh
cnRCb3ggPSB0ZXh0Qm94OwotICAgIFZlY3RvcjxJbmxpbmVCb3gqPiBsZWFmQm94ZXNJbkxvZ2lj
YWxPcmRlcjsKIAotICAgIGNvbnN0IElubGluZVRleHRCb3gqIHByZXZpb3VzQm94ID0gcHJldmlv
dXNCb3hJbkxpbmUoc3RhcnRCb3gtPnJvb3QoKSwgdGV4dEJveCwgbGVhZkJveGVzSW5Mb2dpY2Fs
T3JkZXIpOworICAgIGNvbnN0IElubGluZVRleHRCb3gqIHByZXZpb3VzQm94ID0gcm9vdEFuZExl
YWZCb3hlcy5wcmV2aW91c1RleHRCb3goc3RhcnRCb3gtPnJvb3QoKSwgdGV4dEJveCk7CiAgICAg
aWYgKHByZXZpb3VzQm94KQogICAgICAgICByZXR1cm4gcHJldmlvdXNCb3g7CiAKLSAgICBwcmV2
aW91c0JveCA9IHByZXZpb3VzQm94SW5MaW5lKHN0YXJ0Qm94LT5yb290KCktPnByZXZSb290Qm94
KCksIDAsIGxlYWZCb3hlc0luTG9naWNhbE9yZGVyKTsKKyAgICBwcmV2aW91c0JveCA9IHJvb3RB
bmRMZWFmQm94ZXMucHJldmlvdXNUZXh0Qm94KHN0YXJ0Qm94LT5yb290KCktPnByZXZSb290Qm94
KCksIDApOwogICAgIGlmIChwcmV2aW91c0JveCkKICAgICAgICAgcmV0dXJuIHByZXZpb3VzQm94
OwogCkBAIC0yMDUsNTEgKzI1NCwyOSBAQCBzdGF0aWMgY29uc3QgSW5saW5lVGV4dEJveCogbG9n
aWNhbGx5UHJlCiAgICAgICAgIGlmICghcHJldmlvdXNSb290KQogICAgICAgICAgICAgYnJlYWs7
CiAKLSAgICAgICAgcHJldmlvdXNCb3ggPSBwcmV2aW91c0JveEluTGluZShwcmV2aW91c1Jvb3Qs
IDAsIGxlYWZCb3hlc0luTG9naWNhbE9yZGVyKTsKKyAgICAgICAgcHJldmlvdXNCb3ggPSByb290
QW5kTGVhZkJveGVzLnByZXZpb3VzVGV4dEJveChwcmV2aW91c1Jvb3QsIDApOwogICAgICAgICBp
ZiAocHJldmlvdXNCb3gpIHsKICAgICAgICAgICAgIHByZXZpb3VzQm94SW5EaWZmZXJlbnRCbG9j
ayA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNCb3g7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoIWxlYWZCb3hlc0luTG9naWNhbE9yZGVyLnNpemUoKSkKKyAgICAgICAgaWYg
KCFyb290QW5kTGVhZkJveGVzLm51bU9mQm94ZXMoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBzdGFydEJveCA9IGxlYWZCb3hlc0luTG9naWNhbE9yZGVyWzBdOworICAgICAgICBzdGFy
dEJveCA9IHJvb3RBbmRMZWFmQm94ZXMuZmlyc3RCb3goKTsKICAgICB9CiAgICAgcmV0dXJuIDA7
CiB9CiAKLXN0YXRpYyBjb25zdCBJbmxpbmVUZXh0Qm94KiBuZXh0Qm94SW5MaW5lKGNvbnN0IFJv
b3RJbmxpbmVCb3gqIHJvb3QsIGNvbnN0IElubGluZVRleHRCb3gqIGJveCwgVmVjdG9yPElubGlu
ZUJveCo+JiBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcikKLXsKLSAgICBpZiAoIXJvb3QpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIuY2xlYXIoKTsKLSAg
ICByb290LT5jb2xsZWN0TGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIobGVhZkJveGVzSW5Mb2dpY2Fs
T3JkZXIpOwogCi0gICAgLy8gSWYgYm94IGlzIG51bGwsIHJvb3QgaXMgYm94J3MgbmV4dCBSb290
SW5saW5lQm94LCBhbmQgbmV4dEJveCBpcyB0aGUgZmlyc3QgbG9naWNhbCBib3ggaW4gcm9vdC4K
LSAgICAvLyBPdGhlcndpc2UsIHJvb3QgaXMgYm94J3MgUm9vdElubGluZUJveCwgYW5kIG5leHRC
b3ggaXMgdGhlIG5leHQgbG9naWNhbCBib3ggaW4gdGhlIHNhbWUgbGluZS4KLSAgICBzaXplX3Qg
bmV4dEJveEluZGV4ID0gMDsKLSAgICBpZiAoYm94KQotICAgICAgICBuZXh0Qm94SW5kZXggPSBi
b3hJbmRleEluVmVjdG9yKGJveCwgbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIpICsgMTsKLQotICAg
IGZvciAoc2l6ZV90IGkgPSBuZXh0Qm94SW5kZXg7IGkgPCBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRl
ci5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobGVhZkJveGVzSW5Mb2dpY2FsT3JkZXJbaV0t
PmlzSW5saW5lVGV4dEJveCgpKQotICAgICAgICAgICAgcmV0dXJuIHRvSW5saW5lVGV4dEJveChs
ZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcltpXSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0K
LXN0YXRpYyBjb25zdCBJbmxpbmVUZXh0Qm94KiBsb2dpY2FsbHlOZXh0Qm94KGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uLCBjb25zdCBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94
LCBib29sJiBuZXh0Qm94SW5EaWZmZXJlbnRCbG9jaykKK3N0YXRpYyBjb25zdCBJbmxpbmVUZXh0
Qm94KiBsb2dpY2FsbHlOZXh0Qm94KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0
aW9uLCBjb25zdCBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBib29sJiBuZXh0Qm94SW5EaWZmZXJl
bnRCbG9jaywgQ2FjaGVkUm9vdEFuZExlYWZCb3hlc0luTG9naWNhbE9yZGVyJiByb290QW5kTGVh
ZkJveGVzKQogewogICAgIGNvbnN0IElubGluZUJveCogc3RhcnRCb3ggPSB0ZXh0Qm94OwotICAg
IFZlY3RvcjxJbmxpbmVCb3gqPiBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcjsKIAotICAgIGNvbnN0
IElubGluZVRleHRCb3gqIG5leHRCb3ggPSBuZXh0Qm94SW5MaW5lKHN0YXJ0Qm94LT5yb290KCks
IHRleHRCb3gsIGxlYWZCb3hlc0luTG9naWNhbE9yZGVyKTsKKyAgICBjb25zdCBJbmxpbmVUZXh0
Qm94KiBuZXh0Qm94ID0gcm9vdEFuZExlYWZCb3hlcy5uZXh0VGV4dEJveChzdGFydEJveC0+cm9v
dCgpLCB0ZXh0Qm94KTsKICAgICBpZiAobmV4dEJveCkKICAgICAgICAgcmV0dXJuIG5leHRCb3g7
CiAKLSAgICBuZXh0Qm94ID0gbmV4dEJveEluTGluZShzdGFydEJveC0+cm9vdCgpLT5uZXh0Um9v
dEJveCgpLCAwLCBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcik7CisgICAgbmV4dEJveCA9IHJvb3RB
bmRMZWFmQm94ZXMubmV4dFRleHRCb3goc3RhcnRCb3gtPnJvb3QoKS0+bmV4dFJvb3RCb3goKSwg
MCk7CiAgICAgaWYgKG5leHRCb3gpCiAgICAgICAgIHJldHVybiBuZXh0Qm94OwogCkBAIC0yNTgs
MjYgKzI4NSwyNiBAQCBzdGF0aWMgY29uc3QgSW5saW5lVGV4dEJveCogbG9naWNhbGx5TmV4CiAg
ICAgICAgIGlmICghbmV4dFJvb3QpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBuZXh0
Qm94ID0gbmV4dEJveEluTGluZShuZXh0Um9vdCwgMCwgbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIp
OworICAgICAgICBuZXh0Qm94ID0gcm9vdEFuZExlYWZCb3hlcy5uZXh0VGV4dEJveChuZXh0Um9v
dCwgMCk7CiAgICAgICAgIGlmIChuZXh0Qm94KSB7CiAgICAgICAgICAgICBuZXh0Qm94SW5EaWZm
ZXJlbnRCbG9jayA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm4gbmV4dEJveDsKICAgICAgICAg
fQogCi0gICAgICAgIGlmICghbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIuc2l6ZSgpKQorICAgICAg
ICBpZiAoIXJvb3RBbmRMZWFmQm94ZXMubnVtT2ZCb3hlcygpKQogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIHN0YXJ0Qm94ID0gbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXJbMF07CisgICAgICAg
IHN0YXJ0Qm94ID0gcm9vdEFuZExlYWZCb3hlcy5maXJzdEJveCgpOwogICAgIH0KICAgICByZXR1
cm4gMDsKIH0KIAogc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiB3b3JkQnJlYWtJdGVyYXRvckZv
ck1pbk9mZnNldEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9u
LCBjb25zdCBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LAotICAgICBpbnQmIHByZXZpb3VzQm94TGVu
Z3RoLCBib29sJiBwcmV2aW91c0JveEluRGlmZmVyZW50QmxvY2spCisgICAgIGludCYgcHJldmlv
dXNCb3hMZW5ndGgsIGJvb2wmIHByZXZpb3VzQm94SW5EaWZmZXJlbnRCbG9jaywgQ2FjaGVkUm9v
dEFuZExlYWZCb3hlc0luTG9naWNhbE9yZGVyJiByb290QW5kTGVhZkJveGVzKQogewogICAgIHBy
ZXZpb3VzQm94SW5EaWZmZXJlbnRCbG9jayA9IGZhbHNlOwogCiAgICAgLy8gRklYTUU6IEhhbmRs
ZSB0aGUgY2FzZSB3aGVuIHdlIGRvbid0IGhhdmUgYW4gaW5saW5lIHRleHQgYm94LgotICAgIGNv
bnN0IElubGluZVRleHRCb3gqIHByZXZpb3VzQm94ID0gbG9naWNhbGx5UHJldmlvdXNCb3godmlz
aWJsZVBvc2l0aW9uLCB0ZXh0Qm94LCBwcmV2aW91c0JveEluRGlmZmVyZW50QmxvY2spOworICAg
IGNvbnN0IElubGluZVRleHRCb3gqIHByZXZpb3VzQm94ID0gbG9naWNhbGx5UHJldmlvdXNCb3go
dmlzaWJsZVBvc2l0aW9uLCB0ZXh0Qm94LCBwcmV2aW91c0JveEluRGlmZmVyZW50QmxvY2ssIHJv
b3RBbmRMZWFmQm94ZXMpOwogCiAgICAgaW50IGxlbiA9IDA7CiAgICAgVmVjdG9yPFVDaGFyLCAx
MDI0PiBzdHJpbmc7CkBAIC0yOTIsMTIgKzMxOSwxMiBAQCBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0
b3IqIHdvcmRCcmVha0l0ZXJhCiAgICAgcmV0dXJuIHdvcmRCcmVha0l0ZXJhdG9yKHN0cmluZy5k
YXRhKCksIGxlbik7CiB9IAogCi1zdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0
ZXJhdG9yRm9yTWF4T2Zmc2V0Qm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxl
UG9zaXRpb24sIGNvbnN0IElubGluZVRleHRCb3gqIHRleHRCb3gsIGJvb2wmIG5leHRCb3hJbkRp
ZmZlcmVudEJsb2NrKQorc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiB3b3JkQnJlYWtJdGVyYXRv
ckZvck1heE9mZnNldEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0
aW9uLCBjb25zdCBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBib29sJiBuZXh0Qm94SW5EaWZmZXJl
bnRCbG9jaywgQ2FjaGVkUm9vdEFuZExlYWZCb3hlc0luTG9naWNhbE9yZGVyJiByb290QW5kTGVh
ZkJveGVzKQogewogICAgIG5leHRCb3hJbkRpZmZlcmVudEJsb2NrID0gZmFsc2U7CiAKICAgICAv
LyBGSVhNRTogSGFuZGxlIHRoZSBjYXNlIHdoZW4gd2UgZG9uJ3QgaGF2ZSBhbiBpbmxpbmUgdGV4
dCBib3guCi0gICAgY29uc3QgSW5saW5lVGV4dEJveCogbmV4dEJveCA9IGxvZ2ljYWxseU5leHRC
b3godmlzaWJsZVBvc2l0aW9uLCB0ZXh0Qm94LCBuZXh0Qm94SW5EaWZmZXJlbnRCbG9jayk7Cisg
ICAgY29uc3QgSW5saW5lVGV4dEJveCogbmV4dEJveCA9IGxvZ2ljYWxseU5leHRCb3godmlzaWJs
ZVBvc2l0aW9uLCB0ZXh0Qm94LCBuZXh0Qm94SW5EaWZmZXJlbnRCbG9jaywgcm9vdEFuZExlYWZC
b3hlcyk7CiAKICAgICBpbnQgbGVuID0gMDsKICAgICBWZWN0b3I8VUNoYXIsIDEwMjQ+IHN0cmlu
ZzsKQEAgLTM0MCw2ICszNjcsOCBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc3VhbFdvcmRQ
b3NpdGlvCiAgICAgVmlzaWJsZVBvc2l0aW9uIGN1cnJlbnQgPSB2aXNpYmxlUG9zaXRpb247CiAg
ICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXIgPSAwOwogCisgICAgQ2FjaGVkUm9vdEFuZExlYWZC
b3hlc0luTG9naWNhbE9yZGVyIHJvb3RBbmRMZWFmQm94ZXM7CisKICAgICB3aGlsZSAoMSkgewog
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gYWRqYWNlbnRDaGFyYWN0ZXJQb3NpdGlvbiA9IGRpcmVj
dGlvbiA9PSBNb3ZlUmlnaHQgPyBjdXJyZW50LnJpZ2h0KHRydWUpIDogY3VycmVudC5sZWZ0KHRy
dWUpOyAKICAgICAgICAgaWYgKGFkamFjZW50Q2hhcmFjdGVyUG9zaXRpb24gPT0gY3VycmVudCB8
fCBhZGphY2VudENoYXJhY3RlclBvc2l0aW9uLmlzTnVsbCgpKQpAQCAtMzYzLDkgKzM5Miw5IEBA
IHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzdWFsV29yZFBvc2l0aW8KICAgICAgICAgYm9vbCBt
b3ZpbmdJbnRvTmV3Qm94ID0gcHJldmlvdXNseVZpc2l0ZWRCb3ggIT0gYm94OwogCiAgICAgICAg
IGlmIChvZmZzZXRJbkJveCA9PSBib3gtPmNhcmV0TWluT2Zmc2V0KCkpCi0gICAgICAgICAgICBp
dGVyID0gd29yZEJyZWFrSXRlcmF0b3JGb3JNaW5PZmZzZXRCb3VuZGFyeSh2aXNpYmxlUG9zaXRp
b24sIHRleHRCb3gsIHByZXZpb3VzQm94TGVuZ3RoLCBwcmV2aW91c0JveEluRGlmZmVyZW50Qmxv
Y2spOworICAgICAgICAgICAgaXRlciA9IHdvcmRCcmVha0l0ZXJhdG9yRm9yTWluT2Zmc2V0Qm91
bmRhcnkodmlzaWJsZVBvc2l0aW9uLCB0ZXh0Qm94LCBwcmV2aW91c0JveExlbmd0aCwgcHJldmlv
dXNCb3hJbkRpZmZlcmVudEJsb2NrLCByb290QW5kTGVhZkJveGVzKTsKICAgICAgICAgZWxzZSBp
ZiAob2Zmc2V0SW5Cb3ggPT0gYm94LT5jYXJldE1heE9mZnNldCgpKQotICAgICAgICAgICAgaXRl
ciA9IHdvcmRCcmVha0l0ZXJhdG9yRm9yTWF4T2Zmc2V0Qm91bmRhcnkodmlzaWJsZVBvc2l0aW9u
LCB0ZXh0Qm94LCBuZXh0Qm94SW5EaWZmZXJlbnRCbG9jayk7CisgICAgICAgICAgICBpdGVyID0g
d29yZEJyZWFrSXRlcmF0b3JGb3JNYXhPZmZzZXRCb3VuZGFyeSh2aXNpYmxlUG9zaXRpb24sIHRl
eHRCb3gsIG5leHRCb3hJbkRpZmZlcmVudEJsb2NrLCByb290QW5kTGVhZkJveGVzKTsKICAgICAg
ICAgZWxzZSBpZiAobW92aW5nSW50b05ld0JveCkgewogICAgICAgICAgICAgaXRlciA9IHdvcmRC
cmVha0l0ZXJhdG9yKHRleHRCb3gtPnRleHRSZW5kZXJlcigpLT50ZXh0KCktPmNoYXJhY3RlcnMo
KSArIHRleHRCb3gtPnN0YXJ0KCksIHRleHRCb3gtPmxlbigpKTsKICAgICAgICAgICAgIHByZXZp
b3VzbHlWaXNpdGVkQm94ID0gYm94OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTExMjA2KQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTIt
MDMtMTkgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIHZpc3VhbCB3
b3JkIG1vdmVtZW50OiB1c2luZyBjYWNoZSB0byBkZWNyZWFzZSB0aGUgbnVtYmVyIG9mIGNvbGxl
Y3RMZWFmQm94ZXNJbkxvZ2ljYWxPcmRlciBvbiBSb290SW5saW5lQm94CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTQwOAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vbW92
ZS1ieS13b3JkLXZpc3VhbGx5LXNpbmdsZS1zcGFjZS1vbmUtZWxlbWVudC1leHBlY3RlZC50eHQ6
CisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LXNpbmds
ZS1zcGFjZS1vbmUtZWxlbWVudC5odG1sOgorICAgICAgICAgIEFkZCBhIHRlc3QgY2FzZSB0aGF0
IGEgd29yZCBpcyBzcHJlYWRpbmcgYWNyb3NzIG11bHRpcGxlIGlubGluZSBib3hlcy4KKwogMjAx
Mi0wMy0xOSAgTWlrZSBMYXd0aGVyICA8bWlrZWxhd3RoZXJAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIENTUzMgY2FsYzogbWFrZSBtYXNrIGltYWdlcyB3b3JrIHdpdGggbWl4ZWQgcGVyY2VudC9h
YnNvbHV0ZQpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3Jk
LXZpc3VhbGx5LXNpbmdsZS1zcGFjZS1vbmUtZWxlbWVudC1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5
LXNpbmdsZS1zcGFjZS1vbmUtZWxlbWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDExMTAyMSkK
KysrIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1z
aW5nbGUtc3BhY2Utb25lLWVsZW1lbnQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05
Nyw2ICs5NywxMSBAQCBNb3ZlIGxlZnQgYnkgb25lIHdvcmQKICIgb3BxIHJzdCAiWzgsIDUsIDFd
LCAiYWJjIGRlZiBoaWogIls4LCA0LCAwXQogVGVzdCAxOSwgTFRSOgogTW92ZSByaWdodCBieSBv
bmUgd29yZAorImFiYyBkZWYgdGhpcyJbMCwgNCwgOF0sICJlbmQgb3BxIHJzdCAiWzQsIDgsIDEx
XQorTW92ZSBsZWZ0IGJ5IG9uZSB3b3JkCisiZW5kIG9wcSByc3QgIlsxMSwgOCwgNF0sICJhYmMg
ZGVmIHRoaXMiWzgsIDQsIDBdCitUZXN0IDIwLCBMVFI6CitNb3ZlIHJpZ2h0IGJ5IG9uZSB3b3Jk
CiA8RElWPlswXQogTW92ZSBsZWZ0IGJ5IG9uZSB3b3JkCiA8RElWPlswXQpJbmRleDogTGF5b3V0
VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LXNpbmdsZS1zcGFj
ZS1vbmUtZWxlbWVudC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvc2Vs
ZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1zaW5nbGUtc3BhY2Utb25lLWVsZW1lbnQuaHRt
bAkocmV2aXNpb24gMTExMDIxKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbW92
ZS1ieS13b3JkLXZpc3VhbGx5LXNpbmdsZS1zcGFjZS1vbmUtZWxlbWVudC5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC03MSw2ICs3MSw4IEBAIHdoZXJlIGNoaWxkX25vZGVfaW5kZXggaXMgb3B0aW9u
YWwsIGRlZmEKIDwhLS0gVGVzdCB3aXRoIGltYWdlIC0tIG5vbi1pbmxpbmUtdGV4dC1ib3ggLS0+
CiA8ZGl2IGlkPSJkXzEiIGRpcj1sdHIgY2xhc3M9InRlc3RfbW92ZV9ieV93b3JkIiBjb250ZW50
ZWRpdGFibGUgdGl0bGU9IltkXzEsIDAsIDFdW2RfMSwgNCwgMV1bZF8xLCA4LCAxXVtkXzEsIDEs
IDNdW2RfMSwgNSwgM11bZF8xLCA4LCAzXXxbZF8xLCA4LCAzXVtkXzEsIDUsIDNdW2RfMSwgMSwg
M11bZF8xLCA4LCAxXVtkXzEsIDQsIDFdW2RfMSwgMCwgMV0iPmFiYyBkZWYgaGlqIDxpbWcgc3Jj
PS4uLy4uL2FjY2Vzc2liaWxpdHkvcmVzb3VyY2VzL2Nha2UucG5nPiBvcHEgcnN0IDwvZGl2Pgog
Cis8ZGl2IGlkPSJkXzIiIGRpcj1sdHIgY2xhc3M9InRlc3RfbW92ZV9ieV93b3JkIiBjb250ZW50
ZWRpdGFibGUgdGl0bGU9IltkXzIsIDAsIDFdW2RfMiwgNCwgMV1bZF8yLCA4LCAxXVtkXzIsIDQs
IDVdW2RfMiwgOCwgNV1bZF8yLCAxMSwgNV18W2RfMiwgMTEsIDVdW2RfMiwgOCwgNV1bZF8yLCA0
LCA1XVtkXzIsIDgsIDFdW2RfMiwgNCwgMV1bZF8yLCAwLCAxXSI+YWJjIGRlZiB0aGlzPHNwYW4+
aXM8L3NwYW4+PHNwYW4+b25lPC9zcGFuPjxzcGFuPndvcmQ8L3NwYW4+ZW5kIG9wcSByc3QgPC9k
aXY+CisKIDwhLS0gZW1wdHkgZGl2IC0tPgogPGRpdiBkaXI9bHRyIGNsYXNzPSJ0ZXN0X21vdmVf
Ynlfd29yZCIgdGl0bGU9IjB8MCIgY29udGVudGVkaXRhYmxlPjwvZGl2PgogCg==
</data>
<flag name="review"
          id="136313"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133120</attachid>
            <date>2012-03-21 15:08:12 -0700</date>
            <delta_ts>2012-03-21 15:41:43 -0700</delta_ts>
            <desc>patch w/ layout test</desc>
            <filename>81408.v3</filename>
            <type>text/plain</type>
            <size>14796</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMTYwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEyLTAzLTIxICBYaWFvbWVp
IEppICA8eGppQGNocm9taXVtLm9yZz4KKworICAgICAgICB2aXN1YWwgd29yZCBtb3ZlbWVudDog
dXNpbmcgY2FjaGUgdG8gZGVjcmVhc2UgdGhlIG51bWJlciBvZiBjb2xsZWN0TGVhZkJveGVzSW5M
b2dpY2FsT3JkZXIgb24gUm9vdElubGluZUJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE0MDgKKworICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtl
IE5pd2EuCisKKyAgICAgICAgKiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwOgorICAgICAgICAo
Q2FjaGVkTG9naWNhbGx5T3JkZXJlZExlYWZCb3hlcyk6IEFkZCBjbGFzcyB0byBjYWNoZSBsb2dp
Y2FsbHkgb3JkZXJlZCBsZWFmIGJveGVzIHVuZGVyIGEgcGFydGljdWxhciByb290IGJveC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZExvZ2ljYWxseU9yZGVyZWRMZWFmQm94ZXM6OnNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkTG9naWNhbGx5T3JkZXJlZExlYWZCb3hlczo6Zmlyc3RC
b3gpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRMb2dpY2Fs
bHlPcmRlcmVkTGVhZkJveGVzOjpDYWNoZWRMb2dpY2FsbHlPcmRlcmVkTGVhZkJveGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZExvZ2ljYWxseU9yZGVyZWRMZWFmQm94ZXM6OnByZXZpb3Vz
VGV4dEJveCk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRMb2dpY2FsbHlPcmRlcmVkTGVhZkJv
eGVzOjpuZXh0VGV4dEJveCk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRMb2dpY2FsbHlPcmRl
cmVkTGVhZkJveGVzOjpjb2xsZWN0Qm94ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkTG9n
aWNhbGx5T3JkZXJlZExlYWZCb3hlczo6Ym94SW5kZXhJbkxlYXZlcyk6CisgICAgICAgIChXZWJD
b3JlOjpsb2dpY2FsbHlQcmV2aW91c0JveCk6IFBhc3MgQ2FjaGVkTG9naWNhbGx5T3JkZXJlZExl
YWZCb3hlcyBvYmplY3QgYXJvdW5kLgorICAgICAgICAoV2ViQ29yZTo6bG9naWNhbGx5TmV4dEJv
eCk6CisgICAgICAgIChXZWJDb3JlOjp3b3JkQnJlYWtJdGVyYXRvckZvck1pbk9mZnNldEJvdW5k
YXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OndvcmRCcmVha0l0ZXJhdG9yRm9yTWF4T2Zmc2V0Qm91
bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6dmlzdWFsV29yZFBvc2l0aW9uKToKKwogMjAxMi0w
My0yMSAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVh
bHBoYWJldGl6ZSBhYm91dCB3ZWJhdWRpbyBtb3ZlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL3Zpc2libGVfdW5pdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvdmlzaWJsZV91bml0cy5jcHAJKHJldmlzaW9uIDExMTYwMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw0NiArMTY1
LDk2IEBAIHN0YXRpYyBjb25zdCBSb290SW5saW5lQm94KiBuZXh0Um9vdElubGkKICAgICByZXR1
cm4gMDsKIH0KIAotc3RhdGljIGludCBib3hJbmRleEluVmVjdG9yKGNvbnN0IElubGluZVRleHRC
b3gqIGJveCwgY29uc3QgVmVjdG9yPElubGluZUJveCo+JiBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRl
cikKK2NsYXNzIENhY2hlZExvZ2ljYWxseU9yZGVyZWRMZWFmQm94ZXMgeworcHVibGljOgorICAg
IENhY2hlZExvZ2ljYWxseU9yZGVyZWRMZWFmQm94ZXMoKTsKKworICAgIGNvbnN0IElubGluZVRl
eHRCb3gqIHByZXZpb3VzVGV4dEJveChjb25zdCBSb290SW5saW5lQm94KiwgY29uc3QgSW5saW5l
VGV4dEJveCopOworICAgIGNvbnN0IElubGluZVRleHRCb3gqIG5leHRUZXh0Qm94KGNvbnN0IFJv
b3RJbmxpbmVCb3gqLCBjb25zdCBJbmxpbmVUZXh0Qm94Kik7CisKKyAgICBzaXplX3Qgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbGVhZkJveGVzLnNpemUoKTsgfQorICAgIGNvbnN0IElubGluZUJv
eCogZmlyc3RCb3goKSBjb25zdCB7IHJldHVybiBtX2xlYWZCb3hlc1swXTsgfQorICAgIAorcHJp
dmF0ZToKKyAgICBjb25zdCBWZWN0b3I8SW5saW5lQm94Kj4mIGNvbGxlY3RCb3hlcyhjb25zdCBS
b290SW5saW5lQm94Kik7CisgICAgaW50IGJveEluZGV4SW5MZWF2ZXMoY29uc3QgSW5saW5lVGV4
dEJveCopOworCisgICAgY29uc3QgUm9vdElubGluZUJveCogbV9yb290SW5saW5lQm94OworICAg
IFZlY3RvcjxJbmxpbmVCb3gqPiBtX2xlYWZCb3hlczsKK307CisKK0NhY2hlZExvZ2ljYWxseU9y
ZGVyZWRMZWFmQm94ZXM6OkNhY2hlZExvZ2ljYWxseU9yZGVyZWRMZWFmQm94ZXMoKSA6IG1fcm9v
dElubGluZUJveCgwKSB7IH07CisKK2NvbnN0IElubGluZVRleHRCb3gqIENhY2hlZExvZ2ljYWxs
eU9yZGVyZWRMZWFmQm94ZXM6OnByZXZpb3VzVGV4dEJveChjb25zdCBSb290SW5saW5lQm94KiBy
b290LCBjb25zdCBJbmxpbmVUZXh0Qm94KiBib3gpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRlci5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAo
Ym94ID09IGxlYWZCb3hlc0luTG9naWNhbE9yZGVyW2ldKQotICAgICAgICAgICAgcmV0dXJuIGk7
CisgICAgaWYgKCFyb290KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNvbGxlY3RCb3hlcyhy
b290KTsKKworICAgIC8vIElmIGJveCBpcyBudWxsLCByb290IGlzIGJveCdzIHByZXZpb3VzIFJv
b3RJbmxpbmVCb3gsIGFuZCBwcmV2aW91c0JveCBpcyB0aGUgbGFzdCBsb2dpY2FsIGJveCBpbiBy
b290LgorICAgIGludCBib3hJbmRleCA9IG1fbGVhZkJveGVzLnNpemUoKSAtIDE7CisgICAgaWYg
KGJveCkKKyAgICAgICAgYm94SW5kZXggPSBib3hJbmRleEluTGVhdmVzKGJveCkgLSAxOworCisg
ICAgZm9yIChpbnQgaSA9IGJveEluZGV4OyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAobV9s
ZWFmQm94ZXNbaV0tPmlzSW5saW5lVGV4dEJveCgpKQorICAgICAgICAgICAgcmV0dXJuIHRvSW5s
aW5lVGV4dEJveChtX2xlYWZCb3hlc1tpXSk7CiAgICAgfQorCiAgICAgcmV0dXJuIDA7CiB9CiAK
LXN0YXRpYyBjb25zdCBJbmxpbmVUZXh0Qm94KiBwcmV2aW91c0JveEluTGluZShjb25zdCBSb290
SW5saW5lQm94KiByb290LCBjb25zdCBJbmxpbmVUZXh0Qm94KiBib3gsIFZlY3RvcjxJbmxpbmVC
b3gqPiYgbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIpCitjb25zdCBJbmxpbmVUZXh0Qm94KiBDYWNo
ZWRMb2dpY2FsbHlPcmRlcmVkTGVhZkJveGVzOjpuZXh0VGV4dEJveChjb25zdCBSb290SW5saW5l
Qm94KiByb290LCBjb25zdCBJbmxpbmVUZXh0Qm94KiBib3gpCiB7CiAgICAgaWYgKCFyb290KQog
ICAgICAgICByZXR1cm4gMDsKIAotICAgIGxlYWZCb3hlc0luTG9naWNhbE9yZGVyLmNsZWFyKCk7
Ci0gICAgcm9vdC0+Y29sbGVjdExlYWZCb3hlc0luTG9naWNhbE9yZGVyKGxlYWZCb3hlc0luTG9n
aWNhbE9yZGVyKTsKKyAgICBjb2xsZWN0Qm94ZXMocm9vdCk7CiAKLSAgICAvLyBJZiBib3ggaXMg
bnVsbCwgcm9vdCBpcyBib3gncyBwcmV2aW91cyBSb290SW5saW5lQm94LCBhbmQgcHJldmlvdXNC
b3ggaXMgdGhlIGxhc3QgbG9naWNhbCBib3ggaW4gcm9vdC4KLSAgICBpbnQgYm94SW5kZXggPSBs
ZWFmQm94ZXNJbkxvZ2ljYWxPcmRlci5zaXplKCkgLSAxOworICAgIC8vIElmIGJveCBpcyBudWxs
LCByb290IGlzIGJveCdzIG5leHQgUm9vdElubGluZUJveCwgYW5kIG5leHRCb3ggaXMgdGhlIGZp
cnN0IGxvZ2ljYWwgYm94IGluIHJvb3QuCisgICAgLy8gT3RoZXJ3aXNlLCByb290IGlzIGJveCdz
IFJvb3RJbmxpbmVCb3gsIGFuZCBuZXh0Qm94IGlzIHRoZSBuZXh0IGxvZ2ljYWwgYm94IGluIHRo
ZSBzYW1lIGxpbmUuCisgICAgc2l6ZV90IG5leHRCb3hJbmRleCA9IDA7CiAgICAgaWYgKGJveCkK
LSAgICAgICAgYm94SW5kZXggPSBib3hJbmRleEluVmVjdG9yKGJveCwgbGVhZkJveGVzSW5Mb2dp
Y2FsT3JkZXIpIC0gMTsKKyAgICAgICAgbmV4dEJveEluZGV4ID0gYm94SW5kZXhJbkxlYXZlcyhi
b3gpICsgMTsKIAotICAgIGZvciAoaW50IGkgPSBib3hJbmRleDsgaSA+PSAwOyAtLWkpIHsKLSAg
ICAgICAgaWYgKGxlYWZCb3hlc0luTG9naWNhbE9yZGVyW2ldLT5pc0lubGluZVRleHRCb3goKSkK
LSAgICAgICAgICAgIHJldHVybiB0b0lubGluZVRleHRCb3gobGVhZkJveGVzSW5Mb2dpY2FsT3Jk
ZXJbaV0pOworICAgIGZvciAoc2l6ZV90IGkgPSBuZXh0Qm94SW5kZXg7IGkgPCBtX2xlYWZCb3hl
cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9sZWFmQm94ZXNbaV0tPmlzSW5saW5lVGV4
dEJveCgpKQorICAgICAgICAgICAgcmV0dXJuIHRvSW5saW5lVGV4dEJveChtX2xlYWZCb3hlc1tp
XSk7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBJbmxpbmVUZXh0
Qm94KiBsb2dpY2FsbHlQcmV2aW91c0JveChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQ
b3NpdGlvbiwgY29uc3QgSW5saW5lVGV4dEJveCogdGV4dEJveCwgYm9vbCYgcHJldmlvdXNCb3hJ
bkRpZmZlcmVudEJsb2NrKQorY29uc3QgVmVjdG9yPElubGluZUJveCo+JiBDYWNoZWRMb2dpY2Fs
bHlPcmRlcmVkTGVhZkJveGVzOjpjb2xsZWN0Qm94ZXMoY29uc3QgUm9vdElubGluZUJveCogcm9v
dCkKK3sKKyAgICBpZiAobV9yb290SW5saW5lQm94ICE9IHJvb3QpIHsKKyAgICAgICAgbV9yb290
SW5saW5lQm94ID0gcm9vdDsKKyAgICAgICAgbV9sZWFmQm94ZXMuY2xlYXIoKTsKKyAgICAgICAg
cm9vdC0+Y29sbGVjdExlYWZCb3hlc0luTG9naWNhbE9yZGVyKG1fbGVhZkJveGVzKTsKKyAgICB9
CisgICAgcmV0dXJuIG1fbGVhZkJveGVzOworfQorCitpbnQgQ2FjaGVkTG9naWNhbGx5T3JkZXJl
ZExlYWZCb3hlczo6Ym94SW5kZXhJbkxlYXZlcyhjb25zdCBJbmxpbmVUZXh0Qm94KiBib3gpCit7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xlYWZCb3hlcy5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAoYm94ID09IG1fbGVhZkJveGVzW2ldKQorICAgICAgICAgICAgcmV0dXJuIGk7
CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgSW5saW5lVGV4dEJveCog
bG9naWNhbGx5UHJldmlvdXNCb3goY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRp
b24sIGNvbnN0IElubGluZVRleHRCb3gqIHRleHRCb3gsCisgICAgYm9vbCYgcHJldmlvdXNCb3hJ
bkRpZmZlcmVudEJsb2NrLCBDYWNoZWRMb2dpY2FsbHlPcmRlcmVkTGVhZkJveGVzJiBsZWFmQm94
ZXMpCiB7CiAgICAgY29uc3QgSW5saW5lQm94KiBzdGFydEJveCA9IHRleHRCb3g7Ci0gICAgVmVj
dG9yPElubGluZUJveCo+IGxlYWZCb3hlc0luTG9naWNhbE9yZGVyOwogCi0gICAgY29uc3QgSW5s
aW5lVGV4dEJveCogcHJldmlvdXNCb3ggPSBwcmV2aW91c0JveEluTGluZShzdGFydEJveC0+cm9v
dCgpLCB0ZXh0Qm94LCBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcik7CisgICAgY29uc3QgSW5saW5l
VGV4dEJveCogcHJldmlvdXNCb3ggPSBsZWFmQm94ZXMucHJldmlvdXNUZXh0Qm94KHN0YXJ0Qm94
LT5yb290KCksIHRleHRCb3gpOwogICAgIGlmIChwcmV2aW91c0JveCkKICAgICAgICAgcmV0dXJu
IHByZXZpb3VzQm94OwogCi0gICAgcHJldmlvdXNCb3ggPSBwcmV2aW91c0JveEluTGluZShzdGFy
dEJveC0+cm9vdCgpLT5wcmV2Um9vdEJveCgpLCAwLCBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcik7
CisgICAgcHJldmlvdXNCb3ggPSBsZWFmQm94ZXMucHJldmlvdXNUZXh0Qm94KHN0YXJ0Qm94LT5y
b290KCktPnByZXZSb290Qm94KCksIDApOwogICAgIGlmIChwcmV2aW91c0JveCkKICAgICAgICAg
cmV0dXJuIHByZXZpb3VzQm94OwogCkBAIC0yMTMsNTEgKzI2MywzMCBAQCBzdGF0aWMgY29uc3Qg
SW5saW5lVGV4dEJveCogbG9naWNhbGx5UHJlCiAgICAgICAgIGlmICghcHJldmlvdXNSb290KQog
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgcHJldmlvdXNCb3ggPSBwcmV2aW91c0JveElu
TGluZShwcmV2aW91c1Jvb3QsIDAsIGxlYWZCb3hlc0luTG9naWNhbE9yZGVyKTsKKyAgICAgICAg
cHJldmlvdXNCb3ggPSBsZWFmQm94ZXMucHJldmlvdXNUZXh0Qm94KHByZXZpb3VzUm9vdCwgMCk7
CiAgICAgICAgIGlmIChwcmV2aW91c0JveCkgewogICAgICAgICAgICAgcHJldmlvdXNCb3hJbkRp
ZmZlcmVudEJsb2NrID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c0JveDsKICAg
ICAgICAgfQogCi0gICAgICAgIGlmICghbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIuc2l6ZSgpKQor
ICAgICAgICBpZiAoIWxlYWZCb3hlcy5zaXplKCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgc3RhcnRCb3ggPSBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRlclswXTsKKyAgICAgICAgc3RhcnRC
b3ggPSBsZWFmQm94ZXMuZmlyc3RCb3goKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0
YXRpYyBjb25zdCBJbmxpbmVUZXh0Qm94KiBuZXh0Qm94SW5MaW5lKGNvbnN0IFJvb3RJbmxpbmVC
b3gqIHJvb3QsIGNvbnN0IElubGluZVRleHRCb3gqIGJveCwgVmVjdG9yPElubGluZUJveCo+JiBs
ZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcikKLXsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIuY2xlYXIoKTsKLSAgICByb290LT5j
b2xsZWN0TGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIobGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIpOwog
Ci0gICAgLy8gSWYgYm94IGlzIG51bGwsIHJvb3QgaXMgYm94J3MgbmV4dCBSb290SW5saW5lQm94
LCBhbmQgbmV4dEJveCBpcyB0aGUgZmlyc3QgbG9naWNhbCBib3ggaW4gcm9vdC4KLSAgICAvLyBP
dGhlcndpc2UsIHJvb3QgaXMgYm94J3MgUm9vdElubGluZUJveCwgYW5kIG5leHRCb3ggaXMgdGhl
IG5leHQgbG9naWNhbCBib3ggaW4gdGhlIHNhbWUgbGluZS4KLSAgICBzaXplX3QgbmV4dEJveElu
ZGV4ID0gMDsKLSAgICBpZiAoYm94KQotICAgICAgICBuZXh0Qm94SW5kZXggPSBib3hJbmRleElu
VmVjdG9yKGJveCwgbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIpICsgMTsKLQotICAgIGZvciAoc2l6
ZV90IGkgPSBuZXh0Qm94SW5kZXg7IGkgPCBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRlci5zaXplKCk7
ICsraSkgewotICAgICAgICBpZiAobGVhZkJveGVzSW5Mb2dpY2FsT3JkZXJbaV0tPmlzSW5saW5l
VGV4dEJveCgpKQotICAgICAgICAgICAgcmV0dXJuIHRvSW5saW5lVGV4dEJveChsZWFmQm94ZXNJ
bkxvZ2ljYWxPcmRlcltpXSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBj
b25zdCBJbmxpbmVUZXh0Qm94KiBsb2dpY2FsbHlOZXh0Qm94KGNvbnN0IFZpc2libGVQb3NpdGlv
biYgdmlzaWJsZVBvc2l0aW9uLCBjb25zdCBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBib29sJiBu
ZXh0Qm94SW5EaWZmZXJlbnRCbG9jaykKK3N0YXRpYyBjb25zdCBJbmxpbmVUZXh0Qm94KiBsb2dp
Y2FsbHlOZXh0Qm94KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uLCBjb25z
dCBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LAorICAgIGJvb2wmIG5leHRCb3hJbkRpZmZlcmVudEJs
b2NrLCBDYWNoZWRMb2dpY2FsbHlPcmRlcmVkTGVhZkJveGVzJiBsZWFmQm94ZXMpCiB7CiAgICAg
Y29uc3QgSW5saW5lQm94KiBzdGFydEJveCA9IHRleHRCb3g7Ci0gICAgVmVjdG9yPElubGluZUJv
eCo+IGxlYWZCb3hlc0luTG9naWNhbE9yZGVyOwogCi0gICAgY29uc3QgSW5saW5lVGV4dEJveCog
bmV4dEJveCA9IG5leHRCb3hJbkxpbmUoc3RhcnRCb3gtPnJvb3QoKSwgdGV4dEJveCwgbGVhZkJv
eGVzSW5Mb2dpY2FsT3JkZXIpOworICAgIGNvbnN0IElubGluZVRleHRCb3gqIG5leHRCb3ggPSBs
ZWFmQm94ZXMubmV4dFRleHRCb3goc3RhcnRCb3gtPnJvb3QoKSwgdGV4dEJveCk7CiAgICAgaWYg
KG5leHRCb3gpCiAgICAgICAgIHJldHVybiBuZXh0Qm94OwogCi0gICAgbmV4dEJveCA9IG5leHRC
b3hJbkxpbmUoc3RhcnRCb3gtPnJvb3QoKS0+bmV4dFJvb3RCb3goKSwgMCwgbGVhZkJveGVzSW5M
b2dpY2FsT3JkZXIpOworICAgIG5leHRCb3ggPSBsZWFmQm94ZXMubmV4dFRleHRCb3goc3RhcnRC
b3gtPnJvb3QoKS0+bmV4dFJvb3RCb3goKSwgMCk7CiAgICAgaWYgKG5leHRCb3gpCiAgICAgICAg
IHJldHVybiBuZXh0Qm94OwogCkBAIC0yNjYsMjYgKzI5NSwyNiBAQCBzdGF0aWMgY29uc3QgSW5s
aW5lVGV4dEJveCogbG9naWNhbGx5TmV4CiAgICAgICAgIGlmICghbmV4dFJvb3QpCiAgICAgICAg
ICAgICBicmVhazsKIAotICAgICAgICBuZXh0Qm94ID0gbmV4dEJveEluTGluZShuZXh0Um9vdCwg
MCwgbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIpOworICAgICAgICBuZXh0Qm94ID0gbGVhZkJveGVz
Lm5leHRUZXh0Qm94KG5leHRSb290LCAwKTsKICAgICAgICAgaWYgKG5leHRCb3gpIHsKICAgICAg
ICAgICAgIG5leHRCb3hJbkRpZmZlcmVudEJsb2NrID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVy
biBuZXh0Qm94OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFsZWFmQm94ZXNJbkxvZ2ljYWxP
cmRlci5zaXplKCkpCisgICAgICAgIGlmICghbGVhZkJveGVzLnNpemUoKSkKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBzdGFydEJveCA9IGxlYWZCb3hlc0luTG9naWNhbE9yZGVyWzBdOwor
ICAgICAgICBzdGFydEJveCA9IGxlYWZCb3hlcy5maXJzdEJveCgpOwogICAgIH0KICAgICByZXR1
cm4gMDsKIH0KIAogc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiB3b3JkQnJlYWtJdGVyYXRvckZv
ck1pbk9mZnNldEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9u
LCBjb25zdCBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LAotICAgICBpbnQmIHByZXZpb3VzQm94TGVu
Z3RoLCBib29sJiBwcmV2aW91c0JveEluRGlmZmVyZW50QmxvY2ssIFZlY3RvcjxVQ2hhciwgMTAy
ND4mIHN0cmluZykKKyAgICAgaW50JiBwcmV2aW91c0JveExlbmd0aCwgYm9vbCYgcHJldmlvdXNC
b3hJbkRpZmZlcmVudEJsb2NrLCBWZWN0b3I8VUNoYXIsIDEwMjQ+JiBzdHJpbmcsIENhY2hlZExv
Z2ljYWxseU9yZGVyZWRMZWFmQm94ZXMmIGxlYWZCb3hlcykKIHsKICAgICBwcmV2aW91c0JveElu
RGlmZmVyZW50QmxvY2sgPSBmYWxzZTsKIAogICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIGNhc2Ug
d2hlbiB3ZSBkb24ndCBoYXZlIGFuIGlubGluZSB0ZXh0IGJveC4KLSAgICBjb25zdCBJbmxpbmVU
ZXh0Qm94KiBwcmV2aW91c0JveCA9IGxvZ2ljYWxseVByZXZpb3VzQm94KHZpc2libGVQb3NpdGlv
biwgdGV4dEJveCwgcHJldmlvdXNCb3hJbkRpZmZlcmVudEJsb2NrKTsKKyAgICBjb25zdCBJbmxp
bmVUZXh0Qm94KiBwcmV2aW91c0JveCA9IGxvZ2ljYWxseVByZXZpb3VzQm94KHZpc2libGVQb3Np
dGlvbiwgdGV4dEJveCwgcHJldmlvdXNCb3hJbkRpZmZlcmVudEJsb2NrLCBsZWFmQm94ZXMpOwog
CiAgICAgaW50IGxlbiA9IDA7CiAgICAgc3RyaW5nLmNsZWFyKCk7CkBAIC0zMDEsMTIgKzMzMCwx
MiBAQCBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhCiB9IAogCiBzdGF0
aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yRm9yTWF4T2Zmc2V0Qm91bmRh
cnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIGNvbnN0IElubGluZVRl
eHRCb3gqIHRleHRCb3gsCi0gICAgYm9vbCYgbmV4dEJveEluRGlmZmVyZW50QmxvY2ssIFZlY3Rv
cjxVQ2hhciwgMTAyND4mIHN0cmluZykKKyAgICBib29sJiBuZXh0Qm94SW5EaWZmZXJlbnRCbG9j
aywgVmVjdG9yPFVDaGFyLCAxMDI0PiYgc3RyaW5nLCBDYWNoZWRMb2dpY2FsbHlPcmRlcmVkTGVh
ZkJveGVzJiBsZWFmQm94ZXMpCiB7CiAgICAgbmV4dEJveEluRGlmZmVyZW50QmxvY2sgPSBmYWxz
ZTsKIAogICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIGNhc2Ugd2hlbiB3ZSBkb24ndCBoYXZlIGFu
IGlubGluZSB0ZXh0IGJveC4KLSAgICBjb25zdCBJbmxpbmVUZXh0Qm94KiBuZXh0Qm94ID0gbG9n
aWNhbGx5TmV4dEJveCh2aXNpYmxlUG9zaXRpb24sIHRleHRCb3gsIG5leHRCb3hJbkRpZmZlcmVu
dEJsb2NrKTsKKyAgICBjb25zdCBJbmxpbmVUZXh0Qm94KiBuZXh0Qm94ID0gbG9naWNhbGx5TmV4
dEJveCh2aXNpYmxlUG9zaXRpb24sIHRleHRCb3gsIG5leHRCb3hJbkRpZmZlcmVudEJsb2NrLCBs
ZWFmQm94ZXMpOwogCiAgICAgaW50IGxlbiA9IDA7CiAgICAgc3RyaW5nLmNsZWFyKCk7CkBAIC0z
NDksNiArMzc4LDkgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiB2aXN1YWxXb3JkUG9zaXRpbwog
ICAgIFZpc2libGVQb3NpdGlvbiBjdXJyZW50ID0gdmlzaWJsZVBvc2l0aW9uOwogICAgIFRleHRC
cmVha0l0ZXJhdG9yKiBpdGVyID0gMDsKIAorICAgIENhY2hlZExvZ2ljYWxseU9yZGVyZWRMZWFm
Qm94ZXMgbGVhZkJveGVzOworICAgIFZlY3RvcjxVQ2hhciwgMTAyND4gc3RyaW5nOworCiAgICAg
d2hpbGUgKDEpIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGFkamFjZW50Q2hhcmFjdGVyUG9z
aXRpb24gPSBkaXJlY3Rpb24gPT0gTW92ZVJpZ2h0ID8gY3VycmVudC5yaWdodCh0cnVlKSA6IGN1
cnJlbnQubGVmdCh0cnVlKTsgCiAgICAgICAgIGlmIChhZGphY2VudENoYXJhY3RlclBvc2l0aW9u
ID09IGN1cnJlbnQgfHwgYWRqYWNlbnRDaGFyYWN0ZXJQb3NpdGlvbi5pc051bGwoKSkKQEAgLTM3
MSwxMSArNDAzLDEwIEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzdWFsV29yZFBvc2l0aW8K
ICAgICAgICAgYm9vbCBuZXh0Qm94SW5EaWZmZXJlbnRCbG9jayA9IGZhbHNlOwogICAgICAgICBi
b29sIG1vdmluZ0ludG9OZXdCb3ggPSBwcmV2aW91c2x5VmlzaXRlZEJveCAhPSBib3g7CiAKLSAg
ICAgICAgVmVjdG9yPFVDaGFyLCAxMDI0PiBzdHJpbmc7CiAgICAgICAgIGlmIChvZmZzZXRJbkJv
eCA9PSBib3gtPmNhcmV0TWluT2Zmc2V0KCkpCi0gICAgICAgICAgICBpdGVyID0gd29yZEJyZWFr
SXRlcmF0b3JGb3JNaW5PZmZzZXRCb3VuZGFyeSh2aXNpYmxlUG9zaXRpb24sIHRleHRCb3gsIHBy
ZXZpb3VzQm94TGVuZ3RoLCBwcmV2aW91c0JveEluRGlmZmVyZW50QmxvY2ssIHN0cmluZyk7Cisg
ICAgICAgICAgICBpdGVyID0gd29yZEJyZWFrSXRlcmF0b3JGb3JNaW5PZmZzZXRCb3VuZGFyeSh2
aXNpYmxlUG9zaXRpb24sIHRleHRCb3gsIHByZXZpb3VzQm94TGVuZ3RoLCBwcmV2aW91c0JveElu
RGlmZmVyZW50QmxvY2ssIHN0cmluZywgbGVhZkJveGVzKTsKICAgICAgICAgZWxzZSBpZiAob2Zm
c2V0SW5Cb3ggPT0gYm94LT5jYXJldE1heE9mZnNldCgpKQotICAgICAgICAgICAgaXRlciA9IHdv
cmRCcmVha0l0ZXJhdG9yRm9yTWF4T2Zmc2V0Qm91bmRhcnkodmlzaWJsZVBvc2l0aW9uLCB0ZXh0
Qm94LCBuZXh0Qm94SW5EaWZmZXJlbnRCbG9jaywgc3RyaW5nKTsKKyAgICAgICAgICAgIGl0ZXIg
PSB3b3JkQnJlYWtJdGVyYXRvckZvck1heE9mZnNldEJvdW5kYXJ5KHZpc2libGVQb3NpdGlvbiwg
dGV4dEJveCwgbmV4dEJveEluRGlmZmVyZW50QmxvY2ssIHN0cmluZywgbGVhZkJveGVzKTsKICAg
ICAgICAgZWxzZSBpZiAobW92aW5nSW50b05ld0JveCkgewogICAgICAgICAgICAgaXRlciA9IHdv
cmRCcmVha0l0ZXJhdG9yKHRleHRCb3gtPnRleHRSZW5kZXJlcigpLT50ZXh0KCktPmNoYXJhY3Rl
cnMoKSArIHRleHRCb3gtPnN0YXJ0KCksIHRleHRCb3gtPmxlbigpKTsKICAgICAgICAgICAgIHBy
ZXZpb3VzbHlWaXNpdGVkQm94ID0gYm94OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTExNjA1KQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MTItMDMtMjEgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIHZpc3Vh
bCB3b3JkIG1vdmVtZW50OiB1c2luZyBjYWNoZSB0byBkZWNyZWFzZSB0aGUgbnVtYmVyIG9mIGNv
bGxlY3RMZWFmQm94ZXNJbkxvZ2ljYWxPcmRlciBvbiBSb290SW5saW5lQm94CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTQwOAorCisgICAgICAgIFJl
dmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KKworICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL21v
dmUtYnktd29yZC12aXN1YWxseS1zaW5nbGUtc3BhY2Utb25lLWVsZW1lbnQtZXhwZWN0ZWQudHh0
OgorICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1zaW5n
bGUtc3BhY2Utb25lLWVsZW1lbnQuaHRtbDoKKyAgICAgICAgICBBZGQgYSB0ZXN0IGNhc2UgdGhh
dCBhIHdvcmQgaXMgc3ByZWFkaW5nIGFjcm9zcyBtdWx0aXBsZSBpbmxpbmUgYm94ZXMuCisKIDIw
MTItMDMtMjEgIFN0ZXBoZW4gQ2hlbm5leSAgPHNjaGVubmV5QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBTVkcgbGF5b3V0IGxlYXZlcyBvYmplY3RzIHN0aWxsIG5lZWRpbmcgbGF5b3V0CkluZGV4
OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktc2lu
Z2xlLXNwYWNlLW9uZS1lbGVtZW50LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktc2luZ2xlLXNwYWNl
LW9uZS1lbGVtZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTExNjAxKQorKysgTGF5b3V0VGVz
dHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LXNpbmdsZS1zcGFjZS1v
bmUtZWxlbWVudC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDExIEBA
IE1vdmUgbGVmdCBieSBvbmUgd29yZAogIiBvcHEgcnN0ICJbOCwgNSwgMV0sICJhYmMgZGVmIGhp
aiAiWzgsIDQsIDBdCiBUZXN0IDE5LCBMVFI6CiBNb3ZlIHJpZ2h0IGJ5IG9uZSB3b3JkCisiYWJj
IGRlZiB0aGlzIlswLCA0LCA4XSwgImVuZCBvcHEgcnN0ICJbNCwgOCwgMTFdCitNb3ZlIGxlZnQg
Ynkgb25lIHdvcmQKKyJlbmQgb3BxIHJzdCAiWzExLCA4LCA0XSwgImFiYyBkZWYgdGhpcyJbOCwg
NCwgMF0KK1Rlc3QgMjAsIExUUjoKK01vdmUgcmlnaHQgYnkgb25lIHdvcmQKIDxESVY+WzBdCiBN
b3ZlIGxlZnQgYnkgb25lIHdvcmQKIDxESVY+WzBdCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5n
L3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktc2luZ2xlLXNwYWNlLW9uZS1lbGVtZW50
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1i
eS13b3JkLXZpc3VhbGx5LXNpbmdsZS1zcGFjZS1vbmUtZWxlbWVudC5odG1sCShyZXZpc2lvbiAx
MTE2MDEpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlz
dWFsbHktc2luZ2xlLXNwYWNlLW9uZS1lbGVtZW50Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTcx
LDYgKzcxLDggQEAgd2hlcmUgY2hpbGRfbm9kZV9pbmRleCBpcyBvcHRpb25hbCwgZGVmYQogPCEt
LSBUZXN0IHdpdGggaW1hZ2UgLS0gbm9uLWlubGluZS10ZXh0LWJveCAtLT4KIDxkaXYgaWQ9ImRf
MSIgZGlyPWx0ciBjbGFzcz0idGVzdF9tb3ZlX2J5X3dvcmQiIGNvbnRlbnRlZGl0YWJsZSB0aXRs
ZT0iW2RfMSwgMCwgMV1bZF8xLCA0LCAxXVtkXzEsIDgsIDFdW2RfMSwgMSwgM11bZF8xLCA1LCAz
XVtkXzEsIDgsIDNdfFtkXzEsIDgsIDNdW2RfMSwgNSwgM11bZF8xLCAxLCAzXVtkXzEsIDgsIDFd
W2RfMSwgNCwgMV1bZF8xLCAwLCAxXSI+YWJjIGRlZiBoaWogPGltZyBzcmM9Li4vLi4vYWNjZXNz
aWJpbGl0eS9yZXNvdXJjZXMvY2FrZS5wbmc+IG9wcSByc3QgPC9kaXY+CiAKKzxkaXYgaWQ9ImRf
MiIgZGlyPWx0ciBjbGFzcz0idGVzdF9tb3ZlX2J5X3dvcmQiIGNvbnRlbnRlZGl0YWJsZSB0aXRs
ZT0iW2RfMiwgMCwgMV1bZF8yLCA0LCAxXVtkXzIsIDgsIDFdW2RfMiwgNCwgNV1bZF8yLCA4LCA1
XVtkXzIsIDExLCA1XXxbZF8yLCAxMSwgNV1bZF8yLCA4LCA1XVtkXzIsIDQsIDVdW2RfMiwgOCwg
MV1bZF8yLCA0LCAxXVtkXzIsIDAsIDFdIj5hYmMgZGVmIHRoaXM8c3Bhbj5pczwvc3Bhbj48c3Bh
bj5vbmU8L3NwYW4+PHNwYW4+d29yZDwvc3Bhbj5lbmQgb3BxIHJzdCA8L2Rpdj4KKwogPCEtLSBl
bXB0eSBkaXYgLS0+CiA8ZGl2IGRpcj1sdHIgY2xhc3M9InRlc3RfbW92ZV9ieV93b3JkIiB0aXRs
ZT0iMHwwIiBjb250ZW50ZWRpdGFibGU+PC9kaXY+CiAK
</data>
<flag name="review"
          id="137005"
          type_id="1"
          status="+"
          setter="rniwa"
    />
    <flag name="commit-queue"
          id="137012"
          type_id="3"
          status="-"
          setter="xji"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133129</attachid>
            <date>2012-03-21 15:41:43 -0700</date>
            <delta_ts>2012-03-21 17:21:04 -0700</delta_ts>
            <desc>patch</desc>
            <filename>81408.v4</filename>
            <type>text/plain</type>
            <size>15017</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMTYwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDEyLTAzLTIxICBYaWFvbWVp
IEppICA8eGppQGNocm9taXVtLm9yZz4KKworICAgICAgICB2aXN1YWwgd29yZCBtb3ZlbWVudDog
dXNpbmcgY2FjaGUgdG8gZGVjcmVhc2UgdGhlIG51bWJlciBvZiBjb2xsZWN0TGVhZkJveGVzSW5M
b2dpY2FsT3JkZXIgb24gUm9vdElubGluZUJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE0MDgKKworICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtl
IE5pd2EuCisKKyAgICAgICAgQ2FjaGUgbG9naWNhbGx5IG9yZGVyZWQgbGVhZiBib3hlcyB1bmRl
ciBhIHBhcnRpY3VsYXIgcm9vdCBib3guCisgICAgICAgIEFsc28sIG1vdmUgJ1ZlY3RvcjxVQ2hh
ciwgMTAyND4gc3RyaW5nJyBkZWNsYXJlZCBpbiB2aXN1YWxXb3JkUG9zaXRpb24oKSB0byBvdXRz
aWRlIG9mIGxvb3AgKGl0IGlzIGFsd2F5cworICAgICAgICBjbGVhci1lZCBiZWZvcmUgdXNlKS4K
KworICAgICAgICAqIGVkaXRpbmcvdmlzaWJsZV91bml0cy5jcHA6CisgICAgICAgIChDYWNoZWRM
b2dpY2FsbHlPcmRlcmVkTGVhZkJveGVzKTogQWRkIGNsYXNzIHRvIGNhY2hlIGxvZ2ljYWxseSBv
cmRlcmVkIGxlYWYgYm94ZXMgdW5kZXIgYSBwYXJ0aWN1bGFyIHJvb3QgYm94LgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkTG9naWNhbGx5T3JkZXJlZExlYWZCb3hlczo6c2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRMb2dpY2FsbHlPcmRlcmVkTGVhZkJveGVzOjpmaXJzdEJveCk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZExvZ2ljYWxseU9yZGVy
ZWRMZWFmQm94ZXM6OkNhY2hlZExvZ2ljYWxseU9yZGVyZWRMZWFmQm94ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkTG9naWNhbGx5T3JkZXJlZExlYWZCb3hlczo6cHJldmlvdXNUZXh0Qm94
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZExvZ2ljYWxseU9yZGVyZWRMZWFmQm94ZXM6Om5l
eHRUZXh0Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZExvZ2ljYWxseU9yZGVyZWRMZWFm
Qm94ZXM6OmNvbGxlY3RCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRMb2dpY2FsbHlP
cmRlcmVkTGVhZkJveGVzOjpib3hJbmRleEluTGVhdmVzKToKKyAgICAgICAgKFdlYkNvcmU6Omxv
Z2ljYWxseVByZXZpb3VzQm94KTogUGFzcyBDYWNoZWRMb2dpY2FsbHlPcmRlcmVkTGVhZkJveGVz
IG9iamVjdCBhcm91bmQuCisgICAgICAgIChXZWJDb3JlOjpsb2dpY2FsbHlOZXh0Qm94KToKKyAg
ICAgICAgKFdlYkNvcmU6OndvcmRCcmVha0l0ZXJhdG9yRm9yTWluT2Zmc2V0Qm91bmRhcnkpOgor
ICAgICAgICAoV2ViQ29yZTo6d29yZEJyZWFrSXRlcmF0b3JGb3JNYXhPZmZzZXRCb3VuZGFyeSk6
CisgICAgICAgIChXZWJDb3JlOjp2aXN1YWxXb3JkUG9zaXRpb24pOgorCiAyMDEyLTAzLTIxICBN
YXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZWFscGhhYmV0
aXplIGFib3V0IHdlYmF1ZGlvIG1vdmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlz
aWJsZV91bml0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNp
YmxlX3VuaXRzLmNwcAkocmV2aXNpb24gMTExNjAxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy92aXNpYmxlX3VuaXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDQ2ICsxNjUsOTYgQEAg
c3RhdGljIGNvbnN0IFJvb3RJbmxpbmVCb3gqIG5leHRSb290SW5saQogICAgIHJldHVybiAwOwog
fQogCi1zdGF0aWMgaW50IGJveEluZGV4SW5WZWN0b3IoY29uc3QgSW5saW5lVGV4dEJveCogYm94
LCBjb25zdCBWZWN0b3I8SW5saW5lQm94Kj4mIGxlYWZCb3hlc0luTG9naWNhbE9yZGVyKQorY2xh
c3MgQ2FjaGVkTG9naWNhbGx5T3JkZXJlZExlYWZCb3hlcyB7CitwdWJsaWM6CisgICAgQ2FjaGVk
TG9naWNhbGx5T3JkZXJlZExlYWZCb3hlcygpOworCisgICAgY29uc3QgSW5saW5lVGV4dEJveCog
cHJldmlvdXNUZXh0Qm94KGNvbnN0IFJvb3RJbmxpbmVCb3gqLCBjb25zdCBJbmxpbmVUZXh0Qm94
Kik7CisgICAgY29uc3QgSW5saW5lVGV4dEJveCogbmV4dFRleHRCb3goY29uc3QgUm9vdElubGlu
ZUJveCosIGNvbnN0IElubGluZVRleHRCb3gqKTsKKworICAgIHNpemVfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9sZWFmQm94ZXMuc2l6ZSgpOyB9CisgICAgY29uc3QgSW5saW5lQm94KiBmaXJz
dEJveCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVhZkJveGVzWzBdOyB9CisgICAgCitwcml2YXRlOgor
ICAgIGNvbnN0IFZlY3RvcjxJbmxpbmVCb3gqPiYgY29sbGVjdEJveGVzKGNvbnN0IFJvb3RJbmxp
bmVCb3gqKTsKKyAgICBpbnQgYm94SW5kZXhJbkxlYXZlcyhjb25zdCBJbmxpbmVUZXh0Qm94Kik7
CisKKyAgICBjb25zdCBSb290SW5saW5lQm94KiBtX3Jvb3RJbmxpbmVCb3g7CisgICAgVmVjdG9y
PElubGluZUJveCo+IG1fbGVhZkJveGVzOworfTsKKworQ2FjaGVkTG9naWNhbGx5T3JkZXJlZExl
YWZCb3hlczo6Q2FjaGVkTG9naWNhbGx5T3JkZXJlZExlYWZCb3hlcygpIDogbV9yb290SW5saW5l
Qm94KDApIHsgfTsKKworY29uc3QgSW5saW5lVGV4dEJveCogQ2FjaGVkTG9naWNhbGx5T3JkZXJl
ZExlYWZCb3hlczo6cHJldmlvdXNUZXh0Qm94KGNvbnN0IFJvb3RJbmxpbmVCb3gqIHJvb3QsIGNv
bnN0IElubGluZVRleHRCb3gqIGJveCkKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxl
YWZCb3hlc0luTG9naWNhbE9yZGVyLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChib3ggPT0g
bGVhZkJveGVzSW5Mb2dpY2FsT3JkZXJbaV0pCi0gICAgICAgICAgICByZXR1cm4gaTsKKyAgICBp
ZiAoIXJvb3QpCisgICAgICAgIHJldHVybiAwOworCisgICAgY29sbGVjdEJveGVzKHJvb3QpOwor
CisgICAgLy8gSWYgYm94IGlzIG51bGwsIHJvb3QgaXMgYm94J3MgcHJldmlvdXMgUm9vdElubGlu
ZUJveCwgYW5kIHByZXZpb3VzQm94IGlzIHRoZSBsYXN0IGxvZ2ljYWwgYm94IGluIHJvb3QuCisg
ICAgaW50IGJveEluZGV4ID0gbV9sZWFmQm94ZXMuc2l6ZSgpIC0gMTsKKyAgICBpZiAoYm94KQor
ICAgICAgICBib3hJbmRleCA9IGJveEluZGV4SW5MZWF2ZXMoYm94KSAtIDE7CisKKyAgICBmb3Ig
KGludCBpID0gYm94SW5kZXg7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGlmIChtX2xlYWZCb3hl
c1tpXS0+aXNJbmxpbmVUZXh0Qm94KCkpCisgICAgICAgICAgICByZXR1cm4gdG9JbmxpbmVUZXh0
Qm94KG1fbGVhZkJveGVzW2ldKTsKICAgICB9CisKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGlj
IGNvbnN0IElubGluZVRleHRCb3gqIHByZXZpb3VzQm94SW5MaW5lKGNvbnN0IFJvb3RJbmxpbmVC
b3gqIHJvb3QsIGNvbnN0IElubGluZVRleHRCb3gqIGJveCwgVmVjdG9yPElubGluZUJveCo+JiBs
ZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcikKK2NvbnN0IElubGluZVRleHRCb3gqIENhY2hlZExvZ2lj
YWxseU9yZGVyZWRMZWFmQm94ZXM6Om5leHRUZXh0Qm94KGNvbnN0IFJvb3RJbmxpbmVCb3gqIHJv
b3QsIGNvbnN0IElubGluZVRleHRCb3gqIGJveCkKIHsKICAgICBpZiAoIXJvb3QpCiAgICAgICAg
IHJldHVybiAwOwogCi0gICAgbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIuY2xlYXIoKTsKLSAgICBy
b290LT5jb2xsZWN0TGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIobGVhZkJveGVzSW5Mb2dpY2FsT3Jk
ZXIpOworICAgIGNvbGxlY3RCb3hlcyhyb290KTsKIAotICAgIC8vIElmIGJveCBpcyBudWxsLCBy
b290IGlzIGJveCdzIHByZXZpb3VzIFJvb3RJbmxpbmVCb3gsIGFuZCBwcmV2aW91c0JveCBpcyB0
aGUgbGFzdCBsb2dpY2FsIGJveCBpbiByb290LgotICAgIGludCBib3hJbmRleCA9IGxlYWZCb3hl
c0luTG9naWNhbE9yZGVyLnNpemUoKSAtIDE7CisgICAgLy8gSWYgYm94IGlzIG51bGwsIHJvb3Qg
aXMgYm94J3MgbmV4dCBSb290SW5saW5lQm94LCBhbmQgbmV4dEJveCBpcyB0aGUgZmlyc3QgbG9n
aWNhbCBib3ggaW4gcm9vdC4KKyAgICAvLyBPdGhlcndpc2UsIHJvb3QgaXMgYm94J3MgUm9vdElu
bGluZUJveCwgYW5kIG5leHRCb3ggaXMgdGhlIG5leHQgbG9naWNhbCBib3ggaW4gdGhlIHNhbWUg
bGluZS4KKyAgICBzaXplX3QgbmV4dEJveEluZGV4ID0gMDsKICAgICBpZiAoYm94KQotICAgICAg
ICBib3hJbmRleCA9IGJveEluZGV4SW5WZWN0b3IoYm94LCBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRl
cikgLSAxOworICAgICAgICBuZXh0Qm94SW5kZXggPSBib3hJbmRleEluTGVhdmVzKGJveCkgKyAx
OwogCi0gICAgZm9yIChpbnQgaSA9IGJveEluZGV4OyBpID49IDA7IC0taSkgewotICAgICAgICBp
ZiAobGVhZkJveGVzSW5Mb2dpY2FsT3JkZXJbaV0tPmlzSW5saW5lVGV4dEJveCgpKQotICAgICAg
ICAgICAgcmV0dXJuIHRvSW5saW5lVGV4dEJveChsZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcltpXSk7
CisgICAgZm9yIChzaXplX3QgaSA9IG5leHRCb3hJbmRleDsgaSA8IG1fbGVhZkJveGVzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGlmIChtX2xlYWZCb3hlc1tpXS0+aXNJbmxpbmVUZXh0Qm94KCkp
CisgICAgICAgICAgICByZXR1cm4gdG9JbmxpbmVUZXh0Qm94KG1fbGVhZkJveGVzW2ldKTsKICAg
ICB9CiAKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGNvbnN0IElubGluZVRleHRCb3gqIGxv
Z2ljYWxseVByZXZpb3VzQm94KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9u
LCBjb25zdCBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBib29sJiBwcmV2aW91c0JveEluRGlmZmVy
ZW50QmxvY2spCitjb25zdCBWZWN0b3I8SW5saW5lQm94Kj4mIENhY2hlZExvZ2ljYWxseU9yZGVy
ZWRMZWFmQm94ZXM6OmNvbGxlY3RCb3hlcyhjb25zdCBSb290SW5saW5lQm94KiByb290KQorewor
ICAgIGlmIChtX3Jvb3RJbmxpbmVCb3ggIT0gcm9vdCkgeworICAgICAgICBtX3Jvb3RJbmxpbmVC
b3ggPSByb290OworICAgICAgICBtX2xlYWZCb3hlcy5jbGVhcigpOworICAgICAgICByb290LT5j
b2xsZWN0TGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIobV9sZWFmQm94ZXMpOworICAgIH0KKyAgICBy
ZXR1cm4gbV9sZWFmQm94ZXM7Cit9CisKK2ludCBDYWNoZWRMb2dpY2FsbHlPcmRlcmVkTGVhZkJv
eGVzOjpib3hJbmRleEluTGVhdmVzKGNvbnN0IElubGluZVRleHRCb3gqIGJveCkKK3sKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbGVhZkJveGVzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGlmIChib3ggPT0gbV9sZWFmQm94ZXNbaV0pCisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICB9
CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBJbmxpbmVUZXh0Qm94KiBsb2dpY2Fs
bHlQcmV2aW91c0JveChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbiwgY29u
c3QgSW5saW5lVGV4dEJveCogdGV4dEJveCwKKyAgICBib29sJiBwcmV2aW91c0JveEluRGlmZmVy
ZW50QmxvY2ssIENhY2hlZExvZ2ljYWxseU9yZGVyZWRMZWFmQm94ZXMmIGxlYWZCb3hlcykKIHsK
ICAgICBjb25zdCBJbmxpbmVCb3gqIHN0YXJ0Qm94ID0gdGV4dEJveDsKLSAgICBWZWN0b3I8SW5s
aW5lQm94Kj4gbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXI7CiAKLSAgICBjb25zdCBJbmxpbmVUZXh0
Qm94KiBwcmV2aW91c0JveCA9IHByZXZpb3VzQm94SW5MaW5lKHN0YXJ0Qm94LT5yb290KCksIHRl
eHRCb3gsIGxlYWZCb3hlc0luTG9naWNhbE9yZGVyKTsKKyAgICBjb25zdCBJbmxpbmVUZXh0Qm94
KiBwcmV2aW91c0JveCA9IGxlYWZCb3hlcy5wcmV2aW91c1RleHRCb3goc3RhcnRCb3gtPnJvb3Qo
KSwgdGV4dEJveCk7CiAgICAgaWYgKHByZXZpb3VzQm94KQogICAgICAgICByZXR1cm4gcHJldmlv
dXNCb3g7CiAKLSAgICBwcmV2aW91c0JveCA9IHByZXZpb3VzQm94SW5MaW5lKHN0YXJ0Qm94LT5y
b290KCktPnByZXZSb290Qm94KCksIDAsIGxlYWZCb3hlc0luTG9naWNhbE9yZGVyKTsKKyAgICBw
cmV2aW91c0JveCA9IGxlYWZCb3hlcy5wcmV2aW91c1RleHRCb3goc3RhcnRCb3gtPnJvb3QoKS0+
cHJldlJvb3RCb3goKSwgMCk7CiAgICAgaWYgKHByZXZpb3VzQm94KQogICAgICAgICByZXR1cm4g
cHJldmlvdXNCb3g7CiAKQEAgLTIxMyw1MSArMjYzLDMwIEBAIHN0YXRpYyBjb25zdCBJbmxpbmVU
ZXh0Qm94KiBsb2dpY2FsbHlQcmUKICAgICAgICAgaWYgKCFwcmV2aW91c1Jvb3QpCiAgICAgICAg
ICAgICBicmVhazsKIAotICAgICAgICBwcmV2aW91c0JveCA9IHByZXZpb3VzQm94SW5MaW5lKHBy
ZXZpb3VzUm9vdCwgMCwgbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIpOworICAgICAgICBwcmV2aW91
c0JveCA9IGxlYWZCb3hlcy5wcmV2aW91c1RleHRCb3gocHJldmlvdXNSb290LCAwKTsKICAgICAg
ICAgaWYgKHByZXZpb3VzQm94KSB7CiAgICAgICAgICAgICBwcmV2aW91c0JveEluRGlmZmVyZW50
QmxvY2sgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzQm94OwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKCFsZWFmQm94ZXNJbkxvZ2ljYWxPcmRlci5zaXplKCkpCisgICAgICAg
IGlmICghbGVhZkJveGVzLnNpemUoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBzdGFy
dEJveCA9IGxlYWZCb3hlc0luTG9naWNhbE9yZGVyWzBdOworICAgICAgICBzdGFydEJveCA9IGxl
YWZCb3hlcy5maXJzdEJveCgpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGNv
bnN0IElubGluZVRleHRCb3gqIG5leHRCb3hJbkxpbmUoY29uc3QgUm9vdElubGluZUJveCogcm9v
dCwgY29uc3QgSW5saW5lVGV4dEJveCogYm94LCBWZWN0b3I8SW5saW5lQm94Kj4mIGxlYWZCb3hl
c0luTG9naWNhbE9yZGVyKQotewotICAgIGlmICghcm9vdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRlci5jbGVhcigpOwotICAgIHJvb3QtPmNvbGxlY3RM
ZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcihsZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcik7CiAKLSAgICAv
LyBJZiBib3ggaXMgbnVsbCwgcm9vdCBpcyBib3gncyBuZXh0IFJvb3RJbmxpbmVCb3gsIGFuZCBu
ZXh0Qm94IGlzIHRoZSBmaXJzdCBsb2dpY2FsIGJveCBpbiByb290LgotICAgIC8vIE90aGVyd2lz
ZSwgcm9vdCBpcyBib3gncyBSb290SW5saW5lQm94LCBhbmQgbmV4dEJveCBpcyB0aGUgbmV4dCBs
b2dpY2FsIGJveCBpbiB0aGUgc2FtZSBsaW5lLgotICAgIHNpemVfdCBuZXh0Qm94SW5kZXggPSAw
OwotICAgIGlmIChib3gpCi0gICAgICAgIG5leHRCb3hJbmRleCA9IGJveEluZGV4SW5WZWN0b3Io
Ym94LCBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcikgKyAxOwotCi0gICAgZm9yIChzaXplX3QgaSA9
IG5leHRCb3hJbmRleDsgaSA8IGxlYWZCb3hlc0luTG9naWNhbE9yZGVyLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGlmIChsZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcltpXS0+aXNJbmxpbmVUZXh0Qm94
KCkpCi0gICAgICAgICAgICByZXR1cm4gdG9JbmxpbmVUZXh0Qm94KGxlYWZCb3hlc0luTG9naWNh
bE9yZGVyW2ldKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IElu
bGluZVRleHRCb3gqIGxvZ2ljYWxseU5leHRCb3goY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNp
YmxlUG9zaXRpb24sIGNvbnN0IElubGluZVRleHRCb3gqIHRleHRCb3gsIGJvb2wmIG5leHRCb3hJ
bkRpZmZlcmVudEJsb2NrKQorc3RhdGljIGNvbnN0IElubGluZVRleHRCb3gqIGxvZ2ljYWxseU5l
eHRCb3goY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIGNvbnN0IElubGlu
ZVRleHRCb3gqIHRleHRCb3gsCisgICAgYm9vbCYgbmV4dEJveEluRGlmZmVyZW50QmxvY2ssIENh
Y2hlZExvZ2ljYWxseU9yZGVyZWRMZWFmQm94ZXMmIGxlYWZCb3hlcykKIHsKICAgICBjb25zdCBJ
bmxpbmVCb3gqIHN0YXJ0Qm94ID0gdGV4dEJveDsKLSAgICBWZWN0b3I8SW5saW5lQm94Kj4gbGVh
ZkJveGVzSW5Mb2dpY2FsT3JkZXI7CiAKLSAgICBjb25zdCBJbmxpbmVUZXh0Qm94KiBuZXh0Qm94
ID0gbmV4dEJveEluTGluZShzdGFydEJveC0+cm9vdCgpLCB0ZXh0Qm94LCBsZWFmQm94ZXNJbkxv
Z2ljYWxPcmRlcik7CisgICAgY29uc3QgSW5saW5lVGV4dEJveCogbmV4dEJveCA9IGxlYWZCb3hl
cy5uZXh0VGV4dEJveChzdGFydEJveC0+cm9vdCgpLCB0ZXh0Qm94KTsKICAgICBpZiAobmV4dEJv
eCkKICAgICAgICAgcmV0dXJuIG5leHRCb3g7CiAKLSAgICBuZXh0Qm94ID0gbmV4dEJveEluTGlu
ZShzdGFydEJveC0+cm9vdCgpLT5uZXh0Um9vdEJveCgpLCAwLCBsZWFmQm94ZXNJbkxvZ2ljYWxP
cmRlcik7CisgICAgbmV4dEJveCA9IGxlYWZCb3hlcy5uZXh0VGV4dEJveChzdGFydEJveC0+cm9v
dCgpLT5uZXh0Um9vdEJveCgpLCAwKTsKICAgICBpZiAobmV4dEJveCkKICAgICAgICAgcmV0dXJu
IG5leHRCb3g7CiAKQEAgLTI2NiwyNiArMjk1LDI2IEBAIHN0YXRpYyBjb25zdCBJbmxpbmVUZXh0
Qm94KiBsb2dpY2FsbHlOZXgKICAgICAgICAgaWYgKCFuZXh0Um9vdCkKICAgICAgICAgICAgIGJy
ZWFrOwogCi0gICAgICAgIG5leHRCb3ggPSBuZXh0Qm94SW5MaW5lKG5leHRSb290LCAwLCBsZWFm
Qm94ZXNJbkxvZ2ljYWxPcmRlcik7CisgICAgICAgIG5leHRCb3ggPSBsZWFmQm94ZXMubmV4dFRl
eHRCb3gobmV4dFJvb3QsIDApOwogICAgICAgICBpZiAobmV4dEJveCkgewogICAgICAgICAgICAg
bmV4dEJveEluRGlmZmVyZW50QmxvY2sgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIG5leHRC
b3g7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIWxlYWZCb3hlc0luTG9naWNhbE9yZGVyLnNp
emUoKSkKKyAgICAgICAgaWYgKCFsZWFmQm94ZXMuc2l6ZSgpKQogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIHN0YXJ0Qm94ID0gbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXJbMF07CisgICAgICAg
IHN0YXJ0Qm94ID0gbGVhZkJveGVzLmZpcnN0Qm94KCk7CiAgICAgfQogICAgIHJldHVybiAwOwog
fQogCiBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yRm9yTWluT2Zm
c2V0Qm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIGNvbnN0
IElubGluZVRleHRCb3gqIHRleHRCb3gsCi0gICAgIGludCYgcHJldmlvdXNCb3hMZW5ndGgsIGJv
b2wmIHByZXZpb3VzQm94SW5EaWZmZXJlbnRCbG9jaywgVmVjdG9yPFVDaGFyLCAxMDI0PiYgc3Ry
aW5nKQorICAgICBpbnQmIHByZXZpb3VzQm94TGVuZ3RoLCBib29sJiBwcmV2aW91c0JveEluRGlm
ZmVyZW50QmxvY2ssIFZlY3RvcjxVQ2hhciwgMTAyND4mIHN0cmluZywgQ2FjaGVkTG9naWNhbGx5
T3JkZXJlZExlYWZCb3hlcyYgbGVhZkJveGVzKQogewogICAgIHByZXZpb3VzQm94SW5EaWZmZXJl
bnRCbG9jayA9IGZhbHNlOwogCiAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGUgY2FzZSB3aGVuIHdl
IGRvbid0IGhhdmUgYW4gaW5saW5lIHRleHQgYm94LgotICAgIGNvbnN0IElubGluZVRleHRCb3gq
IHByZXZpb3VzQm94ID0gbG9naWNhbGx5UHJldmlvdXNCb3godmlzaWJsZVBvc2l0aW9uLCB0ZXh0
Qm94LCBwcmV2aW91c0JveEluRGlmZmVyZW50QmxvY2spOworICAgIGNvbnN0IElubGluZVRleHRC
b3gqIHByZXZpb3VzQm94ID0gbG9naWNhbGx5UHJldmlvdXNCb3godmlzaWJsZVBvc2l0aW9uLCB0
ZXh0Qm94LCBwcmV2aW91c0JveEluRGlmZmVyZW50QmxvY2ssIGxlYWZCb3hlcyk7CiAKICAgICBp
bnQgbGVuID0gMDsKICAgICBzdHJpbmcuY2xlYXIoKTsKQEAgLTMwMSwxMiArMzMwLDEyIEBAIHN0
YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmEKIH0gCiAKIHN0YXRpYyBUZXh0
QnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmF0b3JGb3JNYXhPZmZzZXRCb3VuZGFyeShjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbiwgY29uc3QgSW5saW5lVGV4dEJveCog
dGV4dEJveCwKLSAgICBib29sJiBuZXh0Qm94SW5EaWZmZXJlbnRCbG9jaywgVmVjdG9yPFVDaGFy
LCAxMDI0PiYgc3RyaW5nKQorICAgIGJvb2wmIG5leHRCb3hJbkRpZmZlcmVudEJsb2NrLCBWZWN0
b3I8VUNoYXIsIDEwMjQ+JiBzdHJpbmcsIENhY2hlZExvZ2ljYWxseU9yZGVyZWRMZWFmQm94ZXMm
IGxlYWZCb3hlcykKIHsKICAgICBuZXh0Qm94SW5EaWZmZXJlbnRCbG9jayA9IGZhbHNlOwogCiAg
ICAgLy8gRklYTUU6IEhhbmRsZSB0aGUgY2FzZSB3aGVuIHdlIGRvbid0IGhhdmUgYW4gaW5saW5l
IHRleHQgYm94LgotICAgIGNvbnN0IElubGluZVRleHRCb3gqIG5leHRCb3ggPSBsb2dpY2FsbHlO
ZXh0Qm94KHZpc2libGVQb3NpdGlvbiwgdGV4dEJveCwgbmV4dEJveEluRGlmZmVyZW50QmxvY2sp
OworICAgIGNvbnN0IElubGluZVRleHRCb3gqIG5leHRCb3ggPSBsb2dpY2FsbHlOZXh0Qm94KHZp
c2libGVQb3NpdGlvbiwgdGV4dEJveCwgbmV4dEJveEluRGlmZmVyZW50QmxvY2ssIGxlYWZCb3hl
cyk7CiAKICAgICBpbnQgbGVuID0gMDsKICAgICBzdHJpbmcuY2xlYXIoKTsKQEAgLTM0OSw2ICsz
NzgsOSBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc3VhbFdvcmRQb3NpdGlvCiAgICAgVmlz
aWJsZVBvc2l0aW9uIGN1cnJlbnQgPSB2aXNpYmxlUG9zaXRpb247CiAgICAgVGV4dEJyZWFrSXRl
cmF0b3IqIGl0ZXIgPSAwOwogCisgICAgQ2FjaGVkTG9naWNhbGx5T3JkZXJlZExlYWZCb3hlcyBs
ZWFmQm94ZXM7CisgICAgVmVjdG9yPFVDaGFyLCAxMDI0PiBzdHJpbmc7CisKICAgICB3aGlsZSAo
MSkgewogICAgICAgICBWaXNpYmxlUG9zaXRpb24gYWRqYWNlbnRDaGFyYWN0ZXJQb3NpdGlvbiA9
IGRpcmVjdGlvbiA9PSBNb3ZlUmlnaHQgPyBjdXJyZW50LnJpZ2h0KHRydWUpIDogY3VycmVudC5s
ZWZ0KHRydWUpOyAKICAgICAgICAgaWYgKGFkamFjZW50Q2hhcmFjdGVyUG9zaXRpb24gPT0gY3Vy
cmVudCB8fCBhZGphY2VudENoYXJhY3RlclBvc2l0aW9uLmlzTnVsbCgpKQpAQCAtMzcxLDExICs0
MDMsMTAgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiB2aXN1YWxXb3JkUG9zaXRpbwogICAgICAg
ICBib29sIG5leHRCb3hJbkRpZmZlcmVudEJsb2NrID0gZmFsc2U7CiAgICAgICAgIGJvb2wgbW92
aW5nSW50b05ld0JveCA9IHByZXZpb3VzbHlWaXNpdGVkQm94ICE9IGJveDsKIAotICAgICAgICBW
ZWN0b3I8VUNoYXIsIDEwMjQ+IHN0cmluZzsKICAgICAgICAgaWYgKG9mZnNldEluQm94ID09IGJv
eC0+Y2FyZXRNaW5PZmZzZXQoKSkKLSAgICAgICAgICAgIGl0ZXIgPSB3b3JkQnJlYWtJdGVyYXRv
ckZvck1pbk9mZnNldEJvdW5kYXJ5KHZpc2libGVQb3NpdGlvbiwgdGV4dEJveCwgcHJldmlvdXNC
b3hMZW5ndGgsIHByZXZpb3VzQm94SW5EaWZmZXJlbnRCbG9jaywgc3RyaW5nKTsKKyAgICAgICAg
ICAgIGl0ZXIgPSB3b3JkQnJlYWtJdGVyYXRvckZvck1pbk9mZnNldEJvdW5kYXJ5KHZpc2libGVQ
b3NpdGlvbiwgdGV4dEJveCwgcHJldmlvdXNCb3hMZW5ndGgsIHByZXZpb3VzQm94SW5EaWZmZXJl
bnRCbG9jaywgc3RyaW5nLCBsZWFmQm94ZXMpOwogICAgICAgICBlbHNlIGlmIChvZmZzZXRJbkJv
eCA9PSBib3gtPmNhcmV0TWF4T2Zmc2V0KCkpCi0gICAgICAgICAgICBpdGVyID0gd29yZEJyZWFr
SXRlcmF0b3JGb3JNYXhPZmZzZXRCb3VuZGFyeSh2aXNpYmxlUG9zaXRpb24sIHRleHRCb3gsIG5l
eHRCb3hJbkRpZmZlcmVudEJsb2NrLCBzdHJpbmcpOworICAgICAgICAgICAgaXRlciA9IHdvcmRC
cmVha0l0ZXJhdG9yRm9yTWF4T2Zmc2V0Qm91bmRhcnkodmlzaWJsZVBvc2l0aW9uLCB0ZXh0Qm94
LCBuZXh0Qm94SW5EaWZmZXJlbnRCbG9jaywgc3RyaW5nLCBsZWFmQm94ZXMpOwogICAgICAgICBl
bHNlIGlmIChtb3ZpbmdJbnRvTmV3Qm94KSB7CiAgICAgICAgICAgICBpdGVyID0gd29yZEJyZWFr
SXRlcmF0b3IodGV4dEJveC0+dGV4dFJlbmRlcmVyKCktPnRleHQoKS0+Y2hhcmFjdGVycygpICsg
dGV4dEJveC0+c3RhcnQoKSwgdGV4dEJveC0+bGVuKCkpOwogICAgICAgICAgICAgcHJldmlvdXNs
eVZpc2l0ZWRCb3ggPSBib3g7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTE2MDUpCisrKyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wMy0y
MSAgWGlhb21laSBKaSAgPHhqaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgdmlzdWFsIHdvcmQg
bW92ZW1lbnQ6IHVzaW5nIGNhY2hlIHRvIGRlY3JlYXNlIHRoZSBudW1iZXIgb2YgY29sbGVjdExl
YWZCb3hlc0luTG9naWNhbE9yZGVyIG9uIFJvb3RJbmxpbmVCb3gKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNDA4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgUnlvc3VrZSBOaXdhLgorCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13
b3JkLXZpc3VhbGx5LXNpbmdsZS1zcGFjZS1vbmUtZWxlbWVudC1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LXNpbmdsZS1zcGFj
ZS1vbmUtZWxlbWVudC5odG1sOgorICAgICAgICAgIEFkZCBhIHRlc3QgY2FzZSB0aGF0IGEgd29y
ZCBpcyBzcHJlYWRpbmcgYWNyb3NzIG11bHRpcGxlIGlubGluZSBib3hlcy4KKwogMjAxMi0wMy0y
MSAgU3RlcGhlbiBDaGVubmV5ICA8c2NoZW5uZXlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFNW
RyBsYXlvdXQgbGVhdmVzIG9iamVjdHMgc3RpbGwgbmVlZGluZyBsYXlvdXQKSW5kZXg6IExheW91
dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1zaW5nbGUtc3Bh
Y2Utb25lLWVsZW1lbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Vk
aXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1zaW5nbGUtc3BhY2Utb25lLWVs
ZW1lbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxMTE2MDEpCisrKyBMYXlvdXRUZXN0cy9lZGl0
aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktc2luZ2xlLXNwYWNlLW9uZS1lbGVt
ZW50LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMTEgQEAgTW92ZSBs
ZWZ0IGJ5IG9uZSB3b3JkCiAiIG9wcSByc3QgIls4LCA1LCAxXSwgImFiYyBkZWYgaGlqICJbOCwg
NCwgMF0KIFRlc3QgMTksIExUUjoKIE1vdmUgcmlnaHQgYnkgb25lIHdvcmQKKyJhYmMgZGVmIHRo
aXMiWzAsIDQsIDhdLCAiZW5kIG9wcSByc3QgIls0LCA4LCAxMV0KK01vdmUgbGVmdCBieSBvbmUg
d29yZAorImVuZCBvcHEgcnN0ICJbMTEsIDgsIDRdLCAiYWJjIGRlZiB0aGlzIls4LCA0LCAwXQor
VGVzdCAyMCwgTFRSOgorTW92ZSByaWdodCBieSBvbmUgd29yZAogPERJVj5bMF0KIE1vdmUgbGVm
dCBieSBvbmUgd29yZAogPERJVj5bMF0KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0
aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1zaW5nbGUtc3BhY2Utb25lLWVsZW1lbnQuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQt
dmlzdWFsbHktc2luZ2xlLXNwYWNlLW9uZS1lbGVtZW50Lmh0bWwJKHJldmlzaW9uIDExMTYwMSkK
KysrIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1z
aW5nbGUtc3BhY2Utb25lLWVsZW1lbnQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEs
OCBAQCB3aGVyZSBjaGlsZF9ub2RlX2luZGV4IGlzIG9wdGlvbmFsLCBkZWZhCiA8IS0tIFRlc3Qg
d2l0aCBpbWFnZSAtLSBub24taW5saW5lLXRleHQtYm94IC0tPgogPGRpdiBpZD0iZF8xIiBkaXI9
bHRyIGNsYXNzPSJ0ZXN0X21vdmVfYnlfd29yZCIgY29udGVudGVkaXRhYmxlIHRpdGxlPSJbZF8x
LCAwLCAxXVtkXzEsIDQsIDFdW2RfMSwgOCwgMV1bZF8xLCAxLCAzXVtkXzEsIDUsIDNdW2RfMSwg
OCwgM118W2RfMSwgOCwgM11bZF8xLCA1LCAzXVtkXzEsIDEsIDNdW2RfMSwgOCwgMV1bZF8xLCA0
LCAxXVtkXzEsIDAsIDFdIj5hYmMgZGVmIGhpaiA8aW1nIHNyYz0uLi8uLi9hY2Nlc3NpYmlsaXR5
L3Jlc291cmNlcy9jYWtlLnBuZz4gb3BxIHJzdCA8L2Rpdj4KIAorPGRpdiBpZD0iZF8yIiBkaXI9
bHRyIGNsYXNzPSJ0ZXN0X21vdmVfYnlfd29yZCIgY29udGVudGVkaXRhYmxlIHRpdGxlPSJbZF8y
LCAwLCAxXVtkXzIsIDQsIDFdW2RfMiwgOCwgMV1bZF8yLCA0LCA1XVtkXzIsIDgsIDVdW2RfMiwg
MTEsIDVdfFtkXzIsIDExLCA1XVtkXzIsIDgsIDVdW2RfMiwgNCwgNV1bZF8yLCA4LCAxXVtkXzIs
IDQsIDFdW2RfMiwgMCwgMV0iPmFiYyBkZWYgdGhpczxzcGFuPmlzPC9zcGFuPjxzcGFuPm9uZTwv
c3Bhbj48c3Bhbj53b3JkPC9zcGFuPmVuZCBvcHEgcnN0IDwvZGl2PgorCiA8IS0tIGVtcHR5IGRp
diAtLT4KIDxkaXYgZGlyPWx0ciBjbGFzcz0idGVzdF9tb3ZlX2J5X3dvcmQiIHRpdGxlPSIwfDAi
IGNvbnRlbnRlZGl0YWJsZT48L2Rpdj4KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>