<?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>143400</bug_id>
          
          <creation_ts>2015-04-04 08:20:54 -0700</creation_ts>
          <short_desc>Network cache Bloom filter is too big</short_desc>
          <delta_ts>2015-04-05 08:23:25 -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>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1082775</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-04 08:20:54 -0700</bug_when>
    <thetext>Switch from a counting filter to to a bit filter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082776</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-04-04 08:21:26 -0700</bug_when>
    <thetext>&lt;rdar://problem/20426756&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082780</commentid>
    <comment_count>2</comment_count>
      <attachid>250127</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-04 08:56:37 -0700</bug_when>
    <thetext>Created attachment 250127
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082801</commentid>
    <comment_count>3</comment_count>
      <attachid>250133</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-04 11:57:34 -0700</bug_when>
    <thetext>Created attachment 250133
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082827</commentid>
    <comment_count>4</comment_count>
      <attachid>250133</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-04-04 17:05:39 -0700</bug_when>
    <thetext>Comment on attachment 250133
patch

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

Nice, r=me.

&gt; Source/WebKit2/ChangeLog:51
&gt; +2015-04-03  Antti Koivisto  &lt;antti@apple.com&gt;

Extra ChangeLog.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:523
&gt; +    // This was added already when starting the store but filter might have got wiped.

s/got/been/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082880</commentid>
    <comment_count>5</comment_count>
      <attachid>250154</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-05 02:56:53 -0700</bug_when>
    <thetext>Created attachment 250154
with a thread safety fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082886</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-05 08:23:25 -0700</bug_when>
    <thetext>https://trac.webkit.org/r182357</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250127</attachid>
            <date>2015-04-04 08:56:37 -0700</date>
            <delta_ts>2015-04-04 11:57:34 -0700</delta_ts>
            <desc>patch</desc>
            <filename>disk-cache-bit-bloom-2.patch</filename>
            <type>text/plain</type>
            <size>14633</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjM0MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDE1LTA0LTA0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBDYWNoZSBCbG9vbSBmaWx0ZXIg
