<?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>205449</bug_id>
          
          <creation_ts>2019-12-19 07:18:25 -0800</creation_ts>
          <short_desc>Allow Vectors as hash keys</short_desc>
          <delta_ts>2019-12-20 02:17:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>WebKit 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>
          
          <blocked>205392</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>annulen</cc>
    
    <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1600259</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-19 07:18:25 -0800</bug_when>
    <thetext>Add traits to allow Vectors of hashable types to act as hash keys.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600261</commentid>
    <comment_count>1</comment_count>
      <attachid>386101</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-19 07:28:55 -0800</bug_when>
    <thetext>Created attachment 386101
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600272</commentid>
    <comment_count>2</comment_count>
      <attachid>386102</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-19 08:03:36 -0800</bug_when>
    <thetext>Created attachment 386102
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600295</commentid>
    <comment_count>3</comment_count>
      <attachid>386102</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-12-19 08:55:28 -0800</bug_when>
    <thetext>Comment on attachment 386102
patch

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

&gt; Source/WTF/wtf/VectorHash.h:52
&gt; +    static constexpr bool emptyValueIsZero = false;

Don’t you need to make the empty value too? What is the empty value?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600297</commentid>
    <comment_count>4</comment_count>
      <attachid>386102</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-12-19 08:58:49 -0800</bug_when>
    <thetext>Comment on attachment 386102
patch

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

&gt; Source/WTF/ChangeLog:22
&gt; +        Add traits. Empty Vector is the empty value.

I see this now. I’m not a huge fan of this. What if there is a scenario where empty vector is a legit key? Maybe just make the empty value Max - 1 and nullptr

&gt; Source/WTF/wtf/Vector.h:670
&gt; +        : Base(0, -1)

Should we use numeric_limits Max for cleanliness?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600309</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-19 09:17:40 -0800</bug_when>
    <thetext>&gt; I see this now. I’m not a huge fan of this. What if there is a scenario
&gt; where empty vector is a legit key? Maybe just make the empty value Max - 1
&gt; and nullptr

Things are simpler and more understandable if the empty value is a regular valid value. I think for types that have well-defined &quot;empty&quot; it is better to stick with that.

This can be reconsider if a use case where this matters appears.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600314</commentid>
    <comment_count>6</comment_count>
      <attachid>386111</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-19 09:30:24 -0800</bug_when>
    <thetext>Created attachment 386111
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600315</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-19 09:30:58 -0800</bug_when>
    <thetext>now with numeric_limits</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600350</commentid>
    <comment_count>8</comment_count>
      <attachid>386111</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-12-19 10:09:05 -0800</bug_when>
    <thetext>Comment on attachment 386111
patch

r=me

I think you can use emptyValueIsZero if inlineCapacity is zero.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600378</commentid>
    <comment_count>9</comment_count>
      <attachid>386120</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-19 10:41:34 -0800</bug_when>
    <thetext>Created attachment 386120
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600395</commentid>
    <comment_count>10</comment_count>
      <attachid>386120</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-19 11:29:10 -0800</bug_when>
    <thetext>Comment on attachment 386120
patch

Clearing flags on attachment: 386120

Committed r253775: &lt;https://trac.webkit.org/changeset/253775&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600396</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-19 11:29:12 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600397</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-12-19 11:30:24 -0800</bug_when>
    <thetext>&lt;rdar://problem/58086272&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600399</commentid>
    <comment_count>13</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-12-19 11:39:23 -0800</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #5)
&gt; &gt; I see this now. I’m not a huge fan of this. What if there is a scenario
&gt; &gt; where empty vector is a legit key? Maybe just make the empty value Max - 1
&gt; &gt; and nullptr
&gt; 
&gt; Things are simpler and more understandable if the empty value is a regular
&gt; valid value. I think for types that have well-defined &quot;empty&quot; it is better
&gt; to stick with that.
&gt; 
&gt; This can be reconsider if a use case where this matters appears.

Why introduce this footgun? We already know from experience people want to put nullptr, zero, etc, in hash tables as keys. I don&apos;t see why we wouldn&apos;t also want an empty vector. I don&apos;t understand why having a well-defined &quot;empty&quot; is any more important than a well defined &quot;deleted&quot; value? If we&apos;re introducing something new, we might as well introduce it without the footgun.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600437</commentid>
    <comment_count>14</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-19 12:31:02 -0800</bug_when>
    <thetext>&gt; Why introduce this footgun? We already know from experience people want to
&gt; put nullptr, zero, etc, in hash tables as keys. I don&apos;t see why we wouldn&apos;t
&gt; also want an empty vector. I don&apos;t understand why having a well-defined
&gt; &quot;empty&quot; is any more important than a well defined &quot;deleted&quot; value? If we&apos;re
&gt; introducing something new, we might as well introduce it without the footgun.

Patches welcome. 

