<?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>77060</bug_id>
          
          <creation_ts>2012-01-25 16:53:04 -0800</creation_ts>
          <short_desc>IndexedDB: Key generators not rolled back if insertion fails or is aborted</short_desc>
          <delta_ts>2012-02-03 16:17:06 -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>WebCore Misc.</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>
          <dependson>76952</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joshua Bell">jsbell</reporter>
          <assigned_to name="Joshua Bell">jsbell</assigned_to>
          <cc>dgrogan</cc>
    
    <cc>levin+threading</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>542773</commentid>
    <comment_count>0</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-01-25 16:53:04 -0800</bug_when>
    <thetext>See thread: http://lists.w3.org/Archives/Public/public-webapps/2012JanMar/0329.html

Chromium port of WebKit behaves differently in these cases:


If an insertion fails due to constraint violations or IO error, the
key generator is not updated.
trans.onerror = function(e) { e.preventDefault() };
store = db.createObjectStore(&quot;store1&quot;, { autoIncrement: true });
index = store.createIndex(&quot;index1&quot;, &quot;ix&quot;, { unique: true });
store.put({ ix: &quot;a&quot;}); // Will get key 1
store.put({ ix: &quot;a&quot;}); // Will fail
store.put({ ix: &quot;b&quot;}); // Will get key 2  -- Chromium/WebKit gets 3

....

Aborting a transaction rolls back any increases to the key generator
which happened during the transaction. This is to make all rollbacks
consistent since rollbacks that happen due to crash never has a chance
to commit the increased key generator value.
db.createObjectStore(&quot;store&quot;, { autoIncrement: true });
...
trans1 = db.transaction([&quot;store&quot;]);
store_t1 = trans1.objectStore(&quot;store&quot;);
store_t1.put(&quot;a&quot;); // Will get key 1
store_t1.put(&quot;b&quot;); // Will get key 2
trans1.abort();
trans2 = db.transaction([&quot;store&quot;]);
store_t2 = trans2.objectStore(&quot;store&quot;);
store_t2.put(&quot;c&quot;); // Will get key 1 -- Chromium/WebKit gets 3
store_t2.put(&quot;d&quot;); // Will get key 2 -- Chromium/WebKit gets 4

.....

In the former case, it appears that the failed put does not roll back the key generator. The uniqueness test should run before the key generator is used.

In the latter case, it appears that the aborted transaction does not roll back the key generator. The key generator state should be included in the transaction scope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544247</commentid>
    <comment_count>1</comment_count>
      <attachid>124347</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-01-27 12:16:44 -0800</bug_when>
    <thetext>Created attachment 124347
Layout Test validating key generator cases</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545482</commentid>
    <comment_count>2</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-01-30 15:23:53 -0800</bug_when>
    <thetext>From a preliminary glance, it looks like the fix should just require a call to IDBObjectStoreBackendImpl::resetAutoIncrementKeyCache() in the failure cases within IDBObjectStoreBackendImpl::putInternal()

