<?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>65547</bug_id>
          
          <creation_ts>2011-08-02 09:48:21 -0700</creation_ts>
          <short_desc>IndexedDB: Fix index data invalidation bugs.</short_desc>
          <delta_ts>2011-08-04 02:32:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Hans Wennborg">hans</reporter>
          <assigned_to name="Hans Wennborg">hans</assigned_to>
          <cc>dgrogan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>445321</commentid>
    <comment_count>0</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-08-02 09:48:21 -0700</bug_when>
    <thetext>IndexedDB: Fix index data invalidation bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445326</commentid>
    <comment_count>1</comment_count>
      <attachid>102662</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-08-02 09:57:24 -0700</bug_when>
    <thetext>Created attachment 102662
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445327</commentid>
    <comment_count>2</comment_count>
      <attachid>102662</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-08-02 10:01:27 -0700</bug_when>
    <thetext>Comment on attachment 102662
Patch

Oops, forgot to upload the expectations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445337</commentid>
    <comment_count>3</comment_count>
      <attachid>102665</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-08-02 10:11:10 -0700</bug_when>
    <thetext>Created attachment 102665
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445339</commentid>
    <comment_count>4</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-08-02 10:12:32 -0700</bug_when>
    <thetext>David: would you like to do an informal review, and then I&apos;ll find someone who can properly review it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445733</commentid>
    <comment_count>5</comment_count>
      <attachid>102665</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-08-02 23:44:24 -0700</bug_when>
    <thetext>Comment on attachment 102665
Patch

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

&gt; LayoutTests/storage/indexeddb/index-unique.html:76
&gt; +    shouldBe(&quot;event.target.errorCode&quot;, &quot;webkitIDBDatabaseException.UNKNOWN_ERR&quot;);

We throw UNKNOWN_ERR?  Is that to spec or just what we currently throw?

&gt; LayoutTests/storage/indexeddb/index-unique.html:111
&gt; +    request = evalAndLog(&quot;transaction.objectStore(&apos;store&apos;).put({x: 1}, &apos;bar&apos;)&quot;);

This is the first operation whose behavior is altered by this patch, correct?

&gt; LayoutTests/storage/indexeddb/index-unique.html:130
&gt; +    request = evalAndLog(&quot;transaction.objectStore(&apos;store&apos;).put({x: 1}, &apos;baz&apos;)&quot;);

Should this should test with &apos;bar&apos; instead of &apos;baz&apos;?  It was the primary key whose ExistsEntryKey was erroneously left around, wasn&apos;t it?

&gt; Source/WebCore/storage/IDBLevelDBBackingStore.cpp:-804
&gt; -PassRefPtr&lt;IDBKey&gt; IDBLevelDBBackingStore::getPrimaryKeyViaIndex(int64_t databaseId, int64_t objectStoreId, int64_t indexId, const IDBKey&amp; key)

It seems that nothing was wrong with this function, it was just refactored so that keyExistsInIndex could use most of its functionality.  Accurate?

&gt; Source/WebCore/storage/IDBLevelDBBackingStore.cpp:824
&gt;          if (!p)

Is this expected to be triggered, or does it indicate corruption?

&gt; Source/WebCore/storage/IDBLevelDBBackingStore.cpp:830
&gt; +            transaction-&gt;remove(it-&gt;key());

We end up with stale index data when a (primary key, value) pair is overwritten?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445778</commentid>
    <comment_count>6</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-08-03 02:39:55 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 102665 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=102665&amp;action=review
&gt; 
&gt; &gt; LayoutTests/storage/indexeddb/index-unique.html:76
&gt; &gt; +    shouldBe(&quot;event.target.errorCode&quot;, &quot;webkitIDBDatabaseException.UNKNOWN_ERR&quot;);
&gt; 
&gt; We throw UNKNOWN_ERR?  Is that to spec or just what we currently throw?
It&apos;s what we currently throw. I now see that the specc says it should be CONSTRAINT_ERR, so let&apos;s fix that while we&apos;re at it.

&gt; &gt; LayoutTests/storage/indexeddb/index-unique.html:111
&gt; &gt; +    request = evalAndLog(&quot;transaction.objectStore(&apos;store&apos;).put({x: 1}, &apos;bar&apos;)&quot;);
&gt; 
&gt; This is the first operation whose behavior is altered by this patch, correct?
Exactly.

&gt; 
&gt; &gt; LayoutTests/storage/indexeddb/index-unique.html:130
&gt; &gt; +    request = evalAndLog(&quot;transaction.objectStore(&apos;store&apos;).put({x: 1}, &apos;baz&apos;)&quot;);
&gt; 
&gt; Should this should test with &apos;bar&apos; instead of &apos;baz&apos;?  It was the primary key whose ExistsEntryKey was erroneously left around, wasn&apos;t it?
The ExistsEntryKey was erroneously left around, which meant that the x=1 key in the index, which pointed to that primary key, was considered &quot;active&quot;.

The point is that we can add a value with x = 1 again.. the primary key of the new entry is not important.

&gt; 
&gt; &gt; Source/WebCore/storage/IDBLevelDBBackingStore.cpp:-804
&gt; &gt; -PassRefPtr&lt;IDBKey&gt; IDBLevelDBBackingStore::getPrimaryKeyViaIndex(int64_t databaseId, int64_t objectStoreId, int64_t indexId, const IDBKey&amp; key)
&gt; 
&gt; It seems that nothing was wrong with this function, it was just refactored so that keyExistsInIndex could use most of its functionality.  Accurate?
Yes, I just factored out all the stuff except the decoding of the primary key into a new function. The diff makes it harder to read than it really is.


&gt; 
&gt; &gt; Source/WebCore/storage/IDBLevelDBBackingStore.cpp:824
&gt; &gt;          if (!p)
&gt; 
&gt; Is this expected to be triggered, or does it indicate corruption?
Right, this is not expected to be triggered.

&gt; 
&gt; &gt; Source/WebCore/storage/IDBLevelDBBackingStore.cpp:830
&gt; &gt; +            transaction-&gt;remove(it-&gt;key());
&gt; 
&gt; We end up with stale index data when a (primary key, value) pair is overwritten?

Yes, either (primary key, value) is overwritten (and thus gets a new version number), or the (primary key, value) is removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445780</commentid>
    <comment_count>7</comment_count>
      <attachid>102758</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-08-03 02:43:21 -0700</bug_when>
    <thetext>Created attachment 102758
Patch

Use CONSTRAINT_ERR for uniqueness constraint violation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445783</commentid>
    <comment_count>8</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-08-03 03:06:11 -0700</bug_when>
    <thetext>Tony, would you like to take a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445903</commentid>
    <comment_count>9</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-08-03 09:23:37 -0700</bug_when>
    <thetext>LGTM