Deleted value is just some unique bits written to a hash table slot. The templates appear to expect empty value to be movable and destructible. It is not immediately obvious to me how to do without complicating Vector disproportionally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600438</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2019-12-19 12:32:15 -0800</bug_when>
    <thetext>Using a mutable container as key is a pretty big footgun by itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600444</commentid>
    <comment_count>16</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-19 12:48:33 -0800</bug_when>
    <thetext>(In reply to Alexey Proskuryakov from comment #15)
&gt; Using a mutable container as key is a pretty big footgun by itself.

As opposed to any other mutable type?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600474</commentid>
    <comment_count>17</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2019-12-19 13:27:36 -0800</bug_when>
    <thetext>A mutable container is more dangerous than e.g. an int. That&apos;s because those get passed over by reference all the time.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386101</attachid>
            <date>2019-12-19 07:28:55 -0800</date>
            <delta_ts>2019-12-19 08:03:36 -0800</delta_ts>
            <desc>patch</desc>
            <filename>vector_hash.patch</filename>
            <type>text/plain</type>
            <size>12211</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYjY1ZTAzMzk5NzguLjhjMzk1NTE0ZmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDE5
LTEyLTE5ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBbGxv
dyBWZWN0b3JzIGFzIGhhc2gga2V5cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA1NDQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIHRyYWl0cyB0byBhbGxvdyBWZWN0b3JzIG9mIGhhc2hhYmxlIHR5
cGVzIHRvIGFjdCBhcyBoYXNoIGtleXMuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEY6OlZlY3Rv
cjo6VmVjdG9yKToKKyAgICAgICAgKFdURjo6VmVjdG9yOjp+VmVjdG9yKToKKyAgICAgICAgKFdU
Rjo6VmVjdG9yOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisKKyAgICAgICAgVXNl
IG1fc2l6ZSA9PSAtMSBhcyB0aGUgZGVsZXRlZCB2YWx1ZS4KKworICAgICAgICAqIHd0Zi9WZWN0
b3JIYXNoLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpWZWN0b3JIYXNoOjpoYXNoKToKKyAgICAg
ICAgKFdURjo6VmVjdG9ySGFzaDo6ZXF1YWwpOgorCisgICAgICAgIEFkZCB0cmFpdHMuIEVtcHR5
IFZlY3RvciBpcyB0aGUgZW1wdHkgdmFsdWUuCisKIDIwMTktMTItMTggIFl1c3VrZSBTdXp1a2kg
IDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBidWlsZCBmaXggYWZ0
ZXIgcjI1MzczMApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
NWJkN2FiNDNkZTAuLjZmYjJmNTQ1M2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTY4Nyw2ICs2ODcsNyBAQAogCQlFM0NGNzY5MDIxMTVENkJBMDA5MURF
NDggLyogQ29tcGFjdFBvaW50ZXJUdXBsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb21wYWN0UG9pbnRlclR1cGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUzRTE1ODI1MUVBREE1M0MwMDRBMDc5RCAvKiBTeXN0ZW1GcmVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbUZyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTNFNjRGMEIyMjgxMzQyODAwMUU1NUI0IC8qIE5vbm1vdmFibGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTm9ubW92YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDE5RjJF
NjIzQUI5RTIzMDBCMjYxMjkgLyogVmVjdG9ySGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWZWN0b3JIYXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
MzFDQzRBMjExODdBREIwMDBDOEEwNyAvKiBEaXNwYXRjaFNQSS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEaXNwYXRjaFNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFNEEwQUQzNzFBOTYyNDU1MDA1MzZERjYgLyogV29ya1F1ZXVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtRdWV1ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUU0QTBBRDM4MUE5NjI0NTUwMDUzNkRGNiAvKiBXb3JrUXVldWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV29ya1F1ZXVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMjE5LDYgKzEyMjAsNyBAQAogCQkJCUE4QTQ3MzZGMTUxQTgy
NUIwMDQxMjNGRiAvKiBWYWx1ZUNoZWNrLmggKi8sCiAJCQkJN0NEMEQ1QTcxRDU1MzIyQTAwMEND
OUUxIC8qIFZhcmlhbnQuaCAqLywKIAkJCQlBOEE0NzM3MDE1MUE4MjVCMDA0MTIzRkYgLyogVmVj
dG9yLmggKi8sCisJCQkJRTQxOUYyRTYyM0FCOUUyMzAwQjI2MTI5IC8qIFZlY3Rvckhhc2guaCAq
LywKIAkJCQlBOEE0NzM3MTE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yVHJhaXRzLmggKi8sCiAJ
CQkJQThBNDczNzIxNTFBODI1QjAwNDEyM0ZGIC8qIFZNVGFncy5oICovLAogCQkJCTBGNjZCMjg4
MURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5jcHAgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9WZWN0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCmluZGV4IGI3Y2RlNzg0
ZmZhLi4yNjViYzZiMzQ0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVmVjdG9yLmgKKysr
IGIvU291cmNlL1dURi93dGYvVmVjdG9yLmgKQEAgLTY2Niw5ICs2NjYsMTQgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIFZlY3RvcihXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogQmFzZSgwLCAtMSkKKyAgICB7CisgICAgfQor
CiAgICAgflZlY3RvcigpCiAgICAgewotICAgICAgICBpZiAobV9zaXplKQorICAgICAgICBpZiAo
bV9zaXplICsgMSA+IDEpCiAgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3QoYmVn
aW4oKSwgZW5kKCkpOwogCiAgICAgICAgIGFzYW5TZXRCdWZmZXJTaXplVG9GdWxsQ2FwYWNpdHko
MCk7CkBAIC04MjgsNiArODMzLDggQEAgcHVibGljOgogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TWFwRnVuY3Rpb24sIHR5cGVuYW1lIFIgPSB0eXBlbmFtZSBzdGQ6OnJlc3VsdF9vZjxNYXBGdW5j
dGlvbihjb25zdCBUJik+Ojp0eXBlPiBWZWN0b3I8Uj4gbWFwKE1hcEZ1bmN0aW9uKSBjb25zdDsK
IAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3Np
emUgPT0gc3RhdGljX2Nhc3Q8ZGVjbHR5cGUobV9zaXplKT4oLTEpOyB9CisKIHByaXZhdGU6CiAg
ICAgdm9pZCBleHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHkpOwogICAgIFQqIGV4
cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSwgVCopOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvVmVjdG9ySGFzaC5oIGIvU291cmNlL1dURi93dGYvVmVjdG9ySGFzaC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42YzY5MTBmM2FmMwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvckhhc2guaApAQCAtMCwwICsxLDYzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJIYXNoRnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiSGFzaFRyYWl0cy5o
IgorI2luY2x1ZGUgIkhhc2hlci5oIgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5Pgorc3RydWN0IFZlY3Rvckhhc2ggeworICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZl
Y3RvcikKKyAgICB7CisgICAgICAgIEludGVnZXJIYXNoZXIgaGFzaGVyOworICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIHZhbHVlIDogdmVjdG9yKQorICAgICAgICAgICAgaGFzaGVyLmFkZChEZWZh
dWx0SGFzaDxUPjo6SGFzaDo6aGFzaCh2YWx1ZSkpOworICAgICAgICByZXR1cm4gaGFzaGVyLmhh
c2goKTsKKyAgICB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5PiYgYSwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgYikKKyAgICB7
CisgICAgICAgIHJldHVybiBhID09IGI7CisgICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CitzdHJ1Y3QgSGFzaFRyYWl0czxWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHk+PiA6IEdlbmVyaWNIYXNoVHJhaXRzPFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eT4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgZW1wdHlWYWx1ZUlzWmVy
byA9IGZhbHNlOworCisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eT4mIHNsb3QpIHsgbmV3IChOb3ROdWxsLCBzdGQ6OmFkZHJlc3Nv
ZihzbG90KSkgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PihXVEY6Okhhc2hUYWJsZURlbGV0ZWRW
YWx1ZSk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHk+JiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuaXNIYXNoVGFibGVEZWxldGVk
VmFsdWUoKTsgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5Pgorc3RydWN0IERlZmF1bHRIYXNoPFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4+IHsKKyAg
ICB1c2luZyBIYXNoID0gVmVjdG9ySGFzaDxULCBpbmxpbmVDYXBhY2l0eT47Cit9OworCit9CmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNmUzZjRi
M2ZkNGEuLmYyNTgzZmFkNGRkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9v
bHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTktMTItMTkgIEFudHRpIEtvaXZpc3Rv
ICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIEFsbG93IFZlY3RvcnMgYXMgaGFzaCBrZXlz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDU0NDkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL1ZlY3Rvci5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpU
RVNUKToKKwogMjAxOS0xMi0xOCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjI1MzY0Ni4KZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZlY3Rvci5jcHAgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0b3IuY3BwCmluZGV4IDFkYTI5YzE0NjNjLi4wY2U3NmRm
ODg3MSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmVjdG9yLmNw
cAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0b3IuY3BwCkBAIC0zMCw2
ICszMCw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhh
c2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvckhh
c2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKQEAgLTkxMiw1ICs5MTMsMjAxIEBAIFRFU1QoV1RGX1ZlY3Rvciwg
U3RyaW5nQ29tcGFyaXNvbikKICAgICBWZWN0b3I8U3RyaW5nPiBiID0ge3sgImEiIH19OwogICAg
IEVYUEVDVF9UUlVFKGEgPT0gYik7CiB9CisKK1RFU1QoV1RGX1ZlY3RvciwgSGFzaEtleSkKK3sK
KyAgICBWZWN0b3I8aW50PiBhID0geyAxIH07CisgICAgVmVjdG9yPGludD4gYiA9IHsgMSwgMiB9
OworCisgICAgSGFzaFNldDxWZWN0b3I8aW50Pj4gaGFzaDsKKworICAgIEVYUEVDVF9GQUxTRSho
YXNoLmNvbnRhaW5zKGEpKTsKKyAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250YWlucyhiKSk7CisK
KyAgICBoYXNoLmFkZChhKTsKKworICAgIEVYUEVDVF9UUlVFKGhhc2guY29udGFpbnMoYSkpOwor
ICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5zKGIpKTsKKworICAgIGhhc2guYWRkKGEpOwor
CisgICAgRVhQRUNUX1RSVUUoaGFzaC5jb250YWlucyhhKSk7CisgICAgRVhQRUNUX0ZBTFNFKGhh
c2guY29udGFpbnMoYikpOworCisgICAgaGFzaC5hZGQoYik7CisKKyAgICBFWFBFQ1RfVFJVRSho
YXNoLmNvbnRhaW5zKGEpKTsKKyAgICBFWFBFQ1RfVFJVRShoYXNoLmNvbnRhaW5zKGIpKTsKKwor
ICAgIGhhc2gucmVtb3ZlKGEpOworCisgICAgRVhQRUNUX0ZBTFNFKGhhc2guY29udGFpbnMoYSkp
OworICAgIEVYUEVDVF9UUlVFKGhhc2guY29udGFpbnMoYikpOworCisgICAgaGFzaC5yZW1vdmUo
Yik7CisKKyAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250YWlucyhhKSk7CisgICAgRVhQRUNUX0ZB
TFNFKGhhc2guY29udGFpbnMoYikpOworICAgIEVYUEVDVF9UUlVFKGhhc2guaXNFbXB0eSgpKTsK
KworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkgeworICAgICAgICBmb3IgKGludCBq
ID0gMDsgaiA8IDEwOyArK2opIHsKKyAgICAgICAgICAgIGhhc2guYWRkKHsgaSwgaiB9KTsKKyAg
ICAgICAgICAgIGhhc2guYWRkKHsgaSwgaiwgaSB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkgeworICAgICAgICBmb3IgKGludCBqID0gMDsg
aiA8IDEwOyArK2opIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGhhc2guY29udGFpbnMoeyBp
LCBqIH0pKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGhhc2guY29udGFpbnMoeyBpLCBqLCBp
IH0pKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5zKHsgMTAsIGogfSkp
OworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGhhc2guY29udGFpbnMoeyBpLCBqLCAxMCB9KSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7ICsraSkgewor
ICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDEwOyArK2opIHsKKyAgICAgICAgICAgIGhhc2gu
cmVtb3ZlKHsgaSwgaiB9KTsKKyAgICAgICAgICAgIGhhc2gucmVtb3ZlKHsgaSwgaiwgaSB9KTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkgewor
ICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDEwOyArK2opIHsKKyAgICAgICAgICAgIEVYUEVD
VF9FUShoYXNoLmNvbnRhaW5zKHsgaSwgaiB9KSwgaSA+IDQpOworICAgICAgICAgICAgRVhQRUNU
X0VRKGhhc2guY29udGFpbnMoeyBpLCBqLCBpIH0pLCBpID4gNCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmb3IgKGludCBpID0gNTsgaSA8IDEwOyArK2kpIHsKKyAgICAgICAgZm9yIChpbnQg
aiA9IDA7IGogPCAxMDsgKytqKSB7CisgICAgICAgICAgICBoYXNoLnJlbW92ZSh7IGksIGogfSk7
CisgICAgICAgICAgICBoYXNoLnJlbW92ZSh7IGksIGosIGkgfSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBFWFBFQ1RfVFJVRShoYXNoLmlzRW1wdHkoKSk7Cit9CisKK1RFU1QoV1RGX1ZlY3Rv
ciwgSGFzaEtleUlubGluZUNhcGFjaXR5KQoreworICAgIFZlY3RvcjxpbnQsIDE+IGEgPSB7IDEg
fTsKKyAgICBWZWN0b3I8aW50LCAxPiBiID0geyAxLCAyIH07CisKKyAgICBIYXNoU2V0PFZlY3Rv
cjxpbnQsIDE+PiBoYXNoOworCisgICAgRVhQRUNUX0ZBTFNFKGhhc2guY29udGFpbnMoYSkpOwor
ICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5zKGIpKTsKKworICAgIGhhc2guYWRkKGEpOwor
CisgICAgRVhQRUNUX1RSVUUoaGFzaC5jb250YWlucyhhKSk7CisgICAgRVhQRUNUX0ZBTFNFKGhh
c2guY29udGFpbnMoYikpOworCisgICAgaGFzaC5hZGQoYSk7CisKKyAgICBFWFBFQ1RfVFJVRSho
YXNoLmNvbnRhaW5zKGEpKTsKKyAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250YWlucyhiKSk7CisK
KyAgICBoYXNoLmFkZChiKTsKKworICAgIEVYUEVDVF9UUlVFKGhhc2guY29udGFpbnMoYSkpOwor
ICAgIEVYUEVDVF9UUlVFKGhhc2guY29udGFpbnMoYikpOworCisgICAgaGFzaC5yZW1vdmUoYSk7
CisKKyAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250YWlucyhhKSk7CisgICAgRVhQRUNUX1RSVUUo
aGFzaC5jb250YWlucyhiKSk7CisKKyAgICBoYXNoLnJlbW92ZShiKTsKKworICAgIEVYUEVDVF9G
QUxTRShoYXNoLmNvbnRhaW5zKGEpKTsKKyAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250YWlucyhi
KSk7CisgICAgRVhQRUNUX1RSVUUoaGFzaC5pc0VtcHR5KCkpOworfQorCitURVNUKFdURl9WZWN0
b3IsIEhhc2hLZXlTdHJpbmcpCit7CisgICAgVmVjdG9yPFN0cmluZz4gYSA9IHsgImEiIH07Cisg
ICAgVmVjdG9yPFN0cmluZz4gYiA9IHsgImEiLCAiYiIgfTsKKworICAgIEhhc2hTZXQ8VmVjdG9y
PFN0cmluZz4+IGhhc2g7CisKKyAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250YWlucyhhKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKGhhc2guY29udGFpbnMoYikpOworCisgICAgaGFzaC5hZGQoYSk7CisK
KyAgICBFWFBFQ1RfVFJVRShoYXNoLmNvbnRhaW5zKGEpKTsKKyAgICBFWFBFQ1RfRkFMU0UoaGFz
aC5jb250YWlucyhiKSk7CisKKyAgICBoYXNoLmFkZChhKTsKKworICAgIEVYUEVDVF9UUlVFKGhh
c2guY29udGFpbnMoYSkpOworICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5zKGIpKTsKKwor
ICAgIGhhc2guYWRkKGIpOworCisgICAgRVhQRUNUX1RSVUUoaGFzaC5jb250YWlucyhhKSk7Cisg
ICAgRVhQRUNUX1RSVUUoaGFzaC5jb250YWlucyhiKSk7CisKKyAgICBoYXNoLnJlbW92ZShhKTsK
KworICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5zKGEpKTsKKyAgICBFWFBFQ1RfVFJVRSho
YXNoLmNvbnRhaW5zKGIpKTsKKworICAgIGhhc2gucmVtb3ZlKGIpOworCisgICAgRVhQRUNUX0ZB
TFNFKGhhc2guY29udGFpbnMoYSkpOworICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5zKGIp
KTsKKworICAgIGZvciAoYXV0byBpIDogeyAiYSIsICJiIiwgImMiLCAiZCIsICJlIiB9KSB7Cisg
ICAgICAgIGZvciAoYXV0byBqIDogeyAiYSIsICJiIiwgImMiLCAiZCIsICJlIiB9KSB7CisgICAg
ICAgICAgICBoYXNoLmFkZCh7IGksIGogfSk7CisgICAgICAgICAgICBoYXNoLmFkZCh7IGksIGos
IGksIGogfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGF1dG8gaSA6IHsgImEiLCAi
YiIsICJjIiwgImQiLCAiZSIgfSkgeworICAgICAgICBmb3IgKGF1dG8gaiA6IHsgImEiLCAiYiIs
ICJjIiwgImQiLCAiZSIgfSkgeworICAgICAgICAgICAgRVhQRUNUX1RSVUUoaGFzaC5jb250YWlu
cyh7IGksIGogfSkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUoaGFzaC5jb250YWlucyh7IGks
IGosIGksIGogfSkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGhhc2guY29udGFpbnMoeyBp
LCBqLCBpIH0pKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5zKHsgIngi
LCBqIH0pKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5zKHsgaSwgaiwg
IngiLCBqIH0pKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byBpIDogeyAiZCIs
ICJlIiB9KSB7CisgICAgICAgIGZvciAoYXV0byBqIDogeyAiYSIsICJiIiwgImMiLCAiZCIsICJl
IiB9KSB7CisgICAgICAgICAgICBoYXNoLnJlbW92ZSh7IGksIGogfSk7CisgICAgICAgICAgICBo
YXNoLnJlbW92ZSh7IGksIGosIGksIGogfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3Ig
KGF1dG8gaSA6IHsgImQiLCAiZSIgfSkgeworICAgICAgICBmb3IgKGF1dG8gaiA6IHsgImEiLCAi
YiIsICJjIiwgImQiLCAiZSIgfSkgeworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGhhc2guY29u
dGFpbnMoeyBpLCBqIH0pKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5z
KHsgaSwgaiwgaSwgaiB9KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGF1dG8gaSA6
IHsgImEiLCAiYiIsICJjIiB9KSB7CisgICAgICAgIGZvciAoYXV0byBqIDogeyAiYSIsICJiIiwg
ImMiLCAiZCIsICJlIiB9KSB7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShoYXNoLmNvbnRhaW5z
KHsgaSwgaiB9KSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShoYXNoLmNvbnRhaW5zKHsgaSwg
aiwgaSwgaiB9KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGF1dG8gaSA6IHsgImEi
LCAiYiIsICJjIiB9KSB7CisgICAgICAgIGZvciAoYXV0byBqIDogeyAiYSIsICJiIiwgImMiLCAi
ZCIsICJlIiB9KSB7CisgICAgICAgICAgICBoYXNoLnJlbW92ZSh7IGksIGogfSk7CisgICAgICAg
ICAgICBoYXNoLnJlbW92ZSh7IGksIGosIGksIGogfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBFWFBFQ1RfVFJVRShoYXNoLmlzRW1wdHkoKSk7Cit9CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386102</attachid>
            <date>2019-12-19 08:03:36 -0800</date>
            <delta_ts>2019-12-19 09:30:24 -0800</delta_ts>
            <desc>patch</desc>
            <filename>vector_hash-2.patch</filename>
            <type>text/plain</type>
            <size>12429</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYjY1ZTAzMzk5NzguLjhjMzk1NTE0ZmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDE5
LTEyLTE5ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBbGxv
dyBWZWN0b3JzIGFzIGhhc2gga2V5cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA1NDQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIHRyYWl0cyB0byBhbGxvdyBWZWN0b3JzIG9mIGhhc2hhYmxlIHR5
cGVzIHRvIGFjdCBhcyBoYXNoIGtleXMuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEY6OlZlY3Rv
cjo6VmVjdG9yKToKKyAgICAgICAgKFdURjo6VmVjdG9yOjp+VmVjdG9yKToKKyAgICAgICAgKFdU
Rjo6VmVjdG9yOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisKKyAgICAgICAgVXNl
IG1fc2l6ZSA9PSAtMSBhcyB0aGUgZGVsZXRlZCB2YWx1ZS4KKworICAgICAgICAqIHd0Zi9WZWN0
b3JIYXNoLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpWZWN0b3JIYXNoOjpoYXNoKToKKyAgICAg
ICAgKFdURjo6VmVjdG9ySGFzaDo6ZXF1YWwpOgorCisgICAgICAgIEFkZCB0cmFpdHMuIEVtcHR5
IFZlY3RvciBpcyB0aGUgZW1wdHkgdmFsdWUuCisKIDIwMTktMTItMTggIFl1c3VrZSBTdXp1a2kg
IDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBidWlsZCBmaXggYWZ0
ZXIgcjI1MzczMApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
NWJkN2FiNDNkZTAuLjZmYjJmNTQ1M2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTY4Nyw2ICs2ODcsNyBAQAogCQlFM0NGNzY5MDIxMTVENkJBMDA5MURF
NDggLyogQ29tcGFjdFBvaW50ZXJUdXBsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb21wYWN0UG9pbnRlclR1cGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUzRTE1ODI1MUVBREE1M0MwMDRBMDc5RCAvKiBTeXN0ZW1GcmVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbUZyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTNFNjRGMEIyMjgxMzQyODAwMUU1NUI0IC8qIE5vbm1vdmFibGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTm9ubW92YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDE5RjJF
NjIzQUI5RTIzMDBCMjYxMjkgLyogVmVjdG9ySGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWZWN0b3JIYXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
MzFDQzRBMjExODdBREIwMDBDOEEwNyAvKiBEaXNwYXRjaFNQSS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEaXNwYXRjaFNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFNEEwQUQzNzFBOTYyNDU1MDA1MzZERjYgLyogV29ya1F1ZXVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtRdWV1ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUU0QTBBRDM4MUE5NjI0NTUwMDUzNkRGNiAvKiBXb3JrUXVldWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV29ya1F1ZXVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMjE5LDYgKzEyMjAsNyBAQAogCQkJCUE4QTQ3MzZGMTUxQTgy
NUIwMDQxMjNGRiAvKiBWYWx1ZUNoZWNrLmggKi8sCiAJCQkJN0NEMEQ1QTcxRDU1MzIyQTAwMEND
OUUxIC8qIFZhcmlhbnQuaCAqLywKIAkJCQlBOEE0NzM3MDE1MUE4MjVCMDA0MTIzRkYgLyogVmVj
dG9yLmggKi8sCisJCQkJRTQxOUYyRTYyM0FCOUUyMzAwQjI2MTI5IC8qIFZlY3Rvckhhc2guaCAq
LywKIAkJCQlBOEE0NzM3MTE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yVHJhaXRzLmggKi8sCiAJ
CQkJQThBNDczNzIxNTFBODI1QjAwNDEyM0ZGIC8qIFZNVGFncy5oICovLAogCQkJCTBGNjZCMjg4
MURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5jcHAgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IGRhZTRhNzFiMjhkLi5iMjg3Zjc3ZTc4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
Q01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTI2
Nyw2ICsyNjcsNyBAQCBzZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAgVmFsdWVDaGVjay5oCiAg
ICAgVmFyaWFudC5oCiAgICAgVmVjdG9yLmgKKyAgICBWZWN0b3JIYXNoLmgKICAgICBWZWN0b3JU
cmFpdHMuaAogICAgIFdURlNlbWFwaG9yZS5oCiAgICAgV2FsbFRpbWUuaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvVmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAppbmRleCBi
N2NkZTc4NGZmYS4uM2JjOGE1ZjU4YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rv
ci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCkBAIC02NjYsNiArNjY2LDExIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICBWZWN0b3IoV1RGOjpI
YXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IEJhc2UoMCwgLTEpCisgICAgewor
ICAgIH0KKwogICAgIH5WZWN0b3IoKQogICAgIHsKICAgICAgICAgaWYgKG1fc2l6ZSkKQEAgLTgy
OCw2ICs4MzMsOCBAQCBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBGdW5jdGlv
biwgdHlwZW5hbWUgUiA9IHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29mPE1hcEZ1bmN0aW9uKGNvbnN0
IFQmKT46OnR5cGU+IFZlY3RvcjxSPiBtYXAoTWFwRnVuY3Rpb24pIGNvbnN0OwogCisgICAgYm9v
bCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZSA9PSBzdGF0
aWNfY2FzdDxkZWNsdHlwZShtX3NpemUpPigtMSk7IH0KKwogcHJpdmF0ZToKICAgICB2b2lkIGV4
cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSk7CiAgICAgVCogZXhwYW5kQ2FwYWNp
dHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5LCBUKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9WZWN0b3JIYXNoLmggYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3JIYXNoLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjZjNjkxMGYzYWYzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dURi93dGYvVmVjdG9ySGFzaC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkhhc2hGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJIYXNoVHJhaXRzLmgiCisjaW5jbHVk
ZSAiSGFzaGVyLmgiCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHk+CitzdHJ1Y3QgVmVjdG9ySGFzaCB7CisgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQorICAg
IHsKKyAgICAgICAgSW50ZWdlckhhc2hlciBoYXNoZXI7CisgICAgICAgIGZvciAoY29uc3QgYXV0
byYgdmFsdWUgOiB2ZWN0b3IpCisgICAgICAgICAgICBoYXNoZXIuYWRkKERlZmF1bHRIYXNoPFQ+
OjpIYXNoOjpoYXNoKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBoYXNoZXIuaGFzaCgpOworICAg
IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+
JiBhLCBjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiBiKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGEgPT0gYjsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNhZmVUb0Nv
bXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KK3N0cnVjdCBIYXNoVHJhaXRzPFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eT4+IDogR2VuZXJpY0hhc2hUcmFpdHM8VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
Pj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7
CisKKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5PiYgc2xvdCkgeyBuZXcgKE5vdE51bGwsIHN0ZDo6YWRkcmVzc29mKHNsb3QpKSBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsgfQor
ICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eT4mIHZhbHVlKSB7IHJldHVybiB2YWx1ZS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CitzdHJ1
Y3QgRGVmYXVsdEhhc2g8VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pj4geworICAgIHVzaW5nIEhh
c2ggPSBWZWN0b3JIYXNoPFQsIGlubGluZUNhcGFjaXR5PjsKK307CisKK30KZGlmZiAtLWdpdCBh
L1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2ZTNmNGIzZmQ0YS4uZjI1
ODNmYWQ0ZGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMyBAQAorMjAxOS0xMi0xOSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBh
cHBsZS5jb20+CisKKyAgICAgICAgQWxsb3cgVmVjdG9ycyBhcyBoYXNoIGtleXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTQ0OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvVmVjdG9yLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAy
MDE5LTEyLTE4ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjUzNjQ2LgpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmVjdG9yLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL1ZlY3Rvci5jcHAKaW5kZXggMWRhMjljMTQ2M2MuLjBjZTc2ZGY4ODcxIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0b3IuY3BwCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZlY3Rvci5jcHAKQEAgLTMwLDYgKzMwLDcgQEAK
ICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9ySGFzaC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIApAQCAtOTEyLDUgKzkxMywyMDEgQEAgVEVTVChXVEZfVmVjdG9yLCBTdHJpbmdDb21w
YXJpc29uKQogICAgIFZlY3RvcjxTdHJpbmc+IGIgPSB7eyAiYSIgfX07CiAgICAgRVhQRUNUX1RS
VUUoYSA9PSBiKTsKIH0KKworVEVTVChXVEZfVmVjdG9yLCBIYXNoS2V5KQoreworICAgIFZlY3Rv
cjxpbnQ+IGEgPSB7IDEgfTsKKyAgICBWZWN0b3I8aW50PiBiID0geyAxLCAyIH07CisKKyAgICBI
YXNoU2V0PFZlY3RvcjxpbnQ+PiBoYXNoOworCisgICAgRVhQRUNUX0ZBTFNFKGhhc2guY29udGFp
bnMoYSkpOworICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5zKGIpKTsKKworICAgIGhhc2gu
YWRkKGEpOworCisgICAgRVhQRUNUX1RSVUUoaGFzaC5jb250YWlucyhhKSk7CisgICAgRVhQRUNU
X0ZBTFNFKGhhc2guY29udGFpbnMoYikpOworCisgICAgaGFzaC5hZGQoYSk7CisKKyAgICBFWFBF
Q1RfVFJVRShoYXNoLmNvbnRhaW5zKGEpKTsKKyAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250YWlu
cyhiKSk7CisKKyAgICBoYXNoLmFkZChiKTsKKworICAgIEVYUEVDVF9UUlVFKGhhc2guY29udGFp
bnMoYSkpOworICAgIEVYUEVDVF9UUlVFKGhhc2guY29udGFpbnMoYikpOworCisgICAgaGFzaC5y
ZW1vdmUoYSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250YWlucyhhKSk7CisgICAgRVhQ
RUNUX1RSVUUoaGFzaC5jb250YWlucyhiKSk7CisKKyAgICBoYXNoLnJlbW92ZShiKTsKKworICAg
IEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5zKGEpKTsKKyAgICBFWFBFQ1RfRkFMU0UoaGFzaC5j
b250YWlucyhiKSk7CisgICAgRVhQRUNUX1RSVUUoaGFzaC5pc0VtcHR5KCkpOworCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCAxMDsgKytpKSB7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwg
MTA7ICsraikgeworICAgICAgICAgICAgaGFzaC5hZGQoeyBpLCBqIH0pOworICAgICAgICAgICAg
aGFzaC5hZGQoeyBpLCBqLCBpIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCAxMDsgKytpKSB7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMTA7ICsr
aikgeworICAgICAgICAgICAgRVhQRUNUX1RSVUUoaGFzaC5jb250YWlucyh7IGksIGogfSkpOwor
ICAgICAgICAgICAgRVhQRUNUX1RSVUUoaGFzaC5jb250YWlucyh7IGksIGosIGkgfSkpOworICAg
ICAgICAgICAgRVhQRUNUX0ZBTFNFKGhhc2guY29udGFpbnMoeyAxMCwgaiB9KSk7CisgICAgICAg
ICAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250YWlucyh7IGksIGosIDEwIH0pKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgKytpKSB7CisgICAgICAgIGZv
ciAoaW50IGogPSAwOyBqIDwgMTA7ICsraikgeworICAgICAgICAgICAgaGFzaC5yZW1vdmUoeyBp
LCBqIH0pOworICAgICAgICAgICAgaGFzaC5yZW1vdmUoeyBpLCBqLCBpIH0pOworICAgICAgICB9
CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgKytpKSB7CisgICAgICAgIGZv
ciAoaW50IGogPSAwOyBqIDwgMTA7ICsraikgeworICAgICAgICAgICAgRVhQRUNUX0VRKGhhc2gu
Y29udGFpbnMoeyBpLCBqIH0pLCBpID4gNCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoaGFzaC5j
b250YWlucyh7IGksIGosIGkgfSksIGkgPiA0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZv
ciAoaW50IGkgPSA1OyBpIDwgMTA7ICsraSkgeworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8
IDEwOyArK2opIHsKKyAgICAgICAgICAgIGhhc2gucmVtb3ZlKHsgaSwgaiB9KTsKKyAgICAgICAg
ICAgIGhhc2gucmVtb3ZlKHsgaSwgaiwgaSB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEVY
UEVDVF9UUlVFKGhhc2guaXNFbXB0eSgpKTsKK30KKworVEVTVChXVEZfVmVjdG9yLCBIYXNoS2V5
SW5saW5lQ2FwYWNpdHkpCit7CisgICAgVmVjdG9yPGludCwgMT4gYSA9IHsgMSB9OworICAgIFZl
Y3RvcjxpbnQsIDE+IGIgPSB7IDEsIDIgfTsKKworICAgIEhhc2hTZXQ8VmVjdG9yPGludCwgMT4+
IGhhc2g7CisKKyAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250YWlucyhhKSk7CisgICAgRVhQRUNU
X0ZBTFNFKGhhc2guY29udGFpbnMoYikpOworCisgICAgaGFzaC5hZGQoYSk7CisKKyAgICBFWFBF
Q1RfVFJVRShoYXNoLmNvbnRhaW5zKGEpKTsKKyAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250YWlu
cyhiKSk7CisKKyAgICBoYXNoLmFkZChhKTsKKworICAgIEVYUEVDVF9UUlVFKGhhc2guY29udGFp
bnMoYSkpOworICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5zKGIpKTsKKworICAgIGhhc2gu
YWRkKGIpOworCisgICAgRVhQRUNUX1RSVUUoaGFzaC5jb250YWlucyhhKSk7CisgICAgRVhQRUNU
X1RSVUUoaGFzaC5jb250YWlucyhiKSk7CisKKyAgICBoYXNoLnJlbW92ZShhKTsKKworICAgIEVY
UEVDVF9GQUxTRShoYXNoLmNvbnRhaW5zKGEpKTsKKyAgICBFWFBFQ1RfVFJVRShoYXNoLmNvbnRh
aW5zKGIpKTsKKworICAgIGhhc2gucmVtb3ZlKGIpOworCisgICAgRVhQRUNUX0ZBTFNFKGhhc2gu
Y29udGFpbnMoYSkpOworICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5zKGIpKTsKKyAgICBF
WFBFQ1RfVFJVRShoYXNoLmlzRW1wdHkoKSk7Cit9CisKK1RFU1QoV1RGX1ZlY3RvciwgSGFzaEtl
eVN0cmluZykKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBhID0geyAiYSIgfTsKKyAgICBWZWN0b3I8
U3RyaW5nPiBiID0geyAiYSIsICJiIiB9OworCisgICAgSGFzaFNldDxWZWN0b3I8U3RyaW5nPj4g
aGFzaDsKKworICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5zKGEpKTsKKyAgICBFWFBFQ1Rf
RkFMU0UoaGFzaC5jb250YWlucyhiKSk7CisKKyAgICBoYXNoLmFkZChhKTsKKworICAgIEVYUEVD
VF9UUlVFKGhhc2guY29udGFpbnMoYSkpOworICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5z
KGIpKTsKKworICAgIGhhc2guYWRkKGEpOworCisgICAgRVhQRUNUX1RSVUUoaGFzaC5jb250YWlu
cyhhKSk7CisgICAgRVhQRUNUX0ZBTFNFKGhhc2guY29udGFpbnMoYikpOworCisgICAgaGFzaC5h
ZGQoYik7CisKKyAgICBFWFBFQ1RfVFJVRShoYXNoLmNvbnRhaW5zKGEpKTsKKyAgICBFWFBFQ1Rf
VFJVRShoYXNoLmNvbnRhaW5zKGIpKTsKKworICAgIGhhc2gucmVtb3ZlKGEpOworCisgICAgRVhQ
RUNUX0ZBTFNFKGhhc2guY29udGFpbnMoYSkpOworICAgIEVYUEVDVF9UUlVFKGhhc2guY29udGFp
bnMoYikpOworCisgICAgaGFzaC5yZW1vdmUoYik7CisKKyAgICBFWFBFQ1RfRkFMU0UoaGFzaC5j
b250YWlucyhhKSk7CisgICAgRVhQRUNUX0ZBTFNFKGhhc2guY29udGFpbnMoYikpOworCisgICAg
Zm9yIChhdXRvIGkgOiB7ICJhIiwgImIiLCAiYyIsICJkIiwgImUiIH0pIHsKKyAgICAgICAgZm9y
IChhdXRvIGogOiB7ICJhIiwgImIiLCAiYyIsICJkIiwgImUiIH0pIHsKKyAgICAgICAgICAgIGhh
c2guYWRkKHsgaSwgaiB9KTsKKyAgICAgICAgICAgIGhhc2guYWRkKHsgaSwgaiwgaSwgaiB9KTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byBpIDogeyAiYSIsICJiIiwgImMiLCAi
ZCIsICJlIiB9KSB7CisgICAgICAgIGZvciAoYXV0byBqIDogeyAiYSIsICJiIiwgImMiLCAiZCIs
ICJlIiB9KSB7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShoYXNoLmNvbnRhaW5zKHsgaSwgaiB9
KSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShoYXNoLmNvbnRhaW5zKHsgaSwgaiwgaSwgaiB9
KSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250YWlucyh7IGksIGosIGkgfSkp
OworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGhhc2guY29udGFpbnMoeyAieCIsIGogfSkpOwor
ICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGhhc2guY29udGFpbnMoeyBpLCBqLCAieCIsIGogfSkp
OworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChhdXRvIGkgOiB7ICJkIiwgImUiIH0pIHsK
KyAgICAgICAgZm9yIChhdXRvIGogOiB7ICJhIiwgImIiLCAiYyIsICJkIiwgImUiIH0pIHsKKyAg
ICAgICAgICAgIGhhc2gucmVtb3ZlKHsgaSwgaiB9KTsKKyAgICAgICAgICAgIGhhc2gucmVtb3Zl
KHsgaSwgaiwgaSwgaiB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byBpIDog
eyAiZCIsICJlIiB9KSB7CisgICAgICAgIGZvciAoYXV0byBqIDogeyAiYSIsICJiIiwgImMiLCAi
ZCIsICJlIiB9KSB7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250YWlucyh7IGks
IGogfSkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGhhc2guY29udGFpbnMoeyBpLCBqLCBp
LCBqIH0pKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byBpIDogeyAiYSIsICJi
IiwgImMiIH0pIHsKKyAgICAgICAgZm9yIChhdXRvIGogOiB7ICJhIiwgImIiLCAiYyIsICJkIiwg
ImUiIH0pIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGhhc2guY29udGFpbnMoeyBpLCBqIH0p
KTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGhhc2guY29udGFpbnMoeyBpLCBqLCBpLCBqIH0p
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byBpIDogeyAiYSIsICJiIiwgImMi
IH0pIHsKKyAgICAgICAgZm9yIChhdXRvIGogOiB7ICJhIiwgImIiLCAiYyIsICJkIiwgImUiIH0p
IHsKKyAgICAgICAgICAgIGhhc2gucmVtb3ZlKHsgaSwgaiB9KTsKKyAgICAgICAgICAgIGhhc2gu
cmVtb3ZlKHsgaSwgaiwgaSwgaiB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEVYUEVDVF9U
UlVFKGhhc2guaXNFbXB0eSgpKTsKK30KICAgICAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386111</attachid>
            <date>2019-12-19 09:30:24 -0800</date>
            <delta_ts>2019-12-19 10:41:34 -0800</delta_ts>
            <desc>patch</desc>
            <filename>vector_hash-4.patch</filename>
            <type>text/plain</type>
            <size>12482</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYjY1ZTAzMzk5NzguLjhjMzk1NTE0ZmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDE5
LTEyLTE5ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBbGxv
dyBWZWN0b3JzIGFzIGhhc2gga2V5cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA1NDQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIHRyYWl0cyB0byBhbGxvdyBWZWN0b3JzIG9mIGhhc2hhYmxlIHR5
cGVzIHRvIGFjdCBhcyBoYXNoIGtleXMuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEY6OlZlY3Rv
cjo6VmVjdG9yKToKKyAgICAgICAgKFdURjo6VmVjdG9yOjp+VmVjdG9yKToKKyAgICAgICAgKFdU
Rjo6VmVjdG9yOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisKKyAgICAgICAgVXNl
IG1fc2l6ZSA9PSAtMSBhcyB0aGUgZGVsZXRlZCB2YWx1ZS4KKworICAgICAgICAqIHd0Zi9WZWN0
b3JIYXNoLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpWZWN0b3JIYXNoOjpoYXNoKToKKyAgICAg
ICAgKFdURjo6VmVjdG9ySGFzaDo6ZXF1YWwpOgorCisgICAgICAgIEFkZCB0cmFpdHMuIEVtcHR5
IFZlY3RvciBpcyB0aGUgZW1wdHkgdmFsdWUuCisKIDIwMTktMTItMTggIFl1c3VrZSBTdXp1a2kg
IDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBidWlsZCBmaXggYWZ0
ZXIgcjI1MzczMApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
NWJkN2FiNDNkZTAuLjZmYjJmNTQ1M2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTY4Nyw2ICs2ODcsNyBAQAogCQlFM0NGNzY5MDIxMTVENkJBMDA5MURF
NDggLyogQ29tcGFjdFBvaW50ZXJUdXBsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb21wYWN0UG9pbnRlclR1cGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUzRTE1ODI1MUVBREE1M0MwMDRBMDc5RCAvKiBTeXN0ZW1GcmVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbUZyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTNFNjRGMEIyMjgxMzQyODAwMUU1NUI0IC8qIE5vbm1vdmFibGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTm9ubW92YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDE5RjJF
NjIzQUI5RTIzMDBCMjYxMjkgLyogVmVjdG9ySGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWZWN0b3JIYXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
MzFDQzRBMjExODdBREIwMDBDOEEwNyAvKiBEaXNwYXRjaFNQSS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEaXNwYXRjaFNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFNEEwQUQzNzFBOTYyNDU1MDA1MzZERjYgLyogV29ya1F1ZXVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtRdWV1ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUU0QTBBRDM4MUE5NjI0NTUwMDUzNkRGNiAvKiBXb3JrUXVldWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV29ya1F1ZXVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMjE5LDYgKzEyMjAsNyBAQAogCQkJCUE4QTQ3MzZGMTUxQTgy
NUIwMDQxMjNGRiAvKiBWYWx1ZUNoZWNrLmggKi8sCiAJCQkJN0NEMEQ1QTcxRDU1MzIyQTAwMEND
OUUxIC8qIFZhcmlhbnQuaCAqLywKIAkJCQlBOEE0NzM3MDE1MUE4MjVCMDA0MTIzRkYgLyogVmVj
dG9yLmggKi8sCisJCQkJRTQxOUYyRTYyM0FCOUUyMzAwQjI2MTI5IC8qIFZlY3Rvckhhc2guaCAq
LywKIAkJCQlBOEE0NzM3MTE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yVHJhaXRzLmggKi8sCiAJ
CQkJQThBNDczNzIxNTFBODI1QjAwNDEyM0ZGIC8qIFZNVGFncy5oICovLAogCQkJCTBGNjZCMjg4
MURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5jcHAgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IGRhZTRhNzFiMjhkLi5iMjg3Zjc3ZTc4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
Q01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTI2
Nyw2ICsyNjcsNyBAQCBzZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAgVmFsdWVDaGVjay5oCiAg
ICAgVmFyaWFudC5oCiAgICAgVmVjdG9yLmgKKyAgICBWZWN0b3JIYXNoLmgKICAgICBWZWN0b3JU
cmFpdHMuaAogICAgIFdURlNlbWFwaG9yZS5oCiAgICAgV2FsbFRpbWUuaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvVmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAppbmRleCBi
N2NkZTc4NGZmYS4uNTkzNTAzM2MyZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rv
ci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCkBAIC02NjYsNiArNjY2LDExIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICBWZWN0b3IoV1RGOjpI
YXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IEJhc2UoMCwgc3RkOjpudW1lcmlj
X2xpbWl0czxkZWNsdHlwZShtX3NpemUpPjo6bWF4KCkpCisgICAgeworICAgIH0KKwogICAgIH5W
ZWN0b3IoKQogICAgIHsKICAgICAgICAgaWYgKG1fc2l6ZSkKQEAgLTgyOCw2ICs4MzMsOCBAQCBw
dWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBGdW5jdGlvbiwgdHlwZW5hbWUgUiA9
IHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29mPE1hcEZ1bmN0aW9uKGNvbnN0IFQmKT46OnR5cGU+IFZl
Y3RvcjxSPiBtYXAoTWFwRnVuY3Rpb24pIGNvbnN0OwogCisgICAgYm9vbCBpc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZSA9PSBzdGQ6Om51bWVyaWNfbGltaXRz
PGRlY2x0eXBlKG1fc2l6ZSk+OjptYXgoKTsgfQorCiBwcml2YXRlOgogICAgIHZvaWQgZXhwYW5k
Q2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5KTsKICAgICBUKiBleHBhbmRDYXBhY2l0eShz
aXplX3QgbmV3TWluQ2FwYWNpdHksIFQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Zl
Y3Rvckhhc2guaCBiL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvckhhc2guaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNmM2OTEwZjNhZjMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9WZWN0b3JIYXNoLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiSGFzaEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIkhhc2hUcmFpdHMuaCIKKyNpbmNsdWRlICJI
YXNoZXIuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eT4KK3N0cnVjdCBWZWN0b3JIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgewor
ICAgICAgICBJbnRlZ2VySGFzaGVyIGhhc2hlcjsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiB2
YWx1ZSA6IHZlY3RvcikKKyAgICAgICAgICAgIGhhc2hlci5hZGQoRGVmYXVsdEhhc2g8VD46Okhh
c2g6Omhhc2godmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7CisgICAgfQor
ICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIGEs
IGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIGIpCisgICAgeworICAgICAgICByZXR1
cm4gYSA9PSBiOworICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFy
ZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5Pgorc3RydWN0IEhhc2hUcmFpdHM8VmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5Pj4gOiBHZW5lcmljSGFzaFRyYWl0czxWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+PiB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKKwor
ICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHk+JiBzbG90KSB7IG5ldyAoTm90TnVsbCwgc3RkOjphZGRyZXNzb2Yoc2xvdCkpIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eT4oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpOyB9CisgICAg
c3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
PiYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KK3N0cnVjdCBE
ZWZhdWx0SGFzaDxWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+PiB7CisgICAgdXNpbmcgSGFzaCA9
IFZlY3Rvckhhc2g8VCwgaW5saW5lQ2FwYWNpdHk+OworfTsKKworfQpkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDZlM2Y0YjNmZDRhLi5mMjU4M2Zh
ZDRkZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEzIEBACisyMDE5LTEyLTE5ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxl
LmNvbT4KKworICAgICAgICBBbGxvdyBWZWN0b3JzIGFzIGhhc2gga2V5cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1NDQ5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9WZWN0b3IuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTkt
MTItMTggIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyNTM2NDYuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0b3IuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvVmVjdG9yLmNwcAppbmRleCAxZGEyOWMxNDYzYy4uMGNlNzZkZjg4NzEgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZlY3Rvci5jcHAKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmVjdG9yLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3JIYXNoLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCkBAIC05MTIsNSArOTEzLDIwMSBAQCBURVNUKFdURl9WZWN0b3IsIFN0cmluZ0NvbXBhcmlz
b24pCiAgICAgVmVjdG9yPFN0cmluZz4gYiA9IHt7ICJhIiB9fTsKICAgICBFWFBFQ1RfVFJVRShh
ID09IGIpOwogfQorCitURVNUKFdURl9WZWN0b3IsIEhhc2hLZXkpCit7CisgICAgVmVjdG9yPGlu
dD4gYSA9IHsgMSB9OworICAgIFZlY3RvcjxpbnQ+IGIgPSB7IDEsIDIgfTsKKworICAgIEhhc2hT
ZXQ8VmVjdG9yPGludD4+IGhhc2g7CisKKyAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250YWlucyhh
KSk7CisgICAgRVhQRUNUX0ZBTFNFKGhhc2guY29udGFpbnMoYikpOworCisgICAgaGFzaC5hZGQo
YSk7CisKKyAgICBFWFBFQ1RfVFJVRShoYXNoLmNvbnRhaW5zKGEpKTsKKyAgICBFWFBFQ1RfRkFM
U0UoaGFzaC5jb250YWlucyhiKSk7CisKKyAgICBoYXNoLmFkZChhKTsKKworICAgIEVYUEVDVF9U
UlVFKGhhc2guY29udGFpbnMoYSkpOworICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5zKGIp
KTsKKworICAgIGhhc2guYWRkKGIpOworCisgICAgRVhQRUNUX1RSVUUoaGFzaC5jb250YWlucyhh
KSk7CisgICAgRVhQRUNUX1RSVUUoaGFzaC5jb250YWlucyhiKSk7CisKKyAgICBoYXNoLnJlbW92
ZShhKTsKKworICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5zKGEpKTsKKyAgICBFWFBFQ1Rf
VFJVRShoYXNoLmNvbnRhaW5zKGIpKTsKKworICAgIGhhc2gucmVtb3ZlKGIpOworCisgICAgRVhQ
RUNUX0ZBTFNFKGhhc2guY29udGFpbnMoYSkpOworICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRh
aW5zKGIpKTsKKyAgICBFWFBFQ1RfVFJVRShoYXNoLmlzRW1wdHkoKSk7CisKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDEwOyArK2kpIHsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAxMDsg
KytqKSB7CisgICAgICAgICAgICBoYXNoLmFkZCh7IGksIGogfSk7CisgICAgICAgICAgICBoYXNo
LmFkZCh7IGksIGosIGkgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IDEwOyArK2kpIHsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAxMDsgKytqKSB7
CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShoYXNoLmNvbnRhaW5zKHsgaSwgaiB9KSk7CisgICAg
ICAgICAgICBFWFBFQ1RfVFJVRShoYXNoLmNvbnRhaW5zKHsgaSwgaiwgaSB9KSk7CisgICAgICAg
ICAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250YWlucyh7IDEwLCBqIH0pKTsKKyAgICAgICAgICAg
IEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5zKHsgaSwgaiwgMTAgfSkpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyArK2kpIHsKKyAgICAgICAgZm9yIChp
bnQgaiA9IDA7IGogPCAxMDsgKytqKSB7CisgICAgICAgICAgICBoYXNoLnJlbW92ZSh7IGksIGog
fSk7CisgICAgICAgICAgICBoYXNoLnJlbW92ZSh7IGksIGosIGkgfSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyArK2kpIHsKKyAgICAgICAgZm9yIChp
bnQgaiA9IDA7IGogPCAxMDsgKytqKSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoaGFzaC5jb250
YWlucyh7IGksIGogfSksIGkgPiA0KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShoYXNoLmNvbnRh
aW5zKHsgaSwgaiwgaSB9KSwgaSA+IDQpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChp
bnQgaSA9IDU7IGkgPCAxMDsgKytpKSB7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMTA7
ICsraikgeworICAgICAgICAgICAgaGFzaC5yZW1vdmUoeyBpLCBqIH0pOworICAgICAgICAgICAg
aGFzaC5yZW1vdmUoeyBpLCBqLCBpIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgRVhQRUNU
X1RSVUUoaGFzaC5pc0VtcHR5KCkpOworfQorCitURVNUKFdURl9WZWN0b3IsIEhhc2hLZXlJbmxp
bmVDYXBhY2l0eSkKK3sKKyAgICBWZWN0b3I8aW50LCAxPiBhID0geyAxIH07CisgICAgVmVjdG9y
PGludCwgMT4gYiA9IHsgMSwgMiB9OworCisgICAgSGFzaFNldDxWZWN0b3I8aW50LCAxPj4gaGFz
aDsKKworICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5zKGEpKTsKKyAgICBFWFBFQ1RfRkFM
U0UoaGFzaC5jb250YWlucyhiKSk7CisKKyAgICBoYXNoLmFkZChhKTsKKworICAgIEVYUEVDVF9U
UlVFKGhhc2guY29udGFpbnMoYSkpOworICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5zKGIp
KTsKKworICAgIGhhc2guYWRkKGEpOworCisgICAgRVhQRUNUX1RSVUUoaGFzaC5jb250YWlucyhh
KSk7CisgICAgRVhQRUNUX0ZBTFNFKGhhc2guY29udGFpbnMoYikpOworCisgICAgaGFzaC5hZGQo
Yik7CisKKyAgICBFWFBFQ1RfVFJVRShoYXNoLmNvbnRhaW5zKGEpKTsKKyAgICBFWFBFQ1RfVFJV
RShoYXNoLmNvbnRhaW5zKGIpKTsKKworICAgIGhhc2gucmVtb3ZlKGEpOworCisgICAgRVhQRUNU
X0ZBTFNFKGhhc2guY29udGFpbnMoYSkpOworICAgIEVYUEVDVF9UUlVFKGhhc2guY29udGFpbnMo
YikpOworCisgICAgaGFzaC5yZW1vdmUoYik7CisKKyAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250
YWlucyhhKSk7CisgICAgRVhQRUNUX0ZBTFNFKGhhc2guY29udGFpbnMoYikpOworICAgIEVYUEVD
VF9UUlVFKGhhc2guaXNFbXB0eSgpKTsKK30KKworVEVTVChXVEZfVmVjdG9yLCBIYXNoS2V5U3Ry
aW5nKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGEgPSB7ICJhIiB9OworICAgIFZlY3RvcjxTdHJp
bmc+IGIgPSB7ICJhIiwgImIiIH07CisKKyAgICBIYXNoU2V0PFZlY3RvcjxTdHJpbmc+PiBoYXNo
OworCisgICAgRVhQRUNUX0ZBTFNFKGhhc2guY29udGFpbnMoYSkpOworICAgIEVYUEVDVF9GQUxT
RShoYXNoLmNvbnRhaW5zKGIpKTsKKworICAgIGhhc2guYWRkKGEpOworCisgICAgRVhQRUNUX1RS
VUUoaGFzaC5jb250YWlucyhhKSk7CisgICAgRVhQRUNUX0ZBTFNFKGhhc2guY29udGFpbnMoYikp
OworCisgICAgaGFzaC5hZGQoYSk7CisKKyAgICBFWFBFQ1RfVFJVRShoYXNoLmNvbnRhaW5zKGEp
KTsKKyAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250YWlucyhiKSk7CisKKyAgICBoYXNoLmFkZChi
KTsKKworICAgIEVYUEVDVF9UUlVFKGhhc2guY29udGFpbnMoYSkpOworICAgIEVYUEVDVF9UUlVF
KGhhc2guY29udGFpbnMoYikpOworCisgICAgaGFzaC5yZW1vdmUoYSk7CisKKyAgICBFWFBFQ1Rf
RkFMU0UoaGFzaC5jb250YWlucyhhKSk7CisgICAgRVhQRUNUX1RSVUUoaGFzaC5jb250YWlucyhi
KSk7CisKKyAgICBoYXNoLnJlbW92ZShiKTsKKworICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRh
aW5zKGEpKTsKKyAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250YWlucyhiKSk7CisKKyAgICBmb3Ig
KGF1dG8gaSA6IHsgImEiLCAiYiIsICJjIiwgImQiLCAiZSIgfSkgeworICAgICAgICBmb3IgKGF1
dG8gaiA6IHsgImEiLCAiYiIsICJjIiwgImQiLCAiZSIgfSkgeworICAgICAgICAgICAgaGFzaC5h
ZGQoeyBpLCBqIH0pOworICAgICAgICAgICAgaGFzaC5hZGQoeyBpLCBqLCBpLCBqIH0pOworICAg
ICAgICB9CisgICAgfQorCisgICAgZm9yIChhdXRvIGkgOiB7ICJhIiwgImIiLCAiYyIsICJkIiwg
ImUiIH0pIHsKKyAgICAgICAgZm9yIChhdXRvIGogOiB7ICJhIiwgImIiLCAiYyIsICJkIiwgImUi
IH0pIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGhhc2guY29udGFpbnMoeyBpLCBqIH0pKTsK
KyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGhhc2guY29udGFpbnMoeyBpLCBqLCBpLCBqIH0pKTsK
KyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5zKHsgaSwgaiwgaSB9KSk7Cisg
ICAgICAgICAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250YWlucyh7ICJ4IiwgaiB9KSk7CisgICAg
ICAgICAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250YWlucyh7IGksIGosICJ4IiwgaiB9KSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGF1dG8gaSA6IHsgImQiLCAiZSIgfSkgeworICAg
ICAgICBmb3IgKGF1dG8gaiA6IHsgImEiLCAiYiIsICJjIiwgImQiLCAiZSIgfSkgeworICAgICAg
ICAgICAgaGFzaC5yZW1vdmUoeyBpLCBqIH0pOworICAgICAgICAgICAgaGFzaC5yZW1vdmUoeyBp
LCBqLCBpLCBqIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChhdXRvIGkgOiB7ICJk
IiwgImUiIH0pIHsKKyAgICAgICAgZm9yIChhdXRvIGogOiB7ICJhIiwgImIiLCAiYyIsICJkIiwg
ImUiIH0pIHsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5zKHsgaSwgaiB9
KSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250YWlucyh7IGksIGosIGksIGog
fSkpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChhdXRvIGkgOiB7ICJhIiwgImIiLCAi
YyIgfSkgeworICAgICAgICBmb3IgKGF1dG8gaiA6IHsgImEiLCAiYiIsICJjIiwgImQiLCAiZSIg
fSkgeworICAgICAgICAgICAgRVhQRUNUX1RSVUUoaGFzaC5jb250YWlucyh7IGksIGogfSkpOwor
ICAgICAgICAgICAgRVhQRUNUX1RSVUUoaGFzaC5jb250YWlucyh7IGksIGosIGksIGogfSkpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChhdXRvIGkgOiB7ICJhIiwgImIiLCAiYyIgfSkg
eworICAgICAgICBmb3IgKGF1dG8gaiA6IHsgImEiLCAiYiIsICJjIiwgImQiLCAiZSIgfSkgewor
ICAgICAgICAgICAgaGFzaC5yZW1vdmUoeyBpLCBqIH0pOworICAgICAgICAgICAgaGFzaC5yZW1v
dmUoeyBpLCBqLCBpLCBqIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgRVhQRUNUX1RSVUUo
aGFzaC5pc0VtcHR5KCkpOworfQogICAgIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>
<flag name="review"
          id="401925"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386120</attachid>
            <date>2019-12-19 10:41:34 -0800</date>
            <delta_ts>2019-12-19 11:29:10 -0800</delta_ts>
            <desc>patch</desc>
            <filename>vector_hash-5.patch</filename>
            <type>text/plain</type>
            <size>12504</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYjY1ZTAzMzk5NzguLjlmOTM5ZmFlNzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDE5
LTEyLTE5ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBbGxv
dyBWZWN0b3JzIGFzIGhhc2gga2V5cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA1NDQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYgR2FyZW4u
CisKKyAgICAgICAgQWRkIHRyYWl0cyB0byBhbGxvdyBWZWN0b3JzIG9mIGhhc2hhYmxlIHR5cGVz
IHRvIGFjdCBhcyBoYXNoIGtleXMuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiB3dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6
VmVjdG9yKToKKyAgICAgICAgKFdURjo6VmVjdG9yOjp+VmVjdG9yKToKKyAgICAgICAgKFdURjo6
VmVjdG9yOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisKKyAgICAgICAgVXNlIG1f
c2l6ZSA9IG51bWVyaWNfbGltaXRzOjptYXgoKSBhcyB0aGUgZGVsZXRlZCB2YWx1ZS4KKworICAg
ICAgICAqIHd0Zi9WZWN0b3JIYXNoLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpWZWN0b3JIYXNo
OjpoYXNoKToKKyAgICAgICAgKFdURjo6VmVjdG9ySGFzaDo6ZXF1YWwpOgorCisgICAgICAgIEFk
ZCB0cmFpdHMuIEVtcHR5IFZlY3RvciBpcyB0aGUgZW1wdHkgdmFsdWUuCisKIDIwMTktMTItMTgg
IFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCBidWlsZCBmaXggYWZ0ZXIgcjI1MzczMApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggNWJkN2FiNDNkZTAuLjZmYjJmNTQ1M2ExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY4Nyw2ICs2ODcsNyBAQAogCQlFM0NGNzY5
MDIxMTVENkJBMDA5MURFNDggLyogQ29tcGFjdFBvaW50ZXJUdXBsZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb21wYWN0UG9pbnRlclR1cGxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUzRTE1ODI1MUVBREE1M0MwMDRBMDc5RCAvKiBTeXN0ZW1GcmVlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbUZyZWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNFNjRGMEIyMjgxMzQyODAwMUU1NUI0IC8qIE5vbm1vdmFi
bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTm9ubW92YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlFNDE5RjJFNjIzQUI5RTIzMDBCMjYxMjkgLyogVmVjdG9ySGFzaC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWZWN0b3JIYXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUU0MzFDQzRBMjExODdBREIwMDBDOEEwNyAvKiBEaXNwYXRjaFNQSS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwYXRjaFNQSS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFNEEwQUQzNzFBOTYyNDU1MDA1MzZERjYgLyogV29ya1F1ZXVl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtRdWV1ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QTBBRDM4MUE5NjI0NTUwMDUzNkRGNiAv
KiBXb3JrUXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV29ya1F1ZXVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjE5LDYgKzEyMjAsNyBAQAogCQkJ
CUE4QTQ3MzZGMTUxQTgyNUIwMDQxMjNGRiAvKiBWYWx1ZUNoZWNrLmggKi8sCiAJCQkJN0NEMEQ1
QTcxRDU1MzIyQTAwMENDOUUxIC8qIFZhcmlhbnQuaCAqLywKIAkJCQlBOEE0NzM3MDE1MUE4MjVC
MDA0MTIzRkYgLyogVmVjdG9yLmggKi8sCisJCQkJRTQxOUYyRTYyM0FCOUUyMzAwQjI2MTI5IC8q
IFZlY3Rvckhhc2guaCAqLywKIAkJCQlBOEE0NzM3MTE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9y
VHJhaXRzLmggKi8sCiAJCQkJQThBNDczNzIxNTFBODI1QjAwNDEyM0ZGIC8qIFZNVGFncy5oICov
LAogCQkJCTBGNjZCMjg4MURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5jcHAgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NN
YWtlTGlzdHMudHh0CmluZGV4IGRhZTRhNzFiMjhkLi5iMjg3Zjc3ZTc4ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VM
aXN0cy50eHQKQEAgLTI2Nyw2ICsyNjcsNyBAQCBzZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAg
VmFsdWVDaGVjay5oCiAgICAgVmFyaWFudC5oCiAgICAgVmVjdG9yLmgKKyAgICBWZWN0b3JIYXNo
LmgKICAgICBWZWN0b3JUcmFpdHMuaAogICAgIFdURlNlbWFwaG9yZS5oCiAgICAgV2FsbFRpbWUu
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9W
ZWN0b3IuaAppbmRleCBiN2NkZTc4NGZmYS4uNTkzNTAzM2MyZmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL1ZlY3Rvci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCkBAIC02NjYs
NiArNjY2LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAg
ICBWZWN0b3IoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IEJhc2Uo
MCwgc3RkOjpudW1lcmljX2xpbWl0czxkZWNsdHlwZShtX3NpemUpPjo6bWF4KCkpCisgICAgewor
ICAgIH0KKwogICAgIH5WZWN0b3IoKQogICAgIHsKICAgICAgICAgaWYgKG1fc2l6ZSkKQEAgLTgy
OCw2ICs4MzMsOCBAQCBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBGdW5jdGlv
biwgdHlwZW5hbWUgUiA9IHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29mPE1hcEZ1bmN0aW9uKGNvbnN0
IFQmKT46OnR5cGU+IFZlY3RvcjxSPiBtYXAoTWFwRnVuY3Rpb24pIGNvbnN0OwogCisgICAgYm9v
bCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZSA9PSBzdGQ6
Om51bWVyaWNfbGltaXRzPGRlY2x0eXBlKG1fc2l6ZSk+OjptYXgoKTsgfQorCiBwcml2YXRlOgog
ICAgIHZvaWQgZXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5KTsKICAgICBUKiBl
eHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHksIFQqKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL1ZlY3Rvckhhc2guaCBiL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvckhhc2guaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmI1NDM0NGYyYTAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3JIYXNoLmgKQEAgLTAsMCArMSw2MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiSGFzaEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIkhhc2hUcmFpdHMu
aCIKKyNpbmNsdWRlICJIYXNoZXIuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KK3N0cnVjdCBWZWN0b3JIYXNoIHsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2
ZWN0b3IpCisgICAgeworICAgICAgICBJbnRlZ2VySGFzaGVyIGhhc2hlcjsKKyAgICAgICAgZm9y
IChjb25zdCBhdXRvJiB2YWx1ZSA6IHZlY3RvcikKKyAgICAgICAgICAgIGhhc2hlci5hZGQoRGVm
YXVsdEhhc2g8VD46Okhhc2g6Omhhc2godmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGhhc2hlci5o
YXNoKCk7CisgICAgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eT4mIGEsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIGIpCisgICAg
eworICAgICAgICByZXR1cm4gYSA9PSBiOworICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5Pgorc3RydWN0IEhhc2hUcmFpdHM8VmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5Pj4gOiBHZW5lcmljSGFzaFRyYWl0czxWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHk+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGVtcHR5VmFsdWVJc1pl
cm8gPSAhaW5saW5lQ2FwYWNpdHk7CisKKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVk
VmFsdWUoVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgc2xvdCkgeyBuZXcgKE5vdE51bGwsIHN0
ZDo6YWRkcmVzc29mKHNsb3QpKSBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+KFdURjo6SGFzaFRh
YmxlRGVsZXRlZFZhbHVlKTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZhbHVlKSB7IHJldHVybiB2YWx1ZS5pc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpOyB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHk+CitzdHJ1Y3QgRGVmYXVsdEhhc2g8VmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5Pj4geworICAgIHVzaW5nIEhhc2ggPSBWZWN0b3JIYXNoPFQsIGlubGluZUNhcGFjaXR5PjsK
K307CisKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCA2ZTNmNGIzZmQ0YS4uZDg0OGNiYzhjYzggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxv
ZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxOS0xMi0xOSAgQW50
dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgQWxsb3cgVmVjdG9ycyBh
cyBoYXNoIGtleXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwNTQ0OQorCisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmIEdhcmVuLgorCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmVjdG9yLmNwcDoKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlRFU1QpOgorCiAyMDE5LTEyLTE4ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVA
d2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjUzNjQ2Lgpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmVjdG9yLmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZlY3Rvci5jcHAKaW5kZXggMWRhMjljMTQ2M2Mu
LjBjZTc2ZGY4ODcxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9W
ZWN0b3IuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZlY3Rvci5jcHAK
QEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9ySGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtOTEyLDUgKzkxMywyMDEgQEAgVEVTVChXVEZf
VmVjdG9yLCBTdHJpbmdDb21wYXJpc29uKQogICAgIFZlY3RvcjxTdHJpbmc+IGIgPSB7eyAiYSIg
fX07CiAgICAgRVhQRUNUX1RSVUUoYSA9PSBiKTsKIH0KKworVEVTVChXVEZfVmVjdG9yLCBIYXNo
S2V5KQoreworICAgIFZlY3RvcjxpbnQ+IGEgPSB7IDEgfTsKKyAgICBWZWN0b3I8aW50PiBiID0g
eyAxLCAyIH07CisKKyAgICBIYXNoU2V0PFZlY3RvcjxpbnQ+PiBoYXNoOworCisgICAgRVhQRUNU
X0ZBTFNFKGhhc2guY29udGFpbnMoYSkpOworICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5z
KGIpKTsKKworICAgIGhhc2guYWRkKGEpOworCisgICAgRVhQRUNUX1RSVUUoaGFzaC5jb250YWlu
cyhhKSk7CisgICAgRVhQRUNUX0ZBTFNFKGhhc2guY29udGFpbnMoYikpOworCisgICAgaGFzaC5h
ZGQoYSk7CisKKyAgICBFWFBFQ1RfVFJVRShoYXNoLmNvbnRhaW5zKGEpKTsKKyAgICBFWFBFQ1Rf
RkFMU0UoaGFzaC5jb250YWlucyhiKSk7CisKKyAgICBoYXNoLmFkZChiKTsKKworICAgIEVYUEVD
VF9UUlVFKGhhc2guY29udGFpbnMoYSkpOworICAgIEVYUEVDVF9UUlVFKGhhc2guY29udGFpbnMo
YikpOworCisgICAgaGFzaC5yZW1vdmUoYSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250
YWlucyhhKSk7CisgICAgRVhQRUNUX1RSVUUoaGFzaC5jb250YWlucyhiKSk7CisKKyAgICBoYXNo
LnJlbW92ZShiKTsKKworICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5zKGEpKTsKKyAgICBF
WFBFQ1RfRkFMU0UoaGFzaC5jb250YWlucyhiKSk7CisgICAgRVhQRUNUX1RSVUUoaGFzaC5pc0Vt
cHR5KCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgKytpKSB7CisgICAgICAgIGZv
ciAoaW50IGogPSAwOyBqIDwgMTA7ICsraikgeworICAgICAgICAgICAgaGFzaC5hZGQoeyBpLCBq
IH0pOworICAgICAgICAgICAgaGFzaC5hZGQoeyBpLCBqLCBpIH0pOworICAgICAgICB9CisgICAg
fQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgKytpKSB7CisgICAgICAgIGZvciAoaW50
IGogPSAwOyBqIDwgMTA7ICsraikgeworICAgICAgICAgICAgRVhQRUNUX1RSVUUoaGFzaC5jb250
YWlucyh7IGksIGogfSkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUoaGFzaC5jb250YWlucyh7
IGksIGosIGkgfSkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGhhc2guY29udGFpbnMoeyAx
MCwgaiB9KSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250YWlucyh7IGksIGos
IDEwIH0pKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsg
KytpKSB7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMTA7ICsraikgeworICAgICAgICAg
ICAgaGFzaC5yZW1vdmUoeyBpLCBqIH0pOworICAgICAgICAgICAgaGFzaC5yZW1vdmUoeyBpLCBq
LCBpIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsg
KytpKSB7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMTA7ICsraikgeworICAgICAgICAg
ICAgRVhQRUNUX0VRKGhhc2guY29udGFpbnMoeyBpLCBqIH0pLCBpID4gNCk7CisgICAgICAgICAg
ICBFWFBFQ1RfRVEoaGFzaC5jb250YWlucyh7IGksIGosIGkgfSksIGkgPiA0KTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGZvciAoaW50IGkgPSA1OyBpIDwgMTA7ICsraSkgeworICAgICAgICBm
b3IgKGludCBqID0gMDsgaiA8IDEwOyArK2opIHsKKyAgICAgICAgICAgIGhhc2gucmVtb3ZlKHsg
aSwgaiB9KTsKKyAgICAgICAgICAgIGhhc2gucmVtb3ZlKHsgaSwgaiwgaSB9KTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIEVYUEVDVF9UUlVFKGhhc2guaXNFbXB0eSgpKTsKK30KKworVEVTVChX
VEZfVmVjdG9yLCBIYXNoS2V5SW5saW5lQ2FwYWNpdHkpCit7CisgICAgVmVjdG9yPGludCwgMT4g
YSA9IHsgMSB9OworICAgIFZlY3RvcjxpbnQsIDE+IGIgPSB7IDEsIDIgfTsKKworICAgIEhhc2hT
ZXQ8VmVjdG9yPGludCwgMT4+IGhhc2g7CisKKyAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250YWlu
cyhhKSk7CisgICAgRVhQRUNUX0ZBTFNFKGhhc2guY29udGFpbnMoYikpOworCisgICAgaGFzaC5h
ZGQoYSk7CisKKyAgICBFWFBFQ1RfVFJVRShoYXNoLmNvbnRhaW5zKGEpKTsKKyAgICBFWFBFQ1Rf
RkFMU0UoaGFzaC5jb250YWlucyhiKSk7CisKKyAgICBoYXNoLmFkZChhKTsKKworICAgIEVYUEVD
VF9UUlVFKGhhc2guY29udGFpbnMoYSkpOworICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5z
KGIpKTsKKworICAgIGhhc2guYWRkKGIpOworCisgICAgRVhQRUNUX1RSVUUoaGFzaC5jb250YWlu
cyhhKSk7CisgICAgRVhQRUNUX1RSVUUoaGFzaC5jb250YWlucyhiKSk7CisKKyAgICBoYXNoLnJl
bW92ZShhKTsKKworICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5zKGEpKTsKKyAgICBFWFBF
Q1RfVFJVRShoYXNoLmNvbnRhaW5zKGIpKTsKKworICAgIGhhc2gucmVtb3ZlKGIpOworCisgICAg
RVhQRUNUX0ZBTFNFKGhhc2guY29udGFpbnMoYSkpOworICAgIEVYUEVDVF9GQUxTRShoYXNoLmNv
bnRhaW5zKGIpKTsKKyAgICBFWFBFQ1RfVFJVRShoYXNoLmlzRW1wdHkoKSk7Cit9CisKK1RFU1Qo
V1RGX1ZlY3RvciwgSGFzaEtleVN0cmluZykKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBhID0geyAi
YSIgfTsKKyAgICBWZWN0b3I8U3RyaW5nPiBiID0geyAiYSIsICJiIiB9OworCisgICAgSGFzaFNl
dDxWZWN0b3I8U3RyaW5nPj4gaGFzaDsKKworICAgIEVYUEVDVF9GQUxTRShoYXNoLmNvbnRhaW5z
KGEpKTsKKyAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250YWlucyhiKSk7CisKKyAgICBoYXNoLmFk
ZChhKTsKKworICAgIEVYUEVDVF9UUlVFKGhhc2guY29udGFpbnMoYSkpOworICAgIEVYUEVDVF9G
QUxTRShoYXNoLmNvbnRhaW5zKGIpKTsKKworICAgIGhhc2guYWRkKGEpOworCisgICAgRVhQRUNU
X1RSVUUoaGFzaC5jb250YWlucyhhKSk7CisgICAgRVhQRUNUX0ZBTFNFKGhhc2guY29udGFpbnMo
YikpOworCisgICAgaGFzaC5hZGQoYik7CisKKyAgICBFWFBFQ1RfVFJVRShoYXNoLmNvbnRhaW5z
KGEpKTsKKyAgICBFWFBFQ1RfVFJVRShoYXNoLmNvbnRhaW5zKGIpKTsKKworICAgIGhhc2gucmVt
b3ZlKGEpOworCisgICAgRVhQRUNUX0ZBTFNFKGhhc2guY29udGFpbnMoYSkpOworICAgIEVYUEVD
VF9UUlVFKGhhc2guY29udGFpbnMoYikpOworCisgICAgaGFzaC5yZW1vdmUoYik7CisKKyAgICBF
WFBFQ1RfRkFMU0UoaGFzaC5jb250YWlucyhhKSk7CisgICAgRVhQRUNUX0ZBTFNFKGhhc2guY29u
dGFpbnMoYikpOworCisgICAgZm9yIChhdXRvIGkgOiB7ICJhIiwgImIiLCAiYyIsICJkIiwgImUi
IH0pIHsKKyAgICAgICAgZm9yIChhdXRvIGogOiB7ICJhIiwgImIiLCAiYyIsICJkIiwgImUiIH0p
IHsKKyAgICAgICAgICAgIGhhc2guYWRkKHsgaSwgaiB9KTsKKyAgICAgICAgICAgIGhhc2guYWRk
KHsgaSwgaiwgaSwgaiB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byBpIDog
eyAiYSIsICJiIiwgImMiLCAiZCIsICJlIiB9KSB7CisgICAgICAgIGZvciAoYXV0byBqIDogeyAi
YSIsICJiIiwgImMiLCAiZCIsICJlIiB9KSB7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShoYXNo
LmNvbnRhaW5zKHsgaSwgaiB9KSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShoYXNoLmNvbnRh
aW5zKHsgaSwgaiwgaSwgaiB9KSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UoaGFzaC5jb250
YWlucyh7IGksIGosIGkgfSkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGhhc2guY29udGFp
bnMoeyAieCIsIGogfSkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGhhc2guY29udGFpbnMo
eyBpLCBqLCAieCIsIGogfSkpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChhdXRvIGkg
OiB7ICJkIiwgImUiIH0pIHsKKyAgICAgICAgZm9yIChhdXRvIGogOiB7ICJhIiwgImIiLCAiYyIs
ICJkIiwgImUiIH0pIHsKKyAgICAgICAgICAgIGhhc2gucmVtb3ZlKHsgaSwgaiB9KTsKKyAgICAg
ICAgICAgIGhhc2gucmVtb3ZlKHsgaSwgaiwgaSwgaiB9KTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZvciAoYXV0byBpIDogeyAiZCIsICJlIiB9KSB7CisgICAgICAgIGZvciAoYXV0byBqIDog
eyAiYSIsICJiIiwgImMiLCAiZCIsICJlIiB9KSB7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uo
aGFzaC5jb250YWlucyh7IGksIGogfSkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGhhc2gu
Y29udGFpbnMoeyBpLCBqLCBpLCBqIH0pKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAo
YXV0byBpIDogeyAiYSIsICJiIiwgImMiIH0pIHsKKyAgICAgICAgZm9yIChhdXRvIGogOiB7ICJh
IiwgImIiLCAiYyIsICJkIiwgImUiIH0pIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGhhc2gu
Y29udGFpbnMoeyBpLCBqIH0pKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGhhc2guY29udGFp
bnMoeyBpLCBqLCBpLCBqIH0pKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byBp
IDogeyAiYSIsICJiIiwgImMiIH0pIHsKKyAgICAgICAgZm9yIChhdXRvIGogOiB7ICJhIiwgImIi
LCAiYyIsICJkIiwgImUiIH0pIHsKKyAgICAgICAgICAgIGhhc2gucmVtb3ZlKHsgaSwgaiB9KTsK
KyAgICAgICAgICAgIGhhc2gucmVtb3ZlKHsgaSwgaiwgaSwgaiB9KTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIEVYUEVDVF9UUlVFKGhhc2guaXNFbXB0eSgpKTsKK30KICAgICAKIH0gLy8gbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
      

    </bug>

</bugzilla>