<?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>63605</bug_id>
          
          <creation_ts>2011-06-28 22:06:34 -0700</creation_ts>
          <short_desc>DFG JIT does not perform get_by_id self list caching</short_desc>
          <delta_ts>2011-06-29 12:46:46 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>429423</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-06-28 22:06:34 -0700</bug_when>
    <thetext>The main JSC JIT performs polymorphic get_by_id caching by creating a sequence of structure tests and accesses.  The DFG JIT does not do this, but should.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429434</commentid>
    <comment_count>1</comment_count>
      <attachid>99041</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-06-28 22:42:05 -0700</bug_when>
    <thetext>Created attachment 99041
the patch

This patch leads to a speed-up (versus unpatched DFG) on both sunspider and v8.  It does, however, increase the size of StructureStubInfo by two words, due to the need to save data through two state transitions (unset -&gt; get_by_id -&gt; get_by_id self list).  This could be optimized somewhat, but I thought I&apos;d save it for a later patch after we take care of other forms of get/put_by_id optimizations and see what their StructureStubInfo requirements are.


TEST                   COMPARISON            FROM                 TO             DETAILS

=============================================================================

** TOTAL **:           1.023x as fast    188.1ms +/- 0.4%   183.9ms +/- 0.4%     significant

=============================================================================

  3d:                  1.027x as fast     34.2ms +/- 0.8%    33.3ms +/- 0.7%     significant
    cube:              -                   9.0ms +/- 0.6%     9.0ms +/- 0.4% 
    morph:             1.036x as fast      7.5ms +/- 1.9%     7.3ms +/- 1.8%     significant
    raytrace:          1.036x as fast     17.6ms +/- 1.0%    17.0ms +/- 1.2%     significant

  access:              ??                 21.2ms +/- 0.8%    21.3ms +/- 0.8%     not conclusive: might be *1.004x as slow*
    binary-trees:      ??                  2.2ms +/- 5.4%     2.3ms +/- 5.7%     not conclusive: might be *1.027x as slow*
    fannkuch:          ??                 11.0ms +/- 0.9%    11.0ms +/- 0.8%     not conclusive: might be *1.002x as slow*
    nbody:             -                   6.0ms +/- 0.0%     6.0ms +/- 0.0% 
    nsieve:            -                   2.0ms +/- 0.0%     2.0ms +/- 0.0% 

  bitops:              -                  12.0ms +/- 0.0%    12.0ms +/- 0.0% 
    3bit-bits-in-byte: -                   1.0ms +/- 0.0%     1.0ms +/- 0.0% 
    bits-in-byte:      -                   3.0ms +/- 0.0%     3.0ms +/- 0.0% 
    bitwise-and:       -                   3.0ms +/- 0.0%     3.0ms +/- 0.0% 
    nsieve-bits:       -                   5.0ms +/- 0.0%     5.0ms +/- 0.0% 

  controlflow:         -                   1.7ms +/- 7.7%     1.7ms +/- 7.7% 
    recursive:         -                   1.7ms +/- 7.7%     1.7ms +/- 7.7% 

  crypto:              ??                 10.1ms +/- 1.9%    10.2ms +/- 2.1%     not conclusive: might be *1.012x as slow*
    aes:               -                   6.7ms +/- 1.9%     6.6ms +/- 2.1% 
    md5:               -                   2.0ms +/- 0.0%     2.0ms +/- 0.0% 
    sha1:              *1.159x as slow*    1.4ms +/- 10.1%     1.6ms +/- 8.8%     significant

  date:                1.125x as fast     26.1ms +/- 0.6%    23.2ms +/- 0.8%     significant
    format-tofte:      1.199x as fast     17.0ms +/- 0.7%    14.2ms +/- 0.8%     significant
    format-xparb:      -                   9.1ms +/- 1.0%     9.0ms +/- 1.3% 

  math:                -                  16.9ms +/- 0.5%    16.8ms +/- 0.9% 
    cordic:            1.028x as fast      5.9ms +/- 1.3%     5.8ms +/- 2.1%     significant
    partial-sums:      -                   7.0ms +/- 0.0%     7.0ms +/- 0.8% 
    spectral-norm:     ??                  4.0ms +/- 0.0%     4.0ms +/- 1.0%     not conclusive: might be *1.005x as slow*

  regexp:              -                  10.1ms +/- 0.8%    10.0ms +/- 0.4% 
    dna:               -                  10.1ms +/- 0.8%    10.0ms +/- 0.4% 

  string:              -                  55.7ms +/- 0.9%    55.3ms +/- 0.6% 
    base64:            -                   6.0ms +/- 0.9%     6.0ms +/- 0.0% 
    fasta:             -                   7.8ms +/- 1.9%     7.8ms +/- 1.7% 
    tagcloud:          -                  13.6ms +/- 1.5%    13.4ms +/- 1.1% 
    unpack-code:       -                  21.3ms +/- 1.2%    21.2ms +/- 0.9% 
    validate-input:    -                   7.0ms +/- 1.4%     6.9ms +/- 1.2% 



TEST              COMPARISON            FROM                 TO             DETAILS

=============================================================================

** TOTAL **:      1.045x as fast    1236.5ms +/- 1.0%   1183.1ms +/- 0.6%     significant

=============================================================================

  v8:             1.045x as fast    1236.5ms +/- 1.0%   1183.1ms +/- 0.6%     significant
    crypto:       ??                  91.5ms +/- 1.6%     92.3ms +/- 1.0%     not conclusive: might be *1.009x as slow*
    deltablue:    1.20x as fast      325.0ms +/- 1.3%    270.3ms +/- 1.2%     significant
    earley-boyer: *1.020x as slow*   147.1ms +/- 1.5%    150.1ms +/- 1.5%     significant
    raytrace:     ??                  99.8ms +/- 0.8%    100.4ms +/- 1.1%     not conclusive: might be *1.006x as slow*
    regexp:       -                  117.7ms +/- 1.3%    117.4ms +/- 1.9% 
    richards:     -                  248.2ms +/- 1.0%    247.0ms +/- 0.9% 
    splay:        -                  207.2ms +/- 2.5%    205.6ms +/- 1.4%</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429435</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-28 22:45:58 -0700</bug_when>
    <thetext>Attachment 99041 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGRepatch.cpp:204:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429436</commentid>
    <comment_count>3</comment_count>
      <attachid>99042</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-06-28 22:50:48 -0700</bug_when>
    <thetext>Created attachment 99042
the patch (fix style)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429443</commentid>
    <comment_count>4</comment_count>
      <attachid>99042</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-06-28 23:21:00 -0700</bug_when>
    <thetext>Comment on attachment 99042