(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (From update of attachment 102665 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=102665&amp;action=review
&gt; &gt; &gt; LayoutTests/storage/indexeddb/index-unique.html:130
&gt; &gt; &gt; +    request = evalAndLog(&quot;transaction.objectStore(&apos;store&apos;).put({x: 1}, &apos;baz&apos;)&quot;);
&gt; &gt; 
&gt; &gt; Should this should test with &apos;bar&apos; instead of &apos;baz&apos;?  It was the primary key whose ExistsEntryKey was erroneously left around, wasn&apos;t it?
&gt; The ExistsEntryKey was erroneously left around, which meant that the x=1 key in the index, which pointed to that primary key, was considered &quot;active&quot;.
&gt; 
&gt; The point is that we can add a value with x = 1 again.. the primary key of the new entry is not important.

Ah, ok.  I can see that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445954</commentid>
    <comment_count>10</comment_count>
      <attachid>102758</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-08-03 11:11:10 -0700</bug_when>
    <thetext>Comment on attachment 102758
Patch

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

&gt; Source/WebCore/storage/IDBLevelDBBackingStore.cpp:808
&gt; +static bool findKeyInIndex(LevelDBTransaction* transaction, int64_t databaseId, int64_t objectStoreId, int64_t indexId, const IDBKey&amp; key, Vector&lt;char&gt;* foundEncodedPrimaryKey)

Nit: In WebKit, it&apos;s more common to use pass by reference for out variables.  I would change |foundEncodedPrimaryKey| to be consistent with the rest of the file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446408</commentid>
    <comment_count>11</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-08-04 02:27:58 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 102758 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=102758&amp;action=review

Thanks Tony!

&gt; 
&gt; &gt; Source/WebCore/storage/IDBLevelDBBackingStore.cpp:808
&gt; &gt; +static bool findKeyInIndex(LevelDBTransaction* transaction, int64_t databaseId, int64_t objectStoreId, int64_t indexId, const IDBKey&amp; key, Vector&lt;char&gt;* foundEncodedPrimaryKey)
&gt; 
&gt; Nit: In WebKit, it&apos;s more common to use pass by reference for out variables.  I would change |foundEncodedPrimaryKey| to be consistent with the rest of the file.
Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446410</commentid>
    <comment_count>12</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-08-04 02:32:44 -0700</bug_when>
    <thetext>Committed r92364: &lt;http://trac.webkit.org/changeset/92364&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102662</attachid>
            <date>2011-08-02 09:57:24 -0700</date>
            <delta_ts>2011-08-02 10:11:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65547-20110802175723.patch</filename>
            <type>text/plain</type>
            <size>11504</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTIxNjkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBjMWM3MzRjMDAwNGI4YTA2MTcyYjNl
OWEwNTYyYTFlY2FiYmViNGVhLi42NThiNTU3ZTNkNjhlOTkxZjQ0MTBhZTQ0NjQxYTRkYTJlMGUx
NGRmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDgtMDIgIEhhbnMgV2VubmJvcmcgIDxo
YW5zQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IEZpeCBpbmRleCBkYXRhIGlu
dmFsaWRhdGlvbiBidWdzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjU1NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgbGF5b3V0IHRlc3QgdG8gdmVyaWZ5IHRoYXQgdXBkYXRlIG9iamVjdCBzdG9y
ZSBkYXRhIGNhdXNlcyBvbGQKKyAgICAgICAgaW5kZXggZGF0YSB0byBiZSBpbnZhbGlkYXRlZC4K
KworICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LXVuaXF1ZS5odG1sOiBBZGRlZC4K
KwogMjAxMS0wOC0wMSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5jb20+CiAKICAg
ICAgICAgV2ViIEluc3BlY3RvcjogYnV0dG9uICsgIk5ldyBzdHlsZSBydWxlIgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtdW5pcXVlLmh0bWwgYi9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC11bmlxdWUuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
MzA0MTBkNjhkZTg4MGNlNWVjY2JlOWExZWFiNWQyYzYxZDE2ZDUzCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtdW5pcXVlLmh0bWwKQEAgLTAs
MCArMSwxNDcgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0IGZlYXR1cmVzIG9mIElu
ZGV4ZWREQidzIHVuaXF1ZSBpbmRpY2VzLiIpOworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKK2Z1bmN0
aW9uIHRlc3QoKQoreworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJ3ZWJraXRJbmRleGVkREIu
b3BlbignaW5kZXgtdW5pcXVlJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IHNldFZlcnNp
b247CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisK
K2Z1bmN0aW9uIHNldFZlcnNpb24oKQoreworICAgIGRiID0gZXZhbEFuZExvZygiZGIgPSBldmVu
dC50YXJnZXQucmVzdWx0Iik7CisKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiZGIuc2V0VmVy
c2lvbignbmV3IHZlcnNpb24nKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZGVsZXRlRXhp
c3Rpbmc7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9
CisKK2Z1bmN0aW9uIGRlbGV0ZUV4aXN0aW5nKCkKK3sKKyAgICBkZWJ1ZygiZGVsZXRlRXhpc3Rp
bmcoKToiKTsKKyAgICB2YXIgdHJhbnMgPSBldmFsQW5kTG9nKCJ0cmFucyA9IGV2ZW50LnRhcmdl
dC5yZXN1bHQiKTsKKyAgICBzaG91bGRCZVRydWUoInRyYW5zICE9PSBudWxsIik7CisgICAgdHJh
bnMub25hYm9ydCA9IHVuZXhwZWN0ZWRBYm9ydENhbGxiYWNrOworICAgIHRyYW5zLm9uY29tcGxl
dGUgPSBzZXRWZXJzaW9uQ29tcGxldGVkOworCisgICAgZGVsZXRlQWxsT2JqZWN0U3RvcmVzKGRi
KTsKKworICAgIHdpbmRvdy5zdG9yZSA9IGV2YWxBbmRMb2coImRiLmNyZWF0ZU9iamVjdFN0b3Jl
KCdzdG9yZScpIik7CisgICAgd2luZG93LmluZGV4T2JqZWN0ID0gZXZhbEFuZExvZygic3RvcmUu
Y3JlYXRlSW5kZXgoJ2luZGV4JywgJ3gnLCB7dW5pcXVlOiB0cnVlfSkiKTsKKworICAgIC8vIExl
dCBzZXRWZXJzaW9uIHRyYW5zYWN0aW9uIGNvbXBsZXRlLgorfQorCitmdW5jdGlvbiBzZXRWZXJz
aW9uQ29tcGxldGVkKCkKK3sKKyAgICBkZWJ1Zygic2V0VmVyc2lvbkNvbXBsZXRlZCgpOiIpOwor
ICAgIHdpbmRvdy50cmFuc2FjdGlvbiA9IGV2YWxBbmRMb2coInRyYW5zYWN0aW9uID0gZGIudHJh
bnNhY3Rpb24oW10sIHdlYmtpdElEQlRyYW5zYWN0aW9uLlJFQURfV1JJVEUpIik7CisKKyAgICBy
ZXF1ZXN0ID0gZXZhbEFuZExvZygidHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlJykucHV0
KHt4OiAxfSwgJ2ZvbycpIik7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9y
Q2FsbGJhY2s7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBhZGRNb3JlRGF0YTsKK30KKworZnVu
Y3Rpb24gYWRkTW9yZURhdGEoKQoreworICAgIGRlYnVnKCJhZGRNb3JlRGF0YSgpOiIpOworCisg
ICAgLy8gVGhlIHggdmFsdWUgdmlvbGF0ZXMgdGhlIHVuaXF1ZW5lc3MgY29uc3RyYWludCBvZiB0
aGUgaW5kZXguCisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coInRyYW5zYWN0aW9uLm9iamVjdFN0
b3JlKCdzdG9yZScpLnB1dCh7eDogMX0sICdiYXInKSIpOworICAgIHJlcXVlc3Qub25lcnJvciA9
IGFkZE1vcmVEYXRhRmFpbGVkOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gdW5leHBlY3RlZFN1
Y2Nlc3NDYWxsYmFjazsKK30KKworZnVuY3Rpb24gYWRkTW9yZURhdGFGYWlsZWQoKQoreworICAg
IGRlYnVnKCJhZGRNb3JlRGF0YUZhaWxlZCgpOiIpOworCisgICAgLy8gRG9uJ3QgYWJvcnQgdGhl
IHRyYW5zYWN0aW9uLgorICAgIGV2YWxBbmRMb2coImV2ZW50LnByZXZlbnREZWZhdWx0KCkiKTsK
KworICAgIHNob3VsZEJlKCJldmVudC50YXJnZXQuZXJyb3JDb2RlIiwgIndlYmtpdElEQkRhdGFi
YXNlRXhjZXB0aW9uLlVOS05PV05fRVJSIik7CisKKyAgICAvLyBVcGRhdGUgdGhlICdmb28nIGVu
dHJ5IGluIG9iamVjdCBzdG9yZSwgY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHguCisgICAgcmVxdWVz
dCA9IGV2YWxBbmRMb2coInRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZScpLnB1dCh7eDog
MH0sICdmb28nKSIpOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxi
YWNrOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gY2hhbmdlRGF0YVN1Y2Nlc3M7Cit9CisKK2Z1
bmN0aW9uIGNoYW5nZURhdGFTdWNjZXNzKCkKK3sKKyAgICBkZWJ1ZygiY2hhbmdlRGF0YVN1Y2Nl
c3MoKToiKTsKKworICAgIC8vIEFuIGluZGV4IGN1cnNvciBzdGFydGluZyBhdCAxIHNob3VsZCBu
b3QgZmluZCBhbnl0aGluZy4KKyAgICB2YXIgcmVxdWVzdCA9IGV2YWxBbmRMb2coInRyYW5zYWN0
aW9uLm9iamVjdFN0b3JlKCdzdG9yZScpLmluZGV4KCdpbmRleCcpLm9wZW5DdXJzb3Iod2Via2l0
SURCS2V5UmFuZ2UubG93ZXJCb3VuZCgxKSkiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGN1
cnNvclN1Y2Nlc3M7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJh
Y2s7Cit9CisKK2Z1bmN0aW9uIGN1cnNvclN1Y2Nlc3MoKQoreworICAgIGRlYnVnKCJjdXJzb3JT
dWNjZXNzKCk6Iik7CisgICAgc2hvdWxkQmUoImV2ZW50LnRhcmdldC5yZXN1bHQiLCAibnVsbCIp
OworCisgICAgLy8gQSBrZXkgY3Vyc29yIHN0YXJ0aW5nIGF0IDEgc2hvdWxkIG5vdCBmaW5kIGFu
eXRoaW5nLgorICAgIHZhciByZXF1ZXN0ID0gZXZhbEFuZExvZygidHJhbnNhY3Rpb24ub2JqZWN0
U3RvcmUoJ3N0b3JlJykuaW5kZXgoJ2luZGV4Jykub3BlbktleUN1cnNvcih3ZWJraXRJREJLZXlS
YW5nZS5sb3dlckJvdW5kKDEpKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0ga2V5Q3Vyc29y
U3VjY2VzczsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsK
K30KKworZnVuY3Rpb24ga2V5Q3Vyc29yU3VjY2VzcygpCit7CisgICAgZGVidWcoImtleUN1cnNv
clN1Y2Nlc3MoKToiKTsKKyAgICBzaG91bGRCZSgiZXZlbnQudGFyZ2V0LnJlc3VsdCIsICJudWxs
Iik7CisKKyAgICAvLyBOb3cgd2Ugc2hvdWxkIGJlIGFibGUgdG8gYWRkIGEgdmFsdWUgd2l0aCB4
OiAxLgorICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJ0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgn
c3RvcmUnKS5wdXQoe3g6IDF9LCAnYmFyJykiKTsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4
cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGFkZE1vcmVEYXRh
U3VjY2VzOworfQorCitmdW5jdGlvbiBhZGRNb3JlRGF0YVN1Y2NlcygpCit7CisgICAgZGVidWco
ImFkZE1vcmVEYXRhU3VjY2VzKCk6Iik7CisKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygidHJh
bnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlJykuZGVsZXRlKCdiYXInKSIpOworICAgIHJlcXVl
c3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworICAgIHJlcXVlc3Qub25zdWNj
ZXNzID0gZGVsZXRlU3VjY2VzczsKK30KKworZnVuY3Rpb24gZGVsZXRlU3VjY2VzcygpCit7Cisg
ICAgZGVidWcoImRlbGV0ZVN1Y2Nlc3MoKToiKTsKKworICAgIC8vIE5vdyB3ZSBzaG91bGQgYmUg
YWJsZSB0byBhZGQgYSB2YWx1ZSB3aXRoIHg6IDEgYWdhaW4uCisgICAgcmVxdWVzdCA9IGV2YWxB
bmRMb2coInRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZScpLnB1dCh7eDogMX0sICdiYXon
KSIpOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworICAg
IHJlcXVlc3Qub25zdWNjZXNzID0gZmluYWxBZGRTdWNjZXNzOworfQorCitmdW5jdGlvbiBmaW5h
bEFkZFN1Y2Nlc3MoKSB7CisgICAgZGVidWcoImZpbmFsQWRkU3VjY2VzcygpOiIpOworICAgIGRv
bmUoKTsKK30KKwordGVzdCgpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiMzQ4NGIyZWI5Mzll
ZmRiNjc0NmExNzFmYTAwYWNiNzEyNzE4MGUwLi5iODE2NTk4MGYyZThlNWE1NWI0MDljYmRlZjRm
MjM1NzU4NGQ2ZWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDgtMDIgIEhh
bnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IEZp
eCBpbmRleCBkYXRhIGludmFsaWRhdGlvbiBidWdzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU1NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgZnVuY3Rpb24gdGhhdCBjaGVja3Mgd2hldGhlciBh
IGtleSBleGlzdHMgaW4gYW4gaW5kZXggZmFpbGVkCisgICAgICAgIHRvIGNoZWNrIHdoZXRoZXIg
dGhhdCBrZXkgd2FzIHN0aWxsIHZhbGlkIG9yIG5vdC4KKworICAgICAgICBEZWxldGluZyBhIHJl
Y29yZCBmcm9tIGFuIG9iamVjdCBzdG9yZSBtdXN0IGFsc28gZGVsZXRlIGl0cyBleGlzdHMKKyAg
ICAgICAgZW50cnksIHRodXMgaW52YWxpZGF0aW5nIGluZGV4IGtleXMgcG9pbnRpbmcgdG8gdGhh
dCByZWNvcmQuCisKKyAgICAgICAgVGVzdDogc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtdW5pcXVl
Lmh0bWwKKworICAgICAgICAqIHN0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9y
ZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kS2V5SW5JbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJzb3JPcHRpb25zOjpJbmRleEtleUN1cnNvckltcGw6
OmxvYWRDdXJyZW50Um93KToKKwogMjAxMS0wOC0wMiAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFu
QGdvb2dsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogYXJyb3cgaXMgYSBwYWluIHRv
IGNsaWNrIGluIGNvbnNvbGUuIERyaXZlLWJ5IHNlbGVjdGlvbiByZXNldCBmaXguCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAppbmRleCBi
MGM1YmUwZmQ4MWIyZTg1Yjc5YmJlMTM3NGUyZWMwNTRlY2VmMTZmLi5mM2Y2OTU1YTVjN2NjZDkw
M2JmYzgxODViMmUzMWQ2N2Q5ZmUyZjk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTUxMiw4ICs1MTIsMTIgQEAgdm9pZCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3QKIHsKICAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwog
ICAgIGNvbnN0IExldmVsREJSZWNvcmRJZGVudGlmaWVyKiBsZXZlbERCUmVjb3JkSWRlbnRpZmll
ciA9IHN0YXRpY19jYXN0PGNvbnN0IExldmVsREJSZWNvcmRJZGVudGlmaWVyKj4ocmVjb3JkSWRl
bnRpZmllcik7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IE9iamVjdFN0b3JlRGF0YUtl
eTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGxldmVsREJSZWNvcmRJZGVudGlm
aWVyLT5wcmltYXJ5S2V5KCkpOwotICAgIG1fY3VycmVudFRyYW5zYWN0aW9uLT5yZW1vdmUoa2V5
KTsKKworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBvYmplY3RTdG9yZURhdGFLZXkgPSBPYmplY3RT
dG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBsZXZlbERCUmVj
b3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKKyAgICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+
cmVtb3ZlKG9iamVjdFN0b3JlRGF0YUtleSk7CisKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gZXhp
c3RzRW50cnlLZXkgPSBFeGlzdHNFbnRyeUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOworICAgIG1fY3Vy
cmVudFRyYW5zYWN0aW9uLT5yZW1vdmUoZXhpc3RzRW50cnlLZXkpOwogfQogCiBkb3VibGUgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6bmV4dEF1dG9JbmNyZW1lbnROdW1iZXIoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCkBAIC04MDEsNTIgKzgwNSw2MCBAQCBzdGF0
aWMgYm9vbCB2ZXJzaW9uRXhpc3RzKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaQogICAgIHJldHVybiBkZWNvZGVJbnQoZGF0YS5iZWdpbigpLCBk
YXRhLmVuZCgpKSA9PSB2ZXJzaW9uOwogfQogCi1QYXNzUmVmUHRyPElEQktleT4gSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5
KQorc3RhdGljIGJvb2wgZmluZEtleUluSW5kZXgoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXksIFZlY3RvcjxjaGFyPiogZm91bmRFbmNvZGVkUHJp
bWFyeUtleSkKIHsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIEFTU0VS
VChmb3VuZEVuY29kZWRQcmltYXJ5S2V5LT5pc0VtcHR5KCkpOworCiAgICAgY29uc3QgVmVjdG9y
PGNoYXI+IGxldmVsZGJLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBpbmRleElkLCBrZXksIDApOwotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+
IGl0ID0gbV9jdXJyZW50VHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgT3duUHRy
PExldmVsREJJdGVyYXRvcj4gaXQgPSB0cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKICAg
ICBpdC0+c2VlayhsZXZlbGRiS2V5KTsKIAogICAgIGZvciAoOzspIHsKICAgICAgICAgaWYgKCFp
dC0+aXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIGlmIChjb21wYXJlSW5kZXhLZXlzKGl0LT5rZXkoKSwgbGV2ZWxkYktl
eSkgPiAwKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAgICAgaW50NjRfdCB2ZXJzaW9uOwogICAgICAgICBjb25zdCBjaGFyKiBwID0gZGVj
b2RlVmFySW50KGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpLCB2ZXJzaW9u
KTsKICAgICAgICAgaWYgKCFwKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIFZlY3Rv
cjxjaGFyPiBlbmNvZGVkUHJpbWFyeUtleTsKLSAgICAgICAgZW5jb2RlZFByaW1hcnlLZXkuYXBw
ZW5kKHAsIGl0LT52YWx1ZSgpLmVuZCgpIC0gcCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGZvdW5kRW5jb2RlZFByaW1hcnlLZXktPmFwcGVuZChwLCBpdC0+dmFsdWUoKS5l
bmQoKSAtIHApOwogCi0gICAgICAgIGlmICghdmVyc2lvbkV4aXN0cyhtX2N1cnJlbnRUcmFuc2Fj
dGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgdmVyc2lvbiwgZW5jb2RlZFBy
aW1hcnlLZXkpKSB7CisgICAgICAgIGlmICghdmVyc2lvbkV4aXN0cyh0cmFuc2FjdGlvbiwgZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgdmVyc2lvbiwgKmZvdW5kRW5jb2RlZFByaW1hcnlLZXkp
KSB7CiAgICAgICAgICAgICAvLyBEZWxldGUgc3RhbGUgaW5kZXggZGF0YSBlbnRyeSBhbmQgY29u
dGludWUuCi0gICAgICAgICAgICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKGl0LT5rZXko
KSk7CisgICAgICAgICAgICB0cmFuc2FjdGlvbi0+cmVtb3ZlKGl0LT5rZXkoKSk7CiAgICAgICAg
ICAgICBpdC0+bmV4dCgpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8SURCS2V5PiBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBr
ZXkpCit7CisgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKworICAgIFZlY3Rvcjxj
aGFyPiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5OworICAgIGlmIChmaW5kS2V5SW5JbmRleChtX2N1
cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJ
ZCwga2V5LCAmZm91bmRFbmNvZGVkUHJpbWFyeUtleSkpIHsKICAgICAgICAgUmVmUHRyPElEQktl
eT4gcHJpbWFyeUtleTsKLSAgICAgICAgZGVjb2RlSURCS2V5KGVuY29kZWRQcmltYXJ5S2V5LmJl
Z2luKCksIGVuY29kZWRQcmltYXJ5S2V5LmVuZCgpLCBwcmltYXJ5S2V5KTsKKyAgICAgICAgZGVj
b2RlSURCS2V5KGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuYmVnaW4oKSwgZm91bmRFbmNvZGVkUHJp
bWFyeUtleS5lbmQoKSwgcHJpbWFyeUtleSk7CiAgICAgICAgIHJldHVybiBwcmltYXJ5S2V5LnJl
bGVhc2UoKTsKICAgICB9CisKKyAgICByZXR1cm4gMDsKIH0KIAogYm9vbCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQogewogICAg
IEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IGxl
dmVsREJLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBpbmRleElkLCBrZXksIDApOwotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9j
dXJyZW50VHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CiAKLSAgICBib29sIGZvdW5kID0g
ZmFsc2U7Ci0KLSAgICBpdC0+c2VlayhsZXZlbERCS2V5KTsKLSAgICBpZiAoaXQtPmlzVmFsaWQo
KSAmJiAhY29tcGFyZUluZGV4S2V5cyhpdC0+a2V5KCksIGxldmVsREJLZXkpKQotICAgICAgICBm
b3VuZCA9IHRydWU7CisgICAgVmVjdG9yPGNoYXI+IGZvdW5kRW5jb2RlZFByaW1hcnlLZXk7Cisg
ICAgaWYgKGZpbmRLZXlJbkluZGV4KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXksICZmb3VuZEVuY29kZWRQcmltYXJ5S2V5
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICByZXR1cm4gZm91bmQ7CisgICAgcmV0dXJu
IGZhbHNlOwogfQogCiBuYW1lc3BhY2UgewpAQCAtMTA4OCw3ICsxMTAwLDcgQEAgYm9vbCBJbmRl
eEtleUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKICAgICBpZiAoIXQpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGlmIChvYmplY3RTdG9yZURhdGFWZXJzaW9uICE9IGluZGV4RGF0
YVZlcnNpb24pIHsgLy8gRklYTUU6IFRoaXMgaXMgcHJvYmFibHkgbm90IHZlcnkgd2VsbCBjb3Zl
cmVkIGJ5IHRoZSBsYXlvdXQgdGVzdHMuCisgICAgaWYgKG9iamVjdFN0b3JlRGF0YVZlcnNpb24g
IT0gaW5kZXhEYXRhVmVyc2lvbikgewogICAgICAgICBtX3RyYW5zYWN0aW9uLT5yZW1vdmUobV9p
dGVyYXRvci0+a2V5KCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102665</attachid>
            <date>2011-08-02 10:11:10 -0700</date>
            <delta_ts>2011-08-03 02:43:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65547-20110802181108.patch</filename>
            <type>text/plain</type>
            <size>13216</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTIxNjkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBjMWM3MzRjMDAwNGI4YTA2MTcyYjNl
OWEwNTYyYTFlY2FiYmViNGVhLi42NThiNTU3ZTNkNjhlOTkxZjQ0MTBhZTQ0NjQxYTRkYTJlMGUx
NGRmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDgtMDIgIEhhbnMgV2VubmJvcmcgIDxo
YW5zQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IEZpeCBpbmRleCBkYXRhIGlu
dmFsaWRhdGlvbiBidWdzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjU1NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgbGF5b3V0IHRlc3QgdG8gdmVyaWZ5IHRoYXQgdXBkYXRlIG9iamVjdCBzdG9y
ZSBkYXRhIGNhdXNlcyBvbGQKKyAgICAgICAgaW5kZXggZGF0YSB0byBiZSBpbnZhbGlkYXRlZC4K
KworICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LXVuaXF1ZS5odG1sOiBBZGRlZC4K
KwogMjAxMS0wOC0wMSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5jb20+CiAKICAg
ICAgICAgV2ViIEluc3BlY3RvcjogYnV0dG9uICsgIk5ldyBzdHlsZSBydWxlIgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtdW5pcXVlLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LXVuaXF1ZS1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMjU3NzUzY2FlYmMwN2I2MTQ3NTcxOWI2OTRlMWY1N2M4ZmZkYzYzZgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LXVu
aXF1ZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0MCBAQAorVGVzdCBmZWF0dXJlcyBvZiBJbmRl
eGVkREIncyB1bmlxdWUgaW5kaWNlcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K3dlYmtpdEluZGV4ZWREQi5vcGVuKCdpbmRleC11bmlxdWUnKQorZGIgPSBldmVudC50YXJnZXQu
cmVzdWx0CitkYi5zZXRWZXJzaW9uKCduZXcgdmVyc2lvbicpCitkZWxldGVFeGlzdGluZygpOgor
dHJhbnMgPSBldmVudC50YXJnZXQucmVzdWx0CitQQVNTIHRyYW5zICE9PSBudWxsIGlzIHRydWUK
K0RlbGV0ZWQgYWxsIG9iamVjdCBzdG9yZXMuCitkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUn
KQorc3RvcmUuY3JlYXRlSW5kZXgoJ2luZGV4JywgJ3gnLCB7dW5pcXVlOiB0cnVlfSkKK3NldFZl
cnNpb25Db21wbGV0ZWQoKToKK3RyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oW10sIHdlYmtp
dElEQlRyYW5zYWN0aW9uLlJFQURfV1JJVEUpCit0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3Rv
cmUnKS5wdXQoe3g6IDF9LCAnZm9vJykKK2FkZE1vcmVEYXRhKCk6Cit0cmFuc2FjdGlvbi5vYmpl
Y3RTdG9yZSgnc3RvcmUnKS5wdXQoe3g6IDF9LCAnYmFyJykKK2FkZE1vcmVEYXRhRmFpbGVkKCk6
CitldmVudC5wcmV2ZW50RGVmYXVsdCgpCitQQVNTIGV2ZW50LnRhcmdldC5lcnJvckNvZGUgaXMg
d2Via2l0SURCRGF0YWJhc2VFeGNlcHRpb24uVU5LTk9XTl9FUlIKK3RyYW5zYWN0aW9uLm9iamVj
dFN0b3JlKCdzdG9yZScpLnB1dCh7eDogMH0sICdmb28nKQorY2hhbmdlRGF0YVN1Y2Nlc3MoKToK
K3RyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZScpLmluZGV4KCdpbmRleCcpLm9wZW5DdXJz
b3Iod2Via2l0SURCS2V5UmFuZ2UubG93ZXJCb3VuZCgxKSkKK2N1cnNvclN1Y2Nlc3MoKToKK1BB
U1MgZXZlbnQudGFyZ2V0LnJlc3VsdCBpcyBudWxsCit0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgn
c3RvcmUnKS5pbmRleCgnaW5kZXgnKS5vcGVuS2V5Q3Vyc29yKHdlYmtpdElEQktleVJhbmdlLmxv
d2VyQm91bmQoMSkpCitrZXlDdXJzb3JTdWNjZXNzKCk6CitQQVNTIGV2ZW50LnRhcmdldC5yZXN1
bHQgaXMgbnVsbAordHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlJykucHV0KHt4OiAxfSwg
J2JhcicpCithZGRNb3JlRGF0YVN1Y2NlcygpOgordHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0
b3JlJykuZGVsZXRlKCdiYXInKQorZGVsZXRlU3VjY2VzcygpOgordHJhbnNhY3Rpb24ub2JqZWN0
U3RvcmUoJ3N0b3JlJykucHV0KHt4OiAxfSwgJ2JheicpCitmaW5hbEFkZFN1Y2Nlc3MoKToKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC11bmlxdWUuaHRtbCBiL0xh
eW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LXVuaXF1ZS5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjYzMDQxMGQ2OGRlODgwY2U1ZWNjYmU5YTFlYWI1ZDJjNjFkMTZkNTMKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC11bmlxdWUuaHRtbApAQCAt
MCwwICsxLDE0NyBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJl
Zj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBz
cmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24u
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFyZWQuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KKworZGVzY3JpcHRpb24oIlRlc3QgZmVhdHVyZXMgb2Yg
SW5kZXhlZERCJ3MgdW5pcXVlIGluZGljZXMuIik7CitpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworZnVu
Y3Rpb24gdGVzdCgpCit7CisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coIndlYmtpdEluZGV4ZWRE
Qi5vcGVuKCdpbmRleC11bmlxdWUnKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gc2V0VmVy
c2lvbjsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30K
KworZnVuY3Rpb24gc2V0VmVyc2lvbigpCit7CisgICAgZGIgPSBldmFsQW5kTG9nKCJkYiA9IGV2
ZW50LnRhcmdldC5yZXN1bHQiKTsKKworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJkYi5zZXRW
ZXJzaW9uKCduZXcgdmVyc2lvbicpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBkZWxldGVF
eGlzdGluZzsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsK
K30KKworZnVuY3Rpb24gZGVsZXRlRXhpc3RpbmcoKQoreworICAgIGRlYnVnKCJkZWxldGVFeGlz
dGluZygpOiIpOworICAgIHZhciB0cmFucyA9IGV2YWxBbmRMb2coInRyYW5zID0gZXZlbnQudGFy
Z2V0LnJlc3VsdCIpOworICAgIHNob3VsZEJlVHJ1ZSgidHJhbnMgIT09IG51bGwiKTsKKyAgICB0
cmFucy5vbmFib3J0ID0gdW5leHBlY3RlZEFib3J0Q2FsbGJhY2s7CisgICAgdHJhbnMub25jb21w
bGV0ZSA9IHNldFZlcnNpb25Db21wbGV0ZWQ7CisKKyAgICBkZWxldGVBbGxPYmplY3RTdG9yZXMo
ZGIpOworCisgICAgd2luZG93LnN0b3JlID0gZXZhbEFuZExvZygiZGIuY3JlYXRlT2JqZWN0U3Rv
cmUoJ3N0b3JlJykiKTsKKyAgICB3aW5kb3cuaW5kZXhPYmplY3QgPSBldmFsQW5kTG9nKCJzdG9y
ZS5jcmVhdGVJbmRleCgnaW5kZXgnLCAneCcsIHt1bmlxdWU6IHRydWV9KSIpOworCisgICAgLy8g
TGV0IHNldFZlcnNpb24gdHJhbnNhY3Rpb24gY29tcGxldGUuCit9CisKK2Z1bmN0aW9uIHNldFZl
cnNpb25Db21wbGV0ZWQoKQoreworICAgIGRlYnVnKCJzZXRWZXJzaW9uQ29tcGxldGVkKCk6Iik7
CisgICAgd2luZG93LnRyYW5zYWN0aW9uID0gZXZhbEFuZExvZygidHJhbnNhY3Rpb24gPSBkYi50
cmFuc2FjdGlvbihbXSwgd2Via2l0SURCVHJhbnNhY3Rpb24uUkVBRF9XUklURSkiKTsKKworICAg
IHJlcXVlc3QgPSBldmFsQW5kTG9nKCJ0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmUnKS5w
dXQoe3g6IDF9LCAnZm9vJykiKTsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJy
b3JDYWxsYmFjazsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGFkZE1vcmVEYXRhOworfQorCitm
dW5jdGlvbiBhZGRNb3JlRGF0YSgpCit7CisgICAgZGVidWcoImFkZE1vcmVEYXRhKCk6Iik7CisK
KyAgICAvLyBUaGUgeCB2YWx1ZSB2aW9sYXRlcyB0aGUgdW5pcXVlbmVzcyBjb25zdHJhaW50IG9m
IHRoZSBpbmRleC4KKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygidHJhbnNhY3Rpb24ub2JqZWN0
U3RvcmUoJ3N0b3JlJykucHV0KHt4OiAxfSwgJ2JhcicpIik7CisgICAgcmVxdWVzdC5vbmVycm9y
ID0gYWRkTW9yZURhdGFGYWlsZWQ7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSB1bmV4cGVjdGVk
U3VjY2Vzc0NhbGxiYWNrOworfQorCitmdW5jdGlvbiBhZGRNb3JlRGF0YUZhaWxlZCgpCit7Cisg
ICAgZGVidWcoImFkZE1vcmVEYXRhRmFpbGVkKCk6Iik7CisKKyAgICAvLyBEb24ndCBhYm9ydCB0
aGUgdHJhbnNhY3Rpb24uCisgICAgZXZhbEFuZExvZygiZXZlbnQucHJldmVudERlZmF1bHQoKSIp
OworCisgICAgc2hvdWxkQmUoImV2ZW50LnRhcmdldC5lcnJvckNvZGUiLCAid2Via2l0SURCRGF0
YWJhc2VFeGNlcHRpb24uVU5LTk9XTl9FUlIiKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgJ2Zvbycg
ZW50cnkgaW4gb2JqZWN0IHN0b3JlLCBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgeC4KKyAgICByZXF1
ZXN0ID0gZXZhbEFuZExvZygidHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlJykucHV0KHt4
OiAwfSwgJ2ZvbycpIik7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2Fs
bGJhY2s7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBjaGFuZ2VEYXRhU3VjY2VzczsKK30KKwor
ZnVuY3Rpb24gY2hhbmdlRGF0YVN1Y2Nlc3MoKQoreworICAgIGRlYnVnKCJjaGFuZ2VEYXRhU3Vj
Y2VzcygpOiIpOworCisgICAgLy8gQW4gaW5kZXggY3Vyc29yIHN0YXJ0aW5nIGF0IDEgc2hvdWxk
IG5vdCBmaW5kIGFueXRoaW5nLgorICAgIHZhciByZXF1ZXN0ID0gZXZhbEFuZExvZygidHJhbnNh
Y3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlJykuaW5kZXgoJ2luZGV4Jykub3BlbkN1cnNvcih3ZWJr
aXRJREJLZXlSYW5nZS5sb3dlckJvdW5kKDEpKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0g
Y3Vyc29yU3VjY2VzczsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxs
YmFjazsKK30KKworZnVuY3Rpb24gY3Vyc29yU3VjY2VzcygpCit7CisgICAgZGVidWcoImN1cnNv
clN1Y2Nlc3MoKToiKTsKKyAgICBzaG91bGRCZSgiZXZlbnQudGFyZ2V0LnJlc3VsdCIsICJudWxs
Iik7CisKKyAgICAvLyBBIGtleSBjdXJzb3Igc3RhcnRpbmcgYXQgMSBzaG91bGQgbm90IGZpbmQg
YW55dGhpbmcuCisgICAgdmFyIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJ0cmFuc2FjdGlvbi5vYmpl
Y3RTdG9yZSgnc3RvcmUnKS5pbmRleCgnaW5kZXgnKS5vcGVuS2V5Q3Vyc29yKHdlYmtpdElEQktl
eVJhbmdlLmxvd2VyQm91bmQoMSkpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBrZXlDdXJz
b3JTdWNjZXNzOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNr
OworfQorCitmdW5jdGlvbiBrZXlDdXJzb3JTdWNjZXNzKCkKK3sKKyAgICBkZWJ1Zygia2V5Q3Vy
c29yU3VjY2VzcygpOiIpOworICAgIHNob3VsZEJlKCJldmVudC50YXJnZXQucmVzdWx0IiwgIm51
bGwiKTsKKworICAgIC8vIE5vdyB3ZSBzaG91bGQgYmUgYWJsZSB0byBhZGQgYSB2YWx1ZSB3aXRo
IHg6IDEuCisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coInRyYW5zYWN0aW9uLm9iamVjdFN0b3Jl
KCdzdG9yZScpLnB1dCh7eDogMX0sICdiYXInKSIpOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVu
ZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gYWRkTW9yZURh
dGFTdWNjZXM7Cit9CisKK2Z1bmN0aW9uIGFkZE1vcmVEYXRhU3VjY2VzKCkKK3sKKyAgICBkZWJ1
ZygiYWRkTW9yZURhdGFTdWNjZXMoKToiKTsKKworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJ0
cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmUnKS5kZWxldGUoJ2JhcicpIik7CisgICAgcmVx
dWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgcmVxdWVzdC5vbnN1
Y2Nlc3MgPSBkZWxldGVTdWNjZXNzOworfQorCitmdW5jdGlvbiBkZWxldGVTdWNjZXNzKCkKK3sK
KyAgICBkZWJ1ZygiZGVsZXRlU3VjY2VzcygpOiIpOworCisgICAgLy8gTm93IHdlIHNob3VsZCBi
ZSBhYmxlIHRvIGFkZCBhIHZhbHVlIHdpdGggeDogMSBhZ2Fpbi4KKyAgICByZXF1ZXN0ID0gZXZh
bEFuZExvZygidHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlJykucHV0KHt4OiAxfSwgJ2Jh
eicpIik7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cisg
ICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBmaW5hbEFkZFN1Y2Nlc3M7Cit9CisKK2Z1bmN0aW9uIGZp
bmFsQWRkU3VjY2VzcygpIHsKKyAgICBkZWJ1ZygiZmluYWxBZGRTdWNjZXNzKCk6Iik7CisgICAg
ZG9uZSgpOworfQorCit0ZXN0KCk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwor
Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGIzNDg0YjJlYjkz
OWVmZGI2NzQ2YTE3MWZhMDBhY2I3MTI3MTgwZTAuLmI4MTY1OTgwZjJlOGU1YTU1YjQwOWNiZGVm
NGYyMzU3NTg0ZDZlZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxMS0wOC0wMiAg
SGFucyBXZW5uYm9yZyAgPGhhbnNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjog
Rml4IGluZGV4IGRhdGEgaW52YWxpZGF0aW9uIGJ1Z3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTU0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGNoZWNrcyB3aGV0aGVy
IGEga2V5IGV4aXN0cyBpbiBhbiBpbmRleCBmYWlsZWQKKyAgICAgICAgdG8gY2hlY2sgd2hldGhl
ciB0aGF0IGtleSB3YXMgc3RpbGwgdmFsaWQgb3Igbm90LgorCisgICAgICAgIERlbGV0aW5nIGEg
cmVjb3JkIGZyb20gYW4gb2JqZWN0IHN0b3JlIG11c3QgYWxzbyBkZWxldGUgaXRzIGV4aXN0cwor
ICAgICAgICBlbnRyeSwgdGh1cyBpbnZhbGlkYXRpbmcgaW5kZXgga2V5cyBwb2ludGluZyB0byB0
aGF0IHJlY29yZC4KKworICAgICAgICBUZXN0OiBzdG9yYWdlL2luZGV4ZWRkYi9pbmRleC11bmlx
dWUuaHRtbAorCisgICAgICAgICogc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0
b3JlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRLZXlJbkluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbklu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cnNvck9wdGlvbnM6OkluZGV4S2V5Q3Vyc29ySW1w
bDo6bG9hZEN1cnJlbnRSb3cpOgorCiAyMDExLTA4LTAyICBQYXZlbCBGZWxkbWFuICA8cGZlbGRt
YW5AZ29vZ2xlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBhcnJvdyBpcyBhIHBhaW4g
dG8gY2xpY2sgaW4gY29uc29sZS4gRHJpdmUtYnkgc2VsZWN0aW9uIHJlc2V0IGZpeC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCmluZGV4
IGIwYzViZTBmZDgxYjJlODViNzliYmUxMzc0ZTJlYzA1NGVjZWYxNmYuLmYzZjY5NTVhNWM3Y2Nk
OTAzYmZjODE4NWIyZTMxZDY3ZDlmZTJmOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcApAQCAtNTEyLDggKzUxMiwxMiBAQCB2b2lk
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdAogewogICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7
CiAgICAgY29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxldmVsREJSZWNvcmRJZGVudGlm
aWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqPihyZWNvcmRJ
ZGVudGlmaWVyKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5ID0gT2JqZWN0U3RvcmVEYXRh
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbGV2ZWxEQlJlY29yZElkZW50
aWZpZXItPnByaW1hcnlLZXkoKSk7Ci0gICAgbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92ZShr
ZXkpOworCisgICAgY29uc3QgVmVjdG9yPGNoYXI+IG9iamVjdFN0b3JlRGF0YUtleSA9IE9iamVj
dFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGxldmVsREJS
ZWNvcmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOworICAgIG1fY3VycmVudFRyYW5zYWN0aW9u
LT5yZW1vdmUob2JqZWN0U3RvcmVEYXRhS2V5KTsKKworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBl
eGlzdHNFbnRyeUtleSA9IEV4aXN0c0VudHJ5S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7CisgICAgbV9j
dXJyZW50VHJhbnNhY3Rpb24tPnJlbW92ZShleGlzdHNFbnRyeUtleSk7CiB9CiAKIGRvdWJsZSBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpuZXh0QXV0b0luY3JlbWVudE51bWJlcihpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKQEAgLTgwMSw1MiArODA1LDYwIEBAIHN0
YXRpYyBib29sIHZlcnNpb25FeGlzdHMoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpCiAgICAgcmV0dXJuIGRlY29kZUludChkYXRhLmJlZ2luKCks
IGRhdGEuZW5kKCkpID09IHZlcnNpb247CiB9CiAKLVBhc3NSZWZQdHI8SURCS2V5PiBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBr
ZXkpCitzdGF0aWMgYm9vbCBmaW5kS2V5SW5JbmRleChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSwgVmVjdG9yPGNoYXI+KiBmb3VuZEVuY29kZWRQ
cmltYXJ5S2V5KQogewotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgQVNT
RVJUKGZvdW5kRW5jb2RlZFByaW1hcnlLZXktPmlzRW1wdHkoKSk7CisKICAgICBjb25zdCBWZWN0
b3I8Y2hhcj4gbGV2ZWxkYktleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIGluZGV4SWQsIGtleSwgMCk7Ci0gICAgT3duUHRyPExldmVsREJJdGVyYXRv
cj4gaXQgPSBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAgICBPd25Q
dHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IHRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwog
ICAgIGl0LT5zZWVrKGxldmVsZGJLZXkpOwogCiAgICAgZm9yICg7OykgewogICAgICAgICBpZiAo
IWl0LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgaWYgKGNvbXBhcmVJbmRleEtleXMoaXQtPmtleSgpLCBsZXZlbGRi
S2V5KSA+IDApCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgICAgICBpbnQ2NF90IHZlcnNpb247CiAgICAgICAgIGNvbnN0IGNoYXIqIHAgPSBk
ZWNvZGVWYXJJbnQoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCksIHZlcnNp
b24pOwogICAgICAgICBpZiAoIXApCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgVmVj
dG9yPGNoYXI+IGVuY29kZWRQcmltYXJ5S2V5OwotICAgICAgICBlbmNvZGVkUHJpbWFyeUtleS5h
cHBlbmQocCwgaXQtPnZhbHVlKCkuZW5kKCkgLSBwKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgZm91bmRFbmNvZGVkUHJpbWFyeUtleS0+YXBwZW5kKHAsIGl0LT52YWx1ZSgp
LmVuZCgpIC0gcCk7CiAKLSAgICAgICAgaWYgKCF2ZXJzaW9uRXhpc3RzKG1fY3VycmVudFRyYW5z
YWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCB2ZXJzaW9uLCBlbmNvZGVk
UHJpbWFyeUtleSkpIHsKKyAgICAgICAgaWYgKCF2ZXJzaW9uRXhpc3RzKHRyYW5zYWN0aW9uLCBk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCB2ZXJzaW9uLCAqZm91bmRFbmNvZGVkUHJpbWFyeUtl
eSkpIHsKICAgICAgICAgICAgIC8vIERlbGV0ZSBzdGFsZSBpbmRleCBkYXRhIGVudHJ5IGFuZCBj
b250aW51ZS4KLSAgICAgICAgICAgIG1fY3VycmVudFRyYW5zYWN0aW9uLT5yZW1vdmUoaXQtPmtl
eSgpKTsKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLT5yZW1vdmUoaXQtPmtleSgpKTsKICAgICAg
ICAgICAgIGl0LT5uZXh0KCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworUGFzc1JlZlB0cjxJREJLZXk+IElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkm
IGtleSkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworCisgICAgVmVjdG9y
PGNoYXI+IGZvdW5kRW5jb2RlZFByaW1hcnlLZXk7CisgICAgaWYgKGZpbmRLZXlJbkluZGV4KG1f
Y3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRl
eElkLCBrZXksICZmb3VuZEVuY29kZWRQcmltYXJ5S2V5KSkgewogICAgICAgICBSZWZQdHI8SURC
S2V5PiBwcmltYXJ5S2V5OwotICAgICAgICBkZWNvZGVJREJLZXkoZW5jb2RlZFByaW1hcnlLZXku
YmVnaW4oKSwgZW5jb2RlZFByaW1hcnlLZXkuZW5kKCksIHByaW1hcnlLZXkpOworICAgICAgICBk
ZWNvZGVJREJLZXkoZm91bmRFbmNvZGVkUHJpbWFyeUtleS5iZWdpbigpLCBmb3VuZEVuY29kZWRQ
cmltYXJ5S2V5LmVuZCgpLCBwcmltYXJ5S2V5KTsKICAgICAgICAgcmV0dXJuIHByaW1hcnlLZXku
cmVsZWFzZSgpOwogICAgIH0KKworICAgIHJldHVybiAwOwogfQogCiBib29sIElEQkxldmVsREJC
YWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXkpCiB7CiAg
ICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4g
bGV2ZWxEQktleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIGluZGV4SWQsIGtleSwgMCk7Ci0gICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBt
X2N1cnJlbnRUcmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKIAotICAgIGJvb2wgZm91bmQg
PSBmYWxzZTsKLQotICAgIGl0LT5zZWVrKGxldmVsREJLZXkpOwotICAgIGlmIChpdC0+aXNWYWxp
ZCgpICYmICFjb21wYXJlSW5kZXhLZXlzKGl0LT5rZXkoKSwgbGV2ZWxEQktleSkpCi0gICAgICAg
IGZvdW5kID0gdHJ1ZTsKKyAgICBWZWN0b3I8Y2hhcj4gZm91bmRFbmNvZGVkUHJpbWFyeUtleTsK
KyAgICBpZiAoZmluZEtleUluSW5kZXgobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleSwgJmZvdW5kRW5jb2RlZFByaW1hcnlL
ZXkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVybiBmb3VuZDsKKyAgICByZXR1
cm4gZmFsc2U7CiB9CiAKIG5hbWVzcGFjZSB7CkBAIC0xMDg4LDcgKzExMDAsNyBAQCBib29sIElu
ZGV4S2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogICAgIGlmICghdCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG9iamVjdFN0b3JlRGF0YVZlcnNpb24gIT0gaW5kZXhE
YXRhVmVyc2lvbikgeyAvLyBGSVhNRTogVGhpcyBpcyBwcm9iYWJseSBub3QgdmVyeSB3ZWxsIGNv
dmVyZWQgYnkgdGhlIGxheW91dCB0ZXN0cy4KKyAgICBpZiAob2JqZWN0U3RvcmVEYXRhVmVyc2lv
biAhPSBpbmRleERhdGFWZXJzaW9uKSB7CiAgICAgICAgIG1fdHJhbnNhY3Rpb24tPnJlbW92ZSht
X2l0ZXJhdG9yLT5rZXkoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102758</attachid>
            <date>2011-08-03 02:43:21 -0700</date>
            <delta_ts>2011-08-03 11:11:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65547-20110803104319.patch</filename>
            <type>text/plain</type>
            <size>15712</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTIyNjUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2NGE1YTQyMGVlY2Q5YzU2MWFiYWU2
MjNmOGM5YTg2NWE1MjU3Yzk4Li5iZjIwZTMyOWY3NjU2ZDcwYWI1Yzc2YTY2NzkxM2U3OTA0NjM3
M2M4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDgtMDIgIEhhbnMgV2VubmJvcmcgIDxo
YW5zQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IEZpeCBpbmRleCBkYXRhIGlu
dmFsaWRhdGlvbiBidWdzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjU1NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgbGF5b3V0IHRlc3QgdG8gdmVyaWZ5IHRoYXQgdXBkYXRlIG9iamVjdCBzdG9y
ZSBkYXRhIGNhdXNlcyBvbGQKKyAgICAgICAgaW5kZXggZGF0YSB0byBiZSBpbnZhbGlkYXRlZC4K
KworICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LXVuaXF1ZS5odG1sOiBBZGRlZC4K
KwogMjAxMS0wOC0wMyAgVGFrYXNoaSBUb3lvc2hpbWEgIDx0b3lvc2hpbUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgV2ViU29ja2V0OiBDb3VsZCBub3QgaGFuZGxlIHplcm8gbGVuZ3RoIHRleHQg
ZnJhbWUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC11
bmlxdWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgt
dW5pcXVlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNWI2ZmYwYmI3MGVhMDYyM2ZhNzY1M2Uy
NjU0YzgxMDhkMTFmNTA2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvaW5kZXgtdW5pcXVlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQwIEBACitUZXN0
IGZlYXR1cmVzIG9mIEluZGV4ZWREQidzIHVuaXF1ZSBpbmRpY2VzLgorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKword2Via2l0SW5kZXhlZERCLm9wZW4oJ2luZGV4LXVuaXF1ZScpCitk
YiA9IGV2ZW50LnRhcmdldC5yZXN1bHQKK2RiLnNldFZlcnNpb24oJ25ldyB2ZXJzaW9uJykKK2Rl
bGV0ZUV4aXN0aW5nKCk6Cit0cmFucyA9IGV2ZW50LnRhcmdldC5yZXN1bHQKK1BBU1MgdHJhbnMg
IT09IG51bGwgaXMgdHJ1ZQorRGVsZXRlZCBhbGwgb2JqZWN0IHN0b3Jlcy4KK2RiLmNyZWF0ZU9i
amVjdFN0b3JlKCdzdG9yZScpCitzdG9yZS5jcmVhdGVJbmRleCgnaW5kZXgnLCAneCcsIHt1bmlx
dWU6IHRydWV9KQorc2V0VmVyc2lvbkNvbXBsZXRlZCgpOgordHJhbnNhY3Rpb24gPSBkYi50cmFu
c2FjdGlvbihbXSwgd2Via2l0SURCVHJhbnNhY3Rpb24uUkVBRF9XUklURSkKK3RyYW5zYWN0aW9u
Lm9iamVjdFN0b3JlKCdzdG9yZScpLnB1dCh7eDogMX0sICdmb28nKQorYWRkTW9yZURhdGEoKToK
K3RyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZScpLnB1dCh7eDogMX0sICdiYXInKQorYWRk
TW9yZURhdGFGYWlsZWQoKToKK2V2ZW50LnByZXZlbnREZWZhdWx0KCkKK1BBU1MgZXZlbnQudGFy
Z2V0LmVycm9yQ29kZSBpcyB3ZWJraXRJREJEYXRhYmFzZUV4Y2VwdGlvbi5DT05TVFJBSU5UX0VS
UgordHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlJykucHV0KHt4OiAwfSwgJ2ZvbycpCitj
aGFuZ2VEYXRhU3VjY2VzcygpOgordHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlJykuaW5k
ZXgoJ2luZGV4Jykub3BlbkN1cnNvcih3ZWJraXRJREJLZXlSYW5nZS5sb3dlckJvdW5kKDEpKQor
Y3Vyc29yU3VjY2VzcygpOgorUEFTUyBldmVudC50YXJnZXQucmVzdWx0IGlzIG51bGwKK3RyYW5z
YWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZScpLmluZGV4KCdpbmRleCcpLm9wZW5LZXlDdXJzb3Io
d2Via2l0SURCS2V5UmFuZ2UubG93ZXJCb3VuZCgxKSkKK2tleUN1cnNvclN1Y2Nlc3MoKToKK1BB
U1MgZXZlbnQudGFyZ2V0LnJlc3VsdCBpcyBudWxsCit0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgn
c3RvcmUnKS5wdXQoe3g6IDF9LCAnYmFyJykKK2FkZE1vcmVEYXRhU3VjY2VzKCk6Cit0cmFuc2Fj
dGlvbi5vYmplY3RTdG9yZSgnc3RvcmUnKS5kZWxldGUoJ2JhcicpCitkZWxldGVTdWNjZXNzKCk6
Cit0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmUnKS5wdXQoe3g6IDF9LCAnYmF6JykKK2Zp
bmFsQWRkU3VjY2VzcygpOgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2lu
ZGV4LXVuaXF1ZS5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtdW5p
cXVlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uN2JhZDNkYTM1N2UxMjFlN2M0ZTBlYjA1ZmVhNDNhMWE1ZDY5
Y2E4NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2lu
ZGV4LXVuaXF1ZS5odG1sCkBAIC0wLDAgKzEsMTQ3IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0
eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L3NoYXJlZC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlv
biI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorCitkZXNjcmlwdGlv
bigiVGVzdCBmZWF0dXJlcyBvZiBJbmRleGVkREIncyB1bmlxdWUgaW5kaWNlcy4iKTsKK2lmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2Fp
dFVudGlsRG9uZSgpOworCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICByZXF1ZXN0ID0gZXZhbEFu
ZExvZygid2Via2l0SW5kZXhlZERCLm9wZW4oJ2luZGV4LXVuaXF1ZScpIik7CisgICAgcmVxdWVz
dC5vbnN1Y2Nlc3MgPSBzZXRWZXJzaW9uOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0
ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBzZXRWZXJzaW9uKCkKK3sKKyAgICBkYiA9
IGV2YWxBbmRMb2coImRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdCIpOworCisgICAgcmVxdWVzdCA9
IGV2YWxBbmRMb2coImRiLnNldFZlcnNpb24oJ25ldyB2ZXJzaW9uJykiKTsKKyAgICByZXF1ZXN0
Lm9uc3VjY2VzcyA9IGRlbGV0ZUV4aXN0aW5nOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhw
ZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBkZWxldGVFeGlzdGluZygpCit7Cisg
ICAgZGVidWcoImRlbGV0ZUV4aXN0aW5nKCk6Iik7CisgICAgdmFyIHRyYW5zID0gZXZhbEFuZExv
ZygidHJhbnMgPSBldmVudC50YXJnZXQucmVzdWx0Iik7CisgICAgc2hvdWxkQmVUcnVlKCJ0cmFu
cyAhPT0gbnVsbCIpOworICAgIHRyYW5zLm9uYWJvcnQgPSB1bmV4cGVjdGVkQWJvcnRDYWxsYmFj
azsKKyAgICB0cmFucy5vbmNvbXBsZXRlID0gc2V0VmVyc2lvbkNvbXBsZXRlZDsKKworICAgIGRl
bGV0ZUFsbE9iamVjdFN0b3JlcyhkYik7CisKKyAgICB3aW5kb3cuc3RvcmUgPSBldmFsQW5kTG9n
KCJkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnKSIpOworICAgIHdpbmRvdy5pbmRleE9iamVj
dCA9IGV2YWxBbmRMb2coInN0b3JlLmNyZWF0ZUluZGV4KCdpbmRleCcsICd4Jywge3VuaXF1ZTog
dHJ1ZX0pIik7CisKKyAgICAvLyBMZXQgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbiBjb21wbGV0ZS4K
K30KKworZnVuY3Rpb24gc2V0VmVyc2lvbkNvbXBsZXRlZCgpCit7CisgICAgZGVidWcoInNldFZl
cnNpb25Db21wbGV0ZWQoKToiKTsKKyAgICB3aW5kb3cudHJhbnNhY3Rpb24gPSBldmFsQW5kTG9n
KCJ0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKFtdLCB3ZWJraXRJREJUcmFuc2FjdGlvbi5S
RUFEX1dSSVRFKSIpOworCisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coInRyYW5zYWN0aW9uLm9i
amVjdFN0b3JlKCdzdG9yZScpLnB1dCh7eDogMX0sICdmb28nKSIpOworICAgIHJlcXVlc3Qub25l
cnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0g
YWRkTW9yZURhdGE7Cit9CisKK2Z1bmN0aW9uIGFkZE1vcmVEYXRhKCkKK3sKKyAgICBkZWJ1Zygi
YWRkTW9yZURhdGEoKToiKTsKKworICAgIC8vIFRoZSB4IHZhbHVlIHZpb2xhdGVzIHRoZSB1bmlx
dWVuZXNzIGNvbnN0cmFpbnQgb2YgdGhlIGluZGV4LgorICAgIHJlcXVlc3QgPSBldmFsQW5kTG9n
KCJ0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmUnKS5wdXQoe3g6IDF9LCAnYmFyJykiKTsK
KyAgICByZXF1ZXN0Lm9uZXJyb3IgPSBhZGRNb3JlRGF0YUZhaWxlZDsKKyAgICByZXF1ZXN0Lm9u
c3VjY2VzcyA9IHVuZXhwZWN0ZWRTdWNjZXNzQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGFkZE1v
cmVEYXRhRmFpbGVkKCkKK3sKKyAgICBkZWJ1ZygiYWRkTW9yZURhdGFGYWlsZWQoKToiKTsKKwor
ICAgIC8vIERvbid0IGFib3J0IHRoZSB0cmFuc2FjdGlvbi4KKyAgICBldmFsQW5kTG9nKCJldmVu
dC5wcmV2ZW50RGVmYXVsdCgpIik7CisKKyAgICBzaG91bGRCZSgiZXZlbnQudGFyZ2V0LmVycm9y
Q29kZSIsICJ3ZWJraXRJREJEYXRhYmFzZUV4Y2VwdGlvbi5DT05TVFJBSU5UX0VSUiIpOworCisg
ICAgLy8gVXBkYXRlIHRoZSAnZm9vJyBlbnRyeSBpbiBvYmplY3Qgc3RvcmUsIGNoYW5naW5nIHRo
ZSB2YWx1ZSBvZiB4LgorICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJ0cmFuc2FjdGlvbi5vYmpl
Y3RTdG9yZSgnc3RvcmUnKS5wdXQoe3g6IDB9LCAnZm9vJykiKTsKKyAgICByZXF1ZXN0Lm9uZXJy
b3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGNo
YW5nZURhdGFTdWNjZXNzOworfQorCitmdW5jdGlvbiBjaGFuZ2VEYXRhU3VjY2VzcygpCit7Cisg
ICAgZGVidWcoImNoYW5nZURhdGFTdWNjZXNzKCk6Iik7CisKKyAgICAvLyBBbiBpbmRleCBjdXJz
b3Igc3RhcnRpbmcgYXQgMSBzaG91bGQgbm90IGZpbmQgYW55dGhpbmcuCisgICAgdmFyIHJlcXVl
c3QgPSBldmFsQW5kTG9nKCJ0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmUnKS5pbmRleCgn
aW5kZXgnKS5vcGVuQ3Vyc29yKHdlYmtpdElEQktleVJhbmdlLmxvd2VyQm91bmQoMSkpIik7Cisg
ICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBjdXJzb3JTdWNjZXNzOworICAgIHJlcXVlc3Qub25lcnJv
ciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBjdXJzb3JTdWNjZXNz
KCkKK3sKKyAgICBkZWJ1ZygiY3Vyc29yU3VjY2VzcygpOiIpOworICAgIHNob3VsZEJlKCJldmVu
dC50YXJnZXQucmVzdWx0IiwgIm51bGwiKTsKKworICAgIC8vIEEga2V5IGN1cnNvciBzdGFydGlu
ZyBhdCAxIHNob3VsZCBub3QgZmluZCBhbnl0aGluZy4KKyAgICB2YXIgcmVxdWVzdCA9IGV2YWxB
bmRMb2coInRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZScpLmluZGV4KCdpbmRleCcpLm9w
ZW5LZXlDdXJzb3Iod2Via2l0SURCS2V5UmFuZ2UubG93ZXJCb3VuZCgxKSkiKTsKKyAgICByZXF1
ZXN0Lm9uc3VjY2VzcyA9IGtleUN1cnNvclN1Y2Nlc3M7CisgICAgcmVxdWVzdC5vbmVycm9yID0g
dW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGtleUN1cnNvclN1Y2Nlc3Mo
KQoreworICAgIGRlYnVnKCJrZXlDdXJzb3JTdWNjZXNzKCk6Iik7CisgICAgc2hvdWxkQmUoImV2
ZW50LnRhcmdldC5yZXN1bHQiLCAibnVsbCIpOworCisgICAgLy8gTm93IHdlIHNob3VsZCBiZSBh
YmxlIHRvIGFkZCBhIHZhbHVlIHdpdGggeDogMS4KKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygi
dHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlJykucHV0KHt4OiAxfSwgJ2JhcicpIik7Cisg
ICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgcmVxdWVz
dC5vbnN1Y2Nlc3MgPSBhZGRNb3JlRGF0YVN1Y2NlczsKK30KKworZnVuY3Rpb24gYWRkTW9yZURh
dGFTdWNjZXMoKQoreworICAgIGRlYnVnKCJhZGRNb3JlRGF0YVN1Y2NlcygpOiIpOworCisgICAg
cmVxdWVzdCA9IGV2YWxBbmRMb2coInRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZScpLmRl
bGV0ZSgnYmFyJykiKTsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxs
YmFjazsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGRlbGV0ZVN1Y2Nlc3M7Cit9CisKK2Z1bmN0
aW9uIGRlbGV0ZVN1Y2Nlc3MoKQoreworICAgIGRlYnVnKCJkZWxldGVTdWNjZXNzKCk6Iik7CisK
KyAgICAvLyBOb3cgd2Ugc2hvdWxkIGJlIGFibGUgdG8gYWRkIGEgdmFsdWUgd2l0aCB4OiAxIGFn
YWluLgorICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJ0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgn
c3RvcmUnKS5wdXQoe3g6IDF9LCAnYmF6JykiKTsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4
cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZpbmFsQWRkU3Vj
Y2VzczsKK30KKworZnVuY3Rpb24gZmluYWxBZGRTdWNjZXNzKCkgeworICAgIGRlYnVnKCJmaW5h
bEFkZFN1Y2Nlc3MoKToiKTsKKyAgICBkb25lKCk7Cit9CisKK3Rlc3QoKTsKKwordmFyIHN1Y2Nl
c3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1iYXNp
Y3MtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3Rv
cmUtYmFzaWNzLWV4cGVjdGVkLnR4dAppbmRleCA3YTM0YTFiNTE2NjQ2YzVkNjExZWY4NDhlZTlj
Yzk4ZjM1YjFmZjM2Li5iNzVlZDMzZTExZTVlNGE1NDRjZTk2ODYyMmVlNTkwOGNmOWI2N2RlIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1iYXNp
Y3MtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVj
dHN0b3JlLWJhc2ljcy1leHBlY3RlZC50eHQKQEAgLTYzLDcgKzYzLDcgQEAgYWRkU3VjY2Vzcygp
OgogUEFTUyBldmVudC50YXJnZXQucmVzdWx0IGlzICJrZXkiCiBldmVudC50YXJnZXQuc291cmNl
LmFkZCh7eDogJ2Zvbyd9LCAnenp6JykKIGFkZEFnYWluRmFpbHVyZSgpOgotUEFTUyBldmVudC50
YXJnZXQuZXJyb3JDb2RlIGlzIHdlYmtpdElEQkRhdGFiYXNlRXhjZXB0aW9uLlVOS05PV05fRVJS
CitQQVNTIGV2ZW50LnRhcmdldC5lcnJvckNvZGUgaXMgd2Via2l0SURCRGF0YWJhc2VFeGNlcHRp
b24uQ09OU1RSQUlOVF9FUlIKIGV2ZW50LnByZXZlbnREZWZhdWx0KCkKIGRiLnRyYW5zYWN0aW9u
KFtdLCB3ZWJraXRJREJUcmFuc2FjdGlvbi5SRUFEX1dSSVRFKQogc3RvcmUgPSB0cmFuc2FjdGlv
bi5vYmplY3RTdG9yZSgnc3RvcmVOYW1lJykKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2ljcy5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFn
ZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtYmFzaWNzLmh0bWwKaW5kZXggYjc2OTU4NTdlNWM1Mzc0
NDIyMDAzMzMyODMwNzBmMzRmYzBkMWFkNi4uNjQxZDZlOWVmOWIzNjhjM2ZkNmNmMTI4MjczYjcz
NTg2YzhmY2NhNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2Jq
ZWN0c3RvcmUtYmFzaWNzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
b2JqZWN0c3RvcmUtYmFzaWNzLmh0bWwKQEAgLTE3Niw4ICsxNzYsNyBAQCBmdW5jdGlvbiBhZGRT
dWNjZXNzKCkKIGZ1bmN0aW9uIGFkZEFnYWluRmFpbHVyZSgpCiB7CiAgICAgZGVidWcoImFkZEFn
YWluRmFpbHVyZSgpOiIpOwotICAgIC8vIEZJWE1FOiBUaGlzIGVycm9yIGNvZGUgbmVlZHMgdG8g
YmUgc3BlY2NlZC4KLSAgICBzaG91bGRCZSgiZXZlbnQudGFyZ2V0LmVycm9yQ29kZSIsICJ3ZWJr
aXRJREJEYXRhYmFzZUV4Y2VwdGlvbi5VTktOT1dOX0VSUiIpOworICAgIHNob3VsZEJlKCJldmVu
dC50YXJnZXQuZXJyb3JDb2RlIiwgIndlYmtpdElEQkRhdGFiYXNlRXhjZXB0aW9uLkNPTlNUUkFJ
TlRfRVJSIik7CiAKICAgICBldmFsQW5kTG9nKCJldmVudC5wcmV2ZW50RGVmYXVsdCgpIik7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2ZDcyNzkxODczNDA3MDcxODk3MmJiNGQxMDU1ZjZmM2Y1MDgwNjMxLi41
MWE0MzhmZDhjMjg5MGVhMjM2OTU0ZmUyMTMzODNiODVmNjJlNzM0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjUgQEAKKzIwMTEtMDgtMDIgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBJbmRleGVkREI6IEZpeCBpbmRleCBkYXRhIGludmFsaWRhdGlvbiBidWdz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU1NDcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgZnVu
Y3Rpb24gdGhhdCBjaGVja3Mgd2hldGhlciBhIGtleSBleGlzdHMgaW4gYW4gaW5kZXggZmFpbGVk
CisgICAgICAgIHRvIGNoZWNrIHdoZXRoZXIgdGhhdCBrZXkgd2FzIHN0aWxsIHZhbGlkIG9yIG5v
dC4KKworICAgICAgICBEZWxldGluZyBhIHJlY29yZCBmcm9tIGFuIG9iamVjdCBzdG9yZSBtdXN0
IGFsc28gZGVsZXRlIGl0cyBleGlzdHMKKyAgICAgICAgZW50cnksIHRodXMgaW52YWxpZGF0aW5n
IGluZGV4IGtleXMgcG9pbnRpbmcgdG8gdGhhdCByZWNvcmQuCisKKyAgICAgICAgVGVzdDogc3Rv
cmFnZS9pbmRleGVkZGIvaW5kZXgtdW5pcXVlLmh0bWwKKworICAgICAgICAqIHN0b3JhZ2UvSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpm
aW5kS2V5SW5JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJzb3JP
cHRpb25zOjpJbmRleEtleUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KToKKwogMjAxMS0wOC0w
MyAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIg
SW5zcGVjdG9yOiByZW1vdmUgTm9kZSBwYXJhbWV0ZXIgZnJvbSB0aGUgSW5zcGVjdG9yQ2xpZW50
OjpoaWdobGlnaHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNr
aW5nU3RvcmUuY3BwCmluZGV4IGIwYzViZTBmZDgxYjJlODViNzliYmUxMzc0ZTJlYzA1NGVjZWYx
NmYuLmYzZjY5NTVhNWM3Y2NkOTAzYmZjODE4NWIyZTMxZDY3ZDlmZTJmOTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcApAQCAtNTEy
LDggKzUxMiwxMiBAQCB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0
b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdAogewogICAgIEFTU0VSVChtX2N1
cnJlbnRUcmFuc2FjdGlvbik7CiAgICAgY29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxl
dmVsREJSZWNvcmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgTGV2ZWxEQlJlY29yZElk
ZW50aWZpZXIqPihyZWNvcmRJZGVudGlmaWVyKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5
ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
bGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7Ci0gICAgbV9jdXJyZW50VHJh
bnNhY3Rpb24tPnJlbW92ZShrZXkpOworCisgICAgY29uc3QgVmVjdG9yPGNoYXI+IG9iamVjdFN0
b3JlRGF0YUtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOworICAgIG1f
Y3VycmVudFRyYW5zYWN0aW9uLT5yZW1vdmUob2JqZWN0U3RvcmVEYXRhS2V5KTsKKworICAgIGNv
bnN0IFZlY3RvcjxjaGFyPiBleGlzdHNFbnRyeUtleSA9IEV4aXN0c0VudHJ5S2V5OjplbmNvZGUo
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1h
cnlLZXkoKSk7CisgICAgbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92ZShleGlzdHNFbnRyeUtl
eSk7CiB9CiAKIGRvdWJsZSBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpuZXh0QXV0b0luY3JlbWVu
dE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKQEAgLTgw
MSw1MiArODA1LDYwIEBAIHN0YXRpYyBib29sIHZlcnNpb25FeGlzdHMoTGV2ZWxEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpCiAgICAgcmV0dXJuIGRlY29k
ZUludChkYXRhLmJlZ2luKCksIGRhdGEuZW5kKCkpID09IHZlcnNpb247CiB9CiAKLVBhc3NSZWZQ
dHI8SURCS2V5PiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgSURCS2V5JiBrZXkpCitzdGF0aWMgYm9vbCBmaW5kS2V5SW5JbmRleChMZXZlbERC
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSwgVmVjdG9yPGNo
YXI+KiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5KQogewotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFu
c2FjdGlvbik7CisgICAgQVNTRVJUKGZvdW5kRW5jb2RlZFByaW1hcnlLZXktPmlzRW1wdHkoKSk7
CisKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGV2ZWxkYktleSA9IEluZGV4RGF0YUtleTo6ZW5j
b2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleSwgMCk7Ci0gICAgT3du
UHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+Y3JlYXRlSXRl
cmF0b3IoKTsKKyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IHRyYW5zYWN0aW9uLT5j
cmVhdGVJdGVyYXRvcigpOwogICAgIGl0LT5zZWVrKGxldmVsZGJLZXkpOwogCiAgICAgZm9yICg7
OykgewogICAgICAgICBpZiAoIWl0LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKGNvbXBhcmVJbmRleEtleXMo
aXQtPmtleSgpLCBsZXZlbGRiS2V5KSA+IDApCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBpbnQ2NF90IHZlcnNpb247CiAgICAgICAg
IGNvbnN0IGNoYXIqIHAgPSBkZWNvZGVWYXJJbnQoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZh
bHVlKCkuZW5kKCksIHZlcnNpb24pOwogICAgICAgICBpZiAoIXApCi0gICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgVmVjdG9yPGNoYXI+IGVuY29kZWRQcmltYXJ5S2V5OwotICAgICAgICBl
bmNvZGVkUHJpbWFyeUtleS5hcHBlbmQocCwgaXQtPnZhbHVlKCkuZW5kKCkgLSBwKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZm91bmRFbmNvZGVkUHJpbWFyeUtleS0+YXBw
ZW5kKHAsIGl0LT52YWx1ZSgpLmVuZCgpIC0gcCk7CiAKLSAgICAgICAgaWYgKCF2ZXJzaW9uRXhp
c3RzKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCB2ZXJzaW9uLCBlbmNvZGVkUHJpbWFyeUtleSkpIHsKKyAgICAgICAgaWYgKCF2ZXJzaW9uRXhp
c3RzKHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCB2ZXJzaW9uLCAqZm91
bmRFbmNvZGVkUHJpbWFyeUtleSkpIHsKICAgICAgICAgICAgIC8vIERlbGV0ZSBzdGFsZSBpbmRl
eCBkYXRhIGVudHJ5IGFuZCBjb250aW51ZS4KLSAgICAgICAgICAgIG1fY3VycmVudFRyYW5zYWN0
aW9uLT5yZW1vdmUoaXQtPmtleSgpKTsKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLT5yZW1vdmUo
aXQtPmtleSgpKTsKICAgICAgICAgICAgIGl0LT5uZXh0KCk7CiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQogCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworUGFzc1Jl
ZlB0cjxJREJLZXk+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRl
eChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBjb25zdCBJREJLZXkmIGtleSkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rp
b24pOworCisgICAgVmVjdG9yPGNoYXI+IGZvdW5kRW5jb2RlZFByaW1hcnlLZXk7CisgICAgaWYg
KGZpbmRLZXlJbkluZGV4KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXksICZmb3VuZEVuY29kZWRQcmltYXJ5S2V5KSkgewog
ICAgICAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5OwotICAgICAgICBkZWNvZGVJREJLZXko
ZW5jb2RlZFByaW1hcnlLZXkuYmVnaW4oKSwgZW5jb2RlZFByaW1hcnlLZXkuZW5kKCksIHByaW1h
cnlLZXkpOworICAgICAgICBkZWNvZGVJREJLZXkoZm91bmRFbmNvZGVkUHJpbWFyeUtleS5iZWdp
bigpLCBmb3VuZEVuY29kZWRQcmltYXJ5S2V5LmVuZCgpLCBwcmltYXJ5S2V5KTsKICAgICAgICAg
cmV0dXJuIHByaW1hcnlLZXkucmVsZWFzZSgpOwogICAgIH0KKworICAgIHJldHVybiAwOwogfQog
CiBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
SURCS2V5JiBrZXkpCiB7CiAgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKLSAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gbGV2ZWxEQktleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleSwgMCk7Ci0gICAgT3duUHRyPExldmVs
REJJdGVyYXRvcj4gaXQgPSBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsK
IAotICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLQotICAgIGl0LT5zZWVrKGxldmVsREJLZXkpOwot
ICAgIGlmIChpdC0+aXNWYWxpZCgpICYmICFjb21wYXJlSW5kZXhLZXlzKGl0LT5rZXkoKSwgbGV2
ZWxEQktleSkpCi0gICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICBWZWN0b3I8Y2hhcj4gZm91bmRF
bmNvZGVkUHJpbWFyeUtleTsKKyAgICBpZiAoZmluZEtleUluSW5kZXgobV9jdXJyZW50VHJhbnNh
Y3Rpb24uZ2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleSwgJmZv
dW5kRW5jb2RlZFByaW1hcnlLZXkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVy
biBmb3VuZDsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIG5hbWVzcGFjZSB7CkBAIC0xMDg4LDcg
KzExMDAsNyBAQCBib29sIEluZGV4S2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogICAg
IGlmICghdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG9iamVjdFN0b3JlRGF0
YVZlcnNpb24gIT0gaW5kZXhEYXRhVmVyc2lvbikgeyAvLyBGSVhNRTogVGhpcyBpcyBwcm9iYWJs
eSBub3QgdmVyeSB3ZWxsIGNvdmVyZWQgYnkgdGhlIGxheW91dCB0ZXN0cy4KKyAgICBpZiAob2Jq
ZWN0U3RvcmVEYXRhVmVyc2lvbiAhPSBpbmRleERhdGFWZXJzaW9uKSB7CiAgICAgICAgIG1fdHJh
bnNhY3Rpb24tPnJlbW92ZShtX2l0ZXJhdG9yLT5rZXkoKSk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsLmNwcAppbmRleCBlMDA2NjFjZGZmMDU4OTcyMThlY2UyZmVhOTBmY2UxNDQw
NGYyYmNmLi4wZDhlOWUxN2I4YTYxZGU2MGU0Yjk0MmNmMDAzNGRhMDZkZTQ5YWM4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHAKQEAgLTIzNiw3ICsyMzYsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1
dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICghaXQtPnNlY29uZC0+YWRkaW5nS2V5
QWxsb3dlZChrZXkuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURC
RGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwg
Ik9uZSBvZiB0aGUgZGVyaXZlZCAoZnJvbSBhIGtleVBhdGgpIGtleXMgZm9yIGFuIGluZGV4IGRv
ZXMgbm90IHNhdGlzZnkgaXRzIHVuaXF1ZW5lc3MgcmVxdWlyZW1lbnRzLiIpKTsKKyAgICAgICAg
ICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJSLCAiT25lIG9mIHRoZSBkZXJpdmVkIChmcm9tIGEg
a2V5UGF0aCkga2V5cyBmb3IgYW4gaW5kZXggZG9lcyBub3Qgc2F0aXNmeSBpdHMgdW5pcXVlbmVz
cyByZXF1aXJlbWVudHMuIikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIGluZGV4S2V5cy5hcHBlbmQoa2V5LnJlbGVhc2UoKSk7Cg==
</data>
<flag name="review"
          id="98116"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>