<?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>26057</bug_id>
          
          <creation_ts>2009-05-27 23:28:32 -0700</creation_ts>
          <short_desc>StringImpl should share buffers with UString.</short_desc>
          <delta_ts>2009-06-01 11:50:16 -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>Text</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>23175</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="David Levin">levin</reporter>
          <assigned_to name="David Levin">levin</assigned_to>
          <cc>mjs</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>123362</commentid>
    <comment_count>0</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-05-27 23:28:32 -0700</bug_when>
    <thetext>see summary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123365</commentid>
    <comment_count>1</comment_count>
      <attachid>30729</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-05-28 00:01:20 -0700</bug_when>
    <thetext>Created attachment 30729
Proposed fix.

Some perf test results:

On http://www.hixie.ch/tests/adhoc/perf/dom/artificial/core/001.html
the time went from 78ms to 40ms for append (other times remained constant).

On http://www.hixie.ch/tests/adhoc/perf/dom/artificial/core/002.html,
the time went from 3900ms to 2600ms.

For http://dromaeo.com/?dom, the time for DomModification improved by ~6%.  Other tests in dom seemed to be faster across several runs but within the margin of error (except DOM Attributes which was slightly ~1.5% worse).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123368</commentid>
    <comment_count>2</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-05-28 00:27:39 -0700</bug_when>
    <thetext>Adding Oliver to tempt him to review it since he review the UString portion before.  Also this patch will allow WorkerContext::scriptImported to be finished.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123373</commentid>
    <comment_count>3</comment_count>
      <attachid>30730</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-05-28 01:47:37 -0700</bug_when>
    <thetext>Created attachment 30730
Proposed fix.

Fixed some comment issues noted by bdash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123374</commentid>
    <comment_count>4</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-05-28 01:48:31 -0700</bug_when>
    <thetext>Adding mjs because I&apos;ve been told he may be a good candidate to review this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123390</commentid>
    <comment_count>5</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-05-28 04:17:25 -0700</bug_when>
    <thetext>Love the cited perf results. Some comments below:

I&apos;d consider citing the performance results in the ChangeLog.

I don&apos;t think you need quite this long a comment to explain the exact value. It seems fine to just mention the mandatory minimum here.

+// This number must be at least 1 to avoid sharing empty, null and 1 character strings from SmallStrings.
+// Doing the sharing cost 12 bytes, so it seemed reasonable that the number of bytes should be larger than that.
+// After testing with dom benchmarks like http://dromaeo.com/?dom, it seems that a relatively low number gives
+// good performance results.
+static const int minLengthToShare = 30;


This comment is also lengthy, and in addition false - the values are 30 and 20 so they are not the same.

+// This number must be at least 1 to avoid sharing empty, null and 1 character strings from SmallStrings.
+// Doing the sharing cost 12 bytes, so it seemed reasonable that the number of bytes should be larger than that.
+// After testing with dom benchmarks like http://dromaeo.com/?dom, it seems that a relatively low number gives
+// good performance results.  (This number may vary independently from the value in JavaScriptCore/runtime/Ustring.cpp
+// but they happen to have the same value at present.)
+static const unsigned minLengthToShare = 20;



share() seems like a subtle name for such a simple method. I wonder if a more explicit name like createSharedCopy() might be better. I&apos;m not entirely sure though - just something to consider.

+PassRefPtr&lt;StringImpl&gt; StringImpl::share(const JSC::UString&amp; str)



 PassRefPtr&lt;StringImpl&gt; StringImpl::copy() is meant to explicitly make a copy, for example for crazy cases where someone may poke directly into the buffer. I am not sure it&apos;s sound to make it share the buffer instead. How do we know this is safe?


The only issue I am seriously concerned about is the copy() thing - the rest are minor and optional to deal with. r- to revert the copy() part of the change or explain clearly why it is sound.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123405</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-05-28 07:46:57 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt;  PassRefPtr&lt;StringImpl&gt; StringImpl::copy() is meant to explicitly make a copy,
&gt; for example for crazy cases where someone may poke directly into the buffer. I
&gt; am not sure it&apos;s sound to make it share the buffer instead. How do we know this
&gt; is safe?

I believe currently it&apos;s used for cross-thread cases where we intentionally don&apos;t want to try to share the reference count. I don&apos;t think there are any &quot;poke directly into the buffer&quot; cases. But sharing a single reference count in this case would not be safe.

Since StringImpl&apos;s are immutable, we only use copy() when we have a cross-thread issue. Maybe eventually we can get rid of it entirely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123528</commentid>
    <comment_count>7</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-05-29 01:36:36 -0700</bug_when>
    <thetext>I found every usage (by changing the function name and compiling) of String::copy() and looked at them.  All of them are for cross thread usage.  

However, it was a good thing to review all of these because I didn&apos;t realize that some of them call the copy() method the first time on a different thread.  This is safe using the previous implementation (although you have to be *very* careful to not accidentally ref count the string on the other thread) but not with my current implementation so I&apos;ll revert this implementation of copy().

As a reference, here&apos;s all the copy method calls and comments about any unusual aspects.

// Storage related
WebCore/storage/ChangeVersionWrapper.cpp:37,38
WebCore/storage/DatabaseTracker.cpp:793
WebCore/storage/Database.cpp:130, 240, 276, 475, 579, 604, 615 -- Used for another thread *but* the copy is done on the other thread (not the owning thread).
WebCore/storage/LocalStorage.cpp:64
WebCore/storage/LocalStorageArea.cpp:284 
WebCore/storage/OriginQuotaManager.cpp:82
WebCore/storage/SQLStatement.cpp:53
WebCore/storage/SQLTransaction.cpp:99 -- Does an unnecessary copy -- Filed https://bugs.webkit.org/show_bug.cgi?id=26074.
WebCore/storage/SQLError.h:44,47 -- x-thread *but* the copy is done on the other thread (not the owning thread).
WebCore/storage/StorageMap.cpp:152,155
WebCore/platform/sql/SQLValue.cpp:37,46

// x-thread copy support for these structures
WebCore/platform/KURL.cpp:534
WebCore/page/SecurityOrigin.cpp:83,84,85
WebCore/platform/network/HTTPHeaderMap.cpp:48
WebCore/platform/network/ResourceErrorBase.cpp:37,39,40
WebCore/platform/network/ResourceRequestBase.cpp:76,82
WebCore/platform/network/ResourceResponseBase.cpp:65,67,68,70

// misc
WebCore/loader/icon/IconDatabase.cpp:129,228,264,313,322,406,414,489,513,590,591,848,854
WebCore/dom/MessagePort.cpp:76

// Worker related
WebCore/loader/WorkerThreadableLoader.cpp:99
WebCore/loader/CrossOriginPreflightResultCache.cpp:148
WebCore/platform/CrossThreadCopier.cpp:44
WebCore/workers/WorkerMessagingProxy.cpp:54,81,109,111
WebCore/workers/WorkerRunLoop.cpp:80,205
WebCore/workers/WorkerThread.cpp:60,61</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123538</commentid>
    <comment_count>8</comment_count>
      <attachid>30773</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-05-29 03:45:36 -0700</bug_when>
    <thetext>Created attachment 30773
Proposed fix.

I believe that I&apos;ve addressed all feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123792</commentid>
    <comment_count>9</comment_count>
      <attachid>30773</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-01 00:26:13 -0700</bug_when>
    <thetext>Comment on attachment 30773
Proposed fix.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123861</commentid>
    <comment_count>10</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-01 11:50:16 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/44325</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30729</attachid>
            <date>2009-05-28 00:01:20 -0700</date>
            <delta_ts>2009-05-28 01:47:37 -0700</delta_ts>
            <desc>Proposed fix.</desc>
            <filename>bug26057.txt</filename>
            <type>text/plain</type>
            <size>16177</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA3MjdiMjEwLi43YTFmOTM5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMDktMDUtMjcgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAyNjA1NzogU3Ry
