<?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>61554</bug_id>
          
          <creation_ts>2011-05-26 13:16:18 -0700</creation_ts>
          <short_desc>Make RegExpCache a weak map</short_desc>
          <delta_ts>2011-05-26 15:59:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>410772</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-05-26 13:16:18 -0700</bug_when>
    <thetext>Make RegExpCache a weak map</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410774</commentid>
    <comment_count>1</comment_count>
      <attachid>95027</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-05-26 13:20:44 -0700</bug_when>
    <thetext>Created attachment 95027
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410834</commentid>
    <comment_count>2</comment_count>
      <attachid>95027</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-05-26 14:29:39 -0700</bug_when>
    <thetext>Comment on attachment 95027
Patch

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

It&apos;s good to reuse an expression as long as it&apos;s alive. But in generational GC, this implementation will cause regexps to live super long, since we&apos;ll stop asking &quot;isReachable&quot; after a while. So, number of GC&apos;s seen isn&apos;t a very good measure of time.

I&apos;d suggest this two-pronged solution:

(1) Once a fixed limit of expressions is reached, the cache should stop keeping anything artificially alive, and return false from &quot;isReachable.&quot; This means that expressions will naturally exit the cache as they become unreachable, but will continue to be shared if they are reachable.

(2) When the system comes under executable memory pressure, iterate the cache and throw all regexp code away. The nice thing about this is that executable memory footprint will never get out of hand. (This can be a separate patch.)

&gt; Source/JavaScriptCore/runtime/RegExpCache.cpp:41
&gt; +    RegExp* regexp = new (m_globalData) RegExp(m_globalData, patternString, flags);

Could use a comment here explaining that GC might modify m_cacheMap.

&gt; Source/JavaScriptCore/runtime/RegExpCache.cpp:58
&gt; +    if (regExp-&gt;hasCode() &amp;&amp; regExp-&gt;gcShouldInvalidateCode())
&gt; +        regExp-&gt;invalidateCode();

This kind of operation belongs in finalize, not isReachable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410889</commentid>
    <comment_count>3</comment_count>
      <attachid>95051</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-05-26 15:03:20 -0700</bug_when>
    <thetext>Created attachment 95051
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410912</commentid>
    <comment_count>4</comment_count>
      <attachid>95055</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-05-26 15:18:30 -0700</bug_when>
    <thetext>Created attachment 95055
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410916</commentid>
    <comment_count>5</comment_count>
      <attachid>95055</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-05-26 15:23:22 -0700</bug_when>
    <thetext>Comment on attachment 95055
Patch

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

r=me

&gt; Source/JavaScriptCore/runtime/RegExpCache.h:60
&gt;      RegExpCacheMap m_cacheMap;
&gt; +    int m_nextEntryInStrongCache;
&gt; +    WTF::FixedArray&lt;Strong&lt;RegExp&gt;, maxStrongCacheableEntries&gt; m_strongCache;

Since you&apos;ve called the new cache the strong cache, I&apos;d call the other cache m_weakCache, and a comment for each:
m_strongCache; // Holds a select few regular expressions that have compiled and executed
m_weakCache; // Holds all regular expressions currently live.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410958</commentid>
    <comment_count>6</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-05-26 15:59:42 -0700</bug_when>
    <thetext>Committed r87445: &lt;http://trac.webkit.org/changeset/87445&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95027</attachid>
            <date>2011-05-26 13:20:44 -0700</date>
            <delta_ts>2011-05-26 15:03:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61554-20110526132043.patch</filename>
            <type>text/plain</type>
            <size>13790</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODc0MDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDMy
YjI3MDc5MzMzNzIwYjMzZjlmOTJkYmI0ZmZlYWI0MWE0MTNhN2UuLjZmZWFlODg4MTM2ZjkyYjVi
NDk4MGZlYjE4MDZiMGE2NTdlMjIyNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDQzIEBACisyMDExLTA1LTI2ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBSZWdF
eHBDYWNoZSBhIHdlYWsgbWFwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MTU1NAorCisgICAgICAgIFN3aXRjaCB0byBhIHdlYWsgbWFwIGZvciB0aGUg
cmVnZXhwIGNhY2hlLCBhbmQgaGlkZSB0aGF0CisgICAgICAgIGJlaGF2aW91ciBiZWhpbmQgUmVn
RXhwOjpjcmVhdGUuCisKKyAgICAgICAgSW4gb3JkZXIgdG8gYXZvaWQgcmVjb21waWxpbmcgZnJl
cXVlbnRseSB1c2VkIFJlZ0V4cHMgd2UKKyAgICAgICAgb25seSBldmljdCBSZWdFeHBzIHRoYXQg
aGF2ZSBnb25lIHVudXNlZCBmb3IgYSBudW1iZXIgb2YKKyAgICAgICAgR0MgY3ljbGVzLiAgV2Ug
bWF5IHdhbnQgdG8gcmVmaW5lIHRoaXMgbG9naWMgaW4gZnV0dXJlIAorICAgICAgICB0byBhY2Nv
dW50IGZvciB0aGUgc2l6ZSBvZiB0aGUgUmVnRXhwLCBidXQgZm9yIG5vdyB0aGlzCisgICAgICAg
IHNlZW1zIHN1ZmZpY2llbnQuCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2Vu
LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAg
KiBydW50aW1lL1JlZ0V4cC5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6UmVnRXhwKToKKyAg
ICAgICAgKEpTQzo6UmVnRXhwOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpSZWdFeHA6Om1hdGNo
KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cC5oOgorICAgICAgICAoSlNDOjpSZWdFeHA6Omdj
U2hvdWxkSW52YWxpZGF0ZUNvZGUpOgorICAgICAgICAoSlNDOjpSZWdFeHA6Omhhc0NvZGUpOgor
ICAgICAgICAoSlNDOjpSZWdFeHA6OmtleSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDYWNo
ZS5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cENhY2hlOjpsb29rdXBPckNyZWF0ZSk6CisgICAg
ICAgIChKU0M6OlJlZ0V4cENhY2hlOjpSZWdFeHBDYWNoZSk6CisgICAgICAgIChKU0M6OlJlZ0V4
cENhY2hlOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgIChKU0M6OlJlZ0V4
cENhY2hlOjpmaW5hbGl6ZSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDYWNoZS5oOgorICAg
ICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25z
dHJ1Y3RSZWdFeHApOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcDoKKyAg
ICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jQ29tcGlsZSk6CisgICAgICAgICogcnVudGltZS9T
dHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNNYXRjaCk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1NlYXJjaCk6CisKIDIwMTEtMDUtMjYgIEFk
YW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFdpbmRvd3MgYnVpbGQgZml4
IGFmdGVyIHI4NzM0NgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwCmluZGV4IDAzNTc4Y2ZjMzkxZjYyOGRkZDNhM2M0NDVjYjVhYWIz
NTk5NjcyNTEuLmI5ZDFjMGFkYTZlY2ZhYmE3YjNiNzQ0Y2UyYzc2OWI3NTMwZjMwMDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAKQEAgLTEyNSw4ICsxMjUsNyBAQCBSZWdpc3RlcklEKiBSZWdFeHBOb2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZAogewogICAgIGlm
IChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TmV3UmVnRXhwKGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCksCi0gICAgICAgIGdlbmVyYXRvci5nbG9iYWxEYXRhKCktPnJlZ0V4cENhY2hlKCkt
Pmxvb2t1cE9yQ3JlYXRlKG1fcGF0dGVybi51c3RyaW5nKCksIHJlZ0V4cEZsYWdzKG1fZmxhZ3Mu
dXN0cmluZygpKSkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5ld1JlZ0V4cChnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBSZWdFeHA6OmNyZWF0ZShnZW5lcmF0b3IuZ2xvYmFs
RGF0YSgpLCBtX3BhdHRlcm4udXN0cmluZygpLCByZWdFeHBGbGFncyhtX2ZsYWdzLnVzdHJpbmco
KSkpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXNOb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHAuY3BwCmluZGV4IDQxMDE3MjM0N2VjZmRjYjI1NDU3OWUyMWRjZGMyZWU2
NWUyZDM0OTIuLjZkNTNjYjExYzE3OWQ4YjdlZDQwYjYzZGUyNWU4ODMzMDk1MDA5ZWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcApAQCAtMjQsNiArMjQsNyBAQAog
I2luY2x1ZGUgIlJlZ0V4cC5oIgogCiAjaW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNsdWRlICJSZWdF
eHBDYWNoZS5oIgogI2luY2x1ZGUgInlhcnIvWWFyci5oIgogI2luY2x1ZGUgInlhcnIvWWFyckpJ
VC5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC03NSwxMSArNzYsMTIgQEAgc3RydWN0IFJlZ0V4
cFJlcHJlc2VudGF0aW9uIHsKICAgICBPd25QdHI8WWFycjo6Qnl0ZWNvZGVQYXR0ZXJuPiBtX3Jl
Z0V4cEJ5dGVjb2RlOwogfTsKIAotaW5saW5lIFJlZ0V4cDo6UmVnRXhwKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywgUmVnRXhwRmxhZ3MgZmxh
Z3MpCitSZWdFeHA6OlJlZ0V4cChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJp
bmcmIHBhdHRlcm5TdHJpbmcsIFJlZ0V4cEZsYWdzIGZsYWdzKQogICAgIDogSlNDZWxsKCpnbG9i
YWxEYXRhLCBnbG9iYWxEYXRhLT5yZWdFeHBTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX3N0YXRl
KE5vdENvbXBpbGVkKQogICAgICwgbV9wYXR0ZXJuU3RyaW5nKHBhdHRlcm5TdHJpbmcpCiAgICAg
LCBtX2ZsYWdzKGZsYWdzKQorICAgICwgbV9jb2RlSW52YWxpZGF0aW9uQ291bnRlcigwKQogICAg
ICwgbV9jb25zdHJ1Y3Rpb25FcnJvcigwKQogICAgICwgbV9udW1TdWJwYXR0ZXJucygwKQogI2lm
IEVOQUJMRShSRUdFWFBfVFJBQ0lORykKQEAgLTEwMCwxMSArMTAyLDcgQEAgUmVnRXhwOjp+UmVn
RXhwKCkKIAogUmVnRXhwKiBSZWdFeHA6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IGNvbnN0IFVTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIFJlZ0V4cEZsYWdzIGZsYWdzKQogewotICAg
IFJlZ0V4cCogcmVzID0gbmV3IChnbG9iYWxEYXRhKSBSZWdFeHAoZ2xvYmFsRGF0YSwgcGF0dGVy
blN0cmluZywgZmxhZ3MpOwotI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKLSAgICBnbG9iYWxE
YXRhLT5hZGRSZWdFeHBUb1RyYWNlKHJlcyk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzOworICAg
IHJldHVybiBnbG9iYWxEYXRhLT5yZWdFeHBDYWNoZSgpLT5sb29rdXBPckNyZWF0ZShwYXR0ZXJu
U3RyaW5nLCBmbGFncyk7CiB9CiAKIHZvaWQgUmVnRXhwOjpjb21waWxlKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSkKQEAgLTE1Niw2ICsxNTQsOCBAQCBpbnQgUmVnRXhwOjptYXRjaChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHMsIGludCBzdGFydE9mZnNldCwgVgog
CiAgICAgaWYgKG1fc3RhdGUgIT0gUGFyc2VFcnJvcikgewogICAgICAgICBjb21waWxlSWZOZWNl
c3NhcnkoZ2xvYmFsRGF0YSk7CisgICAgICAgIG1fY29kZUludmFsaWRhdGlvbkNvdW50ZXIgPSBJ
bml0aWFsQ29kZUludmFsaWRhdGlvbkNvdW50ZXI7CisKICAgICAgICAgaW50IG9mZnNldFZlY3Rv
clNpemUgPSAobV9udW1TdWJwYXR0ZXJucyArIDEpICogMjsKICAgICAgICAgaW50KiBvZmZzZXRW
ZWN0b3I7CiAgICAgICAgIFZlY3RvcjxpbnQsIDMyPiBub25SZXR1cm5lZE92ZWN0b3I7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCmluZGV4IDk2ZWYzN2FmM2ZhMWMyOGJhYzNi
MWUwNzVjNWM1YWMwMTYxN2Y3MjMuLmRiODZkZjQ4NTkyNzI3MWEyZTBlODIyZjM5N2IwMGE4ODE4
NDgxYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCkBAIC01Myw2ICs1
MywxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaW50IG1hdGNoKEpTR2xvYmFsRGF0YSYs
IGNvbnN0IFVTdHJpbmcmLCBpbnQgc3RhcnRPZmZzZXQsIFZlY3RvcjxpbnQsIDMyPiogb3ZlY3Rv
ciA9IDApOwogICAgICAgICB1bnNpZ25lZCBudW1TdWJwYXR0ZXJucygpIGNvbnN0IHsgcmV0dXJu
IG1fbnVtU3VicGF0dGVybnM7IH0KIAorICAgICAgICBib29sIGdjU2hvdWxkSW52YWxpZGF0ZUNv
ZGUoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV9jb2RlSW52YWxpZGF0aW9uQ291
bnRlcik7CisgICAgICAgICAgICByZXR1cm4gIS0tbV9jb2RlSW52YWxpZGF0aW9uQ291bnRlcjsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBoYXNDb2RlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fcmVwcmVzZW50YXRpb247CisgICAgICAgIH0KKwogICAgICAg
ICB2b2lkIGludmFsaWRhdGVDb2RlKCk7CiAgICAgICAgIAogI2lmIEVOQUJMRShSRUdFWFBfVFJB
Q0lORykKQEAgLTY1LDggKzc2LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZv
OwotICAgICAgICAKKworICAgICAgICBSZWdFeHBLZXkga2V5KCkgeyByZXR1cm4gUmVnRXhwS2V5
KG1fZmxhZ3MsIG1fcGF0dGVyblN0cmluZyk7IH0KKwogICAgIHByaXZhdGU6CisgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgSW5pdGlhbENvZGVJbnZhbGlkYXRpb25Db3VudGVyID0gODsKKyAgICAg
ICAgZnJpZW5kIGNsYXNzIFJlZ0V4cENhY2hlOwogICAgICAgICBSZWdFeHAoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuLCBSZWdFeHBGbGFncyk7CiAKICAg
ICAgICAgZW51bSBSZWdFeHBTdGF0ZSB7CkBAIC05MCw2ICsxMDUsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICBVU3RyaW5nIG1fcGF0dGVyblN0cmluZzsKICAgICAgICAgUmVnRXhwRmxh
Z3MgbV9mbGFnczsKKyAgICAgICAgaW50IG1fY29kZUludmFsaWRhdGlvbkNvdW50ZXI7CiAgICAg
ICAgIGNvbnN0IGNoYXIqIG1fY29uc3RydWN0aW9uRXJyb3I7CiAgICAgICAgIHVuc2lnbmVkIG1f
bnVtU3VicGF0dGVybnM7CiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCmluZGV4IDY3ZTAxM2ZkZWExYWEz
MGI1ZTZkYTRiNWE3YmRkMDFiOWZkYTExOWUuLjA2MWEzNjUwMjI4MDFhMGFhMGQxZTUxZDkyN2Rl
OTE4YTYyOGVlY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cENhY2hlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBD
YWNoZS5jcHAKQEAgLTM0LDQ0ICszNCwzNSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogUmVnRXhwKiBS
ZWdFeHBDYWNoZTo6bG9va3VwT3JDcmVhdGUoY29uc3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywg
UmVnRXhwRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgaWYgKHBhdHRlcm5TdHJpbmcubGVuZ3RoKCkgPCBt
YXhDYWNoZWFibGVQYXR0ZXJuTGVuZ3RoKSB7Ci0gICAgICAgIHBhaXI8UmVnRXhwQ2FjaGVNYXA6
Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX2NhY2hlTWFwLmFkZChSZWdFeHBLZXkoZmxhZ3Ms
IHBhdHRlcm5TdHJpbmcpLCBTdHJvbmc8UmVnRXhwPigpKTsKLSAgICAgICAgaWYgKCFyZXN1bHQu
c2Vjb25kKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5maXJzdC0+c2Vjb25kLmdldCgpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gY3JlYXRlKHBhdHRlcm5TdHJpbmcsIGZs
YWdzLCByZXN1bHQuZmlyc3QpOwotICAgIH0KLSAgICByZXR1cm4gY3JlYXRlKHBhdHRlcm5TdHJp
bmcsIGZsYWdzLCBtX2NhY2hlTWFwLmVuZCgpKTsKKyAgICBSZWdFeHBLZXkga2V5KGZsYWdzLCBw
YXR0ZXJuU3RyaW5nKTsKKyAgICBSZWdFeHBDYWNoZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9j
YWNoZU1hcC5maW5kKGtleSk7CisgICAgaWYgKHJlc3VsdCAhPSBtX2NhY2hlTWFwLmVuZCgpKQor
ICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQuZ2V0KCk7CisgICAgUmVnRXhwKiByZWdleHAg
PSBuZXcgKG1fZ2xvYmFsRGF0YSkgUmVnRXhwKG1fZ2xvYmFsRGF0YSwgcGF0dGVyblN0cmluZywg
ZmxhZ3MpOworI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKKyAgICBtX2dsb2JhbERhdGEtPmFk
ZFJlZ0V4cFRvVHJhY2UocmVzKTsKKyNlbmRpZgorICAgIG1fY2FjaGVNYXAuYWRkKGtleSwgV2Vh
azxSZWdFeHA+KCptX2dsb2JhbERhdGEsIHJlZ2V4cCwgdGhpcykpOworICAgIHJldHVybiByZWdl
eHA7CiB9CiAKLVJlZ0V4cCogUmVnRXhwQ2FjaGU6OmNyZWF0ZShjb25zdCBVU3RyaW5nJiBwYXR0
ZXJuU3RyaW5nLCBSZWdFeHBGbGFncyBmbGFncywgUmVnRXhwQ2FjaGVNYXA6Oml0ZXJhdG9yIGl0
ZXJhdG9yKSAKK1JlZ0V4cENhY2hlOjpSZWdFeHBDYWNoZShKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEpCisgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKIHsKLSAgICBSZWdFeHAqIHJlZ0V4
cCA9IFJlZ0V4cDo6Y3JlYXRlKG1fZ2xvYmFsRGF0YSwgcGF0dGVyblN0cmluZywgZmxhZ3MpOwot
ICAgIGlmIChwYXR0ZXJuU3RyaW5nLmxlbmd0aCgpID49IG1heENhY2hlYWJsZVBhdHRlcm5MZW5n
dGgpCi0gICAgICAgIHJldHVybiByZWdFeHA7Ci0KLSAgICBSZWdFeHBLZXkga2V5ID0gUmVnRXhw
S2V5KGZsYWdzLCBwYXR0ZXJuU3RyaW5nKTsKLSAgICBpdGVyYXRvci0+Zmlyc3QgPSBrZXk7Ci0g
ICAgaXRlcmF0b3ItPnNlY29uZC5zZXQoKm1fZ2xvYmFsRGF0YSwgcmVnRXhwKTsKLQotICAgICsr
bV9uZXh0S2V5VG9FdmljdDsKLSAgICBpZiAobV9uZXh0S2V5VG9FdmljdCA9PSBtYXhDYWNoZWFi
bGVFbnRyaWVzKSB7Ci0gICAgICAgIG1fbmV4dEtleVRvRXZpY3QgPSAwOwotICAgICAgICBtX2lz
RnVsbCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChtX2lzRnVsbCkKLSAgICAgICAgbV9jYWNoZU1h
cC5yZW1vdmUoUmVnRXhwS2V5KHBhdHRlcm5LZXlBcnJheVttX25leHRLZXlUb0V2aWN0XS5mbGFn
c1ZhbHVlLCBwYXR0ZXJuS2V5QXJyYXlbbV9uZXh0S2V5VG9FdmljdF0ucGF0dGVybikpOworfQog
Ci0gICAgcGF0dGVybktleUFycmF5W21fbmV4dEtleVRvRXZpY3RdLmZsYWdzVmFsdWUgPSBrZXku
ZmxhZ3NWYWx1ZTsKLSAgICBwYXR0ZXJuS2V5QXJyYXlbbV9uZXh0S2V5VG9FdmljdF0ucGF0dGVy
biA9IHBhdHRlcm5TdHJpbmcuaW1wbCgpOwotICAgIHJldHVybiByZWdFeHA7Citib29sIFJlZ0V4
cENhY2hlOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj4gaGFuZGxl
LCB2b2lkKiwgU2xvdFZpc2l0b3ImKQoreworICAgIFJlZ0V4cCogcmVnRXhwID0gc3RhdGljX2Nh
c3Q8UmVnRXhwKj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKKyAgICBpZiAocmVnRXhwLT5oYXND
b2RlKCkgJiYgcmVnRXhwLT5nY1Nob3VsZEludmFsaWRhdGVDb2RlKCkpCisgICAgICAgIHJlZ0V4
cC0+aW52YWxpZGF0ZUNvZGUoKTsKKyAgICByZXR1cm4gcmVnRXhwLT5oYXNDb2RlKCk7CiB9CiAK
LVJlZ0V4cENhY2hlOjpSZWdFeHBDYWNoZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCi0gICAg
OiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKLSAgICAsIG1fbmV4dEtleVRvRXZpY3QoLTEpCi0g
ICAgLCBtX2lzRnVsbChmYWxzZSkKK3ZvaWQgUmVnRXhwQ2FjaGU6OmZpbmFsaXplKEhhbmRsZTxV
bmtub3duPiBoYW5kbGUsIHZvaWQqKQogeworICAgIFJlZ0V4cCogcmVnRXhwID0gc3RhdGljX2Nh
c3Q8UmVnRXhwKj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKKyAgICBtX2NhY2hlTWFwLnJlbW92
ZShyZWdFeHAtPmtleSgpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cENhY2hlLmgKaW5kZXggM2VmNmI3MDlmOTQ1NzJlYzAwNzU5Yzg4NGViNTQ1MGYzZWE0
MDE4Yi4uNmRhNmVkNGUyYzMwOTg5OWFhMzU4MWJkNWUxNmMxMmJjYzhmYTRlNiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oCkBAIC0yNyw3ICsyNyw3IEBA
CiAKICNpbmNsdWRlICJSZWdFeHAuaCIKICNpbmNsdWRlICJSZWdFeHBLZXkuaCIKLSNpbmNsdWRl
ICJTdHJvbmcuaCIKKyNpbmNsdWRlICJXZWFrLmgiCiAjaW5jbHVkZSAiVVN0cmluZy5oIgogI2lu
Y2x1ZGUgPHd0Zi9GaXhlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTM3
LDMxICszNywyMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgUmVnRXhwQ2FjaGUgewot
Ci10eXBlZGVmIEhhc2hNYXA8UmVnRXhwS2V5LCBTdHJvbmc8UmVnRXhwPiA+IFJlZ0V4cENhY2hl
TWFwOworY2xhc3MgUmVnRXhwQ2FjaGUgOiBwcml2YXRlIFdlYWtIYW5kbGVPd25lciB7Citmcmll
bmQgY2xhc3MgUmVnRXhwOwordHlwZWRlZiBIYXNoTWFwPFJlZ0V4cEtleSwgV2VhazxSZWdFeHA+
ID4gUmVnRXhwQ2FjaGVNYXA7CiAKIHB1YmxpYzoKLSAgICBSZWdFeHAqIGxvb2t1cE9yQ3JlYXRl
KGNvbnN0IFVTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIFJlZ0V4cEZsYWdzKTsKLSAgICBSZWdFeHAq
IGNyZWF0ZShjb25zdCBVU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBSZWdFeHBGbGFncywgUmVnRXhw
Q2FjaGVNYXA6Oml0ZXJhdG9yKTsKICAgICBSZWdFeHBDYWNoZShKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhDYWNoZWFi
bGVQYXR0ZXJuTGVuZ3RoID0gMjU2OworICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIFNsb3RWaXNpdG9yJik7
CisgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4
dCk7CiAKLSNpZiBQTEFURk9STShJT1MpCi0gICAgLy8gVGhlIFJlZ0V4cENhY2hlIGNhbiBjdXJy
ZW50bHkgaG9sZCBvbnRvIG11bHRpcGxlIE1iIG9mIG1lbW9yeTsKLSAgICAvLyBhcyBhIHNob3J0
LXRlcm0gZml4IHNvbWUgZW1iZWRkZWQgcGxhdGZvcm1zIG1heSB3aXNoIHRvIHJlZHVjZSB0aGUg
Y2FjaGUgc2l6ZS4KLSAgICBzdGF0aWMgY29uc3QgaW50IG1heENhY2hlYWJsZUVudHJpZXMgPSAz
MjsKLSNlbHNlCi0gICAgc3RhdGljIGNvbnN0IGludCBtYXhDYWNoZWFibGVFbnRyaWVzID0gMjU2
OwotI2VuZGlmCi0KLSAgICBGaXhlZEFycmF5PFJlZ0V4cEtleSwgbWF4Q2FjaGVhYmxlRW50cmll
cz4gcGF0dGVybktleUFycmF5OworICAgIFJlZ0V4cCogbG9va3VwT3JDcmVhdGUoY29uc3QgVVN0
cmluZyYgcGF0dGVyblN0cmluZywgUmVnRXhwRmxhZ3MpOwogICAgIFJlZ0V4cENhY2hlTWFwIG1f
Y2FjaGVNYXA7CiAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7Ci0gICAgaW50IG1fbmV4
dEtleVRvRXZpY3Q7Ci0gICAgYm9vbCBtX2lzRnVsbDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3Ry
dWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0
b3IuY3BwCmluZGV4IGJjMGI1NzM3Njg4ZGJiODZjNjhlOWMxNGQ0NDAyYjA3NzUzZjAxNDYuLjE1
NDc4MTNjY2M2N2IyYWU0NmEzZDM2ZWFjMmRjOTRlZTljZDA4MzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAKQEAgLTMxNyw3
ICszMTcsNyBAQCBKU09iamVjdCogY29uc3RydWN0UmVnRXhwKEV4ZWNTdGF0ZSogZXhlYywgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgQQogICAgICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgIkludmFsaWQgZmxhZ3Mgc3Vw
cGxpZWQgdG8gUmVnRXhwIGNvbnN0cnVjdG9yLiIpKTsKICAgICB9CiAKLSAgICBSZWdFeHAqIHJl
Z0V4cCA9IGV4ZWMtPmdsb2JhbERhdGEoKS5yZWdFeHBDYWNoZSgpLT5sb29rdXBPckNyZWF0ZShw
YXR0ZXJuLCBmbGFncyk7CisgICAgUmVnRXhwKiByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZSgmZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBwYXR0ZXJuLCBmbGFncyk7CiAgICAgaWYgKCFyZWdFeHAtPmlzVmFs
aWQoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJyb3Io
ZXhlYywgcmVnRXhwLT5lcnJvck1lc3NhZ2UoKSkpOwogICAgIHJldHVybiBuZXcgKGV4ZWMpIFJl
Z0V4cE9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGdsb2JhbE9iamVjdC0+cmVn
RXhwU3RydWN0dXJlKCksIHJlZ0V4cCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAppbmRleCBhMzFmMWNmMWZkMzk4NDFmNDE4ZTljNWRh
MjIzMDQyYmYyZjZhN2QwLi4yNmY2MjMzMGEwZDVlYzIyNWUxNTM4NzY5Y2ViN2EyNWUzODg3MGMx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5
cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlw
ZS5jcHAKQEAgLTEyMiw3ICsxMjIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJl
Z0V4cFByb3RvRnVuY0NvbXBpbGUoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgaWYgKGZs
YWdzID09IEludmFsaWRGbGFncykKICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsICJJbnZhbGlkIGZsYWdzIHN1cHBsaWVkIHRv
IFJlZ0V4cCBjb25zdHJ1Y3Rvci4iKSk7CiAgICAgICAgIH0KLSAgICAgICAgcmVnRXhwID0gZXhl
Yy0+Z2xvYmFsRGF0YSgpLnJlZ0V4cENhY2hlKCktPmxvb2t1cE9yQ3JlYXRlKHBhdHRlcm4sIGZs
YWdzKTsKKyAgICAgICAgcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERhdGEo
KSwgcGF0dGVybiwgZmxhZ3MpOwogICAgIH0KIAogICAgIGlmICghcmVnRXhwLT5pc1ZhbGlkKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5
cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNw
cAppbmRleCBlNzBiMzg4MzZjYTMxMzY4ZmVlNDg2Zjc5ZjFmZDUyZmM4Yjk1MjYzLi5jZTg4YTQ2
NWU1ZWVjNzUyYmYyNDExYWE5MDljYTE5MzRjMmVjMGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKQEAgLTYxNSw3ICs2MTUsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY01hdGNoKEV4ZWNT
dGF0ZSogZXhlYykKICAgICAgICAgICogIElmIHJlZ2V4cCBpcyBub3QgYW4gb2JqZWN0IHdob3Nl
IFtbQ2xhc3NdXSBwcm9wZXJ0eSBpcyAiUmVnRXhwIiwgaXQgaXMKICAgICAgICAgICogIHJlcGxh
Y2VkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbiBuZXcgUmVnRXhwKHJlZ2V4cCku
CiAgICAgICAgICAqLwotICAgICAgICByZWcgPSBleGVjLT5nbG9iYWxEYXRhKCkucmVnRXhwQ2Fj
aGUoKS0+bG9va3VwT3JDcmVhdGUoYTAudG9TdHJpbmcoZXhlYyksIE5vRmxhZ3MpOworICAgICAg
ICByZWcgPSBSZWdFeHA6OmNyZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBhMC50b1N0cmluZyhl
eGVjKSwgTm9GbGFncyk7CiAgICAgfQogICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdFeHBDb25z
dHJ1Y3RvciA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0b3Io
KTsKICAgICBpbnQgcG9zOwpAQCAtNjY0LDcgKzY2NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU2VhcmNoKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAg
ICogIElmIHJlZ2V4cCBpcyBub3QgYW4gb2JqZWN0IHdob3NlIFtbQ2xhc3NdXSBwcm9wZXJ0eSBp
cyAiUmVnRXhwIiwgaXQgaXMKICAgICAgICAgICogIHJlcGxhY2VkIHdpdGggdGhlIHJlc3VsdCBv
ZiB0aGUgZXhwcmVzc2lvbiBuZXcgUmVnRXhwKHJlZ2V4cCkuCiAgICAgICAgICAqLwotICAgICAg
ICByZWcgPSBleGVjLT5nbG9iYWxEYXRhKCkucmVnRXhwQ2FjaGUoKS0+bG9va3VwT3JDcmVhdGUo
YTAudG9TdHJpbmcoZXhlYyksIE5vRmxhZ3MpOworICAgICAgICByZWcgPSBSZWdFeHA6OmNyZWF0
ZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBhMC50b1N0cmluZyhleGVjKSwgTm9GbGFncyk7CiAgICAg
fQogICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9IGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0b3IoKTsKICAgICBpbnQgcG9zOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95051</attachid>
            <date>2011-05-26 15:03:20 -0700</date>
            <delta_ts>2011-05-26 15:18:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61554-20110526150319.patch</filename>
            <type>text/plain</type>
            <size>14373</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODc0MjkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDIz
Y2U4NGJiZDQ3Mzk3NDFkMzg2NjYwNWZjZWVmNmRiNDIwY2E3YjEuLjE1ODJkNjdjMWY4ZjljYjI2
NWRmY2FlNWY2NjI3NjY1MzBiZjExOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDQzIEBACisyMDExLTA1LTI2ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBSZWdF
eHBDYWNoZSBhIHdlYWsgbWFwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MTU1NAorCisgICAgICAgIFN3aXRjaCB0byBhIHdlYWsgbWFwIGZvciB0aGUg
cmVnZXhwIGNhY2hlLCBhbmQgaGlkZSB0aGF0CisgICAgICAgIGJlaGF2aW91ciBiZWhpbmQgUmVn
RXhwOjpjcmVhdGUuCisKKyAgICAgICAgSW4gb3JkZXIgdG8gYXZvaWQgcmVjb21waWxpbmcgZnJl
cXVlbnRseSB1c2VkIFJlZ0V4cHMgd2UKKyAgICAgICAgb25seSBldmljdCBSZWdFeHBzIHRoYXQg
aGF2ZSBnb25lIHVudXNlZCBmb3IgYSBudW1iZXIgb2YKKyAgICAgICAgR0MgY3ljbGVzLiAgV2Ug
bWF5IHdhbnQgdG8gcmVmaW5lIHRoaXMgbG9naWMgaW4gZnV0dXJlIAorICAgICAgICB0byBhY2Nv
dW50IGZvciB0aGUgc2l6ZSBvZiB0aGUgUmVnRXhwLCBidXQgZm9yIG5vdyB0aGlzCisgICAgICAg
IHNlZW1zIHN1ZmZpY2llbnQuCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2Vu
LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAg
KiBydW50aW1lL1JlZ0V4cC5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6UmVnRXhwKToKKyAg
ICAgICAgKEpTQzo6UmVnRXhwOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpSZWdFeHA6Om1hdGNo
KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cC5oOgorICAgICAgICAoSlNDOjpSZWdFeHA6Omdj
U2hvdWxkSW52YWxpZGF0ZUNvZGUpOgorICAgICAgICAoSlNDOjpSZWdFeHA6Omhhc0NvZGUpOgor
ICAgICAgICAoSlNDOjpSZWdFeHA6OmtleSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDYWNo
ZS5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cENhY2hlOjpsb29rdXBPckNyZWF0ZSk6CisgICAg
ICAgIChKU0M6OlJlZ0V4cENhY2hlOjpSZWdFeHBDYWNoZSk6CisgICAgICAgIChKU0M6OlJlZ0V4
cENhY2hlOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgIChKU0M6OlJlZ0V4
cENhY2hlOjpmaW5hbGl6ZSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDYWNoZS5oOgorICAg
ICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25z
dHJ1Y3RSZWdFeHApOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcDoKKyAg
ICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jQ29tcGlsZSk6CisgICAgICAgICogcnVudGltZS9T
dHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNNYXRjaCk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1NlYXJjaCk6CisKIDIwMTEtMDUtMjYgIEdl
b2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBSb2xsZWQgYmFjayBp
biBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC84NzQwOCB3aXRoIFdpbmRvd3MgYnVp
bGQgZml4ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L05vZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHAKaW5kZXggMDM1NzhjZmMzOTFmNjI4ZGRkM2EzYzQ0NWNiNWFhYjM1OTk2
NzI1MS4uYjlkMWMwYWRhNmVjZmFiYTdiM2I3NDRjZTJjNzY5Yjc1MzBmMzAwNyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApA
QCAtMTI1LDggKzEyNSw3IEBAIFJlZ2lzdGVySUQqIFJlZ0V4cE5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkCiB7CiAgICAgaWYgKGRz
dCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gZ2VuZXJhdG9yLmVtaXROZXdSZWdFeHAoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24o
ZHN0KSwKLSAgICAgICAgZ2VuZXJhdG9yLmdsb2JhbERhdGEoKS0+cmVnRXhwQ2FjaGUoKS0+bG9v
a3VwT3JDcmVhdGUobV9wYXR0ZXJuLnVzdHJpbmcoKSwgcmVnRXhwRmxhZ3MobV9mbGFncy51c3Ry
aW5nKCkpKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TmV3UmVnRXhwKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCksIFJlZ0V4cDo6Y3JlYXRlKGdlbmVyYXRvci5nbG9iYWxEYXRh
KCksIG1fcGF0dGVybi51c3RyaW5nKCksIHJlZ0V4cEZsYWdzKG1fZmxhZ3MudXN0cmluZygpKSkp
OwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhpc05vZGUgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cC5jcHAKaW5kZXggNDEwMTcyMzQ3ZWNmZGNiMjU0NTc5ZTIxZGNkYzJlZTY1ZTJk
MzQ5Mi4uOWJhMzBmMzBmYmUyZTJiMjNmODQ3MmM3YmNjMGMzNDA0NmExNDg3MCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5j
bHVkZSAiUmVnRXhwLmgiCiAKICNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUgIlJlZ0V4cENh
Y2hlLmgiCiAjaW5jbHVkZSAieWFyci9ZYXJyLmgiCiAjaW5jbHVkZSAieWFyci9ZYXJySklULmgi
CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTc1LDExICs3NiwxMiBAQCBzdHJ1Y3QgUmVnRXhwUmVw
cmVzZW50YXRpb24gewogICAgIE93blB0cjxZYXJyOjpCeXRlY29kZVBhdHRlcm4+IG1fcmVnRXhw
Qnl0ZWNvZGU7CiB9OwogCi1pbmxpbmUgUmVnRXhwOjpSZWdFeHAoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBSZWdFeHBGbGFncyBmbGFncykK
K1JlZ0V4cDo6UmVnRXhwKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYg
cGF0dGVyblN0cmluZywgUmVnRXhwRmxhZ3MgZmxhZ3MpCiAgICAgOiBKU0NlbGwoKmdsb2JhbERh
dGEsIGdsb2JhbERhdGEtPnJlZ0V4cFN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1fc3RhdGUoTm90
Q29tcGlsZWQpCiAgICAgLCBtX3BhdHRlcm5TdHJpbmcocGF0dGVyblN0cmluZykKICAgICAsIG1f
ZmxhZ3MoZmxhZ3MpCisgICAgLCBtX2NvZGVJbnZhbGlkYXRpb25Db3VudGVyKDApCiAgICAgLCBt
X2NvbnN0cnVjdGlvbkVycm9yKDApCiAgICAgLCBtX251bVN1YnBhdHRlcm5zKDApCiAjaWYgRU5B
QkxFKFJFR0VYUF9UUkFDSU5HKQpAQCAtMTAwLDExICsxMDIsNyBAQCBSZWdFeHA6On5SZWdFeHAo
KQogCiBSZWdFeHAqIFJlZ0V4cDo6Y3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29u
c3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywgUmVnRXhwRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgUmVn
RXhwKiByZXMgPSBuZXcgKGdsb2JhbERhdGEpIFJlZ0V4cChnbG9iYWxEYXRhLCBwYXR0ZXJuU3Ry
aW5nLCBmbGFncyk7Ci0jaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQotICAgIGdsb2JhbERhdGEt
PmFkZFJlZ0V4cFRvVHJhY2UocmVzKTsKLSNlbmRpZgotICAgIHJldHVybiByZXM7CisgICAgcmV0
dXJuIGdsb2JhbERhdGEtPnJlZ0V4cENhY2hlKCktPmxvb2t1cE9yQ3JlYXRlKHBhdHRlcm5TdHJp
bmcsIGZsYWdzKTsKIH0KIAogdm9pZCBSZWdFeHA6OmNvbXBpbGUoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhKQpAQCAtMTE4LDYgKzExNiw4IEBAIHZvaWQgUmVnRXhwOjpjb21waWxlKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGdsb2JhbERh
dGEtPnJlZ0V4cENhY2hlKCktPmFkZFRvU3Ryb25nQ2FjaGUodGhpcyk7CisKICAgICBBU1NFUlQo
bV9udW1TdWJwYXR0ZXJucyA9PSBwYXR0ZXJuLm1fbnVtU3VicGF0dGVybnMpOwogCiAgICAgbV9z
dGF0ZSA9IEJ5dGVDb2RlOwpAQCAtMTU2LDYgKzE1Niw4IEBAIGludCBSZWdFeHA6Om1hdGNoKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgcywgaW50IHN0YXJ0T2Zmc2V0
LCBWCiAKICAgICBpZiAobV9zdGF0ZSAhPSBQYXJzZUVycm9yKSB7CiAgICAgICAgIGNvbXBpbGVJ
Zk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKKyAgICAgICAgbV9jb2RlSW52YWxpZGF0aW9uQ291bnRl
ciA9IEluaXRpYWxDb2RlSW52YWxpZGF0aW9uQ291bnRlcjsKKwogICAgICAgICBpbnQgb2Zmc2V0
VmVjdG9yU2l6ZSA9IChtX251bVN1YnBhdHRlcm5zICsgMSkgKiAyOwogICAgICAgICBpbnQqIG9m
ZnNldFZlY3RvcjsKICAgICAgICAgVmVjdG9yPGludCwgMzI+IG5vblJldHVybmVkT3ZlY3RvcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgKaW5kZXggOTZlZjM3YWYzZmExYzI4
YmFjM2IxZTA3NWM1YzVhYzAxNjE3ZjcyMy4uZGI4NmRmNDg1OTI3MjcxYTJlMGU4MjJmMzk3YjAw
YTg4MTg0ODFhNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgKQEAgLTUz
LDYgKzUzLDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpbnQgbWF0Y2goSlNHbG9iYWxE
YXRhJiwgY29uc3QgVVN0cmluZyYsIGludCBzdGFydE9mZnNldCwgVmVjdG9yPGludCwgMzI+KiBv
dmVjdG9yID0gMCk7CiAgICAgICAgIHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zKCkgY29uc3QgeyBy
ZXR1cm4gbV9udW1TdWJwYXR0ZXJuczsgfQogCisgICAgICAgIGJvb2wgZ2NTaG91bGRJbnZhbGlk
YXRlQ29kZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2NvZGVJbnZhbGlkYXRp
b25Db3VudGVyKTsKKyAgICAgICAgICAgIHJldHVybiAhLS1tX2NvZGVJbnZhbGlkYXRpb25Db3Vu
dGVyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGhhc0NvZGUoKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9yZXByZXNlbnRhdGlvbjsKKyAgICAgICAgfQorCiAg
ICAgICAgIHZvaWQgaW52YWxpZGF0ZUNvZGUoKTsKICAgICAgICAgCiAjaWYgRU5BQkxFKFJFR0VY
UF9UUkFDSU5HKQpAQCAtNjUsOCArNzYsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBz
X2luZm87Ci0gICAgICAgIAorCisgICAgICAgIFJlZ0V4cEtleSBrZXkoKSB7IHJldHVybiBSZWdF
eHBLZXkobV9mbGFncywgbV9wYXR0ZXJuU3RyaW5nKTsgfQorCiAgICAgcHJpdmF0ZToKKyAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBJbml0aWFsQ29kZUludmFsaWRhdGlvbkNvdW50ZXIgPSA4Owor
ICAgICAgICBmcmllbmQgY2xhc3MgUmVnRXhwQ2FjaGU7CiAgICAgICAgIFJlZ0V4cChKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4sIFJlZ0V4cEZsYWdzKTsK
IAogICAgICAgICBlbnVtIFJlZ0V4cFN0YXRlIHsKQEAgLTkwLDYgKzEwNSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIFVTdHJpbmcgbV9wYXR0ZXJuU3RyaW5nOwogICAgICAgICBSZWdF
eHBGbGFncyBtX2ZsYWdzOworICAgICAgICBpbnQgbV9jb2RlSW52YWxpZGF0aW9uQ291bnRlcjsK
ICAgICAgICAgY29uc3QgY2hhciogbV9jb25zdHJ1Y3Rpb25FcnJvcjsKICAgICAgICAgdW5zaWdu
ZWQgbV9udW1TdWJwYXR0ZXJuczsKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAKaW5kZXggNjdlMDEzZmRl
YTFhYTMwYjVlNmRhNGI1YTdiZGQwMWI5ZmRhMTE5ZS4uMzhmNTdiMzA1NTkxZGFmMjZmNGQ3NGM0
N2YxYTU3NTdiMWI2MmJhYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cENhY2hlLmNwcApAQCAtMzQsNDQgKzM0LDM5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBSZWdF
eHAqIFJlZ0V4cENhY2hlOjpsb29rdXBPckNyZWF0ZShjb25zdCBVU3RyaW5nJiBwYXR0ZXJuU3Ry
aW5nLCBSZWdFeHBGbGFncyBmbGFncykKIHsKLSAgICBpZiAocGF0dGVyblN0cmluZy5sZW5ndGgo
KSA8IG1heENhY2hlYWJsZVBhdHRlcm5MZW5ndGgpIHsKLSAgICAgICAgcGFpcjxSZWdFeHBDYWNo
ZU1hcDo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fY2FjaGVNYXAuYWRkKFJlZ0V4cEtleShm
bGFncywgcGF0dGVyblN0cmluZyksIFN0cm9uZzxSZWdFeHA+KCkpOwotICAgICAgICBpZiAoIXJl
c3VsdC5zZWNvbmQpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmZpcnN0LT5zZWNvbmQuZ2V0
KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGUocGF0dGVyblN0cmlu
ZywgZmxhZ3MsIHJlc3VsdC5maXJzdCk7Ci0gICAgfQotICAgIHJldHVybiBjcmVhdGUocGF0dGVy
blN0cmluZywgZmxhZ3MsIG1fY2FjaGVNYXAuZW5kKCkpOworICAgIFJlZ0V4cEtleSBrZXkoZmxh
Z3MsIHBhdHRlcm5TdHJpbmcpOworICAgIFJlZ0V4cENhY2hlTWFwOjppdGVyYXRvciByZXN1bHQg
PSBtX2NhY2hlTWFwLmZpbmQoa2V5KTsKKyAgICBpZiAocmVzdWx0ICE9IG1fY2FjaGVNYXAuZW5k
KCkpCisgICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZC5nZXQoKTsKKyAgICBSZWdFeHAqIHJl
Z0V4cCA9IG5ldyAobV9nbG9iYWxEYXRhKSBSZWdFeHAobV9nbG9iYWxEYXRhLCBwYXR0ZXJuU3Ry
aW5nLCBmbGFncyk7CisjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQorICAgIG1fZ2xvYmFsRGF0
YS0+YWRkUmVnRXhwVG9UcmFjZShyZWdFeHApOworI2VuZGlmCisgICAgbV9jYWNoZU1hcC5hZGQo
a2V5LCBXZWFrPFJlZ0V4cD4oKm1fZ2xvYmFsRGF0YSwgcmVnRXhwLCB0aGlzKSk7CisgICAgcmV0
dXJuIHJlZ0V4cDsKIH0KIAotUmVnRXhwKiBSZWdFeHBDYWNoZTo6Y3JlYXRlKGNvbnN0IFVTdHJp
bmcmIHBhdHRlcm5TdHJpbmcsIFJlZ0V4cEZsYWdzIGZsYWdzLCBSZWdFeHBDYWNoZU1hcDo6aXRl
cmF0b3IgaXRlcmF0b3IpIAorUmVnRXhwQ2FjaGU6OlJlZ0V4cENhY2hlKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSkKKyAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQogewotICAgIFJlZ0V4
cCogcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUobV9nbG9iYWxEYXRhLCBwYXR0ZXJuU3RyaW5nLCBm
bGFncyk7Ci0gICAgaWYgKHBhdHRlcm5TdHJpbmcubGVuZ3RoKCkgPj0gbWF4Q2FjaGVhYmxlUGF0
dGVybkxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHJlZ0V4cDsKLQotICAgIFJlZ0V4cEtleSBrZXkg
PSBSZWdFeHBLZXkoZmxhZ3MsIHBhdHRlcm5TdHJpbmcpOwotICAgIGl0ZXJhdG9yLT5maXJzdCA9
IGtleTsKLSAgICBpdGVyYXRvci0+c2Vjb25kLnNldCgqbV9nbG9iYWxEYXRhLCByZWdFeHApOwot
Ci0gICAgKyttX25leHRLZXlUb0V2aWN0OwotICAgIGlmIChtX25leHRLZXlUb0V2aWN0ID09IG1h
eENhY2hlYWJsZUVudHJpZXMpIHsKLSAgICAgICAgbV9uZXh0S2V5VG9FdmljdCA9IDA7Ci0gICAg
ICAgIG1faXNGdWxsID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG1faXNGdWxsKQotICAgICAgICBt
X2NhY2hlTWFwLnJlbW92ZShSZWdFeHBLZXkocGF0dGVybktleUFycmF5W21fbmV4dEtleVRvRXZp
Y3RdLmZsYWdzVmFsdWUsIHBhdHRlcm5LZXlBcnJheVttX25leHRLZXlUb0V2aWN0XS5wYXR0ZXJu
KSk7Cit9CiAKLSAgICBwYXR0ZXJuS2V5QXJyYXlbbV9uZXh0S2V5VG9FdmljdF0uZmxhZ3NWYWx1
ZSA9IGtleS5mbGFnc1ZhbHVlOwotICAgIHBhdHRlcm5LZXlBcnJheVttX25leHRLZXlUb0V2aWN0
XS5wYXR0ZXJuID0gcGF0dGVyblN0cmluZy5pbXBsKCk7Ci0gICAgcmV0dXJuIHJlZ0V4cDsKK3Zv
aWQgUmVnRXhwQ2FjaGU6OmZpbmFsaXplKEhhbmRsZTxVbmtub3duPiBoYW5kbGUsIHZvaWQqKQor
eworICAgIFJlZ0V4cCogcmVnRXhwID0gc3RhdGljX2Nhc3Q8UmVnRXhwKj4oaGFuZGxlLmdldCgp
LmFzQ2VsbCgpKTsKKyAgICBtX2NhY2hlTWFwLnJlbW92ZShyZWdFeHAtPmtleSgpKTsKKyAgICBy
ZWdFeHAtPmludmFsaWRhdGVDb2RlKCk7CiB9CiAKLVJlZ0V4cENhY2hlOjpSZWdFeHBDYWNoZShK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCi0gICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkK
LSAgICAsIG1fbmV4dEtleVRvRXZpY3QoLTEpCi0gICAgLCBtX2lzRnVsbChmYWxzZSkKK3ZvaWQg
UmVnRXhwQ2FjaGU6OmFkZFRvU3Ryb25nQ2FjaGUoUmVnRXhwKiByZWdFeHApCiB7CisgICAgVVN0
cmluZyBwYXR0ZXJuID0gcmVnRXhwLT5wYXR0ZXJuKCk7CisgICAgaWYgKHBhdHRlcm4ubGVuZ3Ro
KCkgPiBtYXhTdHJvbmdDYWNoZWFibGVQYXR0ZXJuTGVuZ3RoKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9zdHJvbmdDYWNoZVttX25leHRFbnRyeUluU3Ryb25nQ2FjaGVdLnNldCgqbV9nbG9iYWxE
YXRhLCByZWdFeHApOworICAgIG1fbmV4dEVudHJ5SW5TdHJvbmdDYWNoZSsrOworICAgIGlmICht
X25leHRFbnRyeUluU3Ryb25nQ2FjaGUgPT0gbWF4U3Ryb25nQ2FjaGVhYmxlRW50cmllcykKKyAg
ICAgICAgbV9uZXh0RW50cnlJblN0cm9uZ0NhY2hlID0gMDsKIH0KIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmgKaW5kZXggM2VmNmI3MDlmOTQ1NzJlYzAw
NzU5Yzg4NGViNTQ1MGYzZWE0MDE4Yi4uZWZiMzQzNzQzYTczNGU3ZmIxZjgwZjY2YzE4NWE3MDEx
NmQ3MTkzMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
Q2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5o
CkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiUmVnRXhwS2V5LmgiCiAjaW5jbHVkZSAiU3Ry
b25nLmgiCiAjaW5jbHVkZSAiVVN0cmluZy5oIgorI2luY2x1ZGUgIldlYWsuaCIKICNpbmNsdWRl
IDx3dGYvRml4ZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKQEAgLTM3LDMx
ICszOCwyNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgUmVnRXhwQ2FjaGUgewotCi10
eXBlZGVmIEhhc2hNYXA8UmVnRXhwS2V5LCBTdHJvbmc8UmVnRXhwPiA+IFJlZ0V4cENhY2hlTWFw
OworY2xhc3MgUmVnRXhwQ2FjaGUgOiBwcml2YXRlIFdlYWtIYW5kbGVPd25lciB7CitmcmllbmQg
Y2xhc3MgUmVnRXhwOwordHlwZWRlZiBIYXNoTWFwPFJlZ0V4cEtleSwgV2VhazxSZWdFeHA+ID4g
UmVnRXhwQ2FjaGVNYXA7CiAKIHB1YmxpYzoKLSAgICBSZWdFeHAqIGxvb2t1cE9yQ3JlYXRlKGNv
bnN0IFVTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIFJlZ0V4cEZsYWdzKTsKLSAgICBSZWdFeHAqIGNy
ZWF0ZShjb25zdCBVU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBSZWdFeHBGbGFncywgUmVnRXhwQ2Fj
aGVNYXA6Oml0ZXJhdG9yKTsKICAgICBSZWdFeHBDYWNoZShKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhDYWNoZWFibGVQ
YXR0ZXJuTGVuZ3RoID0gMjU2OworICAgIAorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhT
dHJvbmdDYWNoZWFibGVQYXR0ZXJuTGVuZ3RoID0gMjU2OwogCi0jaWYgUExBVEZPUk0oSU9TKQot
ICAgIC8vIFRoZSBSZWdFeHBDYWNoZSBjYW4gY3VycmVudGx5IGhvbGQgb250byBtdWx0aXBsZSBN
YiBvZiBtZW1vcnk7Ci0gICAgLy8gYXMgYSBzaG9ydC10ZXJtIGZpeCBzb21lIGVtYmVkZGVkIHBs
YXRmb3JtcyBtYXkgd2lzaCB0byByZWR1Y2UgdGhlIGNhY2hlIHNpemUuCi0gICAgc3RhdGljIGNv
bnN0IGludCBtYXhDYWNoZWFibGVFbnRyaWVzID0gMzI7Ci0jZWxzZQotICAgIHN0YXRpYyBjb25z
dCBpbnQgbWF4Q2FjaGVhYmxlRW50cmllcyA9IDI1NjsKLSNlbmRpZgorICAgIHN0YXRpYyBjb25z
dCBpbnQgbWF4U3Ryb25nQ2FjaGVhYmxlRW50cmllcyA9IDMyOwogCi0gICAgRml4ZWRBcnJheTxS
ZWdFeHBLZXksIG1heENhY2hlYWJsZUVudHJpZXM+IHBhdHRlcm5LZXlBcnJheTsKKyAgICB2aXJ0
dWFsIHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKKworICAg
IFJlZ0V4cCogbG9va3VwT3JDcmVhdGUoY29uc3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywgUmVn
RXhwRmxhZ3MpOworICAgIHZvaWQgYWRkVG9TdHJvbmdDYWNoZShSZWdFeHAqKTsKICAgICBSZWdF
eHBDYWNoZU1hcCBtX2NhY2hlTWFwOworICAgIGludCBtX25leHRFbnRyeUluU3Ryb25nQ2FjaGU7
CisgICAgV1RGOjpGaXhlZEFycmF5PFN0cm9uZzxSZWdFeHA+LCBtYXhTdHJvbmdDYWNoZWFibGVF
bnRyaWVzPiBtX3N0cm9uZ0NhY2hlOwogICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwot
ICAgIGludCBtX25leHRLZXlUb0V2aWN0OwotICAgIGJvb2wgbV9pc0Z1bGw7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cENvbnN0cnVjdG9yLmNwcAppbmRleCBiYzBiNTczNzY4OGRiYjg2YzY4ZTljMTRkNDQwMmIw
Nzc1M2YwMTQ2Li4xNTQ3ODEzY2NjNjdiMmFlNDZhM2QzNmVhYzJkYzk0ZWU5Y2QwODMzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3Iu
Y3BwCkBAIC0zMTcsNyArMzE3LDcgQEAgSlNPYmplY3QqIGNvbnN0cnVjdFJlZ0V4cChFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEEKICAgICAgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsICJJbnZh
bGlkIGZsYWdzIHN1cHBsaWVkIHRvIFJlZ0V4cCBjb25zdHJ1Y3Rvci4iKSk7CiAgICAgfQogCi0g
ICAgUmVnRXhwKiByZWdFeHAgPSBleGVjLT5nbG9iYWxEYXRhKCkucmVnRXhwQ2FjaGUoKS0+bG9v
a3VwT3JDcmVhdGUocGF0dGVybiwgZmxhZ3MpOworICAgIFJlZ0V4cCogcmVnRXhwID0gUmVnRXhw
OjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwgcGF0dGVybiwgZmxhZ3MpOwogICAgIGlmICgh
cmVnRXhwLT5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0
ZVN5bnRheEVycm9yKGV4ZWMsIHJlZ0V4cC0+ZXJyb3JNZXNzYWdlKCkpKTsKICAgICByZXR1cm4g
bmV3IChleGVjKSBSZWdFeHBPYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBnbG9i
YWxPYmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAKaW5kZXggYTMxZjFjZjFmZDM5
ODQxZjQxOGU5YzVkYTIyMzA0MmJmMmY2YTdkMC4uMjZmNjIzMzBhMGQ1ZWMyMjVlMTUzODc2OWNl
YjdhMjVlMzg4NzBjMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwUHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBQcm90b3R5cGUuY3BwCkBAIC0xMjIsNyArMTIyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNDb21waWxlKEV4ZWNTdGF0ZSogZXhlYykKICAgICAg
ICAgICAgIGlmIChmbGFncyA9PSBJbnZhbGlkRmxhZ3MpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCAiSW52YWxpZCBmbGFn
cyBzdXBwbGllZCB0byBSZWdFeHAgY29uc3RydWN0b3IuIikpOwogICAgICAgICB9Ci0gICAgICAg
IHJlZ0V4cCA9IGV4ZWMtPmdsb2JhbERhdGEoKS5yZWdFeHBDYWNoZSgpLT5sb29rdXBPckNyZWF0
ZShwYXR0ZXJuLCBmbGFncyk7CisgICAgICAgIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKCZleGVj
LT5nbG9iYWxEYXRhKCksIHBhdHRlcm4sIGZsYWdzKTsKICAgICB9CiAKICAgICBpZiAoIXJlZ0V4
cC0+aXNWYWxpZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RyaW5nUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z1Byb3RvdHlwZS5jcHAKaW5kZXggZTcwYjM4ODM2Y2EzMTM2OGZlZTQ4NmY3OWYxZmQ1MmZjOGI5
NTI2My4uY2U4OGE0NjVlNWVlYzc1MmJmMjQxMWFhOTA5Y2ExOTM0YzJlYzBkZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCkBAIC02
MTUsNyArNjE1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1
bmNNYXRjaChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAqICBJZiByZWdleHAgaXMgbm90IGFu
IG9iamVjdCB3aG9zZSBbW0NsYXNzXV0gcHJvcGVydHkgaXMgIlJlZ0V4cCIsIGl0IGlzCiAgICAg
ICAgICAqICByZXBsYWNlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24gbmV3IFJl
Z0V4cChyZWdleHApLgogICAgICAgICAgKi8KLSAgICAgICAgcmVnID0gZXhlYy0+Z2xvYmFsRGF0
YSgpLnJlZ0V4cENhY2hlKCktPmxvb2t1cE9yQ3JlYXRlKGEwLnRvU3RyaW5nKGV4ZWMpLCBOb0Zs
YWdzKTsKKyAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwg
YTAudG9TdHJpbmcoZXhlYyksIE5vRmxhZ3MpOwogICAgIH0KICAgICBSZWdFeHBDb25zdHJ1Y3Rv
ciogcmVnRXhwQ29uc3RydWN0b3IgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4
cENvbnN0cnVjdG9yKCk7CiAgICAgaW50IHBvczsKQEAgLTY2NCw3ICs2NjQsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NlYXJjaChFeGVjU3RhdGUqIGV4
ZWMpCiAgICAgICAgICAqICBJZiByZWdleHAgaXMgbm90IGFuIG9iamVjdCB3aG9zZSBbW0NsYXNz
XV0gcHJvcGVydHkgaXMgIlJlZ0V4cCIsIGl0IGlzCiAgICAgICAgICAqICByZXBsYWNlZCB3aXRo
IHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24gbmV3IFJlZ0V4cChyZWdleHApLgogICAgICAg
ICAgKi8KLSAgICAgICAgcmVnID0gZXhlYy0+Z2xvYmFsRGF0YSgpLnJlZ0V4cENhY2hlKCktPmxv
b2t1cE9yQ3JlYXRlKGEwLnRvU3RyaW5nKGV4ZWMpLCBOb0ZsYWdzKTsKKyAgICAgICAgcmVnID0g
UmVnRXhwOjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwgYTAudG9TdHJpbmcoZXhlYyksIE5v
RmxhZ3MpOwogICAgIH0KICAgICBSZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhwQ29uc3RydWN0b3Ig
PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cENvbnN0cnVjdG9yKCk7CiAgICAg
aW50IHBvczsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95055</attachid>
            <date>2011-05-26 15:18:30 -0700</date>
            <delta_ts>2011-05-26 15:23:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61554-20110526151829.patch</filename>
            <type>text/plain</type>
            <size>13848</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODc0MzgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDU2