the patch (fix style)

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

Looks great! r- to consider the one comment about memory usage.

&gt; Source/JavaScriptCore/bytecode/StructureStubInfo.h:132
&gt; +        

I think we should probably look at trying to wrap these fields in an #if ENABLE(DFG_JIT).  These are only used if the DFG_JIT is enabled, and it seems unfortunate to increase the size of this object on platforms like ARM.  (We may want to later look at whether we can claw this space back, but if we can make these fields ENABLE(DFG_JIT) I don&apos;t think we need to be worried about this for now).

Also, along with accessType &amp; seen (above) the size of this set of fields is 9 bytes, which to align the struct below will probably pad out to 16 bytes.  Probably worth changing accessType &amp; seen to be uint8_t&apos;s too, that way all 7 fields should probably pack out to 8 bytes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429736</commentid>
    <comment_count>5</comment_count>
      <attachid>99115</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-06-29 11:16:00 -0700</bug_when>
    <thetext>Created attachment 99115
the patch (fix review)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429796</commentid>
    <comment_count>6</comment_count>
      <attachid>99115</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-29 12:46:41 -0700</bug_when>
    <thetext>Comment on attachment 99115
the patch (fix review)

Clearing flags on attachment: 99115

Committed r90035: &lt;http://trac.webkit.org/changeset/90035&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429797</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-29 12:46:46 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99041</attachid>
            <date>2011-06-28 22:42:05 -0700</date>
            <delta_ts>2011-06-28 22:50:48 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>selflist_patch_1.diff</filename>
            <type>text/plain</type>
            <size>13283</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODk5ODcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTEtMDYtMjggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBERkcgSklUIGRvZXMgbm90IHBl