aXMgdG9vIGJpZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQzNDAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSXQgaXMgY3VycmVudGx5IDFNQi4KKworICAgICAgICBUaGlzIHBhdGNoIHN3aXRjaGVzIHRo
ZSBjYWNoZSBmcm9tIGEgY291bnRpbmcgZmlsdGVyIChDb3VudGluZ0Jsb29tRmlsdGVyKSB0byBh
IGJpdCBmaWx0ZXIgKEJsb29tRmlsdGVyKS4KKworICAgICAgICBJdCBhbHNvIHJlZHVjZXMgdGhl
IGZpbHRlciBzaXplIGZyb20gMl4yMCB0byAyXjE4IGVsZW1lbnRzIHdoaWNoIGlzIGdvb2QgZm9y
IH4yNjAwMCBjYWNoZSBlbnRyaWVzIHdoaWxlCisgICAgICAgIHN0aWxsIGtlZXBpbmcgZmFsc2Ug
cG9zaXRpdmUgcmF0ZSBiZWxvdyAxJS4gVGhlIGN1cnJlbnQgbWF4aW11bSBzaXplIGFsbG93cyBh
cm91bmQgNDAwMCBlbnRyaWVzCisgICAgICAgIHdpdGggcmVhbCB3b3JsZCB3ZWIgY29udGVudC4K
KworICAgICAgICBUaGUgbmV3IGZpbHRlciBzaXplIGlzIDMyS0IuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhY2hlOjpTdG9yYWdlOjphZGRTdG9yZWRLZXlUb0NvbnRlbnRzRmlsdGVyKToKKworICAg
ICAgICAgICAgQWRkIG5ldyBjYWNoZSBlbnRyaWVzIHRvIGJvdGggdGhlIGN1cnJlbnQgZmlsdGVy
IGFuZCB0aGUgb25lIHRoYXQgaXMgYmVpbmcgcG9wdWxhdGVkLgorICAgICAgICAgICAgVGhhdCB3
YXkgd2UgZG9uJ3QgbWlzcyBlbnRyaWVzIHRoYXQgd2VyZSBhZGRlZCBkdXJpbmcgcG9wdWxhdGlv
biBvciBjYWNoZSBzaHJpbmsuCisKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9y
YWdlOjphZGRGaWxlVG9Db250ZW50c0ZpbHRlcik6CisKKyAgICAgICAgICAgIEZhY3RvciB0byBh
IGZ1bmN0aW9uLgorCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6cG9w
dWxhdGVDb250ZW50c0ZpbHRlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3Rv
cmFnZTo6bWF5Q29udGFpbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFn
ZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpyZXRy
aWV2ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6c3RvcmUpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OmRpc3BhdGNoUGVuZGluZ1dy
aXRlT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6
ZGlzcGF0Y2hGdWxsV3JpdGVPcGVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OlN0b3JhZ2U6OmRpc3BhdGNoSGVhZGVyV3JpdGVPcGVyYXRpb24pOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OnNldE1heGltdW1TaXplKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpjbGVhcik6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6U3RvcmFnZTo6c2hyaW5rSWZOZWVkZWQpOgorCisgICAgICAgICAgICBCaXQg
ZmlsdGVyIGRvZXMgbm90IHN1cHBvcnQgcmVtb3ZhbHMgc28gdGhpcyByZXF1aXJlcyBuZXcgc3Ry
YXRlZ3k6CisKKyAgICAgICAgICAgIER1cmluZyBjYWNoZSBzaHJpbmsga2VlcCBhcm91bmQgYm90
aCB0aGUgb2xkIGZpbHRlciBhbmQgYSBuZXcgb25lLiBBZGQgZW50cmllcyB3ZSBjaG9vc2UgdG8g
a2VlcCB0byB0aGUgbmV3IGZpbHRlci4KKyAgICAgICAgICAgIEF0IHRoZSBlbmQgcmVwbGFjZSB0
aGUgb2xkIGZpbHRlciB3aXRoIHRoZSBuZXcgb25lLgorCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6U3RvcmFnZTo6aW5pdGlhbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6Om1heUNvbnRhaW4pOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OlN0b3JhZ2U6OmNhY2hlTWF5Q29udGFpbik6IERlbGV0ZWQuCisKKzIwMTUtMDQt
MDMgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBub24t
Y291bnRpbmcgQmxvb20gZmlsdGVyIGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMzNjYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZVN0b3JhZ2UuaDoKKwogMjAxNS0wNC0wMyAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgQXR0ZW1wdGVkIGJ1aWxkIGZpeC4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0
b3JhZ2UuY3BwCShyZXZpc2lvbiAxODIzNDIpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAs
MzQgKzcwLDY1IEBAIFN0b3JhZ2U6OlN0b3JhZ2UoY29uc3QgU3RyaW5nJiBiYXNlRGlyZWMKICAg
ICAsIG1fc2VyaWFsQmFja2dyb3VuZElPUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBs
ZS5XZWJLaXQuQ2FjaGUuU3RvcmFnZS5zZXJpYWxCYWNrZ3JvdW5kIiwgV29ya1F1ZXVlOjpUeXBl
OjpTZXJpYWwsIFdvcmtRdWV1ZTo6UU9TOjpCYWNrZ3JvdW5kKSkKIHsKICAgICBkZWxldGVPbGRW
ZXJzaW9ucygpOwotICAgIGluaXRpYWxpemUoKTsKKyAgICBwb3B1bGF0ZUNvbnRlbnRzRmlsdGVy
KCk7CiB9CiAKLXZvaWQgU3RvcmFnZTo6aW5pdGlhbGl6ZSgpCit2b2lkIFN0b3JhZ2U6OmFkZFN0
b3JlZEtleVRvQ29udGVudHNGaWx0ZXIoY29uc3QgS2V5JiBrZXkpCiB7CiAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIFN0cmluZ0NhcHR1cmUgY2FjaGVQYXRoQ2FwdHVyZSht
X2RpcmVjdG9yeVBhdGgpOworICAgIGlmIChtX2NvbnRlbnRzRmlsdGVyKQorICAgICAgICBtX2Nv
bnRlbnRzRmlsdGVyLT5hZGQoa2V5LnNob3J0SGFzaCgpKTsKKyAgICAvLyBJZiB3ZSBnZXQgbmV3
IGVudHJpZXMgZHVyaW5nIGNvbnRlbnRzIGZpbHRlciBwb3B1bGF0aW9uIGFkZCB0aGVtIHRvIHRo
ZSBuZXcgZmlsdGVyIGFzIHdlbGwuCisgICAgaWYgKG1fcG9wdWxhdGluZ0NvbnRlbnRzRmlsdGVy
KQorICAgICAgICBtX3BvcHVsYXRpbmdDb250ZW50c0ZpbHRlci0+YWRkKGtleS5zaG9ydEhhc2go
KSk7Cit9CiAKK3NpemVfdCBTdG9yYWdlOjphZGRGaWxlVG9Db250ZW50c0ZpbHRlcihDb250ZW50
c0ZpbHRlciYgZmlsdGVyLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIGZp
bGVQYXRoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgS2V5OjpI
YXNoVHlwZSBoYXNoOworICAgIGlmICghS2V5OjpzdHJpbmdUb0hhc2goZmlsZU5hbWUsIGhhc2gp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICBsb25nIGxvbmcgZmlsZVNpemUgPSAwOworICAgIFdl
YkNvcmU6OmdldEZpbGVTaXplKGZpbGVQYXRoLCBmaWxlU2l6ZSk7CisgICAgaWYgKGZpbGVTaXpl
KQorICAgICAgICBmaWx0ZXIuYWRkKEtleTo6dG9TaG9ydEhhc2goaGFzaCkpOworICAgIHJldHVy
biBmaWxlU2l6ZTsKK30KKwordm9pZCBTdG9yYWdlOjpwb3B1bGF0ZUNvbnRlbnRzRmlsdGVyKCkK
K3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKG1fcG9wdWxhdGlu
Z0NvbnRlbnRzRmlsdGVyKQorICAgICAgICByZXR1cm47CisgICAgbV9wb3B1bGF0aW5nQ29udGVu
dHNGaWx0ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnRlbnRzRmlsdGVyPigpOworCisgICAgU3Ry
aW5nQ2FwdHVyZSBjYWNoZVBhdGhDYXB0dXJlKG1fZGlyZWN0b3J5UGF0aCk7CiAgICAgYmFja2dy
b3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpcywgY2FjaGVQYXRoQ2FwdHVyZV0gewogICAgICAg
ICBTdHJpbmcgY2FjaGVQYXRoID0gY2FjaGVQYXRoQ2FwdHVyZS5zdHJpbmcoKTsKLSAgICAgICAg
dHJhdmVyc2VDYWNoZUZpbGVzKGNhY2hlUGF0aCwgW3RoaXNdKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUsIGNvbnN0IFN0cmluZyYgcGFydGl0aW9uUGF0aCkgewotICAgICAgICAgICAgS2V5OjpIYXNo
VHlwZSBoYXNoOwotICAgICAgICAgICAgaWYgKCFLZXk6OnN0cmluZ1RvSGFzaChmaWxlTmFtZSwg
aGFzaCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgdW5zaWduZWQgc2hv
cnRIYXNoID0gS2V5Ojp0b1Nob3J0SGFzaChoYXNoKTsKLSAgICAgICAgICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChbdGhpcywgc2hvcnRIYXNoXSB7Ci0gICAgICAgICAgICAgICAgbV9jb250
ZW50c0ZpbHRlci5hZGQoc2hvcnRIYXNoKTsKLSAgICAgICAgICAgIH0pOworICAgICAgICBzaXpl
X3Qgc2l6ZSA9IDA7CisgICAgICAgIGF1dG8mIGZpbHRlciA9ICptX3BvcHVsYXRpbmdDb250ZW50
c0ZpbHRlcjsKKyAgICAgICAgdHJhdmVyc2VDYWNoZUZpbGVzKGNhY2hlUGF0aCwgWyZmaWx0ZXIs
ICZzaXplXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIHBhcnRpdGlvblBh
dGgpIHsKICAgICAgICAgICAgIGF1dG8gZmlsZVBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQocGFydGl0aW9uUGF0aCwgZmlsZU5hbWUpOwotICAgICAgICAgICAgbG9uZyBs
b25nIGZpbGVTaXplID0gMDsKLSAgICAgICAgICAgIFdlYkNvcmU6OmdldEZpbGVTaXplKGZpbGVQ
YXRoLCBmaWxlU2l6ZSk7Ci0gICAgICAgICAgICBtX2FwcHJveGltYXRlU2l6ZSArPSBmaWxlU2l6
ZTsKKyAgICAgICAgICAgIHNpemUgKz0gYWRkRmlsZVRvQ29udGVudHNGaWx0ZXIoZmlsdGVyLCBm
aWxlTmFtZSwgZmlsZVBhdGgpOworICAgICAgICB9KTsKKworICAgICAgICBSdW5Mb29wOjptYWlu
KCkuZGlzcGF0Y2goW3RoaXMsIHNpemVdIHsKKyAgICAgICAgICAgIG1fY29udGVudHNGaWx0ZXIg
PSBXVEY6Om1vdmUobV9wb3B1bGF0aW5nQ29udGVudHNGaWx0ZXIpOworICAgICAgICAgICAgbV9h
cHByb3hpbWF0ZVNpemUgPSBzaXplOwogICAgICAgICB9KTsKLSAgICAgICAgbV9oYXNQb3B1bGF0
ZWRDb250ZW50c0ZpbHRlciA9IHRydWU7CiAgICAgfSk7CiB9CiAKK2Jvb2wgU3RvcmFnZTo6bWF5
Q29udGFpbihjb25zdCBLZXkmIGtleSkgY29uc3QKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOworICAgIHJldHVybiAhbV9jb250ZW50c0ZpbHRlciB8fCBtX2NvbnRlbnRzRmlsdGVy
LT5tYXlDb250YWluKGtleS5zaG9ydEhhc2goKSk7Cit9CisKIHN0YXRpYyBTdHJpbmcgZGlyZWN0
b3J5UGF0aEZvcktleShjb25zdCBLZXkmIGtleSwgY29uc3QgU3RyaW5nJiBjYWNoZVBhdGgpCiB7
CiAgICAgQVNTRVJUKCFrZXkucGFydGl0aW9uKCkuaXNFbXB0eSgpKTsKQEAgLTI4OSwxMCArMzIw
LDggQEAgdm9pZCBTdG9yYWdlOjpyZW1vdmUoY29uc3QgS2V5JiBrZXkpCiAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIC8vIEZvciBzaW1wbGljaXR5IHdlIGRvbid0IHJlZHVj
ZSBtX2FwcHJveGltYXRlU2l6ZSBvbiByZW1vdmFscy4KLSAgICAvLyBUaGUgbmV4dCBjYWNoZSBz
aHJpbmsgd2lsbCB1cGRhdGUgdGhlIHNpemUuCi0KLSAgICBpZiAobV9jb250ZW50c0ZpbHRlci5t
YXlDb250YWluKGtleS5zaG9ydEhhc2goKSkpCi0gICAgICAgIG1fY29udGVudHNGaWx0ZXIucmVt
b3ZlKGtleS5zaG9ydEhhc2goKSk7CisgICAgLy8gV2UgYWxzbyBjYW4ndCByZW1vdmUgdGhlIGtl
eSBmcm9tIHRoZSBCbG9vbSBmaWx0ZXIgKGJ1dCBzb21lIGZhbHNlIHBvc2l0aXZlcyBhcmUgZXhw
ZWN0ZWQgYW55d2F5KS4KKyAgICAvLyBUaGUgbmV4dCBjYWNoZSBzaHJpbmsgd2lsbCB1cGRhdGUg
ZXZlcnl0aGluZy4KIAogICAgIFN0cmluZ0NhcHR1cmUgZmlsZVBhdGhDYXB0dXJlKGZpbGVQYXRo
Rm9yS2V5KGtleSwgbV9kaXJlY3RvcnlQYXRoKSk7CiAgICAgc2VyaWFsQmFja2dyb3VuZElPUXVl
dWUoKS5kaXNwYXRjaChbdGhpcywgZmlsZVBhdGhDYXB0dXJlXSB7CkBAIC0zODUsNyArNDE0LDcg
QEAgdm9pZCBTdG9yYWdlOjpyZXRyaWV2ZShjb25zdCBLZXkmIGtleSwgdQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgaWYgKCFjYWNoZU1heUNvbnRhaW4oa2V5LnNob3J0SGFzaCgpKSkg
eworICAgIGlmICghbWF5Q29udGFpbihrZXkpKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KG51bGxwdHIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDEyLDcgKzQ0MSw3IEBAIHZv
aWQgU3RvcmFnZTo6c3RvcmUoY29uc3QgUmVjb3JkJiByZWNvcmQKICAgICBtX3BlbmRpbmdXcml0
ZU9wZXJhdGlvbnMuYXBwZW5kKG5ldyBXcml0ZU9wZXJhdGlvbiB7IHJlY29yZCwgeyB9LCBXVEY6
Om1vdmUoY29tcGxldGlvbkhhbmRsZXIpIH0pOwogCiAgICAgLy8gQWRkIGtleSB0byB0aGUgZmls
dGVyIGFscmVhZHkgaGVyZSBhcyB3ZSBkbyBsb29rdXBzIGZyb20gdGhlIHBlbmRpbmcgb3BlcmF0
aW9ucyB0b28uCi0gICAgbV9jb250ZW50c0ZpbHRlci5hZGQocmVjb3JkLmtleS5zaG9ydEhhc2go
KSk7CisgICAgYWRkU3RvcmVkS2V5VG9Db250ZW50c0ZpbHRlcihyZWNvcmQua2V5KTsKIAogICAg
IGRpc3BhdGNoUGVuZGluZ1dyaXRlT3BlcmF0aW9ucygpOwogfQpAQCAtNDc5LDcgKzUwOCw3IEBA
IHZvaWQgU3RvcmFnZTo6ZGlzcGF0Y2hQZW5kaW5nV3JpdGVPcGVyYXQKICAgICAgICAgYXV0byYg
d3JpdGUgPSAqd3JpdGVPcGVyYXRpb247CiAgICAgICAgIG1fYWN0aXZlV3JpdGVPcGVyYXRpb25z
LmFkZChXVEY6Om1vdmUod3JpdGVPcGVyYXRpb24pKTsKIAotICAgICAgICBpZiAod3JpdGUuZXhp
c3RpbmdSZWNvcmQgJiYgY2FjaGVNYXlDb250YWluKHdyaXRlLnJlY29yZC5rZXkuc2hvcnRIYXNo
KCkpKSB7CisgICAgICAgIGlmICh3cml0ZS5leGlzdGluZ1JlY29yZCAmJiBtYXlDb250YWluKHdy
aXRlLnJlY29yZC5rZXkpKSB7CiAgICAgICAgICAgICBkaXNwYXRjaEhlYWRlcldyaXRlT3BlcmF0
aW9uKHdyaXRlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC00OTIsOCAr
NTIxLDggQEAgdm9pZCBTdG9yYWdlOjpkaXNwYXRjaEZ1bGxXcml0ZU9wZXJhdGlvbgogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgQVNTRVJUKG1fYWN0aXZlV3JpdGVPcGVyYXRp
b25zLmNvbnRhaW5zKCZ3cml0ZSkpOwogCi0gICAgaWYgKCFtX2NvbnRlbnRzRmlsdGVyLm1heUNv
bnRhaW4od3JpdGUucmVjb3JkLmtleS5zaG9ydEhhc2goKSkpCi0gICAgICAgIG1fY29udGVudHNG
aWx0ZXIuYWRkKHdyaXRlLnJlY29yZC5rZXkuc2hvcnRIYXNoKCkpOworICAgIC8vIFRoaXMgd2Fz
IGFkZGVkIGFscmVhZHkgd2hlbiBzdGFydGluZyB0aGUgc3RvcmUgYnV0IGZpbHRlciBtaWdodCBo
YXZlIGdvdCB3aXBlZC4KKyAgICBhZGRTdG9yZWRLZXlUb0NvbnRlbnRzRmlsdGVyKHdyaXRlLnJl
Y29yZC5rZXkpOwogCiAgICAgU3RyaW5nQ2FwdHVyZSBjYWNoZVBhdGhDYXB0dXJlKG1fZGlyZWN0
b3J5UGF0aCk7CiAgICAgYmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpcywgJndyaXRl
LCBjYWNoZVBhdGhDYXB0dXJlXSB7CkBAIC01MDYsMTAgKzUzNSw2IEBAIHZvaWQgU3RvcmFnZTo6
ZGlzcGF0Y2hGdWxsV3JpdGVPcGVyYXRpb24KIAogICAgICAgICBjaGFubmVsLT53cml0ZSgwLCBo
ZWFkZXJBbmRCb2R5RGF0YSwgW3RoaXMsICZ3cml0ZSwgYm9keU9mZnNldCwgZmRdKGludCBlcnJv
cikgewogICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3JhZ2UsICIoTmV0d29ya1Byb2Nl
c3MpIHdyaXRlIGNvbXBsZXRlIGVycm9yPSVkIiwgZXJyb3IpOwotICAgICAgICAgICAgaWYgKGVy
cm9yKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY29udGVudHNGaWx0ZXIubWF5Q29udGFpbih3
cml0ZS5yZWNvcmQua2V5LnNob3J0SGFzaCgpKSkKLSAgICAgICAgICAgICAgICAgICAgbV9jb250
ZW50c0ZpbHRlci5yZW1vdmUod3JpdGUucmVjb3JkLmtleS5zaG9ydEhhc2goKSk7Ci0gICAgICAg
ICAgICB9CiAgICAgICAgICAgICBzaXplX3QgYm9keVNpemUgPSB3cml0ZS5yZWNvcmQuYm9keS5z
aXplKCk7CiAgICAgICAgICAgICBzaXplX3QgdG90YWxTaXplID0gYm9keU9mZnNldCArIGJvZHlT
aXplOwogCkBAIC01MzQsNyArNTU5LDcgQEAgdm9pZCBTdG9yYWdlOjpkaXNwYXRjaEhlYWRlcldy
aXRlT3BlcmF0aQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgQVNTRVJUKHdy
aXRlLmV4aXN0aW5nUmVjb3JkKTsKICAgICBBU1NFUlQobV9hY3RpdmVXcml0ZU9wZXJhdGlvbnMu
Y29udGFpbnMoJndyaXRlKSk7Ci0gICAgQVNTRVJUKGNhY2hlTWF5Q29udGFpbih3cml0ZS5yZWNv
cmQua2V5LnNob3J0SGFzaCgpKSk7CisgICAgQVNTRVJUKG1heUNvbnRhaW4od3JpdGUucmVjb3Jk
LmtleSkpOwogCiAgICAgLy8gVHJ5IHRvIHVwZGF0ZSB0aGUgaGVhZGVyIG9mIGFuIGV4aXN0aW5n
IGVudHJ5LgogICAgIFN0cmluZ0NhcHR1cmUgY2FjaGVQYXRoQ2FwdHVyZShtX2RpcmVjdG9yeVBh
dGgpOwpAQCAtNTcwLDYgKzU5NSwxNiBAQCB2b2lkIFN0b3JhZ2U6OmRpc3BhdGNoSGVhZGVyV3Jp
dGVPcGVyYXRpCiB2b2lkIFN0b3JhZ2U6OnNldE1heGltdW1TaXplKHNpemVfdCBzaXplKQogewog
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisg
ICAgY29uc3Qgc2l6ZV90IGFzc3VtZWRBdmVyYWdlUmVjb3JkU2l6ZSA9IDUwIDw8IDIwOworICAg
IHNpemVfdCBtYXhpbXVtUmVjb3JkQ291bnQgPSBzaXplIC8gYXNzdW1lZEF2ZXJhZ2VSZWNvcmRT
aXplOworICAgIC8vIH4xMCBiaXRzIHBlciBlbGVtZW50IGFyZSByZXF1aXJlZCBmb3IgPDElIGZh
bHNlIHBvc2l0aXZlIHJhdGUuCisgICAgc2l6ZV90IGVmZmVjdGl2ZUJsb29tRmlsdGVyQ2FwYWNp
dHkgPSBDb250ZW50c0ZpbHRlcjo6dGFibGVTaXplIC8gMTA7CisgICAgLy8gSWYgdGhpcyBnZXRz
IGhpdCBpdCBtaWdodCBiZSB0aW1lIHRvIGluY3JlYXNlIHRoZSBmaWx0ZXIgc2l6ZS4KKyAgICBB
U1NFUlQobWF4aW11bVJlY29yZENvdW50IDwgZWZmZWN0aXZlQmxvb21GaWx0ZXJDYXBhY2l0eSk7
CisjZW5kaWYKKwogICAgIG1fbWF4aW11bVNpemUgPSBzaXplOwogCiAgICAgc2hyaW5rSWZOZWVk
ZWQoKTsKQEAgLTU4MCw3ICs2MTUsOCBAQCB2b2lkIFN0b3JhZ2U6OmNsZWFyKCkKICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAiKE5l
dHdvcmtQcm9jZXNzKSBjbGVhcmluZyBjYWNoZSIpOwogCi0gICAgbV9jb250ZW50c0ZpbHRlci5j
bGVhcigpOworICAgIGlmIChtX2NvbnRlbnRzRmlsdGVyKQorICAgICAgICBtX2NvbnRlbnRzRmls
dGVyLT5jbGVhcigpOwogICAgIG1fYXBwcm94aW1hdGVTaXplID0gMDsKIAogICAgIFN0cmluZ0Nh
cHR1cmUgZGlyZWN0b3J5UGF0aENhcHR1cmUobV9kaXJlY3RvcnlQYXRoKTsKQEAgLTYzMSwxOCAr
NjY3LDE4IEBAIHZvaWQgU3RvcmFnZTo6c2hyaW5rSWZOZWVkZWQoKQogCiAgICAgaWYgKG1fYXBw
cm94aW1hdGVTaXplIDw9IG1fbWF4aW11bVNpemUpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAo
bV9zaHJpbmtJblByb2dyZXNzKQorICAgIGlmIChtX3BvcHVsYXRpbmdDb250ZW50c0ZpbHRlcikK
ICAgICAgICAgcmV0dXJuOwotICAgIG1fc2hyaW5rSW5Qcm9ncmVzcyA9IHRydWU7CisgICAgbV9w
b3B1bGF0aW5nQ29udGVudHNGaWx0ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnRlbnRzRmlsdGVy
PigpOwogCiAgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3JhZ2UsICIoTmV0d29ya1Byb2Nlc3MpIHNo
cmlua2luZyBjYWNoZSBhcHByb3hpbWF0ZVNpemU9JXp1LCBtX21heGltdW1TaXplPSV6dSIsIHN0
YXRpY19jYXN0PHNpemVfdD4obV9hcHByb3hpbWF0ZVNpemUpLCBtX21heGltdW1TaXplKTsKIAot
ICAgIG1fYXBwcm94aW1hdGVTaXplID0gMDsKLQogICAgIFN0cmluZ0NhcHR1cmUgY2FjaGVQYXRo
Q2FwdHVyZShtX2RpcmVjdG9yeVBhdGgpOwogICAgIGJhY2tncm91bmRJT1F1ZXVlKCkuZGlzcGF0
Y2goW3RoaXMsIGNhY2hlUGF0aENhcHR1cmVdIHsKKyAgICAgICAgYXV0byYgZmlsdGVyID0gKm1f
cG9wdWxhdGluZ0NvbnRlbnRzRmlsdGVyOworICAgICAgICBzaXplX3Qgc2l6ZSA9IDA7CiAgICAg
ICAgIFN0cmluZyBjYWNoZVBhdGggPSBjYWNoZVBhdGhDYXB0dXJlLnN0cmluZygpOwotICAgICAg
ICB0cmF2ZXJzZUNhY2hlRmlsZXMoY2FjaGVQYXRoLCBbdGhpc10oY29uc3QgU3RyaW5nJiBmaWxl
TmFtZSwgY29uc3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRoKSB7CisgICAgICAgIHRyYXZlcnNlQ2Fj
aGVGaWxlcyhjYWNoZVBhdGgsIFsmZmlsdGVyLCAmc2l6ZV0oY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSwgY29uc3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRoKSB7CiAgICAgICAgICAgICBhdXRvIGZpbGVQ
YXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhcnRpdGlvblBhdGgsIGZp
bGVOYW1lKTsKIAogICAgICAgICAgICAgYXV0byB0aW1lcyA9IGZpbGVUaW1lcyhmaWxlUGF0aCk7
CkBAIC02NTEsMjIgKzY4NywxNiBAQCB2b2lkIFN0b3JhZ2U6OnNocmlua0lmTmVlZGVkKCkKIAog
ICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3JhZ2UsICJEZWxldGlvbiBwcm9iYWJpbGl0
eT0lZiBzaG91bGREZWxldGU9JWQiLCBwcm9iYWJpbGl0eSwgc2hvdWxkRGVsZXRlKTsKIAotICAg
ICAgICAgICAgaWYgKCFzaG91bGREZWxldGUpIHsKLSAgICAgICAgICAgICAgICBsb25nIGxvbmcg
ZmlsZVNpemUgPSAwOwotICAgICAgICAgICAgICAgIFdlYkNvcmU6OmdldEZpbGVTaXplKGZpbGVQ
YXRoLCBmaWxlU2l6ZSk7Ci0gICAgICAgICAgICAgICAgbV9hcHByb3hpbWF0ZVNpemUgKz0gZmls
ZVNpemU7CisgICAgICAgICAgICBpZiAoc2hvdWxkRGVsZXRlKSB7CisgICAgICAgICAgICAgICAg
V2ViQ29yZTo6ZGVsZXRlRmlsZShmaWxlUGF0aCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQorICAgICAgICAgICAgc2l6ZSArPSBhZGRGaWxlVG9Db250ZW50c0ZpbHRl
cihmaWx0ZXIsIGZpbGVOYW1lLCBmaWxlUGF0aCk7CisgICAgICAgIH0pOwogCi0gICAgICAgICAg
ICBXZWJDb3JlOjpkZWxldGVGaWxlKGZpbGVQYXRoKTsKLSAgICAgICAgICAgIEtleTo6SGFzaFR5
cGUgaGFzaDsKLSAgICAgICAgICAgIGlmICghS2V5OjpzdHJpbmdUb0hhc2goZmlsZU5hbWUsIGhh
c2gpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0
SGFzaCA9IEtleTo6dG9TaG9ydEhhc2goaGFzaCk7Ci0gICAgICAgICAgICBSdW5Mb29wOjptYWlu
KCkuZGlzcGF0Y2goW3RoaXMsIHNob3J0SGFzaF0gewotICAgICAgICAgICAgICAgIGlmIChtX2Nv
bnRlbnRzRmlsdGVyLm1heUNvbnRhaW4oc2hvcnRIYXNoKSkKLSAgICAgICAgICAgICAgICAgICAg
bV9jb250ZW50c0ZpbHRlci5yZW1vdmUoc2hvcnRIYXNoKTsKLSAgICAgICAgICAgIH0pOworICAg
ICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHNpemVdIHsKKyAgICAgICAgICAg
IG1fY29udGVudHNGaWx0ZXIgPSBXVEY6Om1vdmUobV9wb3B1bGF0aW5nQ29udGVudHNGaWx0ZXIp
OworICAgICAgICAgICAgbV9hcHByb3hpbWF0ZVNpemUgPSBzaXplOwogICAgICAgICB9KTsKIAog
ICAgICAgICAvLyBMZXQgc3lzdGVtIGZpZ3VyZSBvdXQgaWYgdGhleSBhcmUgcmVhbGx5IGVtcHR5
LgpAQCAtNjc1LDggKzcwNSw2IEBAIHZvaWQgU3RvcmFnZTo6c2hyaW5rSWZOZWVkZWQoKQogICAg
ICAgICAgICAgV2ViQ29yZTo6ZGVsZXRlRW1wdHlEaXJlY3RvcnkocGFydGl0aW9uUGF0aCk7CiAg
ICAgICAgIH0pOwogCi0gICAgICAgIG1fc2hyaW5rSW5Qcm9ncmVzcyA9IGZhbHNlOwotCiAgICAg
ICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSBjYWNoZSBzaHJp
bmsgY29tcGxldGVkIGFwcHJveGltYXRlU2l6ZT0lenUiLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1f
YXBwcm94aW1hdGVTaXplKSk7CiAgICAgfSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCShy
ZXZpc2lvbiAxODIzNDIpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTdG9yYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBTdG9yYWdlKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5UGF0aCk7
CiAKLSAgICB2b2lkIGluaXRpYWxpemUoKTsKKyAgICB2b2lkIHBvcHVsYXRlQ29udGVudHNGaWx0
ZXIoKTsKICAgICB2b2lkIGRlbGV0ZU9sZFZlcnNpb25zKCk7CiAgICAgdm9pZCBzaHJpbmtJZk5l
ZWRlZCgpOwogCkBAIC0xMTEsMTggKzExMSwyMSBAQCBwcml2YXRlOgogICAgIFdvcmtRdWV1ZSYg
YmFja2dyb3VuZElPUXVldWUoKSB7IHJldHVybiBtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpOyB9
CiAgICAgV29ya1F1ZXVlJiBzZXJpYWxCYWNrZ3JvdW5kSU9RdWV1ZSgpIHsgcmV0dXJuIG1fc2Vy
aWFsQmFja2dyb3VuZElPUXVldWUuZ2V0KCk7IH0KIAotICAgIGJvb2wgY2FjaGVNYXlDb250YWlu
KHVuc2lnbmVkIHNob3J0SGFzaCkgeyByZXR1cm4gIW1faGFzUG9wdWxhdGVkQ29udGVudHNGaWx0
ZXIgfHwgbV9jb250ZW50c0ZpbHRlci5tYXlDb250YWluKHNob3J0SGFzaCk7IH0KKyAgICBib29s
IG1heUNvbnRhaW4oY29uc3QgS2V5JikgY29uc3Q7CisKKyAgICAvLyAyXjE4IGJpdCBmaWx0ZXIg
Y2FuIHN1cHBvcnQgdXAgdG8gMjYwMDAgZW50cmllcyB3aXRoIGZhbHNlIHBvc2l0aXZlIHJhdGUg
PCAxJS4KKyAgICB1c2luZyBDb250ZW50c0ZpbHRlciA9IEJsb29tRmlsdGVyPDE4PjsKKyAgICBz
dGF0aWMgc2l6ZV90IGFkZEZpbGVUb0NvbnRlbnRzRmlsdGVyKENvbnRlbnRzRmlsdGVyJiwgY29u
c3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBmaWxlUGF0aCk7CisgICAgdm9pZCBh
ZGRTdG9yZWRLZXlUb0NvbnRlbnRzRmlsdGVyKGNvbnN0IEtleSYpOwogCiAgICAgY29uc3QgU3Ry
aW5nIG1fYmFzZURpcmVjdG9yeVBhdGg7CiAgICAgY29uc3QgU3RyaW5nIG1fZGlyZWN0b3J5UGF0
aDsKIAogICAgIHNpemVfdCBtX21heGltdW1TaXplIHsgc3RkOjpudW1lcmljX2xpbWl0czxzaXpl
X3Q+OjptYXgoKSB9OworICAgIHNpemVfdCBtX2FwcHJveGltYXRlU2l6ZSB7IDAgfTsKIAotICAg
IENvdW50aW5nQmxvb21GaWx0ZXI8MjA+IG1fY29udGVudHNGaWx0ZXI7Ci0gICAgc3RkOjphdG9t
aWM8Ym9vbD4gbV9oYXNQb3B1bGF0ZWRDb250ZW50c0ZpbHRlciB7IGZhbHNlIH07Ci0KLSAgICBz
dGQ6OmF0b21pYzxzaXplX3Q+IG1fYXBwcm94aW1hdGVTaXplIHsgMCB9OwotICAgIHN0ZDo6YXRv
bWljPGJvb2w+IG1fc2hyaW5rSW5Qcm9ncmVzcyB7IGZhbHNlIH07CisgICAgc3RkOjp1bmlxdWVf
cHRyPENvbnRlbnRzRmlsdGVyPiBtX2NvbnRlbnRzRmlsdGVyOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxDb250ZW50c0ZpbHRlcj4gbV9wb3B1bGF0aW5nQ29udGVudHNGaWx0ZXI7CiAKICAgICBzdGF0
aWMgY29uc3QgaW50IG1heGltdW1SZXRyaWV2ZVByaW9yaXR5ID0gNDsKICAgICBEZXF1ZTxzdGQ6
OnVuaXF1ZV9wdHI8Y29uc3QgUmVhZE9wZXJhdGlvbj4+IG1fcGVuZGluZ1JlYWRPcGVyYXRpb25z
QnlQcmlvcml0eVttYXhpbXVtUmV0cmlldmVQcmlvcml0eSArIDFdOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250133</attachid>
            <date>2015-04-04 11:57:34 -0700</date>
            <delta_ts>2015-04-05 02:56:53 -0700</delta_ts>
            <desc>patch</desc>
            <filename>disk-cache-bit-bloom-3.patch</filename>
            <type>text/plain</type>
            <size>15295</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjM0NCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDE1LTA0LTA0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBDYWNoZSBCbG9vbSBmaWx0ZXIg
