<?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>29991</bug_id>
          
          <creation_ts>2009-10-01 18:38:06 -0700</creation_ts>
          <short_desc>Implement per-storage-area quotas for LocalStorage</short_desc>
          <delta_ts>2009-10-05 13:39:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Jeremy Orlow">jorlow</assigned_to>
          <cc>fishd</cc>
    
    <cc>yael</cc>
    
    <cc>zwarich</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>151746</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-10-01 18:38:06 -0700</bug_when>
    <thetext>Implement per-storage-area quotas for LocalStorage

There are two previous bugs for this that attempted to solve this in different ways but were eventually abandoned: https://bugs.webkit.org/show_bug.cgi?id=26155 and https://bugs.webkit.org/show_bug.cgi?id=22765  I&apos;ve cc&apos;ed their owners on this one.

I put 90% of the code in StorageMap since the decision to allow an update is closely tied to quota tracking.  The quota is set via a page&apos;s Settings class.  Like with the local storage path and whether it&apos;s enabled, it&apos;s assumed that all pages in the same group will have the same settings.  The setting defaults to 5mb which is what the spec suggests, but it can easily be changed to anything else--including StorageMap::noQuota.  Any values in LocalStorage are grandfathered in regarudless of quota, so importItem only tracks (and will never block) imports.

I believe this change is a good transition to more complex quota management.  For example, if we wanted to track quotas in the SQLite DB, then we&apos;d just add a function to the StorageMap that sets the quota.  This would be fine since all use of LocalStorage is blocked on the import completing, so you&apos;d never hit a quota error in the mean time.  Also, if embedders wanted to ask the user whether to expand the quota whenever it&apos;s hit (before deciding whether or not to raise an exception), a callback via the chrome client should be fairly easy.  That said, I think it&apos;s best to add these features in steps rather than one huge patch.  (Both of these are on my TODO list, btw.)

Included is a layout test that verifies the behavior.  It assumes the default quota is 5mb (since that&apos;s what Settings defaults to).

I&apos;ll post the patch in a moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151747</commentid>
    <comment_count>1</comment_count>
      <attachid>40489</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-10-01 18:40:29 -0700</bug_when>
    <thetext>Created attachment 40489
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151922</commentid>
    <comment_count>2</comment_count>
      <attachid>40489</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-10-02 11:53:40 -0700</bug_when>
    <thetext>Comment on attachment 40489
Patch v1

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152435</commentid>
    <comment_count>3</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2009-10-05 13:39:21 -0700</bug_when>
    <thetext>*** Bug 22765 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40489</attachid>
            <date>2009-10-01 18:40:29 -0700</date>
            <delta_ts>2009-10-02 11:53:40 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-29991-20091001184027.patch</filename>
            <type>text/plain</type>
            <size>25813</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0OTAwNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjUgQEAKKzIwMDktMTAtMDEgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IHBlci1zdG9yYWdlLWFyZWEgcXVvdGFzIGZvciBM