cmZvcm0gZ2V0X2J5X2lkIHNlbGYgbGlzdCBjYWNoaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM2MDUKKworICAgICAgICAqIGJ5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAg
KiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoK
KyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2Fj
aGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpkZmdCdWlsZEdldEJ5SURMaXN0KToKKyAgICAgICAgKiBkZmcvREZH
UmVwYXRjaC5oOgorCiAyMDExLTA2LTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2F2aW4gQmFycmFjbG91Z2guCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2
aXNpb24gODk5ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDE2ICsxMjksMTcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgc2lnbmVkIGFjY2Vzc1R5cGUgOiAzMTsKICAgICAgICAgdW5zaWdu
ZWQgc2VlbiA6IDE7CisgICAgICAgIAorICAgICAgICBpbnQ4X3QgYmFzZUdQUjsKKyAgICAgICAg
aW50OF90IHZhbHVlR1BSOworICAgICAgICBpbnQ4X3QgZGVsdGFDYWxsVG9Eb25lOworICAgICAg
ICBpbnQ4X3QgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjazsKKyAgICAgICAgaW50OF90IGRlbHRhQ2Fs
bFRvU2xvd0Nhc2U7CiAKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgc3RydWN0IHsKICAg
ICAgICAgICAgICAgICBpbnQ4X3QgZGVsdGFDaGVja0ltbVRvQ2FsbDsKLSAgICAgICAgICAgICAg
ICBpbnQ4X3QgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjazsKICAgICAgICAgICAgICAgICBpbnQ4X3Qg
ZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZTsKLSAgICAgICAgICAgICAgICBpbnQ4X3QgZGVsdGFDYWxs
VG9TbG93Q2FzZTsKLSAgICAgICAgICAgICAgICBpbnQ4X3QgZGVsdGFDYWxsVG9Eb25lOwotICAg
ICAgICAgICAgICAgIGludDhfdCBiYXNlR1BSOwotICAgICAgICAgICAgICAgIGludDhfdCB2YWx1
ZUdQUjsKICAgICAgICAgICAgICAgICBpbnQ4X3Qgc2NyYXRjaEdQUjsKICAgICAgICAgICAgIH0g
dW5zZXQ7CiAgICAgICAgICAgICBzdHJ1Y3QgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDg5OTg3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4
OCwxMiArMzg4LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbihKSVRDb2QK
ICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+c3RydWN0dXJl
U3R1YkluZm8oaSk7CiAgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2Z1bmN0aW9uQ2FsbCk7CiAgICAg
ICAgIGluZm8udS51bnNldC5kZWx0YUNoZWNrSW1tVG9DYWxsID0gbV9wcm9wZXJ0eUFjY2Vzc2Vz
W2ldLm1fZGVsdGFDaGVja0ltbVRvQ2FsbDsKLSAgICAgICAgaW5mby51LnVuc2V0LmRlbHRhQ2Fs
bFRvU3RydWN0Q2hlY2sgPSBtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb1N0cnVj
dENoZWNrOworICAgICAgICBpbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2sgPSBtX3Byb3BlcnR5
QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb1N0cnVjdENoZWNrOwogICAgICAgICBpbmZvLnUudW5z
ZXQuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRh
Q2FsbFRvTG9hZE9yU3RvcmU7Ci0gICAgICAgIGluZm8udS51bnNldC5kZWx0YUNhbGxUb1Nsb3dD
YXNlID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZGVsdGFDYWxsVG9TbG93Q2FzZTsKLSAgICAg
ICAgaW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvRG9uZSA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5t
X2RlbHRhQ2FsbFRvRG9uZTsKLSAgICAgICAgaW5mby51LnVuc2V0LmJhc2VHUFIgPSBtX3Byb3Bl
cnR5QWNjZXNzZXNbaV0ubV9iYXNlR1BSOwotICAgICAgICBpbmZvLnUudW5zZXQudmFsdWVHUFIg
PSBtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV92YWx1ZUdQUjsKKyAgICAgICAgaW5mby5kZWx0YUNh
bGxUb1Nsb3dDYXNlID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZGVsdGFDYWxsVG9TbG93Q2Fz
ZTsKKyAgICAgICAgaW5mby5kZWx0YUNhbGxUb0RvbmUgPSBtX3Byb3BlcnR5QWNjZXNzZXNbaV0u
bV9kZWx0YUNhbGxUb0RvbmU7CisgICAgICAgIGluZm8uYmFzZUdQUiA9IG1fcHJvcGVydHlBY2Nl
c3Nlc1tpXS5tX2Jhc2VHUFI7CisgICAgICAgIGluZm8udmFsdWVHUFIgPSBtX3Byb3BlcnR5QWNj
ZXNzZXNbaV0ubV92YWx1ZUdQUjsKICAgICAgICAgaW5mby51LnVuc2V0LnNjcmF0Y2hHUFIgPSBt
X3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9zY3JhdGNoR1BSOwogICAgIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiA4OTk4NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0NCw2ICsyNDQsMjAgQEAgRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplVwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAorRW5j
b2RlZEpTVmFsdWUgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBJZGVudGlmaWVyKiwgUmV0dXJuQWRkcmVzc1B0cik7
CitGVU5DVElPTl9XUkFQUEVSX1dJVEhfQVJHNF9SRVRVUk5fQUREUkVTUyhvcGVyYXRpb25HZXRC
eUlkQnVpbGRMaXN0KTsKK0VuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3RX
aXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcykKK3sKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
QmFzZSk7CisgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywgKnByb3BlcnR5TmFtZSwgc2xvdCk7CisKKyAgICBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1Yklu
Zm8ocmV0dXJuQWRkcmVzcyk7CisgICAgZGZnQnVpbGRHZXRCeUlETGlzdChleGVjLCBiYXNlVmFs
dWUsICpwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvKTsKKworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKK30KKwogdm9pZCBvcGVyYXRpb25QdXRCeVZhbFN0cmljdChFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBvcGVy
YXRpb25QdXRCeVZhbEludGVybmFsPHRydWU+KGV4ZWMsIGVuY29kZWRCYXNlLCBlbmNvZGVkUHJv
cGVydHksIGVuY29kZWRWYWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuaAkocmV2aXNpb24gODk5ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBvcGVyYXRpb25Bcml0aERpdihFbmNvZGVkCiBFbmNvZGVkSlNWYWx1ZSBvcGVy
YXRpb25Bcml0aE1vZChFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AyKTsKIEVuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkdldEJ5VmFsKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVy
dHkpOwogRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uR2V0QnlJZChFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciopOworRW5jb2RlZEpTVmFsdWUgb3BlcmF0
aW9uR2V0QnlJZEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZSwgSWRlbnRpZmllciopOwogRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBJZGVudGlmaWVyKik7CiB2
b2lkIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSk7CiB2b2lkIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0KEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJv
cGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDg5OTg3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsOCAr
NjQsOCBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICAKICAgICBp
ZiAoaXNKU0FycmF5KGdsb2JhbERhdGEsIGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBz
dGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnUudW5zZXQuYmFzZUdQUik7Ci0gICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnUudW5zZXQudmFs
dWVHUFIpOworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1
YkluZm8uYmFzZUdQUik7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxH
UFJSZWc+KHN0dWJJbmZvLnZhbHVlR1BSKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
dGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnUudW5zZXQuc2NyYXRjaEdQUik7CiAgICAgICAg
IGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKICAgICAgICAgCkBAIC0xMDQsOSAr
MTA0LDkgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAg
ICAKICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQs
IGNvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CiAgICAgICAgIAotICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8udS51bnNldC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKKyAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbiA9IHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwogICAg
ICAgICAKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvRG9u
ZSkpOworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9uZSkpOwogICAg
ICAgICAKICAgICAgICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKQogICAgICAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhmYWlsLCBzbG93Q2FzZUJlZ2luKTsKQEAgLTEyMSw3ICsxMjEsNyBAQCBz
dGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgIAogICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbCBob3RQYXRoQmVnaW4gPSBzdHViSW5mby5ob3RQYXRoQmVnaW47
CiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KHN0dWJJbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIGVudHJ5TGFi
ZWwpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBlbnRy
eUxhYmVsKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtMTQ0LDExICsxNDQsMTEgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4
ZWNTdGF0ZSogZQogICAgICAgICBpZiAoKHNsb3QuY2FjaGVkUHJvcGVydHlUeXBlKCkgIT0gUHJv
cGVydHlTbG90OjpWYWx1ZSkgfHwgKChzbG90LmNhY2hlZE9mZnNldCgpICogc2l6ZW9mKEpTVmFs
dWUpKSA+ICh1bnNpZ25lZClNYWNyb0Fzc2VtYmxlcjo6TWF4aW11bUNvbXBhY3RQdHJBbGlnbmVk
QWRkcmVzc09mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgZGZn
UmVwYXRjaEJ5SWRTZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSwgb3BlcmF0aW9uR2V0QnlJZCwgdHJ1ZSk7CisgICAgICAgIGRmZ1Jl
cGF0Y2hCeUlkU2VsZkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCksIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QsIHRydWUpOwogICAgICAg
ICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGYoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLQor
ICAgIAogICAgIC8vIEZJWE1FOiBzaG91bGQgc3VwcG9ydCBwcm90b3R5cGUgJiBjaGFpbiBhY2Nl
c3NlcyEKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xNjAsNiArMTYwLDg0IEBAIHZvaWQgZGZn
UmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCAKICAgICAgICAgZGZnUmVwYXRjaENhbGwo
ZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9u
R2V0QnlJZCk7CiB9CiAKK3N0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmICgh
YmFzZVZhbHVlLmlzQ2VsbCgpCisgICAgICAgIHx8ICFzbG90LmlzQ2FjaGVhYmxlKCkKKyAgICAg
ICAgfHwgYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+aXNVbmNhY2hlYWJsZURpY3Rp
b25hcnkoKQorICAgICAgICB8fCBzbG90LnNsb3RCYXNlKCkgIT0gYmFzZVZhbHVlCisgICAgICAg
IHx8IHNsb3QuY2FjaGVkUHJvcGVydHlUeXBlKCkgIT0gUHJvcGVydHlTbG90OjpWYWx1ZQorICAg
ICAgICB8fCAoc2xvdC5jYWNoZWRPZmZzZXQoKSAqIHNpemVvZihKU1ZhbHVlKSkgPiAodW5zaWdu
ZWQpTWFjcm9Bc3NlbWJsZXI6Ok1heGltdW1Db21wYWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXND
ZWxsKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7
CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAg
ICAKKyAgICBBU1NFUlQoc2xvdC5zbG90QmFzZSgpLmlzT2JqZWN0KCkpOworICAgIAorICAgIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0Owor
ICAgIGludCBsaXN0SW5kZXggPSAxOworICAgIAorICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBl
ID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZikgeworICAgICAgICBBU1NFUlQoIXN0dWJJbmZvLnN0
dWJSb3V0aW5lKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1
YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSksIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9i
amVjdFN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxp
c3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxKTsKKyAgICB9IGVsc2UgeworICAgICAgICBw
b2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1
Y3R1cmVMaXN0OworICAgICAgICBsaXN0SW5kZXggPSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlz
dC5saXN0U2l6ZTsKKyAgICB9CisgICAgCisgICAgaWYgKGxpc3RJbmRleCA8IFBPTFlNT1JQSElD
X0xJU1RfQ0FDSEVfU0laRSkgeworICAgICAgICBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5s
aXN0U2l6ZSsrOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2Fz
dDxHUFJSZWc+KHN0dWJJbmZvLmJhc2VHUFIpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
c3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby52YWx1ZUdQUik7CisgICAgICAgIAorICAgICAg
ICBNYWNyb0Fzc2VtYmxlciBzdHViSml0OworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgd3JvbmdTdHJ1Y3QgPSBzdHViSml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzVXNpbmdJbmxpbmVTdG9yYWdlKCkp
IHsKKyAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBzbG90LmNhY2hlZE9m
ZnNldCgpICogc2l6ZW9mKEpTVmFsdWUpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0
R1BSLCBzbG90LmNhY2hlZE9mZnNldCgpICogc2l6ZW9mKEpTVmFsdWUpKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2Vz
cyA9IHN0dWJKaXQuanVtcCgpOworICAgICAgICAKKyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQsIGNvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7
CisgICAgICAgIAorICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHBv
bHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZTsK
KyAgICAgICAgQVNTRVJUKCEhbGFzdFByb3RvQmVnaW4pOworICAgICAgICAKKyAgICAgICAgcGF0
Y2hCdWZmZXIubGluayh3cm9uZ1N0cnVjdCwgbGFzdFByb3RvQmVnaW4pOworICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9uZSkpOworICAgICAgICAKKyAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVu
ZHVtKCk7CisgICAgICAgIAorICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3Rb
bGlzdEluZGV4XS5zZXQoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IGVudHJ5TGFiZWwsIHN0cnVjdHVyZSk7CisgICAgICAgIAorICAgICAgICBDb2RlTG9jYXRpb25K
dW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZz
ZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayk7CisgICAgICAgIFJlcGF0Y2hCdWZm
ZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgICAgICAKKyAgICAgICAgaWYgKGxpc3RJ
bmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgZGZn
QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGJvb2wgZG9udENoYW5nZUNhbGwgPSB0
cnlCdWlsZEdldEJ5SURMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBz
dHViSW5mbyk7CisgICAgaWYgKCFkb250Q2hhbmdlQ2FsbCkKKyAgICAgICAgZGZnUmVwYXRjaENh
bGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0
aW9uR2V0QnlJZCk7Cit9CisKIHN0YXRpYyBWX0RGR09wZXJhdGlvbl9FSkpJIGFwcHJvcHJpYXRl
UHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0S2luZCBwdXRL
aW5kKQogewogICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkocmV2aXNpb24gODk5ODcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
NyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIGRmZ1JlcGF0Y2hH
ZXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCBkZmdCdWlsZEdldEJ5SURMaXN0
KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCBkZmdSZXBhdGNoUHV0QnlJRChFeGVjU3Rh
dGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90Jiwg
U3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
Rwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99042</attachid>
            <date>2011-06-28 22:50:48 -0700</date>
            <delta_ts>2011-06-29 11:16:00 -0700</delta_ts>
            <desc>the patch (fix style)</desc>
            <filename>selflist_patch_2.diff</filename>
            <type>text/plain</type>
            <size>13279</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODk5ODcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTEtMDYtMjggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBERkcgSklUIGRvZXMgbm90IHBl