aXMgdG9vIGJpZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQzNDAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSXQgaXMgY3VycmVudGx5IDFNQi4KKworICAgICAgICBUaGlzIHBhdGNoIHN3aXRjaGVzIHRo
ZSBjYWNoZSBmcm9tIGEgY291bnRpbmcgZmlsdGVyIChDb3VudGluZ0Jsb29tRmlsdGVyKSB0byBh
IGJpdCBmaWx0ZXIgKEJsb29tRmlsdGVyKS4KKworICAgICAgICBJdCBhbHNvIHJlZHVjZXMgdGhl
IGZpbHRlciBzaXplIGZyb20gMl4yMCB0byAyXjE4IGVsZW1lbnRzIHdoaWNoIGlzIGdvb2QgZm9y
IH4yNjAwMCBjYWNoZSBlbnRyaWVzIHdoaWxlCisgICAgICAgIHN0aWxsIGtlZXBpbmcgZmFsc2Ug
cG9zaXRpdmUgcmF0ZSBiZWxvdyAxJS4gVGhlIGN1cnJlbnQgbWF4aW11bSBzaXplIGFsbG93cyBh
cm91bmQgNDAwMCBlbnRyaWVzCisgICAgICAgIHdpdGggcmVhbCB3b3JsZCB3ZWIgY29udGVudC4K
KworICAgICAgICBUaGUgbmV3IGZpbHRlciBzaXplIGlzIDMyS0IuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhY2hlOjpTdG9yYWdlOjpzeW5jaHJvbml6ZSk6CisKKyAgICAgICAgICAgIFR1cm4gaW5p
dGlhbGl6YXRpb24gZnVuY3Rpb24gaW50byBnZW5lcmFsIHB1cnBvc2Ugc3luY2hyb25pemF0aW9u
IGZ1bmN0aW9uLgorCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6YWRk
VG9Db250ZW50c0ZpbHRlcik6CisKKyAgICAgICAgICAgIEFkZCBuZXcgY2FjaGUgZW50cmllcyB0
byBib3RoIHRoZSBjdXJyZW50IGZpbHRlciBhbmQgdGhlIG9uZSB0aGF0IGlzIGJlaW5nIHN5bmNo
cm9uaXplZAorICAgICAgICAgICAgVGhhdCB3YXkgd2UgZG9uJ3QgbWlzcyBlbnRyaWVzIHRoYXQg
d2VyZSBhZGRlZCBkdXJpbmcgc3luY2hyb25pemF0aW9uLgorCisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6U3RvcmFnZTo6bWF5Q29udGFpbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6U3RvcmFnZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpTdG9yYWdlOjpyZXRyaWV2ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3Rv
cmFnZTo6c3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OmRp
c3BhdGNoUGVuZGluZ1dyaXRlT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6U3RvcmFnZTo6ZGlzcGF0Y2hGdWxsV3JpdGVPcGVyYXRpb24pOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OmRpc3BhdGNoSGVhZGVyV3JpdGVPcGVyYXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OnNldE1heGltdW1TaXpl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpjbGVhcik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6c2hyaW5rSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OnNocmluayk6CisKKyAgICAgICAg
ICAgIE5vbi1jb3VudGluZyBCbG9vbSBmaWx0ZXIgZG9lcyBub3Qgc3VwcG9ydCByZW1vdmFscyBz
byB0aGlzIHJlcXVpcmVzIGEgbmV3IHN0cmF0ZWd5LgorCisgICAgICAgICAgICBTaHJpbmsgY29k
ZSBub3cgc2ltcGx5IGRlbGV0ZXMgZW50cmllcy4gVGhlIGZpbHRlciBpcyB1cGRhdGVkIGJ5IGNh
bGxpbmcgc3luY2hyb25pemUoKSBhdCB0aGUgZW5kLgorICAgICAgICAgICAgV2hpbGUgd2UgY291
bGQgc3luY2hyb25pemUgdGhlIGZpbHRlciBkdXJpbmcgdHJhdmVyc2FsIGl0IGlzIGJldHRlciB0
byBqdXN0IGhhdmUgb25lIGZ1bmN0aW9uIGZvciB0aGF0LgorCisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6U3RvcmFnZTo6aW5pdGlhbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6Om1heUNvbnRhaW4pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OmNhY2hlTWF5Q29udGFpbik6IERlbGV0ZWQuCisKKzIwMTUt
MDQtMDMgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBu
b24tY291bnRpbmcgQmxvb20gZmlsdGVyIGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMzNjYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZVN0b3JhZ2UuaDoKKwogMjAxNS0wNC0wMyAgQmV0aCBEYWtpbiAgPGJkYWtpbkBh
cHBsZS5jb20+CiAKICAgICAgICAgQXR0ZW1wdGVkIGJ1aWxkIGZpeC4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZVN0b3JhZ2UuY3BwCShyZXZpc2lvbiAxODIzNDIpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzAsMzQgKzcwLDY0IEBAIFN0b3JhZ2U6OlN0b3JhZ2UoY29uc3QgU3RyaW5nJiBiYXNlRGlyZWMK
ICAgICAsIG1fc2VyaWFsQmFja2dyb3VuZElPUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5h
cHBsZS5XZWJLaXQuQ2FjaGUuU3RvcmFnZS5zZXJpYWxCYWNrZ3JvdW5kIiwgV29ya1F1ZXVlOjpU
eXBlOjpTZXJpYWwsIFdvcmtRdWV1ZTo6UU9TOjpCYWNrZ3JvdW5kKSkKIHsKICAgICBkZWxldGVP
bGRWZXJzaW9ucygpOwotICAgIGluaXRpYWxpemUoKTsKKyAgICBzeW5jaHJvbml6ZSgpOwogfQog
Ci12b2lkIFN0b3JhZ2U6OmluaXRpYWxpemUoKQordm9pZCBTdG9yYWdlOjpzeW5jaHJvbml6ZSgp
CiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIFN0cmluZ0NhcHR1cmUg
Y2FjaGVQYXRoQ2FwdHVyZShtX2RpcmVjdG9yeVBhdGgpOworICAgIGlmIChtX3N5bmNocm9uaXpp
bmdDb250ZW50c0ZpbHRlciB8fCBtX3Nocmlua0luUHJvZ3Jlc3MpCisgICAgICAgIHJldHVybjsK
KyAgICBtX3N5bmNocm9uaXppbmdDb250ZW50c0ZpbHRlciA9IHN0ZDo6bWFrZV91bmlxdWU8Q29u
dGVudHNGaWx0ZXI+KCk7CiAKKyAgICBTdHJpbmdDYXB0dXJlIGNhY2hlUGF0aENhcHR1cmUobV9k
aXJlY3RvcnlQYXRoKTsKICAgICBiYWNrZ3JvdW5kSU9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBj
YWNoZVBhdGhDYXB0dXJlXSB7CiAgICAgICAgIFN0cmluZyBjYWNoZVBhdGggPSBjYWNoZVBhdGhD
YXB0dXJlLnN0cmluZygpOwotICAgICAgICB0cmF2ZXJzZUNhY2hlRmlsZXMoY2FjaGVQYXRoLCBb
dGhpc10oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRo
KSB7CisgICAgICAgIGF1dG8mIGZpbHRlciA9ICptX3N5bmNocm9uaXppbmdDb250ZW50c0ZpbHRl
cjsKKyAgICAgICAgc2l6ZV90IHNpemUgPSAwOworICAgICAgICB1bnNpZ25lZCBjb3VudCA9IDA7
CisgICAgICAgIHRyYXZlcnNlQ2FjaGVGaWxlcyhjYWNoZVBhdGgsIFsmZmlsdGVyLCAmc2l6ZSwg
JmNvdW50XShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIHBhcnRpdGlvblBh
dGgpIHsKICAgICAgICAgICAgIEtleTo6SGFzaFR5cGUgaGFzaDsKICAgICAgICAgICAgIGlmICgh
S2V5OjpzdHJpbmdUb0hhc2goZmlsZU5hbWUsIGhhc2gpKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0SGFzaCA9IEtleTo6dG9TaG9ydEhhc2goaGFz
aCk7Ci0gICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHNob3J0SGFz
aF0gewotICAgICAgICAgICAgICAgIG1fY29udGVudHNGaWx0ZXIuYWRkKHNob3J0SGFzaCk7Ci0g
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGF1dG8gZmlsZVBhdGggPSBXZWJDb3JlOjpwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQocGFydGl0aW9uUGF0aCwgZmlsZU5hbWUpOwogICAgICAgICAg
ICAgbG9uZyBsb25nIGZpbGVTaXplID0gMDsKICAgICAgICAgICAgIFdlYkNvcmU6OmdldEZpbGVT
aXplKGZpbGVQYXRoLCBmaWxlU2l6ZSk7Ci0gICAgICAgICAgICBtX2FwcHJveGltYXRlU2l6ZSAr
PSBmaWxlU2l6ZTsKKyAgICAgICAgICAgIGlmICghZmlsZVNpemUpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgZmlsdGVyLmFkZChLZXk6OnRvU2hvcnRIYXNoKGhhc2gpKTsK
KyAgICAgICAgICAgIHNpemUgKz0gZmlsZVNpemU7CisgICAgICAgICAgICArK2NvdW50OwogICAg
ICAgICB9KTsKLSAgICAgICAgbV9oYXNQb3B1bGF0ZWRDb250ZW50c0ZpbHRlciA9IHRydWU7CisK
KyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBzaXplXSB7CisgICAgICAg
ICAgICBtX2NvbnRlbnRzRmlsdGVyID0gV1RGOjptb3ZlKG1fc3luY2hyb25pemluZ0NvbnRlbnRz
RmlsdGVyKTsKKyAgICAgICAgICAgIG1fYXBwcm94aW1hdGVTaXplID0gc2l6ZTsKKyAgICAgICAg
fSk7CisKKyAgICAgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3JhZ2UsICIoTmV0d29ya1Byb2Nlc3Mp
IHN5bmNocm9uaXphdGlvbiBjb21wbGV0ZWQgYXBwcm94aW1hdGVTaXplPSV6dSBjb3VudD0lZCIs
IHNpemUsIGNvdW50KTsKICAgICB9KTsKIH0KIAordm9pZCBTdG9yYWdlOjphZGRUb0NvbnRlbnRz
RmlsdGVyKGNvbnN0IEtleSYga2V5KQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICBpZiAobV9jb250ZW50c0ZpbHRlcikKKyAgICAgICAgbV9jb250ZW50c0ZpbHRlci0+
YWRkKGtleS5zaG9ydEhhc2goKSk7CisKKyAgICAvLyBJZiB3ZSBnZXQgbmV3IGVudHJpZXMgZHVy
aW5nIGZpbHRlciBzeW5jaHJvbml6YXRpb24gYWRkIHRoZW0gdG8gdGhlIG5ldyBmaWx0ZXIgYXMg
d2VsbC4KKyAgICBpZiAobV9zeW5jaHJvbml6aW5nQ29udGVudHNGaWx0ZXIpCisgICAgICAgIG1f
c3luY2hyb25pemluZ0NvbnRlbnRzRmlsdGVyLT5hZGQoa2V5LnNob3J0SGFzaCgpKTsKK30KKwor
Ym9vbCBTdG9yYWdlOjptYXlDb250YWluKGNvbnN0IEtleSYga2V5KSBjb25zdAoreworICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgcmV0dXJuICFtX2NvbnRlbnRzRmlsdGVyIHx8
IG1fY29udGVudHNGaWx0ZXItPm1heUNvbnRhaW4oa2V5LnNob3J0SGFzaCgpKTsKK30KKwogc3Rh
dGljIFN0cmluZyBkaXJlY3RvcnlQYXRoRm9yS2V5KGNvbnN0IEtleSYga2V5LCBjb25zdCBTdHJp
bmcmIGNhY2hlUGF0aCkKIHsKICAgICBBU1NFUlQoIWtleS5wYXJ0aXRpb24oKS5pc0VtcHR5KCkp
OwpAQCAtMjg4LDExICszMTgsOSBAQCB2b2lkIFN0b3JhZ2U6OnJlbW92ZShjb25zdCBLZXkmIGtl
eSkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgLy8gRm9yIHNpbXBs
aWNpdHkgd2UgZG9uJ3QgcmVkdWNlIG1fYXBwcm94aW1hdGVTaXplIG9uIHJlbW92YWxzLgotICAg
IC8vIFRoZSBuZXh0IGNhY2hlIHNocmluayB3aWxsIHVwZGF0ZSB0aGUgc2l6ZS4KLQotICAgIGlm
IChtX2NvbnRlbnRzRmlsdGVyLm1heUNvbnRhaW4oa2V5LnNob3J0SGFzaCgpKSkKLSAgICAgICAg
bV9jb250ZW50c0ZpbHRlci5yZW1vdmUoa2V5LnNob3J0SGFzaCgpKTsKKyAgICAvLyBXZSBjYW4n
dCByZW1vdmUgdGhlIGtleSBmcm9tIHRoZSBCbG9vbSBmaWx0ZXIgKGJ1dCBzb21lIGZhbHNlIHBv
c2l0aXZlcyBhcmUgZXhwZWN0ZWQgYW55d2F5KS4KKyAgICAvLyBGb3Igc2ltcGxpY2l0eSB3ZSBh
bHNvIGRvbid0IHJlZHVjZSBtX2FwcHJveGltYXRlU2l6ZSBvbiByZW1vdmFscy4KKyAgICAvLyBU
aGUgbmV4dCBzeW5jaHJvbml6YXRpb24gd2lsbCB1cGRhdGUgZXZlcnl0aGluZy4KIAogICAgIFN0
cmluZ0NhcHR1cmUgZmlsZVBhdGhDYXB0dXJlKGZpbGVQYXRoRm9yS2V5KGtleSwgbV9kaXJlY3Rv
cnlQYXRoKSk7CiAgICAgc2VyaWFsQmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpcywg
ZmlsZVBhdGhDYXB0dXJlXSB7CkBAIC0zODUsNyArNDEzLDcgQEAgdm9pZCBTdG9yYWdlOjpyZXRy
aWV2ZShjb25zdCBLZXkmIGtleSwgdQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYg
KCFjYWNoZU1heUNvbnRhaW4oa2V5LnNob3J0SGFzaCgpKSkgeworICAgIGlmICghbWF5Q29udGFp
bihrZXkpKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtNDEyLDcgKzQ0MCw3IEBAIHZvaWQgU3RvcmFnZTo6c3RvcmUoY29u
c3QgUmVjb3JkJiByZWNvcmQKICAgICBtX3BlbmRpbmdXcml0ZU9wZXJhdGlvbnMuYXBwZW5kKG5l
dyBXcml0ZU9wZXJhdGlvbiB7IHJlY29yZCwgeyB9LCBXVEY6Om1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpIH0pOwogCiAgICAgLy8gQWRkIGtleSB0byB0aGUgZmlsdGVyIGFscmVhZHkgaGVyZSBhcyB3
ZSBkbyBsb29rdXBzIGZyb20gdGhlIHBlbmRpbmcgb3BlcmF0aW9ucyB0b28uCi0gICAgbV9jb250
ZW50c0ZpbHRlci5hZGQocmVjb3JkLmtleS5zaG9ydEhhc2goKSk7CisgICAgYWRkVG9Db250ZW50
c0ZpbHRlcihyZWNvcmQua2V5KTsKIAogICAgIGRpc3BhdGNoUGVuZGluZ1dyaXRlT3BlcmF0aW9u
cygpOwogfQpAQCAtNDc5LDcgKzUwNyw3IEBAIHZvaWQgU3RvcmFnZTo6ZGlzcGF0Y2hQZW5kaW5n
V3JpdGVPcGVyYXQKICAgICAgICAgYXV0byYgd3JpdGUgPSAqd3JpdGVPcGVyYXRpb247CiAgICAg
ICAgIG1fYWN0aXZlV3JpdGVPcGVyYXRpb25zLmFkZChXVEY6Om1vdmUod3JpdGVPcGVyYXRpb24p
KTsKIAotICAgICAgICBpZiAod3JpdGUuZXhpc3RpbmdSZWNvcmQgJiYgY2FjaGVNYXlDb250YWlu
KHdyaXRlLnJlY29yZC5rZXkuc2hvcnRIYXNoKCkpKSB7CisgICAgICAgIGlmICh3cml0ZS5leGlz
dGluZ1JlY29yZCAmJiBtYXlDb250YWluKHdyaXRlLnJlY29yZC5rZXkpKSB7CiAgICAgICAgICAg
ICBkaXNwYXRjaEhlYWRlcldyaXRlT3BlcmF0aW9uKHdyaXRlKTsKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CkBAIC00OTIsOCArNTIwLDggQEAgdm9pZCBTdG9yYWdlOjpkaXNwYXRj
aEZ1bGxXcml0ZU9wZXJhdGlvbgogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAg
QVNTRVJUKG1fYWN0aXZlV3JpdGVPcGVyYXRpb25zLmNvbnRhaW5zKCZ3cml0ZSkpOwogCi0gICAg
aWYgKCFtX2NvbnRlbnRzRmlsdGVyLm1heUNvbnRhaW4od3JpdGUucmVjb3JkLmtleS5zaG9ydEhh
c2goKSkpCi0gICAgICAgIG1fY29udGVudHNGaWx0ZXIuYWRkKHdyaXRlLnJlY29yZC5rZXkuc2hv
cnRIYXNoKCkpOworICAgIC8vIFRoaXMgd2FzIGFkZGVkIGFscmVhZHkgd2hlbiBzdGFydGluZyB0
aGUgc3RvcmUgYnV0IGZpbHRlciBtaWdodCBoYXZlIGdvdCB3aXBlZC4KKyAgICBhZGRUb0NvbnRl
bnRzRmlsdGVyKHdyaXRlLnJlY29yZC5rZXkpOwogCiAgICAgU3RyaW5nQ2FwdHVyZSBjYWNoZVBh
dGhDYXB0dXJlKG1fZGlyZWN0b3J5UGF0aCk7CiAgICAgYmFja2dyb3VuZElPUXVldWUoKS5kaXNw
YXRjaChbdGhpcywgJndyaXRlLCBjYWNoZVBhdGhDYXB0dXJlXSB7CkBAIC01MDUsMTQgKzUzMywx
MCBAQCB2b2lkIFN0b3JhZ2U6OmRpc3BhdGNoRnVsbFdyaXRlT3BlcmF0aW9uCiAgICAgICAgIHNp
emVfdCBib2R5T2Zmc2V0ID0gZW5jb2RlZEhlYWRlci5zaXplKCk7CiAKICAgICAgICAgY2hhbm5l
bC0+d3JpdGUoMCwgaGVhZGVyQW5kQm9keURhdGEsIFt0aGlzLCAmd3JpdGUsIGJvZHlPZmZzZXQs
IGZkXShpbnQgZXJyb3IpIHsKLSAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAi
KE5ldHdvcmtQcm9jZXNzKSB3cml0ZSBjb21wbGV0ZSBlcnJvcj0lZCIsIGVycm9yKTsKLSAgICAg
ICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgICAgIGlmIChtX2NvbnRlbnRzRmlsdGVy
Lm1heUNvbnRhaW4od3JpdGUucmVjb3JkLmtleS5zaG9ydEhhc2goKSkpCi0gICAgICAgICAgICAg
ICAgICAgIG1fY29udGVudHNGaWx0ZXIucmVtb3ZlKHdyaXRlLnJlY29yZC5rZXkuc2hvcnRIYXNo
KCkpOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgc2l6ZV90IGJvZHlTaXplID0gd3JpdGUu
cmVjb3JkLmJvZHkuc2l6ZSgpOwogICAgICAgICAgICAgc2l6ZV90IHRvdGFsU2l6ZSA9IGJvZHlP
ZmZzZXQgKyBib2R5U2l6ZTsKIAorICAgICAgICAgICAgLy8gT24gZXJyb3IgdGhlIGVudHJ5IHN0
aWxsIHN0YXlzIGluIHRoZSBjb250ZW50cyBmaWx0ZXIgdW50aWwgbmV4dCBzeW5jaHJvbml6YXRp
b24uCiAgICAgICAgICAgICBtX2FwcHJveGltYXRlU2l6ZSArPSB0b3RhbFNpemU7CiAKICAgICAg
ICAgICAgIGJvb2wgc2hvdWxkTWFwQm9keSA9ICFlcnJvciAmJiBib2R5U2l6ZSA+PSBwYWdlU2l6
ZSgpOwpAQCAtNTIzLDYgKzU0Nyw4IEBAIHZvaWQgU3RvcmFnZTo6ZGlzcGF0Y2hGdWxsV3JpdGVP
cGVyYXRpb24KICAgICAgICAgICAgIEFTU0VSVChtX2FjdGl2ZVdyaXRlT3BlcmF0aW9ucy5jb250
YWlucygmd3JpdGUpKTsKICAgICAgICAgICAgIG1fYWN0aXZlV3JpdGVPcGVyYXRpb25zLnJlbW92
ZSgmd3JpdGUpOwogICAgICAgICAgICAgZGlzcGF0Y2hQZW5kaW5nV3JpdGVPcGVyYXRpb25zKCk7
CisKKyAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNz
KSB3cml0ZSBjb21wbGV0ZSBlcnJvcj0lZCIsIGVycm9yKTsKICAgICAgICAgfSk7CiAgICAgfSk7
CiAKQEAgLTUzNCw3ICs1NjAsNyBAQCB2b2lkIFN0b3JhZ2U6OmRpc3BhdGNoSGVhZGVyV3JpdGVP
cGVyYXRpCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBBU1NFUlQod3JpdGUu
ZXhpc3RpbmdSZWNvcmQpOwogICAgIEFTU0VSVChtX2FjdGl2ZVdyaXRlT3BlcmF0aW9ucy5jb250
YWlucygmd3JpdGUpKTsKLSAgICBBU1NFUlQoY2FjaGVNYXlDb250YWluKHdyaXRlLnJlY29yZC5r
ZXkuc2hvcnRIYXNoKCkpKTsKKyAgICBBU1NFUlQobWF5Q29udGFpbih3cml0ZS5yZWNvcmQua2V5
KSk7CiAKICAgICAvLyBUcnkgdG8gdXBkYXRlIHRoZSBoZWFkZXIgb2YgYW4gZXhpc3RpbmcgZW50
cnkuCiAgICAgU3RyaW5nQ2FwdHVyZSBjYWNoZVBhdGhDYXB0dXJlKG1fZGlyZWN0b3J5UGF0aCk7
CkBAIC01NzAsNiArNTk2LDE2IEBAIHZvaWQgU3RvcmFnZTo6ZGlzcGF0Y2hIZWFkZXJXcml0ZU9w
ZXJhdGkKIHZvaWQgU3RvcmFnZTo6c2V0TWF4aW11bVNpemUoc2l6ZV90IHNpemUpCiB7CiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBj
b25zdCBzaXplX3QgYXNzdW1lZEF2ZXJhZ2VSZWNvcmRTaXplID0gNTAgPDwgMjA7CisgICAgc2l6
ZV90IG1heGltdW1SZWNvcmRDb3VudCA9IHNpemUgLyBhc3N1bWVkQXZlcmFnZVJlY29yZFNpemU7
CisgICAgLy8gfjEwIGJpdHMgcGVyIGVsZW1lbnQgYXJlIHJlcXVpcmVkIGZvciA8MSUgZmFsc2Ug
cG9zaXRpdmUgcmF0ZS4KKyAgICBzaXplX3QgZWZmZWN0aXZlQmxvb21GaWx0ZXJDYXBhY2l0eSA9
IENvbnRlbnRzRmlsdGVyOjp0YWJsZVNpemUgLyAxMDsKKyAgICAvLyBJZiB0aGlzIGdldHMgaGl0
IGl0IG1pZ2h0IGJlIHRpbWUgdG8gaW5jcmVhc2UgdGhlIGZpbHRlciBzaXplLgorICAgIEFTU0VS
VChtYXhpbXVtUmVjb3JkQ291bnQgPCBlZmZlY3RpdmVCbG9vbUZpbHRlckNhcGFjaXR5KTsKKyNl
bmRpZgorCiAgICAgbV9tYXhpbXVtU2l6ZSA9IHNpemU7CiAKICAgICBzaHJpbmtJZk5lZWRlZCgp
OwpAQCAtNTgwLDcgKzYxNiw4IEBAIHZvaWQgU3RvcmFnZTo6Y2xlYXIoKQogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CiAgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3JhZ2UsICIoTmV0d29y
a1Byb2Nlc3MpIGNsZWFyaW5nIGNhY2hlIik7CiAKLSAgICBtX2NvbnRlbnRzRmlsdGVyLmNsZWFy
KCk7CisgICAgaWYgKG1fY29udGVudHNGaWx0ZXIpCisgICAgICAgIG1fY29udGVudHNGaWx0ZXIt
PmNsZWFyKCk7CiAgICAgbV9hcHByb3hpbWF0ZVNpemUgPSAwOwogCiAgICAgU3RyaW5nQ2FwdHVy
ZSBkaXJlY3RvcnlQYXRoQ2FwdHVyZShtX2RpcmVjdG9yeVBhdGgpOwpAQCAtNjI5LDIwICs2NjYs
MjQgQEAgdm9pZCBTdG9yYWdlOjpzaHJpbmtJZk5lZWRlZCgpCiB7CiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKIAotICAgIGlmIChtX2FwcHJveGltYXRlU2l6ZSA8PSBtX21heGltdW1T
aXplKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fc2hyaW5rSW5Qcm9ncmVzcykKKyAgICBp
ZiAobV9hcHByb3hpbWF0ZVNpemUgPiBtX21heGltdW1TaXplKQorICAgICAgICBzaHJpbmsoKTsK
K30KKwordm9pZCBTdG9yYWdlOjpzaHJpbmsoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBpZiAobV9zaHJpbmtJblByb2dyZXNzIHx8IG1fc3luY2hyb25pemluZ0Nv
bnRlbnRzRmlsdGVyKQogICAgICAgICByZXR1cm47CiAgICAgbV9zaHJpbmtJblByb2dyZXNzID0g
dHJ1ZTsKIAogICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSBz
aHJpbmtpbmcgY2FjaGUgYXBwcm94aW1hdGVTaXplPSV6dSwgbV9tYXhpbXVtU2l6ZT0lenUiLCBz
dGF0aWNfY2FzdDxzaXplX3Q+KG1fYXBwcm94aW1hdGVTaXplKSwgbV9tYXhpbXVtU2l6ZSk7CiAK
LSAgICBtX2FwcHJveGltYXRlU2l6ZSA9IDA7Ci0KICAgICBTdHJpbmdDYXB0dXJlIGNhY2hlUGF0
aENhcHR1cmUobV9kaXJlY3RvcnlQYXRoKTsKICAgICBiYWNrZ3JvdW5kSU9RdWV1ZSgpLmRpc3Bh
dGNoKFt0aGlzLCBjYWNoZVBhdGhDYXB0dXJlXSB7CiAgICAgICAgIFN0cmluZyBjYWNoZVBhdGgg
PSBjYWNoZVBhdGhDYXB0dXJlLnN0cmluZygpOwotICAgICAgICB0cmF2ZXJzZUNhY2hlRmlsZXMo
Y2FjaGVQYXRoLCBbdGhpc10oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBw
YXJ0aXRpb25QYXRoKSB7CisgICAgICAgIHRyYXZlcnNlQ2FjaGVGaWxlcyhjYWNoZVBhdGgsIFtd
KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgcGFydGl0aW9uUGF0aCkgewog
ICAgICAgICAgICAgYXV0byBmaWxlUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBv
bmVudChwYXJ0aXRpb25QYXRoLCBmaWxlTmFtZSk7CiAKICAgICAgICAgICAgIGF1dG8gdGltZXMg
PSBmaWxlVGltZXMoZmlsZVBhdGgpOwpAQCAtNjUxLDIyICs2OTIsOCBAQCB2b2lkIFN0b3JhZ2U6
OnNocmlua0lmTmVlZGVkKCkKIAogICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3JhZ2Us
ICJEZWxldGlvbiBwcm9iYWJpbGl0eT0lZiBzaG91bGREZWxldGU9JWQiLCBwcm9iYWJpbGl0eSwg
c2hvdWxkRGVsZXRlKTsKIAotICAgICAgICAgICAgaWYgKCFzaG91bGREZWxldGUpIHsKLSAgICAg
ICAgICAgICAgICBsb25nIGxvbmcgZmlsZVNpemUgPSAwOwotICAgICAgICAgICAgICAgIFdlYkNv
cmU6OmdldEZpbGVTaXplKGZpbGVQYXRoLCBmaWxlU2l6ZSk7Ci0gICAgICAgICAgICAgICAgbV9h
cHByb3hpbWF0ZVNpemUgKz0gZmlsZVNpemU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVGaWxlKGZpbGVQYXRoKTsK
LSAgICAgICAgICAgIEtleTo6SGFzaFR5cGUgaGFzaDsKLSAgICAgICAgICAgIGlmICghS2V5Ojpz
dHJpbmdUb0hhc2goZmlsZU5hbWUsIGhhc2gpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0SGFzaCA9IEtleTo6dG9TaG9ydEhhc2goaGFzaCk7Ci0g
ICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHNob3J0SGFzaF0gewot
ICAgICAgICAgICAgICAgIGlmIChtX2NvbnRlbnRzRmlsdGVyLm1heUNvbnRhaW4oc2hvcnRIYXNo
KSkKLSAgICAgICAgICAgICAgICAgICAgbV9jb250ZW50c0ZpbHRlci5yZW1vdmUoc2hvcnRIYXNo
KTsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYgKHNob3VsZERlbGV0ZSkKKyAgICAg
ICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVGaWxlKGZpbGVQYXRoKTsKICAgICAgICAgfSk7CiAK
ICAgICAgICAgLy8gTGV0IHN5c3RlbSBmaWd1cmUgb3V0IGlmIHRoZXkgYXJlIHJlYWxseSBlbXB0
eS4KQEAgLTY3NSw5ICs3MDIsMTMgQEAgdm9pZCBTdG9yYWdlOjpzaHJpbmtJZk5lZWRlZCgpCiAg
ICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVFbXB0eURpcmVjdG9yeShwYXJ0aXRpb25QYXRoKTsK
ICAgICAgICAgfSk7CiAKLSAgICAgICAgbV9zaHJpbmtJblByb2dyZXNzID0gZmFsc2U7CisgICAg
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpc10geworICAgICAgICAgICAgbV9zaHJp
bmtJblByb2dyZXNzID0gZmFsc2U7CisgICAgICAgICAgICAvLyBXZSBjb3VsZCBzeW5jaHJvbml6
ZSBkdXJpbmcgc2hyaW5rIHRyYXZlcnNhbC4gSG93ZXZlciB0aGlzIGlzIGZhc3QgYW5kIGl0IGlz
IGJldHRlciB0byBoYXZlIGp1c3Qgb25lIGNvZGUgcGF0aC4KKyAgICAgICAgICAgIHN5bmNocm9u
aXplKCk7CiAKLSAgICAgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3JhZ2UsICIoTmV0d29ya1Byb2Nl
c3MpIGNhY2hlIHNocmluayBjb21wbGV0ZWQgYXBwcm94aW1hdGVTaXplPSV6dSIsIHN0YXRpY19j
YXN0PHNpemVfdD4obV9hcHByb3hpbWF0ZVNpemUpKTsKKyAgICAgICAgICAgIExPRyhOZXR3b3Jr
Q2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSBjYWNoZSBzaHJpbmsgY29tcGxldGVkIik7
CisgICAgICAgIH0pOwogICAgIH0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCShyZXZp
c2lvbiAxODIzNDIpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVTdG9yYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDkgKzg1LDEwIEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgU3RvcmFnZShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgpOwog
Ci0gICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAgdm9pZCBzeW5jaHJvbml6ZSgpOwogICAgIHZv
aWQgZGVsZXRlT2xkVmVyc2lvbnMoKTsKICAgICB2b2lkIHNocmlua0lmTmVlZGVkKCk7CisgICAg
dm9pZCBzaHJpbmsoKTsKIAogICAgIHN0cnVjdCBSZWFkT3BlcmF0aW9uIHsKICAgICAgICAgS2V5
IGtleTsKQEAgLTExMSwxOCArMTEyLDIyIEBAIHByaXZhdGU6CiAgICAgV29ya1F1ZXVlJiBiYWNr
Z3JvdW5kSU9RdWV1ZSgpIHsgcmV0dXJuIG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCk7IH0KICAg
ICBXb3JrUXVldWUmIHNlcmlhbEJhY2tncm91bmRJT1F1ZXVlKCkgeyByZXR1cm4gbV9zZXJpYWxC
YWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKTsgfQogCi0gICAgYm9vbCBjYWNoZU1heUNvbnRhaW4odW5z
aWduZWQgc2hvcnRIYXNoKSB7IHJldHVybiAhbV9oYXNQb3B1bGF0ZWRDb250ZW50c0ZpbHRlciB8
fCBtX2NvbnRlbnRzRmlsdGVyLm1heUNvbnRhaW4oc2hvcnRIYXNoKTsgfQorICAgIGJvb2wgbWF5
Q29udGFpbihjb25zdCBLZXkmKSBjb25zdDsKKworICAgIC8vIDJeMTggYml0IGZpbHRlciBjYW4g
c3VwcG9ydCB1cCB0byAyNjAwMCBlbnRyaWVzIHdpdGggZmFsc2UgcG9zaXRpdmUgcmF0ZSA8IDEl
LgorICAgIHVzaW5nIENvbnRlbnRzRmlsdGVyID0gQmxvb21GaWx0ZXI8MTg+OworICAgIHZvaWQg
YWRkVG9Db250ZW50c0ZpbHRlcihjb25zdCBLZXkmKTsKIAogICAgIGNvbnN0IFN0cmluZyBtX2Jh
c2VEaXJlY3RvcnlQYXRoOwogICAgIGNvbnN0IFN0cmluZyBtX2RpcmVjdG9yeVBhdGg7CiAKICAg
ICBzaXplX3QgbV9tYXhpbXVtU2l6ZSB7IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4
KCkgfTsKKyAgICBzaXplX3QgbV9hcHByb3hpbWF0ZVNpemUgeyAwIH07CiAKLSAgICBDb3VudGlu
Z0Jsb29tRmlsdGVyPDIwPiBtX2NvbnRlbnRzRmlsdGVyOwotICAgIHN0ZDo6YXRvbWljPGJvb2w+
IG1faGFzUG9wdWxhdGVkQ29udGVudHNGaWx0ZXIgeyBmYWxzZSB9OworICAgIHN0ZDo6dW5pcXVl
X3B0cjxDb250ZW50c0ZpbHRlcj4gbV9jb250ZW50c0ZpbHRlcjsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q29udGVudHNGaWx0ZXI+IG1fc3luY2hyb25pemluZ0NvbnRlbnRzRmlsdGVyOwogCi0gICAg
c3RkOjphdG9taWM8c2l6ZV90PiBtX2FwcHJveGltYXRlU2l6ZSB7IDAgfTsKLSAgICBzdGQ6OmF0
b21pYzxib29sPiBtX3Nocmlua0luUHJvZ3Jlc3MgeyBmYWxzZSB9OworICAgIGJvb2wgbV9zaHJp
bmtJblByb2dyZXNzIHsgZmFsc2UgfTsKIAogICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bVJl
dHJpZXZlUHJpb3JpdHkgPSA0OwogICAgIERlcXVlPHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBSZWFk
T3BlcmF0aW9uPj4gbV9wZW5kaW5nUmVhZE9wZXJhdGlvbnNCeVByaW9yaXR5W21heGltdW1SZXRy
aWV2ZVByaW9yaXR5ICsgMV07Cg==
</data>
<flag name="review"
          id="274950"
          type_id="1"
          status="+"
          setter="cdumez"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250154</attachid>
            <date>2015-04-05 02:56:53 -0700</date>
            <delta_ts>2015-04-05 02:59:55 -0700</delta_ts>
            <desc>with a thread safety fix</desc>
            <filename>disk-cache-bit-bloom-4.patch</filename>
            <type>text/plain</type>
            <size>15353</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjM0NCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDE1LTA0LTA0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBDYWNoZSBCbG9vbSBmaWx0ZXIg