aW5nSW1wbCBzaG91bGQgc2hhcmUgYnVmZmVycyB3aXRoIFVTdHJpbmcgYW5kIGNyb3NzLXRocmVh
ZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2MDU3
CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICogcnVudGltZS9VU3Ry
aW5nLmNwcDoKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6QmFzZVN0cmluZzo6c2hhcmVkQnVmZmVy
KTogT25seSBkbyB0aGUgc2hhcmluZyB3aGVuCisgICAgICAgIHRoZSBidWZmZXIgZXhjZWVkcyBh
IGNlcnRhaW4gc2l6ZS4gIFRoZSBzaXplIHdhcyB0dW5lZCBieSBydW5uaW5nCisgICAgICAgIHZh
cmlvdXMgZG9tIGJlbmNobWFya3Mgd2l0aCBudW1iZXJzIHJhbmdpbmcgZnJvbSAyMCB0byA4MDAg
YW5kIGZpbmRpbmcKKyAgICAgICAgYSBwbGFjZSB0aGF0IHNlZW1lZCB0byBkbyB0aGUgYmVzdCBv
dmVyYWxsLgorCiAyMDA5LTA1LTI3ICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxndXN0YXZvLm5v
cm9uaGFAY29sbGFib3JhLmNvLnVrPgogCiAgICAgICAgIFVucmV2aWV3ZWQgKG1ha2UgZGlzdGNo
ZWNrKSBidWlsZCBmaXg7IGFkZGluZyBtaXNzaW5nIGhlYWRlcnMuCmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5leHAKaW5kZXggYjBjYzMzZi4uZDRhNTg5YyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZXhwCisrKyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmV4cApAQCAtMjE3LDEwICsyMTcsMTIgQEAgX19aTjNKU0M3UHJvZmlsZTEwcmVzdG9yZUFsbEV2
CiBfX1pOM0pTQzdQcm9maWxlNWZvY3VzRVBLTlNfMTFQcm9maWxlTm9kZUUKIF9fWk4zSlNDN1By
b2ZpbGU3ZXhjbHVkZUVQS05TXzExUHJvZmlsZU5vZGVFCiBfX1pOM0pTQzdQcm9maWxlN2ZvckVh
Y2hFTU5TXzExUHJvZmlsZU5vZGVFRnZ2RQorX19aTjNKU0M3VVN0cmluZzEwQmFzZVN0cmluZzEy
c2hhcmVkQnVmZmVyRXYKIF9fWk4zSlNDN1VTdHJpbmczUmVwMTFjb21wdXRlSGFzaEVQS2NpCiBf
X1pOM0pTQzdVU3RyaW5nM1JlcDExY29tcHV0ZUhhc2hFUEt0aQogX19aTjNKU0M3VVN0cmluZzNS
ZXAxNG51bGxCYXNlU3RyaW5nRQogX19aTjNKU0M3VVN0cmluZzNSZXA3ZGVzdHJveUV2CitfX1pO
M0pTQzdVU3RyaW5nM1JlcDVzaGFyZUVQdGlOM1dURjEwUGFzc1JlZlB0cklOUzNfMjFDcm9zc1Ro
cmVhZFJlZkNvdW50ZWRJTlMzXzE2T3duRmFzdE1hbGxvY1B0ckl0RUVFRUVFCiBfX1pOM0pTQzdV
U3RyaW5nNGZyb21FaQogX19aTjNKU0M3VVN0cmluZzRmcm9tRWoKIF9fWk4zSlNDN1VTdHJpbmc2
YXBwZW5kRVBLYwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmNw
cCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAKaW5kZXggMGYwZGQyNC4uNjJm
MmE5ZSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmNwcAorKysg
Yi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwCkBAIC02Miw2ICs2MiwxMiBAQCBu
YW1lc3BhY2UgSlNDIHsKIGV4dGVybiBjb25zdCBkb3VibGUgTmFOOwogZXh0ZXJuIGNvbnN0IGRv
dWJsZSBJbmY7CiAKKy8vIFRoaXMgbnVtYmVyIG11c3QgYmUgYXQgbGVhc3QgMSB0byBhdm9pZCBz
aGFyaW5nIGVtcHR5LCBudWxsIGFuZCAxIGNoYXJhY3RlciBzdHJpbmdzIGZyb20gU21hbGxTdHJp
bmdzLgorLy8gRG9pbmcgdGhlIHNoYXJpbmcgY29zdCAxMiBieXRlcywgc28gaXQgc2VlbWVkIHJl
YXNvbmFibGUgdGhhdCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNob3VsZCBiZSBsYXJnZXIgdGhhbiB0
aGF0LgorLy8gQWZ0ZXIgdGVzdGluZyB3aXRoIGRvbSBiZW5jaG1hcmtzIGxpa2UgaHR0cDovL2Ry
b21hZW8uY29tLz9kb20sIGl0IHNlZW1zIHRoYXQgYSByZWxhdGl2ZWx5IGxvdyBudW1iZXIgZ2l2
ZXMKKy8vIGdvb2QgcGVyZm9ybWFuY2UgcmVzdWx0cy4KK3N0YXRpYyBjb25zdCBpbnQgbWluTGVu
Z3RoVG9TaGFyZSA9IDMwOworCiBzdGF0aWMgaW5saW5lIHNpemVfdCBvdmVyZmxvd0luZGljYXRv
cigpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCk7IH0KIHN0YXRp
YyBpbmxpbmUgc2l6ZV90IG1heFVDaGFycygpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8
c2l6ZV90Pjo6bWF4KCkgLyBzaXplb2YoVUNoYXIpOyB9CiAKQEAgLTM4Miw4ICszODgsOCBAQCB2
b2lkIFVTdHJpbmc6OlJlcDo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0CiAKIFVTdHJpbmc6OlNo
YXJlZFVDaGFyKiBVU3RyaW5nOjpCYXNlU3RyaW5nOjpzaGFyZWRCdWZmZXIoKQogewotICAgIC8v
IERvbid0IHNoYXJlIGVtcHR5LCBudWxsIGFuZCAxIGNoYXJhY3RlciBzdHJpbmdzIGZyb20gU21h
bGxTdHJpbmdzLgotICAgIGlmIChsZW4gPD0gMSkKKworICAgIGlmIChsZW4gPCBtaW5MZW5ndGhU
b1NoYXJlKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICghbV9zaGFyZWRCdWZmZXIpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDdm
NDBjNTYuLjMyOWVhZmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMDktMDUtMjcgIERhdmlkIExldmluICA8
bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEJ1ZyAyNjA1NzogU3RyaW5nSW1wbCBzaG91bGQgc2hhcmUgYnVmZmVycyB3
aXRoIFVTdHJpbmcgYW5kIGNyb3NzLXRocmVhZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI2MDU3CisKKyAgICAgICAgRXhpc3RpbmcgdGVzdHMgY292
ZXIgdGhpcyBjb2RlIGFuZCB0aGVyZSBpcyBubyBuZXcgZnVuY3Rpb25hbGl0eQorICAgICAgICB0
aGF0IGlzIGV4cG9zZWQgdG8gdGVzdC4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvQXRvbWlj
U3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY1N0cmluZzo6YWRkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpT
dHJpbmc6OnNoYXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdHJpbmc6OlN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmc6
Om9wZXJhdG9yIFVTdHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0cmluZ0ltcGw6On5TdHJpbmdJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
cmluZ0ltcGw6OnNoYXJlKTogQ29uc3VtZXMgYSBzaGFyZWQgYnVmZmVyLgorICAgICAgICAoV2Vi
Q29yZTo6U3RyaW5nSW1wbDo6dXN0cmluZyk6IFNoYXJlcyB0aGUgYnVmZmVyIHdpdGggdGhlIHVz
dHJpbmcuCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpjb3B5KTogQ29weSBub3cgdXNl
cyB0aGUgc2FtZSBidWZmZXIgaW4gYQorICAgICAgICB0aHJlYWRzYWZlIG1hbm5lciB3aGVuIHRo
ZSBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoLgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6
c2hhcmVkQnVmZmVyKTogRXhwb3NlcyB0aGUgYnVmZmVyIHRoYXQgbWF5IGJlIHNoYXJlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0
cmluZ0ltcGw6Omhhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3Jl
OjpTdHJpbmdJbXBsOjppblRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnNl
dEluVGFibGUpOiBDb252ZXJ0ZWQgdGhlIGJvb2xzIHRvIGJlIGluc2lkZQorICAgICAgICBvZiBQ
dHJBbmRGbGFncyB0byBhdm9pZCBncm93aW5nIFN0cmluZ0ltcGwgaW4gc2l6ZS4KKwogMjAwOS0w
NS0yNyAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIGJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9BdG9taWNTdHJpbmcuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5j
cHAKaW5kZXggZDg1ZjVlZS4uNDA5NDM5ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L0F0b21pY1N0cmluZy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0F0b21pY1N0
cmluZy5jcHAKQEAgLTIwNiw3ICsyMDYsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IEF0b21p
Y1N0cmluZzo6YWRkKGNvbnN0IFVDaGFyKiBzKQogCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IEF0
b21pY1N0cmluZzo6YWRkKFN0cmluZ0ltcGwqIHIpCiB7Ci0gICAgaWYgKCFyIHx8IHItPm1faW5U
YWJsZSkKKyAgICBpZiAoIXIgfHwgci0+aW5UYWJsZSgpKQogICAgICAgICByZXR1cm4gcjsKIAog
ICAgIGlmIChyLT5sZW5ndGgoKSA9PSAwKQpAQCAtMjE0LDcgKzIxNCw3IEBAIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nOjphZGQoU3RyaW5nSW1wbCogcikKICAgICAKICAgICBT
dHJpbmdJbXBsKiByZXN1bHQgPSAqc3RyaW5nVGFibGUoKS5hZGQocikuZmlyc3Q7CiAgICAgaWYg
KHJlc3VsdCA9PSByKQotICAgICAgICByLT5tX2luVGFibGUgPSB0cnVlOworICAgICAgICByLT5z
ZXRJblRhYmxlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmggYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
UGxhdGZvcm1TdHJpbmcuaAppbmRleCAxY2M2MGIyLi5jNWQyMzk1IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvUGxhdGZvcm1TdHJpbmcuaApAQCAtODUsNyArODUsOSBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIFN0cmluZyBhZG9wdChTdHJpbmdCdWZmZXImIGJ1ZmZlcikgeyByZXR1cm4gU3RyaW5nSW1w
bDo6YWRvcHQoYnVmZmVyKTsgfQogICAgIHN0YXRpYyBTdHJpbmcgYWRvcHQoVmVjdG9yPFVDaGFy
PiYgdmVjdG9yKSB7IHJldHVybiBTdHJpbmdJbXBsOjphZG9wdCh2ZWN0b3IpOyB9CiAKKyAgICBz
dGF0aWMgU3RyaW5nIHNoYXJlKGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7IHJldHVybiBzdHJpbmcu
aW1wbCgpOyB9CiAjaWYgVVNFKEpTQykKKyAgICBzdGF0aWMgU3RyaW5nIHNoYXJlKGNvbnN0IEpT
Qzo6VVN0cmluZyYgc3RyaW5nKSB7IHJldHVybiBTdHJpbmdJbXBsOjpzaGFyZShzdHJpbmcpOyB9
CiAgICAgb3BlcmF0b3IgSlNDOjpVU3RyaW5nKCkgY29uc3Q7CiAjZW5kaWYKIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvU3RyaW5nLmNwcAppbmRleCA3MzNiNjYxLi5mNWVjOGRkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvU3RyaW5nLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3Ry
aW5nLmNwcApAQCAtNjM3LDIxICs2MzcsMjEgQEAgU3RyaW5nOjpTdHJpbmcoY29uc3QgSWRlbnRp
ZmllciYgc3RyKQogewogICAgIGlmIChzdHIuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUoc3RyLmRhdGEoKSwgc3RyLnNpemUoKSk7Cisg
ICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6c2hhcmUoc3RyLnVzdHJpbmcoKSk7CiB9CiAKIFN0cmlu
Zzo6U3RyaW5nKGNvbnN0IFVTdHJpbmcmIHN0cikKIHsKICAgICBpZiAoc3RyLmlzTnVsbCgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlKHN0ci5kYXRh
KCksIHN0ci5zaXplKCkpOworICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OnNoYXJlKHN0cik7CiB9
CiAKIFN0cmluZzo6b3BlcmF0b3IgVVN0cmluZygpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltcGwp
CiAgICAgICAgIHJldHVybiBVU3RyaW5nKCk7Ci0gICAgcmV0dXJuIFVTdHJpbmcobV9pbXBsLT5j
aGFyYWN0ZXJzKCksIG1faW1wbC0+bGVuZ3RoKCkpOworICAgIHJldHVybiBtX2ltcGwtPnVzdHJp
bmcoKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3Ry
aW5nSW1wbC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHAKaW5kZXgg
YjU5M2RlMC4uODM3NzE3YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmlu
Z0ltcGwuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcApAQCAt
NDQsNiArNDQsMTMgQEAgdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorLy8gVGhpcyBudW1iZXIgbXVzdCBiZSBhdCBsZWFzdCAxIHRvIGF2b2lkIHNoYXJp
bmcgZW1wdHksIG51bGwgYW5kIDEgY2hhcmFjdGVyIHN0cmluZ3MgZnJvbSBTbWFsbFN0cmluZ3Mu
CisvLyBEb2luZyB0aGUgc2hhcmluZyBjb3N0IDEyIGJ5dGVzLCBzbyBpdCBzZWVtZWQgcmVhc29u
YWJsZSB0aGF0IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2hvdWxkIGJlIGxhcmdlciB0aGFuIHRoYXQu
CisvLyBBZnRlciB0ZXN0aW5nIHdpdGggZG9tIGJlbmNobWFya3MgbGlrZSBodHRwOi8vZHJvbWFl
by5jb20vP2RvbSwgaXQgc2VlbXMgdGhhdCBhIHJlbGF0aXZlbHkgbG93IG51bWJlciBnaXZlcwor
Ly8gZ29vZCBwZXJmb3JtYW5jZSByZXN1bHRzLiAgKFRoaXMgbnVtYmVyIG1heSB2YXJ5IGluZGVw
ZW5kZW50bHkgZnJvbSB0aGUgdmFsdWUgaW4gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Vc3RyaW5n
LmNwcAorLy8gYnV0IHRoZXkgaGFwcGVuIHRvIGhhdmUgdGhlIHNhbWUgdmFsdWUgYXQgcHJlc2Vu
dC4pCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluTGVuZ3RoVG9TaGFyZSA9IDIwOworCiBzdGF0
aWMgaW5saW5lIFVDaGFyKiBuZXdVQ2hhclZlY3Rvcih1bnNpZ25lZCBuKQogewogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxVQ2hhcio+KGZhc3RNYWxsb2Moc2l6ZW9mKFVDaGFyKSAqIG4pKTsKQEAg
LTgwLDggKzg3LDYgQEAgU3RyaW5nSW1wbDo6U3RyaW5nSW1wbCgpCiAgICAgOiBtX2xlbmd0aCgw
KQogICAgICwgbV9kYXRhKDApCiAgICAgLCBtX2hhc2goMCkKLSAgICAsIG1faW5UYWJsZShmYWxz
ZSkKLSAgICAsIG1faGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKGZhbHNlKQogICAgICwgbV9i
dWZmZXJJc0ludGVybmFsKGZhbHNlKQogewogICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBoYXNoIGlz
IGNvbXB1dGVkIHNvIHRoYXQgQXRvbWljU3RyaW5nSGFzaCBjYW4gY2FsbCBleGlzdGluZ0hhc2go
KQpAQCAtOTYsOCArMTAxLDYgQEAgU3RyaW5nSW1wbDo6U3RyaW5nSW1wbCgpCiBpbmxpbmUgU3Ry
aW5nSW1wbDo6U3RyaW5nSW1wbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoKQogICAgIDogbV9sZW5ndGgobGVuZ3RoKQogICAgICwgbV9oYXNoKDApCi0gICAgLCBtX2lu
VGFibGUoZmFsc2UpCi0gICAgLCBtX2hhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3RlcihmYWxzZSkK
ICAgICAsIG1fYnVmZmVySXNJbnRlcm5hbChmYWxzZSkKIHsKICAgICBVQ2hhciogZGF0YSA9IG5l
d1VDaGFyVmVjdG9yKGxlbmd0aCk7CkBAIC0xMDgsMTAgKzExMSw5IEBAIGlubGluZSBTdHJpbmdJ
bXBsOjpTdHJpbmdJbXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgp
CiBpbmxpbmUgU3RyaW5nSW1wbDo6U3RyaW5nSW1wbChjb25zdCBTdHJpbmdJbXBsJiBzdHIsIFdp
dGhUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIpCiAgICAgOiBtX2xlbmd0aChzdHIubV9sZW5ndGgp
CiAgICAgLCBtX2hhc2goc3RyLm1faGFzaCkKLSAgICAsIG1faW5UYWJsZShmYWxzZSkKLSAgICAs
IG1faGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKHRydWUpCiAgICAgLCBtX2J1ZmZlcklzSW50
ZXJuYWwoZmFsc2UpCiB7CisgICAgbV9zaGFyZWRCdWZmZXJBbmRGbGFncy5zZXRGbGFnKEhhc1Rl
cm1pbmF0aW5nTnVsbENoYXJhY3Rlcik7CiAgICAgVUNoYXIqIGRhdGEgPSBuZXdVQ2hhclZlY3Rv
cihzdHIubV9sZW5ndGggKyAxKTsKICAgICBtZW1jcHkoZGF0YSwgc3RyLm1fZGF0YSwgc3RyLm1f
bGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgZGF0YVtzdHIubV9sZW5ndGhdID0gMDsKQEAg
LTEyMSw4ICsxMjMsNiBAQCBpbmxpbmUgU3RyaW5nSW1wbDo6U3RyaW5nSW1wbChjb25zdCBTdHJp
bmdJbXBsJiBzdHIsIFdpdGhUZXJtaW5hdGluZ051bGxDaGFyYWN0ZQogaW5saW5lIFN0cmluZ0lt
cGw6OlN0cmluZ0ltcGwoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQog
ICAgIDogbV9sZW5ndGgobGVuZ3RoKQogICAgICwgbV9oYXNoKDApCi0gICAgLCBtX2luVGFibGUo
ZmFsc2UpCi0gICAgLCBtX2hhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3RlcihmYWxzZSkKICAgICAs
IG1fYnVmZmVySXNJbnRlcm5hbChmYWxzZSkKIHsKICAgICBBU1NFUlQoY2hhcmFjdGVycyk7CkBA
IC0xNDAsOCArMTQwLDYgQEAgaW5saW5lIFN0cmluZ0ltcGw6OlN0cmluZ0ltcGwoVUNoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgQWRvcHRCdWZmZXIpCiAgICAgOiBtX2xlbmd0aChs
ZW5ndGgpCiAgICAgLCBtX2RhdGEoY2hhcmFjdGVycykKICAgICAsIG1faGFzaCgwKQotICAgICwg
bV9pblRhYmxlKGZhbHNlKQotICAgICwgbV9oYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIoZmFs
c2UpCiAgICAgLCBtX2J1ZmZlcklzSW50ZXJuYWwoZmFsc2UpCiB7CiAgICAgQVNTRVJUKGNoYXJh
Y3RlcnMpOwpAQCAtMTUyLDE0ICsxNTAsMTMgQEAgaW5saW5lIFN0cmluZ0ltcGw6OlN0cmluZ0lt
cGwoVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgQWRvcHRCdWZmZXIpCiBTdHJp
bmdJbXBsOjpTdHJpbmdJbXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgsIHVuc2lnbmVkIGhhc2gpCiAgICAgOiBtX2xlbmd0aChsZW5ndGgpCiAgICAgLCBtX2hhc2go
aGFzaCkKLSAgICAsIG1faW5UYWJsZSh0cnVlKQotICAgICwgbV9oYXNUZXJtaW5hdGluZ051bGxD
aGFyYWN0ZXIoZmFsc2UpCiAgICAgLCBtX2J1ZmZlcklzSW50ZXJuYWwoZmFsc2UpCiB7CiAgICAg
QVNTRVJUKGhhc2gpOwogICAgIEFTU0VSVChjaGFyYWN0ZXJzKTsKICAgICBBU1NFUlQobGVuZ3Ro
KTsKIAorICAgIHNldEluVGFibGUoKTsKICAgICBVQ2hhciogZGF0YSA9IG5ld1VDaGFyVmVjdG9y
KGxlbmd0aCk7CiAgICAgbWVtY3B5KGRhdGEsIGNoYXJhY3RlcnMsIGxlbmd0aCAqIHNpemVvZihV
Q2hhcikpOwogICAgIG1fZGF0YSA9IGRhdGE7CkBAIC0xNjksMTQgKzE2NiwxMyBAQCBTdHJpbmdJ
bXBsOjpTdHJpbmdJbXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgs
IHVuc2lnbmVkIGhhc2gpCiBTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKGNvbnN0IGNoYXIqIGNoYXJh
Y3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgaGFzaCkKICAgICA6IG1fbGVuZ3RoKGxl
bmd0aCkKICAgICAsIG1faGFzaChoYXNoKQotICAgICwgbV9pblRhYmxlKHRydWUpCi0gICAgLCBt
X2hhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3RlcihmYWxzZSkKICAgICAsIG1fYnVmZmVySXNJbnRl
cm5hbChmYWxzZSkKIHsKICAgICBBU1NFUlQoaGFzaCk7CiAgICAgQVNTRVJUKGNoYXJhY3RlcnMp
OwogICAgIEFTU0VSVChsZW5ndGgpOwogCisgICAgc2V0SW5UYWJsZSgpOwogICAgIFVDaGFyKiBk
YXRhID0gbmV3VUNoYXJWZWN0b3IobGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
ICE9IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IGNoYXJhY3RlcnNb
aV07CkBAIC0xODcsMTAgKzE4MywxNSBAQCBTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKGNvbnN0IGNo
YXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgaGFzaCkKIAogU3RyaW5n
SW1wbDo6flN0cmluZ0ltcGwoKQogewotICAgIGlmIChtX2luVGFibGUpCisgICAgaWYgKGluVGFi
bGUoKSkKICAgICAgICAgQXRvbWljU3RyaW5nOjpyZW1vdmUodGhpcyk7Ci0gICAgaWYgKCFtX2J1
ZmZlcklzSW50ZXJuYWwpCi0gICAgICAgIGRlbGV0ZVVDaGFyVmVjdG9yKG1fZGF0YSk7CisgICAg
aWYgKCFtX2J1ZmZlcklzSW50ZXJuYWwpIHsKKyAgICAgICAgU2hhcmVkVUNoYXIqIHNoYXJlZEJ1
ZmZlciA9IG1fc2hhcmVkQnVmZmVyQW5kRmxhZ3MuZ2V0KCk7CisgICAgICAgIGlmIChzaGFyZWRC
dWZmZXIpCisgICAgICAgICAgICBzaGFyZWRCdWZmZXItPmRlcmVmKCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGRlbGV0ZVVDaGFyVmVjdG9yKG1fZGF0YSk7CisgICAgfQogfQogCiBTdHJp
bmdJbXBsKiBTdHJpbmdJbXBsOjplbXB0eSgpCkBAIC0xMDE1LDYgKzEwMTYsMjkgQEAgUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGUoY29uc3QgY2hhciogc3RyaW5nKQog
ICAgIHJldHVybiBjcmVhdGUoc3RyaW5nLCBzdHJsZW4oc3RyaW5nKSk7CiB9CiAKKyNpZiBVU0Uo
SlNDKQorUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpzaGFyZShjb25zdCBKU0M6
OlVTdHJpbmcmIHN0cikKK3sKKyAgICBTaGFyZWRVQ2hhciogc2hhcmVkQnVmZmVyID0gY29uc3Rf
Y2FzdDxKU0M6OlVTdHJpbmcqPigmc3RyKS0+cmVwKCktPmJhc2VTdHJpbmcoKS0+c2hhcmVkQnVm
ZmVyKCk7CisgICAgaWYgKHNoYXJlZEJ1ZmZlcikgeworICAgICAgICBQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IGltcGwgPSBhZG9wdFJlZihuZXcgU3RyaW5nSW1wbChjb25zdF9jYXN0PFVDaGFyKj4o
c3RyLmRhdGEoKSksIHN0ci5zaXplKCksIEFkb3B0QnVmZmVyKCkpKTsKKyAgICAgICAgc2hhcmVk
QnVmZmVyLT5yZWYoKTsKKyAgICAgICAgaW1wbC0+bV9zaGFyZWRCdWZmZXJBbmRGbGFncy5zZXQo
c2hhcmVkQnVmZmVyKTsKKyAgICAgICAgcmV0dXJuIGltcGw7CisgICAgfQorICAgIHJldHVybiBT
dHJpbmdJbXBsOjpjcmVhdGUoc3RyLmRhdGEoKSwgc3RyLnNpemUoKSk7Cit9CisKK0pTQzo6VVN0
cmluZyBTdHJpbmdJbXBsOjp1c3RyaW5nKCkKK3sKKyAgICBTaGFyZWRVQ2hhciogc2hhcmVkQnVm
ZmVyID0gU3RyaW5nSW1wbDo6c2hhcmVkQnVmZmVyKCk7CisgICAgaWYgKHNoYXJlZEJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuIEpTQzo6VVN0cmluZzo6UmVwOjpzaGFyZShjb25zdF9jYXN0PFVDaGFy
Kj4obV9kYXRhKSwgbV9sZW5ndGgsIHNoYXJlZEJ1ZmZlcik7CisKKyAgICByZXR1cm4gSlNDOjpV
U3RyaW5nKG1fZGF0YSwgbV9sZW5ndGgpOworfQorI2VuZGlmCisKIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aFRlcm1pbmF0aW5nTnVsbENoYXJhY3Rlcihjb25z
dCBTdHJpbmdJbXBsJiBzdHJpbmcpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHJpbmdJ
bXBsKHN0cmluZywgV2l0aFRlcm1pbmF0aW5nTnVsbENoYXJhY3RlcigpKSk7CkBAIC0xMDIyLDcg
KzEwNDYsMjggQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVXaXRo
VGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKGNvbnN0IFN0cmkKIAogUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBTdHJpbmdJbXBsOjpjb3B5KCkKIHsKLSAgICByZXR1cm4gY3JlYXRlKG1fZGF0YSwgbV9s
ZW5ndGgpOworICAgIC8vIGNvcHkoKSBtYXkgYmUgY2FsbGVkIG9uIGFub3RoZXIgdGhyZWFkIGZy
b20gd2hlcmUgdGhlIHN0cmluZyBpcyBub3JtYWxseSBhY2Nlc3NlZCwgc28gYmUgY2FyZWZ1bCBu
b3QKKyAgICAvLyB0byBjaGFuZ2Ugc3RhdGUgaW4gU3RyaW5nIGluIGhlcmUgKG90aGVyIHRoYW4g
dG8gZW5zdXJlUmVmQ291bnRlZE1hbGxvY2VkIHdoaWNoIHNob3VsZCBhbHJlYWR5IGJlIHNldAor
ICAgIC8vIGlmIHRoaXMgaXMgYmVpbmcgdXNlZCBpbiBhIGNyb3NzIHRocmVhZCBtYW5uZXIpLgor
ICAgIFNoYXJlZFVDaGFyKiBzaGFyZWRCdWZmZXIgPSBTdHJpbmdJbXBsOjpzaGFyZWRCdWZmZXIo
KTsKKyAgICBpZiAoc2hhcmVkQnVmZmVyKSB7CisgICAgICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gaW1wbCA9IGFkb3B0UmVmKG5ldyBTdHJpbmdJbXBsKGNvbnN0X2Nhc3Q8VUNoYXIqPihtX2Rh
dGEpLCBtX2xlbmd0aCwgQWRvcHRCdWZmZXIoKSkpOworICAgICAgICBpbXBsLT5tX3NoYXJlZEJ1
ZmZlckFuZEZsYWdzLnNldChzaGFyZWRCdWZmZXItPmNyb3NzVGhyZWFkQ29weSgpLnJlbGVhc2VS
ZWYoKSk7CisgICAgICAgIHJldHVybiBpbXBsOworICAgIH0KKworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU3RyaW5nSW1wbChtX2RhdGEsIG1fbGVuZ3RoKSk7CiB9CiAKK1N0cmluZ0ltcGw6OlNo
YXJlZFVDaGFyKiBTdHJpbmdJbXBsOjpzaGFyZWRCdWZmZXIoKQoreworICAgIGlmIChtX2xlbmd0
aCA8IG1pbkxlbmd0aFRvU2hhcmUgfHwgbV9idWZmZXJJc0ludGVybmFsKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGlmICghbV9zaGFyZWRCdWZmZXJBbmRGbGFncy5nZXQoKSkKKyAgICAgICAg
bV9zaGFyZWRCdWZmZXJBbmRGbGFncy5zZXQoU2hhcmVkVUNoYXI6OmNyZWF0ZShuZXcgT3duRmFz
dE1hbGxvY1B0cjxVQ2hhcj4oY29uc3RfY2FzdDxVQ2hhcio+KG1fZGF0YSkpKS5yZWxlYXNlUmVm
KCkpOworICAgIHJldHVybiBtX3NoYXJlZEJ1ZmZlckFuZEZsYWdzLmdldCgpOworfQorCisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9T
dHJpbmdJbXBsLmggYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oCmluZGV4IDM5
MmNhM2IuLjRkNWMwODYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJ
bXBsLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaApAQCAtMSw2ICsx
LDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKICAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsMTEgKzI1
LDE4IEBACiAKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5o
PgorI2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVhZFJlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
T3duRmFzdE1hbGxvY1B0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1B0ckFuZEZsYWdzLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogCisj
aWYgVVNFKEpTQykKKyNpbmNsdWRlIDxydW50aW1lL1VTdHJpbmcuaD4KKyNlbmRpZgorCiAjaWYg
UExBVEZPUk0oQ0YpIHx8IChQTEFURk9STShRVCkgJiYgUExBVEZPUk0oREFSV0lOKSkKIHR5cGVk
ZWYgY29uc3Qgc3RydWN0IF9fQ0ZTdHJpbmcgKiBDRlN0cmluZ1JlZjsKICNlbmRpZgpAQCAtNzIs
NiArODAsOCBAQCBwcml2YXRlOgogICAgIFN0cmluZ0ltcGwoY29uc3QgVUNoYXIqLCB1bnNpZ25l
ZCBsZW5ndGgsIHVuc2lnbmVkIGhhc2gpOwogICAgIFN0cmluZ0ltcGwoY29uc3QgY2hhciosIHVu
c2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgaGFzaCk7CiAKKyAgICB0eXBlZGVmIENyb3NzVGhyZWFk
UmVmQ291bnRlZDxPd25GYXN0TWFsbG9jUHRyPFVDaGFyPiA+IFNoYXJlZFVDaGFyOworCiBwdWJs
aWM6CiAgICAgflN0cmluZ0ltcGwoKTsKIApAQCAtODUsMTEgKzk1LDE5IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGVTdHJpcHBpbmdOdWxsQ2hhcmFj
dGVycyhjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gYWRvcHQoU3RyaW5nQnVmZmVyJik7CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gYWRvcHQoVmVjdG9yPFVDaGFyPiYpOworI2lmIFVTRShKU0MpCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gc2hhcmUoY29uc3QgSlNDOjpVU3RyaW5nJik7
CisgICAgSlNDOjpVU3RyaW5nIHVzdHJpbmcoKTsKKyNlbmRpZgogCisgICAgU2hhcmVkVUNoYXIq
IHNoYXJlZEJ1ZmZlcigpOwogICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzKCkgeyByZXR1cm4g
bV9kYXRhOyB9CiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gbV9sZW5ndGg7IH0KIAot
ICAgIGJvb2wgaGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKCkgeyByZXR1cm4gbV9oYXNUZXJt
aW5hdGluZ051bGxDaGFyYWN0ZXI7IH0KKyAgICBib29sIGhhc1Rlcm1pbmF0aW5nTnVsbENoYXJh
Y3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkQnVmZmVyQW5kRmxhZ3MuaXNGbGFnU2V0KEhh
c1Rlcm1pbmF0aW5nTnVsbENoYXJhY3Rlcik7IH0KKworICAgIGJvb2wgaW5UYWJsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2hhcmVkQnVmZmVyQW5kRmxhZ3MuaXNGbGFnU2V0KEluVGFibGUpOyB9Cisg
ICAgdm9pZCBzZXRJblRhYmxlKCkgeyByZXR1cm4gbV9zaGFyZWRCdWZmZXJBbmRGbGFncy5zZXRG
bGFnKEluVGFibGUpOyB9CiAKICAgICB1bnNpZ25lZCBoYXNoKCkgeyBpZiAobV9oYXNoID09IDAp
IG1faGFzaCA9IGNvbXB1dGVIYXNoKG1fZGF0YSwgbV9sZW5ndGgpOyByZXR1cm4gbV9oYXNoOyB9
CiAgICAgdW5zaWduZWQgZXhpc3RpbmdIYXNoKCkgY29uc3QgeyBBU1NFUlQobV9oYXNoKTsgcmV0
dXJuIG1faGFzaDsgfQpAQCAtMTc3LDExICsxOTUsMTYgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZVN0cmlwcGluZ051bGxDaGFyYWN0ZXJzU2xv
d0Nhc2UoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwogCisgICAgZW51bSBTdHJpbmdJ
bXBsRmxhZ3MgeworICAgICAgICBIYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIsCisgICAgICAg
IEluVGFibGUsCisgICAgfTsKKwogICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwogICAgIGNvbnN0IFVD
aGFyKiBtX2RhdGE7CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2hhc2g7Ci0gICAgYm9vbCBtX2lu
VGFibGU7Ci0gICAgYm9vbCBtX2hhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3RlcjsKKyAgICBQdHJB
bmRGbGFnczxTaGFyZWRVQ2hhciwgU3RyaW5nSW1wbEZsYWdzPiBtX3NoYXJlZEJ1ZmZlckFuZEZs
YWdzOworCiAgICAgLy8gSW4gc29tZSBjYXNlcywgd2UgYWxsb2NhdGUgdGhlIFN0cmluZ0ltcGwg
c3RydWN0IGFuZCBpdHMgZGF0YQogICAgIC8vIHdpdGhpbiBhIHNpbmdsZSBoZWFwIGJ1ZmZlci4g
SW4gdGhpcyBjYXNlLCB0aGUgbV9kYXRhIHBvaW50ZXIKICAgICAvLyBpcyBhbiAiaW50ZXJuYWwg
YnVmZmVyIiwgYW5kIGRvZXMgbm90IG5lZWQgdG8gYmUgZGVhbGxvY2F0ZWQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30730</attachid>
            <date>2009-05-28 01:47:37 -0700</date>
            <delta_ts>2009-05-29 03:45:36 -0700</delta_ts>
            <desc>Proposed fix.</desc>
            <filename>bug26057.txt</filename>
            <type>text/plain</type>
            <size>15945</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA3MjdiMjEwLi43YTFmOTM5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMDktMDUtMjcgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAyNjA1NzogU3Ry