cmZvcm0gZ2V0X2J5X2lkIHNlbGYgbGlzdCBjYWNoaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM2MDUKKworICAgICAgICAqIGJ5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAg
KiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoK
KyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2Fj
aGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpkZmdCdWlsZEdldEJ5SURMaXN0KToKKyAgICAgICAgKiBkZmcvREZH
UmVwYXRjaC5oOgorCiAyMDExLTA2LTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2F2aW4gQmFycmFjbG91Z2guCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2
aXNpb24gODk5ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDE2ICsxMjksMTcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgc2lnbmVkIGFjY2Vzc1R5cGUgOiAzMTsKICAgICAgICAgdW5zaWdu
ZWQgc2VlbiA6IDE7CisgICAgICAgIAorICAgICAgICBpbnQ4X3QgYmFzZUdQUjsKKyAgICAgICAg
aW50OF90IHZhbHVlR1BSOworICAgICAgICBpbnQ4X3QgZGVsdGFDYWxsVG9Eb25lOworICAgICAg
ICBpbnQ4X3QgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjazsKKyAgICAgICAgaW50OF90IGRlbHRhQ2Fs
bFRvU2xvd0Nhc2U7CiAKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgc3RydWN0IHsKICAg
ICAgICAgICAgICAgICBpbnQ4X3QgZGVsdGFDaGVja0ltbVRvQ2FsbDsKLSAgICAgICAgICAgICAg
ICBpbnQ4X3QgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjazsKICAgICAgICAgICAgICAgICBpbnQ4X3Qg
ZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZTsKLSAgICAgICAgICAgICAgICBpbnQ4X3QgZGVsdGFDYWxs
VG9TbG93Q2FzZTsKLSAgICAgICAgICAgICAgICBpbnQ4X3QgZGVsdGFDYWxsVG9Eb25lOwotICAg
ICAgICAgICAgICAgIGludDhfdCBiYXNlR1BSOwotICAgICAgICAgICAgICAgIGludDhfdCB2YWx1
ZUdQUjsKICAgICAgICAgICAgICAgICBpbnQ4X3Qgc2NyYXRjaEdQUjsKICAgICAgICAgICAgIH0g
dW5zZXQ7CiAgICAgICAgICAgICBzdHJ1Y3QgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDg5OTg3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4
OCwxMiArMzg4LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbihKSVRDb2QK
ICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+c3RydWN0dXJl
U3R1YkluZm8oaSk7CiAgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2Z1bmN0aW9uQ2FsbCk7CiAgICAg
ICAgIGluZm8udS51bnNldC5kZWx0YUNoZWNrSW1tVG9DYWxsID0gbV9wcm9wZXJ0eUFjY2Vzc2Vz
W2ldLm1fZGVsdGFDaGVja0ltbVRvQ2FsbDsKLSAgICAgICAgaW5mby51LnVuc2V0LmRlbHRhQ2Fs
bFRvU3RydWN0Q2hlY2sgPSBtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb1N0cnVj
dENoZWNrOworICAgICAgICBpbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2sgPSBtX3Byb3BlcnR5
QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb1N0cnVjdENoZWNrOwogICAgICAgICBpbmZvLnUudW5z
ZXQuZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRh
Q2FsbFRvTG9hZE9yU3RvcmU7Ci0gICAgICAgIGluZm8udS51bnNldC5kZWx0YUNhbGxUb1Nsb3dD
YXNlID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZGVsdGFDYWxsVG9TbG93Q2FzZTsKLSAgICAg
ICAgaW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvRG9uZSA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5t
X2RlbHRhQ2FsbFRvRG9uZTsKLSAgICAgICAgaW5mby51LnVuc2V0LmJhc2VHUFIgPSBtX3Byb3Bl
cnR5QWNjZXNzZXNbaV0ubV9iYXNlR1BSOwotICAgICAgICBpbmZvLnUudW5zZXQudmFsdWVHUFIg
PSBtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV92YWx1ZUdQUjsKKyAgICAgICAgaW5mby5kZWx0YUNh
bGxUb1Nsb3dDYXNlID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZGVsdGFDYWxsVG9TbG93Q2Fz
ZTsKKyAgICAgICAgaW5mby5kZWx0YUNhbGxUb0RvbmUgPSBtX3Byb3BlcnR5QWNjZXNzZXNbaV0u
bV9kZWx0YUNhbGxUb0RvbmU7CisgICAgICAgIGluZm8uYmFzZUdQUiA9IG1fcHJvcGVydHlBY2Nl
c3Nlc1tpXS5tX2Jhc2VHUFI7CisgICAgICAgIGluZm8udmFsdWVHUFIgPSBtX3Byb3BlcnR5QWNj
ZXNzZXNbaV0ubV92YWx1ZUdQUjsKICAgICAgICAgaW5mby51LnVuc2V0LnNjcmF0Y2hHUFIgPSBt
X3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9zY3JhdGNoR1BSOwogICAgIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiA4OTk4NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0NCw2ICsyNDQsMjAgQEAgRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplVwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAorRW5j
b2RlZEpTVmFsdWUgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBJZGVudGlmaWVyKiwgUmV0dXJuQWRkcmVzc1B0cik7
CitGVU5DVElPTl9XUkFQUEVSX1dJVEhfQVJHNF9SRVRVUk5fQUREUkVTUyhvcGVyYXRpb25HZXRC
eUlkQnVpbGRMaXN0KTsKK0VuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3RX
aXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcykKK3sKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
QmFzZSk7CisgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywgKnByb3BlcnR5TmFtZSwgc2xvdCk7CisKKyAgICBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1Yklu
Zm8ocmV0dXJuQWRkcmVzcyk7CisgICAgZGZnQnVpbGRHZXRCeUlETGlzdChleGVjLCBiYXNlVmFs
dWUsICpwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvKTsKKworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKK30KKwogdm9pZCBvcGVyYXRpb25QdXRCeVZhbFN0cmljdChFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBvcGVy
YXRpb25QdXRCeVZhbEludGVybmFsPHRydWU+KGV4ZWMsIGVuY29kZWRCYXNlLCBlbmNvZGVkUHJv
cGVydHksIGVuY29kZWRWYWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuaAkocmV2aXNpb24gODk5ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBvcGVyYXRpb25Bcml0aERpdihFbmNvZGVkCiBFbmNvZGVkSlNWYWx1ZSBvcGVy
YXRpb25Bcml0aE1vZChFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AyKTsKIEVuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkdldEJ5VmFsKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVy
dHkpOwogRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uR2V0QnlJZChFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciopOworRW5jb2RlZEpTVmFsdWUgb3BlcmF0
aW9uR2V0QnlJZEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZSwgSWRlbnRpZmllciopOwogRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBJZGVudGlmaWVyKik7CiB2
b2lkIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSk7CiB2b2lkIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0KEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJv
cGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDg5OTg3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsOCAr
NjQsOCBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICAKICAgICBp
ZiAoaXNKU0FycmF5KGdsb2JhbERhdGEsIGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBz
dGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnUudW5zZXQuYmFzZUdQUik7Ci0gICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnUudW5zZXQudmFs
dWVHUFIpOworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1
YkluZm8uYmFzZUdQUik7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxH
UFJSZWc+KHN0dWJJbmZvLnZhbHVlR1BSKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
dGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnUudW5zZXQuc2NyYXRjaEdQUik7CiAgICAgICAg
IGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKICAgICAgICAgCkBAIC0xMDQsOSAr
MTA0LDkgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAg
ICAKICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQs
IGNvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CiAgICAgICAgIAotICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8udS51bnNldC5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKKyAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbiA9IHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwogICAg
ICAgICAKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvRG9u
ZSkpOworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9uZSkpOwogICAg
ICAgICAKICAgICAgICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKQogICAgICAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhmYWlsLCBzbG93Q2FzZUJlZ2luKTsKQEAgLTEyMSw3ICsxMjEsNyBAQCBz
dGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgIAogICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbCBob3RQYXRoQmVnaW4gPSBzdHViSW5mby5ob3RQYXRoQmVnaW47
CiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KHN0dWJJbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIGVudHJ5TGFi
ZWwpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBlbnRy
eUxhYmVsKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtMTQ0LDExICsxNDQsMTEgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4
ZWNTdGF0ZSogZQogICAgICAgICBpZiAoKHNsb3QuY2FjaGVkUHJvcGVydHlUeXBlKCkgIT0gUHJv
cGVydHlTbG90OjpWYWx1ZSkgfHwgKChzbG90LmNhY2hlZE9mZnNldCgpICogc2l6ZW9mKEpTVmFs
dWUpKSA+ICh1bnNpZ25lZClNYWNyb0Fzc2VtYmxlcjo6TWF4aW11bUNvbXBhY3RQdHJBbGlnbmVk
QWRkcmVzc09mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgZGZn
UmVwYXRjaEJ5SWRTZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSwgb3BlcmF0aW9uR2V0QnlJZCwgdHJ1ZSk7CisgICAgICAgIGRmZ1Jl
cGF0Y2hCeUlkU2VsZkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCksIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QsIHRydWUpOwogICAgICAg
ICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGYoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLQor
ICAgIAogICAgIC8vIEZJWE1FOiBzaG91bGQgc3VwcG9ydCBwcm90b3R5cGUgJiBjaGFpbiBhY2Nl
c3NlcyEKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xNjAsNiArMTYwLDg0IEBAIHZvaWQgZGZn
UmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCAKICAgICAgICAgZGZnUmVwYXRjaENhbGwo
ZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9u
R2V0QnlJZCk7CiB9CiAKK3N0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmICgh
YmFzZVZhbHVlLmlzQ2VsbCgpCisgICAgICAgIHx8ICFzbG90LmlzQ2FjaGVhYmxlKCkKKyAgICAg
ICAgfHwgYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+aXNVbmNhY2hlYWJsZURpY3Rp
b25hcnkoKQorICAgICAgICB8fCBzbG90LnNsb3RCYXNlKCkgIT0gYmFzZVZhbHVlCisgICAgICAg
IHx8IHNsb3QuY2FjaGVkUHJvcGVydHlUeXBlKCkgIT0gUHJvcGVydHlTbG90OjpWYWx1ZQorICAg
ICAgICB8fCAoc2xvdC5jYWNoZWRPZmZzZXQoKSAqIHNpemVvZihKU1ZhbHVlKSkgPiAodW5zaWdu
ZWQpTWFjcm9Bc3NlbWJsZXI6Ok1heGltdW1Db21wYWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXND
ZWxsKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7
CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAg
ICAKKyAgICBBU1NFUlQoc2xvdC5zbG90QmFzZSgpLmlzT2JqZWN0KCkpOworICAgIAorICAgIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0Owor
ICAgIGludCBsaXN0SW5kZXggPSAxOworICAgIAorICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBl
ID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZikgeworICAgICAgICBBU1NFUlQoIXN0dWJJbmZvLnN0
dWJSb3V0aW5lKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1
YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSksIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9i
amVjdFN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxp
c3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxKTsKKyAgICB9IGVsc2UgeworICAgICAgICBw
b2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1
Y3R1cmVMaXN0OworICAgICAgICBsaXN0SW5kZXggPSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlz
dC5saXN0U2l6ZTsKKyAgICB9CisgICAgCisgICAgaWYgKGxpc3RJbmRleCA8IFBPTFlNT1JQSElD
X0xJU1RfQ0FDSEVfU0laRSkgeworICAgICAgICBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5s
aXN0U2l6ZSsrOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2Fz
dDxHUFJSZWc+KHN0dWJJbmZvLmJhc2VHUFIpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
c3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby52YWx1ZUdQUik7CisgICAgICAgIAorICAgICAg
ICBNYWNyb0Fzc2VtYmxlciBzdHViSml0OworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgd3JvbmdTdHJ1Y3QgPSBzdHViSml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzVXNpbmdJbmxpbmVTdG9yYWdlKCkp
CisgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgc2xvdC5jYWNoZWRPZmZz
ZXQoKSAqIHNpemVvZihKU1ZhbHVlKSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIs
IHNsb3QuY2FjaGVkT2Zmc2V0KCkgKiBzaXplb2YoSlNWYWx1ZSkpLCByZXN1bHRHUFIpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzID0g
c3R1YkppdC5qdW1wKCk7CisgICAgICAgIAorICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCpnbG9iYWxEYXRhLCAmc3R1YkppdCwgY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAg
ICAgICAgCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gcG9seW1v
cnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0aW5lOworICAg
ICAgICBBU1NFUlQoISFsYXN0UHJvdG9CZWdpbik7CisgICAgICAgIAorICAgICAgICBwYXRjaEJ1
ZmZlci5saW5rKHdyb25nU3RydWN0LCBsYXN0UHJvdG9CZWdpbik7CisgICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9Eb25lKSk7CisgICAgICAgIAorICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0o
KTsKKyAgICAgICAgCisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0
SW5kZXhdLnNldCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50
cnlMYWJlbCwgc3RydWN0dXJlKTsKKyAgICAgICAgCisgICAgICAgIENvZGVMb2NhdGlvbkp1bXAg
anVtcExvY2F0aW9uID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChz
dHViSW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKTsKKyAgICAgICAgUmVwYXRjaEJ1ZmZlciBy
ZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1
bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgICAgIAorICAgICAgICBpZiAobGlzdEluZGV4
IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBkZmdCdWls
ZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgYm9vbCBkb250Q2hhbmdlQ2FsbCA9IHRyeUJ1
aWxkR2V0QnlJRExpc3QoZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJ
bmZvKTsKKyAgICBpZiAoIWRvbnRDaGFuZ2VDYWxsKQorICAgICAgICBkZmdSZXBhdGNoQ2FsbChl
eGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25H
ZXRCeUlkKTsKK30KKwogc3RhdGljIFZfREZHT3BlcmF0aW9uX0VKSkkgYXBwcm9wcmlhdGVQdXRC
eUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQp
CiB7CiAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUmVwYXRjaC5oCShyZXZpc2lvbiA4OTk4NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBA
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgZGZnUmVwYXRjaEdldEJ5
SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIGRmZ0J1aWxkR2V0QnlJRExpc3QoRXhl
Y1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYs
IFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIGRmZ1JlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSos
IEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCg==
</data>
<flag name="review"
          id="93436"
          type_id="1"
          status="-"
          setter="barraclough"
    />
    <flag name="commit-queue"
          id="93437"
          type_id="3"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99115</attachid>
            <date>2011-06-29 11:16:00 -0700</date>
            <delta_ts>2011-06-29 12:46:41 -0700</delta_ts>
            <desc>the patch (fix review)</desc>
            <filename>selflist_patch_3.diff</filename>
            <type>text/plain</type>
            <size>13395</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODk5ODcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTEtMDYtMjggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBERkcgSklUIGRvZXMgbm90IHBl