aXMgdG9vIGJpZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQzNDAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVtZXouCisKKyAgICAgICAg
SXQgaXMgY3VycmVudGx5IDFNQi4KKworICAgICAgICBUaGlzIHBhdGNoIHN3aXRjaGVzIHRoZSBj
YWNoZSBmcm9tIGEgY291bnRpbmcgZmlsdGVyIChDb3VudGluZ0Jsb29tRmlsdGVyKSB0byBhIGJp
dCBmaWx0ZXIgKEJsb29tRmlsdGVyKS4KKworICAgICAgICBJdCBhbHNvIHJlZHVjZXMgdGhlIGZp
bHRlciBzaXplIGZyb20gMl4yMCB0byAyXjE4IGVsZW1lbnRzIHdoaWNoIGlzIGdvb2QgZm9yIH4y
NjAwMCBjYWNoZSBlbnRyaWVzIHdoaWxlCisgICAgICAgIHN0aWxsIGtlZXBpbmcgZmFsc2UgcG9z
aXRpdmUgcmF0ZSBiZWxvdyAxJS4gVGhlIGN1cnJlbnQgY2FjaGUgY2FwYWNpdHkgYWxsb3dzIGFy
b3VuZCA0MDAwIGVudHJpZXMKKyAgICAgICAgd2l0aCB0eXBpY2FsIHdlYiBjb250ZW50cy4KKwor
ICAgICAgICBUaGUgbmV3IGZpbHRlciBzaXplIGlzIDMyS0IuCisKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpTdG9yYWdlOjpzeW5jaHJvbml6ZSk6CisKKyAgICAgICAgICAgIFR1cm4gaW5pdGlh
bGl6YXRpb24gZnVuY3Rpb24gaW50byBnZW5lcmFsIHB1cnBvc2Ugc3luY2hyb25pemF0aW9uIGZ1
bmN0aW9uLgorCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6YWRkVG9D
b250ZW50c0ZpbHRlcik6CisKKyAgICAgICAgICAgIENvbGxlY3QgbmV3bHkgYWRkZWQgaGFzaGVz
IHNvIHdlIGRvbid0IG1pc3MgZW50cmllcyB0aGF0IHdlcmUgYWRkZWQgZHVyaW5nIHN5bmNocm9u
aXphdGlvbi4KKworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6Om1heUNv
bnRhaW4pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OnJlbW92ZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6cmV0cmlldmUpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OnN0b3JlKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpkaXNwYXRjaFBlbmRpbmdXcml0ZU9wZXJhdGlv
bnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OmRpc3BhdGNoRnVs
bFdyaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdl
OjpkaXNwYXRjaEhlYWRlcldyaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpTdG9yYWdlOjpzZXRNYXhpbXVtU2l6ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6U3RvcmFnZTo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OlN0b3JhZ2U6OnNocmlua0lmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpTdG9yYWdlOjpzaHJpbmspOgorCisgICAgICAgICAgICBOb24tY291bnRpbmcgQmxvb20gZmls
dGVyIGRvZXMgbm90IHN1cHBvcnQgcmVtb3ZhbHMgc28gdGhpcyByZXF1aXJlcyBhIG5ldyBzdHJh
dGVneS4KKworICAgICAgICAgICAgU2hyaW5rIGNvZGUgbm93IHNpbXBseSBkZWxldGVzIGVudHJp
ZXMuIFRoZSBmaWx0ZXIgaXMgdXBkYXRlZCBieSBjYWxsaW5nIHN5bmNocm9uaXplKCkgYXQgdGhl
IGVuZC4KKyAgICAgICAgICAgIFdoaWxlIHdlIGNvdWxkIHN5bmNocm9uaXplIHRoZSBmaWx0ZXIg
ZHVyaW5nIHRyYXZlcnNhbCBpdCBpcyBiZXR0ZXIgdG8ganVzdCBoYXZlIG9uZSBmdW5jdGlvbiBm
b3IgdGhhdC4KKworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OmluaXRp
YWxpemUpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZVN0b3JhZ2UuaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpt
YXlDb250YWluKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpjYWNo
ZU1heUNvbnRhaW4pOiBEZWxldGVkLgorCiAyMDE1LTA0LTAzICBCZXRoIERha2luICA8YmRha2lu
QGFwcGxlLmNvbT4KIAogICAgICAgICBBdHRlbXB0ZWQgYnVpbGQgZml4LgpJbmRleDogU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RvcmFnZS5jcHAJKHJldmlzaW9uIDE4MjM0MikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03MCwzNCArNzAsNzMgQEAgU3RvcmFnZTo6U3RvcmFnZShjb25zdCBTdHJpbmcmIGJhc2VEaXJl
YwogICAgICwgbV9zZXJpYWxCYWNrZ3JvdW5kSU9RdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29t
LmFwcGxlLldlYktpdC5DYWNoZS5TdG9yYWdlLnNlcmlhbEJhY2tncm91bmQiLCBXb3JrUXVldWU6
OlR5cGU6OlNlcmlhbCwgV29ya1F1ZXVlOjpRT1M6OkJhY2tncm91bmQpKQogewogICAgIGRlbGV0
ZU9sZFZlcnNpb25zKCk7Ci0gICAgaW5pdGlhbGl6ZSgpOworICAgIHN5bmNocm9uaXplKCk7CiB9
CiAKLXZvaWQgU3RvcmFnZTo6aW5pdGlhbGl6ZSgpCit2b2lkIFN0b3JhZ2U6OnN5bmNocm9uaXpl
KCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgU3RyaW5nQ2FwdHVy
ZSBjYWNoZVBhdGhDYXB0dXJlKG1fZGlyZWN0b3J5UGF0aCk7CisgICAgaWYgKG1fc3luY2hyb25p
emF0aW9uSW5Qcm9ncmVzcyB8fCBtX3Nocmlua0luUHJvZ3Jlc3MpCisgICAgICAgIHJldHVybjsK
KyAgICBtX3N5bmNocm9uaXphdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOwogCisgICAgU3RyaW5nQ2Fw
dHVyZSBjYWNoZVBhdGhDYXB0dXJlKG1fZGlyZWN0b3J5UGF0aCk7CiAgICAgYmFja2dyb3VuZElP
UXVldWUoKS5kaXNwYXRjaChbdGhpcywgY2FjaGVQYXRoQ2FwdHVyZV0gewogICAgICAgICBTdHJp
bmcgY2FjaGVQYXRoID0gY2FjaGVQYXRoQ2FwdHVyZS5zdHJpbmcoKTsKLSAgICAgICAgdHJhdmVy
c2VDYWNoZUZpbGVzKGNhY2hlUGF0aCwgW3RoaXNdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNv
bnN0IFN0cmluZyYgcGFydGl0aW9uUGF0aCkgeworCisgICAgICAgIGF1dG8gZmlsdGVyID0gc3Rk
OjptYWtlX3VuaXF1ZTxDb250ZW50c0ZpbHRlcj4oKTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSAw
OworICAgICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgICAgIHRyYXZlcnNlQ2FjaGVGaWxl
cyhjYWNoZVBhdGgsIFsmZmlsdGVyLCAmc2l6ZSwgJmNvdW50XShjb25zdCBTdHJpbmcmIGZpbGVO
YW1lLCBjb25zdCBTdHJpbmcmIHBhcnRpdGlvblBhdGgpIHsKICAgICAgICAgICAgIEtleTo6SGFz
aFR5cGUgaGFzaDsKICAgICAgICAgICAgIGlmICghS2V5OjpzdHJpbmdUb0hhc2goZmlsZU5hbWUs
IGhhc2gpKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNo
b3J0SGFzaCA9IEtleTo6dG9TaG9ydEhhc2goaGFzaCk7Ci0gICAgICAgICAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW3RoaXMsIHNob3J0SGFzaF0gewotICAgICAgICAgICAgICAgIG1fY29u
dGVudHNGaWx0ZXIuYWRkKHNob3J0SGFzaCk7Ci0gICAgICAgICAgICB9KTsKICAgICAgICAgICAg
IGF1dG8gZmlsZVBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGFydGl0
aW9uUGF0aCwgZmlsZU5hbWUpOwogICAgICAgICAgICAgbG9uZyBsb25nIGZpbGVTaXplID0gMDsK
ICAgICAgICAgICAgIFdlYkNvcmU6OmdldEZpbGVTaXplKGZpbGVQYXRoLCBmaWxlU2l6ZSk7Ci0g
ICAgICAgICAgICBtX2FwcHJveGltYXRlU2l6ZSArPSBmaWxlU2l6ZTsKKyAgICAgICAgICAgIGlm
ICghZmlsZVNpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgZmlsdGVy
LT5hZGQoS2V5Ojp0b1Nob3J0SGFzaChoYXNoKSk7CisgICAgICAgICAgICBzaXplICs9IGZpbGVT
aXplOworICAgICAgICAgICAgKytjb3VudDsKICAgICAgICAgfSk7Ci0gICAgICAgIG1faGFzUG9w
dWxhdGVkQ29udGVudHNGaWx0ZXIgPSB0cnVlOworCisgICAgICAgIGF1dG8qIGZpbHRlclB0ciA9
IGZpbHRlci5yZWxlYXNlKCk7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhp
cywgZmlsdGVyUHRyLCBzaXplXSB7CisgICAgICAgICAgICBhdXRvIGZpbHRlciA9IHN0ZDo6dW5p
cXVlX3B0cjxDb250ZW50c0ZpbHRlcj4oZmlsdGVyUHRyKTsKKworICAgICAgICAgICAgZm9yIChh
dXRvIGhhc2ggOiBtX2NvbnRlbnRzRmlsdGVySGFzaGVzQWRkZWREdXJpbmdTeW5jaHJvbml6YXRp
b24pCisgICAgICAgICAgICAgICAgZmlsdGVyLT5hZGQoaGFzaCk7CisgICAgICAgICAgICBtX2Nv
bnRlbnRzRmlsdGVySGFzaGVzQWRkZWREdXJpbmdTeW5jaHJvbml6YXRpb24uY2xlYXIoKTsKKwor
ICAgICAgICAgICAgbV9jb250ZW50c0ZpbHRlciA9IFdURjo6bW92ZShmaWx0ZXIpOworICAgICAg
ICAgICAgbV9hcHByb3hpbWF0ZVNpemUgPSBzaXplOworICAgICAgICAgICAgbV9zeW5jaHJvbml6
YXRpb25JblByb2dyZXNzID0gZmFsc2U7CisgICAgICAgIH0pOworCisgICAgICAgIExPRyhOZXR3
b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSBzeW5jaHJvbml6YXRpb24gY29tcGxl
dGVkIGFwcHJveGltYXRlU2l6ZT0lenUgY291bnQ9JWQiLCBzaXplLCBjb3VudCk7CiAgICAgfSk7
CiB9CiAKK3ZvaWQgU3RvcmFnZTo6YWRkVG9Db250ZW50c0ZpbHRlcihjb25zdCBLZXkmIGtleSkK
K3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKG1fY29udGVudHNG
aWx0ZXIpCisgICAgICAgIG1fY29udGVudHNGaWx0ZXItPmFkZChrZXkuc2hvcnRIYXNoKCkpOwor
CisgICAgLy8gSWYgd2UgZ2V0IG5ldyBlbnRyaWVzIGR1cmluZyBmaWx0ZXIgc3luY2hyb25pemF0
aW9uIHRha2UgY2FyZSB0byBhZGQgdGhlbSB0byB0aGUgbmV3IGZpbHRlciBhcyB3ZWxsLgorICAg
IGlmIChtX3N5bmNocm9uaXphdGlvbkluUHJvZ3Jlc3MpCisgICAgICAgIG1fY29udGVudHNGaWx0
ZXJIYXNoZXNBZGRlZER1cmluZ1N5bmNocm9uaXphdGlvbi5hcHBlbmQoa2V5LnNob3J0SGFzaCgp
KTsKK30KKworYm9vbCBTdG9yYWdlOjptYXlDb250YWluKGNvbnN0IEtleSYga2V5KSBjb25zdAor
eworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgcmV0dXJuICFtX2NvbnRlbnRz
RmlsdGVyIHx8IG1fY29udGVudHNGaWx0ZXItPm1heUNvbnRhaW4oa2V5LnNob3J0SGFzaCgpKTsK
K30KKwogc3RhdGljIFN0cmluZyBkaXJlY3RvcnlQYXRoRm9yS2V5KGNvbnN0IEtleSYga2V5LCBj
b25zdCBTdHJpbmcmIGNhY2hlUGF0aCkKIHsKICAgICBBU1NFUlQoIWtleS5wYXJ0aXRpb24oKS5p
c0VtcHR5KCkpOwpAQCAtMjg4LDExICszMjcsOSBAQCB2b2lkIFN0b3JhZ2U6OnJlbW92ZShjb25z
dCBLZXkmIGtleSkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgLy8g
Rm9yIHNpbXBsaWNpdHkgd2UgZG9uJ3QgcmVkdWNlIG1fYXBwcm94aW1hdGVTaXplIG9uIHJlbW92
YWxzLgotICAgIC8vIFRoZSBuZXh0IGNhY2hlIHNocmluayB3aWxsIHVwZGF0ZSB0aGUgc2l6ZS4K
LQotICAgIGlmIChtX2NvbnRlbnRzRmlsdGVyLm1heUNvbnRhaW4oa2V5LnNob3J0SGFzaCgpKSkK
LSAgICAgICAgbV9jb250ZW50c0ZpbHRlci5yZW1vdmUoa2V5LnNob3J0SGFzaCgpKTsKKyAgICAv
LyBXZSBjYW4ndCByZW1vdmUgdGhlIGtleSBmcm9tIHRoZSBCbG9vbSBmaWx0ZXIgKGJ1dCBzb21l
IGZhbHNlIHBvc2l0aXZlcyBhcmUgZXhwZWN0ZWQgYW55d2F5KS4KKyAgICAvLyBGb3Igc2ltcGxp
Y2l0eSB3ZSBhbHNvIGRvbid0IHJlZHVjZSBtX2FwcHJveGltYXRlU2l6ZSBvbiByZW1vdmFscy4K
KyAgICAvLyBUaGUgbmV4dCBzeW5jaHJvbml6YXRpb24gd2lsbCB1cGRhdGUgZXZlcnl0aGluZy4K
IAogICAgIFN0cmluZ0NhcHR1cmUgZmlsZVBhdGhDYXB0dXJlKGZpbGVQYXRoRm9yS2V5KGtleSwg
bV9kaXJlY3RvcnlQYXRoKSk7CiAgICAgc2VyaWFsQmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRj
aChbdGhpcywgZmlsZVBhdGhDYXB0dXJlXSB7CkBAIC0zODUsNyArNDIyLDcgQEAgdm9pZCBTdG9y
YWdlOjpyZXRyaWV2ZShjb25zdCBLZXkmIGtleSwgdQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaWYgKCFjYWNoZU1heUNvbnRhaW4oa2V5LnNob3J0SGFzaCgpKSkgeworICAgIGlmICgh
bWF5Q29udGFpbihrZXkpKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDEyLDcgKzQ0OSw3IEBAIHZvaWQgU3RvcmFnZTo6
c3RvcmUoY29uc3QgUmVjb3JkJiByZWNvcmQKICAgICBtX3BlbmRpbmdXcml0ZU9wZXJhdGlvbnMu
YXBwZW5kKG5ldyBXcml0ZU9wZXJhdGlvbiB7IHJlY29yZCwgeyB9LCBXVEY6Om1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpIH0pOwogCiAgICAgLy8gQWRkIGtleSB0byB0aGUgZmlsdGVyIGFscmVhZHkg
aGVyZSBhcyB3ZSBkbyBsb29rdXBzIGZyb20gdGhlIHBlbmRpbmcgb3BlcmF0aW9ucyB0b28uCi0g
ICAgbV9jb250ZW50c0ZpbHRlci5hZGQocmVjb3JkLmtleS5zaG9ydEhhc2goKSk7CisgICAgYWRk
VG9Db250ZW50c0ZpbHRlcihyZWNvcmQua2V5KTsKIAogICAgIGRpc3BhdGNoUGVuZGluZ1dyaXRl
T3BlcmF0aW9ucygpOwogfQpAQCAtNDc5LDcgKzUxNiw3IEBAIHZvaWQgU3RvcmFnZTo6ZGlzcGF0
Y2hQZW5kaW5nV3JpdGVPcGVyYXQKICAgICAgICAgYXV0byYgd3JpdGUgPSAqd3JpdGVPcGVyYXRp
b247CiAgICAgICAgIG1fYWN0aXZlV3JpdGVPcGVyYXRpb25zLmFkZChXVEY6Om1vdmUod3JpdGVP
cGVyYXRpb24pKTsKIAotICAgICAgICBpZiAod3JpdGUuZXhpc3RpbmdSZWNvcmQgJiYgY2FjaGVN
YXlDb250YWluKHdyaXRlLnJlY29yZC5rZXkuc2hvcnRIYXNoKCkpKSB7CisgICAgICAgIGlmICh3
cml0ZS5leGlzdGluZ1JlY29yZCAmJiBtYXlDb250YWluKHdyaXRlLnJlY29yZC5rZXkpKSB7CiAg
ICAgICAgICAgICBkaXNwYXRjaEhlYWRlcldyaXRlT3BlcmF0aW9uKHdyaXRlKTsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC00OTIsOCArNTI5LDggQEAgdm9pZCBTdG9yYWdl
OjpkaXNwYXRjaEZ1bGxXcml0ZU9wZXJhdGlvbgogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CiAgICAgQVNTRVJUKG1fYWN0aXZlV3JpdGVPcGVyYXRpb25zLmNvbnRhaW5zKCZ3cml0ZSkp
OwogCi0gICAgaWYgKCFtX2NvbnRlbnRzRmlsdGVyLm1heUNvbnRhaW4od3JpdGUucmVjb3JkLmtl
eS5zaG9ydEhhc2goKSkpCi0gICAgICAgIG1fY29udGVudHNGaWx0ZXIuYWRkKHdyaXRlLnJlY29y
ZC5rZXkuc2hvcnRIYXNoKCkpOworICAgIC8vIFRoaXMgd2FzIGFkZGVkIGFscmVhZHkgd2hlbiBz
dGFydGluZyB0aGUgc3RvcmUgYnV0IGZpbHRlciBtaWdodCBoYXZlIGdvdCB3aXBlZC4KKyAgICBh
ZGRUb0NvbnRlbnRzRmlsdGVyKHdyaXRlLnJlY29yZC5rZXkpOwogCiAgICAgU3RyaW5nQ2FwdHVy
ZSBjYWNoZVBhdGhDYXB0dXJlKG1fZGlyZWN0b3J5UGF0aCk7CiAgICAgYmFja2dyb3VuZElPUXVl
dWUoKS5kaXNwYXRjaChbdGhpcywgJndyaXRlLCBjYWNoZVBhdGhDYXB0dXJlXSB7CkBAIC01MDUs
MTQgKzU0MiwxMCBAQCB2b2lkIFN0b3JhZ2U6OmRpc3BhdGNoRnVsbFdyaXRlT3BlcmF0aW9uCiAg
ICAgICAgIHNpemVfdCBib2R5T2Zmc2V0ID0gZW5jb2RlZEhlYWRlci5zaXplKCk7CiAKICAgICAg
ICAgY2hhbm5lbC0+d3JpdGUoMCwgaGVhZGVyQW5kQm9keURhdGEsIFt0aGlzLCAmd3JpdGUsIGJv
ZHlPZmZzZXQsIGZkXShpbnQgZXJyb3IpIHsKLSAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGVT
dG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSB3cml0ZSBjb21wbGV0ZSBlcnJvcj0lZCIsIGVycm9y
KTsKLSAgICAgICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgICAgIGlmIChtX2NvbnRl
bnRzRmlsdGVyLm1heUNvbnRhaW4od3JpdGUucmVjb3JkLmtleS5zaG9ydEhhc2goKSkpCi0gICAg
ICAgICAgICAgICAgICAgIG1fY29udGVudHNGaWx0ZXIucmVtb3ZlKHdyaXRlLnJlY29yZC5rZXku
c2hvcnRIYXNoKCkpOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgc2l6ZV90IGJvZHlTaXpl
ID0gd3JpdGUucmVjb3JkLmJvZHkuc2l6ZSgpOwogICAgICAgICAgICAgc2l6ZV90IHRvdGFsU2l6
ZSA9IGJvZHlPZmZzZXQgKyBib2R5U2l6ZTsKIAorICAgICAgICAgICAgLy8gT24gZXJyb3IgdGhl
IGVudHJ5IHN0aWxsIHN0YXlzIGluIHRoZSBjb250ZW50cyBmaWx0ZXIgdW50aWwgbmV4dCBzeW5j
aHJvbml6YXRpb24uCiAgICAgICAgICAgICBtX2FwcHJveGltYXRlU2l6ZSArPSB0b3RhbFNpemU7
CiAKICAgICAgICAgICAgIGJvb2wgc2hvdWxkTWFwQm9keSA9ICFlcnJvciAmJiBib2R5U2l6ZSA+
PSBwYWdlU2l6ZSgpOwpAQCAtNTIzLDYgKzU1Niw4IEBAIHZvaWQgU3RvcmFnZTo6ZGlzcGF0Y2hG
dWxsV3JpdGVPcGVyYXRpb24KICAgICAgICAgICAgIEFTU0VSVChtX2FjdGl2ZVdyaXRlT3BlcmF0
aW9ucy5jb250YWlucygmd3JpdGUpKTsKICAgICAgICAgICAgIG1fYWN0aXZlV3JpdGVPcGVyYXRp
b25zLnJlbW92ZSgmd3JpdGUpOwogICAgICAgICAgICAgZGlzcGF0Y2hQZW5kaW5nV3JpdGVPcGVy
YXRpb25zKCk7CisKKyAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdv
cmtQcm9jZXNzKSB3cml0ZSBjb21wbGV0ZSBlcnJvcj0lZCIsIGVycm9yKTsKICAgICAgICAgfSk7
CiAgICAgfSk7CiAKQEAgLTUzNCw3ICs1NjksNyBAQCB2b2lkIFN0b3JhZ2U6OmRpc3BhdGNoSGVh
ZGVyV3JpdGVPcGVyYXRpCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBBU1NF
UlQod3JpdGUuZXhpc3RpbmdSZWNvcmQpOwogICAgIEFTU0VSVChtX2FjdGl2ZVdyaXRlT3BlcmF0
aW9ucy5jb250YWlucygmd3JpdGUpKTsKLSAgICBBU1NFUlQoY2FjaGVNYXlDb250YWluKHdyaXRl
LnJlY29yZC5rZXkuc2hvcnRIYXNoKCkpKTsKKyAgICBBU1NFUlQobWF5Q29udGFpbih3cml0ZS5y
ZWNvcmQua2V5KSk7CiAKICAgICAvLyBUcnkgdG8gdXBkYXRlIHRoZSBoZWFkZXIgb2YgYW4gZXhp
c3RpbmcgZW50cnkuCiAgICAgU3RyaW5nQ2FwdHVyZSBjYWNoZVBhdGhDYXB0dXJlKG1fZGlyZWN0
b3J5UGF0aCk7CkBAIC01NzAsNiArNjA1LDE2IEBAIHZvaWQgU3RvcmFnZTo6ZGlzcGF0Y2hIZWFk
ZXJXcml0ZU9wZXJhdGkKIHZvaWQgU3RvcmFnZTo6c2V0TWF4aW11bVNpemUoc2l6ZV90IHNpemUp
CiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworI2lmICFBU1NFUlRfRElTQUJM
RUQKKyAgICBjb25zdCBzaXplX3QgYXNzdW1lZEF2ZXJhZ2VSZWNvcmRTaXplID0gNTAgPDwgMjA7
CisgICAgc2l6ZV90IG1heGltdW1SZWNvcmRDb3VudCA9IHNpemUgLyBhc3N1bWVkQXZlcmFnZVJl
Y29yZFNpemU7CisgICAgLy8gfjEwIGJpdHMgcGVyIGVsZW1lbnQgYXJlIHJlcXVpcmVkIGZvciA8
MSUgZmFsc2UgcG9zaXRpdmUgcmF0ZS4KKyAgICBzaXplX3QgZWZmZWN0aXZlQmxvb21GaWx0ZXJD
YXBhY2l0eSA9IENvbnRlbnRzRmlsdGVyOjp0YWJsZVNpemUgLyAxMDsKKyAgICAvLyBJZiB0aGlz
IGdldHMgaGl0IGl0IG1pZ2h0IGJlIHRpbWUgdG8gaW5jcmVhc2UgdGhlIGZpbHRlciBzaXplLgor
ICAgIEFTU0VSVChtYXhpbXVtUmVjb3JkQ291bnQgPCBlZmZlY3RpdmVCbG9vbUZpbHRlckNhcGFj
aXR5KTsKKyNlbmRpZgorCiAgICAgbV9tYXhpbXVtU2l6ZSA9IHNpemU7CiAKICAgICBzaHJpbmtJ
Zk5lZWRlZCgpOwpAQCAtNTgwLDcgKzYyNSw4IEBAIHZvaWQgU3RvcmFnZTo6Y2xlYXIoKQogICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3JhZ2Us
ICIoTmV0d29ya1Byb2Nlc3MpIGNsZWFyaW5nIGNhY2hlIik7CiAKLSAgICBtX2NvbnRlbnRzRmls
dGVyLmNsZWFyKCk7CisgICAgaWYgKG1fY29udGVudHNGaWx0ZXIpCisgICAgICAgIG1fY29udGVu
dHNGaWx0ZXItPmNsZWFyKCk7CiAgICAgbV9hcHByb3hpbWF0ZVNpemUgPSAwOwogCiAgICAgU3Ry
aW5nQ2FwdHVyZSBkaXJlY3RvcnlQYXRoQ2FwdHVyZShtX2RpcmVjdG9yeVBhdGgpOwpAQCAtNjI5
LDIwICs2NzUsMjQgQEAgdm9pZCBTdG9yYWdlOjpzaHJpbmtJZk5lZWRlZCgpCiB7CiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGlmIChtX2FwcHJveGltYXRlU2l6ZSA8PSBt
X21heGltdW1TaXplKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fc2hyaW5rSW5Qcm9ncmVz
cykKKyAgICBpZiAobV9hcHByb3hpbWF0ZVNpemUgPiBtX21heGltdW1TaXplKQorICAgICAgICBz
aHJpbmsoKTsKK30KKwordm9pZCBTdG9yYWdlOjpzaHJpbmsoKQoreworICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICBpZiAobV9zaHJpbmtJblByb2dyZXNzIHx8IG1fc3luY2hy
b25pemF0aW9uSW5Qcm9ncmVzcykKICAgICAgICAgcmV0dXJuOwogICAgIG1fc2hyaW5rSW5Qcm9n
cmVzcyA9IHRydWU7CiAKICAgICBMT0coTmV0d29ya0NhY2hlU3RvcmFnZSwgIihOZXR3b3JrUHJv
Y2Vzcykgc2hyaW5raW5nIGNhY2hlIGFwcHJveGltYXRlU2l6ZT0lenUsIG1fbWF4aW11bVNpemU9
JXp1Iiwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2FwcHJveGltYXRlU2l6ZSksIG1fbWF4aW11bVNp
emUpOwogCi0gICAgbV9hcHByb3hpbWF0ZVNpemUgPSAwOwotCiAgICAgU3RyaW5nQ2FwdHVyZSBj
YWNoZVBhdGhDYXB0dXJlKG1fZGlyZWN0b3J5UGF0aCk7CiAgICAgYmFja2dyb3VuZElPUXVldWUo
KS5kaXNwYXRjaChbdGhpcywgY2FjaGVQYXRoQ2FwdHVyZV0gewogICAgICAgICBTdHJpbmcgY2Fj
aGVQYXRoID0gY2FjaGVQYXRoQ2FwdHVyZS5zdHJpbmcoKTsKLSAgICAgICAgdHJhdmVyc2VDYWNo
ZUZpbGVzKGNhY2hlUGF0aCwgW3RoaXNdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0
cmluZyYgcGFydGl0aW9uUGF0aCkgeworICAgICAgICB0cmF2ZXJzZUNhY2hlRmlsZXMoY2FjaGVQ
YXRoLCBbXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIHBhcnRpdGlvblBh
dGgpIHsKICAgICAgICAgICAgIGF1dG8gZmlsZVBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQocGFydGl0aW9uUGF0aCwgZmlsZU5hbWUpOwogCiAgICAgICAgICAgICBhdXRv
IHRpbWVzID0gZmlsZVRpbWVzKGZpbGVQYXRoKTsKQEAgLTY1MSwyMiArNzAxLDggQEAgdm9pZCBT
dG9yYWdlOjpzaHJpbmtJZk5lZWRlZCgpCiAKICAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGVT
dG9yYWdlLCAiRGVsZXRpb24gcHJvYmFiaWxpdHk9JWYgc2hvdWxkRGVsZXRlPSVkIiwgcHJvYmFi
aWxpdHksIHNob3VsZERlbGV0ZSk7CiAKLSAgICAgICAgICAgIGlmICghc2hvdWxkRGVsZXRlKSB7
Ci0gICAgICAgICAgICAgICAgbG9uZyBsb25nIGZpbGVTaXplID0gMDsKLSAgICAgICAgICAgICAg
ICBXZWJDb3JlOjpnZXRGaWxlU2l6ZShmaWxlUGF0aCwgZmlsZVNpemUpOwotICAgICAgICAgICAg
ICAgIG1fYXBwcm94aW1hdGVTaXplICs9IGZpbGVTaXplOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgV2ViQ29yZTo6ZGVsZXRlRmlsZShmaWxl
UGF0aCk7Ci0gICAgICAgICAgICBLZXk6Okhhc2hUeXBlIGhhc2g7Ci0gICAgICAgICAgICBpZiAo
IUtleTo6c3RyaW5nVG9IYXNoKGZpbGVOYW1lLCBoYXNoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydEhhc2ggPSBLZXk6OnRvU2hvcnRIYXNoKGhh
c2gpOwotICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBzaG9ydEhh
c2hdIHsKLSAgICAgICAgICAgICAgICBpZiAobV9jb250ZW50c0ZpbHRlci5tYXlDb250YWluKHNo
b3J0SGFzaCkpCi0gICAgICAgICAgICAgICAgICAgIG1fY29udGVudHNGaWx0ZXIucmVtb3ZlKHNo
b3J0SGFzaCk7Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmIChzaG91bGREZWxldGUp
CisgICAgICAgICAgICAgICAgV2ViQ29yZTo6ZGVsZXRlRmlsZShmaWxlUGF0aCk7CiAgICAgICAg
IH0pOwogCiAgICAgICAgIC8vIExldCBzeXN0ZW0gZmlndXJlIG91dCBpZiB0aGV5IGFyZSByZWFs
bHkgZW1wdHkuCkBAIC02NzUsOSArNzExLDEzIEBAIHZvaWQgU3RvcmFnZTo6c2hyaW5rSWZOZWVk
ZWQoKQogICAgICAgICAgICAgV2ViQ29yZTo6ZGVsZXRlRW1wdHlEaXJlY3RvcnkocGFydGl0aW9u
UGF0aCk7CiAgICAgICAgIH0pOwogCi0gICAgICAgIG1fc2hyaW5rSW5Qcm9ncmVzcyA9IGZhbHNl
OworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXNdIHsKKyAgICAgICAgICAg
IG1fc2hyaW5rSW5Qcm9ncmVzcyA9IGZhbHNlOworICAgICAgICAgICAgLy8gV2UgY291bGQgc3lu
Y2hyb25pemUgZHVyaW5nIHNocmluayB0cmF2ZXJzYWwuIEhvd2V2ZXIgdGhpcyBpcyBmYXN0IGFu
ZCBpdCBpcyBiZXR0ZXIgdG8gaGF2ZSBqdXN0IG9uZSBjb2RlIHBhdGguCisgICAgICAgICAgICBz
eW5jaHJvbml6ZSgpOworICAgICAgICB9KTsKIAotICAgICAgICBMT0coTmV0d29ya0NhY2hlU3Rv
cmFnZSwgIihOZXR3b3JrUHJvY2VzcykgY2FjaGUgc2hyaW5rIGNvbXBsZXRlZCBhcHByb3hpbWF0
ZVNpemU9JXp1Iiwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2FwcHJveGltYXRlU2l6ZSkpOworICAg
ICAgICBMT0coTmV0d29ya0NhY2hlU3RvcmFnZSwgIihOZXR3b3JrUHJvY2VzcykgY2FjaGUgc2hy
aW5rIGNvbXBsZXRlZCIpOwogICAgIH0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCShy
ZXZpc2lvbiAxODIzNDIpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTdG9yYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDkgKzg1LDEwIEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgU3RvcmFnZShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgp
OwogCi0gICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAgdm9pZCBzeW5jaHJvbml6ZSgpOwogICAg
IHZvaWQgZGVsZXRlT2xkVmVyc2lvbnMoKTsKICAgICB2b2lkIHNocmlua0lmTmVlZGVkKCk7Cisg
ICAgdm9pZCBzaHJpbmsoKTsKIAogICAgIHN0cnVjdCBSZWFkT3BlcmF0aW9uIHsKICAgICAgICAg
S2V5IGtleTsKQEAgLTExMSwxOCArMTEyLDI0IEBAIHByaXZhdGU6CiAgICAgV29ya1F1ZXVlJiBi
YWNrZ3JvdW5kSU9RdWV1ZSgpIHsgcmV0dXJuIG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCk7IH0K
ICAgICBXb3JrUXVldWUmIHNlcmlhbEJhY2tncm91bmRJT1F1ZXVlKCkgeyByZXR1cm4gbV9zZXJp
YWxCYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKTsgfQogCi0gICAgYm9vbCBjYWNoZU1heUNvbnRhaW4o
dW5zaWduZWQgc2hvcnRIYXNoKSB7IHJldHVybiAhbV9oYXNQb3B1bGF0ZWRDb250ZW50c0ZpbHRl
ciB8fCBtX2NvbnRlbnRzRmlsdGVyLm1heUNvbnRhaW4oc2hvcnRIYXNoKTsgfQorICAgIGJvb2wg
bWF5Q29udGFpbihjb25zdCBLZXkmKSBjb25zdDsKKworICAgIC8vIDJeMTggYml0IGZpbHRlciBj
YW4gc3VwcG9ydCB1cCB0byAyNjAwMCBlbnRyaWVzIHdpdGggZmFsc2UgcG9zaXRpdmUgcmF0ZSA8
IDElLgorICAgIHVzaW5nIENvbnRlbnRzRmlsdGVyID0gQmxvb21GaWx0ZXI8MTg+OworICAgIHZv
aWQgYWRkVG9Db250ZW50c0ZpbHRlcihjb25zdCBLZXkmKTsKIAogICAgIGNvbnN0IFN0cmluZyBt
X2Jhc2VEaXJlY3RvcnlQYXRoOwogICAgIGNvbnN0IFN0cmluZyBtX2RpcmVjdG9yeVBhdGg7CiAK
ICAgICBzaXplX3QgbV9tYXhpbXVtU2l6ZSB7IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6
bWF4KCkgfTsKKyAgICBzaXplX3QgbV9hcHByb3hpbWF0ZVNpemUgeyAwIH07CisKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q29udGVudHNGaWx0ZXI+IG1fY29udGVudHNGaWx0ZXI7CiAKLSAgICBDb3Vu
dGluZ0Jsb29tRmlsdGVyPDIwPiBtX2NvbnRlbnRzRmlsdGVyOwotICAgIHN0ZDo6YXRvbWljPGJv
b2w+IG1faGFzUG9wdWxhdGVkQ29udGVudHNGaWx0ZXIgeyBmYWxzZSB9OworICAgIGJvb2wgbV9z
eW5jaHJvbml6YXRpb25JblByb2dyZXNzIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc2hyaW5rSW5Q
cm9ncmVzcyB7IGZhbHNlIH07CiAKLSAgICBzdGQ6OmF0b21pYzxzaXplX3Q+IG1fYXBwcm94aW1h
dGVTaXplIHsgMCB9OwotICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1fc2hyaW5rSW5Qcm9ncmVzcyB7
IGZhbHNlIH07CisgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2NvbnRlbnRzRmlsdGVySGFzaGVzQWRk
ZWREdXJpbmdTeW5jaHJvbml6YXRpb247CiAKICAgICBzdGF0aWMgY29uc3QgaW50IG1heGltdW1S
ZXRyaWV2ZVByaW9yaXR5ID0gNDsKICAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8Y29uc3QgUmVh
ZE9wZXJhdGlvbj4+IG1fcGVuZGluZ1JlYWRPcGVyYXRpb25zQnlQcmlvcml0eVttYXhpbXVtUmV0
cmlldmVQcmlvcml0eSArIDFdOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>