b2NhbFN0b3JhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTI5OTkxCisKKyAgICAgICAgSSBwdXQgOTAlIG9mIHRoZSBjb2RlIGluIFN0b3JhZ2VNYXAg
c2luY2UgdGhlIGRlY2lzaW9uIHRvIGFsbG93IGFuIHVwZGF0ZSBpcworICAgICAgICBjbG9zZWx5
IHRpZWQgdG8gcXVvdGEgdHJhY2tpbmcuICBUaGUgcXVvdGEgaXMgc2V0IHZpYSBhIHBhZ2UncyBT
ZXR0aW5ncyBjbGFzcy4KKyAgICAgICAgTGlrZSB3aXRoIHRoZSBsb2NhbCBzdG9yYWdlIHBhdGgg
YW5kIHdoZXRoZXIgaXQncyBlbmFibGVkLCBpdCdzIGFzc3VtZWQgdGhhdAorICAgICAgICBhbGwg
cGFnZXMgaW4gdGhlIHNhbWUgZ3JvdXAgd2lsbCBoYXZlIHRoZSBzYW1lIHNldHRpbmdzLiAgVGhl
IHNldHRpbmcgZGVmYXVsdHMKKyAgICAgICAgdG8gNW1iIHdoaWNoIGlzIHdoYXQgdGhlIHNwZWMg
c3VnZ2VzdHMsIGJ1dCBpdCBjYW4gZWFzaWx5IGJlIGNoYW5nZWQgdG8KKyAgICAgICAgYW55dGhp
bmcgZWxzZS0taW5jbHVkaW5nIFN0b3JhZ2VNYXA6Om5vUXVvdGEuICBBbnkgdmFsdWVzIGluIExv
Y2FsU3RvcmFnZSBhcmUKKyAgICAgICAgZ3JhbmRmYXRoZXJlZCBpbiByZWdhcnVkbGVzcyBvZiBx
dW90YSwgc28gaW1wb3J0SXRlbSBvbmx5IHRyYWNrcyAoYW5kIHdpbGwKKyAgICAgICAgbmV2ZXIg
YmxvY2spIGltcG9ydHMuCisKKyAgICAgICAgSSBiZWxpZXZlIHRoaXMgY2hhbmdlIGlzIGEgZ29v
ZCB0cmFuc2l0aW9uIHRvIG1vcmUgY29tcGxleCBxdW90YSBtYW5hZ2VtZW50LgorICAgICAgICBG
b3IgZXhhbXBsZSwgaWYgd2Ugd2FudGVkIHRvIHRyYWNrIHF1b3RhcyBpbiB0aGUgU1FMaXRlIERC
LCB0aGVuIHdlJ2QganVzdCBhZGQKKyAgICAgICAgYSBmdW5jdGlvbiB0byB0aGUgU3RvcmFnZU1h
cCB0aGF0IHNldHMgdGhlIHF1b3RhLiAgVGhpcyB3b3VsZCBiZSBmaW5lIHNpbmNlIGFsbAorICAg
ICAgICB1c2Ugb2YgTG9jYWxTdG9yYWdlIGlzIGJsb2NrZWQgb24gdGhlIGltcG9ydCBjb21wbGV0
aW5nLCBzbyB5b3UnZCBuZXZlciBoaXQgYQorICAgICAgICBxdW90YSBlcnJvciBpbiB0aGUgbWVh
biB0aW1lLiAgQWxzbywgaWYgZW1iZWRkZXJzIHdhbnRlZCB0byBhc2sgdGhlIHVzZXIKKyAgICAg
ICAgd2hldGhlciB0byBleHBhbmQgdGhlIHF1b3RhIHdoZW5ldmVyIGl0J3MgaGl0IChiZWZvcmUg
ZGVjaWRpbmcgd2hldGhlciBvciBub3QKKyAgICAgICAgdG8gcmFpc2UgYW4gZXhjZXB0aW9uKSwg
YSBjYWxsYmFjayB2aWEgdGhlIGNocm9tZSBjbGllbnQgc2hvdWxkIGJlIGZhaXJseSBlYXN5Lgor
ICAgICAgICBUaGF0IHNhaWQsIEkgdGhpbmsgaXQncyBiZXN0IHRvIGFkZCB0aGVzZSBmZWF0dXJl
cyBpbiBzdGVwcyByYXRoZXIgdGhhbiBvbmUKKyAgICAgICAgaHVnZSBwYXRjaC4gIChCb3RoIG9m
IHRoZXNlIGFyZSBvbiBteSBUT0RPIGxpc3QsIGJ0dy4pCisKKyAgICAgICAgSW5jbHVkZWQgaXMg
YSBsYXlvdXQgdGVzdCB0aGF0IHZlcmlmaWVzIHRoZSBiZWhhdmlvci4gIEl0IGFzc3VtZXMgdGhl
IGRlZmF1bHQKKyAgICAgICAgcXVvdGEgaXMgNW1iIChzaW5jZSB0aGF0J3Mgd2hhdCBTZXR0aW5n
cyBkZWZhdWx0cyB0bykuCisKKyAgICAgICAgVGVzdDogc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fs
c3RvcmFnZS9xdW90YS5odG1sCisKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmxvY2FsU3RvcmFnZSk6CisgICAgICAgICogcGFnZS9T
ZXR0aW5ncy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6U2V0dGluZ3MpOgorICAg
ICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNldExvY2FsU3RvcmFnZVF1b3RhKToKKyAgICAgICAg
KiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6bG9jYWxTdG9y
YWdlUXVvdGEpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VBcmVhSW1wbDo6U3RvcmFnZUFyZWFJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYUlt
cGw6OmNsZWFyKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oOgorICAgICAg
ICAqIHN0b3JhZ2UvU3RvcmFnZU1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTWFw
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6U3RvcmFnZU1hcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTWFwOjpjb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VNYXA6OnNldEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6cmVtb3Zl
SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTWFwOjppbXBvcnRJdGVtKToKKyAgICAg
ICAgKiBzdG9yYWdlL1N0b3JhZ2VNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VNYXA6
OnF1b3RhKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZTo6bG9jYWxTdG9yYWdlTmFtZXNwYWNlKToKKyAg
ICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL1N0
b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3Bh
Y2VJbXBsOjpsb2NhbFN0b3JhZ2VOYW1lc3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZU5hbWVzcGFjZUltcGw6OnNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpTdG9yYWdlTmFtZXNwYWNlSW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y29weSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6c3RvcmFnZUFyZWEpOgorICAgICAgICAqIHN0b3JhZ2Uv
U3RvcmFnZU5hbWVzcGFjZUltcGwuaDoKKwogMjAwOS0xMC0wMSAgQ2hyaXMgTWFycmluICA8Y21h
cnJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCkluZGV4
OiBXZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uv
UGFnZUdyb3VwLmNwcAkocmV2aXNpb24gNDkwMDcpCisrKyBXZWJDb3JlL3BhZ2UvUGFnZUdyb3Vw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDggKzE5MSw5IEBAIFN0b3JhZ2VOYW1lc3BhY2Uq
IFBhZ2VHcm91cDo6bG9jYWxTdG9yYWcKICAgICBpZiAoIW1fbG9jYWxTdG9yYWdlKSB7CiAgICAg
ICAgIC8vIE5lZWQgYSBwYWdlIGluIHRoaXMgcGFnZSBncm91cCB0byBxdWVyeSB0aGUgc2V0dGlu
Z3MgZm9yIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIHBhdGguCiAgICAgICAgIFBhZ2UqIHBh
Z2UgPSAqbV9wYWdlcy5iZWdpbigpOwotICAgICAgICBBU1NFUlQocGFnZSk7Ci0gICAgICAgIG1f
bG9jYWxTdG9yYWdlID0gU3RvcmFnZU5hbWVzcGFjZTo6bG9jYWxTdG9yYWdlTmFtZXNwYWNlKHBh
Z2UtPnNldHRpbmdzKCktPmxvY2FsU3RvcmFnZURhdGFiYXNlUGF0aCgpKTsKKyAgICAgICAgY29u
c3QgU3RyaW5nJiBwYXRoID0gcGFnZS0+c2V0dGluZ3MoKS0+bG9jYWxTdG9yYWdlRGF0YWJhc2VQ
YXRoKCk7CisgICAgICAgIHVuc2lnbmVkIHF1b3RhID0gcGFnZS0+c2V0dGluZ3MoKS0+bG9jYWxT
dG9yYWdlUXVvdGEoKTsKKyAgICAgICAgbV9sb2NhbFN0b3JhZ2UgPSBTdG9yYWdlTmFtZXNwYWNl
Ojpsb2NhbFN0b3JhZ2VOYW1lc3BhY2UocGF0aCwgcXVvdGEpOwogICAgIH0KIAogICAgIHJldHVy
biBtX2xvY2FsU3RvcmFnZS5nZXQoKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAkocmV2aXNpb24gNDkwMDcp
CisrKyBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2
MSw3IEBAIFNldHRpbmdzOjpTZXR0aW5ncyhQYWdlKiBwYWdlKQogICAgICwgbV9kZWZhdWx0Rm9u
dFNpemUoMCkKICAgICAsIG1fZGVmYXVsdEZpeGVkRm9udFNpemUoMCkKICAgICAsIG1fbWF4aW11
bURlY29kZWRJbWFnZVNpemUobnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpCisgICAgLCBt
X2xvY2FsU3RvcmFnZVF1b3RhKDUgKiAxMDI0ICogMTAyNCkgIC8vIFN1Z2dlc3RlZCBieSB0aGUg
SFRNTDUgc3BlYy4KICAgICAsIG1fcGx1Z2luQWxsb3dlZFJ1blRpbWUobnVtZXJpY19saW1pdHM8
dW5zaWduZWQ+OjptYXgoKSkKICAgICAsIG1faXNKYXZhRW5hYmxlZChmYWxzZSkKICAgICAsIG1f
bG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KGZhbHNlKQpAQCAtMjYyLDYgKzI2MywxMSBAQCB2b2lk
IFNldHRpbmdzOjpzZXRTZXNzaW9uU3RvcmFnZUVuYWJsZWQoCiAgICAgbV9zZXNzaW9uU3RvcmFn
ZUVuYWJsZWQgPSBzZXNzaW9uU3RvcmFnZUVuYWJsZWQ7CiB9CiAKK3ZvaWQgU2V0dGluZ3M6OnNl
dExvY2FsU3RvcmFnZVF1b3RhKHVuc2lnbmVkIGxvY2FsU3RvcmFnZVF1b3RhKQoreworICAgIG1f
bG9jYWxTdG9yYWdlUXVvdGEgPSBsb2NhbFN0b3JhZ2VRdW90YTsKK30KKwogdm9pZCBTZXR0aW5n
czo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQp
CiB7CiAgICAgbV9wcml2YXRlQnJvd3NpbmdFbmFibGVkID0gcHJpdmF0ZUJyb3dzaW5nRW5hYmxl
ZDsKSW5kZXg6IFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9TZXR0aW5ncy5oCShyZXZpc2lvbiA0OTAwNykKKysrIFdlYkNvcmUvcGFnZS9TZXR0aW5n
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNiArMTI4LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2b2lkIHNldFNlc3Npb25TdG9yYWdlRW5hYmxlZChib29sKTsKICAgICAgICAg
Ym9vbCBzZXNzaW9uU3RvcmFnZUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb25TdG9y
YWdlRW5hYmxlZDsgfQogCisgICAgICAgIHZvaWQgc2V0TG9jYWxTdG9yYWdlUXVvdGEodW5zaWdu
ZWQpOworICAgICAgICB1bnNpZ25lZCBsb2NhbFN0b3JhZ2VRdW90YSgpIGNvbnN0IHsgcmV0dXJu
IG1fbG9jYWxTdG9yYWdlUXVvdGE7IH0KKwogICAgICAgICB2b2lkIHNldFByaXZhdGVCcm93c2lu
Z0VuYWJsZWQoYm9vbCk7CiAgICAgICAgIGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZDsgfQogCkBAIC0yOTUsNiArMjk4
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBpbnQgbV9kZWZhdWx0Rm9udFNpemU7
CiAgICAgICAgIGludCBtX2RlZmF1bHRGaXhlZEZvbnRTaXplOwogICAgICAgICBzaXplX3QgbV9t
YXhpbXVtRGVjb2RlZEltYWdlU2l6ZTsKKyAgICAgICAgdW5zaWduZWQgbV9sb2NhbFN0b3JhZ2VR
dW90YTsKICAgICAgICAgdW5zaWduZWQgbV9wbHVnaW5BbGxvd2VkUnVuVGltZTsKICAgICAgICAg
Ym9vbCBtX2lzSmF2YUVuYWJsZWQgOiAxOwogICAgICAgICBib29sIG1fbG9hZHNJbWFnZXNBdXRv
bWF0aWNhbGx5IDogMTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCShyZXZp
c2lvbiA0OTAwNykKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MywxNSArNDMsMTUgQEAgU3RvcmFnZUFyZWFJbXBsOjp+U3RvcmFnZUFy
ZWFJbXBsKCkKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogfQogCi1QYXNzUmVmUHRyPFN0
b3JhZ2VBcmVhSW1wbD4gU3RvcmFnZUFyZWFJbXBsOjpjcmVhdGUoU3RvcmFnZVR5cGUgc3RvcmFn
ZVR5cGUsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiwgUGFzc1JlZlB0cjxTdG9y
YWdlU3luY01hbmFnZXI+IHN5bmNNYW5hZ2VyKQorUGFzc1JlZlB0cjxTdG9yYWdlQXJlYUltcGw+
IFN0b3JhZ2VBcmVhSW1wbDo6Y3JlYXRlKFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlLCBQYXNzUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2Vy
PiBzeW5jTWFuYWdlciwgdW5zaWduZWQgcXVvdGEpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTdG9yYWdlQXJlYUltcGwoc3RvcmFnZVR5cGUsIG9yaWdpbiwgc3luY01hbmFnZXIpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFN0b3JhZ2VBcmVhSW1wbChzdG9yYWdlVHlwZSwgb3JpZ2lu
LCBzeW5jTWFuYWdlciwgcXVvdGEpKTsKIH0KIAotU3RvcmFnZUFyZWFJbXBsOjpTdG9yYWdlQXJl
YUltcGwoU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
IG9yaWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNNYW5hZ2VyKQorU3Rv
cmFnZUFyZWFJbXBsOjpTdG9yYWdlQXJlYUltcGwoU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIFBh
c3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01h
bmFnZXI+IHN5bmNNYW5hZ2VyLCB1bnNpZ25lZCBxdW90YSkKICAgICA6IG1fc3RvcmFnZVR5cGUo
c3RvcmFnZVR5cGUpCiAgICAgLCBtX3NlY3VyaXR5T3JpZ2luKG9yaWdpbikKLSAgICAsIG1fc3Rv
cmFnZU1hcChTdG9yYWdlTWFwOjpjcmVhdGUoKSkKKyAgICAsIG1fc3RvcmFnZU1hcChTdG9yYWdl
TWFwOjpjcmVhdGUocXVvdGEpKQogICAgICwgbV9zdG9yYWdlU3luY01hbmFnZXIoc3luY01hbmFn
ZXIpCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9pc1NodXRkb3duKGZhbHNlKQpAQCAtMTM1LDE1
ICsxMzUsMTQgQEAgdm9pZCBTdG9yYWdlQXJlYUltcGw6OnNldEl0ZW0oY29uc3QgU3RyaQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRklYTUU6IEZvciBMb2NhbFN0b3JhZ2Ugd2hl
cmUgYSBkaXNrIHF1b3RhIHdpbGwgYmUgZW5mb3JjZWQsIGhlcmUgaXMgd2hlcmUgd2UgbmVlZCB0
byBkbyBxdW90YSBjaGVja2luZy4KLSAgICAvLyAgICAgICAgSWYgd2UgZGVjaWRlIHRvIGVuZm9y
Y2UgYSBtZW1vcnkgcXVvdGEgZm9yIFNlc3Npb25TdG9yYWdlLCB0aGlzIGlzIHdoZXJlIHdlJ2Qg
ZG8gdGhhdCwgYWxzby4KLSAgICAvLyBpZiAoPG92ZXIgcXVvdGE+KSB7Ci0gICAgLy8gICAgIGVj
ID0gUVVPVEFfRVhDRUVERURfRVJSOwotICAgIC8vICAgICByZXR1cm47Ci0gICAgLy8gfQotCiAg
ICAgU3RyaW5nIG9sZFZhbHVlOwotICAgIFJlZlB0cjxTdG9yYWdlTWFwPiBuZXdNYXAgPSBtX3N0
b3JhZ2VNYXAtPnNldEl0ZW0oa2V5LCB2YWx1ZSwgb2xkVmFsdWUpOworICAgIGJvb2wgcXVvdGFF
eGNlcHRpb247CisgICAgUmVmUHRyPFN0b3JhZ2VNYXA+IG5ld01hcCA9IG1fc3RvcmFnZU1hcC0+
c2V0SXRlbShrZXksIHZhbHVlLCBvbGRWYWx1ZSwgcXVvdGFFeGNlcHRpb24pOworCisgICAgaWYg
KHF1b3RhRXhjZXB0aW9uKSB7CisgICAgICAgIGVjID0gUVVPVEFfRVhDRUVERURfRVJSOworICAg
ICAgICByZXR1cm47CisgICAgfQogCiAgICAgaWYgKG5ld01hcCkKICAgICAgICAgbV9zdG9yYWdl
TWFwID0gbmV3TWFwLnJlbGVhc2UoKTsKQEAgLTE4NSw3ICsxODQsOCBAQCB2b2lkIFN0b3JhZ2VB
cmVhSW1wbDo6Y2xlYXIoRnJhbWUqIGZyYW1lCiAgICAgaWYgKHByaXZhdGVCcm93c2luZ0VuYWJs
ZWQoZnJhbWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdl
TWFwOjpjcmVhdGUoKTsKKyAgICB1bnNpZ25lZCBxdW90YSA9IG1fc3RvcmFnZU1hcC0+cXVvdGEo
KTsKKyAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVhdGUocXVvdGEpOwogCiAgICAg
aWYgKG1fc3RvcmFnZUFyZWFTeW5jKQogICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1
bGVDbGVhcigpOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaAkocmV2aXNpb24gNDkw
MDcpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgU3RvcmFn
ZUFyZWFJbXBsIDogcHVibGljIFN0b3JhZ2VBcmVhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhSW1wbD4gY3JlYXRlKFN0b3JhZ2VUeXBlLCBQYXNz
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+KTsK
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiBjcmVhdGUoU3RvcmFn
ZVR5cGUsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5j
TWFuYWdlcj4sIHVuc2lnbmVkIHF1b3RhKTsKICAgICAgICAgdmlydHVhbCB+U3RvcmFnZUFyZWFJ
bXBsKCk7CiAKICAgICAgICAgLy8gVGhlIEhUTUw1IERPTSBTdG9yYWdlIEFQSSAoYW5kIGNvbnRh
aW5zKQpAQCAtNjEsNyArNjEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNlY3Vy
aXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgU3Rv
cmFnZUFyZWFJbXBsKFN0b3JhZ2VUeXBlLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgUGFz
c1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+KTsKKyAgICAgICAgU3RvcmFnZUFyZWFJbXBsKFN0
b3JhZ2VUeXBlLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgUGFzc1JlZlB0cjxTdG9yYWdl
U3luY01hbmFnZXI+LCB1bnNpZ25lZCBxdW90YSk7CiAgICAgICAgIFN0b3JhZ2VBcmVhSW1wbChT
dG9yYWdlQXJlYUltcGwqKTsKIAogICAgICAgICB2b2lkIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0
ZSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcAkocmV2aXNpb24gNDkwMDcpCisr
KyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDIw
ICszMCwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8U3RvcmFnZU1h
cD4gU3RvcmFnZU1hcDo6Y3JlYXRlKCkKK1Bhc3NSZWZQdHI8U3RvcmFnZU1hcD4gU3RvcmFnZU1h
cDo6Y3JlYXRlKHVuc2lnbmVkIHF1b3RhKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3Rv
cmFnZU1hcCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlTWFwKHF1b3RhKSk7CiB9
CiAKLVN0b3JhZ2VNYXA6OlN0b3JhZ2VNYXAoKQorU3RvcmFnZU1hcDo6U3RvcmFnZU1hcCh1bnNp
Z25lZCBxdW90YSkKICAgICA6IG1faXRlcmF0b3IobV9tYXAuZW5kKCkpCiAgICAgLCBtX2l0ZXJh
dG9ySW5kZXgoVUlOVF9NQVgpCisgICAgLCBtX3F1b3RhU2l6ZShxdW90YSkgIC8vIHF1b3RhIG1l
YXN1cmVkIGluIGJ5dGVzCisgICAgLCBtX2N1cnJlbnRMZW5ndGgoMCkKIHsKIH0KIAogUGFzc1Jl
ZlB0cjxTdG9yYWdlTWFwPiBTdG9yYWdlTWFwOjpjb3B5KCkKIHsKLSAgICBSZWZQdHI8U3RvcmFn
ZU1hcD4gbmV3TWFwID0gY3JlYXRlKCk7CisgICAgUmVmUHRyPFN0b3JhZ2VNYXA+IG5ld01hcCA9
IGNyZWF0ZShtX3F1b3RhU2l6ZSk7CiAgICAgbmV3TWFwLT5tX21hcCA9IG1fbWFwOwogICAgIHJl
dHVybiBuZXdNYXAucmVsZWFzZSgpOwogfQpAQCAtOTYsMjcgKzk4LDM0IEBAIFN0cmluZyBTdG9y
YWdlTWFwOjpnZXRJdGVtKGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gbV9tYXAuZ2V0KGtleSk7
CiB9CiAKLVBhc3NSZWZQdHI8U3RvcmFnZU1hcD4gU3RvcmFnZU1hcDo6c2V0SXRlbShjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgU3RyaW5nJiBvbGRWYWx1ZSkKK1Bhc3NS
ZWZQdHI8U3RvcmFnZU1hcD4gU3RvcmFnZU1hcDo6c2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgU3RyaW5nJiBvbGRWYWx1ZSwgYm9vbCYgcXVvdGFFeGNlcHRp
b24pCiB7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc051bGwoKSk7CisgICAgcXVvdGFFeGNlcHRpb24g
PSBmYWxzZTsKIAogICAgIC8vIEltcGxlbWVudCBjb3B5LW9uLXdyaXRlIHNlbWFudGljcyBoZXJl
LiAgV2UncmUgZ3VhcmFudGVlZCB0aGF0IHRoZSBvbmx5IHJlZnMgb2YgU3RvcmFnZU1hcHMgYmVs
b25nIHRvIFN0b3JhZ2Ugb2JqZWN0cwogICAgIC8vIHNvIGlmIG1vcmUgdGhhbiBvbmUgU3RvcmFn
ZSBvYmplY3QgcmVmcyB0aGlzIG1hcCwgY29weSBpdCBiZWZvcmUgbXV0YXRpbmcgaXQuCiAgICAg
aWYgKHJlZkNvdW50KCkgPiAxKSB7CiAgICAgICAgIFJlZlB0cjxTdG9yYWdlTWFwPiBuZXdTdG9y
YWdlTWFwID0gY29weSgpOwotICAgICAgICBuZXdTdG9yYWdlTWFwLT5zZXRJdGVtKGtleSwgdmFs
dWUsIG9sZFZhbHVlKTsKKyAgICAgICAgbmV3U3RvcmFnZU1hcC0+c2V0SXRlbShrZXksIHZhbHVl
LCBvbGRWYWx1ZSwgcXVvdGFFeGNlcHRpb24pOwogICAgICAgICByZXR1cm4gbmV3U3RvcmFnZU1h
cC5yZWxlYXNlKCk7CiAgICAgfQogCi0gICAgcGFpcjxIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6
aXRlcmF0b3IsIGJvb2w+IGFkZFJlc3VsdCA9IG1fbWFwLmFkZChrZXksIHZhbHVlKTsKKyAgICAv
LyBRdW90YSB0cmFja2luZy4gIElmIHRoZSBxdW90YSBpcyBlbmFibGVkIGFuZCB0aGlzIHdvdWxk
IGdvIG92ZXIgaXQsIGJhaWwuCisgICAgb2xkVmFsdWUgPSBtX21hcC5nZXQoa2V5KTsKKyAgICB1
bnNpZ25lZCBuZXdMZW5ndGggPSBtX2N1cnJlbnRMZW5ndGggKyB2YWx1ZS5sZW5ndGgoKSAtIG9s
ZFZhbHVlLmxlbmd0aCgpOworICAgIGJvb2wgb3ZlclF1b3RhID0gbmV3TGVuZ3RoID4gbV9xdW90
YVNpemUgLyBzaXplb2YoVUNoYXIpOworICAgIGJvb2wgb3ZlcmZsb3cgPSAobmV3TGVuZ3RoID4g
bV9jdXJyZW50TGVuZ3RoKSAhPSAodmFsdWUubGVuZ3RoKCkgPiBvbGRWYWx1ZS5sZW5ndGgoKSk7
CisgICAgQVNTRVJUKCFvdmVyZmxvdyk7ICAvLyBJZiB3ZSdyZSBkZWJ1Z2dpbmcsIG1ha2UgYSBm
dXNzLiAgQnV0IGl0J3Mgc3RpbGwgd29ydGggY2hlY2tpbmcgdGhpcyBpbiB0aGUgZm9sbG93aW5n
IGlmIHN0YXRlbWVudC4KKyAgICBpZiAobV9xdW90YVNpemUgIT0gbm9RdW90YSAmJiAob3ZlcmZs
b3cgfHwgb3ZlclF1b3RhKSkgeworICAgICAgICBxdW90YUV4Y2VwdGlvbiA9IHRydWU7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKyAgICBtX2N1cnJlbnRMZW5ndGggPSBuZXdMZW5ndGg7CiAK
LSAgICBpZiAoYWRkUmVzdWx0LnNlY29uZCkgewotICAgICAgICAvLyBUaGVyZSB3YXMgbm8gIm9s
ZFZhbHVlIiBzbyBudWxsIGl0IG91dC4KLSAgICAgICAgb2xkVmFsdWUgPSBTdHJpbmcoKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBvbGRWYWx1ZSA9IGFkZFJlc3VsdC5maXJzdC0+c2Vjb25kOwor
ICAgIHBhaXI8SGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yLCBib29sPiBhZGRSZXN1
bHQgPSBtX21hcC5hZGQoa2V5LCB2YWx1ZSk7CisgICAgaWYgKCFhZGRSZXN1bHQuc2Vjb25kKQog
ICAgICAgICBhZGRSZXN1bHQuZmlyc3QtPnNlY29uZCA9IHZhbHVlOwotICAgIH0KIAogICAgIGlu
dmFsaWRhdGVJdGVyYXRvcigpOwogCkBAIC0xMzcsNiArMTQ2LDEwIEBAIFBhc3NSZWZQdHI8U3Rv
cmFnZU1hcD4gU3RvcmFnZU1hcDo6cmVtb3YKICAgICBpZiAoIW9sZFZhbHVlLmlzTnVsbCgpKQog
ICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3IoKTsKIAorICAgIC8vIFVwZGF0ZSBxdW90YS4KKyAg
ICBBU1NFUlQobV9jdXJyZW50TGVuZ3RoIC0gb2xkVmFsdWUubGVuZ3RoKCkgPD0gbV9jdXJyZW50
TGVuZ3RoKTsKKyAgICBtX2N1cnJlbnRMZW5ndGggLT0gb2xkVmFsdWUubGVuZ3RoKCk7CisKICAg
ICByZXR1cm4gMDsKIH0KIApAQCAtMTUzLDYgKzE2NiwxMCBAQCB2b2lkIFN0b3JhZ2VNYXA6Omlt
cG9ydEl0ZW0oY29uc3QgU3RyaW5nCiAKICAgICBpZiAocmVzdWx0LnNlY29uZCkKICAgICAgICAg
cmVzdWx0LmZpcnN0LT5zZWNvbmQgPSB2YWx1ZS5jb3B5KCk7CisKKyAgICAvLyBVcGRhdGUgcXVv
dGEuCisgICAgQVNTRVJUKG1fY3VycmVudExlbmd0aCArIHZhbHVlLmxlbmd0aCgpID49IG1fY3Vy
cmVudExlbmd0aCk7CisgICAgbV9jdXJyZW50TGVuZ3RoICs9IHZhbHVlLmxlbmd0aCgpOwogfQog
CiB9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmgJKHJldmlzaW9uIDQ5MDA3KQorKysgV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMjAgKzM5LDI1IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFN0b3JhZ2VNYXAgOiBwdWJsaWMgUmVmQ291
bnRlZDxTdG9yYWdlTWFwPiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTdG9yYWdlTWFwPiBjcmVhdGUoKTsKKyAgICAgICAgLy8gUXVvdGEgc2l6ZSBtZXN1cmVkIGlu
IGJ5dGVzLgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdG9yYWdlTWFwPiBjcmVhdGUodW5z
aWduZWQgcXVvdGFTaXplKTsKIAogICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKICAg
ICAgICAgU3RyaW5nIGtleSh1bnNpZ25lZCBpbmRleCk7CiAgICAgICAgIFN0cmluZyBnZXRJdGVt
KGNvbnN0IFN0cmluZyYpIGNvbnN0OwotICAgICAgICBQYXNzUmVmUHRyPFN0b3JhZ2VNYXA+IHNl
dEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIFN0cmluZyYgb2xk
VmFsdWUpOworICAgICAgICBQYXNzUmVmUHRyPFN0b3JhZ2VNYXA+IHNldEl0ZW0oY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIFN0cmluZyYgb2xkVmFsdWUsIGJvb2wmIHF1
b3RhX2V4Y2VwdGlvbik7CiAgICAgICAgIFBhc3NSZWZQdHI8U3RvcmFnZU1hcD4gcmVtb3ZlSXRl
bShjb25zdCBTdHJpbmcmLCBTdHJpbmcmIG9sZFZhbHVlKTsKIAogICAgICAgICBib29sIGNvbnRh
aW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdDsKIAogICAgICAgICB2b2lkIGltcG9ydEl0ZW0o
Y29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogCisgICAgICAgIHVuc2ln
bmVkIHF1b3RhKCkgY29uc3QgeyByZXR1cm4gbV9xdW90YVNpemU7IH0KKworICAgICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgbm9RdW90YSA9IFVJTlRfTUFYOworCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgU3RvcmFnZU1hcCgpOworICAgICAgICBTdG9yYWdlTWFwKHVuc2lnbmVkIHF1b3RhKTsK
ICAgICAgICAgUGFzc1JlZlB0cjxTdG9yYWdlTWFwPiBjb3B5KCk7CiAgICAgICAgIHZvaWQgaW52
YWxpZGF0ZUl0ZXJhdG9yKCk7CiAgICAgICAgIHZvaWQgc2V0SXRlcmF0b3JUb0luZGV4KHVuc2ln
bmVkKTsKQEAgLTYwLDYgKzY1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBtX21hcDsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz46Oml0ZXJhdG9yIG1faXRlcmF0b3I7CiAgICAgICAgIHVuc2lnbmVkIG1faXRlcmF0b3JJbmRl
eDsKKworICAgICAgICB1bnNpZ25lZCBtX3F1b3RhU2l6ZTsgIC8vIE1lYXN1cmVkIGluIGJ5dGVz
LgorICAgICAgICB1bnNpZ25lZCBtX2N1cnJlbnRMZW5ndGg7ICAvLyBNZWFzdXJlZCBpbiBVQ2hh
cnMuCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VOYW1lc3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlTmFtZXNwYWNlLmNwcAkocmV2aXNpb24gNDkwMDcpCisrKyBXZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZU5hbWVzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDkgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3Jh
Z2VOYW1lc3BhY2U6OmxvY2FsU3RvcmFnZU5hbWVzcGFjZShjb25zdCBTdHJpbmcmIHBhdGgpCitQ
YXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2U6OmxvY2FsU3RvcmFn
ZU5hbWVzcGFjZShjb25zdCBTdHJpbmcmIHBhdGgsIHVuc2lnbmVkIHF1b3RhKQogewotICAgIHJl
dHVybiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6bG9jYWxTdG9yYWdlTmFtZXNwYWNlKHBhdGgpOwor
ICAgIHJldHVybiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6bG9jYWxTdG9yYWdlTmFtZXNwYWNlKHBh
dGgsIHF1b3RhKTsKIH0KIAogUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFt
ZXNwYWNlOjpzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSgpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZU5hbWVzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
TmFtZXNwYWNlLmgJKHJldmlzaW9uIDQ5MDA3KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VO
YW1lc3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgLy8gVGhpcyBpbnRlcmZhY2UgaXMgcmVxdWlyZWQgZm9yIENocm9taXVtIHNp
bmNlIHRoZXNlIGFjdGlvbnMgbmVlZCB0byBiZSBwcm94aWVkIGJldHdlZW4gcHJvY2Vzc2VzLgog
ICAgIGNsYXNzIFN0b3JhZ2VOYW1lc3BhY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxTdG9yYWdlTmFt
ZXNwYWNlPiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdG9yYWdl
TmFtZXNwYWNlPiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gbG9jYWxTdG9yYWdlTmFt
ZXNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCwgdW5zaWduZWQgcXVvdGEpOwogICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSgp
OwogCiAgICAgICAgIHZpcnR1YWwgflN0b3JhZ2VOYW1lc3BhY2UoKSB7IH0KSW5kZXg6IFdlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAkocmV2aXNpb24gNDkwMDcpCisrKyBX
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5IYXNoLmgiCiAjaW5jbHVk
ZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgorI2luY2x1ZGUg
IlN0b3JhZ2VNYXAuaCIKICNpbmNsdWRlICJTdG9yYWdlU3luY01hbmFnZXIuaCIKICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTQ0LDEyICs0NSwxMiBAQCBzdGF0aWMgTG9jYWxT
dG9yYWdlTmFtZXNwYWNlTWFwJiBsb2NhbFN0CiAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZU5hbWVz
cGFjZU1hcDsKIH0KIAotUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNw
YWNlSW1wbDo6bG9jYWxTdG9yYWdlTmFtZXNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCkKK1Bhc3NS
ZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmxvY2FsU3RvcmFn
ZU5hbWVzcGFjZShjb25zdCBTdHJpbmcmIHBhdGgsIHVuc2lnbmVkIHF1b3RhKQogewogICAgIGNv
bnN0IFN0cmluZyBsb29rdXBQYXRoID0gcGF0aC5pc051bGwoKSA/IFN0cmluZygiIikgOiBwYXRo
OwogICAgIExvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcDo6aXRlcmF0b3IgaXQgPSBsb2NhbFN0b3Jh
Z2VOYW1lc3BhY2VNYXAoKS5maW5kKGxvb2t1cFBhdGgpOwogICAgIGlmIChpdCA9PSBsb2NhbFN0
b3JhZ2VOYW1lc3BhY2VNYXAoKS5lbmQoKSkgewotICAgICAgICBSZWZQdHI8U3RvcmFnZU5hbWVz
cGFjZT4gc3RvcmFnZU5hbWVzcGFjZSA9IGFkb3B0UmVmKG5ldyBTdG9yYWdlTmFtZXNwYWNlSW1w
bChMb2NhbFN0b3JhZ2UsIGxvb2t1cFBhdGgpKTsKKyAgICAgICAgUmVmUHRyPFN0b3JhZ2VOYW1l
c3BhY2U+IHN0b3JhZ2VOYW1lc3BhY2UgPSBhZG9wdFJlZihuZXcgU3RvcmFnZU5hbWVzcGFjZUlt
cGwoTG9jYWxTdG9yYWdlLCBsb29rdXBQYXRoLCBxdW90YSkpOwogICAgICAgICBsb2NhbFN0b3Jh
Z2VOYW1lc3BhY2VNYXAoKS5zZXQobG9va3VwUGF0aCwgc3RvcmFnZU5hbWVzcGFjZS5nZXQoKSk7
CiAgICAgICAgIHJldHVybiBzdG9yYWdlTmFtZXNwYWNlLnJlbGVhc2UoKTsKICAgICB9CkBAIC01
OSwxMyArNjAsMTQgQEAgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZQog
CiBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpzZXNz
aW9uU3RvcmFnZU5hbWVzcGFjZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdl
TmFtZXNwYWNlSW1wbChTZXNzaW9uU3RvcmFnZSwgU3RyaW5nKCkpKTsKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFN0b3JhZ2VOYW1lc3BhY2VJbXBsKFNlc3Npb25TdG9yYWdlLCBTdHJpbmcoKSwg
U3RvcmFnZU1hcDo6bm9RdW90YSkpOwogfQogCi1TdG9yYWdlTmFtZXNwYWNlSW1wbDo6U3RvcmFn
ZU5hbWVzcGFjZUltcGwoU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIGNvbnN0IFN0cmluZyYgcGF0
aCkKK1N0b3JhZ2VOYW1lc3BhY2VJbXBsOjpTdG9yYWdlTmFtZXNwYWNlSW1wbChTdG9yYWdlVHlw
ZSBzdG9yYWdlVHlwZSwgY29uc3QgU3RyaW5nJiBwYXRoLCB1bnNpZ25lZCBxdW90YSkKICAgICA6
IG1fc3RvcmFnZVR5cGUoc3RvcmFnZVR5cGUpCiAgICAgLCBtX3BhdGgocGF0aC5jb3B5KCkpICAv
LyBDb3B5IG1ha2VzIGl0IHNhZmUgZm9yIG91ciBvdGhlciB0aHJlYWQgdG8gYWNjZXNzIHRoZSBw
YXRoLgogICAgICwgbV9zeW5jTWFuYWdlcigwKQorICAgICwgbV9xdW90YShxdW90YSkKICAgICAs
IG1faXNTaHV0ZG93bihmYWxzZSkKIHsKICAgICBpZiAobV9zdG9yYWdlVHlwZSA9PSBMb2NhbFN0
b3JhZ2UgJiYgIW1fcGF0aC5pc0VtcHR5KCkpCkBAIC05MSw3ICs5Myw3IEBAIFBhc3NSZWZQdHI8
U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWUKICAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7
CiAgICAgQVNTRVJUKG1fc3RvcmFnZVR5cGUgPT0gU2Vzc2lvblN0b3JhZ2UpOwogCi0gICAgU3Rv
cmFnZU5hbWVzcGFjZUltcGwqIG5ld05hbWVzcGFjZSA9IG5ldyBTdG9yYWdlTmFtZXNwYWNlSW1w
bChtX3N0b3JhZ2VUeXBlLCBtX3BhdGgpOworICAgIFN0b3JhZ2VOYW1lc3BhY2VJbXBsKiBuZXdO
YW1lc3BhY2UgPSBuZXcgU3RvcmFnZU5hbWVzcGFjZUltcGwobV9zdG9yYWdlVHlwZSwgbV9wYXRo
LCBtX3F1b3RhKTsKIAogICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3Jh
Z2VBcmVhTWFwLmVuZCgpOwogICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGkgPSBt
X3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCkBAIC0xMDksNyArMTExLDcg
QEAgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFnZU5hbWVzcGFjZQogICAgIGlmIChzdG9y
YWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbikpCiAgICAgICAgIHJldHVybiBz
dG9yYWdlQXJlYS5yZWxlYXNlKCk7CiAKLSAgICBzdG9yYWdlQXJlYSA9IFN0b3JhZ2VBcmVhSW1w
bDo6Y3JlYXRlKG1fc3RvcmFnZVR5cGUsIG9yaWdpbiwgbV9zeW5jTWFuYWdlcik7CisgICAgc3Rv
cmFnZUFyZWEgPSBTdG9yYWdlQXJlYUltcGw6OmNyZWF0ZShtX3N0b3JhZ2VUeXBlLCBvcmlnaW4s
IG1fc3luY01hbmFnZXIsIG1fcXVvdGEpOwogICAgIG1fc3RvcmFnZUFyZWFNYXAuc2V0KG9yaWdp
bi5yZWxlYXNlKCksIHN0b3JhZ2VBcmVhKTsKICAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFz
ZSgpOwogfQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgJKHJldmlz
aW9uIDQ5MDA3KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
Y2xhc3MgU3RvcmFnZU5hbWVzcGFjZUltcGwgOiBwdWJsaWMgU3RvcmFnZU5hbWVzcGFjZSB7CiAg
ICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBs
b2NhbFN0b3JhZ2VOYW1lc3BhY2UoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gbG9jYWxTdG9yYWdlTmFtZXNwYWNlKGNvbnN0
IFN0cmluZyYgcGF0aCwgdW5zaWduZWQgcXVvdGEpOwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTdG9yYWdlTmFtZXNwYWNlPiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSgpOwogCiAgICAgICAg
IHZpcnR1YWwgflN0b3JhZ2VOYW1lc3BhY2VJbXBsKCk7CkBAIC01Miw3ICs1Miw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHVubG9jaygpOwogCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgU3RvcmFnZU5hbWVzcGFjZUltcGwoU3RvcmFnZVR5cGUsIGNvbnN0IFN0
cmluZyYgcGF0aCk7CisgICAgICAgIFN0b3JhZ2VOYW1lc3BhY2VJbXBsKFN0b3JhZ2VUeXBlLCBj
b25zdCBTdHJpbmcmIHBhdGgsIHVuc2lnbmVkIHF1b3RhKTsKIAogICAgICAgICB0eXBlZGVmIEhh
c2hNYXA8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgUmVmUHRyPFN0b3JhZ2VBcmVhSW1wbD4sIFNl
Y3VyaXR5T3JpZ2luSGFzaD4gU3RvcmFnZUFyZWFNYXA7CiAgICAgICAgIFN0b3JhZ2VBcmVhTWFw
IG1fc3RvcmFnZUFyZWFNYXA7CkBAIC02Myw2ICs2Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgU3RyaW5nIG1fcGF0aDsKICAgICAgICAgUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdl
cj4gbV9zeW5jTWFuYWdlcjsKIAorICAgICAgICB1bnNpZ25lZCBtX3F1b3RhOyAgLy8gVGhlIGRl
ZmF1bHQgcXVvdGEgZm9yIGVhY2ggbmV3IHN0b3JhZ2UgYXJlYS4KICAgICAgICAgYm9vbCBtX2lz
U2h1dGRvd247CiAgICAgfTsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDkwMDcpCisrKyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNyBAQAorMjAwOS0xMC0w
MSAgSmVyZW15IE9ybG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgcGVyLXN0b3JhZ2UtYXJl
YSBxdW90YXMgZm9yIExvY2FsU3RvcmFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Mjk5OTEKKworICAgICAgICBJIHB1dCA5MCUgb2YgdGhlIGNvZGUg
aW4gU3RvcmFnZU1hcCBzaW5jZSB0aGUgZGVjaXNpb24gdG8gYWxsb3cgYW4gdXBkYXRlIGlzCisg
ICAgICAgIGNsb3NlbHkgdGllZCB0byBxdW90YSB0cmFja2luZy4gIFRoZSBxdW90YSBpcyBzZXQg
dmlhIGEgcGFnZSdzIFNldHRpbmdzIGNsYXNzLiAKKyAgICAgICAgTGlrZSB3aXRoIHRoZSBsb2Nh
bCBzdG9yYWdlIHBhdGggYW5kIHdoZXRoZXIgaXQncyBlbmFibGVkLCBpdCdzIGFzc3VtZWQgdGhh
dAorICAgICAgICBhbGwgcGFnZXMgaW4gdGhlIHNhbWUgZ3JvdXAgd2lsbCBoYXZlIHRoZSBzYW1l
IHNldHRpbmdzLiAgVGhlIHNldHRpbmcgZGVmYXVsdHMKKyAgICAgICAgdG8gNW1iIHdoaWNoIGlz
IHdoYXQgdGhlIHNwZWMgc3VnZ2VzdHMsIGJ1dCBpdCBjYW4gZWFzaWx5IGJlIGNoYW5nZWQgdG8K
KyAgICAgICAgYW55dGhpbmcgZWxzZS0taW5jbHVkaW5nIFN0b3JhZ2VNYXA6Om5vUXVvdGEuICBB
bnkgdmFsdWVzIGluIExvY2FsU3RvcmFnZSBhcmUKKyAgICAgICAgZ3JhbmRmYXRoZXJlZCBpbiBy
ZWdhcnVkbGVzcyBvZiBxdW90YSwgc28gaW1wb3J0SXRlbSBvbmx5IHRyYWNrcyAoYW5kIHdpbGwK
KyAgICAgICAgbmV2ZXIgYmxvY2spIGltcG9ydHMuCisKKyAgICAgICAgSSBiZWxpZXZlIHRoaXMg
Y2hhbmdlIGlzIGEgZ29vZCB0cmFuc2l0aW9uIHRvIG1vcmUgY29tcGxleCBxdW90YSBtYW5hZ2Vt
ZW50LiAKKyAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHdlIHdhbnRlZCB0byB0cmFjayBxdW90YXMg
aW4gdGhlIFNRTGl0ZSBEQiwgdGhlbiB3ZSdkIGp1c3QgYWRkCisgICAgICAgIGEgZnVuY3Rpb24g
dG8gdGhlIFN0b3JhZ2VNYXAgdGhhdCBzZXRzIHRoZSBxdW90YS4gIFRoaXMgd291bGQgYmUgZmlu
ZSBzaW5jZSBhbGwKKyAgICAgICAgdXNlIG9mIExvY2FsU3RvcmFnZSBpcyBibG9ja2VkIG9uIHRo
ZSBpbXBvcnQgY29tcGxldGluZywgc28geW91J2QgbmV2ZXIgaGl0IGEKKyAgICAgICAgcXVvdGEg
ZXJyb3IgaW4gdGhlIG1lYW4gdGltZS4gIEFsc28sIGlmIGVtYmVkZGVycyB3YW50ZWQgdG8gYXNr
IHRoZSB1c2VyCisgICAgICAgIHdoZXRoZXIgdG8gZXhwYW5kIHRoZSBxdW90YSB3aGVuZXZlciBp
dCdzIGhpdCAoYmVmb3JlIGRlY2lkaW5nIHdoZXRoZXIgb3Igbm90CisgICAgICAgIHRvIHJhaXNl
IGFuIGV4Y2VwdGlvbiksIGEgY2FsbGJhY2sgdmlhIHRoZSBjaHJvbWUgY2xpZW50IHNob3VsZCBi
ZSBmYWlybHkgZWFzeS4KKyAgICAgICAgVGhhdCBzYWlkLCBJIHRoaW5rIGl0J3MgYmVzdCB0byBh
ZGQgdGhlc2UgZmVhdHVyZXMgaW4gc3RlcHMgcmF0aGVyIHRoYW4gb25lCisgICAgICAgIGh1Z2Ug
cGF0Y2guICAoQm90aCBvZiB0aGVzZSBhcmUgb24gbXkgVE9ETyBsaXN0LCBidHcuKQorCisgICAg
ICAgIEluY2x1ZGVkIGlzIGEgbGF5b3V0IHRlc3QgdGhhdCB2ZXJpZmllcyB0aGUgYmVoYXZpb3Iu
ICBJdCBhc3N1bWVzIHRoZSBkZWZhdWx0CisgICAgICAgIHF1b3RhIGlzIDVtYiAoc2luY2UgdGhh
dCdzIHdoYXQgU2V0dGluZ3MgZGVmYXVsdHMgdG8pLgorCisgICAgICAgICogc3RvcmFnZS9kb21z
dG9yYWdlL2xvY2Fsc3RvcmFnZS9xdW90YS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHN0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2UvcXVvdGEuaHRtbDogQWRkZWQuCisgICAg
ICAgICogc3RvcmFnZS9kb21zdG9yYWdlL3NjcmlwdC10ZXN0cy9xdW90YS5qczogQWRkZWQuCisg
ICAgICAgIChydW5UZXN0KToKKwogMjAwOS0xMC0wMSAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCkluZGV4OiBMYXlv
dXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3F1b3RhLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9y
YWdlL3F1b3RhLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3Jh
Z2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2UvcXVvdGEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDIyIEBACitUZXN0IHdoZXRoZXIgdGhlIHF1b3RhIGlzIGRvaW5nIGl0cyBq
b2IuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitUZXN0aW5nIHdpbmRvdy5sb2Nh
bFN0b3JhZ2UKK3N0b3JhZ2UuY2xlYXIoKQorUEFTUyBzdG9yYWdlLmxlbmd0aCBpcyAwCitDcmVh
dGluZyAnZGF0YScgd2hpY2ggY29udGFpbnMgNjRLIG9mIGRhdGEKK1BBU1MgZGF0YS5sZW5ndGgg
aXMgNjU1MzYKK1B1dHRpbmcgJ2RhdGEnIGludG8gNDAgd2luZG93LmxvY2FsU3RvcmFnZSBidWNr
ZXRzLgorUHV0dGluZyAnZGF0YScgaW50byBhbm90aGVyIGJ1Y2tldC5oCitQQVNTIEhpdCBleGNl
cHRpb24gYXMgZXhwZWN0ZWQKK1ZlcmlmeSB0aGF0IGRhdGEgd2FzIG5ldmVyIGluc2VydGVkLgor
UEFTUyBzdG9yYWdlLmdldEl0ZW0oNDApIGlzIG51bGwKK1JlbW92aW5nIGJ1Y2tldCAzOS4KK0Fk
ZGluZyAnSGVsbG8hJyBpbnRvIGEgbmV3IGJ1Y2tldC4KK1BBU1MgSW5zZXJ0aW9uIHdvcmtlZC4K
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4
OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL3F1b3RhLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFn
ZS9xdW90YS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9y
YWdlL2xvY2Fsc3RvcmFnZS9xdW90YS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBA
Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorPHNjcmlwdCBzcmM9Ii4uL3NjcmlwdC10ZXN0cy9xdW90YS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0PgorcnVuVGVzdCgid2luZG93LmxvY2FsU3RvcmFnZSIpOworPC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFn
ZS9zY3JpcHQtdGVzdHMvcXVvdGEuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFn
ZS9kb21zdG9yYWdlL3NjcmlwdC10ZXN0cy9xdW90YS5qcwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9zY3JpcHQtdGVzdHMvcXVvdGEuanMJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDkgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0IHdoZXRoZXIgdGhlIHF1b3Rh
IGlzIGRvaW5nIGl0cyBqb2IuIik7CisKK2Z1bmN0aW9uIHJ1blRlc3Qoc3RvcmFnZVN0cmluZykK
K3sKKyAgICBzdG9yYWdlID0gZXZhbChzdG9yYWdlU3RyaW5nKTsKKyAgICBpZiAoIXN0b3JhZ2Up
IHsKKyAgICAgICAgdGVzdEZhaWxlZChzdG9yYWdlU3RyaW5nICsgIiBET0VTIE5PVCBleGlzdCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGVidWcoIlRlc3RpbmcgIiArIHN0b3Jh
Z2VTdHJpbmcpOworCisgICAgZXZhbEFuZExvZygic3RvcmFnZS5jbGVhcigpIik7CisgICAgc2hv
dWxkQmUoInN0b3JhZ2UubGVuZ3RoIiwgIjAiKTsKKworICAgIGRlYnVnKCJDcmVhdGluZyAnZGF0
YScgd2hpY2ggY29udGFpbnMgNjRLIG9mIGRhdGEiKTsKKyAgICBkYXRhID0gIlgiOworICAgIGZv
ciAodmFyIGk9MDsgaTwxNjsgaSsrKQorICAgICAgICBkYXRhICs9IGRhdGE7CisgICAgc2hvdWxk
QmUoImRhdGEubGVuZ3RoIiwgIjY1NTM2Iik7CisKKyAgICBkZWJ1ZygiUHV0dGluZyAnZGF0YScg
aW50byA0MCAiICsgc3RvcmFnZVN0cmluZyArICIgYnVja2V0cy4iKTsKKyAgICBmb3IgKHZhciBp
PTA7IGk8NDA7IGkrKykKKyAgICAgICAgc3RvcmFnZVtpXSA9IGRhdGE7CisKKyAgICBkZWJ1Zygi
UHV0dGluZyAnZGF0YScgaW50byBhbm90aGVyIGJ1Y2tldC5oIik7CisgICAgdHJ5IHsKKyAgICAg
ICAgc3RvcmFnZVs0MF0gPSBkYXRhOworICAgICAgICB0ZXN0RmFpbGVkKCJEaWQgbm90IGhpdCBx
dW90YSBlcnJvci4iKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHRlc3RQYXNzZWQoIkhp
dCBleGNlcHRpb24gYXMgZXhwZWN0ZWQiKTsKKyAgICB9CisKKyAgICBkZWJ1ZygiVmVyaWZ5IHRo
YXQgZGF0YSB3YXMgbmV2ZXIgaW5zZXJ0ZWQuIik7CisgICAgc2hvdWxkQmVOdWxsKCJzdG9yYWdl
LmdldEl0ZW0oNDApIik7CisKKyAgICBkZWJ1ZygiUmVtb3ZpbmcgYnVja2V0IDM5LiIpOworICAg
IHN0b3JhZ2UucmVtb3ZlSXRlbSgnMzknKTsKKworICAgIGRlYnVnKCJBZGRpbmcgJ0hlbGxvIScg
aW50byBhIG5ldyBidWNrZXQuIik7CisgICAgdHJ5IHsKKyAgICAgICAgc3RvcmFnZVsnZm9vJ10g
PSAiSGVsbG8hIjsKKyAgICAgICAgdGVzdFBhc3NlZCgiSW5zZXJ0aW9uIHdvcmtlZC4iKTsKKyAg
ICB9IGNhdGNoIChlKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIkV4Y2VwdGlvbjogIiArIGUpOwor
ICAgIH0KKworICAgIHdpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworfQ==
</data>
<flag name="review"
          id="21724"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
    <flag name="commit-queue"
          id="21725"
          type_id="3"
          status="-"
          setter="jorlow"
    />
          </attachment>
      

    </bug>

</bugzilla>