Y2YyZWJhMTI4YmE2NDc1M2NlODFiOWE3NTAwNWY0YmM0ZWNjZjMuLjMxMzY4ZGEzOGIzZGMyOGMx
ODVjMWM0NjhjZDU3NWJjYjFkMWIyZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDQ0IEBACisyMDExLTA1LTI2ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBSZWdF
eHBDYWNoZSBhIHdlYWsgbWFwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MTU1NAorCisgICAgICAgIFN3aXRjaCB0byBhIHdlYWsgbWFwIGZvciB0aGUg
cmVnZXhwIGNhY2hlLCBhbmQgaGlkZSB0aGF0CisgICAgICAgIGJlaGF2aW91ciBiZWhpbmQgUmVn
RXhwOjpjcmVhdGUuCisKKyAgICAgICAgV2hlbiBhIFJlZ0V4cCBpcyBjb21waWxlZCBpdCBhdHRl
bXB0cyB0byBhZGQgaXRzZWxmIHRvCisgICAgICAgIHRoZSAic3Ryb25nIiBjYWNoZS4gIFRoaXMg
Y2FjaGUgaXMgYSBzaW1wbGUgcm91bmQtcm9iaW4KKyAgICAgICAgYnVmZmVyIGFzIHdhcyB0aGUg
b2xkIHN0cm9uZyBjYWNoZS4gIEhhcHBpbHkgdGhpcyBjYW4KKyAgICAgICAgYmUgc21hbGxlciB0
aGFuIHRoZSBvbGQgc3Ryb25nIGNhY2hlIGFzIFJlZ0V4cHMgYXJlIG9ubHkKKyAgICAgICAgYWRk
ZWQgd2hlbiB0aGV5J3JlIGNvbXBpbGVkIHNvIGl0IGlzIHVuZGVyIGxlc3MgcHJlc3N1cmUKKyAg
ICAgICAgdG8gZXZpY3QuCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cDoKKyAgICAgICAgKEpTQzo6UmVnRXhwTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBy
dW50aW1lL1JlZ0V4cC5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6UmVnRXhwKToKKyAgICAg
ICAgKEpTQzo6UmVnRXhwOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpSZWdFeHA6Om1hdGNoKToK
KyAgICAgICAgKiBydW50aW1lL1JlZ0V4cC5oOgorICAgICAgICAoSlNDOjpSZWdFeHA6OmdjU2hv
dWxkSW52YWxpZGF0ZUNvZGUpOgorICAgICAgICAoSlNDOjpSZWdFeHA6Omhhc0NvZGUpOgorICAg
ICAgICAoSlNDOjpSZWdFeHA6OmtleSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDYWNoZS5j
cHA6CisgICAgICAgIChKU0M6OlJlZ0V4cENhY2hlOjpsb29rdXBPckNyZWF0ZSk6CisgICAgICAg
IChKU0M6OlJlZ0V4cENhY2hlOjpSZWdFeHBDYWNoZSk6CisgICAgICAgIChKU0M6OlJlZ0V4cENh
Y2hlOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgIChKU0M6OlJlZ0V4cENh
Y2hlOjpmaW5hbGl6ZSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDYWNoZS5oOgorICAgICAg
ICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1
Y3RSZWdFeHApOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcDoKKyAgICAg
ICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jQ29tcGlsZSk6CisgICAgICAgICogcnVudGltZS9TdHJp
bmdQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNNYXRjaCk6Cisg
ICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1NlYXJjaCk6CisKIDIwMTEtMDUtMjYgIFJ5b3N1
a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHAKaW5kZXggMDM1NzhjZmMzOTFmNjI4ZGRkM2EzYzQ0NWNiNWFhYjM1OTk2NzI1
MS4uYjlkMWMwYWRhNmVjZmFiYTdiM2I3NDRjZTJjNzY5Yjc1MzBmMzAwNyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAt
MTI1LDggKzEyNSw3IEBAIFJlZ2lzdGVySUQqIFJlZ0V4cE5vZGU6OmVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkCiB7CiAgICAgaWYgKGRzdCA9
PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gZ2VuZXJhdG9yLmVtaXROZXdSZWdFeHAoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0
KSwKLSAgICAgICAgZ2VuZXJhdG9yLmdsb2JhbERhdGEoKS0+cmVnRXhwQ2FjaGUoKS0+bG9va3Vw
T3JDcmVhdGUobV9wYXR0ZXJuLnVzdHJpbmcoKSwgcmVnRXhwRmxhZ3MobV9mbGFncy51c3RyaW5n
KCkpKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TmV3UmVnRXhwKGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCksIFJlZ0V4cDo6Y3JlYXRlKGdlbmVyYXRvci5nbG9iYWxEYXRhKCks
IG1fcGF0dGVybi51c3RyaW5nKCksIHJlZ0V4cEZsYWdzKG1fZmxhZ3MudXN0cmluZygpKSkpOwog
fQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhpc05vZGUgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cC5jcHAKaW5kZXggNDEwMTcyMzQ3ZWNmZGNiMjU0NTc5ZTIxZGNkYzJlZTY1ZTJkMzQ5
Mi4uNzBiNWZjODkyZGViZDhhZmZiODlmZGY5NWRiYTdkYjI3ZDJkMjQzYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVk
ZSAiUmVnRXhwLmgiCiAKICNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUgIlJlZ0V4cENhY2hl
LmgiCiAjaW5jbHVkZSAieWFyci9ZYXJyLmgiCiAjaW5jbHVkZSAieWFyci9ZYXJySklULmgiCiAj
aW5jbHVkZSA8c3RkaW8uaD4KQEAgLTc1LDcgKzc2LDcgQEAgc3RydWN0IFJlZ0V4cFJlcHJlc2Vu
dGF0aW9uIHsKICAgICBPd25QdHI8WWFycjo6Qnl0ZWNvZGVQYXR0ZXJuPiBtX3JlZ0V4cEJ5dGVj
b2RlOwogfTsKIAotaW5saW5lIFJlZ0V4cDo6UmVnRXhwKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgY29uc3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywgUmVnRXhwRmxhZ3MgZmxhZ3MpCitSZWdF
eHA6OlJlZ0V4cChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHBhdHRl
cm5TdHJpbmcsIFJlZ0V4cEZsYWdzIGZsYWdzKQogICAgIDogSlNDZWxsKCpnbG9iYWxEYXRhLCBn
bG9iYWxEYXRhLT5yZWdFeHBTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX3N0YXRlKE5vdENvbXBp
bGVkKQogICAgICwgbV9wYXR0ZXJuU3RyaW5nKHBhdHRlcm5TdHJpbmcpCkBAIC0xMDAsMTEgKzEw
MSw3IEBAIFJlZ0V4cDo6flJlZ0V4cCgpCiAKIFJlZ0V4cCogUmVnRXhwOjpjcmVhdGUoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBSZWdFeHBG
bGFncyBmbGFncykKIHsKLSAgICBSZWdFeHAqIHJlcyA9IG5ldyAoZ2xvYmFsRGF0YSkgUmVnRXhw
KGdsb2JhbERhdGEsIHBhdHRlcm5TdHJpbmcsIGZsYWdzKTsKLSNpZiBFTkFCTEUoUkVHRVhQX1RS
QUNJTkcpCi0gICAgZ2xvYmFsRGF0YS0+YWRkUmVnRXhwVG9UcmFjZShyZXMpOwotI2VuZGlmCi0g
ICAgcmV0dXJuIHJlczsKKyAgICByZXR1cm4gZ2xvYmFsRGF0YS0+cmVnRXhwQ2FjaGUoKS0+bG9v
a3VwT3JDcmVhdGUocGF0dGVyblN0cmluZywgZmxhZ3MpOwogfQogCiB2b2lkIFJlZ0V4cDo6Y29t
cGlsZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCkBAIC0xMTgsNiArMTE1LDggQEAgdm9pZCBS
ZWdFeHA6OmNvbXBpbGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogICAgICAgICByZXR1cm47
CiAgICAgfQogCisgICAgZ2xvYmFsRGF0YS0+cmVnRXhwQ2FjaGUoKS0+YWRkVG9TdHJvbmdDYWNo
ZSh0aGlzKTsKKwogICAgIEFTU0VSVChtX251bVN1YnBhdHRlcm5zID09IHBhdHRlcm4ubV9udW1T
dWJwYXR0ZXJucyk7CiAKICAgICBtX3N0YXRlID0gQnl0ZUNvZGU7CkBAIC0xNTYsNiArMTU1LDcg
QEAgaW50IFJlZ0V4cDo6bWF0Y2goSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBVU3Ry
aW5nJiBzLCBpbnQgc3RhcnRPZmZzZXQsIFYKIAogICAgIGlmIChtX3N0YXRlICE9IFBhcnNlRXJy
b3IpIHsKICAgICAgICAgY29tcGlsZUlmTmVjZXNzYXJ5KGdsb2JhbERhdGEpOworCiAgICAgICAg
IGludCBvZmZzZXRWZWN0b3JTaXplID0gKG1fbnVtU3VicGF0dGVybnMgKyAxKSAqIDI7CiAgICAg
ICAgIGludCogb2Zmc2V0VmVjdG9yOwogICAgICAgICBWZWN0b3I8aW50LCAzMj4gbm9uUmV0dXJu
ZWRPdmVjdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAppbmRleCA5NmVm
MzdhZjNmYTFjMjhiYWMzYjFlMDc1YzVjNWFjMDE2MTdmNzIzLi41N2Q5YmVlMGY1NGY1NzMwNTk4
ZDE1MTc3NmJlYjg4OTZkYjUzYmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHAuaApAQCAtNTMsNiArNTMsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBtYXRj
aChKU0dsb2JhbERhdGEmLCBjb25zdCBVU3RyaW5nJiwgaW50IHN0YXJ0T2Zmc2V0LCBWZWN0b3I8
aW50LCAzMj4qIG92ZWN0b3IgPSAwKTsKICAgICAgICAgdW5zaWduZWQgbnVtU3VicGF0dGVybnMo
KSBjb25zdCB7IHJldHVybiBtX251bVN1YnBhdHRlcm5zOyB9CiAKKyAgICAgICAgYm9vbCBoYXND
b2RlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fcmVwcmVzZW50YXRpb247Cisg
ICAgICAgIH0KKwogICAgICAgICB2b2lkIGludmFsaWRhdGVDb2RlKCk7CiAgICAgICAgIAogI2lm
IEVOQUJMRShSRUdFWFBfVFJBQ0lORykKQEAgLTY1LDggKzcwLDExIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25z
dCBDbGFzc0luZm8gc19pbmZvOwotICAgICAgICAKKworICAgICAgICBSZWdFeHBLZXkga2V5KCkg
eyByZXR1cm4gUmVnRXhwS2V5KG1fZmxhZ3MsIG1fcGF0dGVyblN0cmluZyk7IH0KKwogICAgIHBy
aXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBSZWdFeHBDYWNoZTsKICAgICAgICAgUmVnRXhw
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgcGF0dGVybiwgUmVnRXhw
RmxhZ3MpOwogCiAgICAgICAgIGVudW0gUmVnRXhwU3RhdGUgewpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCmluZGV4IDY3ZTAxM2ZkZWExYWEzMGI1ZTZk
YTRiNWE3YmRkMDFiOWZkYTExOWUuLmI5MTYyZmEwNzI5YzI5NTIxZmQ3Y2Q0OWI5NmI5YjJhMmJm
M2JhMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENh
Y2hlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5j
cHAKQEAgLTM0LDQ0ICszNCw0MiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogUmVnRXhwKiBSZWdFeHBD
YWNoZTo6bG9va3VwT3JDcmVhdGUoY29uc3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywgUmVnRXhw
RmxhZ3MgZmxhZ3MpCiB7Ci0gICAgaWYgKHBhdHRlcm5TdHJpbmcubGVuZ3RoKCkgPCBtYXhDYWNo
ZWFibGVQYXR0ZXJuTGVuZ3RoKSB7Ci0gICAgICAgIHBhaXI8UmVnRXhwQ2FjaGVNYXA6Oml0ZXJh
dG9yLCBib29sPiByZXN1bHQgPSBtX2NhY2hlTWFwLmFkZChSZWdFeHBLZXkoZmxhZ3MsIHBhdHRl
cm5TdHJpbmcpLCBTdHJvbmc8UmVnRXhwPigpKTsKLSAgICAgICAgaWYgKCFyZXN1bHQuc2Vjb25k
KQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5maXJzdC0+c2Vjb25kLmdldCgpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gY3JlYXRlKHBhdHRlcm5TdHJpbmcsIGZsYWdzLCBy
ZXN1bHQuZmlyc3QpOwotICAgIH0KLSAgICByZXR1cm4gY3JlYXRlKHBhdHRlcm5TdHJpbmcsIGZs
YWdzLCBtX2NhY2hlTWFwLmVuZCgpKTsKKyAgICBSZWdFeHBLZXkga2V5KGZsYWdzLCBwYXR0ZXJu
U3RyaW5nKTsKKyAgICBSZWdFeHBDYWNoZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9jYWNoZU1h
cC5maW5kKGtleSk7CisgICAgaWYgKHJlc3VsdCAhPSBtX2NhY2hlTWFwLmVuZCgpKQorICAgICAg
ICByZXR1cm4gcmVzdWx0LT5zZWNvbmQuZ2V0KCk7CisgICAgUmVnRXhwKiByZWdFeHAgPSBuZXcg
KG1fZ2xvYmFsRGF0YSkgUmVnRXhwKG1fZ2xvYmFsRGF0YSwgcGF0dGVyblN0cmluZywgZmxhZ3Mp
OworI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKKyAgICBtX2dsb2JhbERhdGEtPmFkZFJlZ0V4
cFRvVHJhY2UocmVnRXhwKTsKKyNlbmRpZgorICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBzZWNvbmQg
bG9va3VwIHRvIGFkZCB0aGUgUmVnRXhwIGFzCisgICAgLy8gYWxsb2NhdGluZyBpdCBtYXkgaGF2
ZSBjYXVzZWQgYSBnYyBjeWNsZSwgd2hpY2ggaW4KKyAgICAvLyB0dXJuIG1heSBoYXZlIHJlbW92
ZWQgaXRlbXMgZnJvbSB0aGUgY2FjaGUuCisgICAgbV9jYWNoZU1hcC5hZGQoa2V5LCBXZWFrPFJl
Z0V4cD4oKm1fZ2xvYmFsRGF0YSwgcmVnRXhwLCB0aGlzKSk7CisgICAgcmV0dXJuIHJlZ0V4cDsK
IH0KIAotUmVnRXhwKiBSZWdFeHBDYWNoZTo6Y3JlYXRlKGNvbnN0IFVTdHJpbmcmIHBhdHRlcm5T
dHJpbmcsIFJlZ0V4cEZsYWdzIGZsYWdzLCBSZWdFeHBDYWNoZU1hcDo6aXRlcmF0b3IgaXRlcmF0
b3IpIAorUmVnRXhwQ2FjaGU6OlJlZ0V4cENhY2hlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkK
KyAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQogewotICAgIFJlZ0V4cCogcmVnRXhwID0g
UmVnRXhwOjpjcmVhdGUobV9nbG9iYWxEYXRhLCBwYXR0ZXJuU3RyaW5nLCBmbGFncyk7Ci0gICAg
aWYgKHBhdHRlcm5TdHJpbmcubGVuZ3RoKCkgPj0gbWF4Q2FjaGVhYmxlUGF0dGVybkxlbmd0aCkK
LSAgICAgICAgcmV0dXJuIHJlZ0V4cDsKLQotICAgIFJlZ0V4cEtleSBrZXkgPSBSZWdFeHBLZXko
ZmxhZ3MsIHBhdHRlcm5TdHJpbmcpOwotICAgIGl0ZXJhdG9yLT5maXJzdCA9IGtleTsKLSAgICBp
dGVyYXRvci0+c2Vjb25kLnNldCgqbV9nbG9iYWxEYXRhLCByZWdFeHApOwotCi0gICAgKyttX25l
eHRLZXlUb0V2aWN0OwotICAgIGlmIChtX25leHRLZXlUb0V2aWN0ID09IG1heENhY2hlYWJsZUVu
dHJpZXMpIHsKLSAgICAgICAgbV9uZXh0S2V5VG9FdmljdCA9IDA7Ci0gICAgICAgIG1faXNGdWxs
ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG1faXNGdWxsKQotICAgICAgICBtX2NhY2hlTWFwLnJl
bW92ZShSZWdFeHBLZXkocGF0dGVybktleUFycmF5W21fbmV4dEtleVRvRXZpY3RdLmZsYWdzVmFs
dWUsIHBhdHRlcm5LZXlBcnJheVttX25leHRLZXlUb0V2aWN0XS5wYXR0ZXJuKSk7Cit9CiAKLSAg
ICBwYXR0ZXJuS2V5QXJyYXlbbV9uZXh0S2V5VG9FdmljdF0uZmxhZ3NWYWx1ZSA9IGtleS5mbGFn
c1ZhbHVlOwotICAgIHBhdHRlcm5LZXlBcnJheVttX25leHRLZXlUb0V2aWN0XS5wYXR0ZXJuID0g
cGF0dGVyblN0cmluZy5pbXBsKCk7Ci0gICAgcmV0dXJuIHJlZ0V4cDsKK3ZvaWQgUmVnRXhwQ2Fj
aGU6OmZpbmFsaXplKEhhbmRsZTxVbmtub3duPiBoYW5kbGUsIHZvaWQqKQoreworICAgIFJlZ0V4
cCogcmVnRXhwID0gc3RhdGljX2Nhc3Q8UmVnRXhwKj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsK
KyAgICBtX2NhY2hlTWFwLnJlbW92ZShyZWdFeHAtPmtleSgpKTsKKyAgICByZWdFeHAtPmludmFs
aWRhdGVDb2RlKCk7CiB9CiAKLVJlZ0V4cENhY2hlOjpSZWdFeHBDYWNoZShKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEpCi0gICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKLSAgICAsIG1fbmV4
dEtleVRvRXZpY3QoLTEpCi0gICAgLCBtX2lzRnVsbChmYWxzZSkKK3ZvaWQgUmVnRXhwQ2FjaGU6
OmFkZFRvU3Ryb25nQ2FjaGUoUmVnRXhwKiByZWdFeHApCiB7CisgICAgVVN0cmluZyBwYXR0ZXJu
ID0gcmVnRXhwLT5wYXR0ZXJuKCk7CisgICAgaWYgKHBhdHRlcm4ubGVuZ3RoKCkgPiBtYXhTdHJv
bmdDYWNoZWFibGVQYXR0ZXJuTGVuZ3RoKQorICAgICAgICByZXR1cm47CisgICAgbV9zdHJvbmdD
YWNoZVttX25leHRFbnRyeUluU3Ryb25nQ2FjaGVdLnNldCgqbV9nbG9iYWxEYXRhLCByZWdFeHAp
OworICAgIG1fbmV4dEVudHJ5SW5TdHJvbmdDYWNoZSsrOworICAgIGlmIChtX25leHRFbnRyeUlu
U3Ryb25nQ2FjaGUgPT0gbWF4U3Ryb25nQ2FjaGVhYmxlRW50cmllcykKKyAgICAgICAgbV9uZXh0
RW50cnlJblN0cm9uZ0NhY2hlID0gMDsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cENhY2hlLmgKaW5kZXggM2VmNmI3MDlmOTQ1NzJlYzAwNzU5Yzg4NGViNTQ1
MGYzZWE0MDE4Yi4uZWZiMzQzNzQzYTczNGU3ZmIxZjgwZjY2YzE4NWE3MDExNmQ3MTkzMSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oCkBAIC0yOSw2ICsy
OSw3IEBACiAjaW5jbHVkZSAiUmVnRXhwS2V5LmgiCiAjaW5jbHVkZSAiU3Ryb25nLmgiCiAjaW5j
bHVkZSAiVVN0cmluZy5oIgorI2luY2x1ZGUgIldlYWsuaCIKICNpbmNsdWRlIDx3dGYvRml4ZWRB
cnJheS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKQEAgLTM3LDMxICszOCwyNyBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgUmVnRXhwQ2FjaGUgewotCi10eXBlZGVmIEhhc2hN
YXA8UmVnRXhwS2V5LCBTdHJvbmc8UmVnRXhwPiA+IFJlZ0V4cENhY2hlTWFwOworY2xhc3MgUmVn
RXhwQ2FjaGUgOiBwcml2YXRlIFdlYWtIYW5kbGVPd25lciB7CitmcmllbmQgY2xhc3MgUmVnRXhw
OwordHlwZWRlZiBIYXNoTWFwPFJlZ0V4cEtleSwgV2VhazxSZWdFeHA+ID4gUmVnRXhwQ2FjaGVN
YXA7CiAKIHB1YmxpYzoKLSAgICBSZWdFeHAqIGxvb2t1cE9yQ3JlYXRlKGNvbnN0IFVTdHJpbmcm
IHBhdHRlcm5TdHJpbmcsIFJlZ0V4cEZsYWdzKTsKLSAgICBSZWdFeHAqIGNyZWF0ZShjb25zdCBV
U3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBSZWdFeHBGbGFncywgUmVnRXhwQ2FjaGVNYXA6Oml0ZXJh
dG9yKTsKICAgICBSZWdFeHBDYWNoZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpOwogCiBwcml2
YXRlOgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhDYWNoZWFibGVQYXR0ZXJuTGVuZ3Ro
ID0gMjU2OworICAgIAorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhTdHJvbmdDYWNoZWFi
bGVQYXR0ZXJuTGVuZ3RoID0gMjU2OwogCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIC8vIFRoZSBS
ZWdFeHBDYWNoZSBjYW4gY3VycmVudGx5IGhvbGQgb250byBtdWx0aXBsZSBNYiBvZiBtZW1vcnk7
Ci0gICAgLy8gYXMgYSBzaG9ydC10ZXJtIGZpeCBzb21lIGVtYmVkZGVkIHBsYXRmb3JtcyBtYXkg
d2lzaCB0byByZWR1Y2UgdGhlIGNhY2hlIHNpemUuCi0gICAgc3RhdGljIGNvbnN0IGludCBtYXhD
YWNoZWFibGVFbnRyaWVzID0gMzI7Ci0jZWxzZQotICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4Q2Fj
aGVhYmxlRW50cmllcyA9IDI1NjsKLSNlbmRpZgorICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4U3Ry
b25nQ2FjaGVhYmxlRW50cmllcyA9IDMyOwogCi0gICAgRml4ZWRBcnJheTxSZWdFeHBLZXksIG1h
eENhY2hlYWJsZUVudHJpZXM+IHBhdHRlcm5LZXlBcnJheTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlu
YWxpemUoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKKworICAgIFJlZ0V4cCogbG9v
a3VwT3JDcmVhdGUoY29uc3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywgUmVnRXhwRmxhZ3MpOwor
ICAgIHZvaWQgYWRkVG9TdHJvbmdDYWNoZShSZWdFeHAqKTsKICAgICBSZWdFeHBDYWNoZU1hcCBt
X2NhY2hlTWFwOworICAgIGludCBtX25leHRFbnRyeUluU3Ryb25nQ2FjaGU7CisgICAgV1RGOjpG
aXhlZEFycmF5PFN0cm9uZzxSZWdFeHA+LCBtYXhTdHJvbmdDYWNoZWFibGVFbnRyaWVzPiBtX3N0
cm9uZ0NhY2hlOwogICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwotICAgIGludCBtX25l
eHRLZXlUb0V2aWN0OwotICAgIGJvb2wgbV9pc0Z1bGw7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0
cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVj
dG9yLmNwcAppbmRleCBiYzBiNTczNzY4OGRiYjg2YzY4ZTljMTRkNDQwMmIwNzc1M2YwMTQ2Li4x
NTQ3ODEzY2NjNjdiMmFlNDZhM2QzNmVhYzJkYzk0ZWU5Y2QwODMzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCkBAIC0zMTcs
NyArMzE3LDcgQEAgSlNPYmplY3QqIGNvbnN0cnVjdFJlZ0V4cChFeGVjU3RhdGUqIGV4ZWMsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEEKICAgICAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsICJJbnZhbGlkIGZsYWdzIHN1
cHBsaWVkIHRvIFJlZ0V4cCBjb25zdHJ1Y3Rvci4iKSk7CiAgICAgfQogCi0gICAgUmVnRXhwKiBy
ZWdFeHAgPSBleGVjLT5nbG9iYWxEYXRhKCkucmVnRXhwQ2FjaGUoKS0+bG9va3VwT3JDcmVhdGUo
cGF0dGVybiwgZmxhZ3MpOworICAgIFJlZ0V4cCogcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUoJmV4
ZWMtPmdsb2JhbERhdGEoKSwgcGF0dGVybiwgZmxhZ3MpOwogICAgIGlmICghcmVnRXhwLT5pc1Zh
bGlkKCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9y
KGV4ZWMsIHJlZ0V4cC0+ZXJyb3JNZXNzYWdlKCkpKTsKICAgICByZXR1cm4gbmV3IChleGVjKSBS
ZWdFeHBPYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBnbG9iYWxPYmplY3QtPnJl
Z0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAKaW5kZXggYTMxZjFjZjFmZDM5ODQxZjQxOGU5YzVk
YTIyMzA0MmJmMmY2YTdkMC4uMjZmNjIzMzBhMGQ1ZWMyMjVlMTUzODc2OWNlYjdhMjVlMzg4NzBj
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90
eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5
cGUuY3BwCkBAIC0xMjIsNyArMTIyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBy
ZWdFeHBQcm90b0Z1bmNDb21waWxlKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgIGlmIChm
bGFncyA9PSBJbnZhbGlkRmxhZ3MpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCAiSW52YWxpZCBmbGFncyBzdXBwbGllZCB0
byBSZWdFeHAgY29uc3RydWN0b3IuIikpOwogICAgICAgICB9Ci0gICAgICAgIHJlZ0V4cCA9IGV4
ZWMtPmdsb2JhbERhdGEoKS5yZWdFeHBDYWNoZSgpLT5sb29rdXBPckNyZWF0ZShwYXR0ZXJuLCBm
bGFncyk7CisgICAgICAgIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKCZleGVjLT5nbG9iYWxEYXRh
KCksIHBhdHRlcm4sIGZsYWdzKTsKICAgICB9CiAKICAgICBpZiAoIXJlZ0V4cC0+aXNWYWxpZCgp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90
eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5j
cHAKaW5kZXggZTcwYjM4ODM2Y2EzMTM2OGZlZTQ4NmY3OWYxZmQ1MmZjOGI5NTI2My4uY2U4OGE0
NjVlNWVlYzc1MmJmMjQxMWFhOTA5Y2ExOTM0YzJlYzBkZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCkBAIC02MTUsNyArNjE1LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNNYXRjaChFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgICAgICAqICBJZiByZWdleHAgaXMgbm90IGFuIG9iamVjdCB3aG9z
ZSBbW0NsYXNzXV0gcHJvcGVydHkgaXMgIlJlZ0V4cCIsIGl0IGlzCiAgICAgICAgICAqICByZXBs
YWNlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24gbmV3IFJlZ0V4cChyZWdleHAp
LgogICAgICAgICAgKi8KLSAgICAgICAgcmVnID0gZXhlYy0+Z2xvYmFsRGF0YSgpLnJlZ0V4cENh
Y2hlKCktPmxvb2t1cE9yQ3JlYXRlKGEwLnRvU3RyaW5nKGV4ZWMpLCBOb0ZsYWdzKTsKKyAgICAg
ICAgcmVnID0gUmVnRXhwOjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwgYTAudG9TdHJpbmco
ZXhlYyksIE5vRmxhZ3MpOwogICAgIH0KICAgICBSZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhwQ29u
c3RydWN0b3IgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cENvbnN0cnVjdG9y
KCk7CiAgICAgaW50IHBvczsKQEAgLTY2NCw3ICs2NjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NlYXJjaChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAg
ICAqICBJZiByZWdleHAgaXMgbm90IGFuIG9iamVjdCB3aG9zZSBbW0NsYXNzXV0gcHJvcGVydHkg
aXMgIlJlZ0V4cCIsIGl0IGlzCiAgICAgICAgICAqICByZXBsYWNlZCB3aXRoIHRoZSByZXN1bHQg
b2YgdGhlIGV4cHJlc3Npb24gbmV3IFJlZ0V4cChyZWdleHApLgogICAgICAgICAgKi8KLSAgICAg
ICAgcmVnID0gZXhlYy0+Z2xvYmFsRGF0YSgpLnJlZ0V4cENhY2hlKCktPmxvb2t1cE9yQ3JlYXRl
KGEwLnRvU3RyaW5nKGV4ZWMpLCBOb0ZsYWdzKTsKKyAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVh
dGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwgYTAudG9TdHJpbmcoZXhlYyksIE5vRmxhZ3MpOwogICAg
IH0KICAgICBSZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhwQ29uc3RydWN0b3IgPSBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cENvbnN0cnVjdG9yKCk7CiAgICAgaW50IHBvczsK
</data>
<flag name="review"
          id="88472"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>