<?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>79422</bug_id>
          
          <creation_ts>2012-02-23 16:53:35 -0800</creation_ts>
          <short_desc>IndexedDB: IDBObjectStore.count() and IDBIndex.count() should accept key argument</short_desc>
          <delta_ts>2012-02-24 14:56:26 -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>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="Joshua Bell">jsbell</reporter>
          <assigned_to name="Joshua Bell">jsbell</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dgrogan</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>563694</commentid>
    <comment_count>0</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-02-23 16:53:35 -0800</bug_when>
    <thetext>IndexedDB: IDBObjectStore.count() and IDBIndex.count() should accept key argument</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563701</commentid>
    <comment_count>1</comment_count>
      <attachid>128607</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-02-23 16:55:47 -0800</bug_when>
    <thetext>Created attachment 128607
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563705</commentid>
    <comment_count>2</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-02-23 16:56:50 -0800</bug_when>
    <thetext>tony@ - review at your leisure?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563820</commentid>
    <comment_count>3</comment_count>
      <attachid>128607</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-02-23 19:00:02 -0800</bug_when>
    <thetext>Comment on attachment 128607
Patch

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

&gt; Source/WebCore/storage/IDBIndex.idl:48
&gt;          [CallWith=ScriptExecutionContext] IDBRequest count(in [Optional] IDBKeyRange range)
&gt;              raises (IDBDatabaseException);
&gt; +        [CallWith=ScriptExecutionContext] IDBRequest count(in IDBKey key)
&gt; +            raises (IDBDatabaseException);

The spec defines overloaded methods?  That seems unfortunate if both can take null.

&gt; LayoutTests/storage/indexeddb/objectstore-count.html:128
&gt; +    evalAndExpectException(&quot;store.count(NaN)&quot;, &quot;IDBDatabaseException.DATA_ERR&quot;);
&gt; +    evalAndExpectException(&quot;store.count({})&quot;, &quot;IDBDatabaseException.DATA_ERR&quot;);
&gt; +    evalAndExpectException(&quot;store.count(/regex/)&quot;, &quot;IDBDatabaseException.DATA_ERR&quot;);

Can you add a test that passes in null?  Maybe that&apos;s elsewhere?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563839</commentid>
    <comment_count>4</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-02-23 19:27:38 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 128607 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=128607&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/storage/IDBIndex.idl:48
&gt; &gt;          [CallWith=ScriptExecutionContext] IDBRequest count(in [Optional] IDBKeyRange range)
&gt; &gt;              raises (IDBDatabaseException);
&gt; &gt; +        [CallWith=ScriptExecutionContext] IDBRequest count(in IDBKey key)
&gt; &gt; +            raises (IDBDatabaseException);
&gt; 
&gt; The spec defines overloaded methods?  That seems unfortunate if both can take null.

The spec actually defines it (and several other methods) as taking an &quot;optional any&quot;, and then in the prose defines behavior for no argument, an argument of type IDBKeyRange, an argument of another type which is a valid key, and otherwise.

WebKit&apos;s IDB implementation pushes this into the binding layer, and introduces an IDBKey type which is like a &quot;restricted any&quot; (it&apos;s either valid key data of type string/number/date/array, or &quot;invalid&quot;). For added fun, WebKit also defines an IDBAny which is more like a variant type, but it is only used for return values.

It may not be too difficult to make IDBAny work as an argument type, with just slightly more custom binding logic in WebCore/binding/v8/IDBBindingUtilities.cpp. The IDL folks (both in WebKit and spec writers at Mozilla) have been pushing for more expressive IDL/less custom binding, so I&apos;m not sure that&apos;s a win, though.

Thoughts?

&gt; &gt; LayoutTests/storage/indexeddb/objectstore-count.html:128
&gt; &gt; +    evalAndExpectException(&quot;store.count(NaN)&quot;, &quot;IDBDatabaseException.DATA_ERR&quot;);
&gt; &gt; +    evalAndExpectException(&quot;store.count({})&quot;, &quot;IDBDatabaseException.DATA_ERR&quot;);
&gt; &gt; +    evalAndExpectException(&quot;store.count(/regex/)&quot;, &quot;IDBDatabaseException.DATA_ERR&quot;);
&gt; 
&gt; Can you add a test that passes in null?  Maybe that&apos;s elsewhere?