(The sad news is that our key generator &quot;state&quot; is pretty sucktastic - resetAutoIncrementKeyCache() just invalidates a cache. When the cache is invalidated, we populate it with a table scan. Yuck. But it works.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545487</commentid>
    <comment_count>3</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-01-30 15:26:01 -0800</bug_when>
    <thetext>Don&apos;t try and fix this until the refactoring in https://bugs.webkit.org/show_bug.cgi?id=76952 lands</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546614</commentid>
    <comment_count>4</comment_count>
      <attachid>124843</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-01-31 16:25:46 -0800</bug_when>
    <thetext>Created attachment 124843
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546619</commentid>
    <comment_count>5</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-01-31 16:30:37 -0800</bug_when>
    <thetext>I&apos;m not terribly happy with this patch, but it works.

Rather than maintain the key generator state as part of the object store (per spec) we infer the &quot;next key&quot; by doing a table scan. Ugh. The object store implementation simply caches this and will invalidate the cache if something is inserted that would modify the key generator.

The patch simply invalidates if a put() fails or if the transaction aborts. The former requires sprinkling lots of calls throughout the put task. The latter uses abort tasks, which are redundant since they just invalidate the state.

A better fix is (1) the key generator state is held in the backing store as a property of the object store so it can be rolled back with transactions, and (2) store objects are scoped within transactions so they don&apos;t even need abort tasks. But that&apos;s a huge architectural change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548355</commentid>
    <comment_count>6</comment_count>
      <attachid>124843</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-02-02 19:13:28 -0800</bug_when>
    <thetext>Comment on attachment 124843
Patch

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

LGTM

&gt; LayoutTests/storage/indexeddb/key-generator.html:151
&gt; +    &apos;Verify that the key generator is only set if and only if a numeric key greater than the last generatd key is used.&apos;,

typo generatd

&gt; LayoutTests/storage/indexeddb/key-generator.html:204
&gt; +                console.log(&apos;aborted!&apos;);

Are these console.log calls intentional?

&gt; LayoutTests/storage/indexeddb/key-generator.html:209
&gt; +                check(store_t2, 1, &apos;c&apos;); // FIXME: Fails in Chromium (it gets key 3).

Remove these FIXMEs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548818</commentid>
    <comment_count>7</comment_count>
      <attachid>125359</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-02-03 10:13:02 -0800</bug_when>
    <thetext>Created attachment 125359
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548820</commentid>
    <comment_count>8</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-02-03 10:21:18 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 124843 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124843&amp;action=review
&gt; 
&gt; LGTM
&gt; 
&gt; &gt; LayoutTests/storage/indexeddb/key-generator.html:151
&gt; &gt; +    &apos;Verify that the key generator is only set if and only if a numeric key greater than the last generatd key is used.&apos;,
&gt; 
&gt; typo generatd

Fixed.

&gt; &gt; LayoutTests/storage/indexeddb/key-generator.html:204
&gt; &gt; +                console.log(&apos;aborted!&apos;);
&gt; 
&gt; Are these console.log calls intentional?

Oops, no. Changed them to debug() calls.

&gt; &gt; LayoutTests/storage/indexeddb/key-generator.html:209
&gt; &gt; +                check(store_t2, 1, &apos;c&apos;); // FIXME: Fails in Chromium (it gets key 3).
&gt; 
&gt; Remove these FIXMEs

Done.

I still want to brainstorm further before landing this. 

* A safer alternative to sprinkling the reset...() calls into putInternal()&apos;s early exits would be to introduce a class that does RAII-style revert on early exit. 

* A more performant/less memory hungry alternative to the per-put abort task would be to have the IDBTransactionBackendImpl call into a new &quot;transactionAborted&quot; method on each IDBObjectStoreBackendImpl.

Thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548981</commentid>
    <comment_count>9</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-02-03 13:00:42 -0800</bug_when>
    <thetext>After offline discussion with dgrogan@, we think this patch is acceptable and probably the best approach, short of a major refactor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549134</commentid>
    <comment_count>10</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-02-03 14:56:22 -0800</bug_when>
    <thetext>tony@, can you take a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549218</commentid>
    <comment_count>11</comment_count>
      <attachid>125359</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-03 16:17:01 -0800</bug_when>
    <thetext>Comment on attachment 125359
Patch

Clearing flags on attachment: 125359

Committed r106705: &lt;http://trac.webkit.org/changeset/106705&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549219</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-03 16:17:06 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>124347</attachid>
            <date>2012-01-27 12:16:44 -0800</date>
            <delta_ts>2012-01-27 12:16:44 -0800</delta_ts>
            <desc>Layout Test validating key generator cases</desc>
            <filename>key-generator.html</filename>
            <type>text/html</type>
            <size>7607</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgo8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NoYXJlZC5qcyI+PC9z
Y3JpcHQ+CjwvaGVhZD4KPGJvZHk+CjxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgo8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KPHNjcmlwdD4KCmRlc2NyaXB0aW9uKCJUZXN0IEluZGV4ZWREQidzIGtl
eSBnZW5lcmF0b3IgYmVoYXZpb3IuIik7CmlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IAogICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwoKZnVuY3Rpb24gdGVz
dCgpCnsKICAgIGV2YWxBbmRMb2coImluZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2lu
ZG93LndlYmtpdEluZGV4ZWREQiIpOwogICAgc2hvdWxkQmVUcnVlKCJpbmRleGVkREIgIT0gbnVs
bCIpOwogICAgZXZhbEFuZExvZygiSURCVHJhbnNhY3Rpb24gPSB3aW5kb3cuSURCVHJhbnNhY3Rp
b24gfHwgd2luZG93LndlYmtpdElEQlRyYW5zYWN0aW9uIik7CiAgICBzaG91bGRCZVRydWUoIklE
QlRyYW5zYWN0aW9uICE9IG51bGwiKTsKICAgIGV2YWxBbmRMb2coIklEQktleVJhbmdlID0gd2lu
ZG93LklEQktleVJhbmdlIHx8IHdpbmRvdy53ZWJraXRJREJLZXlSYW5nZSIpOwogICAgc2hvdWxk
QmVUcnVlKCJJREJLZXlSYW5nZSAhPSBudWxsIik7CgogICAgcnVuVGVzdHMoKTsKfQoKdmFyIHRl
c3RzID0gW107CmZ1bmN0aW9uIGRlZmluZVRlc3QoZGVzY3JpcHRpb24sIHZlcmNoYW5nZSwgb3B0
aW9uYWwpIHsKICB0ZXN0cy5wdXNoKAogICAgewogICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRp
b24sCiAgICAgIHZlcmNoYW5nZTogdmVyY2hhbmdlLAogICAgICBvcHRpb25hbDogb3B0aW9uYWwK
ICAgIH0KICApOwp9CgoKZnVuY3Rpb24gcnVuVGVzdHMoKSB7CgogICAgZnVuY3Rpb24gbmV4dFRl
c3QoKSB7CiAgICAgICAgaWYgKCF0ZXN0cy5sZW5ndGgpIHsKICAgICAgICAgICAgZG9uZSgpOwog
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICB2YXIgdGVzdCA9IHRlc3RzLnNo
aWZ0KCk7CiAgICAgICAgZGVidWcoIiIpOwogICAgICAgIGRlYnVnKHRlc3QuZGVzY3JpcHRpb24p
OwoKICAgICAgICBldmFsQW5kTG9nKCJyZXF1ZXN0ID0gaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNl
KCdrZXktZ2VuZXJhdG9yJykiKTsKICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVk
RXJyb3JDYWxsYmFjazsKICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHsK
ICAgICAgICAgICAgZXZhbEFuZExvZygicmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKCdrZXktZ2Vu
ZXJhdG9yJykiKTsKICAgICAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9y
Q2FsbGJhY2s7CiAgICAgICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24gKCkgewog
ICAgICAgICAgICAgICAgZXZhbEFuZExvZygiZGIgPSByZXF1ZXN0LnJlc3VsdCIpOwogICAgICAg
ICAgICAgICAgZXZhbEFuZExvZygicmVxdWVzdCA9IGRiLnNldFZlcnNpb24oJzEnKSIpOwogICAg
ICAgICAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CiAg
ICAgICAgICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAg
ICAgICAgICAgICBldmFsQW5kTG9nKCJ0cmFucyA9IHJlcXVlc3QucmVzdWx0Iik7CiAgICAgICAg
ICAgICAgICAgICAgdHJhbnMub25hYm9ydCA9IHVuZXhwZWN0ZWRBYm9ydENhbGxiYWNrOwogICAg
ICAgICAgICAgICAgICAgIHRlc3QudmVyY2hhbmdlKGRiLCB0cmFucyk7CiAgICAgICAgICAgICAg
ICAgICAgdHJhbnMub25jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBldmFsQW5kTG9nKCJkYi5jbG9zZSgpIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
ZXh0VGVzdCgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodGVzdC5vcHRpb25hbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVz
dC5vcHRpb25hbChkYiwgZmluaXNoVGVzdCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hUZXN0KCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfTsK
ICAgICAgICAgICAgfTsKICAgICAgICB9OwogICAgfQoKICAgIG5leHRUZXN0KCk7Cn0KCmZ1bmN0
aW9uIGNoZWNrKHN0b3JlLCBrZXksIGV4cGVjdGVkKSB7CiAgICB3aW5kb3cuc3RvcmUgPSBzdG9y
ZTsKICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJyZXF1ZXN0ID0gc3RvcmUuZ2V0KCIgKyBKU09O
LnN0cmluZ2lmeShrZXkpICsgIikiKTsKICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRF
cnJvckNhbGxiYWNrOwogICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgewogICAg
ICAgIHdpbmRvdy5leHBlY3RlZCA9IGV4cGVjdGVkOwogICAgICAgIGlmIChKU09OLnN0cmluZ2lm
eShldmVudC50YXJnZXQucmVzdWx0KSA9PT0gSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWQpKSB7CiAg
ICAgICAgICAgIHRlc3RQYXNzZWQoIkdvdCAiICsgSlNPTi5zdHJpbmdpZnkoZXZlbnQudGFyZ2V0
LnJlc3VsdCkgKyAiIGZvciBrZXk6ICIgKyBKU09OLnN0cmluZ2lmeShrZXkpKTsKICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICB0ZXN0RmFpbGVkKCJHb3QgIiArIEpTT04uc3RyaW5naWZ5KGV2
ZW50LnRhcmdldC5yZXN1bHQpICsgIiBmb3Iga2V5OiAiICsgSlNPTi5zdHJpbmdpZnkoa2V5KSAr
CiAgICAgICAgICAgICAgICAiIGV4cGVjdGVkOiAiICsgSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWQp
KTsKICAgICAgICB9CiAgICB9Owp9CgpkZWZpbmVUZXN0KAogICAgJ1ZlcmlmeSB0aGF0IGVhY2gg
b2JqZWN0IHN0b3JlIGhhcyBhbiBpbmRlcGVuZGVudCBrZXkgZ2VuZXJhdG9yLicsCiAgICBmdW5j
dGlvbiAoZGIsIHRyYW5zKSB7CiAgICAgICAgZXZhbEFuZExvZygic3RvcmUxID0gZGIuY3JlYXRl
T2JqZWN0U3RvcmUoJ3N0b3JlMScsIHsgYXV0b0luY3JlbWVudDogdHJ1ZSB9KSIpOwogICAgICAg
IGV2YWxBbmRMb2coInN0b3JlMS5wdXQoJ2EnKSIpOwogICAgICAgIGNoZWNrKHN0b3JlMSwgMSwg
J2EnKTsKICAgICAgICBldmFsQW5kTG9nKCJzdG9yZTIgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgn
c3RvcmUyJywgeyBhdXRvSW5jcmVtZW50OiB0cnVlIH0pIik7CiAgICAgICAgZXZhbEFuZExvZygi
c3RvcmUyLnB1dCgnYScpIik7CiAgICAgICAgY2hlY2soc3RvcmUyLCAxLCAnYScpOwogICAgICAg
IGV2YWxBbmRMb2coInN0b3JlMS5wdXQoJ2InKSIpOwogICAgICAgIGNoZWNrKHN0b3JlMSwgMiwg
J2InKTsKICAgICAgICBldmFsQW5kTG9nKCJzdG9yZTIucHV0KCdiJykiKTsKICAgICAgICBjaGVj
ayhzdG9yZTIsIDIsICdiJyk7CiAgICB9Cik7CgpkZWZpbmVUZXN0KAogICAgJ1ZlcmlmeSB0aGF0
IHRoZSBrZXkgZ2VuZXJhdG9yIGlzIG5vdCB1cGRhdGVkIGlmIGluc2VydGlvbiBmYWlscycsCiAg
ICBmdW5jdGlvbiAoZGIsIHRyYW5zKSB7CiAgICAgICAgdHJhbnMub25lcnJvciA9IGZ1bmN0aW9u
KGUpIHsgZS5wcmV2ZW50RGVmYXVsdCgpIH07CiAgICAgICAgZXZhbEFuZExvZygic3RvcmUgPSBk
Yi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUxJywgeyBhdXRvSW5jcmVtZW50OiB0cnVlIH0pIik7
CiAgICAgICAgZXZhbEFuZExvZygiaW5kZXggPSBzdG9yZS5jcmVhdGVJbmRleCgnaW5kZXgxJywg
J2l4JywgeyB1bmlxdWU6IHRydWUgfSkiKTsKICAgICAgICBldmFsQW5kTG9nKCJzdG9yZS5wdXQo
eyBpeDogJ2EnfSkiKTsKICAgICAgICBjaGVjayhzdG9yZSwgMSwge2l4OiAnYSd9KTsKICAgICAg
ICBldmFsQW5kTG9nKCJzdG9yZS5wdXQoeyBpeDogJ2EnfSkiKTsKICAgICAgICBldmFsQW5kTG9n
KCJzdG9yZS5wdXQoeyBpeDogJ2InfSkiKTsKICAgICAgICBjaGVjayhzdG9yZSwgMiwge2l4OiAn
Yid9KTsgLy8gRklYTUU6IEZhaWxzIGluIENocm9taXVtIChpdCBnZXRzIGtleSAzKS4KICAgIH0K
KTsKCmRlZmluZVRlc3QoCiAgICAnVmVyaWZ5IHRoYXQgdGhlIGtleSBnZW5lcmF0b3IgaXMgbm90
IGFmZmVjdGVkIGJ5IGl0ZW0gcmVtb3ZhbCAoZGVsZXRlIG9yIGNsZWFyKS4nLAogICAgZnVuY3Rp
b24gKGRiLCB0cmFucykgewogICAgICAgIGV2YWxBbmRMb2coInN0b3JlID0gZGIuY3JlYXRlT2Jq
ZWN0U3RvcmUoJ3N0b3JlMScsIHsgYXV0b0luY3JlbWVudDogdHJ1ZSB9KSIpOwogICAgICAgIGV2
YWxBbmRMb2coInN0b3JlLnB1dCgnYScpIik7CiAgICAgICAgY2hlY2soc3RvcmUsIDEsICdhJyk7
CiAgICAgICAgZXZhbEFuZExvZygic3RvcmUuZGVsZXRlKDEpIik7CiAgICAgICAgZXZhbEFuZExv
Zygic3RvcmUucHV0KCdiJykiKTsKICAgICAgICBjaGVjayhzdG9yZSwgMiwgJ2InKTsKICAgICAg
ICBldmFsQW5kTG9nKCJzdG9yZS5jbGVhcigpIik7CiAgICAgICAgZXZhbEFuZExvZygic3RvcmUu
cHV0KCdjJykiKTsKICAgICAgICBjaGVjayhzdG9yZSwgMywgJ2MnKTsKICAgICAgICAvLyBGSVhN
RTogSURCT2JqZWN0U3RvcmUuZGVsZXRlKElEQktleVJhbmdlKSBpcyBub3QgeWV0IGltcGxlbWVu
dGVkIGluIENocm9taXVtLgogICAgICAgIC8vIGh0dHA6Ly9jcmJ1Zy5jb20vMTAxMzg0CiAgICAg
ICAgLy9ldmFsQW5kTG9nKCJzdG9yZS5kZWxldGUoSURCS2V5UmFuZ2UubG93ZXJCb3VuZCgwKSki
KTsKICAgICAgICBldmFsQW5kTG9nKCJzdG9yZS5wdXQoJ2QnKSIpOwogICAgICAgIGNoZWNrKHN0
b3JlLCA0LCAnZCcpOwogICAgfQopOwoKZGVmaW5lVGVzdCgKICAgICdWZXJpZnkgdGhhdCB0aGUg
a2V5IGdlbmVyYXRvciBpcyBvbmx5IHNldCBpZiBhbmQgb25seSBpZiBhIG51bWVyaWMga2V5IGdy
ZWF0ZXIgdGhhbiB0aGUgbGFzdCBnZW5lcmF0ZCBrZXkgaXMgdXNlZC4nLAogICAgZnVuY3Rpb24g
KGRiLCB0cmFucykgewogICAgICAgIGV2YWxBbmRMb2coInN0b3JlID0gZGIuY3JlYXRlT2JqZWN0
U3RvcmUoJ3N0b3JlMScsIHsgYXV0b0luY3JlbWVudDogdHJ1ZSB9KSIpOwogICAgICAgIGV2YWxB
bmRMb2coInN0b3JlLnB1dCgnYScpIik7CiAgICAgICAgY2hlY2soc3RvcmUsIDEsICdhJyk7CiAg
ICAgICAgZXZhbEFuZExvZygic3RvcmUucHV0KCdiJywgMykiKTsKICAgICAgICBjaGVjayhzdG9y
ZSwgMywgJ2InKTsKICAgICAgICBldmFsQW5kTG9nKCJzdG9yZS5wdXQoJ2MnKSIpOwogICAgICAg
IGNoZWNrKHN0b3JlLCA0LCAnYycpOwogICAgICAgIGV2YWxBbmRMb2coInN0b3JlLnB1dCgnZCcs
IC0xMCkiKTsKICAgICAgICBjaGVjayhzdG9yZSwgLTEwLCAnZCcpOwogICAgICAgIGV2YWxBbmRM
b2coInN0b3JlLnB1dCgnZScpIik7CiAgICAgICAgY2hlY2soc3RvcmUsIDUsICdlJyk7CiAgICAg
ICAgZXZhbEFuZExvZygic3RvcmUucHV0KCdmJywgNi4wMDAwMSkiKTsKICAgICAgICBjaGVjayhz
dG9yZSwgNi4wMDAwMSwgJ2YnKTsKICAgICAgICBldmFsQW5kTG9nKCJzdG9yZS5wdXQoJ2cnKSIp
OwogICAgICAgIGNoZWNrKHN0b3JlLCA3LCAnZycpOwogICAgICAgIGV2YWxBbmRMb2coInN0b3Jl
LnB1dCgnZicsIDguOTk5OSkiKTsKICAgICAgICBjaGVjayhzdG9yZSwgOC45OTk5LCAnZicpOwog
ICAgICAgIGV2YWxBbmRMb2coInN0b3JlLnB1dCgnZycpIik7CiAgICAgICAgY2hlY2soc3RvcmUs
IDksICdnJyk7CiAgICAgICAgZXZhbEFuZExvZygic3RvcmUucHV0KCdoJywgJ2ZvbycpIik7CiAg
ICAgICAgY2hlY2soc3RvcmUsICdmb28nLCAnaCcpOwogICAgICAgIGV2YWxBbmRMb2coInN0b3Jl
LnB1dCgnaScpIik7CiAgICAgICAgY2hlY2soc3RvcmUsIDEwLCAnaScpOwogICAgICAgIGV2YWxB
bmRMb2coInN0b3JlLnB1dCgnaicsIFsxMDAwXSkiKTsKICAgICAgICBjaGVjayhzdG9yZSwgWzEw
MDBdLCAnaicpOwogICAgICAgIGV2YWxBbmRMb2coInN0b3JlLnB1dCgnaycpIik7CiAgICAgICAg
Y2hlY2soc3RvcmUsIDExLCAnaycpOwoKICAgICAgICAvLyBGSVhNRTogUmVwZWF0IHRoaXMgdGVz
dCwgYnV0IHdpdGggYSBrZXlQYXRoIGFuZCBpbmxpbmUga2V5LgogICAgfQopOwoKZGVmaW5lVGVz
dCgKICAgICdWZXJpZnkgdGhhdCBhYm9ydGluZyBhIHRyYW5zYWN0aW9uIHJlc2V0cyB0aGUga2V5
IGdlbmVyYXRvciBzdGF0ZS4nLAogICAgZnVuY3Rpb24gKGRiLCB0cmFucykgewogICAgICAgIGRi
LmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZScsIHsgYXV0b0luY3JlbWVudDogdHJ1ZSB9KTsKICAg
IH0sCgogICAgZnVuY3Rpb24gKGRiLCBjYWxsYmFjaykgewogICAgICAgIGV2YWxBbmRMb2coInRy
YW5zMSA9IGRiLnRyYW5zYWN0aW9uKFsnc3RvcmUnXSwgSURCVHJhbnNhY3Rpb24uUkVBRF9XUklU
RSkiKTsKICAgICAgICBldmFsQW5kTG9nKCJzdG9yZV90MSA9IHRyYW5zMS5vYmplY3RTdG9yZSgn
c3RvcmUnKSIpOwogICAgICAgIGV2YWxBbmRMb2coInN0b3JlX3QxLnB1dCgnYScpIik7CiAgICAg
ICAgY2hlY2soc3RvcmVfdDEsIDEsICdhJyk7CiAgICAgICAgZXZhbEFuZExvZygic3RvcmVfdDEu
cHV0KCdiJykiKTsKICAgICAgICBjaGVjayhzdG9yZV90MSwgMiwgJ2InKTsKCiAgICAgICAgLy8g
U2NoZWR1bGUgdGhlIGFib3J0IGFzIGEgdGFzayAobm90IHJ1biBpdCBzeW5jaHJvbm91c2x5KQog
ICAgICAgIHN0b3JlX3QxLmdldCgwKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAg
ICAgIGNvbnNvbGUubG9nKCdhYm9ydGluZy4uLicpOwogICAgICAgICAgICBldmFsQW5kTG9nKCJ0
cmFuczEuYWJvcnQoKSIpOwogICAgICAgICAgICB0cmFuczEub25hYm9ydCA9IGZ1bmN0aW9uICgp
IHsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdhYm9ydGVkIScpOwoKICAgICAgICAgICAg
ICAgIGV2YWxBbmRMb2coInRyYW5zMiA9IGRiLnRyYW5zYWN0aW9uKFsnc3RvcmUnXSwgSURCVHJh
bnNhY3Rpb24uUkVBRF9XUklURSkiKTsKICAgICAgICAgICAgICAgIGV2YWxBbmRMb2coInN0b3Jl
X3QyID0gdHJhbnMyLm9iamVjdFN0b3JlKCdzdG9yZScpIik7CiAgICAgICAgICAgICAgICBldmFs
QW5kTG9nKCJzdG9yZV90Mi5wdXQoJ2MnKSIpOwogICAgICAgICAgICAgICAgY2hlY2soc3RvcmVf
dDIsIDEsICdjJyk7IC8vIEZJWE1FOiBGYWlscyBpbiBDaHJvbWl1bSAoaXQgZ2V0cyBrZXkgMyku
CiAgICAgICAgICAgICAgICBldmFsQW5kTG9nKCJzdG9yZV90Mi5wdXQoJ2QnKSIpOwogICAgICAg
ICAgICAgICAgY2hlY2soc3RvcmVfdDIsIDIsICdkJyk7IC8vIEZJWE1FOiBGYWlscyBpbiBDaHJv
bWl1bSAoaXQgZ2V0cyBrZXkgNCkuCgogICAgICAgICAgICAgICAgdHJhbnMyLm9uY29tcGxldGUg
PSBjYWxsYmFjazsKICAgICAgICAgICAgfTsKICAgICAgICB9OwogICAgfQopOwoKdGVzdCgpOwoK
PC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124843</attachid>
            <date>2012-01-31 16:25:46 -0800</date>
            <delta_ts>2012-02-03 10:12:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77060-20120131162545.patch</filename>
            <type>text/plain</type>
            <size>19462</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGFkYzExOWJjZDhjMTc2
ZmMyMGZiYmM5N2I3Yzk5ZGJhYjIwZDg0MS4uNzdhY2YxMTkzZTYwM2YyY2FlYjljOGM0ZTJjZGFk
NDQ4MzY3MWVmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEyLTAxLTMxICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBLZXkg
Z2VuZXJhdG9ycyBub3Qgcm9sbGVkIGJhY2sgaWYgaW5zZXJ0aW9uIGZhaWxzIG9yIGlzIGFib3J0
ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MDYw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDog
c3RvcmFnZS9pbmRleGVkZGIva2V5LWdlbmVyYXRvci5odG1sCisKKyAgICAgICAgKiBzdG9yYWdl
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnJldmVydEF1dG9JbmNyZW1lbnRLZXlDYWNoZSk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1
dEludGVybmFsKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwu
aDoKKyAgICAgICAgKElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwpOgorCiAyMDEyLTAxLTMxICBE
YW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBjb250YWlu
cygpIHRlc3QgdG8gUmVnaW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCBjZTA0MmJlYjZmZDY2NDdlODI4NTI2Mjg0
YmJlZmM5NTI4ZjFmNjc3Li5mOWJkNzgwMjMzNDFjZDUzZmFhYWRlNTQ4MzgyOTU5NzM2ZDQwNjgw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5jcHAKQEAgLTE3OCwxMCArMTc4LDE4IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwK
ICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhj
cmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFs
LCBvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlv
bikpKQorICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzaygKKyAgICAgICAgICAgIGNy
ZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWws
IG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9u
KSwKKyAgICAgICAgICAgIC8vIEZJWE1FOiBPbmUgb2YgdGhlc2UgcGVyIHB1dCgpIGlzIG92ZXJr
aWxsLCBzaW5jZSBpdCdzIHNpbXBseSBhIGNhY2hlIGludmFsaWRhdGlvbi4KKyAgICAgICAgICAg
IGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmV2ZXJ0QXV0
b0luY3JlbWVudEtleUNhY2hlLCBvYmplY3RTdG9yZSkpKQogICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CiB9CiAKK3ZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmV2ZXJ0QXV0b0luY3JlbWVudEtleUNhY2hlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlKQoreworICAgIG9iamVjdFN0b3JlLT5yZXNldEF1dG9JbmNyZW1lbnRLZXlDYWNo
ZSgpOworfQorCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFs
dWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQogewogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHZhbHVlID0gcHJwVmFsdWU7CkBAIC0yMDQsNiArMjEyLDcgQEAgdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjwKICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc3Mzc0CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlQWZ0ZXJJbmplY3Rpb24gPSBpbmplY3RLZXlJbnRvS2V5
UGF0aChhdXRvSW5jS2V5LCB2YWx1ZSwgb2JqZWN0U3RvcmUtPm1fa2V5UGF0aCk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmICghdmFsdWVBZnRlckluamVjdGlvbikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUiwgIlRoZSBnZW5lcmF0ZWQga2V5
IGNvdWxkIG5vdCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBvYmplY3QgdXNpbmcgdGhlIGtleVBhdGgu
IikpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAg
ICB9CkBAIC0yMjEsNiArMjMwLDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpw
dXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKIAogICAgIFJl
ZlB0cjxJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gcmVjb3Jk
SWRlbnRpZmllciA9IG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+Y3JlYXRlSW52YWxpZFJl
Y29yZElkZW50aWZpZXIoKTsKICAgICBpZiAocHV0TW9kZSA9PSBBZGRPbmx5ICYmIG9iamVjdFN0
b3JlLT5tX2JhY2tpbmdTdG9yZS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZShvYmplY3RTdG9yZS0+
bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgcmVjb3JkSWRlbnRpZmllci5n
ZXQoKSkpIHsKKyAgICAgICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hl
KCk7CiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJSLCAiS2V5IGFscmVhZHkgZXhpc3Rz
IGluIHRoZSBvYmplY3Qgc3RvcmUuIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjM3
LDEzICsyNDcsMTUgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5h
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICAgICAgQVNTRVJUKGlu
ZGV4S2V5LT52YWxpZCgpKTsKIAogICAgICAgICBpZiAoKCFpbmRleC0+bXVsdGlFbnRyeSgpIHx8
IGluZGV4S2V5LT50eXBlKCkgIT0gSURCS2V5OjpBcnJheVR5cGUpICYmICFpbmRleC0+YWRkaW5n
S2V5QWxsb3dlZChpbmRleEtleS5nZXQoKSwga2V5LmdldCgpKSkgeworICAgICAgICAgICAgb2Jq
ZWN0U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCk7CiAgICAgICAgICAgICBjYWxs
YmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpDT05TVFJBSU5UX0VSUiwgIk9uZSBvZiB0aGUgZGVyaXZlZCAoZnJvbSBhIGtleVBhdGgp
IGtleXMgZm9yIGFuIGluZGV4IGRvZXMgbm90IHNhdGlzZnkgaXRzIHVuaXF1ZW5lc3MgcmVxdWly
ZW1lbnRzLiIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgaWYg
KGluZGV4LT5tdWx0aUVudHJ5KCkgJiYgaW5kZXhLZXktPnR5cGUoKSA9PSBJREJLZXk6OkFycmF5
VHlwZSkgeworICAgICAgICBpZiAoaW5kZXgtPm11bHRpRW50cnkoKSAmJiBpbmRleEtleS0+dHlw
ZSgpID09IElEQktleTo6QXJyYXlUeXBlKSB7CiAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAw
OyBqIDwgaW5kZXhLZXktPmFycmF5KCkuc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICBp
ZiAoIWluZGV4LT5hZGRpbmdLZXlBbGxvd2VkKGluZGV4S2V5LT5hcnJheSgpW2pdLmdldCgpLCBr
ZXkuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5yZXNldEF1dG9J
bmNyZW1lbnRLZXlDYWNoZSgpOwogICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJB
SU5UX0VSUiwgIk9uZSBvZiB0aGUgZGVyaXZlZCAoZnJvbSBhIGtleVBhdGgpIGtleXMgZm9yIGFu
IGluZGV4IGRvZXMgbm90IHNhdGlzZnkgaXRzIHVuaXF1ZW5lc3MgcmVxdWlyZW1lbnRzLiIpKTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKaW5kZXgg
N2MxMmQ4NDcyMjMwZDgzY2FlNWRkMGE0YTZhZTgyNDU1N2E2MThkMC4uYmRiZjFmMTZhZjYyYWU5
MmM4NjI5OTlmMjI4Mjc2ZGFiZGY3NTZiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKQEAgLTEwMCw2ICsxMDAsNyBAQCBwcml2
YXRlOgogICAgIC8vIFRoZXNlIGFyZSB1c2VkIGFzIHNldFZlcnNpb24gdHJhbnNhY3Rpb24gYWJv
cnQgdGFza3MuCiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlSW5kZXhGcm9tTWFwKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNz
UmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+KTsKICAgICBzdGF0aWMgdm9pZCBhZGRJbmRleFRv
TWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+KTsKKyAgICBzdGF0aWMg
dm9pZCByZXZlcnRBdXRvSW5jcmVtZW50S2V5Q2FjaGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4pOwogCiAgICAgUmVmUHRyPElE
QkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAzMzJkYmQ5NzM4NmY3NzBk
OGE0OWRhMzFiODliMGFhM2E1MGZiZjAwLi4zNTk1OTE2ZDQ2OGY1YWNhNmY1ODA1OGZlMDZiNTEx
ZjQwY2EyNzY3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMDEtMzEgIEpvc2h1YSBCZWxs
ICA8anNiZWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IEtleSBnZW5lcmF0
b3JzIG5vdCByb2xsZWQgYmFjayBpZiBpbnNlcnRpb24gZmFpbHMgb3IgaXMgYWJvcnRlZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcwNjAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0b3JhZ2UvaW5k
ZXhlZGRiL2tleS1nZW5lcmF0b3ItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9y
YWdlL2luZGV4ZWRkYi9rZXktZ2VuZXJhdG9yLmh0bWw6IEFkZGVkLgorCiAyMDEyLTAxLTMxICBP
bGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IEVycm9y
LnN0YWNrCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9rZXktZ2Vu
ZXJhdG9yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2tleS1n
ZW5lcmF0b3ItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE3MjAxOGIwMWIxMzI4MTc3MDI2MDg4
MmYwOGU3NjNlZDVhOTFiODEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9rZXktZ2VuZXJhdG9yLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE1MiBAQAor
Q09OU09MRSBNRVNTQUdFOiBsaW5lIDIwMTogYWJvcnRpbmcuLi4KK0NPTlNPTEUgTUVTU0FHRTog
bGluZSAyMDQ6IGFib3J0ZWQhCitUZXN0IEluZGV4ZWREQidzIGtleSBnZW5lcmF0b3IgYmVoYXZp
b3IuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitpbmRleGVkREIgPSB3aW5kb3cu
aW5kZXhlZERCIHx8IHdpbmRvdy53ZWJraXRJbmRleGVkREIKK1BBU1MgaW5kZXhlZERCICE9IG51
bGwgaXMgdHJ1ZQorSURCVHJhbnNhY3Rpb24gPSB3aW5kb3cuSURCVHJhbnNhY3Rpb24gfHwgd2lu
ZG93LndlYmtpdElEQlRyYW5zYWN0aW9uCitQQVNTIElEQlRyYW5zYWN0aW9uICE9IG51bGwgaXMg
dHJ1ZQorSURCS2V5UmFuZ2UgPSB3aW5kb3cuSURCS2V5UmFuZ2UgfHwgd2luZG93LndlYmtpdElE
QktleVJhbmdlCitQQVNTIElEQktleVJhbmdlICE9IG51bGwgaXMgdHJ1ZQorCitWZXJpZnkgdGhh
dCBlYWNoIG9iamVjdCBzdG9yZSBoYXMgYW4gaW5kZXBlbmRlbnQga2V5IGdlbmVyYXRvci4KK3Jl
cXVlc3QgPSBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoJ2tleS1nZW5lcmF0b3InKQorcmVxdWVz
dCA9IGluZGV4ZWREQi5vcGVuKCdrZXktZ2VuZXJhdG9yJykKK2RiID0gcmVxdWVzdC5yZXN1bHQK
K3JlcXVlc3QgPSBkYi5zZXRWZXJzaW9uKCcxJykKK3RyYW5zID0gcmVxdWVzdC5yZXN1bHQKK3N0
b3JlMSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZTEnLCB7IGF1dG9JbmNyZW1lbnQ6IHRy
dWUgfSkKK3N0b3JlMS5wdXQoJ2EnKQorcmVxdWVzdCA9IHN0b3JlLmdldCgxKQorc3RvcmUyID0g
ZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlMicsIHsgYXV0b0luY3JlbWVudDogdHJ1ZSB9KQor
c3RvcmUyLnB1dCgnYScpCityZXF1ZXN0ID0gc3RvcmUuZ2V0KDEpCitzdG9yZTEucHV0KCdiJykK
K3JlcXVlc3QgPSBzdG9yZS5nZXQoMikKK3N0b3JlMi5wdXQoJ2InKQorcmVxdWVzdCA9IHN0b3Jl
LmdldCgyKQorUEFTUyBHb3QgImEiIGZvciBrZXk6IDEKK1BBU1MgR290ICJhIiBmb3Iga2V5OiAx
CitQQVNTIEdvdCAiYiIgZm9yIGtleTogMgorUEFTUyBHb3QgImIiIGZvciBrZXk6IDIKK2RiLmNs
b3NlKCkKKworVmVyaWZ5IHRoYXQgdGhlIGtleSBnZW5lcmF0b3IgaXMgbm90IHVwZGF0ZWQgaWYg
aW5zZXJ0aW9uIGZhaWxzCityZXF1ZXN0ID0gaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKCdrZXkt
Z2VuZXJhdG9yJykKK3JlcXVlc3QgPSBpbmRleGVkREIub3Blbigna2V5LWdlbmVyYXRvcicpCitk
YiA9IHJlcXVlc3QucmVzdWx0CityZXF1ZXN0ID0gZGIuc2V0VmVyc2lvbignMScpCit0cmFucyA9
IHJlcXVlc3QucmVzdWx0CitzdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZTEnLCB7
IGF1dG9JbmNyZW1lbnQ6IHRydWUgfSkKK2luZGV4ID0gc3RvcmUuY3JlYXRlSW5kZXgoJ2luZGV4
MScsICdpeCcsIHsgdW5pcXVlOiB0cnVlIH0pCitzdG9yZS5wdXQoeyBpeDogJ2EnfSkKK3JlcXVl
c3QgPSBzdG9yZS5nZXQoMSkKK3N0b3JlLnB1dCh7IGl4OiAnYSd9KQorc3RvcmUucHV0KHsgaXg6
ICdiJ30pCityZXF1ZXN0ID0gc3RvcmUuZ2V0KDIpCitQQVNTIEdvdCB7Iml4IjoiYSJ9IGZvciBr
ZXk6IDEKK1BBU1MgR290IHsiaXgiOiJiIn0gZm9yIGtleTogMgorZGIuY2xvc2UoKQorCitWZXJp
ZnkgdGhhdCB0aGUga2V5IGdlbmVyYXRvciBpcyBub3QgYWZmZWN0ZWQgYnkgaXRlbSByZW1vdmFs
IChkZWxldGUgb3IgY2xlYXIpLgorcmVxdWVzdCA9IGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgn
a2V5LWdlbmVyYXRvcicpCityZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oJ2tleS1nZW5lcmF0b3In
KQorZGIgPSByZXF1ZXN0LnJlc3VsdAorcmVxdWVzdCA9IGRiLnNldFZlcnNpb24oJzEnKQordHJh
bnMgPSByZXF1ZXN0LnJlc3VsdAorc3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUx
JywgeyBhdXRvSW5jcmVtZW50OiB0cnVlIH0pCitzdG9yZS5wdXQoJ2EnKQorcmVxdWVzdCA9IHN0
b3JlLmdldCgxKQorc3RvcmUuZGVsZXRlKDEpCitzdG9yZS5wdXQoJ2InKQorcmVxdWVzdCA9IHN0
b3JlLmdldCgyKQorc3RvcmUuY2xlYXIoKQorc3RvcmUucHV0KCdjJykKK3JlcXVlc3QgPSBzdG9y
ZS5nZXQoMykKK3N0b3JlLnB1dCgnZCcpCityZXF1ZXN0ID0gc3RvcmUuZ2V0KDQpCitQQVNTIEdv
dCAiYSIgZm9yIGtleTogMQorUEFTUyBHb3QgImIiIGZvciBrZXk6IDIKK1BBU1MgR290ICJjIiBm
b3Iga2V5OiAzCitQQVNTIEdvdCAiZCIgZm9yIGtleTogNAorZGIuY2xvc2UoKQorCitWZXJpZnkg
dGhhdCB0aGUga2V5IGdlbmVyYXRvciBpcyBvbmx5IHNldCBpZiBhbmQgb25seSBpZiBhIG51bWVy
aWMga2V5IGdyZWF0ZXIgdGhhbiB0aGUgbGFzdCBnZW5lcmF0ZCBrZXkgaXMgdXNlZC4KK3JlcXVl
c3QgPSBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoJ2tleS1nZW5lcmF0b3InKQorcmVxdWVzdCA9
IGluZGV4ZWREQi5vcGVuKCdrZXktZ2VuZXJhdG9yJykKK2RiID0gcmVxdWVzdC5yZXN1bHQKK3Jl
cXVlc3QgPSBkYi5zZXRWZXJzaW9uKCcxJykKK3RyYW5zID0gcmVxdWVzdC5yZXN1bHQKK3N0b3Jl
ID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlMScsIHsgYXV0b0luY3JlbWVudDogdHJ1ZSB9
KQorc3RvcmUucHV0KCdhJykKK3JlcXVlc3QgPSBzdG9yZS5nZXQoMSkKK3N0b3JlLnB1dCgnYics
IDMpCityZXF1ZXN0ID0gc3RvcmUuZ2V0KDMpCitzdG9yZS5wdXQoJ2MnKQorcmVxdWVzdCA9IHN0
b3JlLmdldCg0KQorc3RvcmUucHV0KCdkJywgLTEwKQorcmVxdWVzdCA9IHN0b3JlLmdldCgtMTAp
CitzdG9yZS5wdXQoJ2UnKQorcmVxdWVzdCA9IHN0b3JlLmdldCg1KQorc3RvcmUucHV0KCdmJywg
Ni4wMDAwMSkKK3JlcXVlc3QgPSBzdG9yZS5nZXQoNi4wMDAwMSkKK3N0b3JlLnB1dCgnZycpCity
ZXF1ZXN0ID0gc3RvcmUuZ2V0KDcpCitzdG9yZS5wdXQoJ2YnLCA4Ljk5OTkpCityZXF1ZXN0ID0g
c3RvcmUuZ2V0KDguOTk5OSkKK3N0b3JlLnB1dCgnZycpCityZXF1ZXN0ID0gc3RvcmUuZ2V0KDkp
CitzdG9yZS5wdXQoJ2gnLCAnZm9vJykKK3JlcXVlc3QgPSBzdG9yZS5nZXQoImZvbyIpCitzdG9y
ZS5wdXQoJ2knKQorcmVxdWVzdCA9IHN0b3JlLmdldCgxMCkKK3N0b3JlLnB1dCgnaicsIFsxMDAw
XSkKK3JlcXVlc3QgPSBzdG9yZS5nZXQoWzEwMDBdKQorc3RvcmUucHV0KCdrJykKK3JlcXVlc3Qg
PSBzdG9yZS5nZXQoMTEpCitQQVNTIEdvdCAiYSIgZm9yIGtleTogMQorUEFTUyBHb3QgImIiIGZv
ciBrZXk6IDMKK1BBU1MgR290ICJjIiBmb3Iga2V5OiA0CitQQVNTIEdvdCAiZCIgZm9yIGtleTog
LTEwCitQQVNTIEdvdCAiZSIgZm9yIGtleTogNQorUEFTUyBHb3QgImYiIGZvciBrZXk6IDYuMDAw
MDEKK1BBU1MgR290ICJnIiBmb3Iga2V5OiA3CitQQVNTIEdvdCAiZiIgZm9yIGtleTogOC45OTk5
CitQQVNTIEdvdCAiZyIgZm9yIGtleTogOQorUEFTUyBHb3QgImgiIGZvciBrZXk6ICJmb28iCitQ
QVNTIEdvdCAiaSIgZm9yIGtleTogMTAKK1BBU1MgR290ICJqIiBmb3Iga2V5OiBbMTAwMF0KK1BB
U1MgR290ICJrIiBmb3Iga2V5OiAxMQorZGIuY2xvc2UoKQorCitWZXJpZnkgdGhhdCBhYm9ydGlu
ZyBhIHRyYW5zYWN0aW9uIHJlc2V0cyB0aGUga2V5IGdlbmVyYXRvciBzdGF0ZS4KK3JlcXVlc3Qg
PSBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoJ2tleS1nZW5lcmF0b3InKQorcmVxdWVzdCA9IGlu
ZGV4ZWREQi5vcGVuKCdrZXktZ2VuZXJhdG9yJykKK2RiID0gcmVxdWVzdC5yZXN1bHQKK3JlcXVl
c3QgPSBkYi5zZXRWZXJzaW9uKCcxJykKK3RyYW5zID0gcmVxdWVzdC5yZXN1bHQKK3RyYW5zMSA9
IGRiLnRyYW5zYWN0aW9uKFsnc3RvcmUnXSwgSURCVHJhbnNhY3Rpb24uUkVBRF9XUklURSkKK3N0
b3JlX3QxID0gdHJhbnMxLm9iamVjdFN0b3JlKCdzdG9yZScpCitzdG9yZV90MS5wdXQoJ2EnKQor
cmVxdWVzdCA9IHN0b3JlLmdldCgxKQorc3RvcmVfdDEucHV0KCdiJykKK3JlcXVlc3QgPSBzdG9y
ZS5nZXQoMikKK1BBU1MgR290ICJhIiBmb3Iga2V5OiAxCitQQVNTIEdvdCAiYiIgZm9yIGtleTog
MgordHJhbnMxLmFib3J0KCkKK3RyYW5zMiA9IGRiLnRyYW5zYWN0aW9uKFsnc3RvcmUnXSwgSURC
VHJhbnNhY3Rpb24uUkVBRF9XUklURSkKK3N0b3JlX3QyID0gdHJhbnMyLm9iamVjdFN0b3JlKCdz
dG9yZScpCitzdG9yZV90Mi5wdXQoJ2MnKQorcmVxdWVzdCA9IHN0b3JlLmdldCgxKQorc3RvcmVf
dDIucHV0KCdkJykKK3JlcXVlc3QgPSBzdG9yZS5nZXQoMikKK1BBU1MgR290ICJjIiBmb3Iga2V5
OiAxCitQQVNTIEdvdCAiZCIgZm9yIGtleTogMgorZGIuY2xvc2UoKQorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2tleS1nZW5lcmF0b3IuaHRtbCBiL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL2tleS1nZW5lcmF0b3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YzIxZTg4NDNl
ZGVhNzkxNDg1NGQ0ZGU5MWRhOTQwNDM1Y2JkNDg0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIva2V5LWdlbmVyYXRvci5odG1sCkBAIC0wLDAgKzEsMjIz
IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVk
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+
Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0
IEluZGV4ZWREQidzIGtleSBnZW5lcmF0b3IgYmVoYXZpb3IuIik7CitpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSAKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25l
KCk7CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIGV2YWxBbmRMb2coImluZGV4ZWREQiA9IHdp
bmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4ZWREQiIpOworICAgIHNob3VsZEJl
VHJ1ZSgiaW5kZXhlZERCICE9IG51bGwiKTsKKyAgICBldmFsQW5kTG9nKCJJREJUcmFuc2FjdGlv
biA9IHdpbmRvdy5JREJUcmFuc2FjdGlvbiB8fCB3aW5kb3cud2Via2l0SURCVHJhbnNhY3Rpb24i
KTsKKyAgICBzaG91bGRCZVRydWUoIklEQlRyYW5zYWN0aW9uICE9IG51bGwiKTsKKyAgICBldmFs
QW5kTG9nKCJJREJLZXlSYW5nZSA9IHdpbmRvdy5JREJLZXlSYW5nZSB8fCB3aW5kb3cud2Via2l0
SURCS2V5UmFuZ2UiKTsKKyAgICBzaG91bGRCZVRydWUoIklEQktleVJhbmdlICE9IG51bGwiKTsK
KworICAgIHJ1blRlc3RzKCk7Cit9CisKK3ZhciB0ZXN0cyA9IFtdOworZnVuY3Rpb24gZGVmaW5l
VGVzdChkZXNjcmlwdGlvbiwgdmVyY2hhbmdlLCBvcHRpb25hbCkgeworICB0ZXN0cy5wdXNoKAor
ICAgIHsKKyAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiwKKyAgICAgIHZlcmNoYW5nZTog
dmVyY2hhbmdlLAorICAgICAgb3B0aW9uYWw6IG9wdGlvbmFsCisgICAgfQorICApOworfQorCisK
K2Z1bmN0aW9uIHJ1blRlc3RzKCkgeworCisgICAgZnVuY3Rpb24gbmV4dFRlc3QoKSB7CisgICAg
ICAgIGlmICghdGVzdHMubGVuZ3RoKSB7CisgICAgICAgICAgICBkb25lKCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB2YXIgdGVzdCA9IHRlc3RzLnNoaWZ0KCk7
CisgICAgICAgIGRlYnVnKCIiKTsKKyAgICAgICAgZGVidWcodGVzdC5kZXNjcmlwdGlvbik7CisK
KyAgICAgICAgZXZhbEFuZExvZygicmVxdWVzdCA9IGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgn
a2V5LWdlbmVyYXRvcicpIik7CisgICAgICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRF
cnJvckNhbGxiYWNrOworICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIGV2YWxBbmRMb2coInJlcXVlc3QgPSBpbmRleGVkREIub3Blbigna2V5LWdl
bmVyYXRvcicpIik7CisgICAgICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJy
b3JDYWxsYmFjazsKKyAgICAgICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgICAgIGV2YWxBbmRMb2coImRiID0gcmVxdWVzdC5yZXN1bHQiKTsKKyAg
ICAgICAgICAgICAgICBldmFsQW5kTG9nKCJyZXF1ZXN0ID0gZGIuc2V0VmVyc2lvbignMScpIik7
CisgICAgICAgICAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJh
Y2s7CisgICAgICAgICAgICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGV2YWxBbmRMb2coInRyYW5zID0gcmVxdWVzdC5yZXN1bHQiKTsK
KyAgICAgICAgICAgICAgICAgICAgdHJhbnMub25hYm9ydCA9IHVuZXhwZWN0ZWRBYm9ydENhbGxi
YWNrOworICAgICAgICAgICAgICAgICAgICB0ZXN0LnZlcmNoYW5nZShkYiwgdHJhbnMpOworICAg
ICAgICAgICAgICAgICAgICB0cmFucy5vbmNvbXBsZXRlID0gZnVuY3Rpb24gKCkgeworCisgICAg
ICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV2YWxBbmRMb2coImRiLmNsb3NlKCkiKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuZXh0VGVzdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVzdC5vcHRpb25hbCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRlc3Qub3B0aW9uYWwoZGIsIGZpbmlzaFRlc3QpOworICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5p
c2hUZXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH07CisgICAg
fQorCisgICAgbmV4dFRlc3QoKTsKK30KKworZnVuY3Rpb24gY2hlY2soc3RvcmUsIGtleSwgZXhw
ZWN0ZWQpIHsKKyAgICB3aW5kb3cuc3RvcmUgPSBzdG9yZTsKKyAgICByZXF1ZXN0ID0gZXZhbEFu
ZExvZygicmVxdWVzdCA9IHN0b3JlLmdldCgiICsgSlNPTi5zdHJpbmdpZnkoa2V5KSArICIpIik7
CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgcmVx
dWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICB3aW5kb3cuZXhwZWN0ZWQg
PSBleHBlY3RlZDsKKyAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGV2ZW50LnRhcmdldC5yZXN1
bHQpID09PSBKU09OLnN0cmluZ2lmeShleHBlY3RlZCkpIHsKKyAgICAgICAgICAgIHRlc3RQYXNz
ZWQoIkdvdCAiICsgSlNPTi5zdHJpbmdpZnkoZXZlbnQudGFyZ2V0LnJlc3VsdCkgKyAiIGZvciBr
ZXk6ICIgKyBKU09OLnN0cmluZ2lmeShrZXkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHRlc3RGYWlsZWQoIkdvdCAiICsgSlNPTi5zdHJpbmdpZnkoZXZlbnQudGFyZ2V0LnJlc3Vs
dCkgKyAiIGZvciBrZXk6ICIgKyBKU09OLnN0cmluZ2lmeShrZXkpICsKKyAgICAgICAgICAgICAg
ICAiIGV4cGVjdGVkOiAiICsgSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWQpKTsKKyAgICAgICAgfQor
ICAgIH07Cit9CisKK2RlZmluZVRlc3QoCisgICAgJ1ZlcmlmeSB0aGF0IGVhY2ggb2JqZWN0IHN0
b3JlIGhhcyBhbiBpbmRlcGVuZGVudCBrZXkgZ2VuZXJhdG9yLicsCisgICAgZnVuY3Rpb24gKGRi
LCB0cmFucykgeworICAgICAgICBldmFsQW5kTG9nKCJzdG9yZTEgPSBkYi5jcmVhdGVPYmplY3RT
dG9yZSgnc3RvcmUxJywgeyBhdXRvSW5jcmVtZW50OiB0cnVlIH0pIik7CisgICAgICAgIGV2YWxB
bmRMb2coInN0b3JlMS5wdXQoJ2EnKSIpOworICAgICAgICBjaGVjayhzdG9yZTEsIDEsICdhJyk7
CisgICAgICAgIGV2YWxBbmRMb2coInN0b3JlMiA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9y
ZTInLCB7IGF1dG9JbmNyZW1lbnQ6IHRydWUgfSkiKTsKKyAgICAgICAgZXZhbEFuZExvZygic3Rv
cmUyLnB1dCgnYScpIik7CisgICAgICAgIGNoZWNrKHN0b3JlMiwgMSwgJ2EnKTsKKyAgICAgICAg
ZXZhbEFuZExvZygic3RvcmUxLnB1dCgnYicpIik7CisgICAgICAgIGNoZWNrKHN0b3JlMSwgMiwg
J2InKTsKKyAgICAgICAgZXZhbEFuZExvZygic3RvcmUyLnB1dCgnYicpIik7CisgICAgICAgIGNo
ZWNrKHN0b3JlMiwgMiwgJ2InKTsKKyAgICB9CispOworCitkZWZpbmVUZXN0KAorICAgICdWZXJp
ZnkgdGhhdCB0aGUga2V5IGdlbmVyYXRvciBpcyBub3QgdXBkYXRlZCBpZiBpbnNlcnRpb24gZmFp
bHMnLAorICAgIGZ1bmN0aW9uIChkYiwgdHJhbnMpIHsKKyAgICAgICAgdHJhbnMub25lcnJvciA9
IGZ1bmN0aW9uKGUpIHsgZS5wcmV2ZW50RGVmYXVsdCgpIH07CisgICAgICAgIGV2YWxBbmRMb2co
InN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlMScsIHsgYXV0b0luY3JlbWVudDog
dHJ1ZSB9KSIpOworICAgICAgICBldmFsQW5kTG9nKCJpbmRleCA9IHN0b3JlLmNyZWF0ZUluZGV4
KCdpbmRleDEnLCAnaXgnLCB7IHVuaXF1ZTogdHJ1ZSB9KSIpOworICAgICAgICBldmFsQW5kTG9n
KCJzdG9yZS5wdXQoeyBpeDogJ2EnfSkiKTsKKyAgICAgICAgY2hlY2soc3RvcmUsIDEsIHtpeDog
J2EnfSk7CisgICAgICAgIGV2YWxBbmRMb2coInN0b3JlLnB1dCh7IGl4OiAnYSd9KSIpOworICAg
ICAgICBldmFsQW5kTG9nKCJzdG9yZS5wdXQoeyBpeDogJ2InfSkiKTsKKyAgICAgICAgY2hlY2so
c3RvcmUsIDIsIHtpeDogJ2InfSk7IC8vIEZJWE1FOiBGYWlscyBpbiBDaHJvbWl1bSAoaXQgZ2V0
cyBrZXkgMykuCisgICAgfQorKTsKKworZGVmaW5lVGVzdCgKKyAgICAnVmVyaWZ5IHRoYXQgdGhl
IGtleSBnZW5lcmF0b3IgaXMgbm90IGFmZmVjdGVkIGJ5IGl0ZW0gcmVtb3ZhbCAoZGVsZXRlIG9y
IGNsZWFyKS4nLAorICAgIGZ1bmN0aW9uIChkYiwgdHJhbnMpIHsKKyAgICAgICAgZXZhbEFuZExv
Zygic3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUxJywgeyBhdXRvSW5jcmVtZW50
OiB0cnVlIH0pIik7CisgICAgICAgIGV2YWxBbmRMb2coInN0b3JlLnB1dCgnYScpIik7CisgICAg
ICAgIGNoZWNrKHN0b3JlLCAxLCAnYScpOworICAgICAgICBldmFsQW5kTG9nKCJzdG9yZS5kZWxl
dGUoMSkiKTsKKyAgICAgICAgZXZhbEFuZExvZygic3RvcmUucHV0KCdiJykiKTsKKyAgICAgICAg
Y2hlY2soc3RvcmUsIDIsICdiJyk7CisgICAgICAgIGV2YWxBbmRMb2coInN0b3JlLmNsZWFyKCki
KTsKKyAgICAgICAgZXZhbEFuZExvZygic3RvcmUucHV0KCdjJykiKTsKKyAgICAgICAgY2hlY2so
c3RvcmUsIDMsICdjJyk7CisgICAgICAgIC8vIEZJWE1FOiBJREJPYmplY3RTdG9yZS5kZWxldGUo
SURCS2V5UmFuZ2UpIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gQ2hyb21pdW0uCisgICAgICAg
IC8vIGh0dHA6Ly9jcmJ1Zy5jb20vMTAxMzg0CisgICAgICAgIC8vZXZhbEFuZExvZygic3RvcmUu
ZGVsZXRlKElEQktleVJhbmdlLmxvd2VyQm91bmQoMCkpIik7CisgICAgICAgIGV2YWxBbmRMb2co
InN0b3JlLnB1dCgnZCcpIik7CisgICAgICAgIGNoZWNrKHN0b3JlLCA0LCAnZCcpOworICAgIH0K
Kyk7CisKK2RlZmluZVRlc3QoCisgICAgJ1ZlcmlmeSB0aGF0IHRoZSBrZXkgZ2VuZXJhdG9yIGlz
IG9ubHkgc2V0IGlmIGFuZCBvbmx5IGlmIGEgbnVtZXJpYyBrZXkgZ3JlYXRlciB0aGFuIHRoZSBs
YXN0IGdlbmVyYXRkIGtleSBpcyB1c2VkLicsCisgICAgZnVuY3Rpb24gKGRiLCB0cmFucykgewor
ICAgICAgICBldmFsQW5kTG9nKCJzdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZTEn
LCB7IGF1dG9JbmNyZW1lbnQ6IHRydWUgfSkiKTsKKyAgICAgICAgZXZhbEFuZExvZygic3RvcmUu
cHV0KCdhJykiKTsKKyAgICAgICAgY2hlY2soc3RvcmUsIDEsICdhJyk7CisgICAgICAgIGV2YWxB
bmRMb2coInN0b3JlLnB1dCgnYicsIDMpIik7CisgICAgICAgIGNoZWNrKHN0b3JlLCAzLCAnYicp
OworICAgICAgICBldmFsQW5kTG9nKCJzdG9yZS5wdXQoJ2MnKSIpOworICAgICAgICBjaGVjayhz
dG9yZSwgNCwgJ2MnKTsKKyAgICAgICAgZXZhbEFuZExvZygic3RvcmUucHV0KCdkJywgLTEwKSIp
OworICAgICAgICBjaGVjayhzdG9yZSwgLTEwLCAnZCcpOworICAgICAgICBldmFsQW5kTG9nKCJz
dG9yZS5wdXQoJ2UnKSIpOworICAgICAgICBjaGVjayhzdG9yZSwgNSwgJ2UnKTsKKyAgICAgICAg
ZXZhbEFuZExvZygic3RvcmUucHV0KCdmJywgNi4wMDAwMSkiKTsKKyAgICAgICAgY2hlY2soc3Rv
cmUsIDYuMDAwMDEsICdmJyk7CisgICAgICAgIGV2YWxBbmRMb2coInN0b3JlLnB1dCgnZycpIik7
CisgICAgICAgIGNoZWNrKHN0b3JlLCA3LCAnZycpOworICAgICAgICBldmFsQW5kTG9nKCJzdG9y
ZS5wdXQoJ2YnLCA4Ljk5OTkpIik7CisgICAgICAgIGNoZWNrKHN0b3JlLCA4Ljk5OTksICdmJyk7
CisgICAgICAgIGV2YWxBbmRMb2coInN0b3JlLnB1dCgnZycpIik7CisgICAgICAgIGNoZWNrKHN0
b3JlLCA5LCAnZycpOworICAgICAgICBldmFsQW5kTG9nKCJzdG9yZS5wdXQoJ2gnLCAnZm9vJyki
KTsKKyAgICAgICAgY2hlY2soc3RvcmUsICdmb28nLCAnaCcpOworICAgICAgICBldmFsQW5kTG9n
KCJzdG9yZS5wdXQoJ2knKSIpOworICAgICAgICBjaGVjayhzdG9yZSwgMTAsICdpJyk7CisgICAg
ICAgIGV2YWxBbmRMb2coInN0b3JlLnB1dCgnaicsIFsxMDAwXSkiKTsKKyAgICAgICAgY2hlY2so
c3RvcmUsIFsxMDAwXSwgJ2onKTsKKyAgICAgICAgZXZhbEFuZExvZygic3RvcmUucHV0KCdrJyki
KTsKKyAgICAgICAgY2hlY2soc3RvcmUsIDExLCAnaycpOworCisgICAgICAgIC8vIEZJWE1FOiBS
ZXBlYXQgdGhpcyB0ZXN0LCBidXQgd2l0aCBhIGtleVBhdGggYW5kIGlubGluZSBrZXkuCisgICAg
fQorKTsKKworZGVmaW5lVGVzdCgKKyAgICAnVmVyaWZ5IHRoYXQgYWJvcnRpbmcgYSB0cmFuc2Fj
dGlvbiByZXNldHMgdGhlIGtleSBnZW5lcmF0b3Igc3RhdGUuJywKKyAgICBmdW5jdGlvbiAoZGIs
IHRyYW5zKSB7CisgICAgICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZScsIHsgYXV0b0lu
Y3JlbWVudDogdHJ1ZSB9KTsKKyAgICB9LAorCisgICAgZnVuY3Rpb24gKGRiLCBjYWxsYmFjaykg
eworICAgICAgICBldmFsQW5kTG9nKCJ0cmFuczEgPSBkYi50cmFuc2FjdGlvbihbJ3N0b3JlJ10s
IElEQlRyYW5zYWN0aW9uLlJFQURfV1JJVEUpIik7CisgICAgICAgIGV2YWxBbmRMb2coInN0b3Jl
X3QxID0gdHJhbnMxLm9iamVjdFN0b3JlKCdzdG9yZScpIik7CisgICAgICAgIGV2YWxBbmRMb2co
InN0b3JlX3QxLnB1dCgnYScpIik7CisgICAgICAgIGNoZWNrKHN0b3JlX3QxLCAxLCAnYScpOwor
ICAgICAgICBldmFsQW5kTG9nKCJzdG9yZV90MS5wdXQoJ2InKSIpOworICAgICAgICBjaGVjayhz
dG9yZV90MSwgMiwgJ2InKTsKKworICAgICAgICAvLyBTY2hlZHVsZSB0aGUgYWJvcnQgYXMgYSB0
YXNrIChub3QgcnVuIGl0IHN5bmNocm9ub3VzbHkpCisgICAgICAgIHN0b3JlX3QxLmdldCgwKS5v
bnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBjb25zb2xlLmxvZygnYWJvcnRp
bmcuLi4nKTsKKyAgICAgICAgICAgIGV2YWxBbmRMb2coInRyYW5zMS5hYm9ydCgpIik7CisgICAg
ICAgICAgICB0cmFuczEub25hYm9ydCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBj
b25zb2xlLmxvZygnYWJvcnRlZCEnKTsKKworICAgICAgICAgICAgICAgIGV2YWxBbmRMb2coInRy
YW5zMiA9IGRiLnRyYW5zYWN0aW9uKFsnc3RvcmUnXSwgSURCVHJhbnNhY3Rpb24uUkVBRF9XUklU
RSkiKTsKKyAgICAgICAgICAgICAgICBldmFsQW5kTG9nKCJzdG9yZV90MiA9IHRyYW5zMi5vYmpl
Y3RTdG9yZSgnc3RvcmUnKSIpOworICAgICAgICAgICAgICAgIGV2YWxBbmRMb2coInN0b3JlX3Qy
LnB1dCgnYycpIik7CisgICAgICAgICAgICAgICAgY2hlY2soc3RvcmVfdDIsIDEsICdjJyk7IC8v
IEZJWE1FOiBGYWlscyBpbiBDaHJvbWl1bSAoaXQgZ2V0cyBrZXkgMykuCisgICAgICAgICAgICAg
ICAgZXZhbEFuZExvZygic3RvcmVfdDIucHV0KCdkJykiKTsKKyAgICAgICAgICAgICAgICBjaGVj
ayhzdG9yZV90MiwgMiwgJ2QnKTsgLy8gRklYTUU6IEZhaWxzIGluIENocm9taXVtIChpdCBnZXRz
IGtleSA0KS4KKworICAgICAgICAgICAgICAgIHRyYW5zMi5vbmNvbXBsZXRlID0gY2FsbGJhY2s7
CisgICAgICAgICAgICB9OworICAgICAgICB9OworICAgIH0KKyk7CisKK3Rlc3QoKTsKKworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125359</attachid>
            <date>2012-02-03 10:13:02 -0800</date>
            <delta_ts>2012-02-03 16:17:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77060-20120203101301.patch</filename>
            <type>text/plain</type>
            <size>19424</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmVmNjU5OTFkYjhjNmQx
ODQ3ZjIyZWJjYmZjODM5YmM3ZGY4YzdlMC4uNzZmNTM5YmY1MDI0MGI1M2IzYjI2MTlhYzNiZDFh
Yzg0ZjJkN2FjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEyLTAxLTMxICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBLZXkg
Z2VuZXJhdG9ycyBub3Qgcm9sbGVkIGJhY2sgaWYgaW5zZXJ0aW9uIGZhaWxzIG9yIGlzIGFib3J0
ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MDYw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDog
c3RvcmFnZS9pbmRleGVkZGIva2V5LWdlbmVyYXRvci5odG1sCisKKyAgICAgICAgKiBzdG9yYWdl
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KTogQWRkIGFib3J0IHRhc2sgdG8gcmVzZXQgY2FjaGUu
CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZXZlcnRBdXRv
SW5jcmVtZW50S2V5Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCk6IFJlc2V0IGNhY2hlIG9u
IGVycm9yLgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oOgor
ICAgICAgICAoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCk6CisKIDIwMTItMDItMDIgIE1hcmlv
IFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHdGtdIGF0
a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCgpIHNvbWV0aW1lcyBmYWlscyB0byBwcm92aWRlIHRo
ZSBjb3JyZWN0IGxpbmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwuY3BwCmluZGV4IGNlMDQyYmViNmZkNjY0N2U4Mjg1MjYyODRiYmVm
Yzk1MjhmMWY2NzcuLmY5YmQ3ODAyMzM0MWNkNTNmYWFhZGU1NDgzODI5NTk3MzZkNDA2ODAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmNwcApAQCAtMTc4LDEwICsxNzgsMTggQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLAogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0
ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwsIG9i
amVjdFN0b3JlLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSkp
CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAorICAgICAgICAgICAgY3JlYXRl
Q2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCwgb2Jq
ZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pLAor
ICAgICAgICAgICAgLy8gRklYTUU6IE9uZSBvZiB0aGVzZSBwZXIgcHV0KCkgaXMgb3ZlcmtpbGws
IHNpbmNlIGl0J3Mgc2ltcGx5IGEgY2FjaGUgaW52YWxpZGF0aW9uLgorICAgICAgICAgICAgY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZXZlcnRBdXRvSW5j
cmVtZW50S2V5Q2FjaGUsIG9iamVjdFN0b3JlKSkpCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKIH0KIAordm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpyZXZlcnRBdXRvSW5jcmVtZW50S2V5Q2FjaGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0
U3RvcmUpCit7CisgICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCk7
Cit9CisKIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4g
b2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwg
UGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4gdHJhbnNhY3Rpb24pCiB7CiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKQEAgLTIwNCw2ICsyMTIsNyBAQCB2b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPAogICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzczNzQKICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gdmFsdWVBZnRlckluamVjdGlvbiA9IGluamVjdEtleUludG9LZXlQYXRo
KGF1dG9JbmNLZXksIHZhbHVlLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCF2YWx1ZUFmdGVySW5qZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBvYmplY3RTdG9yZS0+cmVzZXRBdXRvSW5jcmVtZW50S2V5Q2FjaGUoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSLCAiVGhlIGdlbmVyYXRlZCBrZXkgY291
bGQgbm90IGJlIGluc2VydGVkIGludG8gdGhlIG9iamVjdCB1c2luZyB0aGUga2V5UGF0aC4iKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIH0K
QEAgLTIyMSw2ICsyMzAsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dElu
dGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogCiAgICAgUmVmUHRy
PElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVu
dGlmaWVyID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5jcmVhdGVJbnZhbGlkUmVjb3Jk
SWRlbnRpZmllcigpOwogICAgIGlmIChwdXRNb2RlID09IEFkZE9ubHkgJiYgb2JqZWN0U3RvcmUt
Pm1fYmFja2luZ1N0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKG9iamVjdFN0b3JlLT5tX2Rh
dGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpLCAqa2V5LCByZWNvcmRJZGVudGlmaWVyLmdldCgp
KSkgeworICAgICAgICBvYmplY3RTdG9yZS0+cmVzZXRBdXRvSW5jcmVtZW50S2V5Q2FjaGUoKTsK
ICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIsICJLZXkgYWxyZWFkeSBleGlzdHMgaW4g
dGhlIG9iamVjdCBzdG9yZS4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yMzcsMTMg
KzI0NywxNSBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogICAgICAgICBBU1NFUlQoaW5kZXhL
ZXktPnZhbGlkKCkpOwogCiAgICAgICAgIGlmICgoIWluZGV4LT5tdWx0aUVudHJ5KCkgfHwgaW5k
ZXhLZXktPnR5cGUoKSAhPSBJREJLZXk6OkFycmF5VHlwZSkgJiYgIWluZGV4LT5hZGRpbmdLZXlB
bGxvd2VkKGluZGV4S2V5LmdldCgpLCBrZXkuZ2V0KCkpKSB7CisgICAgICAgICAgICBvYmplY3RT
dG9yZS0+cmVzZXRBdXRvSW5jcmVtZW50S2V5Q2FjaGUoKTsKICAgICAgICAgICAgIGNhbGxiYWNr
cy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OkNPTlNUUkFJTlRfRVJSLCAiT25lIG9mIHRoZSBkZXJpdmVkIChmcm9tIGEga2V5UGF0aCkga2V5
cyBmb3IgYW4gaW5kZXggZG9lcyBub3Qgc2F0aXNmeSBpdHMgdW5pcXVlbmVzcyByZXF1aXJlbWVu
dHMuIikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICBpZiAoaW5k
ZXgtPm11bHRpRW50cnkoKSAmJiBpbmRleEtleS0+dHlwZSgpID09IElEQktleTo6QXJyYXlUeXBl
KSB7CisgICAgICAgIGlmIChpbmRleC0+bXVsdGlFbnRyeSgpICYmIGluZGV4S2V5LT50eXBlKCkg
PT0gSURCS2V5OjpBcnJheVR5cGUpIHsKICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGog
PCBpbmRleEtleS0+YXJyYXkoKS5zaXplKCk7ICsraikgewogICAgICAgICAgICAgICAgIGlmICgh
aW5kZXgtPmFkZGluZ0tleUFsbG93ZWQoaW5kZXhLZXktPmFycmF5KClbal0uZ2V0KCksIGtleS5n
ZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0luY3Jl
bWVudEtleUNhY2hlKCk7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRf
RVJSLCAiT25lIG9mIHRoZSBkZXJpdmVkIChmcm9tIGEga2V5UGF0aCkga2V5cyBmb3IgYW4gaW5k
ZXggZG9lcyBub3Qgc2F0aXNmeSBpdHMgdW5pcXVlbmVzcyByZXF1aXJlbWVudHMuIikpOwogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAppbmRleCA3YzEy
ZDg0NzIyMzBkODNjYWU1ZGQwYTRhNmFlODI0NTU3YTYxOGQwLi5iZGJmMWYxNmFmNjJhZTkyYzg2
Mjk5OWYyMjgyNzZkYWJkZjc1NmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaApAQCAtMTAwLDYgKzEwMCw3IEBAIHByaXZhdGU6
CiAgICAgLy8gVGhlc2UgYXJlIHVzZWQgYXMgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbiBhYm9ydCB0
YXNrcy4KICAgICBzdGF0aWMgdm9pZCByZW1vdmVJbmRleEZyb21NYXAoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIGFkZEluZGV4VG9NYXAo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4pOworICAgIHN0YXRpYyB2b2lk
IHJldmVydEF1dG9JbmNyZW1lbnRLZXlDYWNoZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPik7CiAKICAgICBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGZjNTc0YjFhYTAxZDhjMWJmOTFk
YTY3NjM0ZDFkYTdmMjczZmJkM2IuLjA1ZjliODU0ZjY4ZDZiNmE3Y2U2NDlkYmJhMDZmNWYyODhi
N2E4ZDYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wMS0zMSAgSm9zaHVhIEJlbGwgIDxq
c2JlbGxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogS2V5IGdlbmVyYXRvcnMg
bm90IHJvbGxlZCBiYWNrIGlmIGluc2VydGlvbiBmYWlscyBvciBpcyBhYm9ydGVkCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzA2MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RvcmFnZS9pbmRleGVk
ZGIva2V5LWdlbmVyYXRvci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2Uv
aW5kZXhlZGRiL2tleS1nZW5lcmF0b3IuaHRtbDogQWRkZWQuCisKIDIwMTItMDItMDIgIFJhdWwg
SHVkZWEgIDxyaHVkZWFAYWRvYmUuY29tPgogCiAgICAgICAgIFJlZ2lvbnMgc2hvdWxkIGlnbm9y
ZSB0aGUgc2F2ZWQgY3VycmVudFJlbmRlckZsb3dUaHJlYWQgZHVyaW5nIHJlcGFpbnRpbmcKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2tleS1nZW5lcmF0b3ItZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIva2V5LWdlbmVyYXRvci1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTA5ZDI0ODNmMzUzODQ4NzZkMGYzMDJmYzljOGM2M2Zm
ZTYyYmNlNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L2tleS1nZW5lcmF0b3ItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTUyIEBACitUZXN0IEluZGV4
ZWREQidzIGtleSBnZW5lcmF0b3IgYmVoYXZpb3IuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitpbmRleGVkREIgPSB3aW5kb3cuaW5kZXhlZERCIHx8IHdpbmRvdy53ZWJraXRJbmRl
eGVkREIKK1BBU1MgaW5kZXhlZERCICE9IG51bGwgaXMgdHJ1ZQorSURCVHJhbnNhY3Rpb24gPSB3
aW5kb3cuSURCVHJhbnNhY3Rpb24gfHwgd2luZG93LndlYmtpdElEQlRyYW5zYWN0aW9uCitQQVNT
IElEQlRyYW5zYWN0aW9uICE9IG51bGwgaXMgdHJ1ZQorSURCS2V5UmFuZ2UgPSB3aW5kb3cuSURC
S2V5UmFuZ2UgfHwgd2luZG93LndlYmtpdElEQktleVJhbmdlCitQQVNTIElEQktleVJhbmdlICE9
IG51bGwgaXMgdHJ1ZQorCitWZXJpZnkgdGhhdCBlYWNoIG9iamVjdCBzdG9yZSBoYXMgYW4gaW5k
ZXBlbmRlbnQga2V5IGdlbmVyYXRvci4KK3JlcXVlc3QgPSBpbmRleGVkREIuZGVsZXRlRGF0YWJh
c2UoJ2tleS1nZW5lcmF0b3InKQorcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKCdrZXktZ2VuZXJh
dG9yJykKK2RiID0gcmVxdWVzdC5yZXN1bHQKK3JlcXVlc3QgPSBkYi5zZXRWZXJzaW9uKCcxJykK
K3RyYW5zID0gcmVxdWVzdC5yZXN1bHQKK3N0b3JlMSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdz
dG9yZTEnLCB7IGF1dG9JbmNyZW1lbnQ6IHRydWUgfSkKK3N0b3JlMS5wdXQoJ2EnKQorcmVxdWVz
dCA9IHN0b3JlLmdldCgxKQorc3RvcmUyID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlMics
IHsgYXV0b0luY3JlbWVudDogdHJ1ZSB9KQorc3RvcmUyLnB1dCgnYScpCityZXF1ZXN0ID0gc3Rv
cmUuZ2V0KDEpCitzdG9yZTEucHV0KCdiJykKK3JlcXVlc3QgPSBzdG9yZS5nZXQoMikKK3N0b3Jl
Mi5wdXQoJ2InKQorcmVxdWVzdCA9IHN0b3JlLmdldCgyKQorUEFTUyBHb3QgImEiIGZvciBrZXk6
IDEKK1BBU1MgR290ICJhIiBmb3Iga2V5OiAxCitQQVNTIEdvdCAiYiIgZm9yIGtleTogMgorUEFT
UyBHb3QgImIiIGZvciBrZXk6IDIKK2RiLmNsb3NlKCkKKworVmVyaWZ5IHRoYXQgdGhlIGtleSBn
ZW5lcmF0b3IgaXMgbm90IHVwZGF0ZWQgaWYgaW5zZXJ0aW9uIGZhaWxzCityZXF1ZXN0ID0gaW5k
ZXhlZERCLmRlbGV0ZURhdGFiYXNlKCdrZXktZ2VuZXJhdG9yJykKK3JlcXVlc3QgPSBpbmRleGVk
REIub3Blbigna2V5LWdlbmVyYXRvcicpCitkYiA9IHJlcXVlc3QucmVzdWx0CityZXF1ZXN0ID0g
ZGIuc2V0VmVyc2lvbignMScpCit0cmFucyA9IHJlcXVlc3QucmVzdWx0CitzdG9yZSA9IGRiLmNy
ZWF0ZU9iamVjdFN0b3JlKCdzdG9yZTEnLCB7IGF1dG9JbmNyZW1lbnQ6IHRydWUgfSkKK2luZGV4
ID0gc3RvcmUuY3JlYXRlSW5kZXgoJ2luZGV4MScsICdpeCcsIHsgdW5pcXVlOiB0cnVlIH0pCitz
dG9yZS5wdXQoeyBpeDogJ2EnfSkKK3JlcXVlc3QgPSBzdG9yZS5nZXQoMSkKK3N0b3JlLnB1dCh7
IGl4OiAnYSd9KQorc3RvcmUucHV0KHsgaXg6ICdiJ30pCityZXF1ZXN0ID0gc3RvcmUuZ2V0KDIp
CitQQVNTIEdvdCB7Iml4IjoiYSJ9IGZvciBrZXk6IDEKK1BBU1MgR290IHsiaXgiOiJiIn0gZm9y
IGtleTogMgorZGIuY2xvc2UoKQorCitWZXJpZnkgdGhhdCB0aGUga2V5IGdlbmVyYXRvciBpcyBu
b3QgYWZmZWN0ZWQgYnkgaXRlbSByZW1vdmFsIChkZWxldGUgb3IgY2xlYXIpLgorcmVxdWVzdCA9
IGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgna2V5LWdlbmVyYXRvcicpCityZXF1ZXN0ID0gaW5k
ZXhlZERCLm9wZW4oJ2tleS1nZW5lcmF0b3InKQorZGIgPSByZXF1ZXN0LnJlc3VsdAorcmVxdWVz
dCA9IGRiLnNldFZlcnNpb24oJzEnKQordHJhbnMgPSByZXF1ZXN0LnJlc3VsdAorc3RvcmUgPSBk
Yi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUxJywgeyBhdXRvSW5jcmVtZW50OiB0cnVlIH0pCitz
dG9yZS5wdXQoJ2EnKQorcmVxdWVzdCA9IHN0b3JlLmdldCgxKQorc3RvcmUuZGVsZXRlKDEpCitz
dG9yZS5wdXQoJ2InKQorcmVxdWVzdCA9IHN0b3JlLmdldCgyKQorc3RvcmUuY2xlYXIoKQorc3Rv
cmUucHV0KCdjJykKK3JlcXVlc3QgPSBzdG9yZS5nZXQoMykKK3N0b3JlLnB1dCgnZCcpCityZXF1
ZXN0ID0gc3RvcmUuZ2V0KDQpCitQQVNTIEdvdCAiYSIgZm9yIGtleTogMQorUEFTUyBHb3QgImIi
IGZvciBrZXk6IDIKK1BBU1MgR290ICJjIiBmb3Iga2V5OiAzCitQQVNTIEdvdCAiZCIgZm9yIGtl
eTogNAorZGIuY2xvc2UoKQorCitWZXJpZnkgdGhhdCB0aGUga2V5IGdlbmVyYXRvciBpcyBvbmx5
IHNldCBpZiBhbmQgb25seSBpZiBhIG51bWVyaWMga2V5IGdyZWF0ZXIgdGhhbiB0aGUgbGFzdCBn
ZW5lcmF0ZWQga2V5IGlzIHVzZWQuCityZXF1ZXN0ID0gaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNl
KCdrZXktZ2VuZXJhdG9yJykKK3JlcXVlc3QgPSBpbmRleGVkREIub3Blbigna2V5LWdlbmVyYXRv
cicpCitkYiA9IHJlcXVlc3QucmVzdWx0CityZXF1ZXN0ID0gZGIuc2V0VmVyc2lvbignMScpCit0
cmFucyA9IHJlcXVlc3QucmVzdWx0CitzdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9y
ZTEnLCB7IGF1dG9JbmNyZW1lbnQ6IHRydWUgfSkKK3N0b3JlLnB1dCgnYScpCityZXF1ZXN0ID0g
c3RvcmUuZ2V0KDEpCitzdG9yZS5wdXQoJ2InLCAzKQorcmVxdWVzdCA9IHN0b3JlLmdldCgzKQor
c3RvcmUucHV0KCdjJykKK3JlcXVlc3QgPSBzdG9yZS5nZXQoNCkKK3N0b3JlLnB1dCgnZCcsIC0x
MCkKK3JlcXVlc3QgPSBzdG9yZS5nZXQoLTEwKQorc3RvcmUucHV0KCdlJykKK3JlcXVlc3QgPSBz
dG9yZS5nZXQoNSkKK3N0b3JlLnB1dCgnZicsIDYuMDAwMDEpCityZXF1ZXN0ID0gc3RvcmUuZ2V0
KDYuMDAwMDEpCitzdG9yZS5wdXQoJ2cnKQorcmVxdWVzdCA9IHN0b3JlLmdldCg3KQorc3RvcmUu
cHV0KCdmJywgOC45OTk5KQorcmVxdWVzdCA9IHN0b3JlLmdldCg4Ljk5OTkpCitzdG9yZS5wdXQo
J2cnKQorcmVxdWVzdCA9IHN0b3JlLmdldCg5KQorc3RvcmUucHV0KCdoJywgJ2ZvbycpCityZXF1
ZXN0ID0gc3RvcmUuZ2V0KCJmb28iKQorc3RvcmUucHV0KCdpJykKK3JlcXVlc3QgPSBzdG9yZS5n
ZXQoMTApCitzdG9yZS5wdXQoJ2onLCBbMTAwMF0pCityZXF1ZXN0ID0gc3RvcmUuZ2V0KFsxMDAw
XSkKK3N0b3JlLnB1dCgnaycpCityZXF1ZXN0ID0gc3RvcmUuZ2V0KDExKQorUEFTUyBHb3QgImEi
IGZvciBrZXk6IDEKK1BBU1MgR290ICJiIiBmb3Iga2V5OiAzCitQQVNTIEdvdCAiYyIgZm9yIGtl
eTogNAorUEFTUyBHb3QgImQiIGZvciBrZXk6IC0xMAorUEFTUyBHb3QgImUiIGZvciBrZXk6IDUK
K1BBU1MgR290ICJmIiBmb3Iga2V5OiA2LjAwMDAxCitQQVNTIEdvdCAiZyIgZm9yIGtleTogNwor
UEFTUyBHb3QgImYiIGZvciBrZXk6IDguOTk5OQorUEFTUyBHb3QgImciIGZvciBrZXk6IDkKK1BB
U1MgR290ICJoIiBmb3Iga2V5OiAiZm9vIgorUEFTUyBHb3QgImkiIGZvciBrZXk6IDEwCitQQVNT
IEdvdCAiaiIgZm9yIGtleTogWzEwMDBdCitQQVNTIEdvdCAiayIgZm9yIGtleTogMTEKK2RiLmNs
b3NlKCkKKworVmVyaWZ5IHRoYXQgYWJvcnRpbmcgYSB0cmFuc2FjdGlvbiByZXNldHMgdGhlIGtl
eSBnZW5lcmF0b3Igc3RhdGUuCityZXF1ZXN0ID0gaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKCdr
ZXktZ2VuZXJhdG9yJykKK3JlcXVlc3QgPSBpbmRleGVkREIub3Blbigna2V5LWdlbmVyYXRvcicp
CitkYiA9IHJlcXVlc3QucmVzdWx0CityZXF1ZXN0ID0gZGIuc2V0VmVyc2lvbignMScpCit0cmFu
cyA9IHJlcXVlc3QucmVzdWx0Cit0cmFuczEgPSBkYi50cmFuc2FjdGlvbihbJ3N0b3JlJ10sIElE
QlRyYW5zYWN0aW9uLlJFQURfV1JJVEUpCitzdG9yZV90MSA9IHRyYW5zMS5vYmplY3RTdG9yZSgn
c3RvcmUnKQorc3RvcmVfdDEucHV0KCdhJykKK3JlcXVlc3QgPSBzdG9yZS5nZXQoMSkKK3N0b3Jl
X3QxLnB1dCgnYicpCityZXF1ZXN0ID0gc3RvcmUuZ2V0KDIpCitQQVNTIEdvdCAiYSIgZm9yIGtl
eTogMQorUEFTUyBHb3QgImIiIGZvciBrZXk6IDIKK2Fib3J0aW5nLi4uCit0cmFuczEuYWJvcnQo
KQorYWJvcnRlZCEKK3RyYW5zMiA9IGRiLnRyYW5zYWN0aW9uKFsnc3RvcmUnXSwgSURCVHJhbnNh
Y3Rpb24uUkVBRF9XUklURSkKK3N0b3JlX3QyID0gdHJhbnMyLm9iamVjdFN0b3JlKCdzdG9yZScp
CitzdG9yZV90Mi5wdXQoJ2MnKQorcmVxdWVzdCA9IHN0b3JlLmdldCgxKQorc3RvcmVfdDIucHV0
KCdkJykKK3JlcXVlc3QgPSBzdG9yZS5nZXQoMikKK1BBU1MgR290ICJjIiBmb3Iga2V5OiAxCitQ
QVNTIEdvdCAiZCIgZm9yIGtleTogMgorZGIuY2xvc2UoKQorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL2tleS1nZW5lcmF0b3IuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL2tleS1nZW5lcmF0b3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMTI0MDQ1MzExNDViZTcz
YmJmMzAwYjE0NGIwN2Q2ZjBjZDFlZjMxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIva2V5LWdlbmVyYXRvci5odG1sCkBAIC0wLDAgKzEsMjIzIEBACis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0IEluZGV4
ZWREQidzIGtleSBnZW5lcmF0b3IgYmVoYXZpb3IuIik7CitpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKSAKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisK
K2Z1bmN0aW9uIHRlc3QoKQoreworICAgIGV2YWxBbmRMb2coImluZGV4ZWREQiA9IHdpbmRvdy5p
bmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4ZWREQiIpOworICAgIHNob3VsZEJlVHJ1ZSgi
aW5kZXhlZERCICE9IG51bGwiKTsKKyAgICBldmFsQW5kTG9nKCJJREJUcmFuc2FjdGlvbiA9IHdp
bmRvdy5JREJUcmFuc2FjdGlvbiB8fCB3aW5kb3cud2Via2l0SURCVHJhbnNhY3Rpb24iKTsKKyAg
ICBzaG91bGRCZVRydWUoIklEQlRyYW5zYWN0aW9uICE9IG51bGwiKTsKKyAgICBldmFsQW5kTG9n
KCJJREJLZXlSYW5nZSA9IHdpbmRvdy5JREJLZXlSYW5nZSB8fCB3aW5kb3cud2Via2l0SURCS2V5
UmFuZ2UiKTsKKyAgICBzaG91bGRCZVRydWUoIklEQktleVJhbmdlICE9IG51bGwiKTsKKworICAg
IHJ1blRlc3RzKCk7Cit9CisKK3ZhciB0ZXN0cyA9IFtdOworZnVuY3Rpb24gZGVmaW5lVGVzdChk
ZXNjcmlwdGlvbiwgdmVyY2hhbmdlLCBvcHRpb25hbCkgeworICB0ZXN0cy5wdXNoKAorICAgIHsK
KyAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiwKKyAgICAgIHZlcmNoYW5nZTogdmVyY2hh
bmdlLAorICAgICAgb3B0aW9uYWw6IG9wdGlvbmFsCisgICAgfQorICApOworfQorCisKK2Z1bmN0
aW9uIHJ1blRlc3RzKCkgeworCisgICAgZnVuY3Rpb24gbmV4dFRlc3QoKSB7CisgICAgICAgIGlm
ICghdGVzdHMubGVuZ3RoKSB7CisgICAgICAgICAgICBkb25lKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICB2YXIgdGVzdCA9IHRlc3RzLnNoaWZ0KCk7CisgICAg
ICAgIGRlYnVnKCIiKTsKKyAgICAgICAgZGVidWcodGVzdC5kZXNjcmlwdGlvbik7CisKKyAgICAg
ICAgZXZhbEFuZExvZygicmVxdWVzdCA9IGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgna2V5LWdl
bmVyYXRvcicpIik7CisgICAgICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNh
bGxiYWNrOworICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIGV2YWxBbmRMb2coInJlcXVlc3QgPSBpbmRleGVkREIub3Blbigna2V5LWdlbmVyYXRv
cicpIik7CisgICAgICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxs
YmFjazsKKyAgICAgICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgICAgIGV2YWxBbmRMb2coImRiID0gcmVxdWVzdC5yZXN1bHQiKTsKKyAgICAgICAg
ICAgICAgICBldmFsQW5kTG9nKCJyZXF1ZXN0ID0gZGIuc2V0VmVyc2lvbignMScpIik7CisgICAg
ICAgICAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cisg
ICAgICAgICAgICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICAgICAgICAgIGV2YWxBbmRMb2coInRyYW5zID0gcmVxdWVzdC5yZXN1bHQiKTsKKyAgICAg
ICAgICAgICAgICAgICAgdHJhbnMub25hYm9ydCA9IHVuZXhwZWN0ZWRBYm9ydENhbGxiYWNrOwor
ICAgICAgICAgICAgICAgICAgICB0ZXN0LnZlcmNoYW5nZShkYiwgdHJhbnMpOworICAgICAgICAg
ICAgICAgICAgICB0cmFucy5vbmNvbXBsZXRlID0gZnVuY3Rpb24gKCkgeworCisgICAgICAgICAg
ICAgICAgICAgICAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV2YWxBbmRMb2coImRiLmNsb3NlKCkiKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuZXh0VGVzdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodGVzdC5vcHRpb25hbCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRlc3Qub3B0aW9uYWwoZGIsIGZpbmlzaFRlc3QpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hUZXN0
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH07CisgICAgfQorCisg
ICAgbmV4dFRlc3QoKTsKK30KKworZnVuY3Rpb24gY2hlY2soc3RvcmUsIGtleSwgZXhwZWN0ZWQp
IHsKKyAgICB3aW5kb3cuc3RvcmUgPSBzdG9yZTsKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygi
cmVxdWVzdCA9IHN0b3JlLmdldCgiICsgSlNPTi5zdHJpbmdpZnkoa2V5KSArICIpIik7CisgICAg
cmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgcmVxdWVzdC5v
bnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICB3aW5kb3cuZXhwZWN0ZWQgPSBleHBl
Y3RlZDsKKyAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGV2ZW50LnRhcmdldC5yZXN1bHQpID09
PSBKU09OLnN0cmluZ2lmeShleHBlY3RlZCkpIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIkdv
dCAiICsgSlNPTi5zdHJpbmdpZnkoZXZlbnQudGFyZ2V0LnJlc3VsdCkgKyAiIGZvciBrZXk6ICIg
KyBKU09OLnN0cmluZ2lmeShrZXkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRl
c3RGYWlsZWQoIkdvdCAiICsgSlNPTi5zdHJpbmdpZnkoZXZlbnQudGFyZ2V0LnJlc3VsdCkgKyAi
IGZvciBrZXk6ICIgKyBKU09OLnN0cmluZ2lmeShrZXkpICsKKyAgICAgICAgICAgICAgICAiIGV4
cGVjdGVkOiAiICsgSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWQpKTsKKyAgICAgICAgfQorICAgIH07
Cit9CisKK2RlZmluZVRlc3QoCisgICAgJ1ZlcmlmeSB0aGF0IGVhY2ggb2JqZWN0IHN0b3JlIGhh
cyBhbiBpbmRlcGVuZGVudCBrZXkgZ2VuZXJhdG9yLicsCisgICAgZnVuY3Rpb24gKGRiLCB0cmFu
cykgeworICAgICAgICBldmFsQW5kTG9nKCJzdG9yZTEgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgn
c3RvcmUxJywgeyBhdXRvSW5jcmVtZW50OiB0cnVlIH0pIik7CisgICAgICAgIGV2YWxBbmRMb2co
InN0b3JlMS5wdXQoJ2EnKSIpOworICAgICAgICBjaGVjayhzdG9yZTEsIDEsICdhJyk7CisgICAg
ICAgIGV2YWxBbmRMb2coInN0b3JlMiA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZTInLCB7
IGF1dG9JbmNyZW1lbnQ6IHRydWUgfSkiKTsKKyAgICAgICAgZXZhbEFuZExvZygic3RvcmUyLnB1
dCgnYScpIik7CisgICAgICAgIGNoZWNrKHN0b3JlMiwgMSwgJ2EnKTsKKyAgICAgICAgZXZhbEFu
ZExvZygic3RvcmUxLnB1dCgnYicpIik7CisgICAgICAgIGNoZWNrKHN0b3JlMSwgMiwgJ2InKTsK
KyAgICAgICAgZXZhbEFuZExvZygic3RvcmUyLnB1dCgnYicpIik7CisgICAgICAgIGNoZWNrKHN0
b3JlMiwgMiwgJ2InKTsKKyAgICB9CispOworCitkZWZpbmVUZXN0KAorICAgICdWZXJpZnkgdGhh
dCB0aGUga2V5IGdlbmVyYXRvciBpcyBub3QgdXBkYXRlZCBpZiBpbnNlcnRpb24gZmFpbHMnLAor
ICAgIGZ1bmN0aW9uIChkYiwgdHJhbnMpIHsKKyAgICAgICAgdHJhbnMub25lcnJvciA9IGZ1bmN0
aW9uKGUpIHsgZS5wcmV2ZW50RGVmYXVsdCgpIH07CisgICAgICAgIGV2YWxBbmRMb2coInN0b3Jl
ID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlMScsIHsgYXV0b0luY3JlbWVudDogdHJ1ZSB9
KSIpOworICAgICAgICBldmFsQW5kTG9nKCJpbmRleCA9IHN0b3JlLmNyZWF0ZUluZGV4KCdpbmRl
eDEnLCAnaXgnLCB7IHVuaXF1ZTogdHJ1ZSB9KSIpOworICAgICAgICBldmFsQW5kTG9nKCJzdG9y
ZS5wdXQoeyBpeDogJ2EnfSkiKTsKKyAgICAgICAgY2hlY2soc3RvcmUsIDEsIHtpeDogJ2EnfSk7
CisgICAgICAgIGV2YWxBbmRMb2coInN0b3JlLnB1dCh7IGl4OiAnYSd9KSIpOworICAgICAgICBl
dmFsQW5kTG9nKCJzdG9yZS5wdXQoeyBpeDogJ2InfSkiKTsKKyAgICAgICAgY2hlY2soc3RvcmUs
IDIsIHtpeDogJ2InfSk7CisgICAgfQorKTsKKworZGVmaW5lVGVzdCgKKyAgICAnVmVyaWZ5IHRo
YXQgdGhlIGtleSBnZW5lcmF0b3IgaXMgbm90IGFmZmVjdGVkIGJ5IGl0ZW0gcmVtb3ZhbCAoZGVs
ZXRlIG9yIGNsZWFyKS4nLAorICAgIGZ1bmN0aW9uIChkYiwgdHJhbnMpIHsKKyAgICAgICAgZXZh
bEFuZExvZygic3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUxJywgeyBhdXRvSW5j
cmVtZW50OiB0cnVlIH0pIik7CisgICAgICAgIGV2YWxBbmRMb2coInN0b3JlLnB1dCgnYScpIik7
CisgICAgICAgIGNoZWNrKHN0b3JlLCAxLCAnYScpOworICAgICAgICBldmFsQW5kTG9nKCJzdG9y
ZS5kZWxldGUoMSkiKTsKKyAgICAgICAgZXZhbEFuZExvZygic3RvcmUucHV0KCdiJykiKTsKKyAg
ICAgICAgY2hlY2soc3RvcmUsIDIsICdiJyk7CisgICAgICAgIGV2YWxBbmRMb2coInN0b3JlLmNs
ZWFyKCkiKTsKKyAgICAgICAgZXZhbEFuZExvZygic3RvcmUucHV0KCdjJykiKTsKKyAgICAgICAg
Y2hlY2soc3RvcmUsIDMsICdjJyk7CisgICAgICAgIC8vIEZJWE1FOiBJREJPYmplY3RTdG9yZS5k
ZWxldGUoSURCS2V5UmFuZ2UpIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gQ2hyb21pdW0uCisg
ICAgICAgIC8vIGh0dHA6Ly9jcmJ1Zy5jb20vMTAxMzg0CisgICAgICAgIC8vZXZhbEFuZExvZygi
c3RvcmUuZGVsZXRlKElEQktleVJhbmdlLmxvd2VyQm91bmQoMCkpIik7CisgICAgICAgIGV2YWxB
bmRMb2coInN0b3JlLnB1dCgnZCcpIik7CisgICAgICAgIGNoZWNrKHN0b3JlLCA0LCAnZCcpOwor
ICAgIH0KKyk7CisKK2RlZmluZVRlc3QoCisgICAgJ1ZlcmlmeSB0aGF0IHRoZSBrZXkgZ2VuZXJh
dG9yIGlzIG9ubHkgc2V0IGlmIGFuZCBvbmx5IGlmIGEgbnVtZXJpYyBrZXkgZ3JlYXRlciB0aGFu
IHRoZSBsYXN0IGdlbmVyYXRlZCBrZXkgaXMgdXNlZC4nLAorICAgIGZ1bmN0aW9uIChkYiwgdHJh
bnMpIHsKKyAgICAgICAgZXZhbEFuZExvZygic3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgn
c3RvcmUxJywgeyBhdXRvSW5jcmVtZW50OiB0cnVlIH0pIik7CisgICAgICAgIGV2YWxBbmRMb2co
InN0b3JlLnB1dCgnYScpIik7CisgICAgICAgIGNoZWNrKHN0b3JlLCAxLCAnYScpOworICAgICAg
ICBldmFsQW5kTG9nKCJzdG9yZS5wdXQoJ2InLCAzKSIpOworICAgICAgICBjaGVjayhzdG9yZSwg
MywgJ2InKTsKKyAgICAgICAgZXZhbEFuZExvZygic3RvcmUucHV0KCdjJykiKTsKKyAgICAgICAg
Y2hlY2soc3RvcmUsIDQsICdjJyk7CisgICAgICAgIGV2YWxBbmRMb2coInN0b3JlLnB1dCgnZCcs
IC0xMCkiKTsKKyAgICAgICAgY2hlY2soc3RvcmUsIC0xMCwgJ2QnKTsKKyAgICAgICAgZXZhbEFu
ZExvZygic3RvcmUucHV0KCdlJykiKTsKKyAgICAgICAgY2hlY2soc3RvcmUsIDUsICdlJyk7Cisg
ICAgICAgIGV2YWxBbmRMb2coInN0b3JlLnB1dCgnZicsIDYuMDAwMDEpIik7CisgICAgICAgIGNo
ZWNrKHN0b3JlLCA2LjAwMDAxLCAnZicpOworICAgICAgICBldmFsQW5kTG9nKCJzdG9yZS5wdXQo
J2cnKSIpOworICAgICAgICBjaGVjayhzdG9yZSwgNywgJ2cnKTsKKyAgICAgICAgZXZhbEFuZExv
Zygic3RvcmUucHV0KCdmJywgOC45OTk5KSIpOworICAgICAgICBjaGVjayhzdG9yZSwgOC45OTk5
LCAnZicpOworICAgICAgICBldmFsQW5kTG9nKCJzdG9yZS5wdXQoJ2cnKSIpOworICAgICAgICBj
aGVjayhzdG9yZSwgOSwgJ2cnKTsKKyAgICAgICAgZXZhbEFuZExvZygic3RvcmUucHV0KCdoJywg
J2ZvbycpIik7CisgICAgICAgIGNoZWNrKHN0b3JlLCAnZm9vJywgJ2gnKTsKKyAgICAgICAgZXZh
bEFuZExvZygic3RvcmUucHV0KCdpJykiKTsKKyAgICAgICAgY2hlY2soc3RvcmUsIDEwLCAnaScp
OworICAgICAgICBldmFsQW5kTG9nKCJzdG9yZS5wdXQoJ2onLCBbMTAwMF0pIik7CisgICAgICAg
IGNoZWNrKHN0b3JlLCBbMTAwMF0sICdqJyk7CisgICAgICAgIGV2YWxBbmRMb2coInN0b3JlLnB1
dCgnaycpIik7CisgICAgICAgIGNoZWNrKHN0b3JlLCAxMSwgJ2snKTsKKworICAgICAgICAvLyBG
SVhNRTogUmVwZWF0IHRoaXMgdGVzdCwgYnV0IHdpdGggYSBrZXlQYXRoIGFuZCBpbmxpbmUga2V5
LgorICAgIH0KKyk7CisKK2RlZmluZVRlc3QoCisgICAgJ1ZlcmlmeSB0aGF0IGFib3J0aW5nIGEg
dHJhbnNhY3Rpb24gcmVzZXRzIHRoZSBrZXkgZ2VuZXJhdG9yIHN0YXRlLicsCisgICAgZnVuY3Rp
b24gKGRiLCB0cmFucykgeworICAgICAgICBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnLCB7
IGF1dG9JbmNyZW1lbnQ6IHRydWUgfSk7CisgICAgfSwKKworICAgIGZ1bmN0aW9uIChkYiwgY2Fs
bGJhY2spIHsKKyAgICAgICAgZXZhbEFuZExvZygidHJhbnMxID0gZGIudHJhbnNhY3Rpb24oWydz
dG9yZSddLCBJREJUcmFuc2FjdGlvbi5SRUFEX1dSSVRFKSIpOworICAgICAgICBldmFsQW5kTG9n
KCJzdG9yZV90MSA9IHRyYW5zMS5vYmplY3RTdG9yZSgnc3RvcmUnKSIpOworICAgICAgICBldmFs
QW5kTG9nKCJzdG9yZV90MS5wdXQoJ2EnKSIpOworICAgICAgICBjaGVjayhzdG9yZV90MSwgMSwg
J2EnKTsKKyAgICAgICAgZXZhbEFuZExvZygic3RvcmVfdDEucHV0KCdiJykiKTsKKyAgICAgICAg
Y2hlY2soc3RvcmVfdDEsIDIsICdiJyk7CisKKyAgICAgICAgLy8gU2NoZWR1bGUgdGhlIGFib3J0
IGFzIGEgdGFzayAobm90IHJ1biBpdCBzeW5jaHJvbm91c2x5KQorICAgICAgICBzdG9yZV90MS5n
ZXQoMCkub25zdWNjZXNzID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgZGVidWcoJ2Fib3J0
aW5nLi4uJyk7CisgICAgICAgICAgICBldmFsQW5kTG9nKCJ0cmFuczEuYWJvcnQoKSIpOworICAg
ICAgICAgICAgdHJhbnMxLm9uYWJvcnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAg
ZGVidWcoJ2Fib3J0ZWQhJyk7CisKKyAgICAgICAgICAgICAgICBldmFsQW5kTG9nKCJ0cmFuczIg
PSBkYi50cmFuc2FjdGlvbihbJ3N0b3JlJ10sIElEQlRyYW5zYWN0aW9uLlJFQURfV1JJVEUpIik7
CisgICAgICAgICAgICAgICAgZXZhbEFuZExvZygic3RvcmVfdDIgPSB0cmFuczIub2JqZWN0U3Rv
cmUoJ3N0b3JlJykiKTsKKyAgICAgICAgICAgICAgICBldmFsQW5kTG9nKCJzdG9yZV90Mi5wdXQo
J2MnKSIpOworICAgICAgICAgICAgICAgIGNoZWNrKHN0b3JlX3QyLCAxLCAnYycpOworICAgICAg
ICAgICAgICAgIGV2YWxBbmRMb2coInN0b3JlX3QyLnB1dCgnZCcpIik7CisgICAgICAgICAgICAg
ICAgY2hlY2soc3RvcmVfdDIsIDIsICdkJyk7CisKKyAgICAgICAgICAgICAgICB0cmFuczIub25j
b21wbGV0ZSA9IGNhbGxiYWNrOworICAgICAgICAgICAgfTsKKyAgICAgICAgfTsKKyAgICB9Cisp
OworCit0ZXN0KCk7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>