cmZvcm0gZ2V0X2J5X2lkIHNlbGYgbGlzdCBjYWNoaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM2MDUKKworICAgICAgICAqIGJ5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAg
KiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoK
KyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2Fj
aGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpkZmdCdWlsZEdldEJ5SURMaXN0KToKKyAgICAgICAgKiBkZmcvREZH
UmVwYXRjaC5oOgorCiAyMDExLTA2LTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2F2aW4gQmFycmFjbG91Z2guCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2
aXNpb24gODk5ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDE4ICsxMjcsMjEgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICBzZWVuID0gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIHNp
Z25lZCBhY2Nlc3NUeXBlIDogMzE7Ci0gICAgICAgIHVuc2lnbmVkIHNlZW4gOiAxOworICAgICAg
ICBpbnQ4X3QgYWNjZXNzVHlwZTsKKyAgICAgICAgaW50OF90IHNlZW47CisgICAgICAgIAorI2lm
IEVOQUJMRShERkdfSklUKQorICAgICAgICBpbnQ4X3QgYmFzZUdQUjsKKyAgICAgICAgaW50OF90
IHZhbHVlR1BSOworICAgICAgICBpbnQ4X3QgZGVsdGFDYWxsVG9Eb25lOworICAgICAgICBpbnQ4
X3QgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjazsKKyAgICAgICAgaW50OF90IGRlbHRhQ2FsbFRvU2xv
d0Nhc2U7CisjZW5kaWYKIAogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICBzdHJ1Y3Qgewog
ICAgICAgICAgICAgICAgIGludDhfdCBkZWx0YUNoZWNrSW1tVG9DYWxsOwotICAgICAgICAgICAg
ICAgIGludDhfdCBkZWx0YUNhbGxUb1N0cnVjdENoZWNrOwogICAgICAgICAgICAgICAgIGludDhf
dCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlOwotICAgICAgICAgICAgICAgIGludDhfdCBkZWx0YUNh
bGxUb1Nsb3dDYXNlOwotICAgICAgICAgICAgICAgIGludDhfdCBkZWx0YUNhbGxUb0RvbmU7Ci0g
ICAgICAgICAgICAgICAgaW50OF90IGJhc2VHUFI7Ci0gICAgICAgICAgICAgICAgaW50OF90IHZh
bHVlR1BSOwogICAgICAgICAgICAgICAgIGludDhfdCBzY3JhdGNoR1BSOwogICAgICAgICAgICAg
fSB1bnNldDsKICAgICAgICAgICAgIHN0cnVjdCB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gODk5ODcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzg4LDEyICszODgsMTIgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENv
ZAogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5zdHJ1Y3R1
cmVTdHViSW5mbyhpKTsKICAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZnVuY3Rpb25DYWxsKTsKICAg
ICAgICAgaW5mby51LnVuc2V0LmRlbHRhQ2hlY2tJbW1Ub0NhbGwgPSBtX3Byb3BlcnR5QWNjZXNz
ZXNbaV0ubV9kZWx0YUNoZWNrSW1tVG9DYWxsOwotICAgICAgICBpbmZvLnUudW5zZXQuZGVsdGFD
YWxsVG9TdHJ1Y3RDaGVjayA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvU3Ry
dWN0Q2hlY2s7CisgICAgICAgIGluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayA9IG1fcHJvcGVy
dHlBY2Nlc3Nlc1tpXS5tX2RlbHRhQ2FsbFRvU3RydWN0Q2hlY2s7CiAgICAgICAgIGluZm8udS51
bnNldC5kZWx0YUNhbGxUb0xvYWRPclN0b3JlID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fZGVs
dGFDYWxsVG9Mb2FkT3JTdG9yZTsKLSAgICAgICAgaW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvU2xv
d0Nhc2UgPSBtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb1Nsb3dDYXNlOwotICAg
ICAgICBpbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9Eb25lID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ld
Lm1fZGVsdGFDYWxsVG9Eb25lOwotICAgICAgICBpbmZvLnUudW5zZXQuYmFzZUdQUiA9IG1fcHJv
cGVydHlBY2Nlc3Nlc1tpXS5tX2Jhc2VHUFI7Ci0gICAgICAgIGluZm8udS51bnNldC52YWx1ZUdQ
UiA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3ZhbHVlR1BSOworICAgICAgICBpbmZvLmRlbHRh
Q2FsbFRvU2xvd0Nhc2UgPSBtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9kZWx0YUNhbGxUb1Nsb3dD
YXNlOworICAgICAgICBpbmZvLmRlbHRhQ2FsbFRvRG9uZSA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tp
XS5tX2RlbHRhQ2FsbFRvRG9uZTsKKyAgICAgICAgaW5mby5iYXNlR1BSID0gbV9wcm9wZXJ0eUFj
Y2Vzc2VzW2ldLm1fYmFzZUdQUjsKKyAgICAgICAgaW5mby52YWx1ZUdQUiA9IG1fcHJvcGVydHlB
Y2Nlc3Nlc1tpXS5tX3ZhbHVlR1BSOwogICAgICAgICBpbmZvLnUudW5zZXQuc2NyYXRjaEdQUiA9
IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3NjcmF0Y2hHUFI7CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDg5OTg3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQ0LDYgKzI0NCwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemVXCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCitF
bmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0V2l0aFJldHVybkFkZHJlc3Mo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIElkZW50aWZpZXIqLCBSZXR1cm5BZGRyZXNzUHRy
KTsKK0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9BUkc0X1JFVFVSTl9BRERSRVNTKG9wZXJhdGlvbkdl
dEJ5SWRCdWlsZExpc3QpOworRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlz
dFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzKQoreworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRCYXNlKTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCAqcHJvcGVydHlOYW1lLCBzbG90KTsKKworICAg
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHVi
SW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBkZmdCdWlsZEdldEJ5SURMaXN0KGV4ZWMsIGJhc2VW
YWx1ZSwgKnByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8pOworCisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworfQorCiB2b2lkIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0KEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIG9w
ZXJhdGlvblB1dEJ5VmFsSW50ZXJuYWw8dHJ1ZT4oZXhlYywgZW5jb2RlZEJhc2UsIGVuY29kZWRQ
cm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiA4OTk4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw3IEBAIEVu
Y29kZWRKU1ZhbHVlIG9wZXJhdGlvbkFyaXRoRGl2KEVuY29kZWQKIEVuY29kZWRKU1ZhbHVlIG9w
ZXJhdGlvbkFyaXRoTW9kKEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIpOwogRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uR2V0QnlWYWwoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9w
ZXJ0eSk7CiBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25HZXRCeUlkKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBJZGVudGlmaWVyKik7CitFbmNvZGVkSlNWYWx1ZSBvcGVy
YXRpb25HZXRCeUlkQnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlLCBJZGVudGlmaWVyKik7CiBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50aWZpZXIqKTsK
IHZvaWQgb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKTsKIHZvaWQgb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3QoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQ
cm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gODk5ODcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw4
ICs2NCw4IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIAogICAg
IGlmIChpc0pTQXJyYXkoZ2xvYmFsRGF0YSwgYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0g
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9
IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8udS51bnNldC5iYXNlR1BSKTsKLSAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8udS51bnNldC52
YWx1ZUdQUik7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihz
dHViSW5mby5iYXNlR1BSKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHN0YXRpY19jYXN0
PEdQUlJlZz4oc3R1YkluZm8udmFsdWVHUFIpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8udS51bnNldC5zY3JhdGNoR1BSKTsKICAgICAg
ICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOwogICAgICAgICAKQEAgLTEwNCw5
ICsxMDQsOSBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAg
ICAgIAogICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1Ykpp
dCwgY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKICAgICAgICAgCi0gICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4gPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby51LnVuc2V0LmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOworICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luID0gc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSk7CiAg
ICAgICAgIAotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnUudW5zZXQuZGVsdGFDYWxsVG9E
b25lKSk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9Eb25lKSk7CiAg
ICAgICAgIAogICAgICAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpCiAgICAgICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKGZhaWwsIHNsb3dDYXNlQmVnaW4pOwpAQCAtMTIxLDcgKzEyMSw3IEBA
IHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgCiAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbiA9IHN0dWJJbmZvLmhvdFBhdGhCZWdp
bjsKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1w
QXRPZmZzZXQoc3R1YkluZm8udS51bnNldC5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgZW50cnlM
YWJlbCk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIGVu
dHJ5TGFiZWwpOwogICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOwogICAgICAgICAKICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC0xNDQsMTEgKzE0NCwxMSBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQo
RXhlY1N0YXRlKiBlCiAgICAgICAgIGlmICgoc2xvdC5jYWNoZWRQcm9wZXJ0eVR5cGUoKSAhPSBQ
cm9wZXJ0eVNsb3Q6OlZhbHVlKSB8fCAoKHNsb3QuY2FjaGVkT2Zmc2V0KCkgKiBzaXplb2YoSlNW
YWx1ZSkpID4gKHVuc2lnbmVkKU1hY3JvQXNzZW1ibGVyOjpNYXhpbXVtQ29tcGFjdFB0ckFsaWdu
ZWRBZGRyZXNzT2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBk
ZmdSZXBhdGNoQnlJZFNlbGZBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBz
bG90LmNhY2hlZE9mZnNldCgpLCBvcGVyYXRpb25HZXRCeUlkLCB0cnVlKTsKKyAgICAgICAgZGZn
UmVwYXRjaEJ5SWRTZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCwgdHJ1ZSk7CiAgICAg
ICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZigqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQot
CisgICAgCiAgICAgLy8gRklYTUU6IHNob3VsZCBzdXBwb3J0IHByb3RvdHlwZSAmIGNoYWluIGFj
Y2Vzc2VzIQogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTE2MCw2ICsxNjAsODQgQEAgdm9pZCBk
ZmdSZXBhdGNoR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIAogICAgICAgICBkZmdSZXBhdGNoQ2Fs
bChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRp
b25HZXRCeUlkKTsKIH0KIAorc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgaWYg
KCFiYXNlVmFsdWUuaXNDZWxsKCkKKyAgICAgICAgfHwgIXNsb3QuaXNDYWNoZWFibGUoKQorICAg
ICAgICB8fCBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5pc1VuY2FjaGVhYmxlRGlj
dGlvbmFyeSgpCisgICAgICAgIHx8IHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlVmFsdWUKKyAgICAg
ICAgfHwgc2xvdC5jYWNoZWRQcm9wZXJ0eVR5cGUoKSAhPSBQcm9wZXJ0eVNsb3Q6OlZhbHVlCisg
ICAgICAgIHx8IChzbG90LmNhY2hlZE9mZnNldCgpICogc2l6ZW9mKEpTVmFsdWUpKSA+ICh1bnNp
Z25lZClNYWNyb0Fzc2VtYmxlcjo6TWF4aW11bUNvbXBhY3RQdHJBbGlnbmVkQWRkcmVzc09mZnNl
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5h
c0NlbGwoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUo
KTsKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwor
ICAgIAorICAgIEFTU0VSVChzbG90LnNsb3RCYXNlKCkuaXNPYmplY3QoKSk7CisgICAgCisgICAg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7
CisgICAgaW50IGxpc3RJbmRleCA9IDE7CisgICAgCisgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5
cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKSB7CisgICAgICAgIEFTU0VSVCghc3R1YkluZm8u
c3R1YlJvdXRpbmUpOworICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwgc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNl
T2JqZWN0U3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxm
TGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEpOworICAgIH0gZWxzZSB7CisgICAgICAg
IHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0LnN0
cnVjdHVyZUxpc3Q7CisgICAgICAgIGxpc3RJbmRleCA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZM
aXN0Lmxpc3RTaXplOworICAgIH0KKyAgICAKKyAgICBpZiAobGlzdEluZGV4IDwgUE9MWU1PUlBI
SUNfTElTVF9DQUNIRV9TSVpFKSB7CisgICAgICAgIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0
Lmxpc3RTaXplKys7CisgICAgICAgIAorICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19j
YXN0PEdQUlJlZz4oc3R1YkluZm8uYmFzZUdQUik7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnZhbHVlR1BSKTsKKyAgICAgICAgCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCB3cm9uZ1N0cnVjdCA9IHN0dWJKaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkp
OworICAgICAgICAKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNVc2luZ0lubGluZVN0b3JhZ2Uo
KSkKKyAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBzbG90LmNhY2hlZE9m
ZnNldCgpICogc2l6ZW9mKEpTVmFsdWUpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNPYmplY3Q6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQ
Uiwgc2xvdC5jYWNoZWRPZmZzZXQoKSAqIHNpemVvZihKU1ZhbHVlKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3Mg
PSBzdHViSml0Lmp1bXAoKTsKKyAgICAgICAgCisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKmdsb2JhbERhdGEsICZzdHViSml0LCBjb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOwor
ICAgICAgICAKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBwb2x5
bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7Cisg
ICAgICAgIEFTU0VSVCghIWxhc3RQcm90b0JlZ2luKTsKKyAgICAgICAgCisgICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsod3JvbmdTdHJ1Y3QsIGxhc3RQcm90b0JlZ2luKTsKKyAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpKTsKKyAgICAgICAgCisgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1
bSgpOworICAgICAgICAKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xp
c3RJbmRleF0uc2V0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBl
bnRyeUxhYmVsLCBzdHJ1Y3R1cmUpOworICAgICAgICAKKyAgICAgICAgQ29kZUxvY2F0aW9uSnVt
cCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0
KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spOworICAgICAgICBSZXBhdGNoQnVmZmVy
IHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
anVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICAgICAgCisgICAgICAgIGlmIChsaXN0SW5k
ZXggPCAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIGRmZ0J1
aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBib29sIGRvbnRDaGFuZ2VDYWxsID0gdHJ5
QnVpbGRHZXRCeUlETGlzdChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1
YkluZm8pOworICAgIGlmICghZG9udENoYW5nZUNhbGwpCisgICAgICAgIGRmZ1JlcGF0Y2hDYWxs
KGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlv
bkdldEJ5SWQpOworfQorCiBzdGF0aWMgVl9ERkdPcGVyYXRpb25fRUpKSSBhcHByb3ByaWF0ZVB1
dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2lu
ZCkKIHsKICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgJKHJldmlzaW9uIDg5OTg3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcg
QEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBkZmdSZXBhdGNoR2V0
QnlJRChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgZGZnQnVpbGRHZXRCeUlETGlzdChF
eGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgZGZnUmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRl
KiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0
cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
</data>

          </attachment>
      

    </bug>

</bugzilla>