I&apos;m pretty sure the generated binding code treats a null argument as matching [optional] as though there was no argument, but I&apos;ll add tests to verify. I&apos;m unsure what the WebIDL spec says re: calling with no argument vs. calling with an argument of null or undefined. (Browsers tend to be pretty inconsistent here.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564397</commentid>
    <comment_count>5</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-02-24 09:48:47 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; It may not be too difficult to make IDBAny work as an argument type, with just slightly more custom binding logic in WebCore/binding/v8/IDBBindingUtilities.cpp. The IDL folks (both in WebKit and spec writers at Mozilla) have been pushing for more expressive IDL/less custom binding, so I&apos;m not sure that&apos;s a win, though.
&gt; 
&gt; Thoughts?

The current implementation and spec seem fine.  It seems pretty clear from the code what is happening.

&gt; &gt; Can you add a test that passes in null?  Maybe that&apos;s elsewhere?
&gt; 
&gt; I&apos;m pretty sure the generated binding code treats a null argument as matching [optional] as though there was no argument, but I&apos;ll add tests to verify. I&apos;m unsure what the WebIDL spec says re: calling with no argument vs. calling with an argument of null or undefined. (Browsers tend to be pretty inconsistent here.)

Adding tests sound great, if for no other reason than it provides regression testing.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564440</commentid>
    <comment_count>6</comment_count>
      <attachid>128756</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-02-24 10:33:40 -0800</bug_when>
    <thetext>Created attachment 128756
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564579</commentid>
    <comment_count>7</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-02-24 13:21:32 -0800</bug_when>
    <thetext>tony@ - I uploaded again instead of using land-safely. Can you re: r+ ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564666</commentid>
    <comment_count>8</comment_count>
      <attachid>128756</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-24 14:56:21 -0800</bug_when>
    <thetext>Comment on attachment 128756
Patch

Clearing flags on attachment: 128756

Committed r108852: &lt;http://trac.webkit.org/changeset/108852&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564668</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-24 14:56:26 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128607</attachid>
            <date>2012-02-23 16:55:47 -0800</date>
            <delta_ts>2012-02-24 10:33:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79422-20120223165546.patch</filename>
            <type>text/plain</type>
            <size>17659</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NjE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTdkNDY4ZDQyODkxMzc5
YjNlNjA3MTU2N2ViMzNhNmYwZTY4ZWM1ZS4uZDg2YzMxYWVkMTdkNTUzMjFkNDU2MTViYmVlZmRl
NGE2NTJkY2NlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTAyLTIzICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBJREJP
YmplY3RTdG9yZS5jb3VudCgpIGFuZCBJREJJbmRleC5jb3VudCgpIHNob3VsZCBhY2NlcHQga2V5
IGFyZ3VtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03OTQyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRlc3RzOiBzdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1jb3VudC5odG1sCisgICAgICAgICAgICAg
ICBzdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1jb3VudC5odG1sCisKKyAgICAgICAgKiBz
dG9yYWdlL0lEQkluZGV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4Ojpjb3VudCk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpJREJJbmRleDo6Y291bnQpOgorICAgICAgICAoSURCSW5kZXgpOgorICAg
ICAgICAqIHN0b3JhZ2UvSURCSW5kZXguaWRsOgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0
U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmRlbGV0ZUZ1bmN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpjb3VudCk6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQk9iamVjdFN0b3JlLmg6CisgICAgICAg
IChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y291bnQpOgorICAgICAgICAoSURCT2JqZWN0U3Rv
cmUpOgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmUuaWRsOgorCiAyMDEyLTAyLTIy
ICBJZ29yIE9saXZlaXJhICA8aWdvci5vQHNpc2Euc2Ftc3VuZy5jb20+CiAKICAgICAgICAgRXZl
cnkgY2FsbCB0byBSZW5kZXJPYmplY3Q6OnNldEFuaW1hdGFibGVTdHlsZSgpIGl0ZXJhdGVzIHRo
cm91Z2ggYWxsIG1fY29tcG9zaXRlQW5pbWF0aW9uczogcG90ZW50aWFsbHkgTyhOXjIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCSW5kZXguY3BwCmluZGV4IGE3YzhkZDNiYjRmN2I2ZjZkYzJjMDY1NzUw
YzYyOWM0ZmQzMmY1NTguLmIyYTMxZjYyYWQ2ZTk1ZTJhOWQ3MWU5OGFlZTQxNmE2YmRiMDI4Yjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXguY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXguY3BwCkBAIC04Nyw2ICs4NywxNSBAQCBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBQYXNzUmVmUAogICAgIHJldHVybiByZXF1ZXN0OwogfQogCitQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IElEQkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJ
REJfVFJBQ0UoIklEQkluZGV4Ojpjb3VudCIpOworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShrZXksIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiBjb3VudChjb250ZXh0LCBrZXlSYW5nZS5yZWxlYXNlKCks
IGVjKTsKK30KKwogUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6b3BlbktleUN1cnNv
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiBrZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBJREJfVFJBQ0UoIklEQkluZGV4OjpvcGVuS2V5Q3Vyc29yIik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkluZGV4LmgKaW5kZXggOTZiMzgwYmM5ODBkZDljYzJhMjhhOGZmMTk4ZjUyYzY0MWYy
ZjQ3Yi4uNDA1N2VlZDVkZGMzNTc2Mjk4YzUyOGJiYjVjMzNiZmI5YTE0ODkzYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCSW5kZXguaApAQCAtNTgsOCArNTgsOSBAQCBwdWJsaWM6CiAgICAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIDAsIGVj
KTsgfQogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5UmFuZ2UsIElE
QkN1cnNvcjo6TkVYVCwgZWMpOyB9CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vy
c29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5z
aWduZWQgc2hvcnQgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRp
b25Db2RlJiBlYykgeyByZXR1cm4gY291bnQoY29udGV4dCwgMCwgZWMpOyB9CisgICAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBF
eGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gY291bnQoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURC
S2V5UmFuZ2UqPigwKSwgZWMpOyB9CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbktleUN1cnNvcihjb250
ZXh0LCAwLCBlYyk7IH0gCiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29y
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IGtleVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbktleUN1cnNvcihjb250
ZXh0LCBrZXlSYW5nZSwgSURCQ3Vyc29yOjpORVhULCBlYyk7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXguaWRsIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJJbmRleC5pZGwKaW5kZXggNGM4ZjY1NWUzYWMyZjhiZTFmNzE1NTQzNDFkMDM3NjIzYzdiZGZm
ZS4uMWU0OWE0ZjEzNTQ1OWY2NzFmOWE2NTVjZDdiYTA2MzJjNWE3NGE3NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJJbmRleC5pZGwKQEAgLTQ0LDYgKzQ0LDggQEAgbW9kdWxlIHN0b3JhZ2Ugewog
ICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CiAgICAgICAgIFtDYWxs
V2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IGNvdW50KGluIFtPcHRpb25h
bF0gSURCS2V5UmFuZ2UgcmFuZ2UpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhj
ZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJl
cXVlc3QgY291bnQoaW4gSURCS2V5IGtleSkKKyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJh
c2VFeGNlcHRpb24pOwogICAgIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmpl
Y3RTdG9yZS5jcHAKaW5kZXggNmQ0ZmZhYjdkOTI1NTBhZTg2NTI3NTgwOTExZjAwOThiOTVkMzg2
Ni4uNWMzNDY2NmQzZmI1MWNkYjBjNWM4ZmY0YTNmY2M1MDQ1NDZmNDM0ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTEzMSw2ICsxMzEsNyBAQCBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgUGFzcwogCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0
b3JlOjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAg
SURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6ZGVsZXRlIik7CiAgICAgaWYgKCFrZXlSYW5nZSkg
ewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKICAgICAgICAg
cmV0dXJuIDA7CkBAIC0yNTcsNiArMjU4LDE1IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURC
T2JqZWN0U3RvcmU6OmNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhCiAg
ICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwogfQogCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IElEQk9iamVjdFN0b3JlOjpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQ
YXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJB
Q0UoIklEQk9iamVjdFN0b3JlOjpjb3VudCIpOworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShrZXksIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiBjb3VudChjb250ZXh0LCBrZXlSYW5nZS5yZWxlYXNlKCks
IGVjKTsKK30KKwogdm9pZCBJREJPYmplY3RTdG9yZTo6dHJhbnNhY3Rpb25GaW5pc2hlZCgpCiB7
CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24tPmZpbmlzaGVkKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJPYmplY3RTdG9yZS5oCmluZGV4IDYwYTliMWQzZjIyMGM4N2IzODBiMjBmYjY3YjY0
MTczNmEyNjE4MmIuLjUwOTA5MGVkOGRhNjJmYjM4M2E4NzEyNWM3OTg3MDhiNWJkODI0MDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmgKQEAgLTc5LDggKzc5LDkgQEAg
cHVibGljOgogICAgIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJik7CiAKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9y
dCBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmKTsgCi0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBl
YykgeyByZXR1cm4gY291bnQoY29udGV4dCwgMCwgZWMpOyB9CisgICAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25D
b2RlJiBlYykgeyByZXR1cm4gY291bnQoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2Uq
PigwKSwgZWMpOyB9CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZvaWQgdHJhbnNh
Y3Rpb25GaW5pc2hlZCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUu
aWRsCmluZGV4IDViY2FmOGVjNGM4ZTEwNTViZDYxNzNkYjQ3ZWM2YjczOTNjODY5YzYuLmFiMTIw
MGNmNDNiMDU3YjBkNTliNDgzYTczOWMzMmQyMzAwMjRlMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCT2JqZWN0U3RvcmUuaWRsCkBAIC01NSw1ICs1NSw3IEBAIG1vZHVsZSBzdG9yYWdl
IHsKICAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwogICAgICAgICBb
Q2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBjb3VudChpbiBbT3B0
aW9uYWxdIElEQktleVJhbmdlIHJhbmdlKQogICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFz
ZUV4Y2VwdGlvbik7CisgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJ
REJSZXF1ZXN0IGNvdW50KGluIElEQktleSBrZXkpCisgICAgICAgICAgICByYWlzZXMgKElEQkRh
dGFiYXNlRXhjZXB0aW9uKTsKICAgICB9OwogfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGU3YzA1YTY0OTI4ZGI2YmQ3MmQ1
ZjRjODJiMTA2ZDFhZjRkOTUwZmIuLmY2NjU2NDBjYmUyZWRmZDRmMDliNzM1NzM2ZTRlODE1YmM4
ZjY0NTggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMi0yMyAgSm9zaHVhIEJlbGwgIDxq
c2JlbGxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogSURCT2JqZWN0U3RvcmUu
Y291bnQoKSBhbmQgSURCSW5kZXguY291bnQoKSBzaG91bGQgYWNjZXB0IGtleSBhcmd1bWVudAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk0MjIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0b3JhZ2Uv
aW5kZXhlZGRiL2luZGV4LWNvdW50LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdG9yYWdlL2lu
ZGV4ZWRkYi9pbmRleC1jb3VudC5odG1sOgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL29i
amVjdHN0b3JlLWNvdW50LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRk
Yi9vYmplY3RzdG9yZS1jb3VudC5odG1sOgorCiAyMDEyLTAyLTIzICBLZW5pY2hpIElzaGliYXNo
aSAgPGJhc2hpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFVucmV2aWV3ZWQg
dGVzdCBleHBlY3RhdGlvbnMgdXBkYXRlIGZvciBmYXN0L2Nzcy9mb250LWZhY2UtZGVmYXVsdC1m
b250Lmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4
LWNvdW50LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4
LWNvdW50LWV4cGVjdGVkLnR4dAppbmRleCA1Njg2Y2IwNzcyZGU2MGI3NWE0OTdiMzMyZTAzOGQx
NGJiNjAxMjRiLi5kYTg2YjIwZWM0ZWIwYTZlMWE3MTExNjY2MzQxOWY0NTZiOWEyMGQ0IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1jb3VudC1leHBlY3Rl
ZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtY291bnQtZXhw
ZWN0ZWQudHh0CkBAIC02LDYgKzYsNyBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURQogd2luZG93
LmluZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4ZWREQgog
d2luZG93LklEQlRyYW5zYWN0aW9uID0gd2luZG93LklEQlRyYW5zYWN0aW9uIHx8IHdpbmRvdy53
ZWJraXRJREJUcmFuc2FjdGlvbgogd2luZG93LklEQktleVJhbmdlID0gd2luZG93LklEQktleVJh
bmdlIHx8IHdpbmRvdy53ZWJraXRJREJLZXlSYW5nZQord2luZG93LklEQkRhdGFiYXNlRXhjZXB0
aW9uID0gd2luZG93LklEQkRhdGFiYXNlRXhjZXB0aW9uIHx8IHdpbmRvdy53ZWJraXRJREJEYXRh
YmFzZUV4Y2VwdGlvbgogaW5kZXhlZERCLm9wZW4oJ2luZGV4LWNvdW50JykKIGRiID0gZXZlbnQu
dGFyZ2V0LnJlc3VsdAogZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24nKQpAQCAtODIsNiArODMs
MzMgQEAgdGVzdCA9IHsibG93ZXIiOjUwMCwibG93ZXJPcGVuIjpmYWxzZSwidXBwZXIiOjUwMCwi
dXBwZXJPcGVuIjpmYWxzZSwiZXhwZWN0ZWQiOjAKIHJlcXVlc3QgPSBpbmRleC5jb3VudChJREJL
ZXlSYW5nZS5ib3VuZCh0ZXN0Lmxvd2VyLCB0ZXN0LnVwcGVyLCB0ZXN0Lmxvd2VyT3BlbiwgdGVz
dC51cHBlck9wZW4pKQogUEFTUyB0eXBlb2YgcmVxdWVzdC5yZXN1bHQgPT0gJ251bWJlcicgaXMg
dHJ1ZQogUEFTUyByZXF1ZXN0LnJlc3VsdCBpcyAwCisKK3ZlcmlmeWluZyBjb3VudCB3aXRoIGtl
eQordHJhbnMgPSBkYi50cmFuc2FjdGlvbignc3RvcmVOYW1lJywgSURCVHJhbnNhY3Rpb24uUkVB
RF9PTkxZKQorUEFTUyB0cmFucyAhPSBudWxsIGlzIHRydWUKK3N0b3JlID0gdHJhbnMub2JqZWN0
U3RvcmUoJ3N0b3JlTmFtZScpCitQQVNTIHN0b3JlICE9IG51bGwgaXMgdHJ1ZQoraW5kZXggPSB0
cmFucy5vYmplY3RTdG9yZSgnc3RvcmVOYW1lJykuaW5kZXgoJ2luZGV4TmFtZScpCitQQVNTIGlu
ZGV4ICE9IG51bGwgaXMgdHJ1ZQorRXhwZWN0aW5nIGV4Y2VwdGlvbiBmcm9tIGluZGV4LmNvdW50
KE5hTikKK1BBU1MgRXhjZXB0aW9uIHdhcyB0aHJvd24uCitQQVNTIGNvZGUgaXMgSURCRGF0YWJh
c2VFeGNlcHRpb24uREFUQV9FUlIKK0V4cGVjdGluZyBleGNlcHRpb24gZnJvbSBpbmRleC5jb3Vu
dCh7fSkKK1BBU1MgRXhjZXB0aW9uIHdhcyB0aHJvd24uCitQQVNTIGNvZGUgaXMgSURCRGF0YWJh
c2VFeGNlcHRpb24uREFUQV9FUlIKK0V4cGVjdGluZyBleGNlcHRpb24gZnJvbSBpbmRleC5jb3Vu
dCgvcmVnZXgvKQorUEFTUyBFeGNlcHRpb24gd2FzIHRocm93bi4KK1BBU1MgY29kZSBpcyBJREJE
YXRhYmFzZUV4Y2VwdGlvbi5EQVRBX0VSUgorCit0ZXN0ID0geyJrZXkiOjAsImV4cGVjdGVkIjox
fQorcmVxdWVzdCA9IGluZGV4LmNvdW50KHRlc3Qua2V5KQorUEFTUyB0eXBlb2YgcmVxdWVzdC5y
ZXN1bHQgPT0gJ251bWJlcicgaXMgdHJ1ZQorUEFTUyByZXF1ZXN0LnJlc3VsdCBpcyAxCisKK3Rl
c3QgPSB7ImtleSI6MTAwLCJleHBlY3RlZCI6MH0KK3JlcXVlc3QgPSBpbmRleC5jb3VudCh0ZXN0
LmtleSkKK1BBU1MgdHlwZW9mIHJlcXVlc3QucmVzdWx0ID09ICdudW1iZXInIGlzIHRydWUKK1BB
U1MgcmVxdWVzdC5yZXN1bHQgaXMgMAogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQog
CiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9pbmRleC1jb3VudC5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgt
Y291bnQuaHRtbAppbmRleCA2ZDI0ZmUwNzI2YTE0NGY0N2YxMjBmYmU2OWFjMTU1MTk2NDgzMDM1
Li5kODIzNTllMGJlYWI1NzkxZjdmNWMwMWIxMTVmNzlkOTRiMzg1NDQ5IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1jb3VudC5odG1sCisrKyBiL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LWNvdW50Lmh0bWwKQEAgLTE3LDYgKzE3LDcg
QEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgZXZhbEFuZExvZygid2luZG93LmluZGV4ZWREQiA9IHdp
bmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4ZWREQiIpOwogICAgIGV2YWxBbmRM
b2coIndpbmRvdy5JREJUcmFuc2FjdGlvbiA9IHdpbmRvdy5JREJUcmFuc2FjdGlvbiB8fCB3aW5k
b3cud2Via2l0SURCVHJhbnNhY3Rpb24iKTsKICAgICBldmFsQW5kTG9nKCJ3aW5kb3cuSURCS2V5
UmFuZ2UgPSB3aW5kb3cuSURCS2V5UmFuZ2UgfHwgd2luZG93LndlYmtpdElEQktleVJhbmdlIik7
CisgICAgZXZhbEFuZExvZygid2luZG93LklEQkRhdGFiYXNlRXhjZXB0aW9uID0gd2luZG93LklE
QkRhdGFiYXNlRXhjZXB0aW9uIHx8IHdpbmRvdy53ZWJraXRJREJEYXRhYmFzZUV4Y2VwdGlvbiIp
OwogICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJpbmRleGVkREIub3BlbignaW5kZXgtY291bnQn
KSIpOwogICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwogICAg
IHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CkBAIC03OSw3ICs4MCw3IEBAIGZ1bmN0
aW9uIHZlcmlmeUNvdW50V2l0aFJhbmdlKCkKICAgICB0cmFucyA9IGV2YWxBbmRMb2coInRyYW5z
ID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlTmFtZScsIElEQlRyYW5zYWN0aW9uLlJFQURfT05MWSki
KTsKICAgICBzaG91bGRCZVRydWUoInRyYW5zICE9IG51bGwiKTsKICAgICB0cmFucy5vbmFib3J0
ID0gdW5leHBlY3RlZEFib3J0Q2FsbGJhY2s7Ci0gICAgdHJhbnMub25jb21wbGV0ZSA9IGRvbmU7
CisgICAgdHJhbnMub25jb21wbGV0ZSA9IHZlcmlmeUNvdW50V2l0aEtleTsKIAogICAgIHN0b3Jl
ID0gZXZhbEFuZExvZygic3RvcmUgPSB0cmFucy5vYmplY3RTdG9yZSgnc3RvcmVOYW1lJykiKTsK
ICAgICBzaG91bGRCZVRydWUoInN0b3JlICE9IG51bGwiKTsKQEAgLTExNyw2ICsxMTgsNDkgQEAg
ZnVuY3Rpb24gdmVyaWZ5Q291bnRXaXRoUmFuZ2UoKQogICAgIG5leHRUZXN0KCk7CiB9CiAKK2Z1
bmN0aW9uIHZlcmlmeUNvdW50V2l0aEtleSgpCit7CisgICAgZGVidWcoIiIpOworICAgIGRlYnVn
KCJ2ZXJpZnlpbmcgY291bnQgd2l0aCBrZXkiKTsKKyAgICB0cmFucyA9IGV2YWxBbmRMb2coInRy
YW5zID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlTmFtZScsIElEQlRyYW5zYWN0aW9uLlJFQURfT05M
WSkiKTsKKyAgICBzaG91bGRCZVRydWUoInRyYW5zICE9IG51bGwiKTsKKyAgICB0cmFucy5vbmFi
b3J0ID0gdW5leHBlY3RlZEFib3J0Q2FsbGJhY2s7CisgICAgdHJhbnMub25jb21wbGV0ZSA9IGRv
bmU7CisKKyAgICBzdG9yZSA9IGV2YWxBbmRMb2coInN0b3JlID0gdHJhbnMub2JqZWN0U3RvcmUo
J3N0b3JlTmFtZScpIik7CisgICAgc2hvdWxkQmVUcnVlKCJzdG9yZSAhPSBudWxsIik7CisgICAg
c3RvcmUgPSBldmFsQW5kTG9nKCJpbmRleCA9IHRyYW5zLm9iamVjdFN0b3JlKCdzdG9yZU5hbWUn
KS5pbmRleCgnaW5kZXhOYW1lJykiKTsKKyAgICBzaG91bGRCZVRydWUoImluZGV4ICE9IG51bGwi
KTsKKworICAgIGV2YWxBbmRFeHBlY3RFeGNlcHRpb24oImluZGV4LmNvdW50KE5hTikiLCAiSURC
RGF0YWJhc2VFeGNlcHRpb24uREFUQV9FUlIiKTsKKyAgICBldmFsQW5kRXhwZWN0RXhjZXB0aW9u
KCJpbmRleC5jb3VudCh7fSkiLCAiSURCRGF0YWJhc2VFeGNlcHRpb24uREFUQV9FUlIiKTsKKyAg
ICBldmFsQW5kRXhwZWN0RXhjZXB0aW9uKCJpbmRleC5jb3VudCgvcmVnZXgvKSIsICJJREJEYXRh
YmFzZUV4Y2VwdGlvbi5EQVRBX0VSUiIpOworCisKKyAgICB2YXIgdGVzdHMgPSBbCisgICAgICAg
IHsga2V5OiAwLCBleHBlY3RlZDogMSB9LAorICAgICAgICB7IGtleTogMTAwLCBleHBlY3RlZDog
MCB9CisgICAgXTsKKworICAgIGZ1bmN0aW9uIG5leHRUZXN0KCkgeworICAgICAgICBkZWJ1Zygi
Iik7CisgICAgICAgIGV2YWxBbmRMb2coInRlc3QgPSAiICsgSlNPTi5zdHJpbmdpZnkodGVzdHMu
c2hpZnQoKSkpOworICAgICAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygicmVxdWVzdCA9IGluZGV4
LmNvdW50KHRlc3Qua2V5KSIpOworICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVk
RXJyb3JDYWxsYmFjazsKKyAgICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICBzaG91bGRCZVRydWUoInR5cGVvZiByZXF1ZXN0LnJlc3VsdCA9PSAnbnVt
YmVyJyIpOworICAgICAgICAgICAgIHNob3VsZEJlKCJyZXF1ZXN0LnJlc3VsdCIsIFN0cmluZyh0
ZXN0LmV4cGVjdGVkKSk7CisKKyAgICAgICAgICAgICBpZiAodGVzdHMubGVuZ3RoKSB7CisgICAg
ICAgICAgICAgICAgIG5leHRUZXN0KCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIC8v
IG90aGVyd2lzZSBsZXQgdGhlIHRyYW5zYWN0aW9uIGNvbXBsZXRlCisgICAgICAgIH07CisgICAg
fQorCisgICAgbmV4dFRlc3QoKTsKK30KKwogdGVzdCgpOwogCiA8L3NjcmlwdD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWNvdW50LWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWNvdW50
LWV4cGVjdGVkLnR4dAppbmRleCA5ODgyY2U0N2FiMWU3MjczMzZhYzRkZmM1OTg3Nzk2MWZmYWQ5
MThmLi5kNTc0Yzc1YzBmZWVlNjJlMjE4ZjMzYTViMzlkNzMzYThhNmI2M2IyIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1jb3VudC1leHBlY3Rl
ZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtY291
bnQtZXhwZWN0ZWQudHh0CkBAIC02LDYgKzYsNyBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURQog
d2luZG93LmluZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4
ZWREQgogd2luZG93LklEQlRyYW5zYWN0aW9uID0gd2luZG93LklEQlRyYW5zYWN0aW9uIHx8IHdp
bmRvdy53ZWJraXRJREJUcmFuc2FjdGlvbgogd2luZG93LklEQktleVJhbmdlID0gd2luZG93LklE
QktleVJhbmdlIHx8IHdpbmRvdy53ZWJraXRJREJLZXlSYW5nZQord2luZG93LklEQkRhdGFiYXNl
RXhjZXB0aW9uID0gd2luZG93LklEQkRhdGFiYXNlRXhjZXB0aW9uIHx8IHdpbmRvdy53ZWJraXRJ
REJEYXRhYmFzZUV4Y2VwdGlvbgogaW5kZXhlZERCLm9wZW4oJ29iamVjdHN0b3JlLWNvdW50JykK
IGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdAogZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24nKQpA
QCAtNzYsNiArNzcsMzEgQEAgdGVzdCA9IHsibG93ZXIiOjUwMCwibG93ZXJPcGVuIjpmYWxzZSwi
dXBwZXIiOjUwMCwidXBwZXJPcGVuIjpmYWxzZSwiZXhwZWN0ZWQiOjAKIHJlcXVlc3QgPSBzdG9y
ZS5jb3VudChJREJLZXlSYW5nZS5ib3VuZCh0ZXN0Lmxvd2VyLCB0ZXN0LnVwcGVyLCB0ZXN0Lmxv
d2VyT3BlbiwgdGVzdC51cHBlck9wZW4pKQogUEFTUyB0eXBlb2YgcmVxdWVzdC5yZXN1bHQgPT0g
J251bWJlcicgaXMgdHJ1ZQogUEFTUyByZXF1ZXN0LnJlc3VsdCBpcyAwCisKK3ZlcmlmeWluZyBj
b3VudCB3aXRoIGtleQordHJhbnMgPSBkYi50cmFuc2FjdGlvbignc3RvcmVOYW1lJywgSURCVHJh
bnNhY3Rpb24uUkVBRF9PTkxZKQorUEFTUyB0cmFucyAhPSBudWxsIGlzIHRydWUKK3N0b3JlID0g
dHJhbnMub2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScpCitQQVNTIHN0b3JlICE9IG51bGwgaXMgdHJ1
ZQorRXhwZWN0aW5nIGV4Y2VwdGlvbiBmcm9tIHN0b3JlLmNvdW50KE5hTikKK1BBU1MgRXhjZXB0
aW9uIHdhcyB0aHJvd24uCitQQVNTIGNvZGUgaXMgSURCRGF0YWJhc2VFeGNlcHRpb24uREFUQV9F
UlIKK0V4cGVjdGluZyBleGNlcHRpb24gZnJvbSBzdG9yZS5jb3VudCh7fSkKK1BBU1MgRXhjZXB0
aW9uIHdhcyB0aHJvd24uCitQQVNTIGNvZGUgaXMgSURCRGF0YWJhc2VFeGNlcHRpb24uREFUQV9F
UlIKK0V4cGVjdGluZyBleGNlcHRpb24gZnJvbSBzdG9yZS5jb3VudCgvcmVnZXgvKQorUEFTUyBF
eGNlcHRpb24gd2FzIHRocm93bi4KK1BBU1MgY29kZSBpcyBJREJEYXRhYmFzZUV4Y2VwdGlvbi5E
QVRBX0VSUgorCit0ZXN0ID0geyJrZXkiOjAsImV4cGVjdGVkIjoxfQorcmVxdWVzdCA9IHN0b3Jl
LmNvdW50KHRlc3Qua2V5KQorUEFTUyB0eXBlb2YgcmVxdWVzdC5yZXN1bHQgPT0gJ251bWJlcicg
aXMgdHJ1ZQorUEFTUyByZXF1ZXN0LnJlc3VsdCBpcyAxCisKK3Rlc3QgPSB7ImtleSI6MTAwLCJl
eHBlY3RlZCI6MH0KK3JlcXVlc3QgPSBzdG9yZS5jb3VudCh0ZXN0LmtleSkKK1BBU1MgdHlwZW9m
IHJlcXVlc3QucmVzdWx0ID09ICdudW1iZXInIGlzIHRydWUKK1BBU1MgcmVxdWVzdC5yZXN1bHQg
aXMgMAogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1jb3Vu
dC5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtY291bnQu
aHRtbAppbmRleCAzOTBmYjk3MDcwMmM1Y2NiOTJkMDZhMTEzNWYyN2RlMDI4YmU1OGY0Li4yN2Nh
NmMwODNkMWVhYzBiNzg0ODNlMDFmODgwN2E5YWUxYzUzYTZmIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1jb3VudC5odG1sCisrKyBiL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWNvdW50Lmh0bWwKQEAgLTE3LDYg
KzE3LDcgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgZXZhbEFuZExvZygid2luZG93LmluZGV4ZWRE
QiA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4ZWREQiIpOwogICAgIGV2
YWxBbmRMb2coIndpbmRvdy5JREJUcmFuc2FjdGlvbiA9IHdpbmRvdy5JREJUcmFuc2FjdGlvbiB8
fCB3aW5kb3cud2Via2l0SURCVHJhbnNhY3Rpb24iKTsKICAgICBldmFsQW5kTG9nKCJ3aW5kb3cu
SURCS2V5UmFuZ2UgPSB3aW5kb3cuSURCS2V5UmFuZ2UgfHwgd2luZG93LndlYmtpdElEQktleVJh
bmdlIik7CisgICAgZXZhbEFuZExvZygid2luZG93LklEQkRhdGFiYXNlRXhjZXB0aW9uID0gd2lu
ZG93LklEQkRhdGFiYXNlRXhjZXB0aW9uIHx8IHdpbmRvdy53ZWJraXRJREJEYXRhYmFzZUV4Y2Vw
dGlvbiIpOwogICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJpbmRleGVkREIub3Blbignb2JqZWN0
c3RvcmUtY291bnQnKSIpOwogICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNh
bGxiYWNrOwogICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CkBAIC03NCw3ICs3
NSw3IEBAIGZ1bmN0aW9uIHZlcmlmeUNvdW50V2l0aFJhbmdlKCkKICAgICB0cmFucyA9IGV2YWxB
bmRMb2coInRyYW5zID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlTmFtZScsIElEQlRyYW5zYWN0aW9u
LlJFQURfT05MWSkiKTsKICAgICBzaG91bGRCZVRydWUoInRyYW5zICE9IG51bGwiKTsKICAgICB0
cmFucy5vbmFib3J0ID0gdW5leHBlY3RlZEFib3J0Q2FsbGJhY2s7Ci0gICAgdHJhbnMub25jb21w
bGV0ZSA9IGRvbmU7CisgICAgdHJhbnMub25jb21wbGV0ZSA9IHZlcmlmeUNvdW50V2l0aEtleTsK
IAogICAgIHN0b3JlID0gZXZhbEFuZExvZygic3RvcmUgPSB0cmFucy5vYmplY3RTdG9yZSgnc3Rv
cmVOYW1lJykiKTsKICAgICBzaG91bGRCZVRydWUoInN0b3JlICE9IG51bGwiKTsKQEAgLTExMCw2
ICsxMTEsNDUgQEAgZnVuY3Rpb24gdmVyaWZ5Q291bnRXaXRoUmFuZ2UoKQogICAgIG5leHRUZXN0
KCk7CiB9CiAKK2Z1bmN0aW9uIHZlcmlmeUNvdW50V2l0aEtleSgpCit7CisgICAgZGVidWcoIiIp
OworICAgIGRlYnVnKCJ2ZXJpZnlpbmcgY291bnQgd2l0aCBrZXkiKTsKKyAgICB0cmFucyA9IGV2
YWxBbmRMb2coInRyYW5zID0gZGIudHJhbnNhY3Rpb24oJ3N0b3JlTmFtZScsIElEQlRyYW5zYWN0
aW9uLlJFQURfT05MWSkiKTsKKyAgICBzaG91bGRCZVRydWUoInRyYW5zICE9IG51bGwiKTsKKyAg
ICB0cmFucy5vbmFib3J0ID0gdW5leHBlY3RlZEFib3J0Q2FsbGJhY2s7CisgICAgdHJhbnMub25j
b21wbGV0ZSA9IGRvbmU7CisKKyAgICBzdG9yZSA9IGV2YWxBbmRMb2coInN0b3JlID0gdHJhbnMu
b2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScpIik7CisgICAgc2hvdWxkQmVUcnVlKCJzdG9yZSAhPSBu
dWxsIik7CisKKyAgICBldmFsQW5kRXhwZWN0RXhjZXB0aW9uKCJzdG9yZS5jb3VudChOYU4pIiwg
IklEQkRhdGFiYXNlRXhjZXB0aW9uLkRBVEFfRVJSIik7CisgICAgZXZhbEFuZEV4cGVjdEV4Y2Vw
dGlvbigic3RvcmUuY291bnQoe30pIiwgIklEQkRhdGFiYXNlRXhjZXB0aW9uLkRBVEFfRVJSIik7
CisgICAgZXZhbEFuZEV4cGVjdEV4Y2VwdGlvbigic3RvcmUuY291bnQoL3JlZ2V4LykiLCAiSURC
RGF0YWJhc2VFeGNlcHRpb24uREFUQV9FUlIiKTsKKworICAgIHZhciB0ZXN0cyA9IFsKKyAgICAg
ICAgeyBrZXk6IDAsIGV4cGVjdGVkOiAxIH0sCisgICAgICAgIHsga2V5OiAxMDAsIGV4cGVjdGVk
OiAwIH0KKyAgICBdOworCisgICAgZnVuY3Rpb24gbmV4dFRlc3QoKSB7CisgICAgICAgIGRlYnVn
KCIiKTsKKyAgICAgICAgZXZhbEFuZExvZygidGVzdCA9ICIgKyBKU09OLnN0cmluZ2lmeSh0ZXN0
cy5zaGlmdCgpKSk7CisgICAgICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJyZXF1ZXN0ID0gc3Rv
cmUuY291bnQodGVzdC5rZXkpIik7CisgICAgICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0
ZWRFcnJvckNhbGxiYWNrOworICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgc2hvdWxkQmVUcnVlKCJ0eXBlb2YgcmVxdWVzdC5yZXN1bHQgPT0gJ251
bWJlciciKTsKKyAgICAgICAgICAgIHNob3VsZEJlKCJyZXF1ZXN0LnJlc3VsdCIsIFN0cmluZyh0
ZXN0LmV4cGVjdGVkKSk7CisgICAgICAgICAgICAgaWYgKHRlc3RzLmxlbmd0aCkgeworICAgICAg
ICAgICAgICAgICBuZXh0VGVzdCgpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAvLyBv
dGhlcndpc2UgbGV0IHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0ZQorICAgICAgICB9OworICAgIH0K
KworICAgIG5leHRUZXN0KCk7Cit9CisKIHRlc3QoKTsKIAogPC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128756</attachid>
            <date>2012-02-24 10:33:40 -0800</date>
            <delta_ts>2012-02-24 14:56:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79422-20120224103339.patch</filename>
            <type>text/plain</type>
            <size>18029</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NjE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTdkNDY4ZDQyODkxMzc5
YjNlNjA3MTU2N2ViMzNhNmYwZTY4ZWM1ZS4uZDg2YzMxYWVkMTdkNTUzMjFkNDU2MTViYmVlZmRl
NGE2NTJkY2NlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTAyLTIzICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBJREJP
YmplY3RTdG9yZS5jb3VudCgpIGFuZCBJREJJbmRleC5jb3VudCgpIHNob3VsZCBhY2NlcHQga2V5
IGFyZ3VtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03OTQyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRlc3RzOiBzdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1jb3VudC5odG1sCisgICAgICAgICAgICAg
ICBzdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1jb3VudC5odG1sCisKKyAgICAgICAgKiBz
dG9yYWdlL0lEQkluZGV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4Ojpjb3VudCk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpJREJJbmRleDo6Y291bnQpOgorICAgICAgICAoSURCSW5kZXgpOgorICAg
ICAgICAqIHN0b3JhZ2UvSURCSW5kZXguaWRsOgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0
U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmRlbGV0ZUZ1bmN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpjb3VudCk6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQk9iamVjdFN0b3JlLmg6CisgICAgICAg
IChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y291bnQpOgorICAgICAgICAoSURCT2JqZWN0U3Rv
cmUpOgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmUuaWRsOgorCiAyMDEyLTAyLTIy
ICBJZ29yIE9saXZlaXJhICA8aWdvci5vQHNpc2Euc2Ftc3VuZy5jb20+CiAKICAgICAgICAgRXZl
cnkgY2FsbCB0byBSZW5kZXJPYmplY3Q6OnNldEFuaW1hdGFibGVTdHlsZSgpIGl0ZXJhdGVzIHRo
cm91Z2ggYWxsIG1fY29tcG9zaXRlQW5pbWF0aW9uczogcG90ZW50aWFsbHkgTyhOXjIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCSW5kZXguY3BwCmluZGV4IGE3YzhkZDNiYjRmN2I2ZjZkYzJjMDY1NzUw
YzYyOWM0ZmQzMmY1NTguLmIyYTMxZjYyYWQ2ZTk1ZTJhOWQ3MWU5OGFlZTQxNmE2YmRiMDI4Yjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXguY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXguY3BwCkBAIC04Nyw2ICs4NywxNSBAQCBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBQYXNzUmVmUAogICAgIHJldHVybiByZXF1ZXN0OwogfQogCitQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IElEQkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJ
REJfVFJBQ0UoIklEQkluZGV4Ojpjb3VudCIpOworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShrZXksIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiBjb3VudChjb250ZXh0LCBrZXlSYW5nZS5yZWxlYXNlKCks
IGVjKTsKK30KKwogUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6b3BlbktleUN1cnNv
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiBrZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBJREJfVFJBQ0UoIklEQkluZGV4OjpvcGVuS2V5Q3Vyc29yIik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkluZGV4LmgKaW5kZXggOTZiMzgwYmM5ODBkZDljYzJhMjhhOGZmMTk4ZjUyYzY0MWYy
ZjQ3Yi4uNDA1N2VlZDVkZGMzNTc2Mjk4YzUyOGJiYjVjMzNiZmI5YTE0ODkzYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCSW5kZXguaApAQCAtNTgsOCArNTgsOSBAQCBwdWJsaWM6CiAgICAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIDAsIGVj
KTsgfQogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5UmFuZ2UsIElE
QkN1cnNvcjo6TkVYVCwgZWMpOyB9CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vy
c29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5z
aWduZWQgc2hvcnQgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRp
b25Db2RlJiBlYykgeyByZXR1cm4gY291bnQoY29udGV4dCwgMCwgZWMpOyB9CisgICAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBF
eGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gY291bnQoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURC
S2V5UmFuZ2UqPigwKSwgZWMpOyB9CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbktleUN1cnNvcihjb250
ZXh0LCAwLCBlYyk7IH0gCiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29y
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IGtleVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbktleUN1cnNvcihjb250
ZXh0LCBrZXlSYW5nZSwgSURCQ3Vyc29yOjpORVhULCBlYyk7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXguaWRsIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJJbmRleC5pZGwKaW5kZXggNGM4ZjY1NWUzYWMyZjhiZTFmNzE1NTQzNDFkMDM3NjIzYzdiZGZm
ZS4uMWU0OWE0ZjEzNTQ1OWY2NzFmOWE2NTVjZDdiYTA2MzJjNWE3NGE3NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJJbmRleC5pZGwKQEAgLTQ0LDYgKzQ0LDggQEAgbW9kdWxlIHN0b3JhZ2Ugewog
ICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CiAgICAgICAgIFtDYWxs
V2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IGNvdW50KGluIFtPcHRpb25h
bF0gSURCS2V5UmFuZ2UgcmFuZ2UpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhj
ZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJl
cXVlc3QgY291bnQoaW4gSURCS2V5IGtleSkKKyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJh
c2VFeGNlcHRpb24pOwogICAgIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmpl
Y3RTdG9yZS5jcHAKaW5kZXggNmQ0ZmZhYjdkOTI1NTBhZTg2NTI3NTgwOTExZjAwOThiOTVkMzg2
Ni4uNWMzNDY2NmQzZmI1MWNkYjBjNWM4ZmY0YTNmY2M1MDQ1NDZmNDM0ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTEzMSw2ICsxMzEsNyBAQCBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgUGFzcwogCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0
b3JlOjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAg
SURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6ZGVsZXRlIik7CiAgICAgaWYgKCFrZXlSYW5nZSkg
ewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKICAgICAgICAg
cmV0dXJuIDA7CkBAIC0yNTcsNiArMjU4LDE1IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURC
T2JqZWN0U3RvcmU6OmNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhCiAg
ICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwogfQogCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IElEQk9iamVjdFN0b3JlOjpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQ
YXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJB
Q0UoIklEQk9iamVjdFN0b3JlOjpjb3VudCIpOworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShrZXksIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiBjb3VudChjb250ZXh0LCBrZXlSYW5nZS5yZWxlYXNlKCks
IGVjKTsKK30KKwogdm9pZCBJREJPYmplY3RTdG9yZTo6dHJhbnNhY3Rpb25GaW5pc2hlZCgpCiB7
CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24tPmZpbmlzaGVkKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJPYmplY3RTdG9yZS5oCmluZGV4IDYwYTliMWQzZjIyMGM4N2IzODBiMjBmYjY3YjY0
MTczNmEyNjE4MmIuLjUwOTA5MGVkOGRhNjJmYjM4M2E4NzEyNWM3OTg3MDhiNWJkODI0MDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmgKQEAgLTc5LDggKzc5LDkgQEAg
cHVibGljOgogICAgIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJik7CiAKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9y
dCBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmKTsgCi0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBl
YykgeyByZXR1cm4gY291bnQoY29udGV4dCwgMCwgZWMpOyB9CisgICAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25D
b2RlJiBlYykgeyByZXR1cm4gY291bnQoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2Uq
PigwKSwgZWMpOyB9CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZvaWQgdHJhbnNh
Y3Rpb25GaW5pc2hlZCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUu
aWRsCmluZGV4IDViY2FmOGVjNGM4ZTEwNTViZDYxNzNkYjQ3ZWM2YjczOTNjODY5YzYuLmFiMTIw
MGNmNDNiMDU3YjBkNTliNDgzYTczOWMzMmQyMzAwMjRlMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCT2JqZWN0U3RvcmUuaWRsCkBAIC01NSw1ICs1NSw3IEBAIG1vZHVsZSBzdG9yYWdl
IHsKICAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwogICAgICAgICBb
Q2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBjb3VudChpbiBbT3B0
aW9uYWxdIElEQktleVJhbmdlIHJhbmdlKQogICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFz
ZUV4Y2VwdGlvbik7CisgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJ
REJSZXF1ZXN0IGNvdW50KGluIElEQktleSBrZXkpCisgICAgICAgICAgICByYWlzZXMgKElEQkRh
dGFiYXNlRXhjZXB0aW9uKTsKICAgICB9OwogfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGU3YzA1YTY0OTI4ZGI2YmQ3MmQ1
ZjRjODJiMTA2ZDFhZjRkOTUwZmIuLmY2NjU2NDBjYmUyZWRmZDRmMDliNzM1NzM2ZTRlODE1YmM4
ZjY0NTggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMi0yMyAgSm9zaHVhIEJlbGwgIDxq
c2JlbGxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogSURCT2JqZWN0U3RvcmUu
Y291bnQoKSBhbmQgSURCSW5kZXguY291bnQoKSBzaG91bGQgYWNjZXB0IGtleSBhcmd1bWVudAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk0MjIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0b3JhZ2Uv
aW5kZXhlZGRiL2luZGV4LWNvdW50LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdG9yYWdlL2lu
ZGV4ZWRkYi9pbmRleC1jb3VudC5odG1sOgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL29i
amVjdHN0b3JlLWNvdW50LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRk
Yi9vYmplY3RzdG9yZS1jb3VudC5odG1sOgorCiAyMDEyLTAyLTIzICBLZW5pY2hpIElzaGliYXNo
aSAgPGJhc2hpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFVucmV2aWV3ZWQg
dGVzdCBleHBlY3RhdGlvbnMgdXBkYXRlIGZvciBmYXN0L2Nzcy9mb250LWZhY2UtZGVmYXVsdC1m
b250Lmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4
LWNvdW50LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4
LWNvdW50LWV4cGVjdGVkLnR4dAppbmRleCA1Njg2Y2IwNzcyZGU2MGI3NWE0OTdiMzMyZTAzOGQx
NGJiNjAxMjRiLi4wMGZhNGE0ZGQ4Njk5MGY4N2FlNGZjMzc5OTdkMmExNjI1MGQ3ZmEwIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1jb3VudC1leHBlY3Rl
ZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtY291bnQtZXhw
ZWN0ZWQudHh0CkBAIC02LDYgKzYsNyBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURQogd2luZG93
LmluZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4ZWREQgog
d2luZG93LklEQlRyYW5zYWN0aW9uID0gd2luZG93LklEQlRyYW5zYWN0aW9uIHx8IHdpbmRvdy53
ZWJraXRJREJUcmFuc2FjdGlvbgogd2luZG93LklEQktleVJhbmdlID0gd2luZG93LklEQktleVJh
bmdlIHx8IHdpbmRvdy53ZWJraXRJREJLZXlSYW5nZQord2luZG93LklEQkRhdGFiYXNlRXhjZXB0
aW9uID0gd2luZG93LklEQkRhdGFiYXNlRXhjZXB0aW9uIHx8IHdpbmRvdy53ZWJraXRJREJEYXRh
YmFzZUV4Y2VwdGlvbgogaW5kZXhlZERCLm9wZW4oJ2luZGV4LWNvdW50JykKIGRiID0gZXZlbnQu
dGFyZ2V0LnJlc3VsdAogZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24nKQpAQCAtODIsNiArODMs
MzggQEAgdGVzdCA9IHsibG93ZXIiOjUwMCwibG93ZXJPcGVuIjpmYWxzZSwidXBwZXIiOjUwMCwi
dXBwZXJPcGVuIjpmYWxzZSwiZXhwZWN0ZWQiOjAKIHJlcXVlc3QgPSBpbmRleC5jb3VudChJREJL
ZXlSYW5nZS5ib3VuZCh0ZXN0Lmxvd2VyLCB0ZXN0LnVwcGVyLCB0ZXN0Lmxvd2VyT3BlbiwgdGVz
dC51cHBlck9wZW4pKQogUEFTUyB0eXBlb2YgcmVxdWVzdC5yZXN1bHQgPT0gJ251bWJlcicgaXMg
dHJ1ZQogUEFTUyByZXF1ZXN0LnJlc3VsdCBpcyAwCisKK3ZlcmlmeWluZyBjb3VudCB3aXRoIGtl
eQordHJhbnMgPSBkYi50cmFuc2FjdGlvbignc3RvcmVOYW1lJywgSURCVHJhbnNhY3Rpb24uUkVB
RF9PTkxZKQorUEFTUyB0cmFucyAhPSBudWxsIGlzIHRydWUKK3N0b3JlID0gdHJhbnMub2JqZWN0
U3RvcmUoJ3N0b3JlTmFtZScpCitQQVNTIHN0b3JlICE9IG51bGwgaXMgdHJ1ZQoraW5kZXggPSB0
cmFucy5vYmplY3RTdG9yZSgnc3RvcmVOYW1lJykuaW5kZXgoJ2luZGV4TmFtZScpCitQQVNTIGlu
ZGV4ICE9IG51bGwgaXMgdHJ1ZQorRXhwZWN0aW5nIGV4Y2VwdGlvbiBmcm9tIGluZGV4LmNvdW50
KE5hTikKK1BBU1MgRXhjZXB0aW9uIHdhcyB0aHJvd24uCitQQVNTIGNvZGUgaXMgSURCRGF0YWJh
c2VFeGNlcHRpb24uREFUQV9FUlIKK0V4cGVjdGluZyBleGNlcHRpb24gZnJvbSBpbmRleC5jb3Vu
dCh7fSkKK1BBU1MgRXhjZXB0aW9uIHdhcyB0aHJvd24uCitQQVNTIGNvZGUgaXMgSURCRGF0YWJh
c2VFeGNlcHRpb24uREFUQV9FUlIKK0V4cGVjdGluZyBleGNlcHRpb24gZnJvbSBpbmRleC5jb3Vu
dCgvcmVnZXgvKQorUEFTUyBFeGNlcHRpb24gd2FzIHRocm93bi4KK1BBU1MgY29kZSBpcyBJREJE
YXRhYmFzZUV4Y2VwdGlvbi5EQVRBX0VSUgorCit0ZXN0ID0geyJrZXkiOjAsImV4cGVjdGVkIjox
fQorcmVxdWVzdCA9IGluZGV4LmNvdW50KHRlc3Qua2V5KQorUEFTUyB0eXBlb2YgcmVxdWVzdC5y
ZXN1bHQgPT0gJ251bWJlcicgaXMgdHJ1ZQorUEFTUyByZXF1ZXN0LnJlc3VsdCBpcyAxCisKK3Rl
c3QgPSB7ImtleSI6MTAwLCJleHBlY3RlZCI6MH0KK3JlcXVlc3QgPSBpbmRleC5jb3VudCh0ZXN0
LmtleSkKK1BBU1MgdHlwZW9mIHJlcXVlc3QucmVzdWx0ID09ICdudW1iZXInIGlzIHRydWUKK1BB
U1MgcmVxdWVzdC5yZXN1bHQgaXMgMAorCit0ZXN0ID0geyJrZXkiOm51bGwsImV4cGVjdGVkIjox
MDB9CityZXF1ZXN0ID0gaW5kZXguY291bnQodGVzdC5rZXkpCitQQVNTIHR5cGVvZiByZXF1ZXN0
LnJlc3VsdCA9PSAnbnVtYmVyJyBpcyB0cnVlCitQQVNTIHJlcXVlc3QucmVzdWx0IGlzIDEwMAog
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1jb3VudC5odG1sIGIvTGF5
b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtY291bnQuaHRtbAppbmRleCA2ZDI0ZmUw
NzI2YTE0NGY0N2YxMjBmYmU2OWFjMTU1MTk2NDgzMDM1Li4wZjgzMWZlMjNjNjRlMzZkNGNhNzIz
MzYyMzFmMTYzMmVjN2RkNmU0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9pbmRleC1jb3VudC5odG1sCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L2luZGV4LWNvdW50Lmh0bWwKQEAgLTE3LDYgKzE3LDcgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAg
ZXZhbEFuZExvZygid2luZG93LmluZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2luZG93
LndlYmtpdEluZGV4ZWREQiIpOwogICAgIGV2YWxBbmRMb2coIndpbmRvdy5JREJUcmFuc2FjdGlv
biA9IHdpbmRvdy5JREJUcmFuc2FjdGlvbiB8fCB3aW5kb3cud2Via2l0SURCVHJhbnNhY3Rpb24i
KTsKICAgICBldmFsQW5kTG9nKCJ3aW5kb3cuSURCS2V5UmFuZ2UgPSB3aW5kb3cuSURCS2V5UmFu
Z2UgfHwgd2luZG93LndlYmtpdElEQktleVJhbmdlIik7CisgICAgZXZhbEFuZExvZygid2luZG93
LklEQkRhdGFiYXNlRXhjZXB0aW9uID0gd2luZG93LklEQkRhdGFiYXNlRXhjZXB0aW9uIHx8IHdp
bmRvdy53ZWJraXRJREJEYXRhYmFzZUV4Y2VwdGlvbiIpOwogICAgIHJlcXVlc3QgPSBldmFsQW5k
TG9nKCJpbmRleGVkREIub3BlbignaW5kZXgtY291bnQnKSIpOwogICAgIHJlcXVlc3Qub25lcnJv
ciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwogICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVu
Y3Rpb24oKSB7CkBAIC03OSw3ICs4MCw3IEBAIGZ1bmN0aW9uIHZlcmlmeUNvdW50V2l0aFJhbmdl
KCkKICAgICB0cmFucyA9IGV2YWxBbmRMb2coInRyYW5zID0gZGIudHJhbnNhY3Rpb24oJ3N0b3Jl
TmFtZScsIElEQlRyYW5zYWN0aW9uLlJFQURfT05MWSkiKTsKICAgICBzaG91bGRCZVRydWUoInRy
YW5zICE9IG51bGwiKTsKICAgICB0cmFucy5vbmFib3J0ID0gdW5leHBlY3RlZEFib3J0Q2FsbGJh
Y2s7Ci0gICAgdHJhbnMub25jb21wbGV0ZSA9IGRvbmU7CisgICAgdHJhbnMub25jb21wbGV0ZSA9
IHZlcmlmeUNvdW50V2l0aEtleTsKIAogICAgIHN0b3JlID0gZXZhbEFuZExvZygic3RvcmUgPSB0
cmFucy5vYmplY3RTdG9yZSgnc3RvcmVOYW1lJykiKTsKICAgICBzaG91bGRCZVRydWUoInN0b3Jl
ICE9IG51bGwiKTsKQEAgLTExNyw2ICsxMTgsNDkgQEAgZnVuY3Rpb24gdmVyaWZ5Q291bnRXaXRo
UmFuZ2UoKQogICAgIG5leHRUZXN0KCk7CiB9CiAKK2Z1bmN0aW9uIHZlcmlmeUNvdW50V2l0aEtl
eSgpCit7CisgICAgZGVidWcoIiIpOworICAgIGRlYnVnKCJ2ZXJpZnlpbmcgY291bnQgd2l0aCBr
ZXkiKTsKKyAgICB0cmFucyA9IGV2YWxBbmRMb2coInRyYW5zID0gZGIudHJhbnNhY3Rpb24oJ3N0
b3JlTmFtZScsIElEQlRyYW5zYWN0aW9uLlJFQURfT05MWSkiKTsKKyAgICBzaG91bGRCZVRydWUo
InRyYW5zICE9IG51bGwiKTsKKyAgICB0cmFucy5vbmFib3J0ID0gdW5leHBlY3RlZEFib3J0Q2Fs
bGJhY2s7CisgICAgdHJhbnMub25jb21wbGV0ZSA9IGRvbmU7CisKKyAgICBzdG9yZSA9IGV2YWxB
bmRMb2coInN0b3JlID0gdHJhbnMub2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScpIik7CisgICAgc2hv
dWxkQmVUcnVlKCJzdG9yZSAhPSBudWxsIik7CisgICAgc3RvcmUgPSBldmFsQW5kTG9nKCJpbmRl
eCA9IHRyYW5zLm9iamVjdFN0b3JlKCdzdG9yZU5hbWUnKS5pbmRleCgnaW5kZXhOYW1lJykiKTsK
KyAgICBzaG91bGRCZVRydWUoImluZGV4ICE9IG51bGwiKTsKKworICAgIGV2YWxBbmRFeHBlY3RF
eGNlcHRpb24oImluZGV4LmNvdW50KE5hTikiLCAiSURCRGF0YWJhc2VFeGNlcHRpb24uREFUQV9F
UlIiKTsKKyAgICBldmFsQW5kRXhwZWN0RXhjZXB0aW9uKCJpbmRleC5jb3VudCh7fSkiLCAiSURC
RGF0YWJhc2VFeGNlcHRpb24uREFUQV9FUlIiKTsKKyAgICBldmFsQW5kRXhwZWN0RXhjZXB0aW9u
KCJpbmRleC5jb3VudCgvcmVnZXgvKSIsICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5EQVRBX0VSUiIp
OworCisgICAgdmFyIHRlc3RzID0gWworICAgICAgICB7IGtleTogMCwgZXhwZWN0ZWQ6IDEgfSwK
KyAgICAgICAgeyBrZXk6IDEwMCwgZXhwZWN0ZWQ6IDAgfSwKKyAgICAgICAgeyBrZXk6IG51bGws
IGV4cGVjdGVkOiAxMDAgfQorICAgIF07CisKKyAgICBmdW5jdGlvbiBuZXh0VGVzdCgpIHsKKyAg
ICAgICAgZGVidWcoIiIpOworICAgICAgICBldmFsQW5kTG9nKCJ0ZXN0ID0gIiArIEpTT04uc3Ry
aW5naWZ5KHRlc3RzLnNoaWZ0KCkpKTsKKyAgICAgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coInJl
cXVlc3QgPSBpbmRleC5jb3VudCh0ZXN0LmtleSkiKTsKKyAgICAgICAgcmVxdWVzdC5vbmVycm9y
ID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgc2hvdWxkQmVUcnVlKCJ0eXBlb2YgcmVxdWVzdC5y
ZXN1bHQgPT0gJ251bWJlciciKTsKKyAgICAgICAgICAgICBzaG91bGRCZSgicmVxdWVzdC5yZXN1
bHQiLCBTdHJpbmcodGVzdC5leHBlY3RlZCkpOworCisgICAgICAgICAgICAgaWYgKHRlc3RzLmxl
bmd0aCkgeworICAgICAgICAgICAgICAgICBuZXh0VGVzdCgpOworICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAvLyBvdGhlcndpc2UgbGV0IHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0ZQorICAg
ICAgICB9OworICAgIH0KKworICAgIG5leHRUZXN0KCk7Cit9CisKIHRlc3QoKTsKIAogPC9zY3Jp
cHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9y
ZS1jb3VudC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmpl
Y3RzdG9yZS1jb3VudC1leHBlY3RlZC50eHQKaW5kZXggOTg4MmNlNDdhYjFlNzI3MzM2YWM0ZGZj
NTk4Nzc5NjFmZmFkOTE4Zi4uMWVmNThkZjY0N2Y1MTI1Njk2NDViNzc5ZTRmNWQ2ODhhY2NhNTRj
MiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUt
Y291bnQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29i
amVjdHN0b3JlLWNvdW50LWV4cGVjdGVkLnR4dApAQCAtNiw2ICs2LDcgQEAgT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUKIHdpbmRvdy5pbmRleGVkREIgPSB3aW5kb3cuaW5kZXhlZERCIHx8IHdpbmRv
dy53ZWJraXRJbmRleGVkREIKIHdpbmRvdy5JREJUcmFuc2FjdGlvbiA9IHdpbmRvdy5JREJUcmFu
c2FjdGlvbiB8fCB3aW5kb3cud2Via2l0SURCVHJhbnNhY3Rpb24KIHdpbmRvdy5JREJLZXlSYW5n
ZSA9IHdpbmRvdy5JREJLZXlSYW5nZSB8fCB3aW5kb3cud2Via2l0SURCS2V5UmFuZ2UKK3dpbmRv
dy5JREJEYXRhYmFzZUV4Y2VwdGlvbiA9IHdpbmRvdy5JREJEYXRhYmFzZUV4Y2VwdGlvbiB8fCB3
aW5kb3cud2Via2l0SURCRGF0YWJhc2VFeGNlcHRpb24KIGluZGV4ZWREQi5vcGVuKCdvYmplY3Rz
dG9yZS1jb3VudCcpCiBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQKIGRiLnNldFZlcnNpb24oJ25l
dyB2ZXJzaW9uJykKQEAgLTc2LDYgKzc3LDM2IEBAIHRlc3QgPSB7Imxvd2VyIjo1MDAsImxvd2Vy
T3BlbiI6ZmFsc2UsInVwcGVyIjo1MDAsInVwcGVyT3BlbiI6ZmFsc2UsImV4cGVjdGVkIjowCiBy
ZXF1ZXN0ID0gc3RvcmUuY291bnQoSURCS2V5UmFuZ2UuYm91bmQodGVzdC5sb3dlciwgdGVzdC51
cHBlciwgdGVzdC5sb3dlck9wZW4sIHRlc3QudXBwZXJPcGVuKSkKIFBBU1MgdHlwZW9mIHJlcXVl
c3QucmVzdWx0ID09ICdudW1iZXInIGlzIHRydWUKIFBBU1MgcmVxdWVzdC5yZXN1bHQgaXMgMAor
Cit2ZXJpZnlpbmcgY291bnQgd2l0aCBrZXkKK3RyYW5zID0gZGIudHJhbnNhY3Rpb24oJ3N0b3Jl
TmFtZScsIElEQlRyYW5zYWN0aW9uLlJFQURfT05MWSkKK1BBU1MgdHJhbnMgIT0gbnVsbCBpcyB0
cnVlCitzdG9yZSA9IHRyYW5zLm9iamVjdFN0b3JlKCdzdG9yZU5hbWUnKQorUEFTUyBzdG9yZSAh
PSBudWxsIGlzIHRydWUKK0V4cGVjdGluZyBleGNlcHRpb24gZnJvbSBzdG9yZS5jb3VudChOYU4p
CitQQVNTIEV4Y2VwdGlvbiB3YXMgdGhyb3duLgorUEFTUyBjb2RlIGlzIElEQkRhdGFiYXNlRXhj
ZXB0aW9uLkRBVEFfRVJSCitFeHBlY3RpbmcgZXhjZXB0aW9uIGZyb20gc3RvcmUuY291bnQoe30p
CitQQVNTIEV4Y2VwdGlvbiB3YXMgdGhyb3duLgorUEFTUyBjb2RlIGlzIElEQkRhdGFiYXNlRXhj
ZXB0aW9uLkRBVEFfRVJSCitFeHBlY3RpbmcgZXhjZXB0aW9uIGZyb20gc3RvcmUuY291bnQoL3Jl
Z2V4LykKK1BBU1MgRXhjZXB0aW9uIHdhcyB0aHJvd24uCitQQVNTIGNvZGUgaXMgSURCRGF0YWJh
c2VFeGNlcHRpb24uREFUQV9FUlIKKwordGVzdCA9IHsia2V5IjowLCJleHBlY3RlZCI6MX0KK3Jl
cXVlc3QgPSBzdG9yZS5jb3VudCh0ZXN0LmtleSkKK1BBU1MgdHlwZW9mIHJlcXVlc3QucmVzdWx0
ID09ICdudW1iZXInIGlzIHRydWUKK1BBU1MgcmVxdWVzdC5yZXN1bHQgaXMgMQorCit0ZXN0ID0g
eyJrZXkiOjEwMCwiZXhwZWN0ZWQiOjB9CityZXF1ZXN0ID0gc3RvcmUuY291bnQodGVzdC5rZXkp
CitQQVNTIHR5cGVvZiByZXF1ZXN0LnJlc3VsdCA9PSAnbnVtYmVyJyBpcyB0cnVlCitQQVNTIHJl
cXVlc3QucmVzdWx0IGlzIDAKKwordGVzdCA9IHsia2V5IjpudWxsLCJleHBlY3RlZCI6MTAwfQor
cmVxdWVzdCA9IHN0b3JlLmNvdW50KHRlc3Qua2V5KQorUEFTUyB0eXBlb2YgcmVxdWVzdC5yZXN1
bHQgPT0gJ251bWJlcicgaXMgdHJ1ZQorUEFTUyByZXF1ZXN0LnJlc3VsdCBpcyAxMDAKIFBBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtY291bnQuaHRtbCBiL0xh
eW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWNvdW50Lmh0bWwKaW5kZXgg
MzkwZmI5NzA3MDJjNWNjYjkyZDA2YTExMzVmMjdkZTAyOGJlNThmNC4uZjE0NGVmZTBhY2E1OGVl
MDIxMTdiMGMwM2U3ZWU4MWI2YTkwN2E1NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFn
ZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtY291bnQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1jb3VudC5odG1sCkBAIC0xNyw2ICsxNyw3IEBAIGZ1
bmN0aW9uIHRlc3QoKQogICAgIGV2YWxBbmRMb2coIndpbmRvdy5pbmRleGVkREIgPSB3aW5kb3cu
aW5kZXhlZERCIHx8IHdpbmRvdy53ZWJraXRJbmRleGVkREIiKTsKICAgICBldmFsQW5kTG9nKCJ3
aW5kb3cuSURCVHJhbnNhY3Rpb24gPSB3aW5kb3cuSURCVHJhbnNhY3Rpb24gfHwgd2luZG93Lndl
YmtpdElEQlRyYW5zYWN0aW9uIik7CiAgICAgZXZhbEFuZExvZygid2luZG93LklEQktleVJhbmdl
ID0gd2luZG93LklEQktleVJhbmdlIHx8IHdpbmRvdy53ZWJraXRJREJLZXlSYW5nZSIpOworICAg
IGV2YWxBbmRMb2coIndpbmRvdy5JREJEYXRhYmFzZUV4Y2VwdGlvbiA9IHdpbmRvdy5JREJEYXRh
YmFzZUV4Y2VwdGlvbiB8fCB3aW5kb3cud2Via2l0SURCRGF0YWJhc2VFeGNlcHRpb24iKTsKICAg
ICByZXF1ZXN0ID0gZXZhbEFuZExvZygiaW5kZXhlZERCLm9wZW4oJ29iamVjdHN0b3JlLWNvdW50
JykiKTsKICAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKICAg
ICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgewpAQCAtNzQsNyArNzUsNyBAQCBmdW5j
dGlvbiB2ZXJpZnlDb3VudFdpdGhSYW5nZSgpCiAgICAgdHJhbnMgPSBldmFsQW5kTG9nKCJ0cmFu
cyA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZU5hbWUnLCBJREJUcmFuc2FjdGlvbi5SRUFEX09OTFkp
Iik7CiAgICAgc2hvdWxkQmVUcnVlKCJ0cmFucyAhPSBudWxsIik7CiAgICAgdHJhbnMub25hYm9y
dCA9IHVuZXhwZWN0ZWRBYm9ydENhbGxiYWNrOwotICAgIHRyYW5zLm9uY29tcGxldGUgPSBkb25l
OworICAgIHRyYW5zLm9uY29tcGxldGUgPSB2ZXJpZnlDb3VudFdpdGhLZXk7CiAKICAgICBzdG9y
ZSA9IGV2YWxBbmRMb2coInN0b3JlID0gdHJhbnMub2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScpIik7
CiAgICAgc2hvdWxkQmVUcnVlKCJzdG9yZSAhPSBudWxsIik7CkBAIC0xMTAsNiArMTExLDQ2IEBA
IGZ1bmN0aW9uIHZlcmlmeUNvdW50V2l0aFJhbmdlKCkKICAgICBuZXh0VGVzdCgpOwogfQogCitm
dW5jdGlvbiB2ZXJpZnlDb3VudFdpdGhLZXkoKQoreworICAgIGRlYnVnKCIiKTsKKyAgICBkZWJ1
ZygidmVyaWZ5aW5nIGNvdW50IHdpdGgga2V5Iik7CisgICAgdHJhbnMgPSBldmFsQW5kTG9nKCJ0
cmFucyA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZU5hbWUnLCBJREJUcmFuc2FjdGlvbi5SRUFEX09O
TFkpIik7CisgICAgc2hvdWxkQmVUcnVlKCJ0cmFucyAhPSBudWxsIik7CisgICAgdHJhbnMub25h
Ym9ydCA9IHVuZXhwZWN0ZWRBYm9ydENhbGxiYWNrOworICAgIHRyYW5zLm9uY29tcGxldGUgPSBk
b25lOworCisgICAgc3RvcmUgPSBldmFsQW5kTG9nKCJzdG9yZSA9IHRyYW5zLm9iamVjdFN0b3Jl
KCdzdG9yZU5hbWUnKSIpOworICAgIHNob3VsZEJlVHJ1ZSgic3RvcmUgIT0gbnVsbCIpOworCisg
ICAgZXZhbEFuZEV4cGVjdEV4Y2VwdGlvbigic3RvcmUuY291bnQoTmFOKSIsICJJREJEYXRhYmFz
ZUV4Y2VwdGlvbi5EQVRBX0VSUiIpOworICAgIGV2YWxBbmRFeHBlY3RFeGNlcHRpb24oInN0b3Jl
LmNvdW50KHt9KSIsICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5EQVRBX0VSUiIpOworICAgIGV2YWxB
bmRFeHBlY3RFeGNlcHRpb24oInN0b3JlLmNvdW50KC9yZWdleC8pIiwgIklEQkRhdGFiYXNlRXhj
ZXB0aW9uLkRBVEFfRVJSIik7CisKKyAgICB2YXIgdGVzdHMgPSBbCisgICAgICAgIHsga2V5OiAw
LCBleHBlY3RlZDogMSB9LAorICAgICAgICB7IGtleTogMTAwLCBleHBlY3RlZDogMCB9LAorICAg
ICAgICB7IGtleTogbnVsbCwgZXhwZWN0ZWQ6IDEwMCB9CisgICAgXTsKKworICAgIGZ1bmN0aW9u
IG5leHRUZXN0KCkgeworICAgICAgICBkZWJ1ZygiIik7CisgICAgICAgIGV2YWxBbmRMb2coInRl
c3QgPSAiICsgSlNPTi5zdHJpbmdpZnkodGVzdHMuc2hpZnQoKSkpOworICAgICAgICByZXF1ZXN0
ID0gZXZhbEFuZExvZygicmVxdWVzdCA9IHN0b3JlLmNvdW50KHRlc3Qua2V5KSIpOworICAgICAg
ICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICAgICAgcmVx
dWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHNob3VsZEJlVHJ1ZSgi
dHlwZW9mIHJlcXVlc3QucmVzdWx0ID09ICdudW1iZXInIik7CisgICAgICAgICAgICBzaG91bGRC
ZSgicmVxdWVzdC5yZXN1bHQiLCBTdHJpbmcodGVzdC5leHBlY3RlZCkpOworICAgICAgICAgICAg
IGlmICh0ZXN0cy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgbmV4dFRlc3QoKTsKKyAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGxldCB0aGUgdHJhbnNhY3Rpb24g
Y29tcGxldGUKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBuZXh0VGVzdCgpOworfQorCiB0ZXN0
KCk7CiAKIDwvc2NyaXB0Pgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>