aW5nSW1wbCBzaG91bGQgc2hhcmUgYnVmZmVycyB3aXRoIFVTdHJpbmcgYW5kIGNyb3NzLXRocmVh
ZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2MDU3
CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICogcnVudGltZS9VU3Ry
aW5nLmNwcDoKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6QmFzZVN0cmluZzo6c2hhcmVkQnVmZmVy
KTogT25seSBkbyB0aGUgc2hhcmluZyB3aGVuCisgICAgICAgIHRoZSBidWZmZXIgZXhjZWVkcyBh
IGNlcnRhaW4gc2l6ZS4gIFRoZSBzaXplIHdhcyB0dW5lZCBieSBydW5uaW5nCisgICAgICAgIHZh
cmlvdXMgZG9tIGJlbmNobWFya3Mgd2l0aCBudW1iZXJzIHJhbmdpbmcgZnJvbSAyMCB0byA4MDAg
YW5kIGZpbmRpbmcKKyAgICAgICAgYSBwbGFjZSB0aGF0IHNlZW1lZCB0byBkbyB0aGUgYmVzdCBv
dmVyYWxsLgorCiAyMDA5LTA1LTI3ICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxndXN0YXZvLm5v
cm9uaGFAY29sbGFib3JhLmNvLnVrPgogCiAgICAgICAgIFVucmV2aWV3ZWQgKG1ha2UgZGlzdGNo
ZWNrKSBidWlsZCBmaXg7IGFkZGluZyBtaXNzaW5nIGhlYWRlcnMuCmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5leHAKaW5kZXggYjBjYzMzZi4uZDRhNTg5YyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZXhwCisrKyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmV4cApAQCAtMjE3LDEwICsyMTcsMTIgQEAgX19aTjNKU0M3UHJvZmlsZTEwcmVzdG9yZUFsbEV2
CiBfX1pOM0pTQzdQcm9maWxlNWZvY3VzRVBLTlNfMTFQcm9maWxlTm9kZUUKIF9fWk4zSlNDN1By
b2ZpbGU3ZXhjbHVkZUVQS05TXzExUHJvZmlsZU5vZGVFCiBfX1pOM0pTQzdQcm9maWxlN2ZvckVh
Y2hFTU5TXzExUHJvZmlsZU5vZGVFRnZ2RQorX19aTjNKU0M3VVN0cmluZzEwQmFzZVN0cmluZzEy
c2hhcmVkQnVmZmVyRXYKIF9fWk4zSlNDN1VTdHJpbmczUmVwMTFjb21wdXRlSGFzaEVQS2NpCiBf
X1pOM0pTQzdVU3RyaW5nM1JlcDExY29tcHV0ZUhhc2hFUEt0aQogX19aTjNKU0M3VVN0cmluZzNS
ZXAxNG51bGxCYXNlU3RyaW5nRQogX19aTjNKU0M3VVN0cmluZzNSZXA3ZGVzdHJveUV2CitfX1pO
M0pTQzdVU3RyaW5nM1JlcDVzaGFyZUVQdGlOM1dURjEwUGFzc1JlZlB0cklOUzNfMjFDcm9zc1Ro
cmVhZFJlZkNvdW50ZWRJTlMzXzE2T3duRmFzdE1hbGxvY1B0ckl0RUVFRUVFCiBfX1pOM0pTQzdV
U3RyaW5nNGZyb21FaQogX19aTjNKU0M3VVN0cmluZzRmcm9tRWoKIF9fWk4zSlNDN1VTdHJpbmc2
YXBwZW5kRVBLYwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmNw
cCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAKaW5kZXggMGYwZGQyNC4uNjJm
MmE5ZSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmNwcAorKysg
Yi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwCkBAIC02Miw2ICs2MiwxMiBAQCBu
YW1lc3BhY2UgSlNDIHsKIGV4dGVybiBjb25zdCBkb3VibGUgTmFOOwogZXh0ZXJuIGNvbnN0IGRv
dWJsZSBJbmY7CiAKKy8vIFRoaXMgbnVtYmVyIG11c3QgYmUgYXQgbGVhc3QgMSB0byBhdm9pZCBz
aGFyaW5nIGVtcHR5LCBudWxsIGFuZCAxIGNoYXJhY3RlciBzdHJpbmdzIGZyb20gU21hbGxTdHJp
bmdzLgorLy8gRG9pbmcgdGhlIHNoYXJpbmcgY29zdCAxMiBieXRlcywgc28gaXQgc2VlbWVkIHJl
YXNvbmFibGUgdGhhdCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNob3VsZCBiZSBsYXJnZXIgdGhhbiB0
aGF0LgorLy8gQWZ0ZXIgdGVzdGluZyB3aXRoIGRvbSBiZW5jaG1hcmtzIGxpa2UgaHR0cDovL2Ry
b21hZW8uY29tLz9kb20sIGl0IHNlZW1zIHRoYXQgYSByZWxhdGl2ZWx5IGxvdyBudW1iZXIgZ2l2
ZXMKKy8vIGdvb2QgcGVyZm9ybWFuY2UgcmVzdWx0cy4KK3N0YXRpYyBjb25zdCBpbnQgbWluTGVu
Z3RoVG9TaGFyZSA9IDMwOworCiBzdGF0aWMgaW5saW5lIHNpemVfdCBvdmVyZmxvd0luZGljYXRv
cigpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCk7IH0KIHN0YXRp
YyBpbmxpbmUgc2l6ZV90IG1heFVDaGFycygpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8
c2l6ZV90Pjo6bWF4KCkgLyBzaXplb2YoVUNoYXIpOyB9CiAKQEAgLTM4Miw4ICszODgsOCBAQCB2
b2lkIFVTdHJpbmc6OlJlcDo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0CiAKIFVTdHJpbmc6OlNo
YXJlZFVDaGFyKiBVU3RyaW5nOjpCYXNlU3RyaW5nOjpzaGFyZWRCdWZmZXIoKQogewotICAgIC8v
IERvbid0IHNoYXJlIGVtcHR5LCBudWxsIGFuZCAxIGNoYXJhY3RlciBzdHJpbmdzIGZyb20gU21h
bGxTdHJpbmdzLgotICAgIGlmIChsZW4gPD0gMSkKKworICAgIGlmIChsZW4gPCBtaW5MZW5ndGhU
b1NoYXJlKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICghbV9zaGFyZWRCdWZmZXIpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDdm
NDBjNTYuLjEzZmM5ZDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMDktMDUtMjcgIERhdmlkIExldmluICA8
bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEJ1ZyAyNjA1NzogU3RyaW5nSW1wbCBzaG91bGQgc2hhcmUgYnVmZmVycyB3
aXRoIFVTdHJpbmcgYW5kIGNyb3NzLXRocmVhZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI2MDU3CisKKyAgICAgICAgRXhpc3RpbmcgdGVzdHMgY292
ZXIgdGhpcyBjb2RlIGFuZCB0aGVyZSBpcyBubyBuZXcgZnVuY3Rpb25hbGl0eQorICAgICAgICB0
aGF0IGlzIGV4cG9zZWQgdG8gdGVzdC4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvQXRvbWlj
U3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY1N0cmluZzo6YWRkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpT
dHJpbmc6OnNoYXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdHJpbmc6OlN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmc6
Om9wZXJhdG9yIFVTdHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0cmluZ0ltcGw6On5TdHJpbmdJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
cmluZ0ltcGw6OnNoYXJlKTogQ29uc3VtZXMgYSBzaGFyZWQgYnVmZmVyLgorICAgICAgICAoV2Vi
Q29yZTo6U3RyaW5nSW1wbDo6dXN0cmluZyk6IFNoYXJlcyB0aGUgU3RyaW5nSW1wbCdzIGJ1ZmZl
ciB3aXRoCisgICAgICAgIHRoZSBVU3RyaW5nLgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1w
bDo6Y29weSk6IENvcHkgbm93IHVzZXMgdGhlIHNhbWUgYnVmZmVyIGluIGEKKyAgICAgICAgdGhy
ZWFkc2FmZSBtYW5uZXIgd2hlbiB0aGUgYnVmZmVyIGlzIGxhcmdlIGVub3VnaC4KKyAgICAgICAg
KFdlYkNvcmU6OlN0cmluZ0ltcGw6OnNoYXJlZEJ1ZmZlcik6IEV4cG9zZXMgdGhlIGJ1ZmZlciB0
aGF0IG1heSBiZSBzaGFyZWQuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmg6
CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpoYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6aW5UYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHJpbmdJbXBsOjpzZXRJblRhYmxlKTogQ29udmVydGVkIHRoZSBib29scyB0byBi
ZSBpbnNpZGUKKyAgICAgICAgb2YgUHRyQW5kRmxhZ3MgdG8gYXZvaWQgZ3Jvd2luZyBTdHJpbmdJ
bXBsIGluIHNpemUuCisKIDIwMDktMDUtMjcgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCBidWlsZCBmaXguCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9BdG9taWNTdHJpbmcuY3BwCmluZGV4IGQ4NWY1ZWUuLjQwOTQzOWUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcuY3BwCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcuY3BwCkBAIC0yMDYsNyArMjA2LDcgQEAgUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBBdG9taWNTdHJpbmc6OmFkZChjb25zdCBVQ2hhciogcykKIAogUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBBdG9taWNTdHJpbmc6OmFkZChTdHJpbmdJbXBsKiByKQogewot
ICAgIGlmICghciB8fCByLT5tX2luVGFibGUpCisgICAgaWYgKCFyIHx8IHItPmluVGFibGUoKSkK
ICAgICAgICAgcmV0dXJuIHI7CiAKICAgICBpZiAoci0+bGVuZ3RoKCkgPT0gMCkKQEAgLTIxNCw3
ICsyMTQsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IEF0b21pY1N0cmluZzo6YWRkKFN0cmlu
Z0ltcGwqIHIpCiAgICAgCiAgICAgU3RyaW5nSW1wbCogcmVzdWx0ID0gKnN0cmluZ1RhYmxlKCku
YWRkKHIpLmZpcnN0OwogICAgIGlmIChyZXN1bHQgPT0gcikKLSAgICAgICAgci0+bV9pblRhYmxl
ID0gdHJ1ZTsKKyAgICAgICAgci0+c2V0SW5UYWJsZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmgKaW5kZXggMWNjNjBiMi4uYzVk
MjM5NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmgK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmgKQEAgLTg1LDcgKzg1
LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJpbmcgYWRvcHQoU3RyaW5nQnVmZmVyJiBidWZm
ZXIpIHsgcmV0dXJuIFN0cmluZ0ltcGw6OmFkb3B0KGJ1ZmZlcik7IH0KICAgICBzdGF0aWMgU3Ry
aW5nIGFkb3B0KFZlY3RvcjxVQ2hhcj4mIHZlY3RvcikgeyByZXR1cm4gU3RyaW5nSW1wbDo6YWRv
cHQodmVjdG9yKTsgfQogCisgICAgc3RhdGljIFN0cmluZyBzaGFyZShjb25zdCBTdHJpbmcmIHN0
cmluZykgeyByZXR1cm4gc3RyaW5nLmltcGwoKTsgfQogI2lmIFVTRShKU0MpCisgICAgc3RhdGlj
IFN0cmluZyBzaGFyZShjb25zdCBKU0M6OlVTdHJpbmcmIHN0cmluZykgeyByZXR1cm4gU3RyaW5n
SW1wbDo6c2hhcmUoc3RyaW5nKTsgfQogICAgIG9wZXJhdG9yIEpTQzo6VVN0cmluZygpIGNvbnN0
OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAKaW5kZXggNzMzYjY2MS4uZjVlYzhk
ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAKQEAgLTYzNywyMSArNjM3LDIxIEBAIFN0cmlu
Zzo6U3RyaW5nKGNvbnN0IElkZW50aWZpZXImIHN0cikKIHsKICAgICBpZiAoc3RyLmlzTnVsbCgp
KQogICAgICAgICByZXR1cm47Ci0gICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlKHN0ci5k
YXRhKCksIHN0ci5zaXplKCkpOworICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OnNoYXJlKHN0ci51
c3RyaW5nKCkpOwogfQogCiBTdHJpbmc6OlN0cmluZyhjb25zdCBVU3RyaW5nJiBzdHIpCiB7CiAg
ICAgaWYgKHN0ci5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1faW1wbCA9IFN0cmlu
Z0ltcGw6OmNyZWF0ZShzdHIuZGF0YSgpLCBzdHIuc2l6ZSgpKTsKKyAgICBtX2ltcGwgPSBTdHJp
bmdJbXBsOjpzaGFyZShzdHIpOwogfQogCiBTdHJpbmc6Om9wZXJhdG9yIFVTdHJpbmcoKSBjb25z
dAogewogICAgIGlmICghbV9pbXBsKQogICAgICAgICByZXR1cm4gVVN0cmluZygpOwotICAgIHJl
dHVybiBVU3RyaW5nKG1faW1wbC0+Y2hhcmFjdGVycygpLCBtX2ltcGwtPmxlbmd0aCgpKTsKKyAg
ICByZXR1cm4gbV9pbXBsLT51c3RyaW5nKCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1N0cmluZ0ltcGwuY3BwCmluZGV4IGI1OTNkZTAuLmI3OTMxNjEgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvU3RyaW5nSW1wbC5jcHAKQEAgLTQ0LDYgKzQ0LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBVbmlj
b2RlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIERvaW5nIHRoZSBzaGFyaW5nIGNvc3Qg
MTIgYnl0ZXMsIHNvIGl0IHNlZW1lZCByZWFzb25hYmxlIHRoYXQgdGhlIG51bWJlciBvZiBieXRl
cyBzaG91bGQgYmUgbGFyZ2VyIHRoYW4gdGhhdC4KKy8vIEFmdGVyIHRlc3Rpbmcgd2l0aCBkb20g
YmVuY2htYXJrcyBsaWtlIGh0dHA6Ly9kcm9tYWVvLmNvbS8/ZG9tLCBpdCBzZWVtcyB0aGF0IGEg
cmVsYXRpdmVseSBsb3cgbnVtYmVyIGdpdmVzCisvLyBnb29kIHBlcmZvcm1hbmNlIHJlc3VsdHMu
CitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluTGVuZ3RoVG9TaGFyZSA9IDIwOworCiBzdGF0aWMg
aW5saW5lIFVDaGFyKiBuZXdVQ2hhclZlY3Rvcih1bnNpZ25lZCBuKQogewogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxVQ2hhcio+KGZhc3RNYWxsb2Moc2l6ZW9mKFVDaGFyKSAqIG4pKTsKQEAgLTgw
LDggKzg1LDYgQEAgU3RyaW5nSW1wbDo6U3RyaW5nSW1wbCgpCiAgICAgOiBtX2xlbmd0aCgwKQog
ICAgICwgbV9kYXRhKDApCiAgICAgLCBtX2hhc2goMCkKLSAgICAsIG1faW5UYWJsZShmYWxzZSkK
LSAgICAsIG1faGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKGZhbHNlKQogICAgICwgbV9idWZm
ZXJJc0ludGVybmFsKGZhbHNlKQogewogICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBoYXNoIGlzIGNv
bXB1dGVkIHNvIHRoYXQgQXRvbWljU3RyaW5nSGFzaCBjYW4gY2FsbCBleGlzdGluZ0hhc2goKQpA
QCAtOTYsOCArOTksNiBAQCBTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKCkKIGlubGluZSBTdHJpbmdJ
bXBsOjpTdHJpbmdJbXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgp
CiAgICAgOiBtX2xlbmd0aChsZW5ndGgpCiAgICAgLCBtX2hhc2goMCkKLSAgICAsIG1faW5UYWJs
ZShmYWxzZSkKLSAgICAsIG1faGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKGZhbHNlKQogICAg
ICwgbV9idWZmZXJJc0ludGVybmFsKGZhbHNlKQogewogICAgIFVDaGFyKiBkYXRhID0gbmV3VUNo
YXJWZWN0b3IobGVuZ3RoKTsKQEAgLTEwOCwxMCArMTA5LDkgQEAgaW5saW5lIFN0cmluZ0ltcGw6
OlN0cmluZ0ltcGwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKIGlu
bGluZSBTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKGNvbnN0IFN0cmluZ0ltcGwmIHN0ciwgV2l0aFRl
cm1pbmF0aW5nTnVsbENoYXJhY3RlcikKICAgICA6IG1fbGVuZ3RoKHN0ci5tX2xlbmd0aCkKICAg
ICAsIG1faGFzaChzdHIubV9oYXNoKQotICAgICwgbV9pblRhYmxlKGZhbHNlKQotICAgICwgbV9o
YXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIodHJ1ZSkKICAgICAsIG1fYnVmZmVySXNJbnRlcm5h
bChmYWxzZSkKIHsKKyAgICBtX3NoYXJlZEJ1ZmZlckFuZEZsYWdzLnNldEZsYWcoSGFzVGVybWlu
YXRpbmdOdWxsQ2hhcmFjdGVyKTsKICAgICBVQ2hhciogZGF0YSA9IG5ld1VDaGFyVmVjdG9yKHN0
ci5tX2xlbmd0aCArIDEpOwogICAgIG1lbWNweShkYXRhLCBzdHIubV9kYXRhLCBzdHIubV9sZW5n
dGggKiBzaXplb2YoVUNoYXIpKTsKICAgICBkYXRhW3N0ci5tX2xlbmd0aF0gPSAwOwpAQCAtMTIx
LDggKzEyMSw2IEBAIGlubGluZSBTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKGNvbnN0IFN0cmluZ0lt
cGwmIHN0ciwgV2l0aFRlcm1pbmF0aW5nTnVsbENoYXJhY3RlCiBpbmxpbmUgU3RyaW5nSW1wbDo6
U3RyaW5nSW1wbChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAg
OiBtX2xlbmd0aChsZW5ndGgpCiAgICAgLCBtX2hhc2goMCkKLSAgICAsIG1faW5UYWJsZShmYWxz
ZSkKLSAgICAsIG1faGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKGZhbHNlKQogICAgICwgbV9i
dWZmZXJJc0ludGVybmFsKGZhbHNlKQogewogICAgIEFTU0VSVChjaGFyYWN0ZXJzKTsKQEAgLTE0
MCw4ICsxMzgsNiBAQCBpbmxpbmUgU3RyaW5nSW1wbDo6U3RyaW5nSW1wbChVQ2hhciogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoLCBBZG9wdEJ1ZmZlcikKICAgICA6IG1fbGVuZ3RoKGxlbmd0
aCkKICAgICAsIG1fZGF0YShjaGFyYWN0ZXJzKQogICAgICwgbV9oYXNoKDApCi0gICAgLCBtX2lu
VGFibGUoZmFsc2UpCi0gICAgLCBtX2hhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3RlcihmYWxzZSkK
ICAgICAsIG1fYnVmZmVySXNJbnRlcm5hbChmYWxzZSkKIHsKICAgICBBU1NFUlQoY2hhcmFjdGVy
cyk7CkBAIC0xNTIsMTQgKzE0OCwxMyBAQCBpbmxpbmUgU3RyaW5nSW1wbDo6U3RyaW5nSW1wbChV
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBBZG9wdEJ1ZmZlcikKIFN0cmluZ0lt
cGw6OlN0cmluZ0ltcGwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwg
dW5zaWduZWQgaGFzaCkKICAgICA6IG1fbGVuZ3RoKGxlbmd0aCkKICAgICAsIG1faGFzaChoYXNo
KQotICAgICwgbV9pblRhYmxlKHRydWUpCi0gICAgLCBtX2hhc1Rlcm1pbmF0aW5nTnVsbENoYXJh
Y3RlcihmYWxzZSkKICAgICAsIG1fYnVmZmVySXNJbnRlcm5hbChmYWxzZSkKIHsKICAgICBBU1NF
UlQoaGFzaCk7CiAgICAgQVNTRVJUKGNoYXJhY3RlcnMpOwogICAgIEFTU0VSVChsZW5ndGgpOwog
CisgICAgc2V0SW5UYWJsZSgpOwogICAgIFVDaGFyKiBkYXRhID0gbmV3VUNoYXJWZWN0b3IobGVu
Z3RoKTsKICAgICBtZW1jcHkoZGF0YSwgY2hhcmFjdGVycywgbGVuZ3RoICogc2l6ZW9mKFVDaGFy
KSk7CiAgICAgbV9kYXRhID0gZGF0YTsKQEAgLTE2OSwxNCArMTY0LDEzIEBAIFN0cmluZ0ltcGw6
OlN0cmluZ0ltcGwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgdW5z
aWduZWQgaGFzaCkKIFN0cmluZ0ltcGw6OlN0cmluZ0ltcGwoY29uc3QgY2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBoYXNoKQogICAgIDogbV9sZW5ndGgobGVuZ3Ro
KQogICAgICwgbV9oYXNoKGhhc2gpCi0gICAgLCBtX2luVGFibGUodHJ1ZSkKLSAgICAsIG1faGFz
VGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKGZhbHNlKQogICAgICwgbV9idWZmZXJJc0ludGVybmFs
KGZhbHNlKQogewogICAgIEFTU0VSVChoYXNoKTsKICAgICBBU1NFUlQoY2hhcmFjdGVycyk7CiAg
ICAgQVNTRVJUKGxlbmd0aCk7CiAKKyAgICBzZXRJblRhYmxlKCk7CiAgICAgVUNoYXIqIGRhdGEg
PSBuZXdVQ2hhclZlY3RvcihsZW5ndGgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0g
bGVuZ3RoOyArK2kpIHsKICAgICAgICAgdW5zaWduZWQgY2hhciBjID0gY2hhcmFjdGVyc1tpXTsK
QEAgLTE4NywxMCArMTgxLDE1IEBAIFN0cmluZ0ltcGw6OlN0cmluZ0ltcGwoY29uc3QgY2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBoYXNoKQogCiBTdHJpbmdJbXBs
Ojp+U3RyaW5nSW1wbCgpCiB7Ci0gICAgaWYgKG1faW5UYWJsZSkKKyAgICBpZiAoaW5UYWJsZSgp
KQogICAgICAgICBBdG9taWNTdHJpbmc6OnJlbW92ZSh0aGlzKTsKLSAgICBpZiAoIW1fYnVmZmVy
SXNJbnRlcm5hbCkKLSAgICAgICAgZGVsZXRlVUNoYXJWZWN0b3IobV9kYXRhKTsKKyAgICBpZiAo
IW1fYnVmZmVySXNJbnRlcm5hbCkgeworICAgICAgICBTaGFyZWRVQ2hhciogc2hhcmVkQnVmZmVy
ID0gbV9zaGFyZWRCdWZmZXJBbmRGbGFncy5nZXQoKTsKKyAgICAgICAgaWYgKHNoYXJlZEJ1ZmZl
cikKKyAgICAgICAgICAgIHNoYXJlZEJ1ZmZlci0+ZGVyZWYoKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZGVsZXRlVUNoYXJWZWN0b3IobV9kYXRhKTsKKyAgICB9CiB9CiAKIFN0cmluZ0lt
cGwqIFN0cmluZ0ltcGw6OmVtcHR5KCkKQEAgLTEwMTUsNiArMTAxNCwyOSBAQCBQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0ZShjb25zdCBjaGFyKiBzdHJpbmcpCiAgICAg
cmV0dXJuIGNyZWF0ZShzdHJpbmcsIHN0cmxlbihzdHJpbmcpKTsKIH0KIAorI2lmIFVTRShKU0Mp
CitQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnNoYXJlKGNvbnN0IEpTQzo6VVN0
cmluZyYgc3RyKQoreworICAgIFNoYXJlZFVDaGFyKiBzaGFyZWRCdWZmZXIgPSBjb25zdF9jYXN0
PEpTQzo6VVN0cmluZyo+KCZzdHIpLT5yZXAoKS0+YmFzZVN0cmluZygpLT5zaGFyZWRCdWZmZXIo
KTsKKyAgICBpZiAoc2hhcmVkQnVmZmVyKSB7CisgICAgICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gaW1wbCA9IGFkb3B0UmVmKG5ldyBTdHJpbmdJbXBsKGNvbnN0X2Nhc3Q8VUNoYXIqPihzdHIu
ZGF0YSgpKSwgc3RyLnNpemUoKSwgQWRvcHRCdWZmZXIoKSkpOworICAgICAgICBzaGFyZWRCdWZm
ZXItPnJlZigpOworICAgICAgICBpbXBsLT5tX3NoYXJlZEJ1ZmZlckFuZEZsYWdzLnNldChzaGFy
ZWRCdWZmZXIpOworICAgICAgICByZXR1cm4gaW1wbDsKKyAgICB9CisgICAgcmV0dXJuIFN0cmlu
Z0ltcGw6OmNyZWF0ZShzdHIuZGF0YSgpLCBzdHIuc2l6ZSgpKTsKK30KKworSlNDOjpVU3RyaW5n
IFN0cmluZ0ltcGw6OnVzdHJpbmcoKQoreworICAgIFNoYXJlZFVDaGFyKiBzaGFyZWRCdWZmZXIg
PSBTdHJpbmdJbXBsOjpzaGFyZWRCdWZmZXIoKTsKKyAgICBpZiAoc2hhcmVkQnVmZmVyKQorICAg
ICAgICByZXR1cm4gSlNDOjpVU3RyaW5nOjpSZXA6OnNoYXJlKGNvbnN0X2Nhc3Q8VUNoYXIqPiht
X2RhdGEpLCBtX2xlbmd0aCwgc2hhcmVkQnVmZmVyKTsKKworICAgIHJldHVybiBKU0M6OlVTdHJp
bmcobV9kYXRhLCBtX2xlbmd0aCk7Cit9CisjZW5kaWYKKwogUGFzc1JlZlB0cjxTdHJpbmdJbXBs
PiBTdHJpbmdJbXBsOjpjcmVhdGVXaXRoVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKGNvbnN0IFN0
cmluZ0ltcGwmIHN0cmluZykKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0cmluZ0ltcGwo
c3RyaW5nLCBXaXRoVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKCkpKTsKQEAgLTEwMjIsNyArMTA0
NCwyOCBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhUZXJt
aW5hdGluZ051bGxDaGFyYWN0ZXIoY29uc3QgU3RyaQogCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OmNvcHkoKQogewotICAgIHJldHVybiBjcmVhdGUobV9kYXRhLCBtX2xlbmd0
aCk7CisgICAgLy8gY29weSgpIG1heSBiZSBjYWxsZWQgb24gYW5vdGhlciB0aHJlYWQgZnJvbSB3
aGVyZSB0aGUgc3RyaW5nIGlzIG5vcm1hbGx5IGFjY2Vzc2VkLCBzbyBiZSBjYXJlZnVsIG5vdAor
ICAgIC8vIHRvIGNoYW5nZSBzdGF0ZSBpbiBTdHJpbmcgaW4gaGVyZSAob3RoZXIgdGhhbiB0byBl
bnN1cmVSZWZDb3VudGVkTWFsbG9jZWQgd2hpY2ggc2hvdWxkIGFscmVhZHkgYmUgc2V0CisgICAg
Ly8gaWYgdGhpcyBpcyBiZWluZyB1c2VkIGluIGEgY3Jvc3MgdGhyZWFkIG1hbm5lcikuCisgICAg
U2hhcmVkVUNoYXIqIHNoYXJlZEJ1ZmZlciA9IFN0cmluZ0ltcGw6OnNoYXJlZEJ1ZmZlcigpOwor
ICAgIGlmIChzaGFyZWRCdWZmZXIpIHsKKyAgICAgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBp
bXBsID0gYWRvcHRSZWYobmV3IFN0cmluZ0ltcGwoY29uc3RfY2FzdDxVQ2hhcio+KG1fZGF0YSks
IG1fbGVuZ3RoLCBBZG9wdEJ1ZmZlcigpKSk7CisgICAgICAgIGltcGwtPm1fc2hhcmVkQnVmZmVy
QW5kRmxhZ3Muc2V0KHNoYXJlZEJ1ZmZlci0+Y3Jvc3NUaHJlYWRDb3B5KCkucmVsZWFzZVJlZigp
KTsKKyAgICAgICAgcmV0dXJuIGltcGw7CisgICAgfQorCisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTdHJpbmdJbXBsKG1fZGF0YSwgbV9sZW5ndGgpKTsKIH0KIAorU3RyaW5nSW1wbDo6U2hhcmVk
VUNoYXIqIFN0cmluZ0ltcGw6OnNoYXJlZEJ1ZmZlcigpCit7CisgICAgaWYgKG1fbGVuZ3RoIDwg
bWluTGVuZ3RoVG9TaGFyZSB8fCBtX2J1ZmZlcklzSW50ZXJuYWwpCisgICAgICAgIHJldHVybiAw
OworCisgICAgaWYgKCFtX3NoYXJlZEJ1ZmZlckFuZEZsYWdzLmdldCgpKQorICAgICAgICBtX3No
YXJlZEJ1ZmZlckFuZEZsYWdzLnNldChTaGFyZWRVQ2hhcjo6Y3JlYXRlKG5ldyBPd25GYXN0TWFs
bG9jUHRyPFVDaGFyPihjb25zdF9jYXN0PFVDaGFyKj4obV9kYXRhKSkpLnJlbGVhc2VSZWYoKSk7
CisgICAgcmV0dXJuIG1fc2hhcmVkQnVmZmVyQW5kRmxhZ3MuZ2V0KCk7Cit9CisKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmlu
Z0ltcGwuaCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmgKaW5kZXggMzkyY2Ez
Yi4uNGQ1YzA4NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwu
aAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oCkBAIC0xLDYgKzEsNyBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQog
ICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCwxMSArMjUsMTgg
QEAKIAogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+Cisj
aW5jbHVkZSA8d3RmL0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25G
YXN0TWFsbG9jUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUHRyQW5kRmxhZ3MuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKKyNpZiBV
U0UoSlNDKQorI2luY2x1ZGUgPHJ1bnRpbWUvVVN0cmluZy5oPgorI2VuZGlmCisKICNpZiBQTEFU
Rk9STShDRikgfHwgKFBMQVRGT1JNKFFUKSAmJiBQTEFURk9STShEQVJXSU4pKQogdHlwZWRlZiBj
b25zdCBzdHJ1Y3QgX19DRlN0cmluZyAqIENGU3RyaW5nUmVmOwogI2VuZGlmCkBAIC03Miw2ICs4
MCw4IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nSW1wbChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxl
bmd0aCwgdW5zaWduZWQgaGFzaCk7CiAgICAgU3RyaW5nSW1wbChjb25zdCBjaGFyKiwgdW5zaWdu
ZWQgbGVuZ3RoLCB1bnNpZ25lZCBoYXNoKTsKIAorICAgIHR5cGVkZWYgQ3Jvc3NUaHJlYWRSZWZD
b3VudGVkPE93bkZhc3RNYWxsb2NQdHI8VUNoYXI+ID4gU2hhcmVkVUNoYXI7CisKIHB1YmxpYzoK
ICAgICB+U3RyaW5nSW1wbCgpOwogCkBAIC04NSwxMSArOTUsMTkgQEAgcHVibGljOgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZVN0cmlwcGluZ051bGxDaGFyYWN0ZXJz
KGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBhZG9wdChTdHJpbmdCdWZmZXImKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBhZG9wdChWZWN0b3I8VUNoYXI+Jik7CisjaWYgVVNFKEpTQykKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBzaGFyZShjb25zdCBKU0M6OlVTdHJpbmcmKTsKKyAg
ICBKU0M6OlVTdHJpbmcgdXN0cmluZygpOworI2VuZGlmCiAKKyAgICBTaGFyZWRVQ2hhciogc2hh
cmVkQnVmZmVyKCk7CiAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMoKSB7IHJldHVybiBtX2Rh
dGE7IH0KICAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2xlbmd0aDsgfQogCi0gICAg
Ym9vbCBoYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIoKSB7IHJldHVybiBtX2hhc1Rlcm1pbmF0
aW5nTnVsbENoYXJhY3RlcjsgfQorICAgIGJvb2wgaGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVy
KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRCdWZmZXJBbmRGbGFncy5pc0ZsYWdTZXQoSGFzVGVy
bWluYXRpbmdOdWxsQ2hhcmFjdGVyKTsgfQorCisgICAgYm9vbCBpblRhYmxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaGFyZWRCdWZmZXJBbmRGbGFncy5pc0ZsYWdTZXQoSW5UYWJsZSk7IH0KKyAgICB2
b2lkIHNldEluVGFibGUoKSB7IHJldHVybiBtX3NoYXJlZEJ1ZmZlckFuZEZsYWdzLnNldEZsYWco
SW5UYWJsZSk7IH0KIAogICAgIHVuc2lnbmVkIGhhc2goKSB7IGlmIChtX2hhc2ggPT0gMCkgbV9o
YXNoID0gY29tcHV0ZUhhc2gobV9kYXRhLCBtX2xlbmd0aCk7IHJldHVybiBtX2hhc2g7IH0KICAg
ICB1bnNpZ25lZCBleGlzdGluZ0hhc2goKSBjb25zdCB7IEFTU0VSVChtX2hhc2gpOyByZXR1cm4g
bV9oYXNoOyB9CkBAIC0xNzcsMTEgKzE5NSwxNiBAQCBwcml2YXRlOgogCiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlU3RyaXBwaW5nTnVsbENoYXJhY3RlcnNTbG93Q2Fz
ZShjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CiAKKyAgICBlbnVtIFN0cmluZ0ltcGxG
bGFncyB7CisgICAgICAgIEhhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3RlciwKKyAgICAgICAgSW5U
YWJsZSwKKyAgICB9OworCiAgICAgdW5zaWduZWQgbV9sZW5ndGg7CiAgICAgY29uc3QgVUNoYXIq
IG1fZGF0YTsKICAgICBtdXRhYmxlIHVuc2lnbmVkIG1faGFzaDsKLSAgICBib29sIG1faW5UYWJs
ZTsKLSAgICBib29sIG1faGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyOworICAgIFB0ckFuZEZs
YWdzPFNoYXJlZFVDaGFyLCBTdHJpbmdJbXBsRmxhZ3M+IG1fc2hhcmVkQnVmZmVyQW5kRmxhZ3M7
CisKICAgICAvLyBJbiBzb21lIGNhc2VzLCB3ZSBhbGxvY2F0ZSB0aGUgU3RyaW5nSW1wbCBzdHJ1
Y3QgYW5kIGl0cyBkYXRhCiAgICAgLy8gd2l0aGluIGEgc2luZ2xlIGhlYXAgYnVmZmVyLiBJbiB0
aGlzIGNhc2UsIHRoZSBtX2RhdGEgcG9pbnRlcgogICAgIC8vIGlzIGFuICJpbnRlcm5hbCBidWZm
ZXIiLCBhbmQgZG9lcyBub3QgbmVlZCB0byBiZSBkZWFsbG9jYXRlZC4K
</data>
<flag name="review"
          id="15580"
          type_id="1"
          status="-"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30773</attachid>
            <date>2009-05-29 03:45:36 -0700</date>
            <delta_ts>2009-06-01 00:26:13 -0700</delta_ts>
            <desc>Proposed fix.</desc>
            <filename>bug26057.txt</filename>
            <type>text/plain</type>
            <size>15504</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBiYjFjMDY1Li40MTk1NTMzIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkg
QEAKKzIwMDktMDUtMjkgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAyNjA1NzogU3Ry
aW5nSW1wbCBzaG91bGQgc2hhcmUgYnVmZmVycyB3aXRoIFVTdHJpbmcuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjA1NworCisgICAgICAgICogSmF2
YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIHJ1bnRpbWUvVVN0cmluZy5jcHA6CisgICAgICAg
IChKU0M6OlVTdHJpbmc6OlJlcDo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6QmFz
ZVN0cmluZzo6c2hhcmVkQnVmZmVyKTogT25seSBkbyB0aGUgc2hhcmluZyB3aGVuCisgICAgICAg
IHRoZSBidWZmZXIgZXhjZWVkcyBhIGNlcnRhaW4gc2l6ZS4gIFRoZSBzaXplIHdhcyB0dW5lZCBi
eSBydW5uaW5nCisgICAgICAgIHZhcmlvdXMgZG9tIGJlbmNobWFya3Mgd2l0aCBudW1iZXJzIHJh
bmdpbmcgZnJvbSAyMCB0byA4MDAgYW5kIGZpbmRpbmcKKyAgICAgICAgYSBwbGFjZSB0aGF0IHNl
ZW1lZCB0byBkbyB0aGUgYmVzdCBvdmVyYWxsLgorICAgICAgICAqIHJ1bnRpbWUvVVN0cmluZy5o
OgorCiAyMDA5LTA1LTI4ICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgTmlrb2xhcyBaaW1tZXJtYW5uLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUuZXhwIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
ZXhwCmluZGV4IGIwY2MzM2YuLmMwODc4NWIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLmV4cAorKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAK
QEAgLTIxNyw5ICsyMTcsMTEgQEAgX19aTjNKU0M3UHJvZmlsZTEwcmVzdG9yZUFsbEV2CiBfX1pO
M0pTQzdQcm9maWxlNWZvY3VzRVBLTlNfMTFQcm9maWxlTm9kZUUKIF9fWk4zSlNDN1Byb2ZpbGU3
ZXhjbHVkZUVQS05TXzExUHJvZmlsZU5vZGVFCiBfX1pOM0pTQzdQcm9maWxlN2ZvckVhY2hFTU5T
XzExUHJvZmlsZU5vZGVFRnZ2RQorX19aTjNKU0M3VVN0cmluZzEwQmFzZVN0cmluZzEyc2hhcmVk
QnVmZmVyRXYKIF9fWk4zSlNDN1VTdHJpbmczUmVwMTFjb21wdXRlSGFzaEVQS2NpCiBfX1pOM0pT
QzdVU3RyaW5nM1JlcDExY29tcHV0ZUhhc2hFUEt0aQogX19aTjNKU0M3VVN0cmluZzNSZXAxNG51
bGxCYXNlU3RyaW5nRQorX19aTjNKU0M3VVN0cmluZzNSZXA2Y3JlYXRlRVB0aU4zV1RGMTBQYXNz
UmVmUHRySU5TM18yMUNyb3NzVGhyZWFkUmVmQ291bnRlZElOUzNfMTZPd25GYXN0TWFsbG9jUHRy
SXRFRUVFRUUKIF9fWk4zSlNDN1VTdHJpbmczUmVwN2Rlc3Ryb3lFdgogX19aTjNKU0M3VVN0cmlu
ZzRmcm9tRWkKIF9fWk4zSlNDN1VTdHJpbmc0ZnJvbUVqCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5n
LmNwcAppbmRleCAwZjBkZDI0Li4wZWI0NmRhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1VTdHJpbmcuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5j
cHAKQEAgLTYyLDYgKzYyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiBleHRlcm4gY29uc3QgZG91Ymxl
IE5hTjsKIGV4dGVybiBjb25zdCBkb3VibGUgSW5mOwogCisvLyBUaGlzIG51bWJlciBtdXN0IGJl
IGF0IGxlYXN0IDIgdG8gYXZvaWQgc2hhcmluZyBlbXB0eSwgbnVsbCBhcyB3ZWxsIGFzIDEgY2hh
cmFjdGVyIHN0cmluZ3MgZnJvbSBTbWFsbFN0cmluZ3MuCitzdGF0aWMgY29uc3QgaW50IG1pbkxl
bmd0aFRvU2hhcmUgPSAzMDsKKwogc3RhdGljIGlubGluZSBzaXplX3Qgb3ZlcmZsb3dJbmRpY2F0
b3IoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpOyB9CiBzdGF0
aWMgaW5saW5lIHNpemVfdCBtYXhVQ2hhcnMoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRz
PHNpemVfdD46Om1heCgpIC8gc2l6ZW9mKFVDaGFyKTsgfQogCkBAIC0yMzIsNyArMjM1LDcgQEAg
UGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IFVTdHJpbmc6OlJlcDo6Y3JlYXRlRnJvbVVURjgoY29u
c3QgY2hhciogc3RyaW5nKQogICAgIHJldHVybiBVU3RyaW5nOjpSZXA6OmNyZWF0ZUNvcHlpbmco
YnVmZmVyLmRhdGEoKSwgcCAtIGJ1ZmZlci5kYXRhKCkpOwogfQogCi1QYXNzUmVmUHRyPFVTdHJp
bmc6OlJlcD4gVVN0cmluZzo6UmVwOjpzaGFyZShVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoLCBQ
YXNzUmVmUHRyPFVTdHJpbmc6OlNoYXJlZFVDaGFyPiBzaGFyZWRCdWZmZXIpCitQYXNzUmVmUHRy
PFVTdHJpbmc6OlJlcD4gVVN0cmluZzo6UmVwOjpjcmVhdGUoVUNoYXIqIHN0cmluZywgaW50IGxl
bmd0aCwgUGFzc1JlZlB0cjxVU3RyaW5nOjpTaGFyZWRVQ2hhcj4gc2hhcmVkQnVmZmVyKQogewog
ICAgIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiByZXAgPSBjcmVhdGUoc3RyaW5nLCBsZW5ndGgp
OwogICAgIHJlcC0+YmFzZVN0cmluZygpLT5zZXRTaGFyZWRCdWZmZXIoc2hhcmVkQnVmZmVyKTsK
QEAgLTM4Miw4ICszODUsOCBAQCB2b2lkIFVTdHJpbmc6OlJlcDo6Y2hlY2tDb25zaXN0ZW5jeSgp
IGNvbnN0CiAKIFVTdHJpbmc6OlNoYXJlZFVDaGFyKiBVU3RyaW5nOjpCYXNlU3RyaW5nOjpzaGFy
ZWRCdWZmZXIoKQogewotICAgIC8vIERvbid0IHNoYXJlIGVtcHR5LCBudWxsIGFuZCAxIGNoYXJh
Y3RlciBzdHJpbmdzIGZyb20gU21hbGxTdHJpbmdzLgotICAgIGlmIChsZW4gPD0gMSkKKworICAg
IGlmIChsZW4gPCBtaW5MZW5ndGhUb1NoYXJlKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlm
ICghbV9zaGFyZWRCdWZmZXIpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VT
dHJpbmcuaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCmluZGV4IDI5OTBlOTku
LjY4NTJkOTEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCisr
KyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCkBAIC0xMDUsNyArMTA1LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZXA+IGNyZWF0
ZUZyb21VVEY4KGNvbnN0IGNoYXIqKTsKIAogICAgICAgICAgICAgLy8gVXNlcyBTaGFyZWRVQ2hh
ciB0byBoYXZlIGpvaW50IG93bmVyc2hpcCBvdmVyIHRoZSBVQ2hhciouCi0gICAgICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxSZXA+IHNoYXJlKFVDaGFyKiwgaW50LCBQYXNzUmVmUHRyPFNoYXJl
ZFVDaGFyPik7CisgICAgICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZXA+IGNyZWF0ZShVQ2hh
ciosIGludCwgUGFzc1JlZlB0cjxTaGFyZWRVQ2hhcj4pOwogCiAgICAgICAgICAgICB2b2lkIGRl
c3Ryb3koKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCA5ZDBhYWNmLi41YjAzZDc4IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDA5LTA1LTI5ICBE
YXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMjYwNTc6IFN0cmluZ0ltcGwgc2hvdWxkIHNo
YXJlIGJ1ZmZlcnMgd2l0aCBVU3RyaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjYwNTcKKworICAgICAgICBUaGlzIGNoYW5nZSByZXN1bHRzIGlu
IHRoZSBmb2xsb3dpbmcgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzOgorICAgICAgICBPbiBodHRw
Oi8vd3d3LmhpeGllLmNoL3Rlc3RzL2FkaG9jL3BlcmYvZG9tL2FydGlmaWNpYWwvY29yZS8wMDEu
aHRtbAorICAgICAgICB0aGUgdGltZSB3ZW50IGZyb20gNzhtcyB0byA0MG1zIGZvciBhcHBlbmQg
KG90aGVyIHRpbWVzIHJlbWFpbmVkIGNvbnN0YW50KS4KKworICAgICAgICBPbiBodHRwOi8vd3d3
LmhpeGllLmNoL3Rlc3RzL2FkaG9jL3BlcmYvZG9tL2FydGlmaWNpYWwvY29yZS8wMDIuaHRtbCwK
KyAgICAgICAgdGhlIHRpbWUgd2VudCBmcm9tIDM5MDBtcyB0byAyNjAwbXMuCisKKyAgICAgICAg
Rm9yIGh0dHA6Ly9kcm9tYWVvLmNvbS8/ZG9tLCB0aGUgdGltZSBmb3IgRG9tTW9kaWZpY2F0aW9u
IGltcHJvdmVkIGJ5IH42JS4KKyAgICAgICAgT3RoZXIgdGVzdHMgaW4gZG9tIHNlZW1lZCB0byBi
ZSBmYXN0ZXIgYWNyb3NzIHNldmVyYWwgcnVucyBidXQgd2l0aGluIHRoZQorICAgICAgICBtYXJn
aW4gb2YgZXJyb3IgKGV4Y2VwdCBET00gQXR0cmlidXRlcyB3aGljaCB3YXMgc2xpZ2h0bHkgfjEu
NSUgd29yc2UpLgorCisgICAgICAgIEV4aXN0aW5nIHRlc3RzIGNvdmVyIHRoaXMgY29kZSBhbmQg
dGhlcmUgaXMgbm8gbmV3IGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgdGhhdCBpcyBleHBvc2VkIHRv
IHRlc3QuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBdG9taWNTdHJpbmc6OmFkZCk6CisgICAgICAgICogcGxhdGZvcm0vdGV4
dC9TdHJpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjpTdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RyaW5nOjpvcGVyYXRvciBVU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9y
bS90ZXh0L1N0cmluZ0ltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6U3Ry
aW5nSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjp+U3RyaW5nSW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpjcmVhdGUpOiBDb25zdW1lcyBhIHNoYXJlZCBi
dWZmZXIuCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjp1c3RyaW5nKTogU2hhcmVzIHRo
ZSBTdHJpbmdJbXBsJ3MgYnVmZmVyIHdpdGggdGhlIFVTdHJpbmcuCisgICAgICAgIChXZWJDb3Jl
OjpTdHJpbmdJbXBsOjpzaGFyZWRCdWZmZXIpOiBFeHBvc2VzIHRoZSBidWZmZXIgdGhhdCBtYXkg
YmUgc2hhcmVkLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oOgorICAgICAg
ICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6aGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OmluVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3RyaW5nSW1wbDo6c2V0SW5UYWJsZSk6IENvbnZlcnRlZCB0aGUgYm9vbHMgdG8gYmUgaW5zaWRl
IG9mIFB0ckFuZEZsYWdzCisgICAgICAgIHRvIGF2b2lkIGdyb3dpbmcgU3RyaW5nSW1wbCBpbiBz
aXplLgorCiAyMDA5LTA1LTI4ICBEbWl0cnkgVGl0b3YgIDxkaW1pY2hAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L0F0b21pY1N0cmluZy5jcHAKaW5kZXggZDg1ZjVlZS4uNDA5NDM5ZSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L0F0b21pY1N0cmluZy5jcHAKQEAgLTIwNiw3ICsyMDYsNyBAQCBQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IEF0b21pY1N0cmluZzo6YWRkKGNvbnN0IFVDaGFyKiBzKQogCiBQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IEF0b21pY1N0cmluZzo6YWRkKFN0cmluZ0ltcGwqIHIpCiB7Ci0gICAgaWYg
KCFyIHx8IHItPm1faW5UYWJsZSkKKyAgICBpZiAoIXIgfHwgci0+aW5UYWJsZSgpKQogICAgICAg
ICByZXR1cm4gcjsKIAogICAgIGlmIChyLT5sZW5ndGgoKSA9PSAwKQpAQCAtMjE0LDcgKzIxNCw3
IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nOjphZGQoU3RyaW5nSW1wbCog
cikKICAgICAKICAgICBTdHJpbmdJbXBsKiByZXN1bHQgPSAqc3RyaW5nVGFibGUoKS5hZGQociku
Zmlyc3Q7CiAgICAgaWYgKHJlc3VsdCA9PSByKQotICAgICAgICByLT5tX2luVGFibGUgPSB0cnVl
OworICAgICAgICByLT5zZXRJblRhYmxlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvU3RyaW5nLmNwcAppbmRleCA3MzNiNjYxLi43M2M5NTdkIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvU3RyaW5nLmNwcApAQCAtNjM3LDIxICs2MzcsMjEgQEAgU3RyaW5nOjpTdHJpbmcoY29uc3Qg
SWRlbnRpZmllciYgc3RyKQogewogICAgIGlmIChzdHIuaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUoc3RyLmRhdGEoKSwgc3RyLnNpemUo
KSk7CisgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlKHN0ci51c3RyaW5nKCkpOwogfQog
CiBTdHJpbmc6OlN0cmluZyhjb25zdCBVU3RyaW5nJiBzdHIpCiB7CiAgICAgaWYgKHN0ci5pc051
bGwoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZShz
dHIuZGF0YSgpLCBzdHIuc2l6ZSgpKTsKKyAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUo
c3RyKTsKIH0KIAogU3RyaW5nOjpvcGVyYXRvciBVU3RyaW5nKCkgY29uc3QKIHsKICAgICBpZiAo
IW1faW1wbCkKICAgICAgICAgcmV0dXJuIFVTdHJpbmcoKTsKLSAgICByZXR1cm4gVVN0cmluZyht
X2ltcGwtPmNoYXJhY3RlcnMoKSwgbV9pbXBsLT5sZW5ndGgoKSk7CisgICAgcmV0dXJuIG1faW1w
bC0+dXN0cmluZygpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9TdHJpbmdJbXBsLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNw
cAppbmRleCBiNTkzZGUwLi41OWNhNGEwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvU3RyaW5nSW1wbC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwu
Y3BwCkBAIC00NCw2ICs0NCw4IEBAIHVzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5MZW5ndGhUb1NoYXJlID0g
MjA7CisKIHN0YXRpYyBpbmxpbmUgVUNoYXIqIG5ld1VDaGFyVmVjdG9yKHVuc2lnbmVkIG4pCiB7
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFVDaGFyKj4oZmFzdE1hbGxvYyhzaXplb2YoVUNoYXIp
ICogbikpOwpAQCAtODAsOCArODIsNiBAQCBTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKCkKICAgICA6
IG1fbGVuZ3RoKDApCiAgICAgLCBtX2RhdGEoMCkKICAgICAsIG1faGFzaCgwKQotICAgICwgbV9p
blRhYmxlKGZhbHNlKQotICAgICwgbV9oYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIoZmFsc2Up
CiAgICAgLCBtX2J1ZmZlcklzSW50ZXJuYWwoZmFsc2UpCiB7CiAgICAgLy8gRW5zdXJlIHRoYXQg
dGhlIGhhc2ggaXMgY29tcHV0ZWQgc28gdGhhdCBBdG9taWNTdHJpbmdIYXNoIGNhbiBjYWxsIGV4
aXN0aW5nSGFzaCgpCkBAIC05Niw4ICs5Niw2IEBAIFN0cmluZ0ltcGw6OlN0cmluZ0ltcGwoKQog
aW5saW5lIFN0cmluZ0ltcGw6OlN0cmluZ0ltcGwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKICAgICA6IG1fbGVuZ3RoKGxlbmd0aCkKICAgICAsIG1faGFzaCgwKQot
ICAgICwgbV9pblRhYmxlKGZhbHNlKQotICAgICwgbV9oYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0
ZXIoZmFsc2UpCiAgICAgLCBtX2J1ZmZlcklzSW50ZXJuYWwoZmFsc2UpCiB7CiAgICAgVUNoYXIq
IGRhdGEgPSBuZXdVQ2hhclZlY3RvcihsZW5ndGgpOwpAQCAtMTA4LDEwICsxMDYsOSBAQCBpbmxp
bmUgU3RyaW5nSW1wbDo6U3RyaW5nSW1wbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoKQogaW5saW5lIFN0cmluZ0ltcGw6OlN0cmluZ0ltcGwoY29uc3QgU3RyaW5nSW1w
bCYgc3RyLCBXaXRoVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKQogICAgIDogbV9sZW5ndGgoc3Ry
Lm1fbGVuZ3RoKQogICAgICwgbV9oYXNoKHN0ci5tX2hhc2gpCi0gICAgLCBtX2luVGFibGUoZmFs
c2UpCi0gICAgLCBtX2hhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3Rlcih0cnVlKQogICAgICwgbV9i
dWZmZXJJc0ludGVybmFsKGZhbHNlKQogeworICAgIG1fc2hhcmVkQnVmZmVyQW5kRmxhZ3Muc2V0
RmxhZyhIYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIpOwogICAgIFVDaGFyKiBkYXRhID0gbmV3
VUNoYXJWZWN0b3Ioc3RyLm1fbGVuZ3RoICsgMSk7CiAgICAgbWVtY3B5KGRhdGEsIHN0ci5tX2Rh
dGEsIHN0ci5tX2xlbmd0aCAqIHNpemVvZihVQ2hhcikpOwogICAgIGRhdGFbc3RyLm1fbGVuZ3Ro
XSA9IDA7CkBAIC0xMjEsOCArMTE4LDYgQEAgaW5saW5lIFN0cmluZ0ltcGw6OlN0cmluZ0ltcGwo
Y29uc3QgU3RyaW5nSW1wbCYgc3RyLCBXaXRoVGVybWluYXRpbmdOdWxsQ2hhcmFjdGUKIGlubGlu
ZSBTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IGxlbmd0aCkKICAgICA6IG1fbGVuZ3RoKGxlbmd0aCkKICAgICAsIG1faGFzaCgwKQotICAgICwg
bV9pblRhYmxlKGZhbHNlKQotICAgICwgbV9oYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIoZmFs
c2UpCiAgICAgLCBtX2J1ZmZlcklzSW50ZXJuYWwoZmFsc2UpCiB7CiAgICAgQVNTRVJUKGNoYXJh
Y3RlcnMpOwpAQCAtMTQwLDggKzEzNSw2IEBAIGlubGluZSBTdHJpbmdJbXBsOjpTdHJpbmdJbXBs
KFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIEFkb3B0QnVmZmVyKQogICAgIDog
bV9sZW5ndGgobGVuZ3RoKQogICAgICwgbV9kYXRhKGNoYXJhY3RlcnMpCiAgICAgLCBtX2hhc2go
MCkKLSAgICAsIG1faW5UYWJsZShmYWxzZSkKLSAgICAsIG1faGFzVGVybWluYXRpbmdOdWxsQ2hh
cmFjdGVyKGZhbHNlKQogICAgICwgbV9idWZmZXJJc0ludGVybmFsKGZhbHNlKQogewogICAgIEFT
U0VSVChjaGFyYWN0ZXJzKTsKQEAgLTE1MiwxNCArMTQ1LDEzIEBAIGlubGluZSBTdHJpbmdJbXBs
OjpTdHJpbmdJbXBsKFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIEFkb3B0QnVm
ZmVyKQogU3RyaW5nSW1wbDo6U3RyaW5nSW1wbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5z
aWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBoYXNoKQogICAgIDogbV9sZW5ndGgobGVuZ3RoKQogICAg
ICwgbV9oYXNoKGhhc2gpCi0gICAgLCBtX2luVGFibGUodHJ1ZSkKLSAgICAsIG1faGFzVGVybWlu
YXRpbmdOdWxsQ2hhcmFjdGVyKGZhbHNlKQogICAgICwgbV9idWZmZXJJc0ludGVybmFsKGZhbHNl
KQogewogICAgIEFTU0VSVChoYXNoKTsKICAgICBBU1NFUlQoY2hhcmFjdGVycyk7CiAgICAgQVNT
RVJUKGxlbmd0aCk7CiAKKyAgICBzZXRJblRhYmxlKCk7CiAgICAgVUNoYXIqIGRhdGEgPSBuZXdV
Q2hhclZlY3RvcihsZW5ndGgpOwogICAgIG1lbWNweShkYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGgg
KiBzaXplb2YoVUNoYXIpKTsKICAgICBtX2RhdGEgPSBkYXRhOwpAQCAtMTY5LDE0ICsxNjEsMTMg
QEAgU3RyaW5nSW1wbDo6U3RyaW5nSW1wbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoLCB1bnNpZ25lZCBoYXNoKQogU3RyaW5nSW1wbDo6U3RyaW5nSW1wbChjb25zdCBj
aGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIGhhc2gpCiAgICAgOiBt
X2xlbmd0aChsZW5ndGgpCiAgICAgLCBtX2hhc2goaGFzaCkKLSAgICAsIG1faW5UYWJsZSh0cnVl
KQotICAgICwgbV9oYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIoZmFsc2UpCiAgICAgLCBtX2J1
ZmZlcklzSW50ZXJuYWwoZmFsc2UpCiB7CiAgICAgQVNTRVJUKGhhc2gpOwogICAgIEFTU0VSVChj
aGFyYWN0ZXJzKTsKICAgICBBU1NFUlQobGVuZ3RoKTsKIAorICAgIHNldEluVGFibGUoKTsKICAg
ICBVQ2hhciogZGF0YSA9IG5ld1VDaGFyVmVjdG9yKGxlbmd0aCk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSAhPSBsZW5ndGg7ICsraSkgewogICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBj
aGFyYWN0ZXJzW2ldOwpAQCAtMTg3LDEwICsxNzgsMTUgQEAgU3RyaW5nSW1wbDo6U3RyaW5nSW1w
bChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIGhhc2gp
CiAKIFN0cmluZ0ltcGw6On5TdHJpbmdJbXBsKCkKIHsKLSAgICBpZiAobV9pblRhYmxlKQorICAg
IGlmIChpblRhYmxlKCkpCiAgICAgICAgIEF0b21pY1N0cmluZzo6cmVtb3ZlKHRoaXMpOwotICAg
IGlmICghbV9idWZmZXJJc0ludGVybmFsKQotICAgICAgICBkZWxldGVVQ2hhclZlY3RvcihtX2Rh
dGEpOworICAgIGlmICghbV9idWZmZXJJc0ludGVybmFsKSB7CisgICAgICAgIFNoYXJlZFVDaGFy
KiBzaGFyZWRCdWZmZXIgPSBtX3NoYXJlZEJ1ZmZlckFuZEZsYWdzLmdldCgpOworICAgICAgICBp
ZiAoc2hhcmVkQnVmZmVyKQorICAgICAgICAgICAgc2hhcmVkQnVmZmVyLT5kZXJlZigpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBkZWxldGVVQ2hhclZlY3RvcihtX2RhdGEpOworICAgIH0K
IH0KIAogU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6ZW1wdHkoKQpAQCAtMTAxNSw2ICsxMDExLDI5
IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlKGNvbnN0IGNoYXIq
IHN0cmluZykKICAgICByZXR1cm4gY3JlYXRlKHN0cmluZywgc3RybGVuKHN0cmluZykpOwogfQog
CisjaWYgVVNFKEpTQykKK1Bhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRl
KGNvbnN0IEpTQzo6VVN0cmluZyYgc3RyKQoreworICAgIFNoYXJlZFVDaGFyKiBzaGFyZWRCdWZm
ZXIgPSBjb25zdF9jYXN0PEpTQzo6VVN0cmluZyo+KCZzdHIpLT5yZXAoKS0+YmFzZVN0cmluZygp
LT5zaGFyZWRCdWZmZXIoKTsKKyAgICBpZiAoc2hhcmVkQnVmZmVyKSB7CisgICAgICAgIFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gaW1wbCA9IGFkb3B0UmVmKG5ldyBTdHJpbmdJbXBsKGNvbnN0X2Nh
c3Q8VUNoYXIqPihzdHIuZGF0YSgpKSwgc3RyLnNpemUoKSwgQWRvcHRCdWZmZXIoKSkpOworICAg
ICAgICBzaGFyZWRCdWZmZXItPnJlZigpOworICAgICAgICBpbXBsLT5tX3NoYXJlZEJ1ZmZlckFu
ZEZsYWdzLnNldChzaGFyZWRCdWZmZXIpOworICAgICAgICByZXR1cm4gaW1wbDsKKyAgICB9Cisg
ICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZShzdHIuZGF0YSgpLCBzdHIuc2l6ZSgpKTsKK30K
KworSlNDOjpVU3RyaW5nIFN0cmluZ0ltcGw6OnVzdHJpbmcoKQoreworICAgIFNoYXJlZFVDaGFy
KiBzaGFyZWRCdWZmZXIgPSBTdHJpbmdJbXBsOjpzaGFyZWRCdWZmZXIoKTsKKyAgICBpZiAoc2hh
cmVkQnVmZmVyKQorICAgICAgICByZXR1cm4gSlNDOjpVU3RyaW5nOjpSZXA6OmNyZWF0ZShjb25z
dF9jYXN0PFVDaGFyKj4obV9kYXRhKSwgbV9sZW5ndGgsIHNoYXJlZEJ1ZmZlcik7CisKKyAgICBy
ZXR1cm4gSlNDOjpVU3RyaW5nKG1fZGF0YSwgbV9sZW5ndGgpOworfQorI2VuZGlmCisKIFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aFRlcm1pbmF0aW5nTnVsbENo
YXJhY3Rlcihjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmcpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTdHJpbmdJbXBsKHN0cmluZywgV2l0aFRlcm1pbmF0aW5nTnVsbENoYXJhY3RlcigpKSk7
CkBAIC0xMDI1LDQgKzEwNDQsMTUgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBs
Ojpjb3B5KCkKICAgICByZXR1cm4gY3JlYXRlKG1fZGF0YSwgbV9sZW5ndGgpOwogfQogCitTdHJp
bmdJbXBsOjpTaGFyZWRVQ2hhciogU3RyaW5nSW1wbDo6c2hhcmVkQnVmZmVyKCkKK3sKKyAgICBp
ZiAobV9sZW5ndGggPCBtaW5MZW5ndGhUb1NoYXJlIHx8IG1fYnVmZmVySXNJbnRlcm5hbCkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIW1fc2hhcmVkQnVmZmVyQW5kRmxhZ3MuZ2V0KCkp
CisgICAgICAgIG1fc2hhcmVkQnVmZmVyQW5kRmxhZ3Muc2V0KFNoYXJlZFVDaGFyOjpjcmVhdGUo
bmV3IE93bkZhc3RNYWxsb2NQdHI8VUNoYXI+KGNvbnN0X2Nhc3Q8VUNoYXIqPihtX2RhdGEpKSku
cmVsZWFzZVJlZigpKTsKKyAgICByZXR1cm4gbV9zaGFyZWRCdWZmZXJBbmRGbGFncy5nZXQoKTsK
K30KKworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvU3RyaW5nSW1wbC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwu
aAppbmRleCAzOTJjYTNiLi5mNTkxODAwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvU3RyaW5nSW1wbC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmgK
QEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTI0LDExICsyNSwxOCBAQAogCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0FT
Q0lJQ1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmg+CisjaW5j
bHVkZSA8d3RmL093bkZhc3RNYWxsb2NQdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9QdHJBbmRGbGFncy5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNv
ZGUuaD4KIAorI2lmIFVTRShKU0MpCisjaW5jbHVkZSA8cnVudGltZS9VU3RyaW5nLmg+CisjZW5k
aWYKKwogI2lmIFBMQVRGT1JNKENGKSB8fCAoUExBVEZPUk0oUVQpICYmIFBMQVRGT1JNKERBUldJ
TikpCiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGU3RyaW5nICogQ0ZTdHJpbmdSZWY7CiAjZW5k
aWYKQEAgLTcyLDYgKzgwLDggQEAgcHJpdmF0ZToKICAgICBTdHJpbmdJbXBsKGNvbnN0IFVDaGFy
KiwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBoYXNoKTsKICAgICBTdHJpbmdJbXBsKGNvbnN0
IGNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIGhhc2gpOwogCisgICAgdHlwZWRlZiBD
cm9zc1RocmVhZFJlZkNvdW50ZWQ8T3duRmFzdE1hbGxvY1B0cjxVQ2hhcj4gPiBTaGFyZWRVQ2hh
cjsKKwogcHVibGljOgogICAgIH5TdHJpbmdJbXBsKCk7CiAKQEAgLTg1LDExICs5NSwxOSBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlU3RyaXBwaW5n
TnVsbENoYXJhY3RlcnMoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkb3B0KFN0cmluZ0J1ZmZlciYpOwogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkb3B0KFZlY3RvcjxVQ2hhcj4mKTsKKyNpZiBVU0Uo
SlNDKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZShjb25zdCBKU0M6
OlVTdHJpbmcmKTsKKyAgICBKU0M6OlVTdHJpbmcgdXN0cmluZygpOworI2VuZGlmCiAKKyAgICBT
aGFyZWRVQ2hhciogc2hhcmVkQnVmZmVyKCk7CiAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMo
KSB7IHJldHVybiBtX2RhdGE7IH0KICAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2xl
bmd0aDsgfQogCi0gICAgYm9vbCBoYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIoKSB7IHJldHVy
biBtX2hhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3RlcjsgfQorICAgIGJvb2wgaGFzVGVybWluYXRp
bmdOdWxsQ2hhcmFjdGVyKCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRCdWZmZXJBbmRGbGFncy5p
c0ZsYWdTZXQoSGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKTsgfQorCisgICAgYm9vbCBpblRh
YmxlKCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRCdWZmZXJBbmRGbGFncy5pc0ZsYWdTZXQoSW5U
YWJsZSk7IH0KKyAgICB2b2lkIHNldEluVGFibGUoKSB7IHJldHVybiBtX3NoYXJlZEJ1ZmZlckFu
ZEZsYWdzLnNldEZsYWcoSW5UYWJsZSk7IH0KIAogICAgIHVuc2lnbmVkIGhhc2goKSB7IGlmICht
X2hhc2ggPT0gMCkgbV9oYXNoID0gY29tcHV0ZUhhc2gobV9kYXRhLCBtX2xlbmd0aCk7IHJldHVy
biBtX2hhc2g7IH0KICAgICB1bnNpZ25lZCBleGlzdGluZ0hhc2goKSBjb25zdCB7IEFTU0VSVCht
X2hhc2gpOyByZXR1cm4gbV9oYXNoOyB9CkBAIC0xNzcsMTEgKzE5NSwxNiBAQCBwcml2YXRlOgog
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlU3RyaXBwaW5nTnVsbENo
YXJhY3RlcnNTbG93Q2FzZShjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CiAKKyAgICBl
bnVtIFN0cmluZ0ltcGxGbGFncyB7CisgICAgICAgIEhhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3Rl
ciwKKyAgICAgICAgSW5UYWJsZSwKKyAgICB9OworCiAgICAgdW5zaWduZWQgbV9sZW5ndGg7CiAg
ICAgY29uc3QgVUNoYXIqIG1fZGF0YTsKICAgICBtdXRhYmxlIHVuc2lnbmVkIG1faGFzaDsKLSAg
ICBib29sIG1faW5UYWJsZTsKLSAgICBib29sIG1faGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVy
OworICAgIFB0ckFuZEZsYWdzPFNoYXJlZFVDaGFyLCBTdHJpbmdJbXBsRmxhZ3M+IG1fc2hhcmVk
QnVmZmVyQW5kRmxhZ3M7CisKICAgICAvLyBJbiBzb21lIGNhc2VzLCB3ZSBhbGxvY2F0ZSB0aGUg
U3RyaW5nSW1wbCBzdHJ1Y3QgYW5kIGl0cyBkYXRhCiAgICAgLy8gd2l0aGluIGEgc2luZ2xlIGhl
YXAgYnVmZmVyLiBJbiB0aGlzIGNhc2UsIHRoZSBtX2RhdGEgcG9pbnRlcgogICAgIC8vIGlzIGFu
ICJpbnRlcm5hbCBidWZmZXIiLCBhbmQgZG9lcyBub3QgbmVlZCB0byBiZSBkZWFsbG9jYXRlZC4K
</data>
<flag name="review"
          id="15612"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>