<?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>142186</bug_id>
          
          <creation_ts>2015-03-02 13:15:18 -0800</creation_ts>
          <short_desc>NetworkCache efficacy logging is using too much CPU</short_desc>
          <delta_ts>2015-03-05 11:00:28 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1073428</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-03-02 13:15:18 -0800</bug_when>
    <thetext>NetworkCache efficacy logging is using too much CPU. Around ~11% of the NetworkProcess&apos; CPU usage on a PLT on iPhone.
We should improve this and re-enable it.

Radar: &lt;rdar://problem/19632080&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073472</commentid>
    <comment_count>1</comment_count>
      <attachid>247704</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-03-02 15:28:15 -0800</bug_when>
    <thetext>Created attachment 247704
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073527</commentid>
    <comment_count>2</comment_count>
      <attachid>247721</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-03-02 16:55:23 -0800</bug_when>
    <thetext>Created attachment 247721
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073536</commentid>
    <comment_count>3</comment_count>
      <attachid>247724</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-03-02 17:27:17 -0800</bug_when>
    <thetext>Created attachment 247724
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073561</commentid>
    <comment_count>4</comment_count>
      <attachid>247732</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-03-02 18:51:13 -0800</bug_when>
    <thetext>Created attachment 247732
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073680</commentid>
    <comment_count>5</comment_count>
      <attachid>247732</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-03-03 09:25:44 -0800</bug_when>
    <thetext>Comment on attachment 247732
Patch

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

Looks fine except...

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStatisticsCocoa.mm:57
&gt; +    if (!result) {
&gt;          LOG_ERROR(&quot;Network cache statistics: failed to execute statement \&quot;%s\&quot; error \&quot;%s\&quot;&quot;, sql.utf8().data(), database.lastErrorMsg());
&gt; +        ASSERT_NOT_REACHED();

Why make these fatal?

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStatisticsCocoa.mm:311
&gt; +    HashSet&lt;String&gt; hashesToAdd;
&gt; +    hashesToAdd.swap(m_hashesToAdd);
&gt; +    HashMap&lt;String, NetworkCache::StoreDecision&gt; storeDecisionsToAdd;
&gt; +    storeDecisionsToAdd.swap(m_storeDecisionsToAdd);
&gt;  
&gt;      shrinkIfNeeded();
&gt; +
&gt; +    dispatch_async(m_backgroundIOQueue.get(), [this, hashesToAdd, storeDecisionsToAdd] {

This isn&apos;t thread safe because String refcounting is not thread safe. You need to take care that you pass isolated copies to the queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073693</commentid>
    <comment_count>6</comment_count>
      <attachid>247732</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-03-03 09:43:13 -0800</bug_when>
    <thetext>Comment on attachment 247732
Patch

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

&gt;&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStatisticsCocoa.mm:57
&gt;&gt; +        ASSERT_NOT_REACHED();
&gt; 
&gt; Why make these fatal?

To make it more obvious when you get your queries wrong. There should no no other reason for them to fail.
When refactoring, I got one of my queries wrong and it took me a while to figure it out because nothing was complaining.

&gt;&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStatisticsCocoa.mm:311
&gt;&gt; +    dispatch_async(m_backgroundIOQueue.get(), [this, hashesToAdd, storeDecisionsToAdd] {
&gt; 
&gt; This isn&apos;t thread safe because String refcounting is not thread safe. You need to take care that you pass isolated copies to the queue.

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073776</commentid>
    <comment_count>7</comment_count>
      <attachid>247787</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-03-03 13:34:22 -0800</bug_when>
    <thetext>Created attachment 247787
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073840</commentid>
    <comment_count>8</comment_count>
      <attachid>247787</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-03-03 16:04:17 -0800</bug_when>
    <thetext>Comment on attachment 247787
Patch

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

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStatisticsCocoa.mm:332
&gt; +    auto storeDecisionsToAdd = isolatedCopy(m_storeDecisionsToAdd);
&gt; +    m_storeDecisionsToAdd.clear();
&gt;  
&gt;      shrinkIfNeeded();
&gt; +
&gt; +    dispatch_async(m_backgroundIOQueue.get(), [this, hashesToAdd, storeDecisionsToAdd] {

This still don&apos;t look thread safe. The vector gets copied to lambda, the contained strings get reffed by the copy, the original gets dereffed in main thread while the copy is dereffed in the queue. 

We have StringCapture for single strings but here you are probably better of bundling all the stuff you want to pass to a heap allocated struct. 

C++14 will solve this problem by allowing move initialization of the lambda capture.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073853</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-03-03 16:21:40 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 247787 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=247787&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStatisticsCocoa.mm:332
&gt; &gt; +    auto storeDecisionsToAdd = isolatedCopy(m_storeDecisionsToAdd);
&gt; &gt; +    m_storeDecisionsToAdd.clear();
&gt; &gt;  
&gt; &gt;      shrinkIfNeeded();
&gt; &gt; +
&gt; &gt; +    dispatch_async(m_backgroundIOQueue.get(), [this, hashesToAdd, storeDecisionsToAdd] {
&gt; 
&gt; This still don&apos;t look thread safe. The vector gets copied to lambda, the
&gt; contained strings get reffed by the copy, the original gets dereffed in main
&gt; thread while the copy is dereffed in the queue. 
&gt; 
&gt; We have StringCapture for single strings but here you are probably better of
&gt; bundling all the stuff you want to pass to a heap allocated struct. 
&gt; 
&gt; C++14 will solve this problem by allowing move initialization of the lambda
&gt; capture.

I initially tried to use a Vector&lt;StringCapture&gt; but this did not compile because StringCapture doesn&apos;t have an assignment operator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073898</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-03-03 17:33:11 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 247787 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=247787&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStatisticsCocoa.mm:332
&gt; &gt; +    auto storeDecisionsToAdd = isolatedCopy(m_storeDecisionsToAdd);
&gt; &gt; +    m_storeDecisionsToAdd.clear();
&gt; &gt;  
&gt; &gt;      shrinkIfNeeded();
&gt; &gt; +
&gt; &gt; +    dispatch_async(m_backgroundIOQueue.get(), [this, hashesToAdd, storeDecisionsToAdd] {
&gt; 
&gt; This still don&apos;t look thread safe. The vector gets copied to lambda, the
&gt; contained strings get reffed by the copy, the original gets dereffed in main
&gt; thread while the copy is dereffed in the queue. 
&gt; 
&gt; We have StringCapture for single strings but here you are probably better of
&gt; bundling all the stuff you want to pass to a heap allocated struct. 
&gt; 
&gt; C++14 will solve this problem by allowing move initialization of the lambda
&gt; capture.

Could you please clarify what you are proposing? I&apos;m afraid I don&apos;t understand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074026</commentid>
    <comment_count>11</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-03-04 01:59:07 -0800</bug_when>
    <thetext>&gt; Could you please clarify what you are proposing? I&apos;m afraid I don&apos;t
&gt; understand.

Something like

struct Capture {
   Vector&lt;String&gt; strings;
   ...
};
Capture* capture = new Capture { isolatedCopy(m_strings), ... }
dsipatch_async(..., [capture] {
  
     delete capture;
}

(shared_ptr works too if you want to avoid explicit new/delete)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074027</commentid>
    <comment_count>12</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-03-04 02:03:57 -0800</bug_when>
    <thetext>&gt; I initially tried to use a Vector&lt;StringCapture&gt; but this did not compile
&gt; because StringCapture doesn&apos;t have an assignment operator.

Maybe you could just add it. It doesn&apos;t have one because there didn&apos;t seem to be need.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074177</commentid>
    <comment_count>13</comment_count>
      <attachid>247881</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-03-04 12:31:27 -0800</bug_when>
    <thetext>Created attachment 247881
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074178</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-04 12:34:01 -0800</bug_when>
    <thetext>Attachment 247881 did not pass style-queue:


ERROR: Source/WTF/wtf/text/WTFString.h:642:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074486</commentid>
    <comment_count>15</comment_count>
      <attachid>247881</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-03-05 05:31:19 -0800</bug_when>
    <thetext>Comment on attachment 247881
Patch

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

&gt; Source/WTF/wtf/HashMap.h:512
&gt; +    iterator it = collection.begin();
&gt; +    iterator end = collection.end();
&gt; +    for (unsigned i = 0; it != end; ++it, ++i)
&gt; +        vector[i] = { (*it).key, (*it).value };

This might look slightly nicer with range-for.

&gt; Source/WTF/wtf/text/WTFString.h:641
&gt; +    StringCapture() = default;

I&apos;m not sure &apos;= default;&apos; is better than { }

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStatisticsCocoa.mm:46
&gt; +static const double minWriteIntervalSeconds = 10;

minimum

std::chrono::duration would be nicer and allow losing &apos;Seconds&apos; qualifier.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStatisticsCocoa.mm:72
&gt; +    if (statement.step() != WebCore::SQLResultDone) {
&gt;          LOG_ERROR(&quot;Network cache statistics: failed to execute statement \&quot;%s\&quot; error \&quot;%s\&quot;&quot;, statement.query().utf8().data(), statement.database().lastErrorMsg());
&gt; +        ASSERT_NOT_REACHED();
&gt; +        return false;

Is SQL failure in logging code really important enough to interrupt someone debugging something completely different? (this and other new asserts).

If this can&apos;t happen then we should just have the assert without branch. If it can happen then it shouldn&apos;t assert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074557</commentid>
    <comment_count>16</comment_count>
      <attachid>247881</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-03-05 10:03:46 -0800</bug_when>
    <thetext>Comment on attachment 247881
Patch

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

&gt;&gt; Source/WTF/wtf/HashMap.h:512
&gt;&gt; +        vector[i] = { (*it).key, (*it).value };
&gt; 
&gt; This might look slightly nicer with range-for.

But I need the index for vector assignment. Otherwise I guess I could use Vector::append() instead.
However, I followed the pattern used in all the copyToVector() utility functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074563</commentid>
    <comment_count>17</comment_count>
      <attachid>247963</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-03-05 10:15:37 -0800</bug_when>
    <thetext>Created attachment 247963
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074564</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-05 10:17:59 -0800</bug_when>
    <thetext>Attachment 247963 did not pass style-queue:


ERROR: Source/WTF/wtf/text/WTFString.h:642:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074582</commentid>
    <comment_count>19</comment_count>
      <attachid>247963</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-05 11:00:22 -0800</bug_when>
    <thetext>Comment on attachment 247963
Patch

Clearing flags on attachment: 247963

Committed r181086: &lt;http://trac.webkit.org/changeset/181086&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074583</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-05 11:00:28 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247704</attachid>
            <date>2015-03-02 15:28:15 -0800</date>
            <delta_ts>2015-03-02 16:55:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142186-20150302152758.patch</filename>
            <type>text/plain</type>
            <size>16009</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwODg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNzE5NzhhZjRhYjlkZTM2
MzhlNzUxOTVjOWMyNzdkODFjMWQ2ODM0MS4uM2M0NzIwMWE5YjhkZDA0MGI5M2M4Y2JmZGM1Njk2
ZWM5ZGNmNDUyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE1LTAzLTAyICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTmV0d29ya0NhY2hlIGVmZmlj
YWN5IGxvZ2dpbmcgaXMgdXNpbmcgdG9vIG11Y2ggQ1BVCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDIxODYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzE5NjMyMDgwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5ldHdvcmtDYWNoZSBlZmZpY2FjeSBsb2dnaW5nIHdhcyB1c2luZyB0b28gbXVjaCBDUFUg
bW9zdGx5IGR1ZSB0bworICAgICAgICBkYXRhYmFzZSB3cml0ZXMuIExvZ2dpbmcgd2FzIHVzaW5n
IH4xMS4zJSBvZiB0aGUgTmV0d29ya1Byb2Nlc3MnCisgICAgICAgIENQVSB1c2FnZSAofjkuMiUg
Zm9yIHdyaXRlcyAvIH4xLjMlIGZvciByZWFkcykuCisKKyAgICAgICAgVGhpcyBwYXRjaCBidWZm
ZXJzIHdyaXRlcyByZXF1ZXN0cyBpbiBtZW1vcnkgYW5kIG9ubHkgd3JpdGVzIHRoZW0KKyAgICAg
ICAgdG8gZGlzayBldmVyeSAxMCBzZWNvbmRzLiBXZSBhcmUgdGh1cyB3cml0aW5nIHRvIHRoaXMg
bGVzcyBmcmVxdWVudGx5CisgICAgICAgIGFuZCB3cml0aW5nIG1vcmUgYXQgb25jZSwgaW4gYSBz
aW5nbGUgU1FMIHRyYW5zYWN0aW9uLiBBZnRlciB0aGlzCisgICAgICAgIGNoYW5nZSwgZWZmaWNh
Y3kgbG9nZ2luZyBvbmx5IGFjY291bnRzIGZvciB+NC4zJSBvZiB0aGUgTmV0d29ya1Byb2Nlc3Mn
CisgICAgICAgIENQVSBhY3Rpdml0eSAoMS42JSBmb3Igd3JpdGVzIC8gMS45JSBmb3IgcmVhZHMp
LgorCisgICAgICAgIE5vdyB0aGF0IENQVSB1c2FnZSBpcyBtb3JlIGFjY2VwdGFibGUsIHRoaXMg
cGF0Y2ggcmUtZW5hYmxlcyB0aGUKKyAgICAgICAgbmV0d29yayBjYWNoZSBlZmZpY2ljeSBsb2dn
aW5nLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlz
dGljcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRp
c3RpY3NDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlU3RhdGlzdGljczo6
TmV0d29ya0NhY2hlU3RhdGlzdGljcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0
YXRpc3RpY3M6OmJvb3RzdHJhcEZyb21OZXR3b3JrQ2FjaGUpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpyZWNvcmROb3RDYWNoaW5nUmVzcG9uc2UpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpyZWNvcmROb3RVc2luZ0NhY2hlRm9y
UmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnJlY29y
ZFJldHJpZXZhbEZhaWx1cmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGVTdGF0aXN0
aWNzOjptYXJrQXNSZXF1ZXN0ZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzOjp3cml0ZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGVT
dGF0aXN0aWNzOjpxdWVyeVdhc0V2ZXJSZXF1ZXN0ZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGVTdGF0aXN0aWNzOjphZGRIYXNoZXNUb0RhdGFiYXNlKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlU3RhdGlzdGljczo6YWRkU3RvcmVEZWNpc2lvbnNUb0RhdGFiYXNlKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlU3RhdGlzdGljczo6YWRkSGFzaFRvRGF0YWJh
c2UpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENv
Y29hLm1tOgorICAgICAgICAoV2ViS2l0OjpyZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKToK
KwogMjAxNS0wMy0wMSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBNYWtlIGNsaXAtcGF0aCB3b3JrIG9uIDx2aWRlbz4sIDxjYW52YXM+IGV0Yy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZVN0YXRpc3RpY3MuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZVN0YXRpc3RpY3MuaAppbmRleCBmOWM3ODI1YjljNjVmYTc1YmRiNjM0NTE3MjBiNjg3
YmU3ZjM0MzM3Li5jMDg2YWZmMzZjY2QxNTZhYmQ3ZGZhYTllOWJiNjhlODNiMmQxMzNlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVT
dGF0aXN0aWNzLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlU3RhdGlzdGljcy5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiTmV0d29y
a0NhY2hlS2V5LmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RvcmFnZS5oIgogI2luY2x1ZGUg
PFdlYkNvcmUvU1FMaXRlRGF0YWJhc2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKQEAgLTU3LDE0ICs1
OCwxOCBAQCBwcml2YXRlOgogICAgIHZvaWQgYm9vdHN0cmFwRnJvbU5ldHdvcmtDYWNoZShjb25z
dCBTdHJpbmcmIG5ldHdvcmtDYWNoZVBhdGgpOwogICAgIHZvaWQgc2hyaW5rSWZOZWVkZWQoKTsK
IAotICAgIHZvaWQgYWRkSGFzaFRvRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBoYXNoKTsKKyAgICB2
b2lkIGFkZEhhc2hlc1RvRGF0YWJhc2UoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBoYXNoZXMpOwor
ICAgIHZvaWQgYWRkU3RvcmVEZWNpc2lvbnNUb0RhdGFiYXNlKGNvbnN0IEhhc2hNYXA8U3RyaW5n
LCBOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb24+Jik7CisgICAgdm9pZCB3cml0ZVRpbWVyRmly
ZWQoKTsKIAogICAgIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkIChib29sIHdhc0V2ZXJSZXF1
ZXN0ZWQsIGNvbnN0IE9wdGlvbmFsPE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbj4mKT4gUmVx
dWVzdGVkQ29tcGxldGlvbkhhbmRsZXI7Ci0gICAgdm9pZCBxdWVyeVdhc0V2ZXJSZXF1ZXN0ZWQo
Y29uc3QgU3RyaW5nJiwgY29uc3QgUmVxdWVzdGVkQ29tcGxldGlvbkhhbmRsZXImKTsKKyAgICBl
bnVtIGNsYXNzIE5lZWRVbmNhY2hlZFJlYXNvbiB7IE5vLCBZZXMgfTsKKyAgICB2b2lkIHF1ZXJ5
V2FzRXZlclJlcXVlc3RlZChjb25zdCBTdHJpbmcmLCBOZWVkVW5jYWNoZWRSZWFzb24sIGNvbnN0
IFJlcXVlc3RlZENvbXBsZXRpb25IYW5kbGVyJik7CiAgICAgdm9pZCBtYXJrQXNSZXF1ZXN0ZWQo
Y29uc3QgU3RyaW5nJiBoYXNoKTsKIAogICAgIHN0cnVjdCBFdmVyUmVxdWVzdGVkUXVlcnkgewog
ICAgICAgICBTdHJpbmcgaGFzaDsKKyAgICAgICAgYm9vbCBuZWVkVW5jYWNoZWRSZWFzb247CiAg
ICAgICAgIFJlcXVlc3RlZENvbXBsZXRpb25IYW5kbGVyIGNvbXBsZXRpb25IYW5kbGVyOwogICAg
IH07CiAKQEAgLTc1LDYgKzgwLDkgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgIG11dGFibGUgSGFz
aFNldDxzdGQ6OnVuaXF1ZV9wdHI8Y29uc3QgRXZlclJlcXVlc3RlZFF1ZXJ5Pj4gbV9hY3RpdmVR
dWVyaWVzOwogICAgIFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlIG1fZGF0YWJhc2U7CisgICAgSGFz
aFNldDxTdHJpbmc+IG1faGFzaGVzVG9BZGQ7CisgICAgSGFzaE1hcDxTdHJpbmcsIE5ldHdvcmtD
YWNoZTo6U3RvcmVEZWNpc2lvbj4gbV9zdG9yZURlY2lzaW9uc1RvQWRkOworICAgIFdlYkNvcmU6
OlRpbWVyIG1fd3JpdGVUaW1lcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rh
dGlzdGljc0NvY29hLm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlU3RhdGlzdGljc0NvY29hLm1tCmluZGV4IGU3NTczYWNkYWViNThhMWQ5Y2M5OGIx
YzcyYTU5NzM0NmVjNjY5ODUuLjJiYzBlYzQxZTE3NGIzMDBkNTg1MTNlM2UyMTM4YzkxYWFhMjIw
YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZVN0YXRpc3RpY3NDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0KQEAgLTQzLDYgKzQzLDcg
QEAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0aWMgY29uc3QgY2hhciogbmV0d29ya0NhY2hl
U3RhdGlzdGljc0RhdGFiYXNlTmFtZSA9ICJXZWJLaXRDYWNoZVN0YXRpc3RpY3MuZGIiOworc3Rh
dGljIGNvbnN0IGRvdWJsZSBtaW5Xcml0ZUludGVydmFsU2Vjb25kcyA9IDEwOwogCiBzdGF0aWMg
Ym9vbCBleGVjdXRlU1FMQ29tbWFuZChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2Us
IGNvbnN0IFN0cmluZyYgc3FsKQogewpAQCAtODAsNiArODEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8
TmV0d29ya0NhY2hlU3RhdGlzdGljcz4gTmV0d29ya0NhY2hlU3RhdGlzdGljczo6b3Blbihjb25z
dCBTdHJpbgogCiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpOZXR3b3JrQ2FjaGVTdGF0aXN0aWNz
KGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoKQogICAgIDogbV9iYWNrZ3JvdW5kSU9RdWV1ZShh
ZG9wdERpc3BhdGNoKGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5DYWNo
ZS5TdGF0aXN0aWNzLkJhY2tncm91bmQiLCBESVNQQVRDSF9RVUVVRV9TRVJJQUwpKSkKKyAgICAs
IG1fd3JpdGVUaW1lcigqdGhpcywgJk5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OndyaXRlVGltZXJG
aXJlZCkKIHsKICAgICBkaXNwYXRjaF9zZXRfdGFyZ2V0X3F1ZXVlKG1fYmFja2dyb3VuZElPUXVl
dWUuZ2V0KCksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJ
VFlfQkFDS0dST1VORCwgMCkpOwogCkBAIC0xNDEsMTQgKzE0MywxOCBAQCB2b2lkIE5ldHdvcmtD
YWNoZVN0YXRpc3RpY3M6OmJvb3RzdHJhcEZyb21OZXR3b3JrQ2FjaGUoY29uc3QgU3RyaW5nJiBu
ZXR3b3JrQ2FjaAogCiAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgQm9v
dHN0cmFwcGluZyB0aGUgbmV0d29yayBjYWNoZSBzdGF0aXN0aWNzIGRhdGFiYXNlIGZyb20gdGhl
IG5ldHdvcmsgY2FjaGUuLi4iKTsKIAorICAgIEhhc2hTZXQ8U3RyaW5nPiBoYXNoZXM7CisgICAg
dHJhdmVyc2VDYWNoZUZpbGVzKG5ldHdvcmtDYWNoZVBhdGgsIFsmaGFzaGVzXShjb25zdCBTdHJp
bmcmIGhhc2gsIGNvbnN0IFN0cmluZyYpIHsKKyAgICAgICAgaGFzaGVzLmFkZChoYXNoKTsKKyAg
ICB9KTsKKwogICAgIFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3Vu
dGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKLSAgICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbiBi
b290c3RyYXBUcmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKLSAgICBib290c3RyYXBUcmFuc2FjdGlv
bi5iZWdpbigpOworICAgIFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uIHdyaXRlVHJhbnNhY3Rp
b24obV9kYXRhYmFzZSk7CisgICAgd3JpdGVUcmFuc2FjdGlvbi5iZWdpbigpOwogCi0gICAgdHJh
dmVyc2VDYWNoZUZpbGVzKG5ldHdvcmtDYWNoZVBhdGgsIFt0aGlzXShjb25zdCBTdHJpbmcmIGhh
c2gsIGNvbnN0IFN0cmluZyYpIHsKLSAgICAgICAgYWRkSGFzaFRvRGF0YWJhc2UoaGFzaCk7Ci0g
ICAgfSk7Ci0gICAgYm9vdHN0cmFwVHJhbnNhY3Rpb24uY29tbWl0KCk7CisgICAgYWRkSGFzaGVz
VG9EYXRhYmFzZShoYXNoZXMpOworCisgICAgd3JpdGVUcmFuc2FjdGlvbi5jb21taXQoKTsKIH0K
IAogdm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpzaHJpbmtJZk5lZWRlZCgpCkBAIC0xNzQs
MTggKzE4MCw5IEBAIHZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6cmVjb3JkTm90Q2FjaGlu
Z1Jlc3BvbnNlKGNvbnN0IE5ldHdvcmtDYWNoZUtleSYga2V5CiB7CiAgICAgQVNTRVJUKHN0b3Jl
RGVjaXNpb24gIT0gTmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uOjpZZXMpOwogCi0gICAgU3Ry
aW5nQ2FwdHVyZSBoYXNoQ2FwdHVyZShrZXkuaGFzaEFzU3RyaW5nKCkpOwotICAgIGRpc3BhdGNo
X2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFt0aGlzLCBoYXNoQ2FwdHVyZSwgc3Rv
cmVEZWNpc2lvbl0gewotICAgICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQo
bV9kYXRhYmFzZSwgQVNDSUlMaXRlcmFsKCJJTlNFUlQgT1IgUkVQTEFDRSBJTlRPIFVuY2FjaGVk
UmVhc29uIChoYXNoLCByZWFzb24pIFZBTFVFUyAoPywgPykiKSk7Ci0gICAgICAgIGlmIChzdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFdlYkNvcmU6OlNRTFJlc3VsdE9rKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBoYXNoQ2FwdHVyZS5zdHJpbmco
KSk7Ci0gICAgICAgIHN0YXRlbWVudC5iaW5kSW50KDIsIHN0YXRpY19jYXN0PGludD4oc3RvcmVE
ZWNpc2lvbikpOwotICAgICAgICBleGVjdXRlU1FMU3RhdGVtZW50KHN0YXRlbWVudCk7Ci0gICAg
fSk7CisgICAgbV9zdG9yZURlY2lzaW9uc1RvQWRkLmFkZChrZXkuaGFzaEFzU3RyaW5nKCksIHN0
b3JlRGVjaXNpb24pOworICAgIGlmICghbV93cml0ZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAg
IG1fd3JpdGVUaW1lci5zdGFydE9uZVNob3QobWluV3JpdGVJbnRlcnZhbFNlY29uZHMpOwogfQog
CiBzdGF0aWMgU3RyaW5nIHJldHJpZXZlRGVjaXNpb25Ub0RpYWdub3N0aWNLZXkoTmV0d29ya0Nh
Y2hlOjpSZXRyaWV2ZURlY2lzaW9uIHJldHJpZXZlRGVjaXNpb24pCkBAIC0yMTIsNyArMjA5LDcg
QEAgdm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpyZWNvcmROb3RVc2luZ0NhY2hlRm9yUmVx
dWVzdCh1aW50NjRfdCB3ZWJQYWdlSUQsIGMKIAogICAgIFN0cmluZyBoYXNoID0ga2V5Lmhhc2hB
c1N0cmluZygpOwogICAgIFdlYkNvcmU6OlVSTCByZXF1ZXN0VVJMID0gcmVxdWVzdC51cmwoKTsK
LSAgICBxdWVyeVdhc0V2ZXJSZXF1ZXN0ZWQoaGFzaCwgW3RoaXMsIGhhc2gsIHJlcXVlc3RVUkws
IHdlYlBhZ2VJRCwgcmV0cmlldmVEZWNpc2lvbl0oYm9vbCB3YXNFdmVyUmVxdWVzdGVkLCBjb25z
dCBPcHRpb25hbDxOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb24+JikgeworICAgIHF1ZXJ5V2Fz
RXZlclJlcXVlc3RlZChoYXNoLCBOZWVkVW5jYWNoZWRSZWFzb246Ok5vLCBbdGhpcywgaGFzaCwg
cmVxdWVzdFVSTCwgd2ViUGFnZUlELCByZXRyaWV2ZURlY2lzaW9uXShib29sIHdhc0V2ZXJSZXF1
ZXN0ZWQsIGNvbnN0IE9wdGlvbmFsPE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbj4mKSB7CiAg
ICAgICAgIGlmICh3YXNFdmVyUmVxdWVzdGVkKSB7CiAgICAgICAgICAgICBTdHJpbmcgZGlhZ25v
c3RpY0tleSA9IHJldHJpZXZlRGVjaXNpb25Ub0RpYWdub3N0aWNLZXkocmV0cmlldmVEZWNpc2lv
bik7CiAgICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSB3ZWJQ
YWdlSUQgJWxsdTogJXMgd2FzIHByZXZpb3VzbHkgcmVxdWVzdGVkIGJ1dCB3ZSBhcmUgbm90IHVz
aW5nIHRoZSBjYWNoZSwgcmVhc29uOiAlcyIsIHdlYlBhZ2VJRCwgcmVxdWVzdFVSTC5zdHJpbmco
KS5hc2NpaSgpLmRhdGEoKSwgZGlhZ25vc3RpY0tleS51dGY4KCkuZGF0YSgpKTsKQEAgLTI0Niw3
ICsyNDMsNyBAQCB2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnJlY29yZFJldHJpZXZhbEZh
aWx1cmUodWludDY0X3Qgd2ViUGFnZUlELCBjb25zdCBOZQogewogICAgIFN0cmluZyBoYXNoID0g
a2V5Lmhhc2hBc1N0cmluZygpOwogICAgIFdlYkNvcmU6OlVSTCByZXF1ZXN0VVJMID0gcmVxdWVz
dC51cmwoKTsKLSAgICBxdWVyeVdhc0V2ZXJSZXF1ZXN0ZWQoaGFzaCwgW3RoaXMsIGhhc2gsIHJl
cXVlc3RVUkwsIHdlYlBhZ2VJRF0oYm9vbCB3YXNQcmV2aW91c2x5UmVxdWVzdGVkLCBjb25zdCBP
cHRpb25hbDxOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb24+JiBzdG9yZURlY2lzaW9uKSB7Cisg
ICAgcXVlcnlXYXNFdmVyUmVxdWVzdGVkKGhhc2gsIE5lZWRVbmNhY2hlZFJlYXNvbjo6WWVzLCBb
dGhpcywgaGFzaCwgcmVxdWVzdFVSTCwgd2ViUGFnZUlEXShib29sIHdhc1ByZXZpb3VzbHlSZXF1
ZXN0ZWQsIGNvbnN0IE9wdGlvbmFsPE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbj4mIHN0b3Jl
RGVjaXNpb24pIHsKICAgICAgICAgaWYgKHdhc1ByZXZpb3VzbHlSZXF1ZXN0ZWQpIHsKICAgICAg
ICAgICAgIFN0cmluZyBkaWFnbm9zdGljS2V5ID0gc3RvcmVEZWNpc2lvblRvRGlhZ25vc3RpY0tl
eShzdG9yZURlY2lzaW9uLnZhbHVlKCkpOwogICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwg
IihOZXR3b3JrUHJvY2Vzcykgd2ViUGFnZUlEICVsbHU6ICVzIHdhcyBwcmV2aW91c2x5IHJlcXVl
c3QgYnV0IGlzIG5vdCBpbiB0aGUgY2FjaGUsIHJlYXNvbjogJXMiLCB3ZWJQYWdlSUQsIHJlcXVl
c3RVUkwuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIGRpYWdub3N0aWNLZXkudXRmOCgpLmRhdGEo
KSk7CkBAIC0yOTAsMzUgKzI4Nyw3MCBAQCB2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6Om1h
cmtBc1JlcXVlc3RlZChjb25zdCBTdHJpbmcmIGhhc2gpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKIAotICAgIFN0cmluZ0NhcHR1cmUgaGFzaENhcHR1cmUoaGFzaCk7Ci0gICAg
ZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgW3RoaXMsIGhhc2hDYXB0
dXJlXSB7Ci0gICAgICAgIFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9D
b3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKLSAgICAgICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVu
KCkpCi0gICAgICAgICAgICBhZGRIYXNoVG9EYXRhYmFzZShoYXNoQ2FwdHVyZS5zdHJpbmcoKSk7
Ci0gICAgfSk7CisgICAgbV9oYXNoZXNUb0FkZC5hZGQoaGFzaCk7CisgICAgaWYgKCFtX3dyaXRl
VGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV93cml0ZVRpbWVyLnN0YXJ0T25lU2hvdChtaW5X
cml0ZUludGVydmFsU2Vjb25kcyk7Cit9CisKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6
d3JpdGVUaW1lckZpcmVkKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgSGFzaFNldDxTdHJpbmc+IGhhc2hlc1RvQWRkOworICAgIGhhc2hlc1RvQWRkLnN3YXAobV9o
YXNoZXNUb0FkZCk7CisgICAgSGFzaE1hcDxTdHJpbmcsIE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNp
c2lvbj4gc3RvcmVEZWNpc2lvbnNUb0FkZDsKKyAgICBzdG9yZURlY2lzaW9uc1RvQWRkLnN3YXAo
bV9zdG9yZURlY2lzaW9uc1RvQWRkKTsKIAogICAgIHNocmlua0lmTmVlZGVkKCk7CisKKyAgICBk
aXNwYXRjaF9hc3luYyhtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBbdGhpcywgaGFzaGVzVG9B
ZGQsIHN0b3JlRGVjaXNpb25zVG9BZGRdIHsKKyAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Bl
bigpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFdlYkNvcmU6OlNRTGl0ZVRyYW5z
YWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKKyAgICAgICAg
V2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb24gd3JpdGVUcmFuc2FjdGlvbihtX2RhdGFiYXNlKTsK
KyAgICAgICAgd3JpdGVUcmFuc2FjdGlvbi5iZWdpbigpOworCisgICAgICAgIGFkZEhhc2hlc1Rv
RGF0YWJhc2UoaGFzaGVzVG9BZGQpOworICAgICAgICBhZGRTdG9yZURlY2lzaW9uc1RvRGF0YWJh
c2Uoc3RvcmVEZWNpc2lvbnNUb0FkZCk7CisKKyAgICAgICAgd3JpdGVUcmFuc2FjdGlvbi5jb21t
aXQoKTsKKyAgICB9KTsKIH0KIAotdm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpxdWVyeVdh
c0V2ZXJSZXF1ZXN0ZWQoY29uc3QgU3RyaW5nJiBoYXNoLCBjb25zdCBSZXF1ZXN0ZWRDb21wbGV0
aW9uSGFuZGxlciYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3Rp
Y3M6OnF1ZXJ5V2FzRXZlclJlcXVlc3RlZChjb25zdCBTdHJpbmcmIGhhc2gsIE5lZWRVbmNhY2hl
ZFJlYXNvbiBuZWVkVW5jYWNoZWRSZWFzb24sIGNvbnN0IFJlcXVlc3RlZENvbXBsZXRpb25IYW5k
bGVyJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwogCi0gICAgYXV0byBldmVyUmVxdWVzdGVkUXVlcnkgPSBzdGQ6Om1ha2VfdW5pcXVlPEV2ZXJS
ZXF1ZXN0ZWRRdWVyeT4oRXZlclJlcXVlc3RlZFF1ZXJ5IHsgaGFzaCwgY29tcGxldGlvbkhhbmRs
ZXIgfSk7CisgICAgLy8gUXVlcnkgcGVuZGluZyB3cml0ZXMgZmlyc3QuCisgICAgYm9vbCB3YXNB
bHJlYWR5UmVxdWVzdGVkID0gbV9oYXNoZXNUb0FkZC5jb250YWlucyhoYXNoKTsKKyAgICBpZiAo
d2FzQWxyZWFkeVJlcXVlc3RlZCAmJiBuZWVkVW5jYWNoZWRSZWFzb24gPT0gTmVlZFVuY2FjaGVk
UmVhc29uOjpObykgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih0cnVlLCBOdWxsb3B0KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobmVlZFVuY2FjaGVkUmVhc29uID09IE5l
ZWRVbmNhY2hlZFJlYXNvbjo6WWVzICYmIG1fc3RvcmVEZWNpc2lvbnNUb0FkZC5jb250YWlucyho
YXNoKSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih0cnVlLCBtX3N0b3JlRGVjaXNpb25z
VG9BZGQuZ2V0KGhhc2gpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFF1ZXJ5
IHRoZSBkYXRhYmFzZS4KKyAgICBhdXRvIGV2ZXJSZXF1ZXN0ZWRRdWVyeSA9IHN0ZDo6bWFrZV91
bmlxdWU8RXZlclJlcXVlc3RlZFF1ZXJ5PihFdmVyUmVxdWVzdGVkUXVlcnkgeyBoYXNoLCBuZWVk
VW5jYWNoZWRSZWFzb24gPT0gTmVlZFVuY2FjaGVkUmVhc29uOjpZZXMsIGNvbXBsZXRpb25IYW5k
bGVyIH0pOwogICAgIGF1dG8mIHF1ZXJ5ID0gKmV2ZXJSZXF1ZXN0ZWRRdWVyeTsKICAgICBtX2Fj
dGl2ZVF1ZXJpZXMuYWRkKFdURjo6bW92ZShldmVyUmVxdWVzdGVkUXVlcnkpKTsKLSAgICBkaXNw
YXRjaF9hc3luYyhtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBbdGhpcywgJnF1ZXJ5XSB7Cisg
ICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgW3RoaXMsIHdhc0Fs
cmVhZHlSZXF1ZXN0ZWQsICZxdWVyeV0gKCkgbXV0YWJsZSB7CiAgICAgICAgIFdlYkNvcmU6OlNR
TGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsK
LSAgICAgICAgYm9vbCB3YXNBbHJlYWR5UmVxdWVzdGVkID0gZmFsc2U7CiAgICAgICAgIE9wdGlv
bmFsPE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbj4gc3RvcmVEZWNpc2lvbjsKICAgICAgICAg
aWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpIHsKLSAgICAgICAgICAgIFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgQVNDSUlMaXRlcmFsKCJTRUxFQ1QgQWxyZWFk
eVJlcXVlc3RlZC5oYXNoLCByZWFzb24gRlJPTSBBbHJlYWR5UmVxdWVzdGVkIExFRlQgT1VURVIg
Sk9JTiBVbmNhY2hlZFJlYXNvbiBPTiBBbHJlYWR5UmVxdWVzdGVkLmhhc2g9VW5jYWNoZWRSZWFz
b24uaGFzaCBXSEVSRSBBbHJlYWR5UmVxdWVzdGVkLmhhc2g9PyIpKTsKLSAgICAgICAgICAgIGlm
IChzdGF0ZW1lbnQucHJlcGFyZSgpID09IFdlYkNvcmU6OlNRTFJlc3VsdE9rKSB7CisgICAgICAg
ICAgICBpZiAoIXdhc0FscmVhZHlSZXF1ZXN0ZWQpIHsKKyAgICAgICAgICAgICAgICBXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgiU0VM
RUNUIGhhc2ggRlJPTSBBbHJlYWR5UmVxdWVzdGVkIFdIRVJFIGhhc2g9PyIpKTsKKyAgICAgICAg
ICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgcXVlcnkuaGFzaCk7CisgICAgICAgICAgICAg
ICAgd2FzQWxyZWFkeVJlcXVlc3RlZCA9IChzdGF0ZW1lbnQuc3RlcCgpID09IFdlYkNvcmU6OlNR
TFJlc3VsdFJvdyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAod2FzQWxyZWFkeVJl
cXVlc3RlZCAmJiBxdWVyeS5uZWVkVW5jYWNoZWRSZWFzb24pIHsKKyAgICAgICAgICAgICAgICBX
ZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJh
bCgiU0VMRUNUIHJlYXNvbiBGUk9NIFVuY2FjaGVkUmVhc29uIFdIRVJFIEFscmVhZHlSZXF1ZXN0
ZWQuaGFzaD0/IikpOwogICAgICAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBxdWVy
eS5oYXNoKTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSA9PSBXZWJDb3Jl
OjpTUUxSZXN1bHRSb3cpIHsKLSAgICAgICAgICAgICAgICAgICAgd2FzQWxyZWFkeVJlcXVlc3Rl
ZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHN0b3JlRGVjaXNpb24gPSBzdGF0ZW1lbnQu
aXNDb2x1bW5OdWxsKDEpID8gTmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uOjpZZXMgOiBzdGF0
aWNfY2FzdDxOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb24+KHN0YXRlbWVudC5nZXRDb2x1bW5J
bnQoMSkpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc3RhdGVtZW50
LnN0ZXAoKSA9PSBXZWJDb3JlOjpTUUxSZXN1bHRSb3cpCisgICAgICAgICAgICAgICAgICAgIHN0
b3JlRGVjaXNpb24gPSBzdGF0aWNfY2FzdDxOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb24+KHN0
YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFt0aGlzLCAmcXVl
cnksIHdhc0FscmVhZHlSZXF1ZXN0ZWQsIHN0b3JlRGVjaXNpb25dIHsKQEAgLTM0NSwyMSArMzc3
LDM3IEBAIHZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6Y2xlYXIoKQogICAgIH0pOwogfQog
Ci12b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OmFkZEhhc2hUb0RhdGFiYXNlKGNvbnN0IFN0
cmluZyYgaGFzaCkKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6YWRkSGFzaGVzVG9EYXRh
YmFzZShjb25zdCBIYXNoU2V0PFN0cmluZz4mIGhhc2hlcykKIHsKICAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKICAgICBBU1NFUlQoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2VUcmFja2Vy
OjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2UuaXNP
cGVuKCkpOwogCi0gICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFi
YXNlLCBBU0NJSUxpdGVyYWwoIklOU0VSVCBPUiBJR05PUkUgSU5UTyBBbHJlYWR5UmVxdWVzdGVk
IChoYXNoKSBWQUxVRVMgKD8pIikpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFdl
YkNvcmU6OlNRTFJlc3VsdE9rKQotICAgICAgICByZXR1cm47CisgICAgZm9yIChhdXRvJiBoYXNo
IDogaGFzaGVzKSB7CisgICAgICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQo
bV9kYXRhYmFzZSwgQVNDSUlMaXRlcmFsKCJJTlNFUlQgT1IgSUdOT1JFIElOVE8gQWxyZWFkeVJl
cXVlc3RlZCAoaGFzaCkgVkFMVUVTICg/KSIpKTsKKyAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gV2ViQ29yZTo6U1FMUmVzdWx0T2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIGhhc2gpOworICAgICAgICBpZiAoZXhlY3V0ZVNR
TFN0YXRlbWVudChzdGF0ZW1lbnQpKQorICAgICAgICAgICAgKyttX2FwcHJveGltYXRlRW50cnlD
b3VudDsKKyAgICB9Cit9CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgaGFzaCk7Ci0gICAg
aWYgKCFleGVjdXRlU1FMU3RhdGVtZW50KHN0YXRlbWVudCkpCi0gICAgICAgIHJldHVybjsKK3Zv
aWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6YWRkU3RvcmVEZWNpc2lvbnNUb0RhdGFiYXNlKGNv
bnN0IEhhc2hNYXA8U3RyaW5nLCBOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb24+JiBzdG9yZURl
Y2lzaW9ucykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQo
V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3Mo
KSk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UuaXNPcGVuKCkpOworCisgICAgZm9yIChhdXRvJiBw
YWlyIDogc3RvcmVEZWNpc2lvbnMpIHsKKyAgICAgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
IHN0YXRlbWVudChtX2RhdGFiYXNlLCBBU0NJSUxpdGVyYWwoIklOU0VSVCBPUiBSRVBMQUNFIElO
VE8gVW5jYWNoZWRSZWFzb24gKGhhc2gsIHJlYXNvbikgVkFMVUVTICg/LCA/KSIpKTsKKyAgICAg
ICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gV2ViQ29yZTo6U1FMUmVzdWx0T2spCisgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICsrbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQ7CisgICAg
ICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBwYWlyLmtleSk7CisgICAgICAgIHN0YXRlbWVudC5i
aW5kSW50KDIsIHN0YXRpY19jYXN0PGludD4ocGFpci52YWx1ZSkpOworICAgICAgICBleGVjdXRl
U1FMU3RhdGVtZW50KHN0YXRlbWVudCk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNz
UG9vbENvY29hLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQ
b29sQ29jb2EubW0KaW5kZXggMzQ4OGQxYzcwNDQ2NzY1NGQxYWUxZjk3NzczZGQwZTE1YmY3ZTNl
ZC4uZjAwYTVmZmJkMjBmNGUxNTlmZjYyODZjZDZmYzRkMzNhNTIwNmZlZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0K
QEAgLTEwNyw3ICsxMDcsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVl
ZGVkKCkKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogICAgIFtyZWdpc3RyYXRpb25EaWN0
aW9uYXJ5IHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSBmb3JLZXk6V2Vi
S2l0TmV0d29ya0NhY2hlRW5hYmxlZERlZmF1bHRzS2V5XTsKLSAgICBbcmVnaXN0cmF0aW9uRGlj
dGlvbmFyeSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSBmb3JLZXk6V2Vi
S2l0TmV0d29ya0NhY2hlRWZmaWNhY3lMb2dnaW5nRW5hYmxlZERlZmF1bHRzS2V5XTsKKyAgICBb
cmVnaXN0cmF0aW9uRGljdGlvbmFyeSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29s
OllFU10gZm9yS2V5OldlYktpdE5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZ0VuYWJsZWREZWZh
dWx0c0tleV07CiAjZW5kaWYKIAogICAgIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVm
YXVsdHNdIHJlZ2lzdGVyRGVmYXVsdHM6cmVnaXN0cmF0aW9uRGljdGlvbmFyeV07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247721</attachid>
            <date>2015-03-02 16:55:23 -0800</date>
            <delta_ts>2015-03-02 17:27:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142186-20150302165506.patch</filename>
            <type>text/plain</type>
            <size>16865</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwODg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNzE5NzhhZjRhYjlkZTM2
MzhlNzUxOTVjOWMyNzdkODFjMWQ2ODM0MS4uMjRmMGExN2VlOTc2ZTljODJmMjBmZWIyZGMyYmU1
NzcwMjhhNTA1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDE1LTAzLTAyICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTmV0d29ya0NhY2hlIGVmZmlj
YWN5IGxvZ2dpbmcgaXMgdXNpbmcgdG9vIG11Y2ggQ1BVCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDIxODYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzE5NjMyMDgwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5ldHdvcmtDYWNoZSBlZmZpY2FjeSBsb2dnaW5nIHdhcyB1c2luZyB0b28gbXVjaCBDUFUg
bW9zdGx5IGR1ZSB0bworICAgICAgICBkYXRhYmFzZSB3cml0ZXMuIExvZ2dpbmcgd2FzIHVzaW5n
IH4xMS4zJSBvZiB0aGUgTmV0d29ya1Byb2Nlc3MnCisgICAgICAgIENQVSB1c2FnZSAofjkuMiUg
Zm9yIHdyaXRlcyAvIH4xLjMlIGZvciByZWFkcykuCisKKyAgICAgICAgVGhpcyBwYXRjaCBidWZm
ZXJzIHdyaXRlcyByZXF1ZXN0cyBpbiBtZW1vcnkgYW5kIG9ubHkgd3JpdGVzIHRoZW0KKyAgICAg
ICAgdG8gZGlzayBldmVyeSAxMCBzZWNvbmRzLiBXZSBhcmUgdGh1cyB3cml0aW5nIHRvIHRoaXMg
bGVzcyBmcmVxdWVudGx5CisgICAgICAgIGFuZCB3cml0aW5nIG1vcmUgYXQgb25jZSwgaW4gYSBz
aW5nbGUgU1FMIHRyYW5zYWN0aW9uLiBBZnRlciB0aGlzCisgICAgICAgIGNoYW5nZSwgZWZmaWNh
Y3kgbG9nZ2luZyBvbmx5IGFjY291bnRzIGZvciB+My41JSBvZiB0aGUgTmV0d29ya1Byb2Nlc3Mn
CisgICAgICAgIENQVSBhY3Rpdml0eSAoMS41JSBmb3Igd3JpdGVzIC8gMS4yJSBmb3IgcmVhZHMp
LgorCisgICAgICAgIE5vdyB0aGF0IENQVSB1c2FnZSBpcyBtb3JlIGFjY2VwdGFibGUsIHRoaXMg
cGF0Y2ggcmUtZW5hYmxlcyB0aGUKKyAgICAgICAgbmV0d29yayBjYWNoZSBlZmZpY2ljeSBsb2dn
aW5nLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlz
dGljcy5oOgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rh
dGlzdGljc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpleGVjdXRlU1FMU3RhdGVtZW50KToK
KyAgICAgICAgQ2FsbCBzdGVwKCkgaW5zdGVhZCBvZiBleGVjdXRlQ29tbWFuZCgpIGJlY2F1c2U6
CisgICAgICAgIC0gVGhlIGlucHV0IHN0YXRlbWVudCBpcyBhbHJlYWR5IHByZXBhcmVkLgorICAg
ICAgICAtIHN0ZXAoKSBkb2VzIG5vdCBmaW5hbGl6ZSgpIHRoZSBzdGF0ZW1lbnQgYW5kIHRodXMg
d2UgY2FsbGVyIGNhbgorICAgICAgICAgIHJldXNlIGl0IGFmdGVyIGNhbGxpbmcgcmVzZXQoKS4K
KworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpOZXR3b3JrQ2FjaGVT
dGF0aXN0aWNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlU3RhdGlzdGljczo6Ym9v
dHN0cmFwRnJvbU5ldHdvcmtDYWNoZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0
YXRpc3RpY3M6OnJlY29yZE5vdENhY2hpbmdSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZVN0YXRpc3RpY3M6OnJlY29yZE5vdFVzaW5nQ2FjaGVGb3JSZXF1ZXN0KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlU3RhdGlzdGljczo6cmVjb3JkUmV0cmlldmFsRmFp
bHVyZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6Om1hcmtBc1Jl
cXVlc3RlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OndyaXRl
VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnF1
ZXJ5V2FzRXZlclJlcXVlc3RlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRp
c3RpY3M6OmFkZEhhc2hlc1RvRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGVTdGF0aXN0aWNzOjphZGRTdG9yZURlY2lzaW9uc1RvRGF0YWJhc2UpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjphZGRIYXNoVG9EYXRhYmFzZSk6IERlbGV0ZWQu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbToKKyAg
ICAgICAgKFdlYktpdDo6cmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCk6CisgICAgICAgIFJl
LWVuYWJsZSB0aGUgbmV0d29yayBjYWNoZSBlZmZpY2FjeSBsb2dnaW5nLgorCiAyMDE1LTAzLTAx
ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2Ug
Y2xpcC1wYXRoIHdvcmsgb24gPHZpZGVvPiwgPGNhbnZhcz4gZXRjLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5o
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlz
dGljcy5oCmluZGV4IGY5Yzc4MjViOWM2NWZhNzViZGI2MzQ1MTcyMGI2ODdiZTdmMzQzMzcuLmMw
ODZhZmYzNmNjZDE1NmFiZDdkZmFhOWU5YmI2OGU4M2IyZDEzM2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVLZXkuaCIK
ICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTdG9yYWdlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9TUUxp
dGVEYXRhYmFzZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwpAQCAtNTcsMTQgKzU4LDE4IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBib290c3RyYXBGcm9tTmV0d29ya0NhY2hlKGNvbnN0IFN0cmluZyYgbmV0
d29ya0NhY2hlUGF0aCk7CiAgICAgdm9pZCBzaHJpbmtJZk5lZWRlZCgpOwogCi0gICAgdm9pZCBh
ZGRIYXNoVG9EYXRhYmFzZShjb25zdCBTdHJpbmcmIGhhc2gpOworICAgIHZvaWQgYWRkSGFzaGVz
VG9EYXRhYmFzZShjb25zdCBIYXNoU2V0PFN0cmluZz4mIGhhc2hlcyk7CisgICAgdm9pZCBhZGRT
dG9yZURlY2lzaW9uc1RvRGF0YWJhc2UoY29uc3QgSGFzaE1hcDxTdHJpbmcsIE5ldHdvcmtDYWNo
ZTo6U3RvcmVEZWNpc2lvbj4mKTsKKyAgICB2b2lkIHdyaXRlVGltZXJGaXJlZCgpOwogCiAgICAg
dHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wgd2FzRXZlclJlcXVlc3RlZCwgY29uc3Qg
T3B0aW9uYWw8TmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uPiYpPiBSZXF1ZXN0ZWRDb21wbGV0
aW9uSGFuZGxlcjsKLSAgICB2b2lkIHF1ZXJ5V2FzRXZlclJlcXVlc3RlZChjb25zdCBTdHJpbmcm
LCBjb25zdCBSZXF1ZXN0ZWRDb21wbGV0aW9uSGFuZGxlciYpOworICAgIGVudW0gY2xhc3MgTmVl
ZFVuY2FjaGVkUmVhc29uIHsgTm8sIFllcyB9OworICAgIHZvaWQgcXVlcnlXYXNFdmVyUmVxdWVz
dGVkKGNvbnN0IFN0cmluZyYsIE5lZWRVbmNhY2hlZFJlYXNvbiwgY29uc3QgUmVxdWVzdGVkQ29t
cGxldGlvbkhhbmRsZXImKTsKICAgICB2b2lkIG1hcmtBc1JlcXVlc3RlZChjb25zdCBTdHJpbmcm
IGhhc2gpOwogCiAgICAgc3RydWN0IEV2ZXJSZXF1ZXN0ZWRRdWVyeSB7CiAgICAgICAgIFN0cmlu
ZyBoYXNoOworICAgICAgICBib29sIG5lZWRVbmNhY2hlZFJlYXNvbjsKICAgICAgICAgUmVxdWVz
dGVkQ29tcGxldGlvbkhhbmRsZXIgY29tcGxldGlvbkhhbmRsZXI7CiAgICAgfTsKIApAQCAtNzUs
NiArODAsOSBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgbXV0YWJsZSBIYXNoU2V0PHN0ZDo6dW5p
cXVlX3B0cjxjb25zdCBFdmVyUmVxdWVzdGVkUXVlcnk+PiBtX2FjdGl2ZVF1ZXJpZXM7CiAgICAg
V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKKyAgICBIYXNoU2V0PFN0cmluZz4g
bV9oYXNoZXNUb0FkZDsKKyAgICBIYXNoTWFwPFN0cmluZywgTmV0d29ya0NhY2hlOjpTdG9yZURl
Y2lzaW9uPiBtX3N0b3JlRGVjaXNpb25zVG9BZGQ7CisgICAgV2ViQ29yZTo6VGltZXIgbV93cml0
ZVRpbWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzQ29jb2EubW0KaW5kZXggZTc1NzNhY2RhZWI1OGExZDljYzk4YjFjNzJhNTk3MzQ2ZWM2
Njk4NS4uZWZjZWFmOGY3NGM0ZGQ4MDQ5ZjAwNjUxZjE4NWE1ZTU4MTk1ODBiNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlz
dGljc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZVN0YXRpc3RpY3NDb2NvYS5tbQpAQCAtNDMsNiArNDMsNyBAQAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBuZXR3b3JrQ2FjaGVTdGF0aXN0aWNzRGF0
YWJhc2VOYW1lID0gIldlYktpdENhY2hlU3RhdGlzdGljcy5kYiI7CitzdGF0aWMgY29uc3QgZG91
YmxlIG1pbldyaXRlSW50ZXJ2YWxTZWNvbmRzID0gMTA7CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVT
UUxDb21tYW5kKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSwgY29uc3QgU3RyaW5n
JiBzcWwpCiB7CkBAIC02MywxMSArNjQsMTIgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZVNRTFN0YXRl
bWVudChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQmIHN0YXRlbWVudCkKICAgICBBU1NFUlQoV2Vi
Q29yZTo6U1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7
CiAgICAgQVNTRVJUKHN0YXRlbWVudC5kYXRhYmFzZSgpLmlzT3BlbigpKTsKIAotICAgIGJvb2wg
cmVzdWx0ID0gc3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCk7Ci0gICAgaWYgKCFyZXN1bHQpCisg
ICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgIT0gV2ViQ29yZTo6U1FMUmVzdWx0RG9uZSkgewogICAg
ICAgICBMT0dfRVJST1IoIk5ldHdvcmsgY2FjaGUgc3RhdGlzdGljczogZmFpbGVkIHRvIGV4ZWN1
dGUgc3RhdGVtZW50IFwiJXNcIiBlcnJvciBcIiVzXCIiLCBzdGF0ZW1lbnQucXVlcnkoKS51dGY4
KCkuZGF0YSgpLCBzdGF0ZW1lbnQuZGF0YWJhc2UoKS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiB0
cnVlOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RhdGlzdGljcz4gTmV0d29y
a0NhY2hlU3RhdGlzdGljczo6b3Blbihjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCkKQEAgLTgwLDYg
KzgyLDcgQEAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M+IE5ldHdvcmtD
YWNoZVN0YXRpc3RpY3M6Om9wZW4oY29uc3QgU3RyaW4KIAogTmV0d29ya0NhY2hlU3RhdGlzdGlj
czo6TmV0d29ya0NhY2hlU3RhdGlzdGljcyhjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCkKICAg
ICA6IG1fYmFja2dyb3VuZElPUXVldWUoYWRvcHREaXNwYXRjaChkaXNwYXRjaF9xdWV1ZV9jcmVh
dGUoImNvbS5hcHBsZS5XZWJLaXQuQ2FjaGUuU3RhdGlzdGljcy5CYWNrZ3JvdW5kIiwgRElTUEFU
Q0hfUVVFVUVfU0VSSUFMKSkpCisgICAgLCBtX3dyaXRlVGltZXIoKnRoaXMsICZOZXR3b3JrQ2Fj
aGVTdGF0aXN0aWNzOjp3cml0ZVRpbWVyRmlyZWQpCiB7CiAgICAgZGlzcGF0Y2hfc2V0X3Rhcmdl
dF9xdWV1ZShtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1
ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0JBQ0tHUk9VTkQsIDApKTsKIApAQCAtMTQxLDE0
ICsxNDQsMTggQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpib290c3RyYXBGcm9tTmV0
d29ya0NhY2hlKGNvbnN0IFN0cmluZyYgbmV0d29ya0NhY2gKIAogICAgIExPRyhOZXR3b3JrQ2Fj
aGUsICIoTmV0d29ya1Byb2Nlc3MpIEJvb3RzdHJhcHBpbmcgdGhlIG5ldHdvcmsgY2FjaGUgc3Rh
dGlzdGljcyBkYXRhYmFzZSBmcm9tIHRoZSBuZXR3b3JrIGNhY2hlLi4uIik7CiAKKyAgICBIYXNo
U2V0PFN0cmluZz4gaGFzaGVzOworICAgIHRyYXZlcnNlQ2FjaGVGaWxlcyhuZXR3b3JrQ2FjaGVQ
YXRoLCBbJmhhc2hlc10oY29uc3QgU3RyaW5nJiBoYXNoLCBjb25zdCBTdHJpbmcmKSB7CisgICAg
ICAgIGhhc2hlcy5hZGQoaGFzaCk7CisgICAgfSk7CisKICAgICBXZWJDb3JlOjpTUUxpdGVUcmFu
c2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7Ci0gICAgV2Vi
Q29yZTo6U1FMaXRlVHJhbnNhY3Rpb24gYm9vdHN0cmFwVHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7
Ci0gICAgYm9vdHN0cmFwVHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAgICBXZWJDb3JlOjpTUUxpdGVU
cmFuc2FjdGlvbiB3cml0ZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHdyaXRlVHJhbnNh
Y3Rpb24uYmVnaW4oKTsKIAotICAgIHRyYXZlcnNlQ2FjaGVGaWxlcyhuZXR3b3JrQ2FjaGVQYXRo
LCBbdGhpc10oY29uc3QgU3RyaW5nJiBoYXNoLCBjb25zdCBTdHJpbmcmKSB7Ci0gICAgICAgIGFk
ZEhhc2hUb0RhdGFiYXNlKGhhc2gpOwotICAgIH0pOwotICAgIGJvb3RzdHJhcFRyYW5zYWN0aW9u
LmNvbW1pdCgpOworICAgIGFkZEhhc2hlc1RvRGF0YWJhc2UoaGFzaGVzKTsKKworICAgIHdyaXRl
VHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6
c2hyaW5rSWZOZWVkZWQoKQpAQCAtMTc0LDE4ICsxODEsOSBAQCB2b2lkIE5ldHdvcmtDYWNoZVN0
YXRpc3RpY3M6OnJlY29yZE5vdENhY2hpbmdSZXNwb25zZShjb25zdCBOZXR3b3JrQ2FjaGVLZXkm
IGtleQogewogICAgIEFTU0VSVChzdG9yZURlY2lzaW9uICE9IE5ldHdvcmtDYWNoZTo6U3RvcmVE
ZWNpc2lvbjo6WWVzKTsKIAotICAgIFN0cmluZ0NhcHR1cmUgaGFzaENhcHR1cmUoa2V5Lmhhc2hB
c1N0cmluZygpKTsKLSAgICBkaXNwYXRjaF9hc3luYyhtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgp
LCBbdGhpcywgaGFzaENhcHR1cmUsIHN0b3JlRGVjaXNpb25dIHsKLSAgICAgICAgaWYgKCFtX2Rh
dGFiYXNlLmlzT3BlbigpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgiSU5TRVJU
IE9SIFJFUExBQ0UgSU5UTyBVbmNhY2hlZFJlYXNvbiAoaGFzaCwgcmVhc29uKSBWQUxVRVMgKD8s
ID8pIikpOwotICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBXZWJDb3JlOjpTUUxS
ZXN1bHRPaykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBzdGF0ZW1lbnQuYmluZFRl
eHQoMSwgaGFzaENhcHR1cmUuc3RyaW5nKCkpOwotICAgICAgICBzdGF0ZW1lbnQuYmluZEludCgy
LCBzdGF0aWNfY2FzdDxpbnQ+KHN0b3JlRGVjaXNpb24pKTsKLSAgICAgICAgZXhlY3V0ZVNRTFN0
YXRlbWVudChzdGF0ZW1lbnQpOwotICAgIH0pOworICAgIG1fc3RvcmVEZWNpc2lvbnNUb0FkZC5h
ZGQoa2V5Lmhhc2hBc1N0cmluZygpLCBzdG9yZURlY2lzaW9uKTsKKyAgICBpZiAoIW1fd3JpdGVU
aW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3dyaXRlVGltZXIuc3RhcnRPbmVTaG90KG1pbldy
aXRlSW50ZXJ2YWxTZWNvbmRzKTsKIH0KIAogc3RhdGljIFN0cmluZyByZXRyaWV2ZURlY2lzaW9u
VG9EaWFnbm9zdGljS2V5KE5ldHdvcmtDYWNoZTo6UmV0cmlldmVEZWNpc2lvbiByZXRyaWV2ZURl
Y2lzaW9uKQpAQCAtMjEyLDcgKzIxMCw3IEBAIHZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6
cmVjb3JkTm90VXNpbmdDYWNoZUZvclJlcXVlc3QodWludDY0X3Qgd2ViUGFnZUlELCBjCiAKICAg
ICBTdHJpbmcgaGFzaCA9IGtleS5oYXNoQXNTdHJpbmcoKTsKICAgICBXZWJDb3JlOjpVUkwgcmVx
dWVzdFVSTCA9IHJlcXVlc3QudXJsKCk7Ci0gICAgcXVlcnlXYXNFdmVyUmVxdWVzdGVkKGhhc2gs
IFt0aGlzLCBoYXNoLCByZXF1ZXN0VVJMLCB3ZWJQYWdlSUQsIHJldHJpZXZlRGVjaXNpb25dKGJv
b2wgd2FzRXZlclJlcXVlc3RlZCwgY29uc3QgT3B0aW9uYWw8TmV0d29ya0NhY2hlOjpTdG9yZURl
Y2lzaW9uPiYpIHsKKyAgICBxdWVyeVdhc0V2ZXJSZXF1ZXN0ZWQoaGFzaCwgTmVlZFVuY2FjaGVk
UmVhc29uOjpObywgW3RoaXMsIGhhc2gsIHJlcXVlc3RVUkwsIHdlYlBhZ2VJRCwgcmV0cmlldmVE
ZWNpc2lvbl0oYm9vbCB3YXNFdmVyUmVxdWVzdGVkLCBjb25zdCBPcHRpb25hbDxOZXR3b3JrQ2Fj
aGU6OlN0b3JlRGVjaXNpb24+JikgewogICAgICAgICBpZiAod2FzRXZlclJlcXVlc3RlZCkgewog
ICAgICAgICAgICAgU3RyaW5nIGRpYWdub3N0aWNLZXkgPSByZXRyaWV2ZURlY2lzaW9uVG9EaWFn
bm9zdGljS2V5KHJldHJpZXZlRGVjaXNpb24pOwogICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNo
ZSwgIihOZXR3b3JrUHJvY2Vzcykgd2ViUGFnZUlEICVsbHU6ICVzIHdhcyBwcmV2aW91c2x5IHJl
cXVlc3RlZCBidXQgd2UgYXJlIG5vdCB1c2luZyB0aGUgY2FjaGUsIHJlYXNvbjogJXMiLCB3ZWJQ
YWdlSUQsIHJlcXVlc3RVUkwuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIGRpYWdub3N0aWNLZXku
dXRmOCgpLmRhdGEoKSk7CkBAIC0yNDYsNyArMjQ0LDcgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzOjpyZWNvcmRSZXRyaWV2YWxGYWlsdXJlKHVpbnQ2NF90IHdlYlBhZ2VJRCwgY29uc3Qg
TmUKIHsKICAgICBTdHJpbmcgaGFzaCA9IGtleS5oYXNoQXNTdHJpbmcoKTsKICAgICBXZWJDb3Jl
OjpVUkwgcmVxdWVzdFVSTCA9IHJlcXVlc3QudXJsKCk7Ci0gICAgcXVlcnlXYXNFdmVyUmVxdWVz
dGVkKGhhc2gsIFt0aGlzLCBoYXNoLCByZXF1ZXN0VVJMLCB3ZWJQYWdlSURdKGJvb2wgd2FzUHJl
dmlvdXNseVJlcXVlc3RlZCwgY29uc3QgT3B0aW9uYWw8TmV0d29ya0NhY2hlOjpTdG9yZURlY2lz
aW9uPiYgc3RvcmVEZWNpc2lvbikgeworICAgIHF1ZXJ5V2FzRXZlclJlcXVlc3RlZChoYXNoLCBO
ZWVkVW5jYWNoZWRSZWFzb246OlllcywgW3RoaXMsIGhhc2gsIHJlcXVlc3RVUkwsIHdlYlBhZ2VJ
RF0oYm9vbCB3YXNQcmV2aW91c2x5UmVxdWVzdGVkLCBjb25zdCBPcHRpb25hbDxOZXR3b3JrQ2Fj
aGU6OlN0b3JlRGVjaXNpb24+JiBzdG9yZURlY2lzaW9uKSB7CiAgICAgICAgIGlmICh3YXNQcmV2
aW91c2x5UmVxdWVzdGVkKSB7CiAgICAgICAgICAgICBTdHJpbmcgZGlhZ25vc3RpY0tleSA9IHN0
b3JlRGVjaXNpb25Ub0RpYWdub3N0aWNLZXkoc3RvcmVEZWNpc2lvbi52YWx1ZSgpKTsKICAgICAg
ICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHdlYlBhZ2VJRCAlbGx1
OiAlcyB3YXMgcHJldmlvdXNseSByZXF1ZXN0IGJ1dCBpcyBub3QgaW4gdGhlIGNhY2hlLCByZWFz
b246ICVzIiwgd2ViUGFnZUlELCByZXF1ZXN0VVJMLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBk
aWFnbm9zdGljS2V5LnV0ZjgoKS5kYXRhKCkpOwpAQCAtMjkwLDM0ICsyODgsNzMgQEAgdm9pZCBO
ZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjptYXJrQXNSZXF1ZXN0ZWQoY29uc3QgU3RyaW5nJiBoYXNo
KQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBTdHJpbmdDYXB0dXJl
IGhhc2hDYXB0dXJlKGhhc2gpOwotICAgIGRpc3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVl
dWUuZ2V0KCksIFt0aGlzLCBoYXNoQ2FwdHVyZV0gewotICAgICAgICBXZWJDb3JlOjpTUUxpdGVU
cmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7Ci0gICAg
ICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICAgICAgYWRkSGFzaFRvRGF0YWJh
c2UoaGFzaENhcHR1cmUuc3RyaW5nKCkpOwotICAgIH0pOworICAgIG1faGFzaGVzVG9BZGQuYWRk
KGhhc2gpOworICAgIGlmICghbV93cml0ZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fd3Jp
dGVUaW1lci5zdGFydE9uZVNob3QobWluV3JpdGVJbnRlcnZhbFNlY29uZHMpOworfQorCit2b2lk
IE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OndyaXRlVGltZXJGaXJlZCgpCit7CisgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIEhhc2hTZXQ8U3RyaW5nPiBoYXNoZXNUb0FkZDsK
KyAgICBoYXNoZXNUb0FkZC5zd2FwKG1faGFzaGVzVG9BZGQpOworICAgIEhhc2hNYXA8U3RyaW5n
LCBOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb24+IHN0b3JlRGVjaXNpb25zVG9BZGQ7CisgICAg
c3RvcmVEZWNpc2lvbnNUb0FkZC5zd2FwKG1fc3RvcmVEZWNpc2lvbnNUb0FkZCk7CiAKICAgICBz
aHJpbmtJZk5lZWRlZCgpOworCisgICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1
ZS5nZXQoKSwgW3RoaXMsIGhhc2hlc1RvQWRkLCBzdG9yZURlY2lzaW9uc1RvQWRkXSB7CisgICAg
ICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFu
c2FjdGlvbkNvdW50ZXI7CisgICAgICAgIFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uIHdyaXRl
VHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgICAgIHdyaXRlVHJhbnNhY3Rpb24uYmVnaW4o
KTsKKworICAgICAgICBhZGRIYXNoZXNUb0RhdGFiYXNlKGhhc2hlc1RvQWRkKTsKKyAgICAgICAg
YWRkU3RvcmVEZWNpc2lvbnNUb0RhdGFiYXNlKHN0b3JlRGVjaXNpb25zVG9BZGQpOworCisgICAg
ICAgIHdyaXRlVHJhbnNhY3Rpb24uY29tbWl0KCk7CisgICAgfSk7CiB9CiAKLXZvaWQgTmV0d29y
a0NhY2hlU3RhdGlzdGljczo6cXVlcnlXYXNFdmVyUmVxdWVzdGVkKGNvbnN0IFN0cmluZyYgaGFz
aCwgY29uc3QgUmVxdWVzdGVkQ29tcGxldGlvbkhhbmRsZXImIGNvbXBsZXRpb25IYW5kbGVyKQor
dm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpxdWVyeVdhc0V2ZXJSZXF1ZXN0ZWQoY29uc3Qg
U3RyaW5nJiBoYXNoLCBOZWVkVW5jYWNoZWRSZWFzb24gbmVlZFVuY2FjaGVkUmVhc29uLCBjb25z
dCBSZXF1ZXN0ZWRDb21wbGV0aW9uSGFuZGxlciYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGF1dG8gZXZlclJlcXVlc3RlZFF1ZXJ5
ID0gc3RkOjptYWtlX3VuaXF1ZTxFdmVyUmVxdWVzdGVkUXVlcnk+KEV2ZXJSZXF1ZXN0ZWRRdWVy
eSB7IGhhc2gsIGNvbXBsZXRpb25IYW5kbGVyIH0pOworICAgIC8vIFF1ZXJ5IHBlbmRpbmcgd3Jp
dGVzIGZpcnN0LgorICAgIGJvb2wgd2FzQWxyZWFkeVJlcXVlc3RlZCA9IG1faGFzaGVzVG9BZGQu
Y29udGFpbnMoaGFzaCk7CisgICAgaWYgKHdhc0FscmVhZHlSZXF1ZXN0ZWQgJiYgbmVlZFVuY2Fj
aGVkUmVhc29uID09IE5lZWRVbmNhY2hlZFJlYXNvbjo6Tm8pIHsKKyAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIodHJ1ZSwgTnVsbG9wdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KG5lZWRVbmNhY2hlZFJlYXNvbiA9PSBOZWVkVW5jYWNoZWRSZWFzb246OlllcyAmJiBtX3N0b3Jl
RGVjaXNpb25zVG9BZGQuY29udGFpbnMoaGFzaCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIodHJ1ZSwgbV9zdG9yZURlY2lzaW9uc1RvQWRkLmdldChoYXNoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBRdWVyeSB0aGUgZGF0YWJhc2UuCisgICAgYXV0byBldmVyUmVx
dWVzdGVkUXVlcnkgPSBzdGQ6Om1ha2VfdW5pcXVlPEV2ZXJSZXF1ZXN0ZWRRdWVyeT4oRXZlclJl
cXVlc3RlZFF1ZXJ5IHsgaGFzaCwgbmVlZFVuY2FjaGVkUmVhc29uID09IE5lZWRVbmNhY2hlZFJl
YXNvbjo6WWVzLCBjb21wbGV0aW9uSGFuZGxlciB9KTsKICAgICBhdXRvJiBxdWVyeSA9ICpldmVy
UmVxdWVzdGVkUXVlcnk7CiAgICAgbV9hY3RpdmVRdWVyaWVzLmFkZChXVEY6Om1vdmUoZXZlclJl
cXVlc3RlZFF1ZXJ5KSk7Ci0gICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5n
ZXQoKSwgW3RoaXMsICZxdWVyeV0geworICAgIGRpc3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElP
UXVldWUuZ2V0KCksIFt0aGlzLCB3YXNBbHJlYWR5UmVxdWVzdGVkLCAmcXVlcnldICgpIG11dGFi
bGUgewogICAgICAgICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291
bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7Ci0gICAgICAgIGJvb2wgd2FzQWxyZWFkeVJlcXVlc3Rl
ZCA9IGZhbHNlOwogICAgICAgICBPcHRpb25hbDxOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb24+
IHN0b3JlRGVjaXNpb247CiAgICAgICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKSB7Ci0gICAg
ICAgICAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIEFT
Q0lJTGl0ZXJhbCgiU0VMRUNUIEFscmVhZHlSZXF1ZXN0ZWQuaGFzaCwgcmVhc29uIEZST00gQWxy
ZWFkeVJlcXVlc3RlZCBMRUZUIE9VVEVSIEpPSU4gVW5jYWNoZWRSZWFzb24gT04gQWxyZWFkeVJl
cXVlc3RlZC5oYXNoPVVuY2FjaGVkUmVhc29uLmhhc2ggV0hFUkUgQWxyZWFkeVJlcXVlc3RlZC5o
YXNoPT8iKSk7Ci0gICAgICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSA9PSBXZWJDb3Jl
OjpTUUxSZXN1bHRPaykgewotICAgICAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBx
dWVyeS5oYXNoKTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSA9PSBXZWJD
b3JlOjpTUUxSZXN1bHRSb3cpIHsKLSAgICAgICAgICAgICAgICAgICAgd2FzQWxyZWFkeVJlcXVl
c3RlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHN0b3JlRGVjaXNpb24gPSBzdGF0ZW1l
bnQuaXNDb2x1bW5OdWxsKDEpID8gTmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uOjpZZXMgOiBz
dGF0aWNfY2FzdDxOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb24+KHN0YXRlbWVudC5nZXRDb2x1
bW5JbnQoMSkpOworICAgICAgICAgICAgaWYgKCF3YXNBbHJlYWR5UmVxdWVzdGVkKSB7CisgICAg
ICAgICAgICAgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNl
LCBBU0NJSUxpdGVyYWwoIlNFTEVDVCBoYXNoIEZST00gQWxyZWFkeVJlcXVlc3RlZCBXSEVSRSBo
YXNoPT8iKSk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgPT0gV2Vi
Q29yZTo6U1FMUmVzdWx0T2spIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRU
ZXh0KDEsIHF1ZXJ5Lmhhc2gpOworICAgICAgICAgICAgICAgICAgICB3YXNBbHJlYWR5UmVxdWVz
dGVkID0gKHN0YXRlbWVudC5zdGVwKCkgPT0gV2ViQ29yZTo6U1FMUmVzdWx0Um93KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAod2FzQWxyZWFkeVJl
cXVlc3RlZCAmJiBxdWVyeS5uZWVkVW5jYWNoZWRSZWFzb24pIHsKKyAgICAgICAgICAgICAgICBX
ZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJh
bCgiU0VMRUNUIHJlYXNvbiBGUk9NIFVuY2FjaGVkUmVhc29uIFdIRVJFIEFscmVhZHlSZXF1ZXN0
ZWQuaGFzaD0/IikpOworICAgICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpID09
IFdlYkNvcmU6OlNRTFJlc3VsdE9rKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudC5i
aW5kVGV4dCgxLCBxdWVyeS5oYXNoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlbWVu
dC5zdGVwKCkgPT0gV2ViQ29yZTo6U1FMUmVzdWx0Um93KQorICAgICAgICAgICAgICAgICAgICAg
ICAgc3RvcmVEZWNpc2lvbiA9IHN0YXRpY19jYXN0PE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lv
bj4oc3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICB9CkBAIC0zNDUsNyArMzgyLDcgQEAgdm9pZCBOZXR3b3JrQ2FjaGVT
dGF0aXN0aWNzOjpjbGVhcigpCiAgICAgfSk7CiB9CiAKLXZvaWQgTmV0d29ya0NhY2hlU3RhdGlz
dGljczo6YWRkSGFzaFRvRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBoYXNoKQordm9pZCBOZXR3b3Jr
Q2FjaGVTdGF0aXN0aWNzOjphZGRIYXNoZXNUb0RhdGFiYXNlKGNvbnN0IEhhc2hTZXQ8U3RyaW5n
PiYgaGFzaGVzKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIEFTU0VS
VChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVz
cygpKTsKQEAgLTM1NSwxMSArMzkyLDMwIEBAIHZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6
YWRkSGFzaFRvRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBoYXNoKQogICAgIGlmIChzdGF0ZW1lbnQu
cHJlcGFyZSgpICE9IFdlYkNvcmU6OlNRTFJlc3VsdE9rKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgaGFzaCk7Ci0gICAgaWYgKCFleGVjdXRlU1FMU3RhdGVt
ZW50KHN0YXRlbWVudCkpCisgICAgZm9yIChhdXRvJiBoYXNoIDogaGFzaGVzKSB7CisgICAgICAg
IHN0YXRlbWVudC5iaW5kVGV4dCgxLCBoYXNoKTsKKyAgICAgICAgaWYgKGV4ZWN1dGVTUUxTdGF0
ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAgICAgICAgICsrbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQ7
CisgICAgICAgIHN0YXRlbWVudC5yZXNldCgpOworICAgIH0KK30KKwordm9pZCBOZXR3b3JrQ2Fj
aGVTdGF0aXN0aWNzOjphZGRTdG9yZURlY2lzaW9uc1RvRGF0YWJhc2UoY29uc3QgSGFzaE1hcDxT
dHJpbmcsIE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbj4mIHN0b3JlRGVjaXNpb25zKQorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVChXZWJDb3JlOjpTUUxp
dGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKyAgICBBU1NF
UlQobV9kYXRhYmFzZS5pc09wZW4oKSk7CisKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQg
c3RhdGVtZW50KG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgiSU5TRVJUIE9SIFJFUExBQ0UgSU5U
TyBVbmNhY2hlZFJlYXNvbiAoaGFzaCwgcmVhc29uKSBWQUxVRVMgKD8sID8pIikpOworICAgIGlm
IChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFdlYkNvcmU6OlNRTFJlc3VsdE9rKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICArK21fYXBwcm94aW1hdGVFbnRyeUNvdW50OworICAgIGZvciAoYXV0byYg
cGFpciA6IHN0b3JlRGVjaXNpb25zKSB7CisgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBw
YWlyLmtleSk7CisgICAgICAgIHN0YXRlbWVudC5iaW5kSW50KDIsIHN0YXRpY19jYXN0PGludD4o
cGFpci52YWx1ZSkpOworICAgICAgICBleGVjdXRlU1FMU3RhdGVtZW50KHN0YXRlbWVudCk7Cisg
ICAgICAgIHN0YXRlbWVudC5yZXNldCgpOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vz
c1Bvb2xDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNz
UG9vbENvY29hLm1tCmluZGV4IDM0ODhkMWM3MDQ0Njc2NTRkMWFlMWY5Nzc3M2RkMGUxNWJmN2Uz
ZWQuLmYwMGE1ZmZiZDIwZjRlMTU5ZmY2Mjg2Y2Q2ZmM0ZDMzYTUyMDZmZWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1t
CkBAIC0xMDcsNyArMTA3LDcgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5l
ZWRlZCgpCiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKICAgICBbcmVnaXN0cmF0aW9uRGlj
dGlvbmFyeSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10gZm9yS2V5Oldl
YktpdE5ldHdvcmtDYWNoZUVuYWJsZWREZWZhdWx0c0tleV07Ci0gICAgW3JlZ2lzdHJhdGlvbkRp
Y3Rpb25hcnkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10gZm9yS2V5Oldl
YktpdE5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZ0VuYWJsZWREZWZhdWx0c0tleV07CisgICAg
W3JlZ2lzdHJhdGlvbkRpY3Rpb25hcnkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9v
bDpZRVNdIGZvcktleTpXZWJLaXROZXR3b3JrQ2FjaGVFZmZpY2FjeUxvZ2dpbmdFbmFibGVkRGVm
YXVsdHNLZXldOwogI2VuZGlmCiAKICAgICBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRl
ZmF1bHRzXSByZWdpc3RlckRlZmF1bHRzOnJlZ2lzdHJhdGlvbkRpY3Rpb25hcnldOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247724</attachid>
            <date>2015-03-02 17:27:17 -0800</date>
            <delta_ts>2015-03-02 18:51:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142186-20150302172700.patch</filename>
            <type>text/plain</type>
            <size>18251</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwODg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNzE5NzhhZjRhYjlkZTM2
MzhlNzUxOTVjOWMyNzdkODFjMWQ2ODM0MS4uMjRmMGExN2VlOTc2ZTljODJmMjBmZWIyZGMyYmU1
NzcwMjhhNTA1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDE1LTAzLTAyICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTmV0d29ya0NhY2hlIGVmZmlj
YWN5IGxvZ2dpbmcgaXMgdXNpbmcgdG9vIG11Y2ggQ1BVCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDIxODYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzE5NjMyMDgwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5ldHdvcmtDYWNoZSBlZmZpY2FjeSBsb2dnaW5nIHdhcyB1c2luZyB0b28gbXVjaCBDUFUg
bW9zdGx5IGR1ZSB0bworICAgICAgICBkYXRhYmFzZSB3cml0ZXMuIExvZ2dpbmcgd2FzIHVzaW5n
IH4xMS4zJSBvZiB0aGUgTmV0d29ya1Byb2Nlc3MnCisgICAgICAgIENQVSB1c2FnZSAofjkuMiUg
Zm9yIHdyaXRlcyAvIH4xLjMlIGZvciByZWFkcykuCisKKyAgICAgICAgVGhpcyBwYXRjaCBidWZm
ZXJzIHdyaXRlcyByZXF1ZXN0cyBpbiBtZW1vcnkgYW5kIG9ubHkgd3JpdGVzIHRoZW0KKyAgICAg
ICAgdG8gZGlzayBldmVyeSAxMCBzZWNvbmRzLiBXZSBhcmUgdGh1cyB3cml0aW5nIHRvIHRoaXMg
bGVzcyBmcmVxdWVudGx5CisgICAgICAgIGFuZCB3cml0aW5nIG1vcmUgYXQgb25jZSwgaW4gYSBz
aW5nbGUgU1FMIHRyYW5zYWN0aW9uLiBBZnRlciB0aGlzCisgICAgICAgIGNoYW5nZSwgZWZmaWNh
Y3kgbG9nZ2luZyBvbmx5IGFjY291bnRzIGZvciB+My41JSBvZiB0aGUgTmV0d29ya1Byb2Nlc3Mn
CisgICAgICAgIENQVSBhY3Rpdml0eSAoMS41JSBmb3Igd3JpdGVzIC8gMS4yJSBmb3IgcmVhZHMp
LgorCisgICAgICAgIE5vdyB0aGF0IENQVSB1c2FnZSBpcyBtb3JlIGFjY2VwdGFibGUsIHRoaXMg
cGF0Y2ggcmUtZW5hYmxlcyB0aGUKKyAgICAgICAgbmV0d29yayBjYWNoZSBlZmZpY2ljeSBsb2dn
aW5nLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlz
dGljcy5oOgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rh
dGlzdGljc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpleGVjdXRlU1FMU3RhdGVtZW50KToK
KyAgICAgICAgQ2FsbCBzdGVwKCkgaW5zdGVhZCBvZiBleGVjdXRlQ29tbWFuZCgpIGJlY2F1c2U6
CisgICAgICAgIC0gVGhlIGlucHV0IHN0YXRlbWVudCBpcyBhbHJlYWR5IHByZXBhcmVkLgorICAg
ICAgICAtIHN0ZXAoKSBkb2VzIG5vdCBmaW5hbGl6ZSgpIHRoZSBzdGF0ZW1lbnQgYW5kIHRodXMg
d2UgY2FsbGVyIGNhbgorICAgICAgICAgIHJldXNlIGl0IGFmdGVyIGNhbGxpbmcgcmVzZXQoKS4K
KworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpOZXR3b3JrQ2FjaGVT
dGF0aXN0aWNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlU3RhdGlzdGljczo6Ym9v
dHN0cmFwRnJvbU5ldHdvcmtDYWNoZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0
YXRpc3RpY3M6OnJlY29yZE5vdENhY2hpbmdSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZVN0YXRpc3RpY3M6OnJlY29yZE5vdFVzaW5nQ2FjaGVGb3JSZXF1ZXN0KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlU3RhdGlzdGljczo6cmVjb3JkUmV0cmlldmFsRmFp
bHVyZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6Om1hcmtBc1Jl
cXVlc3RlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OndyaXRl
VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnF1
ZXJ5V2FzRXZlclJlcXVlc3RlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRp
c3RpY3M6OmFkZEhhc2hlc1RvRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGVTdGF0aXN0aWNzOjphZGRTdG9yZURlY2lzaW9uc1RvRGF0YWJhc2UpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjphZGRIYXNoVG9EYXRhYmFzZSk6IERlbGV0ZWQu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbToKKyAg
ICAgICAgKFdlYktpdDo6cmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCk6CisgICAgICAgIFJl
LWVuYWJsZSB0aGUgbmV0d29yayBjYWNoZSBlZmZpY2FjeSBsb2dnaW5nLgorCiAyMDE1LTAzLTAx
ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2Ug
Y2xpcC1wYXRoIHdvcmsgb24gPHZpZGVvPiwgPGNhbnZhcz4gZXRjLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5o
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlz
dGljcy5oCmluZGV4IGY5Yzc4MjViOWM2NWZhNzViZGI2MzQ1MTcyMGI2ODdiZTdmMzQzMzcuLmMw
ODZhZmYzNmNjZDE1NmFiZDdkZmFhOWU5YmI2OGU4M2IyZDEzM2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVLZXkuaCIK
ICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTdG9yYWdlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9TUUxp
dGVEYXRhYmFzZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwpAQCAtNTcsMTQgKzU4LDE4IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBib290c3RyYXBGcm9tTmV0d29ya0NhY2hlKGNvbnN0IFN0cmluZyYgbmV0
d29ya0NhY2hlUGF0aCk7CiAgICAgdm9pZCBzaHJpbmtJZk5lZWRlZCgpOwogCi0gICAgdm9pZCBh
ZGRIYXNoVG9EYXRhYmFzZShjb25zdCBTdHJpbmcmIGhhc2gpOworICAgIHZvaWQgYWRkSGFzaGVz
VG9EYXRhYmFzZShjb25zdCBIYXNoU2V0PFN0cmluZz4mIGhhc2hlcyk7CisgICAgdm9pZCBhZGRT
dG9yZURlY2lzaW9uc1RvRGF0YWJhc2UoY29uc3QgSGFzaE1hcDxTdHJpbmcsIE5ldHdvcmtDYWNo
ZTo6U3RvcmVEZWNpc2lvbj4mKTsKKyAgICB2b2lkIHdyaXRlVGltZXJGaXJlZCgpOwogCiAgICAg
dHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wgd2FzRXZlclJlcXVlc3RlZCwgY29uc3Qg
T3B0aW9uYWw8TmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uPiYpPiBSZXF1ZXN0ZWRDb21wbGV0
aW9uSGFuZGxlcjsKLSAgICB2b2lkIHF1ZXJ5V2FzRXZlclJlcXVlc3RlZChjb25zdCBTdHJpbmcm
LCBjb25zdCBSZXF1ZXN0ZWRDb21wbGV0aW9uSGFuZGxlciYpOworICAgIGVudW0gY2xhc3MgTmVl
ZFVuY2FjaGVkUmVhc29uIHsgTm8sIFllcyB9OworICAgIHZvaWQgcXVlcnlXYXNFdmVyUmVxdWVz
dGVkKGNvbnN0IFN0cmluZyYsIE5lZWRVbmNhY2hlZFJlYXNvbiwgY29uc3QgUmVxdWVzdGVkQ29t
cGxldGlvbkhhbmRsZXImKTsKICAgICB2b2lkIG1hcmtBc1JlcXVlc3RlZChjb25zdCBTdHJpbmcm
IGhhc2gpOwogCiAgICAgc3RydWN0IEV2ZXJSZXF1ZXN0ZWRRdWVyeSB7CiAgICAgICAgIFN0cmlu
ZyBoYXNoOworICAgICAgICBib29sIG5lZWRVbmNhY2hlZFJlYXNvbjsKICAgICAgICAgUmVxdWVz
dGVkQ29tcGxldGlvbkhhbmRsZXIgY29tcGxldGlvbkhhbmRsZXI7CiAgICAgfTsKIApAQCAtNzUs
NiArODAsOSBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgbXV0YWJsZSBIYXNoU2V0PHN0ZDo6dW5p
cXVlX3B0cjxjb25zdCBFdmVyUmVxdWVzdGVkUXVlcnk+PiBtX2FjdGl2ZVF1ZXJpZXM7CiAgICAg
V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKKyAgICBIYXNoU2V0PFN0cmluZz4g
bV9oYXNoZXNUb0FkZDsKKyAgICBIYXNoTWFwPFN0cmluZywgTmV0d29ya0NhY2hlOjpTdG9yZURl
Y2lzaW9uPiBtX3N0b3JlRGVjaXNpb25zVG9BZGQ7CisgICAgV2ViQ29yZTo6VGltZXIgbV93cml0
ZVRpbWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzQ29jb2EubW0KaW5kZXggZTc1NzNhY2RhZWI1OGExZDljYzk4YjFjNzJhNTk3MzQ2ZWM2
Njk4NS4uNWIwYzRmZTE4NDdmZDY1YmIxNmM5YWRhNmJiNjMwMWFmYTA4NWQ3MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlz
dGljc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZVN0YXRpc3RpY3NDb2NvYS5tbQpAQCAtNDMsNiArNDMsNyBAQAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBuZXR3b3JrQ2FjaGVTdGF0aXN0aWNzRGF0
YWJhc2VOYW1lID0gIldlYktpdENhY2hlU3RhdGlzdGljcy5kYiI7CitzdGF0aWMgY29uc3QgZG91
YmxlIG1pbldyaXRlSW50ZXJ2YWxTZWNvbmRzID0gMTA7CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVT
UUxDb21tYW5kKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSwgY29uc3QgU3RyaW5n
JiBzcWwpCiB7CkBAIC01MSw4ICs1MiwxMCBAQCBzdGF0aWMgYm9vbCBleGVjdXRlU1FMQ29tbWFu
ZChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgcwogICAg
IEFTU0VSVChkYXRhYmFzZS5pc09wZW4oKSk7CiAKICAgICBib29sIHJlc3VsdCA9IGRhdGFiYXNl
LmV4ZWN1dGVDb21tYW5kKHNxbCk7Ci0gICAgaWYgKCFyZXN1bHQpCisgICAgaWYgKCFyZXN1bHQp
IHsKICAgICAgICAgTE9HX0VSUk9SKCJOZXR3b3JrIGNhY2hlIHN0YXRpc3RpY3M6IGZhaWxlZCB0
byBleGVjdXRlIHN0YXRlbWVudCBcIiVzXCIgZXJyb3IgXCIlc1wiIiwgc3FsLnV0ZjgoKS5kYXRh
KCksIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTYzLDExICs2NiwxMyBAQCBz
dGF0aWMgYm9vbCBleGVjdXRlU1FMU3RhdGVtZW50KFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCYg
c3RhdGVtZW50KQogICAgIEFTU0VSVChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhh
c1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKICAgICBBU1NFUlQoc3RhdGVtZW50LmRhdGFiYXNl
KCkuaXNPcGVuKCkpOwogCi0gICAgYm9vbCByZXN1bHQgPSBzdGF0ZW1lbnQuZXhlY3V0ZUNvbW1h
bmQoKTsKLSAgICBpZiAoIXJlc3VsdCkKKyAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBXZWJD
b3JlOjpTUUxSZXN1bHREb25lKSB7CiAgICAgICAgIExPR19FUlJPUigiTmV0d29yayBjYWNoZSBz
dGF0aXN0aWNzOiBmYWlsZWQgdG8gZXhlY3V0ZSBzdGF0ZW1lbnQgXCIlc1wiIGVycm9yIFwiJXNc
IiIsIHN0YXRlbWVudC5xdWVyeSgpLnV0ZjgoKS5kYXRhKCksIHN0YXRlbWVudC5kYXRhYmFzZSgp
Lmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiB0
cnVlOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RhdGlzdGljcz4gTmV0d29y
a0NhY2hlU3RhdGlzdGljczo6b3Blbihjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCkKQEAgLTgwLDYg
Kzg1LDcgQEAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M+IE5ldHdvcmtD
YWNoZVN0YXRpc3RpY3M6Om9wZW4oY29uc3QgU3RyaW4KIAogTmV0d29ya0NhY2hlU3RhdGlzdGlj
czo6TmV0d29ya0NhY2hlU3RhdGlzdGljcyhjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCkKICAg
ICA6IG1fYmFja2dyb3VuZElPUXVldWUoYWRvcHREaXNwYXRjaChkaXNwYXRjaF9xdWV1ZV9jcmVh
dGUoImNvbS5hcHBsZS5XZWJLaXQuQ2FjaGUuU3RhdGlzdGljcy5CYWNrZ3JvdW5kIiwgRElTUEFU
Q0hfUVVFVUVfU0VSSUFMKSkpCisgICAgLCBtX3dyaXRlVGltZXIoKnRoaXMsICZOZXR3b3JrQ2Fj
aGVTdGF0aXN0aWNzOjp3cml0ZVRpbWVyRmlyZWQpCiB7CiAgICAgZGlzcGF0Y2hfc2V0X3Rhcmdl
dF9xdWV1ZShtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1
ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0JBQ0tHUk9VTkQsIDApKTsKIApAQCAtMTE1LDYg
KzEyMSw3IEBAIHZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6aW5pdGlhbGl6ZShjb25zdCBT
dHJpbmcmIGRhdGFiYXNlUGF0aCkKICAgICAgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCBBU0NJSUxpdGVyYWwoIlNFTEVDVCBjb3VudCgqKSBGUk9NIEFs
cmVhZHlSZXF1ZXN0ZWQiKSk7CiAgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZUFuZFN0ZXAo
KSAhPSBXZWJDb3JlOjpTUUxSZXN1bHRSb3cpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiTmV0
d29yayBjYWNoZSBzdGF0aXN0aWNzOiBGYWlsZWQgdG8gY291bnQgdGhlIG51bWJlciBvZiByb3dz
IGluIEFscmVhZHlSZXF1ZXN0ZWQgdGFibGUiKTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTE0MSwxNCArMTQ4
LDE4IEBAIHZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6Ym9vdHN0cmFwRnJvbU5ldHdvcmtD
YWNoZShjb25zdCBTdHJpbmcmIG5ldHdvcmtDYWNoCiAKICAgICBMT0coTmV0d29ya0NhY2hlLCAi
KE5ldHdvcmtQcm9jZXNzKSBCb290c3RyYXBwaW5nIHRoZSBuZXR3b3JrIGNhY2hlIHN0YXRpc3Rp
Y3MgZGF0YWJhc2UgZnJvbSB0aGUgbmV0d29yayBjYWNoZS4uLiIpOwogCisgICAgSGFzaFNldDxT
dHJpbmc+IGhhc2hlczsKKyAgICB0cmF2ZXJzZUNhY2hlRmlsZXMobmV0d29ya0NhY2hlUGF0aCwg
WyZoYXNoZXNdKGNvbnN0IFN0cmluZyYgaGFzaCwgY29uc3QgU3RyaW5nJikgeworICAgICAgICBo
YXNoZXMuYWRkKGhhc2gpOworICAgIH0pOworCiAgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rp
b25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOwotICAgIFdlYkNvcmU6
OlNRTGl0ZVRyYW5zYWN0aW9uIGJvb3RzdHJhcFRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwotICAg
IGJvb3RzdHJhcFRyYW5zYWN0aW9uLmJlZ2luKCk7CisgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNh
Y3Rpb24gd3JpdGVUcmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB3cml0ZVRyYW5zYWN0aW9u
LmJlZ2luKCk7CiAKLSAgICB0cmF2ZXJzZUNhY2hlRmlsZXMobmV0d29ya0NhY2hlUGF0aCwgW3Ro
aXNdKGNvbnN0IFN0cmluZyYgaGFzaCwgY29uc3QgU3RyaW5nJikgewotICAgICAgICBhZGRIYXNo
VG9EYXRhYmFzZShoYXNoKTsKLSAgICB9KTsKLSAgICBib290c3RyYXBUcmFuc2FjdGlvbi5jb21t
aXQoKTsKKyAgICBhZGRIYXNoZXNUb0RhdGFiYXNlKGhhc2hlcyk7CisKKyAgICB3cml0ZVRyYW5z
YWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnNocmlu
a0lmTmVlZGVkKCkKQEAgLTE3NCwxOCArMTg1LDkgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0
aWNzOjpyZWNvcmROb3RDYWNoaW5nUmVzcG9uc2UoY29uc3QgTmV0d29ya0NhY2hlS2V5JiBrZXkK
IHsKICAgICBBU1NFUlQoc3RvcmVEZWNpc2lvbiAhPSBOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNp
b246Olllcyk7CiAKLSAgICBTdHJpbmdDYXB0dXJlIGhhc2hDYXB0dXJlKGtleS5oYXNoQXNTdHJp
bmcoKSk7Ci0gICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgW3Ro
aXMsIGhhc2hDYXB0dXJlLCBzdG9yZURlY2lzaW9uXSB7Ci0gICAgICAgIGlmICghbV9kYXRhYmFz
ZS5pc09wZW4oKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBBU0NJSUxpdGVyYWwoIklOU0VSVCBPUiBS
RVBMQUNFIElOVE8gVW5jYWNoZWRSZWFzb24gKGhhc2gsIHJlYXNvbikgVkFMVUVTICg/LCA/KSIp
KTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gV2ViQ29yZTo6U1FMUmVzdWx0
T2spCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEs
IGhhc2hDYXB0dXJlLnN0cmluZygpKTsKLSAgICAgICAgc3RhdGVtZW50LmJpbmRJbnQoMiwgc3Rh
dGljX2Nhc3Q8aW50PihzdG9yZURlY2lzaW9uKSk7Ci0gICAgICAgIGV4ZWN1dGVTUUxTdGF0ZW1l
bnQoc3RhdGVtZW50KTsKLSAgICB9KTsKKyAgICBtX3N0b3JlRGVjaXNpb25zVG9BZGQuYWRkKGtl
eS5oYXNoQXNTdHJpbmcoKSwgc3RvcmVEZWNpc2lvbik7CisgICAgaWYgKCFtX3dyaXRlVGltZXIu
aXNBY3RpdmUoKSkKKyAgICAgICAgbV93cml0ZVRpbWVyLnN0YXJ0T25lU2hvdChtaW5Xcml0ZUlu
dGVydmFsU2Vjb25kcyk7CiB9CiAKIHN0YXRpYyBTdHJpbmcgcmV0cmlldmVEZWNpc2lvblRvRGlh
Z25vc3RpY0tleShOZXR3b3JrQ2FjaGU6OlJldHJpZXZlRGVjaXNpb24gcmV0cmlldmVEZWNpc2lv
bikKQEAgLTIxMiw3ICsyMTQsNyBAQCB2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnJlY29y
ZE5vdFVzaW5nQ2FjaGVGb3JSZXF1ZXN0KHVpbnQ2NF90IHdlYlBhZ2VJRCwgYwogCiAgICAgU3Ry
aW5nIGhhc2ggPSBrZXkuaGFzaEFzU3RyaW5nKCk7CiAgICAgV2ViQ29yZTo6VVJMIHJlcXVlc3RV
UkwgPSByZXF1ZXN0LnVybCgpOwotICAgIHF1ZXJ5V2FzRXZlclJlcXVlc3RlZChoYXNoLCBbdGhp
cywgaGFzaCwgcmVxdWVzdFVSTCwgd2ViUGFnZUlELCByZXRyaWV2ZURlY2lzaW9uXShib29sIHdh
c0V2ZXJSZXF1ZXN0ZWQsIGNvbnN0IE9wdGlvbmFsPE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lv
bj4mKSB7CisgICAgcXVlcnlXYXNFdmVyUmVxdWVzdGVkKGhhc2gsIE5lZWRVbmNhY2hlZFJlYXNv
bjo6Tm8sIFt0aGlzLCBoYXNoLCByZXF1ZXN0VVJMLCB3ZWJQYWdlSUQsIHJldHJpZXZlRGVjaXNp
b25dKGJvb2wgd2FzRXZlclJlcXVlc3RlZCwgY29uc3QgT3B0aW9uYWw8TmV0d29ya0NhY2hlOjpT
dG9yZURlY2lzaW9uPiYpIHsKICAgICAgICAgaWYgKHdhc0V2ZXJSZXF1ZXN0ZWQpIHsKICAgICAg
ICAgICAgIFN0cmluZyBkaWFnbm9zdGljS2V5ID0gcmV0cmlldmVEZWNpc2lvblRvRGlhZ25vc3Rp
Y0tleShyZXRyaWV2ZURlY2lzaW9uKTsKICAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIo
TmV0d29ya1Byb2Nlc3MpIHdlYlBhZ2VJRCAlbGx1OiAlcyB3YXMgcHJldmlvdXNseSByZXF1ZXN0
ZWQgYnV0IHdlIGFyZSBub3QgdXNpbmcgdGhlIGNhY2hlLCByZWFzb246ICVzIiwgd2ViUGFnZUlE
LCByZXF1ZXN0VVJMLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBkaWFnbm9zdGljS2V5LnV0Zjgo
KS5kYXRhKCkpOwpAQCAtMjQ2LDcgKzI0OCw3IEBAIHZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGlj
czo6cmVjb3JkUmV0cmlldmFsRmFpbHVyZSh1aW50NjRfdCB3ZWJQYWdlSUQsIGNvbnN0IE5lCiB7
CiAgICAgU3RyaW5nIGhhc2ggPSBrZXkuaGFzaEFzU3RyaW5nKCk7CiAgICAgV2ViQ29yZTo6VVJM
IHJlcXVlc3RVUkwgPSByZXF1ZXN0LnVybCgpOwotICAgIHF1ZXJ5V2FzRXZlclJlcXVlc3RlZCho
YXNoLCBbdGhpcywgaGFzaCwgcmVxdWVzdFVSTCwgd2ViUGFnZUlEXShib29sIHdhc1ByZXZpb3Vz
bHlSZXF1ZXN0ZWQsIGNvbnN0IE9wdGlvbmFsPE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbj4m
IHN0b3JlRGVjaXNpb24pIHsKKyAgICBxdWVyeVdhc0V2ZXJSZXF1ZXN0ZWQoaGFzaCwgTmVlZFVu
Y2FjaGVkUmVhc29uOjpZZXMsIFt0aGlzLCBoYXNoLCByZXF1ZXN0VVJMLCB3ZWJQYWdlSURdKGJv
b2wgd2FzUHJldmlvdXNseVJlcXVlc3RlZCwgY29uc3QgT3B0aW9uYWw8TmV0d29ya0NhY2hlOjpT
dG9yZURlY2lzaW9uPiYgc3RvcmVEZWNpc2lvbikgewogICAgICAgICBpZiAod2FzUHJldmlvdXNs
eVJlcXVlc3RlZCkgewogICAgICAgICAgICAgU3RyaW5nIGRpYWdub3N0aWNLZXkgPSBzdG9yZURl
Y2lzaW9uVG9EaWFnbm9zdGljS2V5KHN0b3JlRGVjaXNpb24udmFsdWUoKSk7CiAgICAgICAgICAg
ICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSB3ZWJQYWdlSUQgJWxsdTogJXMg
d2FzIHByZXZpb3VzbHkgcmVxdWVzdCBidXQgaXMgbm90IGluIHRoZSBjYWNoZSwgcmVhc29uOiAl
cyIsIHdlYlBhZ2VJRCwgcmVxdWVzdFVSTC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgZGlhZ25v
c3RpY0tleS51dGY4KCkuZGF0YSgpKTsKQEAgLTI5MCwzNSArMjkyLDc3IEBAIHZvaWQgTmV0d29y
a0NhY2hlU3RhdGlzdGljczo6bWFya0FzUmVxdWVzdGVkKGNvbnN0IFN0cmluZyYgaGFzaCkKIHsK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgU3RyaW5nQ2FwdHVyZSBoYXNo
Q2FwdHVyZShoYXNoKTsKLSAgICBkaXNwYXRjaF9hc3luYyhtX2JhY2tncm91bmRJT1F1ZXVlLmdl
dCgpLCBbdGhpcywgaGFzaENhcHR1cmVdIHsKLSAgICAgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNh
Y3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOwotICAgICAgICBp
ZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgICAgIGFkZEhhc2hUb0RhdGFiYXNlKGhh
c2hDYXB0dXJlLnN0cmluZygpKTsKLSAgICB9KTsKKyAgICBtX2hhc2hlc1RvQWRkLmFkZChoYXNo
KTsKKyAgICBpZiAoIW1fd3JpdGVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3dyaXRlVGlt
ZXIuc3RhcnRPbmVTaG90KG1pbldyaXRlSW50ZXJ2YWxTZWNvbmRzKTsKK30KKwordm9pZCBOZXR3
b3JrQ2FjaGVTdGF0aXN0aWNzOjp3cml0ZVRpbWVyRmlyZWQoKQoreworICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICBIYXNoU2V0PFN0cmluZz4gaGFzaGVzVG9BZGQ7CisgICAg
aGFzaGVzVG9BZGQuc3dhcChtX2hhc2hlc1RvQWRkKTsKKyAgICBIYXNoTWFwPFN0cmluZywgTmV0
d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uPiBzdG9yZURlY2lzaW9uc1RvQWRkOworICAgIHN0b3Jl
RGVjaXNpb25zVG9BZGQuc3dhcChtX3N0b3JlRGVjaXNpb25zVG9BZGQpOwogCiAgICAgc2hyaW5r
SWZOZWVkZWQoKTsKKworICAgIGRpc3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0
KCksIFt0aGlzLCBoYXNoZXNUb0FkZCwgc3RvcmVEZWNpc2lvbnNUb0FkZF0geworICAgICAgICBp
ZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
V2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rp
b25Db3VudGVyOworICAgICAgICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbiB3cml0ZVRyYW5z
YWN0aW9uKG1fZGF0YWJhc2UpOworICAgICAgICB3cml0ZVRyYW5zYWN0aW9uLmJlZ2luKCk7CisK
KyAgICAgICAgYWRkSGFzaGVzVG9EYXRhYmFzZShoYXNoZXNUb0FkZCk7CisgICAgICAgIGFkZFN0
b3JlRGVjaXNpb25zVG9EYXRhYmFzZShzdG9yZURlY2lzaW9uc1RvQWRkKTsKKworICAgICAgICB3
cml0ZVRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIH0pOwogfQogCi12b2lkIE5ldHdvcmtDYWNo
ZVN0YXRpc3RpY3M6OnF1ZXJ5V2FzRXZlclJlcXVlc3RlZChjb25zdCBTdHJpbmcmIGhhc2gsIGNv
bnN0IFJlcXVlc3RlZENvbXBsZXRpb25IYW5kbGVyJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQg
TmV0d29ya0NhY2hlU3RhdGlzdGljczo6cXVlcnlXYXNFdmVyUmVxdWVzdGVkKGNvbnN0IFN0cmlu
ZyYgaGFzaCwgTmVlZFVuY2FjaGVkUmVhc29uIG5lZWRVbmNhY2hlZFJlYXNvbiwgY29uc3QgUmVx
dWVzdGVkQ29tcGxldGlvbkhhbmRsZXImIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBhdXRvIGV2ZXJSZXF1ZXN0ZWRRdWVyeSA9IHN0
ZDo6bWFrZV91bmlxdWU8RXZlclJlcXVlc3RlZFF1ZXJ5PihFdmVyUmVxdWVzdGVkUXVlcnkgeyBo
YXNoLCBjb21wbGV0aW9uSGFuZGxlciB9KTsKKyAgICAvLyBRdWVyeSBwZW5kaW5nIHdyaXRlcyBm
aXJzdC4KKyAgICBib29sIHdhc0FscmVhZHlSZXF1ZXN0ZWQgPSBtX2hhc2hlc1RvQWRkLmNvbnRh
aW5zKGhhc2gpOworICAgIGlmICh3YXNBbHJlYWR5UmVxdWVzdGVkICYmIG5lZWRVbmNhY2hlZFJl
YXNvbiA9PSBOZWVkVW5jYWNoZWRSZWFzb246Ok5vKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKHRydWUsIE51bGxvcHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChuZWVk
VW5jYWNoZWRSZWFzb24gPT0gTmVlZFVuY2FjaGVkUmVhc29uOjpZZXMgJiYgbV9zdG9yZURlY2lz
aW9uc1RvQWRkLmNvbnRhaW5zKGhhc2gpKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHRy
dWUsIG1fc3RvcmVEZWNpc2lvbnNUb0FkZC5nZXQoaGFzaCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gUXVlcnkgdGhlIGRhdGFiYXNlLgorICAgIGF1dG8gZXZlclJlcXVlc3Rl
ZFF1ZXJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxFdmVyUmVxdWVzdGVkUXVlcnk+KEV2ZXJSZXF1ZXN0
ZWRRdWVyeSB7IGhhc2gsIG5lZWRVbmNhY2hlZFJlYXNvbiA9PSBOZWVkVW5jYWNoZWRSZWFzb246
OlllcywgY29tcGxldGlvbkhhbmRsZXIgfSk7CiAgICAgYXV0byYgcXVlcnkgPSAqZXZlclJlcXVl
c3RlZFF1ZXJ5OwogICAgIG1fYWN0aXZlUXVlcmllcy5hZGQoV1RGOjptb3ZlKGV2ZXJSZXF1ZXN0
ZWRRdWVyeSkpOwotICAgIGRpc3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCks
IFt0aGlzLCAmcXVlcnldIHsKKyAgICBkaXNwYXRjaF9hc3luYyhtX2JhY2tncm91bmRJT1F1ZXVl
LmdldCgpLCBbdGhpcywgd2FzQWxyZWFkeVJlcXVlc3RlZCwgJnF1ZXJ5XSAoKSBtdXRhYmxlIHsK
ICAgICAgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIg
dHJhbnNhY3Rpb25Db3VudGVyOwotICAgICAgICBib29sIHdhc0FscmVhZHlSZXF1ZXN0ZWQgPSBm
YWxzZTsKICAgICAgICAgT3B0aW9uYWw8TmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uPiBzdG9y
ZURlY2lzaW9uOwogICAgICAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkgewotICAgICAgICAg
ICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBBU0NJSUxp
dGVyYWwoIlNFTEVDVCBBbHJlYWR5UmVxdWVzdGVkLmhhc2gsIHJlYXNvbiBGUk9NIEFscmVhZHlS
ZXF1ZXN0ZWQgTEVGVCBPVVRFUiBKT0lOIFVuY2FjaGVkUmVhc29uIE9OIEFscmVhZHlSZXF1ZXN0
ZWQuaGFzaD1VbmNhY2hlZFJlYXNvbi5oYXNoIFdIRVJFIEFscmVhZHlSZXF1ZXN0ZWQuaGFzaD0/
IikpOwotICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgPT0gV2ViQ29yZTo6U1FM
UmVzdWx0T2spIHsKLSAgICAgICAgICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgcXVlcnku
aGFzaCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgPT0gV2ViQ29yZTo6
U1FMUmVzdWx0Um93KSB7Ci0gICAgICAgICAgICAgICAgICAgIHdhc0FscmVhZHlSZXF1ZXN0ZWQg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBzdG9yZURlY2lzaW9uID0gc3RhdGVtZW50Lmlz
Q29sdW1uTnVsbCgxKSA/IE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbjo6WWVzIDogc3RhdGlj
X2Nhc3Q8TmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uPihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50
KDEpKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXdhc0FscmVhZHlSZXF1
ZXN0ZWQpIHsKKyAgICAgICAgICAgICAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgiU0VMRUNUIGhhc2ggRlJPTSBBbHJlYWR5UmVx
dWVzdGVkIFdIRVJFIGhhc2g9PyIpKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGVtZW50LnBy
ZXBhcmUoKSA9PSBXZWJDb3JlOjpTUUxSZXN1bHRPaykgeworICAgICAgICAgICAgICAgICAgICBz
dGF0ZW1lbnQuYmluZFRleHQoMSwgcXVlcnkuaGFzaCk7CisgICAgICAgICAgICAgICAgICAgIHdh
c0FscmVhZHlSZXF1ZXN0ZWQgPSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBXZWJDb3JlOjpTUUxSZXN1
bHRSb3cpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh3YXNBbHJl
YWR5UmVxdWVzdGVkICYmIHF1ZXJ5Lm5lZWRVbmNhY2hlZFJlYXNvbikgeworICAgICAgICAgICAg
ICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgQVNDSUlM
aXRlcmFsKCJTRUxFQ1QgcmVhc29uIEZST00gVW5jYWNoZWRSZWFzb24gV0hFUkUgaGFzaD0/Iikp
OworICAgICAgICAgICAgICAgIHN0b3JlRGVjaXNpb24gPSBOZXR3b3JrQ2FjaGU6OlN0b3JlRGVj
aXNpb246OlllczsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSA9PSBX
ZWJDb3JlOjpTUUxSZXN1bHRPaykgeworICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQuYmlu
ZFRleHQoMSwgcXVlcnkuaGFzaCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQu
c3RlcCgpID09IFdlYkNvcmU6OlNRTFJlc3VsdFJvdykKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0b3JlRGVjaXNpb24gPSBzdGF0aWNfY2FzdDxOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb24+
KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
LCBbdGhpcywgJnF1ZXJ5LCB3YXNBbHJlYWR5UmVxdWVzdGVkLCBzdG9yZURlY2lzaW9uXSB7CkBA
IC0zNDUsMjEgKzM4OSw0NCBAQCB2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OmNsZWFyKCkK
ICAgICB9KTsKIH0KIAotdm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjphZGRIYXNoVG9EYXRh
YmFzZShjb25zdCBTdHJpbmcmIGhhc2gpCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OmFk
ZEhhc2hlc1RvRGF0YWJhc2UoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBoYXNoZXMpCiB7CiAgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAgICAgQVNTRVJUKFdlYkNvcmU6OlNRTGl0ZURh
dGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwogICAgIEFTU0VSVCht
X2RhdGFiYXNlLmlzT3BlbigpKTsKIAogICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBzdGF0
ZW1lbnQobV9kYXRhYmFzZSwgQVNDSUlMaXRlcmFsKCJJTlNFUlQgT1IgSUdOT1JFIElOVE8gQWxy
ZWFkeVJlcXVlc3RlZCAoaGFzaCkgVkFMVUVTICg/KSIpKTsKLSAgICBpZiAoc3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBXZWJDb3JlOjpTUUxSZXN1bHRPaykKKyAgICBpZiAoc3RhdGVtZW50LnByZXBh
cmUoKSAhPSBXZWJDb3JlOjpTUUxSZXN1bHRPaykgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgx
LCBoYXNoKTsKLSAgICBpZiAoIWV4ZWN1dGVTUUxTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICBm
b3IgKGF1dG8mIGhhc2ggOiBoYXNoZXMpIHsKKyAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEs
IGhhc2gpOworICAgICAgICBpZiAoZXhlY3V0ZVNRTFN0YXRlbWVudChzdGF0ZW1lbnQpKQorICAg
ICAgICAgICAgKyttX2FwcHJveGltYXRlRW50cnlDb3VudDsKKyAgICAgICAgc3RhdGVtZW50LnJl
c2V0KCk7CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OmFkZFN0b3Jl
RGVjaXNpb25zVG9EYXRhYmFzZShjb25zdCBIYXNoTWFwPFN0cmluZywgTmV0d29ya0NhY2hlOjpT
dG9yZURlY2lzaW9uPiYgc3RvcmVEZWNpc2lvbnMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CisgICAgQVNTRVJUKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFz
VHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworICAgIEFTU0VSVChtX2RhdGFiYXNlLmlzT3Blbigp
KTsKKworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwg
QVNDSUlMaXRlcmFsKCJJTlNFUlQgT1IgUkVQTEFDRSBJTlRPIFVuY2FjaGVkUmVhc29uIChoYXNo
LCByZWFzb24pIFZBTFVFUyAoPywgPykiKSk7CisgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkg
IT0gV2ViQ29yZTo6U1FMUmVzdWx0T2spIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICArK21fYXBwcm94aW1hdGVFbnRyeUNvdW50
OworICAgIGZvciAoYXV0byYgcGFpciA6IHN0b3JlRGVjaXNpb25zKSB7CisgICAgICAgIHN0YXRl
bWVudC5iaW5kVGV4dCgxLCBwYWlyLmtleSk7CisgICAgICAgIHN0YXRlbWVudC5iaW5kSW50KDIs
IHN0YXRpY19jYXN0PGludD4ocGFpci52YWx1ZSkpOworICAgICAgICBleGVjdXRlU1FMU3RhdGVt
ZW50KHN0YXRlbWVudCk7CisgICAgICAgIHN0YXRlbWVudC5yZXNldCgpOworICAgIH0KIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCmluZGV4IDM0ODhkMWM3MDQ0Njc2NTRkMWFl
MWY5Nzc3M2RkMGUxNWJmN2UzZWQuLmYwMGE1ZmZiZDIwZjRlMTU5ZmY2Mjg2Y2Q2ZmM0ZDMzYTUy
MDZmZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9j
ZXNzUG9vbENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQ
cm9jZXNzUG9vbENvY29hLm1tCkBAIC0xMDcsNyArMTA3LDcgQEAgc3RhdGljIHZvaWQgcmVnaXN0
ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpCiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKICAg
ICBbcmVnaXN0cmF0aW9uRGljdGlvbmFyeSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhC
b29sOllFU10gZm9yS2V5OldlYktpdE5ldHdvcmtDYWNoZUVuYWJsZWREZWZhdWx0c0tleV07Ci0g
ICAgW3JlZ2lzdHJhdGlvbkRpY3Rpb25hcnkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRo
Qm9vbDpOT10gZm9yS2V5OldlYktpdE5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZ0VuYWJsZWRE
ZWZhdWx0c0tleV07CisgICAgW3JlZ2lzdHJhdGlvbkRpY3Rpb25hcnkgc2V0T2JqZWN0OltOU051
bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdIGZvcktleTpXZWJLaXROZXR3b3JrQ2FjaGVFZmZpY2Fj
eUxvZ2dpbmdFbmFibGVkRGVmYXVsdHNLZXldOwogI2VuZGlmCiAKICAgICBbW05TVXNlckRlZmF1
bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSByZWdpc3RlckRlZmF1bHRzOnJlZ2lzdHJhdGlvbkRp
Y3Rpb25hcnldOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247732</attachid>
            <date>2015-03-02 18:51:13 -0800</date>
            <delta_ts>2015-03-03 13:34:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142186-20150302185055.patch</filename>
            <type>text/plain</type>
            <size>18292</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwOTEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggY2I5Yzc1ZGRlOWU4OTk4
OGMwMDZkYThiNWQ4OTUwYzdkOWEwMDBlNy4uMTJmN2IxZDkxZWQ2ZWI0MmNlNGIxMDliNGMzNDkw
MDQ0MjZhNTFhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDE1LTAzLTAyICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTmV0d29ya0NhY2hlIGVmZmlj
YWN5IGxvZ2dpbmcgaXMgdXNpbmcgdG9vIG11Y2ggQ1BVCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDIxODYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzE5NjMyMDgwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5ldHdvcmtDYWNoZSBlZmZpY2FjeSBsb2dnaW5nIHdhcyB1c2luZyB0b28gbXVjaCBDUFUg
bW9zdGx5IGR1ZSB0bworICAgICAgICBkYXRhYmFzZSB3cml0ZXMuIExvZ2dpbmcgd2FzIHVzaW5n
IH4xMS4zJSBvZiB0aGUgTmV0d29ya1Byb2Nlc3MnCisgICAgICAgIENQVSB1c2FnZSAofjkuMiUg
Zm9yIHdyaXRlcyAvIH4xLjMlIGZvciByZWFkcykuCisKKyAgICAgICAgVGhpcyBwYXRjaCBidWZm
ZXJzIHdyaXRlcyByZXF1ZXN0cyBpbiBtZW1vcnkgYW5kIG9ubHkgd3JpdGVzIHRoZW0KKyAgICAg
ICAgdG8gZGlzayBldmVyeSAxMCBzZWNvbmRzLiBXZSBhcmUgdGh1cyB3cml0aW5nIHRvIHRoaXMg
bGVzcyBmcmVxdWVudGx5CisgICAgICAgIGFuZCB3cml0aW5nIG1vcmUgYXQgb25jZSwgaW4gYSBz
aW5nbGUgU1FMIHRyYW5zYWN0aW9uLiBBZnRlciB0aGlzCisgICAgICAgIGNoYW5nZSwgZWZmaWNh
Y3kgbG9nZ2luZyBvbmx5IGFjY291bnRzIGZvciB+My41JSBvZiB0aGUgTmV0d29ya1Byb2Nlc3Mn
CisgICAgICAgIENQVSBhY3Rpdml0eSAoMS41JSBmb3Igd3JpdGVzIC8gMS4yJSBmb3IgcmVhZHMp
LgorCisgICAgICAgIE5vdyB0aGF0IENQVSB1c2FnZSBpcyBtb3JlIGFjY2VwdGFibGUsIHRoaXMg
cGF0Y2ggcmUtZW5hYmxlcyB0aGUKKyAgICAgICAgbmV0d29yayBjYWNoZSBlZmZpY2ljeSBsb2dn
aW5nLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlz
dGljcy5oOgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rh
dGlzdGljc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpleGVjdXRlU1FMU3RhdGVtZW50KToK
KyAgICAgICAgQ2FsbCBzdGVwKCkgaW5zdGVhZCBvZiBleGVjdXRlQ29tbWFuZCgpIGJlY2F1c2U6
CisgICAgICAgIC0gVGhlIGlucHV0IHN0YXRlbWVudCBpcyBhbHJlYWR5IHByZXBhcmVkLgorICAg
ICAgICAtIHN0ZXAoKSBkb2VzIG5vdCBmaW5hbGl6ZSgpIHRoZSBzdGF0ZW1lbnQgYW5kIHRodXMg
d2UgY2FsbGVyIGNhbgorICAgICAgICAgIHJldXNlIGl0IGFmdGVyIGNhbGxpbmcgcmVzZXQoKS4K
KworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpOZXR3b3JrQ2FjaGVT
dGF0aXN0aWNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlU3RhdGlzdGljczo6Ym9v
dHN0cmFwRnJvbU5ldHdvcmtDYWNoZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0
YXRpc3RpY3M6OnJlY29yZE5vdENhY2hpbmdSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZVN0YXRpc3RpY3M6OnJlY29yZE5vdFVzaW5nQ2FjaGVGb3JSZXF1ZXN0KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlU3RhdGlzdGljczo6cmVjb3JkUmV0cmlldmFsRmFp
bHVyZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6Om1hcmtBc1Jl
cXVlc3RlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OndyaXRl
VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnF1
ZXJ5V2FzRXZlclJlcXVlc3RlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRp
c3RpY3M6OmFkZEhhc2hlc1RvRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGVTdGF0aXN0aWNzOjphZGRTdG9yZURlY2lzaW9uc1RvRGF0YWJhc2UpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjphZGRIYXNoVG9EYXRhYmFzZSk6IERlbGV0ZWQu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbToKKyAg
ICAgICAgKFdlYktpdDo6cmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCk6CisgICAgICAgIFJl
LWVuYWJsZSB0aGUgbmV0d29yayBjYWNoZSBlZmZpY2FjeSBsb2dnaW5nLgorCiAyMDE1LTAzLTAy
ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBMb3RzIG9mOiBF
UlJPUjogVW5oYW5kbGVkIHdlYiBwcm9jZXNzIG1lc3NhZ2UgV2ViUGFnZUdyb3VwUHJveHk6UmVt
b3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmggYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmgKaW5kZXggZjlj
NzgyNWI5YzY1ZmE3NWJkYjYzNDUxNzIwYjY4N2JlN2YzNDMzNy4uYzA4NmFmZjM2Y2NkMTU2YWJk
N2RmYWE5ZTliYjY4ZTgzYjJkMTMzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaApAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUtleS5oIgogI2luY2x1ZGUgIk5ldHdv
cmtDYWNoZVN0b3JhZ2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBS
ZXNvdXJjZVJlcXVlc3Q7CkBAIC01NywxNCArNTgsMTggQEAgcHJpdmF0ZToKICAgICB2b2lkIGJv
b3RzdHJhcEZyb21OZXR3b3JrQ2FjaGUoY29uc3QgU3RyaW5nJiBuZXR3b3JrQ2FjaGVQYXRoKTsK
ICAgICB2b2lkIHNocmlua0lmTmVlZGVkKCk7CiAKLSAgICB2b2lkIGFkZEhhc2hUb0RhdGFiYXNl
KGNvbnN0IFN0cmluZyYgaGFzaCk7CisgICAgdm9pZCBhZGRIYXNoZXNUb0RhdGFiYXNlKGNvbnN0
IEhhc2hTZXQ8U3RyaW5nPiYgaGFzaGVzKTsKKyAgICB2b2lkIGFkZFN0b3JlRGVjaXNpb25zVG9E
YXRhYmFzZShjb25zdCBIYXNoTWFwPFN0cmluZywgTmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9u
PiYpOworICAgIHZvaWQgd3JpdGVUaW1lckZpcmVkKCk7CiAKICAgICB0eXBlZGVmIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoYm9vbCB3YXNFdmVyUmVxdWVzdGVkLCBjb25zdCBPcHRpb25hbDxOZXR3b3Jr
Q2FjaGU6OlN0b3JlRGVjaXNpb24+Jik+IFJlcXVlc3RlZENvbXBsZXRpb25IYW5kbGVyOwotICAg
IHZvaWQgcXVlcnlXYXNFdmVyUmVxdWVzdGVkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJlcXVlc3Rl
ZENvbXBsZXRpb25IYW5kbGVyJik7CisgICAgZW51bSBjbGFzcyBOZWVkVW5jYWNoZWRSZWFzb24g
eyBObywgWWVzIH07CisgICAgdm9pZCBxdWVyeVdhc0V2ZXJSZXF1ZXN0ZWQoY29uc3QgU3RyaW5n
JiwgTmVlZFVuY2FjaGVkUmVhc29uLCBjb25zdCBSZXF1ZXN0ZWRDb21wbGV0aW9uSGFuZGxlciYp
OwogICAgIHZvaWQgbWFya0FzUmVxdWVzdGVkKGNvbnN0IFN0cmluZyYgaGFzaCk7CiAKICAgICBz
dHJ1Y3QgRXZlclJlcXVlc3RlZFF1ZXJ5IHsKICAgICAgICAgU3RyaW5nIGhhc2g7CisgICAgICAg
IGJvb2wgbmVlZFVuY2FjaGVkUmVhc29uOwogICAgICAgICBSZXF1ZXN0ZWRDb21wbGV0aW9uSGFu
ZGxlciBjb21wbGV0aW9uSGFuZGxlcjsKICAgICB9OwogCkBAIC03NSw2ICs4MCw5IEBAIHByaXZh
dGU6CiAjZW5kaWYKICAgICBtdXRhYmxlIEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPGNvbnN0IEV2
ZXJSZXF1ZXN0ZWRRdWVyeT4+IG1fYWN0aXZlUXVlcmllczsKICAgICBXZWJDb3JlOjpTUUxpdGVE
YXRhYmFzZSBtX2RhdGFiYXNlOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2hhc2hlc1RvQWRkOwor
ICAgIEhhc2hNYXA8U3RyaW5nLCBOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb24+IG1fc3RvcmVE
ZWNpc2lvbnNUb0FkZDsKKyAgICBXZWJDb3JlOjpUaW1lciBtX3dyaXRlVGltZXI7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3NDb2NvYS5tbSBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3NDb2NvYS5tbQpp
bmRleCBlNzU3M2FjZGFlYjU4YTFkOWNjOThiMWM3MmE1OTczNDZlYzY2OTg1Li41ZTZmNGU2NzJl
NzI1MWE2MDcyOThjMGYzMTVmZDBlMWE4ZjczOTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0KKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlz
dGljc0NvY29hLm1tCkBAIC00Myw2ICs0Myw3IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3Rh
dGljIGNvbnN0IGNoYXIqIG5ldHdvcmtDYWNoZVN0YXRpc3RpY3NEYXRhYmFzZU5hbWUgPSAiV2Vi
S2l0Q2FjaGVTdGF0aXN0aWNzLmRiIjsKK3N0YXRpYyBjb25zdCBkb3VibGUgbWluV3JpdGVJbnRl
cnZhbFNlY29uZHMgPSAxMDsKIAogc3RhdGljIGJvb2wgZXhlY3V0ZVNRTENvbW1hbmQoV2ViQ29y
ZTo6U1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHNxbCkKIHsKQEAgLTUx
LDggKzUyLDEwIEBAIHN0YXRpYyBib29sIGV4ZWN1dGVTUUxDb21tYW5kKFdlYkNvcmU6OlNRTGl0
ZURhdGFiYXNlJiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBzCiAgICAgQVNTRVJUKGRhdGFiYXNl
LmlzT3BlbigpKTsKIAogICAgIGJvb2wgcmVzdWx0ID0gZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQo
c3FsKTsKLSAgICBpZiAoIXJlc3VsdCkKKyAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICBMT0df
RVJST1IoIk5ldHdvcmsgY2FjaGUgc3RhdGlzdGljczogZmFpbGVkIHRvIGV4ZWN1dGUgc3RhdGVt
ZW50IFwiJXNcIiBlcnJvciBcIiVzXCIiLCBzcWwudXRmOCgpLmRhdGEoKSwgZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiAKICAg
ICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNjMsMTEgKzY2LDEzIEBAIHN0YXRpYyBib29sIGV4ZWN1
dGVTUUxTdGF0ZW1lbnQoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQpCiAgICAg
QVNTRVJUKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblBy
b2dyZXNzKCkpOwogICAgIEFTU0VSVChzdGF0ZW1lbnQuZGF0YWJhc2UoKS5pc09wZW4oKSk7CiAK
LSAgICBib29sIHJlc3VsdCA9IHN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpOwotICAgIGlmICgh
cmVzdWx0KQorICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFdlYkNvcmU6OlNRTFJlc3VsdERv
bmUpIHsKICAgICAgICAgTE9HX0VSUk9SKCJOZXR3b3JrIGNhY2hlIHN0YXRpc3RpY3M6IGZhaWxl
ZCB0byBleGVjdXRlIHN0YXRlbWVudCBcIiVzXCIgZXJyb3IgXCIlc1wiIiwgc3RhdGVtZW50LnF1
ZXJ5KCkudXRmOCgpLmRhdGEoKSwgc3RhdGVtZW50LmRhdGFiYXNlKCkubGFzdEVycm9yTXNnKCkp
OworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0ZDo6
dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzPiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNz
OjpvcGVuKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoKQpAQCAtODAsNiArODUsNyBAQCBzdGQ6OnVu
aXF1ZV9wdHI8TmV0d29ya0NhY2hlU3RhdGlzdGljcz4gTmV0d29ya0NhY2hlU3RhdGlzdGljczo6
b3Blbihjb25zdCBTdHJpbgogCiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpOZXR3b3JrQ2FjaGVT
dGF0aXN0aWNzKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoKQogICAgIDogbV9iYWNrZ3JvdW5k
SU9RdWV1ZShhZG9wdERpc3BhdGNoKGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgiY29tLmFwcGxlLldl
YktpdC5DYWNoZS5TdGF0aXN0aWNzLkJhY2tncm91bmQiLCBESVNQQVRDSF9RVUVVRV9TRVJJQUwp
KSkKKyAgICAsIG1fd3JpdGVUaW1lcigqdGhpcywgJk5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6Ondy
aXRlVGltZXJGaXJlZCkKIHsKICAgICBkaXNwYXRjaF9zZXRfdGFyZ2V0X3F1ZXVlKG1fYmFja2dy
b3VuZElPUXVldWUuZ2V0KCksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVF
VUVfUFJJT1JJVFlfQkFDS0dST1VORCwgMCkpOwogCkBAIC0xMTUsNiArMTIxLDcgQEAgdm9pZCBO
ZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjppbml0aWFsaXplKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQ
YXRoKQogICAgICAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJh
c2UsIEFTQ0lJTGl0ZXJhbCgiU0VMRUNUIGNvdW50KCopIEZST00gQWxyZWFkeVJlcXVlc3RlZCIp
KTsKICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlQW5kU3RlcCgpICE9IFdlYkNvcmU6OlNR
TFJlc3VsdFJvdykgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJOZXR3b3JrIGNhY2hlIHN0YXRp
c3RpY3M6IEZhaWxlZCB0byBjb3VudCB0aGUgbnVtYmVyIG9mIHJvd3MgaW4gQWxyZWFkeVJlcXVl
c3RlZCB0YWJsZSIpOworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTQxLDE0ICsxNDgsMTggQEAgdm9pZCBOZXR3
b3JrQ2FjaGVTdGF0aXN0aWNzOjpib290c3RyYXBGcm9tTmV0d29ya0NhY2hlKGNvbnN0IFN0cmlu
ZyYgbmV0d29ya0NhY2gKIAogICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3Mp
IEJvb3RzdHJhcHBpbmcgdGhlIG5ldHdvcmsgY2FjaGUgc3RhdGlzdGljcyBkYXRhYmFzZSBmcm9t
IHRoZSBuZXR3b3JrIGNhY2hlLi4uIik7CiAKKyAgICBIYXNoU2V0PFN0cmluZz4gaGFzaGVzOwor
ICAgIHRyYXZlcnNlQ2FjaGVGaWxlcyhuZXR3b3JrQ2FjaGVQYXRoLCBbJmhhc2hlc10oY29uc3Qg
U3RyaW5nJiBoYXNoLCBjb25zdCBTdHJpbmcmKSB7CisgICAgICAgIGhhc2hlcy5hZGQoaGFzaCk7
CisgICAgfSk7CisKICAgICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRv
Q291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7Ci0gICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rp
b24gYm9vdHN0cmFwVHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7Ci0gICAgYm9vdHN0cmFwVHJhbnNh
Y3Rpb24uYmVnaW4oKTsKKyAgICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbiB3cml0ZVRyYW5z
YWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHdyaXRlVHJhbnNhY3Rpb24uYmVnaW4oKTsKIAotICAg
IHRyYXZlcnNlQ2FjaGVGaWxlcyhuZXR3b3JrQ2FjaGVQYXRoLCBbdGhpc10oY29uc3QgU3RyaW5n
JiBoYXNoLCBjb25zdCBTdHJpbmcmKSB7Ci0gICAgICAgIGFkZEhhc2hUb0RhdGFiYXNlKGhhc2gp
OwotICAgIH0pOwotICAgIGJvb3RzdHJhcFRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIGFkZEhh
c2hlc1RvRGF0YWJhc2UoaGFzaGVzKTsKKworICAgIHdyaXRlVHJhbnNhY3Rpb24uY29tbWl0KCk7
CiB9CiAKIHZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6c2hyaW5rSWZOZWVkZWQoKQpAQCAt
MTc0LDE4ICsxODUsOSBAQCB2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnJlY29yZE5vdENh
Y2hpbmdSZXNwb25zZShjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtleQogewogICAgIEFTU0VSVChz
dG9yZURlY2lzaW9uICE9IE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbjo6WWVzKTsKIAotICAg
IFN0cmluZ0NhcHR1cmUgaGFzaENhcHR1cmUoa2V5Lmhhc2hBc1N0cmluZygpKTsKLSAgICBkaXNw
YXRjaF9hc3luYyhtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBbdGhpcywgaGFzaENhcHR1cmUs
IHN0b3JlRGVjaXNpb25dIHsKLSAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgiSU5TRVJUIE9SIFJFUExBQ0UgSU5UTyBVbmNh
Y2hlZFJlYXNvbiAoaGFzaCwgcmVhc29uKSBWQUxVRVMgKD8sID8pIikpOwotICAgICAgICBpZiAo
c3RhdGVtZW50LnByZXBhcmUoKSAhPSBXZWJDb3JlOjpTUUxSZXN1bHRPaykKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgaGFzaENhcHR1cmUuc3Ry
aW5nKCkpOwotICAgICAgICBzdGF0ZW1lbnQuYmluZEludCgyLCBzdGF0aWNfY2FzdDxpbnQ+KHN0
b3JlRGVjaXNpb24pKTsKLSAgICAgICAgZXhlY3V0ZVNRTFN0YXRlbWVudChzdGF0ZW1lbnQpOwot
ICAgIH0pOworICAgIG1fc3RvcmVEZWNpc2lvbnNUb0FkZC5zZXQoa2V5Lmhhc2hBc1N0cmluZygp
LCBzdG9yZURlY2lzaW9uKTsKKyAgICBpZiAoIW1fd3JpdGVUaW1lci5pc0FjdGl2ZSgpKQorICAg
ICAgICBtX3dyaXRlVGltZXIuc3RhcnRPbmVTaG90KG1pbldyaXRlSW50ZXJ2YWxTZWNvbmRzKTsK
IH0KIAogc3RhdGljIFN0cmluZyByZXRyaWV2ZURlY2lzaW9uVG9EaWFnbm9zdGljS2V5KE5ldHdv
cmtDYWNoZTo6UmV0cmlldmVEZWNpc2lvbiByZXRyaWV2ZURlY2lzaW9uKQpAQCAtMjEyLDcgKzIx
NCw3IEBAIHZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6cmVjb3JkTm90VXNpbmdDYWNoZUZv
clJlcXVlc3QodWludDY0X3Qgd2ViUGFnZUlELCBjCiAKICAgICBTdHJpbmcgaGFzaCA9IGtleS5o
YXNoQXNTdHJpbmcoKTsKICAgICBXZWJDb3JlOjpVUkwgcmVxdWVzdFVSTCA9IHJlcXVlc3QudXJs
KCk7Ci0gICAgcXVlcnlXYXNFdmVyUmVxdWVzdGVkKGhhc2gsIFt0aGlzLCBoYXNoLCByZXF1ZXN0
VVJMLCB3ZWJQYWdlSUQsIHJldHJpZXZlRGVjaXNpb25dKGJvb2wgd2FzRXZlclJlcXVlc3RlZCwg
Y29uc3QgT3B0aW9uYWw8TmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uPiYpIHsKKyAgICBxdWVy
eVdhc0V2ZXJSZXF1ZXN0ZWQoaGFzaCwgTmVlZFVuY2FjaGVkUmVhc29uOjpObywgW3RoaXMsIGhh
c2gsIHJlcXVlc3RVUkwsIHdlYlBhZ2VJRCwgcmV0cmlldmVEZWNpc2lvbl0oYm9vbCB3YXNFdmVy
UmVxdWVzdGVkLCBjb25zdCBPcHRpb25hbDxOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb24+Jikg
ewogICAgICAgICBpZiAod2FzRXZlclJlcXVlc3RlZCkgewogICAgICAgICAgICAgU3RyaW5nIGRp
YWdub3N0aWNLZXkgPSByZXRyaWV2ZURlY2lzaW9uVG9EaWFnbm9zdGljS2V5KHJldHJpZXZlRGVj
aXNpb24pOwogICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykg
d2ViUGFnZUlEICVsbHU6ICVzIHdhcyBwcmV2aW91c2x5IHJlcXVlc3RlZCBidXQgd2UgYXJlIG5v
dCB1c2luZyB0aGUgY2FjaGUsIHJlYXNvbjogJXMiLCB3ZWJQYWdlSUQsIHJlcXVlc3RVUkwuc3Ry
aW5nKCkuYXNjaWkoKS5kYXRhKCksIGRpYWdub3N0aWNLZXkudXRmOCgpLmRhdGEoKSk7CkBAIC0y
NDYsNyArMjQ4LDcgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpyZWNvcmRSZXRyaWV2
YWxGYWlsdXJlKHVpbnQ2NF90IHdlYlBhZ2VJRCwgY29uc3QgTmUKIHsKICAgICBTdHJpbmcgaGFz
aCA9IGtleS5oYXNoQXNTdHJpbmcoKTsKICAgICBXZWJDb3JlOjpVUkwgcmVxdWVzdFVSTCA9IHJl
cXVlc3QudXJsKCk7Ci0gICAgcXVlcnlXYXNFdmVyUmVxdWVzdGVkKGhhc2gsIFt0aGlzLCBoYXNo
LCByZXF1ZXN0VVJMLCB3ZWJQYWdlSURdKGJvb2wgd2FzUHJldmlvdXNseVJlcXVlc3RlZCwgY29u
c3QgT3B0aW9uYWw8TmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uPiYgc3RvcmVEZWNpc2lvbikg
eworICAgIHF1ZXJ5V2FzRXZlclJlcXVlc3RlZChoYXNoLCBOZWVkVW5jYWNoZWRSZWFzb246Olll
cywgW3RoaXMsIGhhc2gsIHJlcXVlc3RVUkwsIHdlYlBhZ2VJRF0oYm9vbCB3YXNQcmV2aW91c2x5
UmVxdWVzdGVkLCBjb25zdCBPcHRpb25hbDxOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb24+JiBz
dG9yZURlY2lzaW9uKSB7CiAgICAgICAgIGlmICh3YXNQcmV2aW91c2x5UmVxdWVzdGVkKSB7CiAg
ICAgICAgICAgICBTdHJpbmcgZGlhZ25vc3RpY0tleSA9IHN0b3JlRGVjaXNpb25Ub0RpYWdub3N0
aWNLZXkoc3RvcmVEZWNpc2lvbi52YWx1ZSgpKTsKICAgICAgICAgICAgIExPRyhOZXR3b3JrQ2Fj
aGUsICIoTmV0d29ya1Byb2Nlc3MpIHdlYlBhZ2VJRCAlbGx1OiAlcyB3YXMgcHJldmlvdXNseSBy
ZXF1ZXN0IGJ1dCBpcyBub3QgaW4gdGhlIGNhY2hlLCByZWFzb246ICVzIiwgd2ViUGFnZUlELCBy
ZXF1ZXN0VVJMLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBkaWFnbm9zdGljS2V5LnV0ZjgoKS5k
YXRhKCkpOwpAQCAtMjkwLDM1ICsyOTIsNzcgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNz
OjptYXJrQXNSZXF1ZXN0ZWQoY29uc3QgU3RyaW5nJiBoYXNoKQogewogICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CiAKLSAgICBTdHJpbmdDYXB0dXJlIGhhc2hDYXB0dXJlKGhhc2gpOwot
ICAgIGRpc3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFt0aGlzLCBoYXNo
Q2FwdHVyZV0gewotICAgICAgICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NB
dXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7Ci0gICAgICAgIGlmIChtX2RhdGFiYXNlLmlz
T3BlbigpKQotICAgICAgICAgICAgYWRkSGFzaFRvRGF0YWJhc2UoaGFzaENhcHR1cmUuc3RyaW5n
KCkpOwotICAgIH0pOworICAgIG1faGFzaGVzVG9BZGQuYWRkKGhhc2gpOworICAgIGlmICghbV93
cml0ZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fd3JpdGVUaW1lci5zdGFydE9uZVNob3Qo
bWluV3JpdGVJbnRlcnZhbFNlY29uZHMpOworfQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3Rp
Y3M6OndyaXRlVGltZXJGaXJlZCgpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
KworICAgIEhhc2hTZXQ8U3RyaW5nPiBoYXNoZXNUb0FkZDsKKyAgICBoYXNoZXNUb0FkZC5zd2Fw
KG1faGFzaGVzVG9BZGQpOworICAgIEhhc2hNYXA8U3RyaW5nLCBOZXR3b3JrQ2FjaGU6OlN0b3Jl
RGVjaXNpb24+IHN0b3JlRGVjaXNpb25zVG9BZGQ7CisgICAgc3RvcmVEZWNpc2lvbnNUb0FkZC5z
d2FwKG1fc3RvcmVEZWNpc2lvbnNUb0FkZCk7CiAKICAgICBzaHJpbmtJZk5lZWRlZCgpOworCisg
ICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgW3RoaXMsIGhhc2hl
c1RvQWRkLCBzdG9yZURlY2lzaW9uc1RvQWRkXSB7CisgICAgICAgIGlmICghbV9kYXRhYmFzZS5p
c09wZW4oKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBXZWJDb3JlOjpTUUxpdGVU
cmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CisgICAg
ICAgIFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uIHdyaXRlVHJhbnNhY3Rpb24obV9kYXRhYmFz
ZSk7CisgICAgICAgIHdyaXRlVHJhbnNhY3Rpb24uYmVnaW4oKTsKKworICAgICAgICBhZGRIYXNo
ZXNUb0RhdGFiYXNlKGhhc2hlc1RvQWRkKTsKKyAgICAgICAgYWRkU3RvcmVEZWNpc2lvbnNUb0Rh
dGFiYXNlKHN0b3JlRGVjaXNpb25zVG9BZGQpOworCisgICAgICAgIHdyaXRlVHJhbnNhY3Rpb24u
Y29tbWl0KCk7CisgICAgfSk7CiB9CiAKLXZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6cXVl
cnlXYXNFdmVyUmVxdWVzdGVkKGNvbnN0IFN0cmluZyYgaGFzaCwgY29uc3QgUmVxdWVzdGVkQ29t
cGxldGlvbkhhbmRsZXImIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBOZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzOjpxdWVyeVdhc0V2ZXJSZXF1ZXN0ZWQoY29uc3QgU3RyaW5nJiBoYXNoLCBOZWVkVW5j
YWNoZWRSZWFzb24gbmVlZFVuY2FjaGVkUmVhc29uLCBjb25zdCBSZXF1ZXN0ZWRDb21wbGV0aW9u
SGFuZGxlciYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKIAotICAgIGF1dG8gZXZlclJlcXVlc3RlZFF1ZXJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxF
dmVyUmVxdWVzdGVkUXVlcnk+KEV2ZXJSZXF1ZXN0ZWRRdWVyeSB7IGhhc2gsIGNvbXBsZXRpb25I
YW5kbGVyIH0pOworICAgIC8vIFF1ZXJ5IHBlbmRpbmcgd3JpdGVzIGZpcnN0LgorICAgIGJvb2wg
d2FzQWxyZWFkeVJlcXVlc3RlZCA9IG1faGFzaGVzVG9BZGQuY29udGFpbnMoaGFzaCk7CisgICAg
aWYgKHdhc0FscmVhZHlSZXF1ZXN0ZWQgJiYgbmVlZFVuY2FjaGVkUmVhc29uID09IE5lZWRVbmNh
Y2hlZFJlYXNvbjo6Tm8pIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSwgTnVsbG9w
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG5lZWRVbmNhY2hlZFJlYXNvbiA9
PSBOZWVkVW5jYWNoZWRSZWFzb246OlllcyAmJiBtX3N0b3JlRGVjaXNpb25zVG9BZGQuY29udGFp
bnMoaGFzaCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSwgbV9zdG9yZURlY2lz
aW9uc1RvQWRkLmdldChoYXNoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBR
dWVyeSB0aGUgZGF0YWJhc2UuCisgICAgYXV0byBldmVyUmVxdWVzdGVkUXVlcnkgPSBzdGQ6Om1h
a2VfdW5pcXVlPEV2ZXJSZXF1ZXN0ZWRRdWVyeT4oRXZlclJlcXVlc3RlZFF1ZXJ5IHsgaGFzaCwg
bmVlZFVuY2FjaGVkUmVhc29uID09IE5lZWRVbmNhY2hlZFJlYXNvbjo6WWVzLCBjb21wbGV0aW9u
SGFuZGxlciB9KTsKICAgICBhdXRvJiBxdWVyeSA9ICpldmVyUmVxdWVzdGVkUXVlcnk7CiAgICAg
bV9hY3RpdmVRdWVyaWVzLmFkZChXVEY6Om1vdmUoZXZlclJlcXVlc3RlZFF1ZXJ5KSk7Ci0gICAg
ZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgW3RoaXMsICZxdWVyeV0g
eworICAgIGRpc3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFt0aGlzLCB3
YXNBbHJlYWR5UmVxdWVzdGVkLCAmcXVlcnldICgpIG11dGFibGUgewogICAgICAgICBXZWJDb3Jl
OjpTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50
ZXI7Ci0gICAgICAgIGJvb2wgd2FzQWxyZWFkeVJlcXVlc3RlZCA9IGZhbHNlOwogICAgICAgICBP
cHRpb25hbDxOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb24+IHN0b3JlRGVjaXNpb247CiAgICAg
ICAgIGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKSB7Ci0gICAgICAgICAgICBXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgiU0VMRUNUIEFs
cmVhZHlSZXF1ZXN0ZWQuaGFzaCwgcmVhc29uIEZST00gQWxyZWFkeVJlcXVlc3RlZCBMRUZUIE9V
VEVSIEpPSU4gVW5jYWNoZWRSZWFzb24gT04gQWxyZWFkeVJlcXVlc3RlZC5oYXNoPVVuY2FjaGVk
UmVhc29uLmhhc2ggV0hFUkUgQWxyZWFkeVJlcXVlc3RlZC5oYXNoPT8iKSk7Ci0gICAgICAgICAg
ICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSA9PSBXZWJDb3JlOjpTUUxSZXN1bHRPaykgewotICAg
ICAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBxdWVyeS5oYXNoKTsKLSAgICAgICAg
ICAgICAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSA9PSBXZWJDb3JlOjpTUUxSZXN1bHRSb3cpIHsK
LSAgICAgICAgICAgICAgICAgICAgd2FzQWxyZWFkeVJlcXVlc3RlZCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgIHN0b3JlRGVjaXNpb24gPSBzdGF0ZW1lbnQuaXNDb2x1bW5OdWxsKDEpID8g
TmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uOjpZZXMgOiBzdGF0aWNfY2FzdDxOZXR3b3JrQ2Fj
aGU6OlN0b3JlRGVjaXNpb24+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICghd2FzQWxyZWFkeVJlcXVlc3RlZCkgeworICAgICAg
ICAgICAgICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwg
QVNDSUlMaXRlcmFsKCJTRUxFQ1QgaGFzaCBGUk9NIEFscmVhZHlSZXF1ZXN0ZWQgV0hFUkUgaGFz
aD0/IikpOworICAgICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpID09IFdlYkNv
cmU6OlNRTFJlc3VsdE9rKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4
dCgxLCBxdWVyeS5oYXNoKTsKKyAgICAgICAgICAgICAgICAgICAgd2FzQWxyZWFkeVJlcXVlc3Rl
ZCA9IChzdGF0ZW1lbnQuc3RlcCgpID09IFdlYkNvcmU6OlNRTFJlc3VsdFJvdyk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHdhc0FscmVhZHlSZXF1ZXN0ZWQgJiYg
cXVlcnkubmVlZFVuY2FjaGVkUmVhc29uKSB7CisgICAgICAgICAgICAgICAgV2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBBU0NJSUxpdGVyYWwoIlNFTEVDVCBy
ZWFzb24gRlJPTSBVbmNhY2hlZFJlYXNvbiBXSEVSRSBoYXNoPT8iKSk7CisgICAgICAgICAgICAg
ICAgc3RvcmVEZWNpc2lvbiA9IE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbjo6WWVzOworICAg
ICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpID09IFdlYkNvcmU6OlNRTFJlc3Vs
dE9rKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBxdWVyeS5o
YXNoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgPT0gV2ViQ29y
ZTo6U1FMUmVzdWx0Um93KQorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVEZWNpc2lvbiA9
IHN0YXRpY19jYXN0PE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbj4oc3RhdGVtZW50LmdldENv
bHVtbkludCgwKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAg
IGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFt0aGlzLCAmcXVlcnks
IHdhc0FscmVhZHlSZXF1ZXN0ZWQsIHN0b3JlRGVjaXNpb25dIHsKQEAgLTM0NSwyMSArMzg5LDQ0
IEBAIHZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6Y2xlYXIoKQogICAgIH0pOwogfQogCi12
b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OmFkZEhhc2hUb0RhdGFiYXNlKGNvbnN0IFN0cmlu
ZyYgaGFzaCkKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6YWRkSGFzaGVzVG9EYXRhYmFz
ZShjb25zdCBIYXNoU2V0PFN0cmluZz4mIGhhc2hlcykKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKICAgICBBU1NFUlQoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2VUcmFja2VyOjpo
YXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2UuaXNPcGVu
KCkpOwogCiAgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNl
LCBBU0NJSUxpdGVyYWwoIklOU0VSVCBPUiBJR05PUkUgSU5UTyBBbHJlYWR5UmVxdWVzdGVkICho
YXNoKSBWQUxVRVMgKD8pIikpOwotICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFdlYkNv
cmU6OlNRTFJlc3VsdE9rKQorICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFdlYkNvcmU6
OlNRTFJlc3VsdE9rKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBy
ZXR1cm47CisgICAgfQogCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIGhhc2gpOwotICAgIGlm
ICghZXhlY3V0ZVNRTFN0YXRlbWVudChzdGF0ZW1lbnQpKQorICAgIGZvciAoYXV0byYgaGFzaCA6
IGhhc2hlcykgeworICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgaGFzaCk7CisgICAgICAg
IGlmIChleGVjdXRlU1FMU3RhdGVtZW50KHN0YXRlbWVudCkpCisgICAgICAgICAgICArK21fYXBw
cm94aW1hdGVFbnRyeUNvdW50OworICAgICAgICBzdGF0ZW1lbnQucmVzZXQoKTsKKyAgICB9Cit9
CisKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6YWRkU3RvcmVEZWNpc2lvbnNUb0RhdGFi
YXNlKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb24+JiBz
dG9yZURlY2lzaW9ucykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBB
U1NFUlQoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJv
Z3Jlc3MoKSk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UuaXNPcGVuKCkpOworCisgICAgV2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBBU0NJSUxpdGVyYWwoIklO
U0VSVCBPUiBSRVBMQUNFIElOVE8gVW5jYWNoZWRSZWFzb24gKGhhc2gsIHJlYXNvbikgVkFMVUVT
ICg/LCA/KSIpKTsKKyAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBXZWJDb3JlOjpTUUxS
ZXN1bHRPaykgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJu
OworICAgIH0KIAotICAgICsrbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQ7CisgICAgZm9yIChhdXRv
JiBwYWlyIDogc3RvcmVEZWNpc2lvbnMpIHsKKyAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEs
IHBhaXIua2V5KTsKKyAgICAgICAgc3RhdGVtZW50LmJpbmRJbnQoMiwgc3RhdGljX2Nhc3Q8aW50
PihwYWlyLnZhbHVlKSk7CisgICAgICAgIGV4ZWN1dGVTUUxTdGF0ZW1lbnQoc3RhdGVtZW50KTsK
KyAgICAgICAgc3RhdGVtZW50LnJlc2V0KCk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9j
ZXNzUG9vbENvY29hLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nl
c3NQb29sQ29jb2EubW0KaW5kZXggMzQ4OGQxYzcwNDQ2NzY1NGQxYWUxZjk3NzczZGQwZTE1YmY3
ZTNlZC4uZjAwYTVmZmJkMjBmNGUxNTlmZjYyODZjZDZmYzRkMzNhNTIwNmZlZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0K
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2Eu
bW0KQEAgLTEwNyw3ICsxMDcsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3RlclVzZXJEZWZhdWx0c0lm
TmVlZGVkKCkKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogICAgIFtyZWdpc3RyYXRpb25E
aWN0aW9uYXJ5IHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSBmb3JLZXk6
V2ViS2l0TmV0d29ya0NhY2hlRW5hYmxlZERlZmF1bHRzS2V5XTsKLSAgICBbcmVnaXN0cmF0aW9u
RGljdGlvbmFyeSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSBmb3JLZXk6
V2ViS2l0TmV0d29ya0NhY2hlRWZmaWNhY3lMb2dnaW5nRW5hYmxlZERlZmF1bHRzS2V5XTsKKyAg
ICBbcmVnaXN0cmF0aW9uRGljdGlvbmFyeSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhC
b29sOllFU10gZm9yS2V5OldlYktpdE5ldHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZ0VuYWJsZWRE
ZWZhdWx0c0tleV07CiAjZW5kaWYKIAogICAgIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2Vy
RGVmYXVsdHNdIHJlZ2lzdGVyRGVmYXVsdHM6cmVnaXN0cmF0aW9uRGljdGlvbmFyeV07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247787</attachid>
            <date>2015-03-03 13:34:22 -0800</date>
            <delta_ts>2015-03-04 12:31:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142186-20150303133405.patch</filename>
            <type>text/plain</type>
            <size>19082</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwOTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNzM4NDYwZGY1ZGJkNDk0
YzIxZGVjOWRkYzk1OGM5NzVmYjVjMTg5Ny4uZDdmNDQ2MDUyMzhmZmJiMjlhYjA2NjQxYTc5ZmM2
ZGJiMzc5ZTA0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDE1LTAzLTAzICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTmV0d29ya0NhY2hlIGVmZmlj
YWN5IGxvZ2dpbmcgaXMgdXNpbmcgdG9vIG11Y2ggQ1BVCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDIxODYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzE5NjMyMDgwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5ldHdvcmtDYWNoZSBlZmZpY2FjeSBsb2dnaW5nIHdhcyB1c2luZyB0b28gbXVjaCBDUFUg
bW9zdGx5IGR1ZSB0bworICAgICAgICBkYXRhYmFzZSB3cml0ZXMuIExvZ2dpbmcgd2FzIHVzaW5n
IH4xMS4zJSBvZiB0aGUgTmV0d29ya1Byb2Nlc3MnCisgICAgICAgIENQVSB1c2FnZSAofjkuMiUg
Zm9yIHdyaXRlcyAvIH4xLjMlIGZvciByZWFkcykuCisKKyAgICAgICAgVGhpcyBwYXRjaCBidWZm
ZXJzIHdyaXRlcyByZXF1ZXN0cyBpbiBtZW1vcnkgYW5kIG9ubHkgd3JpdGVzIHRoZW0KKyAgICAg
ICAgdG8gZGlzayBldmVyeSAxMCBzZWNvbmRzLiBXZSBhcmUgdGh1cyB3cml0aW5nIHRvIHRoaXMg
bGVzcyBmcmVxdWVudGx5CisgICAgICAgIGFuZCB3cml0aW5nIG1vcmUgYXQgb25jZSwgaW4gYSBz
aW5nbGUgU1FMIHRyYW5zYWN0aW9uLiBBZnRlciB0aGlzCisgICAgICAgIGNoYW5nZSwgZWZmaWNh
Y3kgbG9nZ2luZyBvbmx5IGFjY291bnRzIGZvciB+My41JSBvZiB0aGUgTmV0d29ya1Byb2Nlc3Mn
CisgICAgICAgIENQVSBhY3Rpdml0eSAoMS41JSBmb3Igd3JpdGVzIC8gMS4yJSBmb3IgcmVhZHMp
LgorCisgICAgICAgIE5vdyB0aGF0IENQVSB1c2FnZSBpcyBtb3JlIGFjY2VwdGFibGUsIHRoaXMg
cGF0Y2ggcmUtZW5hYmxlcyB0aGUKKyAgICAgICAgbmV0d29yayBjYWNoZSBlZmZpY2ljeSBsb2dn
aW5nLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlz
dGljcy5oOgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rh
dGlzdGljc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpleGVjdXRlU1FMU3RhdGVtZW50KToK
KyAgICAgICAgQ2FsbCBzdGVwKCkgaW5zdGVhZCBvZiBleGVjdXRlQ29tbWFuZCgpIGJlY2F1c2U6
CisgICAgICAgIC0gVGhlIGlucHV0IHN0YXRlbWVudCBpcyBhbHJlYWR5IHByZXBhcmVkLgorICAg
ICAgICAtIHN0ZXAoKSBkb2VzIG5vdCBmaW5hbGl6ZSgpIHRoZSBzdGF0ZW1lbnQgYW5kIHRodXMg
d2UgY2FsbGVyIGNhbgorICAgICAgICAgIHJldXNlIGl0IGFmdGVyIGNhbGxpbmcgcmVzZXQoKS4K
KworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpOZXR3b3JrQ2FjaGVT
dGF0aXN0aWNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlU3RhdGlzdGljczo6Ym9v
dHN0cmFwRnJvbU5ldHdvcmtDYWNoZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0
YXRpc3RpY3M6OnJlY29yZE5vdENhY2hpbmdSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZVN0YXRpc3RpY3M6OnJlY29yZE5vdFVzaW5nQ2FjaGVGb3JSZXF1ZXN0KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlU3RhdGlzdGljczo6cmVjb3JkUmV0cmlldmFsRmFp
bHVyZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6Om1hcmtBc1Jl
cXVlc3RlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OndyaXRl
VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnF1
ZXJ5V2FzRXZlclJlcXVlc3RlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRp
c3RpY3M6OmFkZEhhc2hlc1RvRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGVTdGF0aXN0aWNzOjphZGRTdG9yZURlY2lzaW9uc1RvRGF0YWJhc2UpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjphZGRIYXNoVG9EYXRhYmFzZSk6IERlbGV0ZWQu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbToKKyAg
ICAgICAgKFdlYktpdDo6cmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCk6CisgICAgICAgIFJl
LWVuYWJsZSB0aGUgbmV0d29yayBjYWNoZSBlZmZpY2FjeSBsb2dnaW5nLgorCiAyMDE1LTAzLTAz
ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBS
RUdSRVNTSU9OKHIxNzcwNzUpOiBXZWJQcm9jZXNzIGNyYXNoZXMgd2hlbiBlbnRlcmluZyBhY2Nl
bGVyYXRpbmcgY29tcG9zaXRpbmcgbW9kZSBiZWZvcmUgdGhlIFdlYlZpZXcgaXMgcmVhbGl6ZWQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZVN0YXRpc3RpY3MuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZVN0YXRpc3RpY3MuaAppbmRleCBmOWM3ODI1YjljNjVmYTc1YmRiNjM0NTE3MjBi
Njg3YmU3ZjM0MzM3Li5hZWJlYzc3Zjg1MmFiNzgxOWM4M2RjY2EzZDJhOWEyNTc0ZWZiYjc2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdGF0aXN0aWNzLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlU3RhdGlzdGljcy5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiTmV0
d29ya0NhY2hlS2V5LmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RvcmFnZS5oIgogI2luY2x1
ZGUgPFdlYkNvcmUvU1FMaXRlRGF0YWJhc2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKQEAgLTU3LDE0
ICs1OCwxOCBAQCBwcml2YXRlOgogICAgIHZvaWQgYm9vdHN0cmFwRnJvbU5ldHdvcmtDYWNoZShj
b25zdCBTdHJpbmcmIG5ldHdvcmtDYWNoZVBhdGgpOwogICAgIHZvaWQgc2hyaW5rSWZOZWVkZWQo
KTsKIAotICAgIHZvaWQgYWRkSGFzaFRvRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBoYXNoKTsKKyAg
ICB2b2lkIGFkZEhhc2hlc1RvRGF0YWJhc2UoY29uc3QgVmVjdG9yPFN0cmluZz4mIGhhc2hlcyk7
CisgICAgdm9pZCBhZGRTdG9yZURlY2lzaW9uc1RvRGF0YWJhc2UoY29uc3QgVmVjdG9yPHN0ZDo6
cGFpcjxTdHJpbmcsIE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbj4+Jik7CisgICAgdm9pZCB3
cml0ZVRpbWVyRmlyZWQoKTsKIAogICAgIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkIChib29s
IHdhc0V2ZXJSZXF1ZXN0ZWQsIGNvbnN0IE9wdGlvbmFsPE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNp
c2lvbj4mKT4gUmVxdWVzdGVkQ29tcGxldGlvbkhhbmRsZXI7Ci0gICAgdm9pZCBxdWVyeVdhc0V2
ZXJSZXF1ZXN0ZWQoY29uc3QgU3RyaW5nJiwgY29uc3QgUmVxdWVzdGVkQ29tcGxldGlvbkhhbmRs
ZXImKTsKKyAgICBlbnVtIGNsYXNzIE5lZWRVbmNhY2hlZFJlYXNvbiB7IE5vLCBZZXMgfTsKKyAg
ICB2b2lkIHF1ZXJ5V2FzRXZlclJlcXVlc3RlZChjb25zdCBTdHJpbmcmLCBOZWVkVW5jYWNoZWRS
ZWFzb24sIGNvbnN0IFJlcXVlc3RlZENvbXBsZXRpb25IYW5kbGVyJik7CiAgICAgdm9pZCBtYXJr
QXNSZXF1ZXN0ZWQoY29uc3QgU3RyaW5nJiBoYXNoKTsKIAogICAgIHN0cnVjdCBFdmVyUmVxdWVz
dGVkUXVlcnkgewogICAgICAgICBTdHJpbmcgaGFzaDsKKyAgICAgICAgYm9vbCBuZWVkVW5jYWNo
ZWRSZWFzb247CiAgICAgICAgIFJlcXVlc3RlZENvbXBsZXRpb25IYW5kbGVyIGNvbXBsZXRpb25I
YW5kbGVyOwogICAgIH07CiAKQEAgLTc1LDYgKzgwLDkgQEAgcHJpdmF0ZToKICNlbmRpZgogICAg
IG11dGFibGUgSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8Y29uc3QgRXZlclJlcXVlc3RlZFF1ZXJ5
Pj4gbV9hY3RpdmVRdWVyaWVzOwogICAgIFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlIG1fZGF0YWJh
c2U7CisgICAgSGFzaFNldDxTdHJpbmc+IG1faGFzaGVzVG9BZGQ7CisgICAgSGFzaE1hcDxTdHJp
bmcsIE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbj4gbV9zdG9yZURlY2lzaW9uc1RvQWRkOwor
ICAgIFdlYkNvcmU6OlRpbWVyIG1fd3JpdGVUaW1lcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlU3RhdGlzdGljc0NvY29hLm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljc0NvY29hLm1tCmluZGV4IGU3NTczYWNkYWVi
NThhMWQ5Y2M5OGIxYzcyYTU5NzM0NmVjNjY5ODUuLmY1NDQ3NmQ0MDMyNzMyYmJmNDVmOTVlMTg0
OWIyYzc0NGVkM2JhMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3NDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0KQEAg
LTQzLDYgKzQzLDcgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0aWMgY29uc3QgY2hhciog
bmV0d29ya0NhY2hlU3RhdGlzdGljc0RhdGFiYXNlTmFtZSA9ICJXZWJLaXRDYWNoZVN0YXRpc3Rp
Y3MuZGIiOworc3RhdGljIGNvbnN0IGRvdWJsZSBtaW5Xcml0ZUludGVydmFsU2Vjb25kcyA9IDEw
OwogCiBzdGF0aWMgYm9vbCBleGVjdXRlU1FMQ29tbWFuZChXZWJDb3JlOjpTUUxpdGVEYXRhYmFz
ZSYgZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgc3FsKQogewpAQCAtNTEsOCArNTIsMTAgQEAgc3Rh
dGljIGJvb2wgZXhlY3V0ZVNRTENvbW1hbmQoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2UmIGRhdGFi
YXNlLCBjb25zdCBTdHJpbmcmIHMKICAgICBBU1NFUlQoZGF0YWJhc2UuaXNPcGVuKCkpOwogCiAg
ICAgYm9vbCByZXN1bHQgPSBkYXRhYmFzZS5leGVjdXRlQ29tbWFuZChzcWwpOwotICAgIGlmICgh
cmVzdWx0KQorICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgIExPR19FUlJPUigiTmV0d29yayBj
YWNoZSBzdGF0aXN0aWNzOiBmYWlsZWQgdG8gZXhlY3V0ZSBzdGF0ZW1lbnQgXCIlc1wiIGVycm9y
IFwiJXNcIiIsIHNxbC51dGY4KCkuZGF0YSgpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KIAogICAgIHJldHVybiByZXN1bHQ7
CiB9CkBAIC02MywxMSArNjYsMTMgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZVNRTFN0YXRlbWVudChX
ZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQmIHN0YXRlbWVudCkKICAgICBBU1NFUlQoV2ViQ29yZTo6
U1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CiAgICAg
QVNTRVJUKHN0YXRlbWVudC5kYXRhYmFzZSgpLmlzT3BlbigpKTsKIAotICAgIGJvb2wgcmVzdWx0
ID0gc3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCk7Ci0gICAgaWYgKCFyZXN1bHQpCisgICAgaWYg
KHN0YXRlbWVudC5zdGVwKCkgIT0gV2ViQ29yZTo6U1FMUmVzdWx0RG9uZSkgewogICAgICAgICBM
T0dfRVJST1IoIk5ldHdvcmsgY2FjaGUgc3RhdGlzdGljczogZmFpbGVkIHRvIGV4ZWN1dGUgc3Rh
dGVtZW50IFwiJXNcIiBlcnJvciBcIiVzXCIiLCBzdGF0ZW1lbnQucXVlcnkoKS51dGY4KCkuZGF0
YSgpLCBzdGF0ZW1lbnQuZGF0YWJhc2UoKS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPE5ldHdv
cmtDYWNoZVN0YXRpc3RpY3M+IE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6Om9wZW4oY29uc3QgU3Ry
aW5nJiBjYWNoZVBhdGgpCkBAIC04MCw2ICs4NSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3Jr
Q2FjaGVTdGF0aXN0aWNzPiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpvcGVuKGNvbnN0IFN0cmlu
CiAKIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3MoY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZVBhdGgpCiAgICAgOiBtX2JhY2tncm91bmRJT1F1ZXVlKGFkb3B0RGlz
cGF0Y2goZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LkNhY2hlLlN0YXRp
c3RpY3MuQmFja2dyb3VuZCIsIERJU1BBVENIX1FVRVVFX1NFUklBTCkpKQorICAgICwgbV93cml0
ZVRpbWVyKCp0aGlzLCAmTmV0d29ya0NhY2hlU3RhdGlzdGljczo6d3JpdGVUaW1lckZpcmVkKQog
ewogICAgIGRpc3BhdGNoX3NldF90YXJnZXRfcXVldWUobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQo
KSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9CQUNL
R1JPVU5ELCAwKSk7CiAKQEAgLTExNSw2ICsxMjEsNyBAQCB2b2lkIE5ldHdvcmtDYWNoZVN0YXRp
c3RpY3M6OmluaXRpYWxpemUoY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgpCiAgICAgICAgIFdl
YkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgQVNDSUlMaXRlcmFs
KCJTRUxFQ1QgY291bnQoKikgRlJPTSBBbHJlYWR5UmVxdWVzdGVkIikpOwogICAgICAgICBpZiAo
c3RhdGVtZW50LnByZXBhcmVBbmRTdGVwKCkgIT0gV2ViQ29yZTo6U1FMUmVzdWx0Um93KSB7CiAg
ICAgICAgICAgICBMT0dfRVJST1IoIk5ldHdvcmsgY2FjaGUgc3RhdGlzdGljczogRmFpbGVkIHRv
IGNvdW50IHRoZSBudW1iZXIgb2Ygcm93cyBpbiBBbHJlYWR5UmVxdWVzdGVkIHRhYmxlIik7Cisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCkBAIC0xNDEsMTQgKzE0OCwxOCBAQCB2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3Rp
Y3M6OmJvb3RzdHJhcEZyb21OZXR3b3JrQ2FjaGUoY29uc3QgU3RyaW5nJiBuZXR3b3JrQ2FjaAog
CiAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgQm9vdHN0cmFwcGluZyB0
aGUgbmV0d29yayBjYWNoZSBzdGF0aXN0aWNzIGRhdGFiYXNlIGZyb20gdGhlIG5ldHdvcmsgY2Fj
aGUuLi4iKTsKIAorICAgIFZlY3RvcjxTdHJpbmc+IGhhc2hlczsKKyAgICB0cmF2ZXJzZUNhY2hl
RmlsZXMobmV0d29ya0NhY2hlUGF0aCwgWyZoYXNoZXNdKGNvbnN0IFN0cmluZyYgaGFzaCwgY29u
c3QgU3RyaW5nJikgeworICAgICAgICBoYXNoZXMuYXBwZW5kKGhhc2gpOworICAgIH0pOworCiAg
ICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNh
Y3Rpb25Db3VudGVyOwotICAgIFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uIGJvb3RzdHJhcFRy
YW5zYWN0aW9uKG1fZGF0YWJhc2UpOwotICAgIGJvb3RzdHJhcFRyYW5zYWN0aW9uLmJlZ2luKCk7
CisgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb24gd3JpdGVUcmFuc2FjdGlvbihtX2RhdGFi
YXNlKTsKKyAgICB3cml0ZVRyYW5zYWN0aW9uLmJlZ2luKCk7CiAKLSAgICB0cmF2ZXJzZUNhY2hl
RmlsZXMobmV0d29ya0NhY2hlUGF0aCwgW3RoaXNdKGNvbnN0IFN0cmluZyYgaGFzaCwgY29uc3Qg
U3RyaW5nJikgewotICAgICAgICBhZGRIYXNoVG9EYXRhYmFzZShoYXNoKTsKLSAgICB9KTsKLSAg
ICBib290c3RyYXBUcmFuc2FjdGlvbi5jb21taXQoKTsKKyAgICBhZGRIYXNoZXNUb0RhdGFiYXNl
KGhhc2hlcyk7CisKKyAgICB3cml0ZVRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lkIE5l
dHdvcmtDYWNoZVN0YXRpc3RpY3M6OnNocmlua0lmTmVlZGVkKCkKQEAgLTE3NCwxOCArMTg1LDkg
QEAgdm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpyZWNvcmROb3RDYWNoaW5nUmVzcG9uc2Uo
Y29uc3QgTmV0d29ya0NhY2hlS2V5JiBrZXkKIHsKICAgICBBU1NFUlQoc3RvcmVEZWNpc2lvbiAh
PSBOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb246Olllcyk7CiAKLSAgICBTdHJpbmdDYXB0dXJl
IGhhc2hDYXB0dXJlKGtleS5oYXNoQXNTdHJpbmcoKSk7Ci0gICAgZGlzcGF0Y2hfYXN5bmMobV9i
YWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgW3RoaXMsIGhhc2hDYXB0dXJlLCBzdG9yZURlY2lzaW9u
XSB7Ci0gICAgICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNl
LCBBU0NJSUxpdGVyYWwoIklOU0VSVCBPUiBSRVBMQUNFIElOVE8gVW5jYWNoZWRSZWFzb24gKGhh
c2gsIHJlYXNvbikgVkFMVUVTICg/LCA/KSIpKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gV2ViQ29yZTo6U1FMUmVzdWx0T2spCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIGhhc2hDYXB0dXJlLnN0cmluZygpKTsKLSAgICAg
ICAgc3RhdGVtZW50LmJpbmRJbnQoMiwgc3RhdGljX2Nhc3Q8aW50PihzdG9yZURlY2lzaW9uKSk7
Ci0gICAgICAgIGV4ZWN1dGVTUUxTdGF0ZW1lbnQoc3RhdGVtZW50KTsKLSAgICB9KTsKKyAgICBt
X3N0b3JlRGVjaXNpb25zVG9BZGQuc2V0KGtleS5oYXNoQXNTdHJpbmcoKSwgc3RvcmVEZWNpc2lv
bik7CisgICAgaWYgKCFtX3dyaXRlVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV93cml0ZVRp
bWVyLnN0YXJ0T25lU2hvdChtaW5Xcml0ZUludGVydmFsU2Vjb25kcyk7CiB9CiAKIHN0YXRpYyBT
dHJpbmcgcmV0cmlldmVEZWNpc2lvblRvRGlhZ25vc3RpY0tleShOZXR3b3JrQ2FjaGU6OlJldHJp
ZXZlRGVjaXNpb24gcmV0cmlldmVEZWNpc2lvbikKQEAgLTIxMiw3ICsyMTQsNyBAQCB2b2lkIE5l
dHdvcmtDYWNoZVN0YXRpc3RpY3M6OnJlY29yZE5vdFVzaW5nQ2FjaGVGb3JSZXF1ZXN0KHVpbnQ2
NF90IHdlYlBhZ2VJRCwgYwogCiAgICAgU3RyaW5nIGhhc2ggPSBrZXkuaGFzaEFzU3RyaW5nKCk7
CiAgICAgV2ViQ29yZTo6VVJMIHJlcXVlc3RVUkwgPSByZXF1ZXN0LnVybCgpOwotICAgIHF1ZXJ5
V2FzRXZlclJlcXVlc3RlZChoYXNoLCBbdGhpcywgaGFzaCwgcmVxdWVzdFVSTCwgd2ViUGFnZUlE
LCByZXRyaWV2ZURlY2lzaW9uXShib29sIHdhc0V2ZXJSZXF1ZXN0ZWQsIGNvbnN0IE9wdGlvbmFs
PE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbj4mKSB7CisgICAgcXVlcnlXYXNFdmVyUmVxdWVz
dGVkKGhhc2gsIE5lZWRVbmNhY2hlZFJlYXNvbjo6Tm8sIFt0aGlzLCBoYXNoLCByZXF1ZXN0VVJM
LCB3ZWJQYWdlSUQsIHJldHJpZXZlRGVjaXNpb25dKGJvb2wgd2FzRXZlclJlcXVlc3RlZCwgY29u
c3QgT3B0aW9uYWw8TmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uPiYpIHsKICAgICAgICAgaWYg
KHdhc0V2ZXJSZXF1ZXN0ZWQpIHsKICAgICAgICAgICAgIFN0cmluZyBkaWFnbm9zdGljS2V5ID0g
cmV0cmlldmVEZWNpc2lvblRvRGlhZ25vc3RpY0tleShyZXRyaWV2ZURlY2lzaW9uKTsKICAgICAg
ICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHdlYlBhZ2VJRCAlbGx1
OiAlcyB3YXMgcHJldmlvdXNseSByZXF1ZXN0ZWQgYnV0IHdlIGFyZSBub3QgdXNpbmcgdGhlIGNh
Y2hlLCByZWFzb246ICVzIiwgd2ViUGFnZUlELCByZXF1ZXN0VVJMLnN0cmluZygpLmFzY2lpKCku
ZGF0YSgpLCBkaWFnbm9zdGljS2V5LnV0ZjgoKS5kYXRhKCkpOwpAQCAtMjQ2LDcgKzI0OCw3IEBA
IHZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6cmVjb3JkUmV0cmlldmFsRmFpbHVyZSh1aW50
NjRfdCB3ZWJQYWdlSUQsIGNvbnN0IE5lCiB7CiAgICAgU3RyaW5nIGhhc2ggPSBrZXkuaGFzaEFz
U3RyaW5nKCk7CiAgICAgV2ViQ29yZTo6VVJMIHJlcXVlc3RVUkwgPSByZXF1ZXN0LnVybCgpOwot
ICAgIHF1ZXJ5V2FzRXZlclJlcXVlc3RlZChoYXNoLCBbdGhpcywgaGFzaCwgcmVxdWVzdFVSTCwg
d2ViUGFnZUlEXShib29sIHdhc1ByZXZpb3VzbHlSZXF1ZXN0ZWQsIGNvbnN0IE9wdGlvbmFsPE5l
dHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbj4mIHN0b3JlRGVjaXNpb24pIHsKKyAgICBxdWVyeVdh
c0V2ZXJSZXF1ZXN0ZWQoaGFzaCwgTmVlZFVuY2FjaGVkUmVhc29uOjpZZXMsIFt0aGlzLCBoYXNo
LCByZXF1ZXN0VVJMLCB3ZWJQYWdlSURdKGJvb2wgd2FzUHJldmlvdXNseVJlcXVlc3RlZCwgY29u
c3QgT3B0aW9uYWw8TmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uPiYgc3RvcmVEZWNpc2lvbikg
ewogICAgICAgICBpZiAod2FzUHJldmlvdXNseVJlcXVlc3RlZCkgewogICAgICAgICAgICAgU3Ry
aW5nIGRpYWdub3N0aWNLZXkgPSBzdG9yZURlY2lzaW9uVG9EaWFnbm9zdGljS2V5KHN0b3JlRGVj
aXNpb24udmFsdWUoKSk7CiAgICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQ
cm9jZXNzKSB3ZWJQYWdlSUQgJWxsdTogJXMgd2FzIHByZXZpb3VzbHkgcmVxdWVzdCBidXQgaXMg
bm90IGluIHRoZSBjYWNoZSwgcmVhc29uOiAlcyIsIHdlYlBhZ2VJRCwgcmVxdWVzdFVSTC5zdHJp
bmcoKS5hc2NpaSgpLmRhdGEoKSwgZGlhZ25vc3RpY0tleS51dGY4KCkuZGF0YSgpKTsKQEAgLTI5
MCwzNSArMjkyLDk4IEBAIHZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6bWFya0FzUmVxdWVz
dGVkKGNvbnN0IFN0cmluZyYgaGFzaCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwogCi0gICAgU3RyaW5nQ2FwdHVyZSBoYXNoQ2FwdHVyZShoYXNoKTsKLSAgICBkaXNwYXRjaF9h
c3luYyhtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBbdGhpcywgaGFzaENhcHR1cmVdIHsKLSAg
ICAgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJh
bnNhY3Rpb25Db3VudGVyOwotICAgICAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAg
ICAgICAgIGFkZEhhc2hUb0RhdGFiYXNlKGhhc2hDYXB0dXJlLnN0cmluZygpKTsKKyAgICBtX2hh
c2hlc1RvQWRkLmFkZChoYXNoKTsKKyAgICBpZiAoIW1fd3JpdGVUaW1lci5pc0FjdGl2ZSgpKQor
ICAgICAgICBtX3dyaXRlVGltZXIuc3RhcnRPbmVTaG90KG1pbldyaXRlSW50ZXJ2YWxTZWNvbmRz
KTsKK30KKworc3RhdGljIFZlY3RvcjxTdHJpbmc+IGlzb2xhdGVkQ29weShjb25zdCBIYXNoU2V0
PFN0cmluZz4mIHNldCkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiB2OworICAgIHYucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShzZXQuc2l6ZSgpKTsKKyAgICBzdGQ6OmZvcl9lYWNoKHNldC5iZWdpbigp
LCBzZXQuZW5kKCksIFsmdl0gKGNvbnN0IFN0cmluZyYgaGFzaCkgeworICAgICAgICB2LnVuY2hl
Y2tlZEFwcGVuZChoYXNoLmlzb2xhdGVkQ29weSgpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gdjsK
K30KKworc3RhdGljIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBOZXR3b3JrQ2FjaGU6OlN0b3Jl
RGVjaXNpb24+PiBpc29sYXRlZENvcHkoY29uc3QgSGFzaE1hcDxTdHJpbmcsIE5ldHdvcmtDYWNo
ZTo6U3RvcmVEZWNpc2lvbj4mIG1hcCkKK3sKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywg
TmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uPj4gdjsKKyAgICB2LnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobWFwLnNpemUoKSk7CisgICAgc3RkOjpmb3JfZWFjaChtYXAuYmVnaW4oKSwgbWFwLmVu
ZCgpLCBbJnZdIChjb25zdCBXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIE5ldHdvcmtDYWNoZTo6
U3RvcmVEZWNpc2lvbj4mIHBhaXIpIHsKKyAgICAgICAgdi51bmNoZWNrZWRBcHBlbmQoc3RkOjpt
YWtlX3BhaXIocGFpci5rZXkuaXNvbGF0ZWRDb3B5KCksIHBhaXIudmFsdWUpKTsKICAgICB9KTsK
KyAgICByZXR1cm4gdjsKK30KKwordm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjp3cml0ZVRp
bWVyRmlyZWQoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRv
IGhhc2hlc1RvQWRkID0gaXNvbGF0ZWRDb3B5KG1faGFzaGVzVG9BZGQpOworICAgIG1faGFzaGVz
VG9BZGQuY2xlYXIoKTsKKworICAgIGF1dG8gc3RvcmVEZWNpc2lvbnNUb0FkZCA9IGlzb2xhdGVk
Q29weShtX3N0b3JlRGVjaXNpb25zVG9BZGQpOworICAgIG1fc3RvcmVEZWNpc2lvbnNUb0FkZC5j
bGVhcigpOwogCiAgICAgc2hyaW5rSWZOZWVkZWQoKTsKKworICAgIGRpc3BhdGNoX2FzeW5jKG1f
YmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFt0aGlzLCBoYXNoZXNUb0FkZCwgc3RvcmVEZWNpc2lv
bnNUb0FkZF0geworICAgICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNz
QXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOworICAgICAgICBXZWJDb3JlOjpTUUxpdGVU
cmFuc2FjdGlvbiB3cml0ZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgICAgICB3cml0ZVRy
YW5zYWN0aW9uLmJlZ2luKCk7CisKKyAgICAgICAgYWRkSGFzaGVzVG9EYXRhYmFzZShoYXNoZXNU
b0FkZCk7CisgICAgICAgIGFkZFN0b3JlRGVjaXNpb25zVG9EYXRhYmFzZShzdG9yZURlY2lzaW9u
c1RvQWRkKTsKKworICAgICAgICB3cml0ZVRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIH0pOwog
fQogCi12b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnF1ZXJ5V2FzRXZlclJlcXVlc3RlZChj
b25zdCBTdHJpbmcmIGhhc2gsIGNvbnN0IFJlcXVlc3RlZENvbXBsZXRpb25IYW5kbGVyJiBjb21w
bGV0aW9uSGFuZGxlcikKK3ZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6cXVlcnlXYXNFdmVy
UmVxdWVzdGVkKGNvbnN0IFN0cmluZyYgaGFzaCwgTmVlZFVuY2FjaGVkUmVhc29uIG5lZWRVbmNh
Y2hlZFJlYXNvbiwgY29uc3QgUmVxdWVzdGVkQ29tcGxldGlvbkhhbmRsZXImIGNvbXBsZXRpb25I
YW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBhdXRvIGV2
ZXJSZXF1ZXN0ZWRRdWVyeSA9IHN0ZDo6bWFrZV91bmlxdWU8RXZlclJlcXVlc3RlZFF1ZXJ5PihF
dmVyUmVxdWVzdGVkUXVlcnkgeyBoYXNoLCBjb21wbGV0aW9uSGFuZGxlciB9KTsKKyAgICAvLyBR
dWVyeSBwZW5kaW5nIHdyaXRlcyBmaXJzdC4KKyAgICBib29sIHdhc0FscmVhZHlSZXF1ZXN0ZWQg
PSBtX2hhc2hlc1RvQWRkLmNvbnRhaW5zKGhhc2gpOworICAgIGlmICh3YXNBbHJlYWR5UmVxdWVz
dGVkICYmIG5lZWRVbmNhY2hlZFJlYXNvbiA9PSBOZWVkVW5jYWNoZWRSZWFzb246Ok5vKSB7Cisg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHRydWUsIE51bGxvcHQpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGlmIChuZWVkVW5jYWNoZWRSZWFzb24gPT0gTmVlZFVuY2FjaGVkUmVhc29u
OjpZZXMgJiYgbV9zdG9yZURlY2lzaW9uc1RvQWRkLmNvbnRhaW5zKGhhc2gpKSB7CisgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKHRydWUsIG1fc3RvcmVEZWNpc2lvbnNUb0FkZC5nZXQoaGFzaCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gUXVlcnkgdGhlIGRhdGFiYXNlLgor
ICAgIGF1dG8gZXZlclJlcXVlc3RlZFF1ZXJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxFdmVyUmVxdWVz
dGVkUXVlcnk+KEV2ZXJSZXF1ZXN0ZWRRdWVyeSB7IGhhc2gsIG5lZWRVbmNhY2hlZFJlYXNvbiA9
PSBOZWVkVW5jYWNoZWRSZWFzb246OlllcywgY29tcGxldGlvbkhhbmRsZXIgfSk7CiAgICAgYXV0
byYgcXVlcnkgPSAqZXZlclJlcXVlc3RlZFF1ZXJ5OwogICAgIG1fYWN0aXZlUXVlcmllcy5hZGQo
V1RGOjptb3ZlKGV2ZXJSZXF1ZXN0ZWRRdWVyeSkpOwotICAgIGRpc3BhdGNoX2FzeW5jKG1fYmFj
a2dyb3VuZElPUXVldWUuZ2V0KCksIFt0aGlzLCAmcXVlcnldIHsKKyAgICBkaXNwYXRjaF9hc3lu
YyhtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBbdGhpcywgd2FzQWxyZWFkeVJlcXVlc3RlZCwg
JnF1ZXJ5XSAoKSBtdXRhYmxlIHsKICAgICAgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb25J
blByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOwotICAgICAgICBib29sIHdh
c0FscmVhZHlSZXF1ZXN0ZWQgPSBmYWxzZTsKICAgICAgICAgT3B0aW9uYWw8TmV0d29ya0NhY2hl
OjpTdG9yZURlY2lzaW9uPiBzdG9yZURlY2lzaW9uOwogICAgICAgICBpZiAobV9kYXRhYmFzZS5p
c09wZW4oKSkgewotICAgICAgICAgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dChtX2RhdGFiYXNlLCBBU0NJSUxpdGVyYWwoIlNFTEVDVCBBbHJlYWR5UmVxdWVzdGVkLmhhc2gs
IHJlYXNvbiBGUk9NIEFscmVhZHlSZXF1ZXN0ZWQgTEVGVCBPVVRFUiBKT0lOIFVuY2FjaGVkUmVh
c29uIE9OIEFscmVhZHlSZXF1ZXN0ZWQuaGFzaD1VbmNhY2hlZFJlYXNvbi5oYXNoIFdIRVJFIEFs
cmVhZHlSZXF1ZXN0ZWQuaGFzaD0/IikpOwotICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgPT0gV2ViQ29yZTo6U1FMUmVzdWx0T2spIHsKLSAgICAgICAgICAgICAgICBzdGF0ZW1l
bnQuYmluZFRleHQoMSwgcXVlcnkuaGFzaCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXRlbWVu
dC5zdGVwKCkgPT0gV2ViQ29yZTo6U1FMUmVzdWx0Um93KSB7Ci0gICAgICAgICAgICAgICAgICAg
IHdhc0FscmVhZHlSZXF1ZXN0ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBzdG9yZURl
Y2lzaW9uID0gc3RhdGVtZW50LmlzQ29sdW1uTnVsbCgxKSA/IE5ldHdvcmtDYWNoZTo6U3RvcmVE
ZWNpc2lvbjo6WWVzIDogc3RhdGljX2Nhc3Q8TmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uPihz
dGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoIXdhc0FscmVhZHlSZXF1ZXN0ZWQpIHsKKyAgICAgICAgICAgICAgICBXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgiU0VMRUNU
IGhhc2ggRlJPTSBBbHJlYWR5UmVxdWVzdGVkIFdIRVJFIGhhc2g9PyIpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSA9PSBXZWJDb3JlOjpTUUxSZXN1bHRPaykgewor
ICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgcXVlcnkuaGFzaCk7Cisg
ICAgICAgICAgICAgICAgICAgIHdhc0FscmVhZHlSZXF1ZXN0ZWQgPSAoc3RhdGVtZW50LnN0ZXAo
KSA9PSBXZWJDb3JlOjpTUUxSZXN1bHRSb3cpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh3YXNBbHJlYWR5UmVxdWVzdGVkICYmIHF1ZXJ5Lm5lZWRVbmNhY2hlZFJl
YXNvbikgeworICAgICAgICAgICAgICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQobV9kYXRhYmFzZSwgQVNDSUlMaXRlcmFsKCJTRUxFQ1QgcmVhc29uIEZST00gVW5jYWNoZWRS
ZWFzb24gV0hFUkUgaGFzaD0/IikpOworICAgICAgICAgICAgICAgIHN0b3JlRGVjaXNpb24gPSBO
ZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb246OlllczsKKyAgICAgICAgICAgICAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSA9PSBXZWJDb3JlOjpTUUxSZXN1bHRPaykgeworICAgICAgICAgICAg
ICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgcXVlcnkuaGFzaCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpID09IFdlYkNvcmU6OlNRTFJlc3VsdFJvdykKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0b3JlRGVjaXNpb24gPSBzdGF0aWNfY2FzdDxOZXR3b3Jr
Q2FjaGU6OlN0b3JlRGVjaXNpb24+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgICAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbdGhpcywgJnF1ZXJ5LCB3YXNBbHJlYWR5UmVxdWVzdGVk
LCBzdG9yZURlY2lzaW9uXSB7CkBAIC0zNDUsMjEgKzQxMCw0NCBAQCB2b2lkIE5ldHdvcmtDYWNo
ZVN0YXRpc3RpY3M6OmNsZWFyKCkKICAgICB9KTsKIH0KIAotdm9pZCBOZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzOjphZGRIYXNoVG9EYXRhYmFzZShjb25zdCBTdHJpbmcmIGhhc2gpCit2b2lkIE5ldHdv
cmtDYWNoZVN0YXRpc3RpY3M6OmFkZEhhc2hlc1RvRGF0YWJhc2UoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGhhc2hlcykKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBBU1NF
UlQoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jl
c3MoKSk7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2UuaXNPcGVuKCkpOwogCiAgICAgV2ViQ29yZTo6
U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBBU0NJSUxpdGVyYWwoIklOU0VS
VCBPUiBJR05PUkUgSU5UTyBBbHJlYWR5UmVxdWVzdGVkIChoYXNoKSBWQUxVRVMgKD8pIikpOwot
ICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFdlYkNvcmU6OlNRTFJlc3VsdE9rKQorICAg
IGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFdlYkNvcmU6OlNRTFJlc3VsdE9rKSB7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Zm9yIChhdXRvJiBoYXNoIDogaGFzaGVzKSB7CisgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgx
LCBoYXNoKTsKKyAgICAgICAgaWYgKGV4ZWN1dGVTUUxTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAg
ICAgICAgICAgICsrbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQ7CisgICAgICAgIHN0YXRlbWVudC5y
ZXNldCgpOworICAgIH0KK30KKwordm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjphZGRTdG9y
ZURlY2lzaW9uc1RvRGF0YWJhc2UoY29uc3QgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIE5ldHdv
cmtDYWNoZTo6U3RvcmVEZWNpc2lvbj4+JiBzdG9yZURlY2lzaW9ucykKK3sKKyAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2VU
cmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CisgICAgQVNTRVJUKG1fZGF0YWJh
c2UuaXNPcGVuKCkpOwogCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIGhhc2gpOwotICAgIGlm
ICghZXhlY3V0ZVNRTFN0YXRlbWVudChzdGF0ZW1lbnQpKQorICAgIFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgQVNDSUlMaXRlcmFsKCJJTlNFUlQgT1IgUkVQ
TEFDRSBJTlRPIFVuY2FjaGVkUmVhc29uIChoYXNoLCByZWFzb24pIFZBTFVFUyAoPywgPykiKSk7
CisgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gV2ViQ29yZTo6U1FMUmVzdWx0T2spIHsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAK
LSAgICArK21fYXBwcm94aW1hdGVFbnRyeUNvdW50OworICAgIGZvciAoYXV0byYgcGFpciA6IHN0
b3JlRGVjaXNpb25zKSB7CisgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBwYWlyLmZpcnN0
KTsKKyAgICAgICAgc3RhdGVtZW50LmJpbmRJbnQoMiwgc3RhdGljX2Nhc3Q8aW50PihwYWlyLnNl
Y29uZCkpOworICAgICAgICBleGVjdXRlU1FMU3RhdGVtZW50KHN0YXRlbWVudCk7CisgICAgICAg
IHN0YXRlbWVudC5yZXNldCgpOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xD
b2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENv
Y29hLm1tCmluZGV4IDM0ODhkMWM3MDQ0Njc2NTRkMWFlMWY5Nzc3M2RkMGUxNWJmN2UzZWQuLmYw
MGE1ZmZiZDIwZjRlMTU5ZmY2Mjg2Y2Q2ZmM0ZDMzYTUyMDZmZWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCkBAIC0x
MDcsNyArMTA3LDcgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgp
CiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKICAgICBbcmVnaXN0cmF0aW9uRGljdGlvbmFy
eSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10gZm9yS2V5OldlYktpdE5l
dHdvcmtDYWNoZUVuYWJsZWREZWZhdWx0c0tleV07Ci0gICAgW3JlZ2lzdHJhdGlvbkRpY3Rpb25h
cnkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10gZm9yS2V5OldlYktpdE5l
dHdvcmtDYWNoZUVmZmljYWN5TG9nZ2luZ0VuYWJsZWREZWZhdWx0c0tleV07CisgICAgW3JlZ2lz
dHJhdGlvbkRpY3Rpb25hcnkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNd
IGZvcktleTpXZWJLaXROZXR3b3JrQ2FjaGVFZmZpY2FjeUxvZ2dpbmdFbmFibGVkRGVmYXVsdHNL
ZXldOwogI2VuZGlmCiAKICAgICBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRz
XSByZWdpc3RlckRlZmF1bHRzOnJlZ2lzdHJhdGlvbkRpY3Rpb25hcnldOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247881</attachid>
            <date>2015-03-04 12:31:27 -0800</date>
            <delta_ts>2015-03-05 10:15:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142186-20150304123108.patch</filename>
            <type>text/plain</type>
            <size>21629</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMDAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGM0YmVhNTgyZjIwMjE3MzNhNDg2YTlk
NDM3NDNlMGM1NzAxNzNlNTMuLjA4MDE5ZTNlNWNmM2Q3NjhiYjhkYTcwYzVjNmExOGYwMDA5YWY0
OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTUtMDMtMDQgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBOZXR3b3JrQ2FjaGUgZWZmaWNhY3kgbG9nZ2luZyBpcyB1
c2luZyB0b28gbXVjaCBDUFUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0MjE4NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTk2MzIwODA+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvSGFzaE1h
cC5oOgorICAgICAgICAoV1RGOjpjb3B5VG9WZWN0b3IpOgorICAgICAgICBBZGQgY29weVRvVmVj
dG9yKCkgdXRpbGl0eSBmdW5jdGlvbiBmb3IgSGFzaE1hcCB0aGF0IHVzZXMgYW4gc3RkOjpwYWly
PGtleSwgdmFsdWU+CisgICAgICAgIGFzIGVsZW1lbnQgdHlwZS4KKworICAgICAgICAqIHd0Zi90
ZXh0L1dURlN0cmluZy5oOgorICAgICAgICAoV1RGOjpTdHJpbmdDYXB0dXJlOjpTdHJpbmdDYXB0
dXJlKToKKyAgICAgICAgKFdURjo6U3RyaW5nQ2FwdHVyZTo6b3BlcmF0b3I9KToKKyAgICAgICAg
QWRkIGRlZmF1bHQgY29uc3RydWN0b3IgYW5kIGFzc2lnbm1lbnQgb3BlcmF0b3IgdG8gU3RyaW5n
Q2FwdHVyZSBzbyB0aGF0CisgICAgICAgIGl0IGNhbiBiZSB1c2VkIGluIGEgVmVjdG9yLgorCiAy
MDE1LTAzLTAzICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIHVudXNlZCBjb21wcmVzc2lvbiBjb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOTk2Zjg5NzM5
ZTA3NTM3ZmIzMmFkYjYzYTFmMDM0MmNjNzViMjcxMS4uOWJlMjU1OTBjNWE3MGUzZGNhODgwODI3
ZTFlMjFlMWJiYmRjZGM4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE1LTAzLTA0
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTmV0d29ya0NhY2hl
IGVmZmljYWN5IGxvZ2dpbmcgaXMgdXNpbmcgdG9vIG11Y2ggQ1BVCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDIxODYKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzE5NjMyMDgwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5ldHdvcmtDYWNoZSBlZmZpY2FjeSBsb2dnaW5nIHdhcyB1c2luZyB0b28gbXVj
aCBDUFUgbW9zdGx5IGR1ZSB0bworICAgICAgICBkYXRhYmFzZSB3cml0ZXMuIExvZ2dpbmcgd2Fz
IHVzaW5nIH4xMS4zJSBvZiB0aGUgTmV0d29ya1Byb2Nlc3MnCisgICAgICAgIENQVSB1c2FnZSAo
fjkuMiUgZm9yIHdyaXRlcyAvIH4xLjMlIGZvciByZWFkcykuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBidWZmZXJzIHdyaXRlcyByZXF1ZXN0cyBpbiBtZW1vcnkgYW5kIG9ubHkgd3JpdGVzIHRoZW0K
KyAgICAgICAgdG8gZGlzayBldmVyeSAxMCBzZWNvbmRzLiBXZSBhcmUgdGh1cyB3cml0aW5nIHRv
IHRoaXMgbGVzcyBmcmVxdWVudGx5CisgICAgICAgIGFuZCB3cml0aW5nIG1vcmUgYXQgb25jZSwg
aW4gYSBzaW5nbGUgU1FMIHRyYW5zYWN0aW9uLiBBZnRlciB0aGlzCisgICAgICAgIGNoYW5nZSwg
ZWZmaWNhY3kgbG9nZ2luZyBvbmx5IGFjY291bnRzIGZvciB+My41JSBvZiB0aGUgTmV0d29ya1By
b2Nlc3MnCisgICAgICAgIENQVSBhY3Rpdml0eSAoMS41JSBmb3Igd3JpdGVzIC8gMS4yJSBmb3Ig
cmVhZHMpLgorCisgICAgICAgIE5vdyB0aGF0IENQVSB1c2FnZSBpcyBtb3JlIGFjY2VwdGFibGUs
IHRoaXMgcGF0Y2ggcmUtZW5hYmxlcyB0aGUKKyAgICAgICAgbmV0d29yayBjYWNoZSBlZmZpY2lj
eSBsb2dnaW5nLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
U3RhdGlzdGljcy5oOgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RhdGlzdGljc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpleGVjdXRlU1FMQ29tbWFu
ZCk6CisgICAgICAgIChXZWJLaXQ6OmV4ZWN1dGVTUUxTdGF0ZW1lbnQpOgorICAgICAgICBDYWxs
IHN0ZXAoKSBpbnN0ZWFkIG9mIGV4ZWN1dGVDb21tYW5kKCkgYmVjYXVzZToKKyAgICAgICAgLSBU
aGUgaW5wdXQgc3RhdGVtZW50IGlzIGFscmVhZHkgcHJlcGFyZWQuCisgICAgICAgIC0gc3RlcCgp
IGRvZXMgbm90IGZpbmFsaXplKCkgdGhlIHN0YXRlbWVudCBhbmQgdGh1cyB3ZSBjYWxsZXIgY2Fu
CisgICAgICAgICAgcmV1c2UgaXQgYWZ0ZXIgY2FsbGluZyByZXNldCgpLgorCisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3MpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjppbml0aWFsaXplKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlU3RhdGlzdGljczo6Ym9vdHN0cmFwRnJvbU5ldHdv
cmtDYWNoZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnJlY29y
ZE5vdENhY2hpbmdSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRp
c3RpY3M6OnJlY29yZE5vdFVzaW5nQ2FjaGVGb3JSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhY2hlU3RhdGlzdGljczo6cmVjb3JkUmV0cmlldmFsRmFpbHVyZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6Om1hcmtBc1JlcXVlc3RlZCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OndyaXRlVGltZXJGaXJlZCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnF1ZXJ5V2FzRXZlclJlcXVl
c3RlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OmFkZEhhc2hl
c1RvRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjph
ZGRTdG9yZURlY2lzaW9uc1RvRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGVTdGF0aXN0aWNzOjphZGRIYXNoVG9EYXRhYmFzZSk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6
cmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCk6CisgICAgICAgIFJlLWVuYWJsZSB0aGUgbmV0
d29yayBjYWNoZSBlZmZpY2FjeSBsb2dnaW5nLgorCiAyMDE1LTAzLTA0ICBEZWJhcnNoaSBSYXkg
IDxkZWJhcnNoaXJAZ25vbWUub3JnPgogCiAgICAgICAgIFtHVEtdIFdlYlZpZXcgc2hvdWxkIGhv
bGQgYSByZWZlcmVuY2Ugb24gV2ViQ29udGV4dCBiZWNhdXNlIG5vbi1kZWZhdWx0IGNvbnRleHRz
IGFyZSBhIHJlYWxpdHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaCBiL1Nv
dXJjZS9XVEYvd3RmL0hhc2hNYXAuaAppbmRleCBjZWJkMjI1OWQwZGYxYTk1NDc1NmZhN2I3NGRi
NDdjZmQxZGJmMzA0Li5lMDJlNDE1NDM0ZGI1MjllZTIzMGJiODBlYWNhZWJmOWE3MGZiOWMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgKKysrIGIvU291cmNlL1dURi93dGYv
SGFzaE1hcC5oCkBAIC01MDAsNiArNTAwLDE5IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29u
c3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYSwgY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXCiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgdm9pZCBjb3B5VG9WZWN0b3IoY29u
c3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgY29sbGVjdGlvbiwgWSYgdmVjdG9yKQoreworICAg
IHR5cGVkZWYgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29uc3RfaXRlcmF0b3Ig
aXRlcmF0b3I7CisKKyAgICB2ZWN0b3IucmVzaXplKGNvbGxlY3Rpb24uc2l6ZSgpKTsKKworICAg
IGl0ZXJhdG9yIGl0ID0gY29sbGVjdGlvbi5iZWdpbigpOworICAgIGl0ZXJhdG9yIGVuZCA9IGNv
bGxlY3Rpb24uZW5kKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaXQgIT0gZW5kOyArK2l0
LCArK2kpCisgICAgICAgIHZlY3RvcltpXSA9IHsgKCppdCkua2V5LCAoKml0KS52YWx1ZSB9Owor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogaW5saW5lIHZvaWQgY29weUtleXNUb1ZlY3Rv
cihjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBjb2xsZWN0aW9uLCBZJiB2ZWN0b3IpCiB7
CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb25zdF9pdGVy
YXRvcjo6S2V5cyBpdGVyYXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RG
U3RyaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCmluZGV4IDM0MTIyMjJi
ZDkwYzEwMmIyZGI2N2I1NGUwNmIwMmQ5NTA3MjYxNGUuLmM4MDQ3NDJkY2NiOGIzZTdmYmJiMDZm
Njc0MTM2MTBlY2E2Y2I0ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3Ry
aW5nLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaApAQCAtNjM4LDE0ICs2
MzgsMTYgQEAgcHJpdmF0ZToKIC8vIEZJWE1FOiBSZW1vdmUgd2hlbiB3ZSBjYW4gdXNlIEMrKzE0
IGluaXRpYWxpemVkIGxhbWJkYSBjYXB0dXJlOiBbc3RyaW5nID0gc3RyaW5nLmlzb2xhdGVkQ29w
eSgpXS4KIGNsYXNzIFN0cmluZ0NhcHR1cmUgewogcHVibGljOgotICAgIGV4cGxpY2l0IFN0cmlu
Z0NhcHR1cmUoY29uc3QgU3RyaW5nJiBzdHJpbmcpIDogbV9zdHJpbmcoc3RyaW5nKSB7IH0KKyAg
ICBTdHJpbmdDYXB0dXJlKCkgPSBkZWZhdWx0OworICAgIFN0cmluZ0NhcHR1cmUoY29uc3QgU3Ry
aW5nJiBzdHJpbmcpIDogbV9zdHJpbmcoc3RyaW5nKSB7IH0KICAgICBleHBsaWNpdCBTdHJpbmdD
YXB0dXJlKFN0cmluZyYmIHN0cmluZykgOiBtX3N0cmluZyhzdHJpbmcpIHsgfQogICAgIFN0cmlu
Z0NhcHR1cmUoY29uc3QgU3RyaW5nQ2FwdHVyZSYgb3RoZXIpIDogbV9zdHJpbmcob3RoZXIubV9z
dHJpbmcuaXNvbGF0ZWRDb3B5KCkpIHsgfQogICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gbV9zdHJpbmc7IH0KICAgICBTdHJpbmcgcmVsZWFzZVN0cmluZygpIHsgcmV0
dXJuIFdURjo6bW92ZShtX3N0cmluZyk7IH0KIAorICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFN0
cmluZ0NhcHR1cmUmIG90aGVyKSB7IG1fc3RyaW5nID0gb3RoZXIubV9zdHJpbmcuaXNvbGF0ZWRD
b3B5KCk7IH0KKwogcHJpdmF0ZToKLSAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBTdHJpbmdDYXB0
dXJlJikgPSBkZWxldGU7CiAgICAgU3RyaW5nIG1fc3RyaW5nOwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGlj
cy5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rh
dGlzdGljcy5oCmluZGV4IGY5Yzc4MjViOWM2NWZhNzViZGI2MzQ1MTcyMGI2ODdiZTdmMzQzMzcu
LjhjYzFmMGIxZWZlYWUyZGU3NjZkZmUxNWQzMWE5NGY2MzQ2M2Q2NTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3Mu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVT
dGF0aXN0aWNzLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVLZXku
aCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTdG9yYWdlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9T
UUxpdGVEYXRhYmFzZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwpAQCAtNTcsMTQgKzU4LDE4IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBib290c3RyYXBGcm9tTmV0d29ya0NhY2hlKGNvbnN0IFN0cmluZyYg
bmV0d29ya0NhY2hlUGF0aCk7CiAgICAgdm9pZCBzaHJpbmtJZk5lZWRlZCgpOwogCi0gICAgdm9p
ZCBhZGRIYXNoVG9EYXRhYmFzZShjb25zdCBTdHJpbmcmIGhhc2gpOworICAgIHZvaWQgYWRkSGFz
aGVzVG9EYXRhYmFzZShjb25zdCBWZWN0b3I8U3RyaW5nQ2FwdHVyZT4mIGhhc2hlcyk7CisgICAg
dm9pZCBhZGRTdG9yZURlY2lzaW9uc1RvRGF0YWJhc2UoY29uc3QgVmVjdG9yPHN0ZDo6cGFpcjxT
dHJpbmdDYXB0dXJlLCBOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb24+PiYpOworICAgIHZvaWQg
d3JpdGVUaW1lckZpcmVkKCk7CiAKICAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9v
bCB3YXNFdmVyUmVxdWVzdGVkLCBjb25zdCBPcHRpb25hbDxOZXR3b3JrQ2FjaGU6OlN0b3JlRGVj
aXNpb24+Jik+IFJlcXVlc3RlZENvbXBsZXRpb25IYW5kbGVyOwotICAgIHZvaWQgcXVlcnlXYXNF
dmVyUmVxdWVzdGVkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJlcXVlc3RlZENvbXBsZXRpb25IYW5k
bGVyJik7CisgICAgZW51bSBjbGFzcyBOZWVkVW5jYWNoZWRSZWFzb24geyBObywgWWVzIH07Cisg
ICAgdm9pZCBxdWVyeVdhc0V2ZXJSZXF1ZXN0ZWQoY29uc3QgU3RyaW5nJiwgTmVlZFVuY2FjaGVk
UmVhc29uLCBjb25zdCBSZXF1ZXN0ZWRDb21wbGV0aW9uSGFuZGxlciYpOwogICAgIHZvaWQgbWFy
a0FzUmVxdWVzdGVkKGNvbnN0IFN0cmluZyYgaGFzaCk7CiAKICAgICBzdHJ1Y3QgRXZlclJlcXVl
c3RlZFF1ZXJ5IHsKICAgICAgICAgU3RyaW5nIGhhc2g7CisgICAgICAgIGJvb2wgbmVlZFVuY2Fj
aGVkUmVhc29uOwogICAgICAgICBSZXF1ZXN0ZWRDb21wbGV0aW9uSGFuZGxlciBjb21wbGV0aW9u
SGFuZGxlcjsKICAgICB9OwogCkBAIC03NSw2ICs4MCw5IEBAIHByaXZhdGU6CiAjZW5kaWYKICAg
ICBtdXRhYmxlIEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPGNvbnN0IEV2ZXJSZXF1ZXN0ZWRRdWVy
eT4+IG1fYWN0aXZlUXVlcmllczsKICAgICBXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZSBtX2RhdGFi
YXNlOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2hhc2hlc1RvQWRkOworICAgIEhhc2hNYXA8U3Ry
aW5nLCBOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb24+IG1fc3RvcmVEZWNpc2lvbnNUb0FkZDsK
KyAgICBXZWJDb3JlOjpUaW1lciBtX3dyaXRlVGltZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZVN0YXRpc3RpY3NDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3NDb2NvYS5tbQppbmRleCBlNzU3M2FjZGFl
YjU4YTFkOWNjOThiMWM3MmE1OTczNDZlYzY2OTg1Li5hOTAyY2NmMGI4ZGVmYmUxMWM1ZDk2MzEx
ZDRjZmRlNGNjNGE5MTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljc0NvY29hLm1tCkBA
IC00Myw2ICs0Myw3IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RhdGljIGNvbnN0IGNoYXIq
IG5ldHdvcmtDYWNoZVN0YXRpc3RpY3NEYXRhYmFzZU5hbWUgPSAiV2ViS2l0Q2FjaGVTdGF0aXN0
aWNzLmRiIjsKK3N0YXRpYyBjb25zdCBkb3VibGUgbWluV3JpdGVJbnRlcnZhbFNlY29uZHMgPSAx
MDsKIAogc3RhdGljIGJvb2wgZXhlY3V0ZVNRTENvbW1hbmQoV2ViQ29yZTo6U1FMaXRlRGF0YWJh
c2UmIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHNxbCkKIHsKQEAgLTUxLDggKzUyLDEwIEBAIHN0
YXRpYyBib29sIGV4ZWN1dGVTUUxDb21tYW5kKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlJiBkYXRh
YmFzZSwgY29uc3QgU3RyaW5nJiBzCiAgICAgQVNTRVJUKGRhdGFiYXNlLmlzT3BlbigpKTsKIAog
ICAgIGJvb2wgcmVzdWx0ID0gZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoc3FsKTsKLSAgICBpZiAo
IXJlc3VsdCkKKyAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICBMT0dfRVJST1IoIk5ldHdvcmsg
Y2FjaGUgc3RhdGlzdGljczogZmFpbGVkIHRvIGV4ZWN1dGUgc3RhdGVtZW50IFwiJXNcIiBlcnJv
ciBcIiVzXCIiLCBzcWwudXRmOCgpLmRhdGEoKSwgZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0
OwogfQpAQCAtNjMsMTEgKzY2LDEzIEBAIHN0YXRpYyBib29sIGV4ZWN1dGVTUUxTdGF0ZW1lbnQo
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQpCiAgICAgQVNTRVJUKFdlYkNvcmU6
OlNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwogICAg
IEFTU0VSVChzdGF0ZW1lbnQuZGF0YWJhc2UoKS5pc09wZW4oKSk7CiAKLSAgICBib29sIHJlc3Vs
dCA9IHN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpOwotICAgIGlmICghcmVzdWx0KQorICAgIGlm
IChzdGF0ZW1lbnQuc3RlcCgpICE9IFdlYkNvcmU6OlNRTFJlc3VsdERvbmUpIHsKICAgICAgICAg
TE9HX0VSUk9SKCJOZXR3b3JrIGNhY2hlIHN0YXRpc3RpY3M6IGZhaWxlZCB0byBleGVjdXRlIHN0
YXRlbWVudCBcIiVzXCIgZXJyb3IgXCIlc1wiIiwgc3RhdGVtZW50LnF1ZXJ5KCkudXRmOCgpLmRh
dGEoKSwgc3RhdGVtZW50LmRhdGFiYXNlKCkubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAotICAgIHJl
dHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxOZXR3
b3JrQ2FjaGVTdGF0aXN0aWNzPiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpvcGVuKGNvbnN0IFN0
cmluZyYgY2FjaGVQYXRoKQpAQCAtODAsNiArODUsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29y
a0NhY2hlU3RhdGlzdGljcz4gTmV0d29ya0NhY2hlU3RhdGlzdGljczo6b3Blbihjb25zdCBTdHJp
bgogCiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzKGNvbnN0
IFN0cmluZyYgZGF0YWJhc2VQYXRoKQogICAgIDogbV9iYWNrZ3JvdW5kSU9RdWV1ZShhZG9wdERp
c3BhdGNoKGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5DYWNoZS5TdGF0
aXN0aWNzLkJhY2tncm91bmQiLCBESVNQQVRDSF9RVUVVRV9TRVJJQUwpKSkKKyAgICAsIG1fd3Jp
dGVUaW1lcigqdGhpcywgJk5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OndyaXRlVGltZXJGaXJlZCkK
IHsKICAgICBkaXNwYXRjaF9zZXRfdGFyZ2V0X3F1ZXVlKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0
KCksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfQkFD
S0dST1VORCwgMCkpOwogCkBAIC0xMTUsNiArMTIxLDcgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzOjppbml0aWFsaXplKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoKQogICAgICAgICBX
ZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJh
bCgiU0VMRUNUIGNvdW50KCopIEZST00gQWxyZWFkeVJlcXVlc3RlZCIpKTsKICAgICAgICAgaWYg
KHN0YXRlbWVudC5wcmVwYXJlQW5kU3RlcCgpICE9IFdlYkNvcmU6OlNRTFJlc3VsdFJvdykgewog
ICAgICAgICAgICAgTE9HX0VSUk9SKCJOZXR3b3JrIGNhY2hlIHN0YXRpc3RpY3M6IEZhaWxlZCB0
byBjb3VudCB0aGUgbnVtYmVyIG9mIHJvd3MgaW4gQWxyZWFkeVJlcXVlc3RlZCB0YWJsZSIpOwor
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIApAQCAtMTQxLDE0ICsxNDgsMTggQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0
aWNzOjpib290c3RyYXBGcm9tTmV0d29ya0NhY2hlKGNvbnN0IFN0cmluZyYgbmV0d29ya0NhY2gK
IAogICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIEJvb3RzdHJhcHBpbmcg
dGhlIG5ldHdvcmsgY2FjaGUgc3RhdGlzdGljcyBkYXRhYmFzZSBmcm9tIHRoZSBuZXR3b3JrIGNh
Y2hlLi4uIik7CiAKKyAgICBWZWN0b3I8U3RyaW5nQ2FwdHVyZT4gaGFzaGVzOworICAgIHRyYXZl
cnNlQ2FjaGVGaWxlcyhuZXR3b3JrQ2FjaGVQYXRoLCBbJmhhc2hlc10oY29uc3QgU3RyaW5nJiBo
YXNoLCBjb25zdCBTdHJpbmcmKSB7CisgICAgICAgIGhhc2hlcy5hcHBlbmQoaGFzaCk7CisgICAg
fSk7CisKICAgICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRl
ciB0cmFuc2FjdGlvbkNvdW50ZXI7Ci0gICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb24gYm9v
dHN0cmFwVHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7Ci0gICAgYm9vdHN0cmFwVHJhbnNhY3Rpb24u
YmVnaW4oKTsKKyAgICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbiB3cml0ZVRyYW5zYWN0aW9u
KG1fZGF0YWJhc2UpOworICAgIHdyaXRlVHJhbnNhY3Rpb24uYmVnaW4oKTsKIAotICAgIHRyYXZl
cnNlQ2FjaGVGaWxlcyhuZXR3b3JrQ2FjaGVQYXRoLCBbdGhpc10oY29uc3QgU3RyaW5nJiBoYXNo
LCBjb25zdCBTdHJpbmcmKSB7Ci0gICAgICAgIGFkZEhhc2hUb0RhdGFiYXNlKGhhc2gpOwotICAg
IH0pOwotICAgIGJvb3RzdHJhcFRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIGFkZEhhc2hlc1Rv
RGF0YWJhc2UoaGFzaGVzKTsKKworICAgIHdyaXRlVHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAK
IHZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6c2hyaW5rSWZOZWVkZWQoKQpAQCAtMTc0LDE4
ICsxODUsOSBAQCB2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnJlY29yZE5vdENhY2hpbmdS
ZXNwb25zZShjb25zdCBOZXR3b3JrQ2FjaGVLZXkmIGtleQogewogICAgIEFTU0VSVChzdG9yZURl
Y2lzaW9uICE9IE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbjo6WWVzKTsKIAotICAgIFN0cmlu
Z0NhcHR1cmUgaGFzaENhcHR1cmUoa2V5Lmhhc2hBc1N0cmluZygpKTsKLSAgICBkaXNwYXRjaF9h
c3luYyhtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBbdGhpcywgaGFzaENhcHR1cmUsIHN0b3Jl
RGVjaXNpb25dIHsKLSAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1f
ZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgiSU5TRVJUIE9SIFJFUExBQ0UgSU5UTyBVbmNhY2hlZFJl
YXNvbiAoaGFzaCwgcmVhc29uKSBWQUxVRVMgKD8sID8pIikpOwotICAgICAgICBpZiAoc3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBXZWJDb3JlOjpTUUxSZXN1bHRPaykKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgaGFzaENhcHR1cmUuc3RyaW5nKCkp
OwotICAgICAgICBzdGF0ZW1lbnQuYmluZEludCgyLCBzdGF0aWNfY2FzdDxpbnQ+KHN0b3JlRGVj
aXNpb24pKTsKLSAgICAgICAgZXhlY3V0ZVNRTFN0YXRlbWVudChzdGF0ZW1lbnQpOwotICAgIH0p
OworICAgIG1fc3RvcmVEZWNpc2lvbnNUb0FkZC5zZXQoa2V5Lmhhc2hBc1N0cmluZygpLCBzdG9y
ZURlY2lzaW9uKTsKKyAgICBpZiAoIW1fd3JpdGVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBt
X3dyaXRlVGltZXIuc3RhcnRPbmVTaG90KG1pbldyaXRlSW50ZXJ2YWxTZWNvbmRzKTsKIH0KIAog
c3RhdGljIFN0cmluZyByZXRyaWV2ZURlY2lzaW9uVG9EaWFnbm9zdGljS2V5KE5ldHdvcmtDYWNo
ZTo6UmV0cmlldmVEZWNpc2lvbiByZXRyaWV2ZURlY2lzaW9uKQpAQCAtMjEyLDcgKzIxNCw3IEBA
IHZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6cmVjb3JkTm90VXNpbmdDYWNoZUZvclJlcXVl
c3QodWludDY0X3Qgd2ViUGFnZUlELCBjCiAKICAgICBTdHJpbmcgaGFzaCA9IGtleS5oYXNoQXNT
dHJpbmcoKTsKICAgICBXZWJDb3JlOjpVUkwgcmVxdWVzdFVSTCA9IHJlcXVlc3QudXJsKCk7Ci0g
ICAgcXVlcnlXYXNFdmVyUmVxdWVzdGVkKGhhc2gsIFt0aGlzLCBoYXNoLCByZXF1ZXN0VVJMLCB3
ZWJQYWdlSUQsIHJldHJpZXZlRGVjaXNpb25dKGJvb2wgd2FzRXZlclJlcXVlc3RlZCwgY29uc3Qg
T3B0aW9uYWw8TmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uPiYpIHsKKyAgICBxdWVyeVdhc0V2
ZXJSZXF1ZXN0ZWQoaGFzaCwgTmVlZFVuY2FjaGVkUmVhc29uOjpObywgW3RoaXMsIGhhc2gsIHJl
cXVlc3RVUkwsIHdlYlBhZ2VJRCwgcmV0cmlldmVEZWNpc2lvbl0oYm9vbCB3YXNFdmVyUmVxdWVz
dGVkLCBjb25zdCBPcHRpb25hbDxOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb24+JikgewogICAg
ICAgICBpZiAod2FzRXZlclJlcXVlc3RlZCkgewogICAgICAgICAgICAgU3RyaW5nIGRpYWdub3N0
aWNLZXkgPSByZXRyaWV2ZURlY2lzaW9uVG9EaWFnbm9zdGljS2V5KHJldHJpZXZlRGVjaXNpb24p
OwogICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgd2ViUGFn
ZUlEICVsbHU6ICVzIHdhcyBwcmV2aW91c2x5IHJlcXVlc3RlZCBidXQgd2UgYXJlIG5vdCB1c2lu
ZyB0aGUgY2FjaGUsIHJlYXNvbjogJXMiLCB3ZWJQYWdlSUQsIHJlcXVlc3RVUkwuc3RyaW5nKCku
YXNjaWkoKS5kYXRhKCksIGRpYWdub3N0aWNLZXkudXRmOCgpLmRhdGEoKSk7CkBAIC0yNDYsNyAr
MjQ4LDcgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpyZWNvcmRSZXRyaWV2YWxGYWls
dXJlKHVpbnQ2NF90IHdlYlBhZ2VJRCwgY29uc3QgTmUKIHsKICAgICBTdHJpbmcgaGFzaCA9IGtl
eS5oYXNoQXNTdHJpbmcoKTsKICAgICBXZWJDb3JlOjpVUkwgcmVxdWVzdFVSTCA9IHJlcXVlc3Qu
dXJsKCk7Ci0gICAgcXVlcnlXYXNFdmVyUmVxdWVzdGVkKGhhc2gsIFt0aGlzLCBoYXNoLCByZXF1
ZXN0VVJMLCB3ZWJQYWdlSURdKGJvb2wgd2FzUHJldmlvdXNseVJlcXVlc3RlZCwgY29uc3QgT3B0
aW9uYWw8TmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uPiYgc3RvcmVEZWNpc2lvbikgeworICAg
IHF1ZXJ5V2FzRXZlclJlcXVlc3RlZChoYXNoLCBOZWVkVW5jYWNoZWRSZWFzb246OlllcywgW3Ro
aXMsIGhhc2gsIHJlcXVlc3RVUkwsIHdlYlBhZ2VJRF0oYm9vbCB3YXNQcmV2aW91c2x5UmVxdWVz
dGVkLCBjb25zdCBPcHRpb25hbDxOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb24+JiBzdG9yZURl
Y2lzaW9uKSB7CiAgICAgICAgIGlmICh3YXNQcmV2aW91c2x5UmVxdWVzdGVkKSB7CiAgICAgICAg
ICAgICBTdHJpbmcgZGlhZ25vc3RpY0tleSA9IHN0b3JlRGVjaXNpb25Ub0RpYWdub3N0aWNLZXko
c3RvcmVEZWNpc2lvbi52YWx1ZSgpKTsKICAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIo
TmV0d29ya1Byb2Nlc3MpIHdlYlBhZ2VJRCAlbGx1OiAlcyB3YXMgcHJldmlvdXNseSByZXF1ZXN0
IGJ1dCBpcyBub3QgaW4gdGhlIGNhY2hlLCByZWFzb246ICVzIiwgd2ViUGFnZUlELCByZXF1ZXN0
VVJMLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBkaWFnbm9zdGljS2V5LnV0ZjgoKS5kYXRhKCkp
OwpAQCAtMjkwLDM1ICsyOTIsODAgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjptYXJr
QXNSZXF1ZXN0ZWQoY29uc3QgU3RyaW5nJiBoYXNoKQogewogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CiAKLSAgICBTdHJpbmdDYXB0dXJlIGhhc2hDYXB0dXJlKGhhc2gpOwotICAgIGRp
c3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFt0aGlzLCBoYXNoQ2FwdHVy
ZV0gewotICAgICAgICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291
bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7Ci0gICAgICAgIGlmIChtX2RhdGFiYXNlLmlzT3Blbigp
KQotICAgICAgICAgICAgYWRkSGFzaFRvRGF0YWJhc2UoaGFzaENhcHR1cmUuc3RyaW5nKCkpOwot
ICAgIH0pOworICAgIG1faGFzaGVzVG9BZGQuYWRkKGhhc2gpOworICAgIGlmICghbV93cml0ZVRp
bWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fd3JpdGVUaW1lci5zdGFydE9uZVNob3QobWluV3Jp
dGVJbnRlcnZhbFNlY29uZHMpOworfQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6Ondy
aXRlVGltZXJGaXJlZCgpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IFZlY3RvcjxTdHJpbmdDYXB0dXJlPiBoYXNoZXNUb0FkZDsKKyAgICBjb3B5VG9WZWN0b3IobV9o
YXNoZXNUb0FkZCwgaGFzaGVzVG9BZGQpOworICAgIG1faGFzaGVzVG9BZGQuY2xlYXIoKTsKKwor
ICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nQ2FwdHVyZSwgTmV0d29ya0NhY2hlOjpTdG9yZURl
Y2lzaW9uPj4gc3RvcmVEZWNpc2lvbnNUb0FkZDsKKyAgICBjb3B5VG9WZWN0b3IobV9zdG9yZURl
Y2lzaW9uc1RvQWRkLCBzdG9yZURlY2lzaW9uc1RvQWRkKTsKKyAgICBtX3N0b3JlRGVjaXNpb25z
VG9BZGQuY2xlYXIoKTsKIAogICAgIHNocmlua0lmTmVlZGVkKCk7CisKKyAgICBkaXNwYXRjaF9h
c3luYyhtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBbdGhpcywgaGFzaGVzVG9BZGQsIHN0b3Jl
RGVjaXNpb25zVG9BZGRdIHsKKyAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uSW5Q
cm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKKyAgICAgICAgV2ViQ29yZTo6
U1FMaXRlVHJhbnNhY3Rpb24gd3JpdGVUcmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICAgICAg
d3JpdGVUcmFuc2FjdGlvbi5iZWdpbigpOworCisgICAgICAgIGFkZEhhc2hlc1RvRGF0YWJhc2Uo
aGFzaGVzVG9BZGQpOworICAgICAgICBhZGRTdG9yZURlY2lzaW9uc1RvRGF0YWJhc2Uoc3RvcmVE
ZWNpc2lvbnNUb0FkZCk7CisKKyAgICAgICAgd3JpdGVUcmFuc2FjdGlvbi5jb21taXQoKTsKKyAg
ICB9KTsKIH0KIAotdm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpxdWVyeVdhc0V2ZXJSZXF1
ZXN0ZWQoY29uc3QgU3RyaW5nJiBoYXNoLCBjb25zdCBSZXF1ZXN0ZWRDb21wbGV0aW9uSGFuZGxl
ciYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnF1ZXJ5
V2FzRXZlclJlcXVlc3RlZChjb25zdCBTdHJpbmcmIGhhc2gsIE5lZWRVbmNhY2hlZFJlYXNvbiBu
ZWVkVW5jYWNoZWRSZWFzb24sIGNvbnN0IFJlcXVlc3RlZENvbXBsZXRpb25IYW5kbGVyJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAg
YXV0byBldmVyUmVxdWVzdGVkUXVlcnkgPSBzdGQ6Om1ha2VfdW5pcXVlPEV2ZXJSZXF1ZXN0ZWRR
dWVyeT4oRXZlclJlcXVlc3RlZFF1ZXJ5IHsgaGFzaCwgY29tcGxldGlvbkhhbmRsZXIgfSk7Cisg
ICAgLy8gUXVlcnkgcGVuZGluZyB3cml0ZXMgZmlyc3QuCisgICAgYm9vbCB3YXNBbHJlYWR5UmVx
dWVzdGVkID0gbV9oYXNoZXNUb0FkZC5jb250YWlucyhoYXNoKTsKKyAgICBpZiAod2FzQWxyZWFk
eVJlcXVlc3RlZCAmJiBuZWVkVW5jYWNoZWRSZWFzb24gPT0gTmVlZFVuY2FjaGVkUmVhc29uOjpO
bykgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih0cnVlLCBOdWxsb3B0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAobmVlZFVuY2FjaGVkUmVhc29uID09IE5lZWRVbmNhY2hl
ZFJlYXNvbjo6WWVzICYmIG1fc3RvcmVEZWNpc2lvbnNUb0FkZC5jb250YWlucyhoYXNoKSkgewor
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih0cnVlLCBtX3N0b3JlRGVjaXNpb25zVG9BZGQuZ2V0
KGhhc2gpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFF1ZXJ5IHRoZSBkYXRh
YmFzZS4KKyAgICBhdXRvIGV2ZXJSZXF1ZXN0ZWRRdWVyeSA9IHN0ZDo6bWFrZV91bmlxdWU8RXZl
clJlcXVlc3RlZFF1ZXJ5PihFdmVyUmVxdWVzdGVkUXVlcnkgeyBoYXNoLCBuZWVkVW5jYWNoZWRS
ZWFzb24gPT0gTmVlZFVuY2FjaGVkUmVhc29uOjpZZXMsIGNvbXBsZXRpb25IYW5kbGVyIH0pOwog
ICAgIGF1dG8mIHF1ZXJ5ID0gKmV2ZXJSZXF1ZXN0ZWRRdWVyeTsKICAgICBtX2FjdGl2ZVF1ZXJp
ZXMuYWRkKFdURjo6bW92ZShldmVyUmVxdWVzdGVkUXVlcnkpKTsKLSAgICBkaXNwYXRjaF9hc3lu
YyhtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBbdGhpcywgJnF1ZXJ5XSB7CisgICAgZGlzcGF0
Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgW3RoaXMsIHdhc0FscmVhZHlSZXF1
ZXN0ZWQsICZxdWVyeV0gKCkgbXV0YWJsZSB7CiAgICAgICAgIFdlYkNvcmU6OlNRTGl0ZVRyYW5z
YWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0aW9uQ291bnRlcjsKLSAgICAgICAg
Ym9vbCB3YXNBbHJlYWR5UmVxdWVzdGVkID0gZmFsc2U7CiAgICAgICAgIE9wdGlvbmFsPE5ldHdv
cmtDYWNoZTo6U3RvcmVEZWNpc2lvbj4gc3RvcmVEZWNpc2lvbjsKICAgICAgICAgaWYgKG1fZGF0
YWJhc2UuaXNPcGVuKCkpIHsKLSAgICAgICAgICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBz
dGF0ZW1lbnQobV9kYXRhYmFzZSwgQVNDSUlMaXRlcmFsKCJTRUxFQ1QgQWxyZWFkeVJlcXVlc3Rl
ZC5oYXNoLCByZWFzb24gRlJPTSBBbHJlYWR5UmVxdWVzdGVkIExFRlQgT1VURVIgSk9JTiBVbmNh
Y2hlZFJlYXNvbiBPTiBBbHJlYWR5UmVxdWVzdGVkLmhhc2g9VW5jYWNoZWRSZWFzb24uaGFzaCBX
SEVSRSBBbHJlYWR5UmVxdWVzdGVkLmhhc2g9PyIpKTsKLSAgICAgICAgICAgIGlmIChzdGF0ZW1l
bnQucHJlcGFyZSgpID09IFdlYkNvcmU6OlNRTFJlc3VsdE9rKSB7Ci0gICAgICAgICAgICAgICAg
c3RhdGVtZW50LmJpbmRUZXh0KDEsIHF1ZXJ5Lmhhc2gpOwotICAgICAgICAgICAgICAgIGlmIChz
dGF0ZW1lbnQuc3RlcCgpID09IFdlYkNvcmU6OlNRTFJlc3VsdFJvdykgewotICAgICAgICAgICAg
ICAgICAgICB3YXNBbHJlYWR5UmVxdWVzdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
c3RvcmVEZWNpc2lvbiA9IHN0YXRlbWVudC5pc0NvbHVtbk51bGwoMSkgPyBOZXR3b3JrQ2FjaGU6
OlN0b3JlRGVjaXNpb246OlllcyA6IHN0YXRpY19jYXN0PE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNp
c2lvbj4oc3RhdGVtZW50LmdldENvbHVtbkludCgxKSk7Ci0gICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKCF3YXNBbHJlYWR5UmVxdWVzdGVkKSB7CisgICAgICAgICAgICAgICAgV2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBBU0NJSUxpdGVyYWwo
IlNFTEVDVCBoYXNoIEZST00gQWxyZWFkeVJlcXVlc3RlZCBXSEVSRSBoYXNoPT8iKSk7CisgICAg
ICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgPT0gV2ViQ29yZTo6U1FMUmVzdWx0
T2spIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIHF1ZXJ5Lmhh
c2gpOworICAgICAgICAgICAgICAgICAgICB3YXNBbHJlYWR5UmVxdWVzdGVkID0gKHN0YXRlbWVu
dC5zdGVwKCkgPT0gV2ViQ29yZTo6U1FMUmVzdWx0Um93KTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAod2FzQWxyZWFkeVJlcXVlc3RlZCAmJiBxdWVyeS5uZWVkVW5j
YWNoZWRSZWFzb24pIHsKKyAgICAgICAgICAgICAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQg
c3RhdGVtZW50KG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgiU0VMRUNUIHJlYXNvbiBGUk9NIFVu
Y2FjaGVkUmVhc29uIFdIRVJFIGhhc2g9PyIpKTsKKyAgICAgICAgICAgICAgICBzdG9yZURlY2lz
aW9uID0gTmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uOjpZZXM7CisgICAgICAgICAgICAgICAg
aWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgPT0gV2ViQ29yZTo6U1FMUmVzdWx0T2spIHsKKyAgICAg
ICAgICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIHF1ZXJ5Lmhhc2gpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSA9PSBXZWJDb3JlOjpTUUxSZXN1bHRS
b3cpCisgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZURlY2lzaW9uID0gc3RhdGljX2Nhc3Q8
TmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uPihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3RoaXMsICZxdWVyeSwgd2FzQWxyZWFkeVJl
cXVlc3RlZCwgc3RvcmVEZWNpc2lvbl0gewpAQCAtMzQ1LDIxICszOTIsNDQgQEAgdm9pZCBOZXR3
b3JrQ2FjaGVTdGF0aXN0aWNzOjpjbGVhcigpCiAgICAgfSk7CiB9CiAKLXZvaWQgTmV0d29ya0Nh
Y2hlU3RhdGlzdGljczo6YWRkSGFzaFRvRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBoYXNoKQordm9p
ZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjphZGRIYXNoZXNUb0RhdGFiYXNlKGNvbnN0IFZlY3Rv
cjxTdHJpbmdDYXB0dXJlPiYgaGFzaGVzKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwogICAgIEFTU0VSVChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5z
YWN0aW9uSW5Qcm9ncmVzcygpKTsKICAgICBBU1NFUlQobV9kYXRhYmFzZS5pc09wZW4oKSk7CiAK
ICAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIEFTQ0lJ
TGl0ZXJhbCgiSU5TRVJUIE9SIElHTk9SRSBJTlRPIEFscmVhZHlSZXF1ZXN0ZWQgKGhhc2gpIFZB
TFVFUyAoPykiKSk7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gV2ViQ29yZTo6U1FM
UmVzdWx0T2spCisgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gV2ViQ29yZTo6U1FMUmVz
dWx0T2spIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsK
KyAgICB9CiAKLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgaGFzaCk7Ci0gICAgaWYgKCFleGVj
dXRlU1FMU3RhdGVtZW50KHN0YXRlbWVudCkpCisgICAgZm9yIChhdXRvJiBoYXNoIDogaGFzaGVz
KSB7CisgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBoYXNoLnN0cmluZygpKTsKKyAgICAg
ICAgaWYgKGV4ZWN1dGVTUUxTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICAgICAgICAgICsrbV9h
cHByb3hpbWF0ZUVudHJ5Q291bnQ7CisgICAgICAgIHN0YXRlbWVudC5yZXNldCgpOworICAgIH0K
K30KKwordm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjphZGRTdG9yZURlY2lzaW9uc1RvRGF0
YWJhc2UoY29uc3QgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmdDYXB0dXJlLCBOZXR3b3JrQ2FjaGU6
OlN0b3JlRGVjaXNpb24+PiYgc3RvcmVEZWNpc2lvbnMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CisgICAgQVNTRVJUKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6
aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworICAgIEFTU0VSVChtX2RhdGFiYXNlLmlzT3Bl
bigpKTsKKworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgQVNDSUlMaXRlcmFsKCJJTlNFUlQgT1IgUkVQTEFDRSBJTlRPIFVuY2FjaGVkUmVhc29uICho
YXNoLCByZWFzb24pIFZBTFVFUyAoPywgPykiKSk7CisgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJl
KCkgIT0gV2ViQ29yZTo6U1FMUmVzdWx0T2spIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICArK21fYXBwcm94aW1hdGVFbnRyeUNv
dW50OworICAgIGZvciAoYXV0byYgcGFpciA6IHN0b3JlRGVjaXNpb25zKSB7CisgICAgICAgIHN0
YXRlbWVudC5iaW5kVGV4dCgxLCBwYWlyLmZpcnN0LnN0cmluZygpKTsKKyAgICAgICAgc3RhdGVt
ZW50LmJpbmRJbnQoMiwgc3RhdGljX2Nhc3Q8aW50PihwYWlyLnNlY29uZCkpOworICAgICAgICBl
eGVjdXRlU1FMU3RhdGVtZW50KHN0YXRlbWVudCk7CisgICAgICAgIHN0YXRlbWVudC5yZXNldCgp
OworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCmluZGV4IDM0ODhk
MWM3MDQ0Njc2NTRkMWFlMWY5Nzc3M2RkMGUxNWJmN2UzZWQuLmYwMGE1ZmZiZDIwZjRlMTU5ZmY2
Mjg2Y2Q2ZmM0ZDMzYTUyMDZmZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCkBAIC0xMDcsNyArMTA3LDcgQEAgc3Rh
dGljIHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpCiAKICNpZiBFTkFCTEUoTkVU
V09SS19DQUNIRSkKICAgICBbcmVnaXN0cmF0aW9uRGljdGlvbmFyeSBzZXRPYmplY3Q6W05TTnVt
YmVyIG51bWJlcldpdGhCb29sOllFU10gZm9yS2V5OldlYktpdE5ldHdvcmtDYWNoZUVuYWJsZWRE
ZWZhdWx0c0tleV07Ci0gICAgW3JlZ2lzdHJhdGlvbkRpY3Rpb25hcnkgc2V0T2JqZWN0OltOU051
bWJlciBudW1iZXJXaXRoQm9vbDpOT10gZm9yS2V5OldlYktpdE5ldHdvcmtDYWNoZUVmZmljYWN5
TG9nZ2luZ0VuYWJsZWREZWZhdWx0c0tleV07CisgICAgW3JlZ2lzdHJhdGlvbkRpY3Rpb25hcnkg
c2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdIGZvcktleTpXZWJLaXROZXR3
b3JrQ2FjaGVFZmZpY2FjeUxvZ2dpbmdFbmFibGVkRGVmYXVsdHNLZXldOwogI2VuZGlmCiAKICAg
ICBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSByZWdpc3RlckRlZmF1bHRz
OnJlZ2lzdHJhdGlvbkRpY3Rpb25hcnldOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247963</attachid>
            <date>2015-03-05 10:15:37 -0800</date>
            <delta_ts>2015-03-05 11:00:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142186-20150305101517.patch</filename>
            <type>text/plain</type>
            <size>20289</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMDgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDYyODVjMTE4MjU3MzczOTQxYTM2OGY5
OGM3NWU4Mzk5ZDg2MzlhODAuLmRhNWEwOTc4MGJlZjA4OWQ1YmYxYTE2MDhlMWViZTNiY2MxMTZl
MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTUtMDMtMDQgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBOZXR3b3JrQ2FjaGUgZWZmaWNhY3kgbG9nZ2luZyBpcyB1
c2luZyB0b28gbXVjaCBDUFUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0MjE4NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTk2MzIwODA+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgKiB3dGYvSGFzaE1h
cC5oOgorICAgICAgICAoV1RGOjpjb3B5VG9WZWN0b3IpOgorICAgICAgICBBZGQgY29weVRvVmVj
dG9yKCkgdXRpbGl0eSBmdW5jdGlvbiBmb3IgSGFzaE1hcCB0aGF0IHVzZXMgYW4gc3RkOjpwYWly
PGtleSwgdmFsdWU+CisgICAgICAgIGFzIGVsZW1lbnQgdHlwZS4KKworICAgICAgICAqIHd0Zi90
ZXh0L1dURlN0cmluZy5oOgorICAgICAgICAoV1RGOjpTdHJpbmdDYXB0dXJlOjpTdHJpbmdDYXB0
dXJlKToKKyAgICAgICAgKFdURjo6U3RyaW5nQ2FwdHVyZTo6b3BlcmF0b3I9KToKKyAgICAgICAg
QWRkIGRlZmF1bHQgY29uc3RydWN0b3IgYW5kIGFzc2lnbm1lbnQgb3BlcmF0b3IgdG8gU3RyaW5n
Q2FwdHVyZSBzbyB0aGF0CisgICAgICAgIGl0IGNhbiBiZSB1c2VkIGluIGEgVmVjdG9yLgorCiAy
MDE1LTAzLTA1ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBT
dXBwb3J0IFdvcmtRdWV1ZSBRT1MgY2xhc3NlcyBvbiBNYXZlcmlja3MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBl
MWNkZDM5NmRlYmUzZTExYzg3ZDllMWMwZTU2MTFmMDM1NGM4MzcxLi5mNzNkMjIxMTgxZjliOGZk
NGMxOGM0YmUyZGQ1YzVkMzA5NzJmNmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIw
MTUtMDMtMDQgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBOZXR3
b3JrQ2FjaGUgZWZmaWNhY3kgbG9nZ2luZyBpcyB1c2luZyB0b28gbXVjaCBDUFUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjE4NgorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMTk2MzIwODA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW50dGkgS29p
dmlzdG8uCisKKyAgICAgICAgTmV0d29ya0NhY2hlIGVmZmljYWN5IGxvZ2dpbmcgd2FzIHVzaW5n
IHRvbyBtdWNoIENQVSBtb3N0bHkgZHVlIHRvCisgICAgICAgIGRhdGFiYXNlIHdyaXRlcy4gTG9n
Z2luZyB3YXMgdXNpbmcgfjExLjMlIG9mIHRoZSBOZXR3b3JrUHJvY2VzcycKKyAgICAgICAgQ1BV
IHVzYWdlICh+OS4yJSBmb3Igd3JpdGVzIC8gfjEuMyUgZm9yIHJlYWRzKS4KKworICAgICAgICBU
aGlzIHBhdGNoIGJ1ZmZlcnMgd3JpdGVzIHJlcXVlc3RzIGluIG1lbW9yeSBhbmQgb25seSB3cml0
ZXMgdGhlbQorICAgICAgICB0byBkaXNrIGV2ZXJ5IDEwIHNlY29uZHMuIFdlIGFyZSB0aHVzIHdy
aXRpbmcgdG8gdGhpcyBsZXNzIGZyZXF1ZW50bHkKKyAgICAgICAgYW5kIHdyaXRpbmcgbW9yZSBh
dCBvbmNlLCBpbiBhIHNpbmdsZSBTUUwgdHJhbnNhY3Rpb24uIEFmdGVyIHRoaXMKKyAgICAgICAg
Y2hhbmdlLCBlZmZpY2FjeSBsb2dnaW5nIG9ubHkgYWNjb3VudHMgZm9yIH4zLjUlIG9mIHRoZSBO
ZXR3b3JrUHJvY2VzcycKKyAgICAgICAgQ1BVIGFjdGl2aXR5ICgxLjUlIGZvciB3cml0ZXMgLyAx
LjIlIGZvciByZWFkcykuCisKKyAgICAgICAgTm93IHRoYXQgQ1BVIHVzYWdlIGlzIG1vcmUgYWNj
ZXB0YWJsZSwgdGhpcyBwYXRjaCByZS1lbmFibGVzIHRoZQorICAgICAgICBuZXR3b3JrIGNhY2hl
IGVmZmljaWN5IGxvZ2dpbmcuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVTdGF0aXN0aWNzLmg6CisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OmV4ZWN1dGVT
UUxDb21tYW5kKToKKyAgICAgICAgKFdlYktpdDo6ZXhlY3V0ZVNRTFN0YXRlbWVudCk6CisgICAg
ICAgIENhbGwgc3RlcCgpIGluc3RlYWQgb2YgZXhlY3V0ZUNvbW1hbmQoKSBiZWNhdXNlOgorICAg
ICAgICAtIFRoZSBpbnB1dCBzdGF0ZW1lbnQgaXMgYWxyZWFkeSBwcmVwYXJlZC4KKyAgICAgICAg
LSBzdGVwKCkgZG9lcyBub3QgZmluYWxpemUoKSB0aGUgc3RhdGVtZW50IGFuZCB0aHVzIHdlIGNh
bGxlciBjYW4KKyAgICAgICAgICByZXVzZSBpdCBhZnRlciBjYWxsaW5nIHJlc2V0KCkuCisKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlU3RhdGlzdGljczo6TmV0d29ya0NhY2hlU3RhdGlz
dGljcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OmluaXRpYWxp
emUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpib290c3RyYXBG
cm9tTmV0d29ya0NhY2hlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlU3RhdGlzdGlj
czo6cmVjb3JkTm90Q2FjaGluZ1Jlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
Y2hlU3RhdGlzdGljczo6cmVjb3JkTm90VXNpbmdDYWNoZUZvclJlcXVlc3QpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpyZWNvcmRSZXRyaWV2YWxGYWlsdXJlKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlU3RhdGlzdGljczo6bWFya0FzUmVxdWVzdGVk
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlU3RhdGlzdGljczo6d3JpdGVUaW1lckZp
cmVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlU3RhdGlzdGljczo6cXVlcnlXYXNF
dmVyUmVxdWVzdGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlU3RhdGlzdGljczo6
YWRkSGFzaGVzVG9EYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZVN0YXRp
c3RpY3M6OmFkZFN0b3JlRGVjaXNpb25zVG9EYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYWNoZVN0YXRpc3RpY3M6OmFkZEhhc2hUb0RhdGFiYXNlKTogRGVsZXRlZC4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tOgorICAgICAgICAo
V2ViS2l0OjpyZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKToKKyAgICAgICAgUmUtZW5hYmxl
IHRoZSBuZXR3b3JrIGNhY2hlIGVmZmljYWN5IGxvZ2dpbmcuCisKIDIwMTUtMDMtMDUgIEFudHRp
IEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFN3aXRjaCBOZXR3b3JrQ2Fj
aGVTdG9yYWdlIHRvIFdvcmtRdWV1ZSBhYnN0cmFjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvSGFzaE1hcC5oIGIvU291cmNlL1dURi93dGYvSGFzaE1hcC5oCmluZGV4IGNlYmQyMjU5
ZDBkZjFhOTU0NzU2ZmE3Yjc0ZGI0N2NmZDFkYmYzMDQuLmUwMmU0MTU0MzRkYjUyOWVlMjMwYmI4
MGVhY2FlYmY5YTcwZmI5YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgKQEAgLTUwMCw2ICs1MDAsMTkgQEAgaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBhLCBjb25zdCBI
YXNoTWFwPFQsIFUsIFYsIFcKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB2
b2lkIGNvcHlUb1ZlY3Rvcihjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBjb2xsZWN0aW9u
LCBZJiB2ZWN0b3IpCit7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcs
IFg+Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKKworICAgIHZlY3Rvci5yZXNpemUoY29sbGVj
dGlvbi5zaXplKCkpOworCisgICAgaXRlcmF0b3IgaXQgPSBjb2xsZWN0aW9uLmJlZ2luKCk7Cisg
ICAgaXRlcmF0b3IgZW5kID0gY29sbGVjdGlvbi5lbmQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpdCAhPSBlbmQ7ICsraXQsICsraSkKKyAgICAgICAgdmVjdG9yW2ldID0geyAoKml0KS5r
ZXksICgqaXQpLnZhbHVlIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiBpbmxpbmUg
dm9pZCBjb3B5S2V5c1RvVmVjdG9yKGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGNvbGxl
Y3Rpb24sIFkmIHZlY3RvcikKIHsKICAgICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwg
ViwgVywgWD46OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGl0ZXJhdG9yOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3Ry
aW5nLmgKaW5kZXggMzQxMjIyMmJkOTBjMTAyYjJkYjY3YjU0ZTA2YjAyZDk1MDcyNjE0ZS4uOTlh
NDQ4ZjM1M2UxOGY0N2RkMzdiZDViOTU5NjhmN2MxODE4MWUyMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0
cmluZy5oCkBAIC02MzgsMTQgKzYzOCwxNiBAQCBwcml2YXRlOgogLy8gRklYTUU6IFJlbW92ZSB3
aGVuIHdlIGNhbiB1c2UgQysrMTQgaW5pdGlhbGl6ZWQgbGFtYmRhIGNhcHR1cmU6IFtzdHJpbmcg
PSBzdHJpbmcuaXNvbGF0ZWRDb3B5KCldLgogY2xhc3MgU3RyaW5nQ2FwdHVyZSB7CiBwdWJsaWM6
Ci0gICAgZXhwbGljaXQgU3RyaW5nQ2FwdHVyZShjb25zdCBTdHJpbmcmIHN0cmluZykgOiBtX3N0
cmluZyhzdHJpbmcpIHsgfQorICAgIFN0cmluZ0NhcHR1cmUoKSB7IH0KKyAgICBTdHJpbmdDYXB0
dXJlKGNvbnN0IFN0cmluZyYgc3RyaW5nKSA6IG1fc3RyaW5nKHN0cmluZykgeyB9CiAgICAgZXhw
bGljaXQgU3RyaW5nQ2FwdHVyZShTdHJpbmcmJiBzdHJpbmcpIDogbV9zdHJpbmcoc3RyaW5nKSB7
IH0KICAgICBTdHJpbmdDYXB0dXJlKGNvbnN0IFN0cmluZ0NhcHR1cmUmIG90aGVyKSA6IG1fc3Ry
aW5nKG90aGVyLm1fc3RyaW5nLmlzb2xhdGVkQ29weSgpKSB7IH0KICAgICBjb25zdCBTdHJpbmcm
IHN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nOyB9CiAgICAgU3RyaW5nIHJlbGVhc2VT
dHJpbmcoKSB7IHJldHVybiBXVEY6Om1vdmUobV9zdHJpbmcpOyB9CiAKKyAgICB2b2lkIG9wZXJh
dG9yPShjb25zdCBTdHJpbmdDYXB0dXJlJiBvdGhlcikgeyBtX3N0cmluZyA9IG90aGVyLm1fc3Ry
aW5nLmlzb2xhdGVkQ29weSgpOyB9CisKIHByaXZhdGU6Ci0gICAgdm9pZCBvcGVyYXRvcj0oY29u
c3QgU3RyaW5nQ2FwdHVyZSYpID0gZGVsZXRlOwogICAgIFN0cmluZyBtX3N0cmluZzsKIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZVN0YXRpc3RpY3MuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZVN0YXRpc3RpY3MuaAppbmRleCBmOWM3ODI1YjljNjVmYTc1YmRiNjM0NTE3MjBi
Njg3YmU3ZjM0MzM3Li44Y2MxZjBiMWVmZWFlMmRlNzY2ZGZlMTVkMzFhOTRmNjM0NjNkNjUzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdGF0aXN0aWNzLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlU3RhdGlzdGljcy5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiTmV0
d29ya0NhY2hlS2V5LmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RvcmFnZS5oIgogI2luY2x1
ZGUgPFdlYkNvcmUvU1FMaXRlRGF0YWJhc2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKQEAgLTU3LDE0
ICs1OCwxOCBAQCBwcml2YXRlOgogICAgIHZvaWQgYm9vdHN0cmFwRnJvbU5ldHdvcmtDYWNoZShj
b25zdCBTdHJpbmcmIG5ldHdvcmtDYWNoZVBhdGgpOwogICAgIHZvaWQgc2hyaW5rSWZOZWVkZWQo
KTsKIAotICAgIHZvaWQgYWRkSGFzaFRvRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBoYXNoKTsKKyAg
ICB2b2lkIGFkZEhhc2hlc1RvRGF0YWJhc2UoY29uc3QgVmVjdG9yPFN0cmluZ0NhcHR1cmU+JiBo
YXNoZXMpOworICAgIHZvaWQgYWRkU3RvcmVEZWNpc2lvbnNUb0RhdGFiYXNlKGNvbnN0IFZlY3Rv
cjxzdGQ6OnBhaXI8U3RyaW5nQ2FwdHVyZSwgTmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uPj4m
KTsKKyAgICB2b2lkIHdyaXRlVGltZXJGaXJlZCgpOwogCiAgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKGJvb2wgd2FzRXZlclJlcXVlc3RlZCwgY29uc3QgT3B0aW9uYWw8TmV0d29ya0Nh
Y2hlOjpTdG9yZURlY2lzaW9uPiYpPiBSZXF1ZXN0ZWRDb21wbGV0aW9uSGFuZGxlcjsKLSAgICB2
b2lkIHF1ZXJ5V2FzRXZlclJlcXVlc3RlZChjb25zdCBTdHJpbmcmLCBjb25zdCBSZXF1ZXN0ZWRD
b21wbGV0aW9uSGFuZGxlciYpOworICAgIGVudW0gY2xhc3MgTmVlZFVuY2FjaGVkUmVhc29uIHsg
Tm8sIFllcyB9OworICAgIHZvaWQgcXVlcnlXYXNFdmVyUmVxdWVzdGVkKGNvbnN0IFN0cmluZyYs
IE5lZWRVbmNhY2hlZFJlYXNvbiwgY29uc3QgUmVxdWVzdGVkQ29tcGxldGlvbkhhbmRsZXImKTsK
ICAgICB2b2lkIG1hcmtBc1JlcXVlc3RlZChjb25zdCBTdHJpbmcmIGhhc2gpOwogCiAgICAgc3Ry
dWN0IEV2ZXJSZXF1ZXN0ZWRRdWVyeSB7CiAgICAgICAgIFN0cmluZyBoYXNoOworICAgICAgICBi
b29sIG5lZWRVbmNhY2hlZFJlYXNvbjsKICAgICAgICAgUmVxdWVzdGVkQ29tcGxldGlvbkhhbmRs
ZXIgY29tcGxldGlvbkhhbmRsZXI7CiAgICAgfTsKIApAQCAtNzUsNiArODAsOSBAQCBwcml2YXRl
OgogI2VuZGlmCiAgICAgbXV0YWJsZSBIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBFdmVy
UmVxdWVzdGVkUXVlcnk+PiBtX2FjdGl2ZVF1ZXJpZXM7CiAgICAgV2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2UgbV9kYXRhYmFzZTsKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9oYXNoZXNUb0FkZDsKKyAg
ICBIYXNoTWFwPFN0cmluZywgTmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uPiBtX3N0b3JlRGVj
aXNpb25zVG9BZGQ7CisgICAgV2ViQ29yZTo6VGltZXIgbV93cml0ZVRpbWVyOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0KaW5k
ZXggZTc1NzNhY2RhZWI1OGExZDljYzk4YjFjNzJhNTk3MzQ2ZWM2Njk4NS4uZjgwNjkwNDk1ZTUz
MTY1NzNhYTU4Y2JkNjBlZDVhYjExN2E3MTJlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljc0NvY29hLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3Rp
Y3NDb2NvYS5tbQpAQCAtNDMsNiArNDMsNyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRp
YyBjb25zdCBjaGFyKiBuZXR3b3JrQ2FjaGVTdGF0aXN0aWNzRGF0YWJhc2VOYW1lID0gIldlYktp
dENhY2hlU3RhdGlzdGljcy5kYiI7CitzdGF0aWMgY29uc3Qgc3RkOjpjaHJvbm86Om1pbGxpc2Vj
b25kcyBtaW5pbnVtV3JpdGVJbnRlcnZhbCA9IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMTAw
MDApOwogCiBzdGF0aWMgYm9vbCBleGVjdXRlU1FMQ29tbWFuZChXZWJDb3JlOjpTUUxpdGVEYXRh
YmFzZSYgZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgc3FsKQogewpAQCAtNjMsMTEgKzY0LDEyIEBA
IHN0YXRpYyBib29sIGV4ZWN1dGVTUUxTdGF0ZW1lbnQoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
JiBzdGF0ZW1lbnQpCiAgICAgQVNTRVJUKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6
aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwogICAgIEFTU0VSVChzdGF0ZW1lbnQuZGF0YWJh
c2UoKS5pc09wZW4oKSk7CiAKLSAgICBib29sIHJlc3VsdCA9IHN0YXRlbWVudC5leGVjdXRlQ29t
bWFuZCgpOwotICAgIGlmICghcmVzdWx0KQorICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpICE9IFdl
YkNvcmU6OlNRTFJlc3VsdERvbmUpIHsKICAgICAgICAgTE9HX0VSUk9SKCJOZXR3b3JrIGNhY2hl
IHN0YXRpc3RpY3M6IGZhaWxlZCB0byBleGVjdXRlIHN0YXRlbWVudCBcIiVzXCIgZXJyb3IgXCIl
c1wiIiwgc3RhdGVtZW50LnF1ZXJ5KCkudXRmOCgpLmRhdGEoKSwgc3RhdGVtZW50LmRhdGFiYXNl
KCkubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPE5l
dHdvcmtDYWNoZVN0YXRpc3RpY3M+IE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6Om9wZW4oY29uc3Qg
U3RyaW5nJiBjYWNoZVBhdGgpCkBAIC04MCw2ICs4Miw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxOZXR3
b3JrQ2FjaGVTdGF0aXN0aWNzPiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpvcGVuKGNvbnN0IFN0
cmluCiAKIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6Ok5ldHdvcmtDYWNoZVN0YXRpc3RpY3MoY29u
c3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgpCiAgICAgOiBtX2JhY2tncm91bmRJT1F1ZXVlKGFkb3B0
RGlzcGF0Y2goZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LkNhY2hlLlN0
YXRpc3RpY3MuQmFja2dyb3VuZCIsIERJU1BBVENIX1FVRVVFX1NFUklBTCkpKQorICAgICwgbV93
cml0ZVRpbWVyKCp0aGlzLCAmTmV0d29ya0NhY2hlU3RhdGlzdGljczo6d3JpdGVUaW1lckZpcmVk
KQogewogICAgIGRpc3BhdGNoX3NldF90YXJnZXRfcXVldWUobV9iYWNrZ3JvdW5kSU9RdWV1ZS5n
ZXQoKSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9C
QUNLR1JPVU5ELCAwKSk7CiAKQEAgLTE0MSwxNCArMTQ0LDE4IEBAIHZvaWQgTmV0d29ya0NhY2hl
U3RhdGlzdGljczo6Ym9vdHN0cmFwRnJvbU5ldHdvcmtDYWNoZShjb25zdCBTdHJpbmcmIG5ldHdv
cmtDYWNoCiAKICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBCb290c3Ry
YXBwaW5nIHRoZSBuZXR3b3JrIGNhY2hlIHN0YXRpc3RpY3MgZGF0YWJhc2UgZnJvbSB0aGUgbmV0
d29yayBjYWNoZS4uLiIpOwogCisgICAgVmVjdG9yPFN0cmluZ0NhcHR1cmU+IGhhc2hlczsKKyAg
ICB0cmF2ZXJzZUNhY2hlRmlsZXMobmV0d29ya0NhY2hlUGF0aCwgWyZoYXNoZXNdKGNvbnN0IFN0
cmluZyYgaGFzaCwgY29uc3QgU3RyaW5nJikgeworICAgICAgICBoYXNoZXMuYXBwZW5kKGhhc2gp
OworICAgIH0pOworCiAgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0
b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOwotICAgIFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0
aW9uIGJvb3RzdHJhcFRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwotICAgIGJvb3RzdHJhcFRyYW5z
YWN0aW9uLmJlZ2luKCk7CisgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb24gd3JpdGVUcmFu
c2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB3cml0ZVRyYW5zYWN0aW9uLmJlZ2luKCk7CiAKLSAg
ICB0cmF2ZXJzZUNhY2hlRmlsZXMobmV0d29ya0NhY2hlUGF0aCwgW3RoaXNdKGNvbnN0IFN0cmlu
ZyYgaGFzaCwgY29uc3QgU3RyaW5nJikgewotICAgICAgICBhZGRIYXNoVG9EYXRhYmFzZShoYXNo
KTsKLSAgICB9KTsKLSAgICBib290c3RyYXBUcmFuc2FjdGlvbi5jb21taXQoKTsKKyAgICBhZGRI
YXNoZXNUb0RhdGFiYXNlKGhhc2hlcyk7CisKKyAgICB3cml0ZVRyYW5zYWN0aW9uLmNvbW1pdCgp
OwogfQogCiB2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnNocmlua0lmTmVlZGVkKCkKQEAg
LTE3NCwxOCArMTgxLDkgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpyZWNvcmROb3RD
YWNoaW5nUmVzcG9uc2UoY29uc3QgTmV0d29ya0NhY2hlS2V5JiBrZXkKIHsKICAgICBBU1NFUlQo
c3RvcmVEZWNpc2lvbiAhPSBOZXR3b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb246Olllcyk7CiAKLSAg
ICBTdHJpbmdDYXB0dXJlIGhhc2hDYXB0dXJlKGtleS5oYXNoQXNTdHJpbmcoKSk7Ci0gICAgZGlz
cGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgW3RoaXMsIGhhc2hDYXB0dXJl
LCBzdG9yZURlY2lzaW9uXSB7Ci0gICAgICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudChtX2RhdGFiYXNlLCBBU0NJSUxpdGVyYWwoIklOU0VSVCBPUiBSRVBMQUNFIElOVE8gVW5j
YWNoZWRSZWFzb24gKGhhc2gsIHJlYXNvbikgVkFMVUVTICg/LCA/KSIpKTsKLSAgICAgICAgaWYg
KHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gV2ViQ29yZTo6U1FMUmVzdWx0T2spCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIGhhc2hDYXB0dXJlLnN0
cmluZygpKTsKLSAgICAgICAgc3RhdGVtZW50LmJpbmRJbnQoMiwgc3RhdGljX2Nhc3Q8aW50Pihz
dG9yZURlY2lzaW9uKSk7Ci0gICAgICAgIGV4ZWN1dGVTUUxTdGF0ZW1lbnQoc3RhdGVtZW50KTsK
LSAgICB9KTsKKyAgICBtX3N0b3JlRGVjaXNpb25zVG9BZGQuc2V0KGtleS5oYXNoQXNTdHJpbmco
KSwgc3RvcmVEZWNpc2lvbik7CisgICAgaWYgKCFtX3dyaXRlVGltZXIuaXNBY3RpdmUoKSkKKyAg
ICAgICAgbV93cml0ZVRpbWVyLnN0YXJ0T25lU2hvdChtaW5pbnVtV3JpdGVJbnRlcnZhbCk7CiB9
CiAKIHN0YXRpYyBTdHJpbmcgcmV0cmlldmVEZWNpc2lvblRvRGlhZ25vc3RpY0tleShOZXR3b3Jr
Q2FjaGU6OlJldHJpZXZlRGVjaXNpb24gcmV0cmlldmVEZWNpc2lvbikKQEAgLTIxMiw3ICsyMTAs
NyBAQCB2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OnJlY29yZE5vdFVzaW5nQ2FjaGVGb3JS
ZXF1ZXN0KHVpbnQ2NF90IHdlYlBhZ2VJRCwgYwogCiAgICAgU3RyaW5nIGhhc2ggPSBrZXkuaGFz
aEFzU3RyaW5nKCk7CiAgICAgV2ViQ29yZTo6VVJMIHJlcXVlc3RVUkwgPSByZXF1ZXN0LnVybCgp
OwotICAgIHF1ZXJ5V2FzRXZlclJlcXVlc3RlZChoYXNoLCBbdGhpcywgaGFzaCwgcmVxdWVzdFVS
TCwgd2ViUGFnZUlELCByZXRyaWV2ZURlY2lzaW9uXShib29sIHdhc0V2ZXJSZXF1ZXN0ZWQsIGNv
bnN0IE9wdGlvbmFsPE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbj4mKSB7CisgICAgcXVlcnlX
YXNFdmVyUmVxdWVzdGVkKGhhc2gsIE5lZWRVbmNhY2hlZFJlYXNvbjo6Tm8sIFt0aGlzLCBoYXNo
LCByZXF1ZXN0VVJMLCB3ZWJQYWdlSUQsIHJldHJpZXZlRGVjaXNpb25dKGJvb2wgd2FzRXZlclJl
cXVlc3RlZCwgY29uc3QgT3B0aW9uYWw8TmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uPiYpIHsK
ICAgICAgICAgaWYgKHdhc0V2ZXJSZXF1ZXN0ZWQpIHsKICAgICAgICAgICAgIFN0cmluZyBkaWFn
bm9zdGljS2V5ID0gcmV0cmlldmVEZWNpc2lvblRvRGlhZ25vc3RpY0tleShyZXRyaWV2ZURlY2lz
aW9uKTsKICAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHdl
YlBhZ2VJRCAlbGx1OiAlcyB3YXMgcHJldmlvdXNseSByZXF1ZXN0ZWQgYnV0IHdlIGFyZSBub3Qg
dXNpbmcgdGhlIGNhY2hlLCByZWFzb246ICVzIiwgd2ViUGFnZUlELCByZXF1ZXN0VVJMLnN0cmlu
ZygpLmFzY2lpKCkuZGF0YSgpLCBkaWFnbm9zdGljS2V5LnV0ZjgoKS5kYXRhKCkpOwpAQCAtMjQ2
LDcgKzI0NCw3IEBAIHZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6cmVjb3JkUmV0cmlldmFs
RmFpbHVyZSh1aW50NjRfdCB3ZWJQYWdlSUQsIGNvbnN0IE5lCiB7CiAgICAgU3RyaW5nIGhhc2gg
PSBrZXkuaGFzaEFzU3RyaW5nKCk7CiAgICAgV2ViQ29yZTo6VVJMIHJlcXVlc3RVUkwgPSByZXF1
ZXN0LnVybCgpOwotICAgIHF1ZXJ5V2FzRXZlclJlcXVlc3RlZChoYXNoLCBbdGhpcywgaGFzaCwg
cmVxdWVzdFVSTCwgd2ViUGFnZUlEXShib29sIHdhc1ByZXZpb3VzbHlSZXF1ZXN0ZWQsIGNvbnN0
IE9wdGlvbmFsPE5ldHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbj4mIHN0b3JlRGVjaXNpb24pIHsK
KyAgICBxdWVyeVdhc0V2ZXJSZXF1ZXN0ZWQoaGFzaCwgTmVlZFVuY2FjaGVkUmVhc29uOjpZZXMs
IFt0aGlzLCBoYXNoLCByZXF1ZXN0VVJMLCB3ZWJQYWdlSURdKGJvb2wgd2FzUHJldmlvdXNseVJl
cXVlc3RlZCwgY29uc3QgT3B0aW9uYWw8TmV0d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uPiYgc3Rv
cmVEZWNpc2lvbikgewogICAgICAgICBpZiAod2FzUHJldmlvdXNseVJlcXVlc3RlZCkgewogICAg
ICAgICAgICAgU3RyaW5nIGRpYWdub3N0aWNLZXkgPSBzdG9yZURlY2lzaW9uVG9EaWFnbm9zdGlj
S2V5KHN0b3JlRGVjaXNpb24udmFsdWUoKSk7CiAgICAgICAgICAgICBMT0coTmV0d29ya0NhY2hl
LCAiKE5ldHdvcmtQcm9jZXNzKSB3ZWJQYWdlSUQgJWxsdTogJXMgd2FzIHByZXZpb3VzbHkgcmVx
dWVzdCBidXQgaXMgbm90IGluIHRoZSBjYWNoZSwgcmVhc29uOiAlcyIsIHdlYlBhZ2VJRCwgcmVx
dWVzdFVSTC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgZGlhZ25vc3RpY0tleS51dGY4KCkuZGF0
YSgpKTsKQEAgLTI5MCwzNCArMjg4LDc3IEBAIHZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6
bWFya0FzUmVxdWVzdGVkKGNvbnN0IFN0cmluZyYgaGFzaCkKIHsKICAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwogCi0gICAgU3RyaW5nQ2FwdHVyZSBoYXNoQ2FwdHVyZShoYXNoKTsKLSAg
ICBkaXNwYXRjaF9hc3luYyhtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBbdGhpcywgaGFzaENh
cHR1cmVdIHsKLSAgICAgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb25JblByb2dyZXNzQXV0
b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOwotICAgICAgICBpZiAobV9kYXRhYmFzZS5pc09w
ZW4oKSkKLSAgICAgICAgICAgIGFkZEhhc2hUb0RhdGFiYXNlKGhhc2hDYXB0dXJlLnN0cmluZygp
KTsKLSAgICB9KTsKKyAgICBtX2hhc2hlc1RvQWRkLmFkZChoYXNoKTsKKyAgICBpZiAoIW1fd3Jp
dGVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3dyaXRlVGltZXIuc3RhcnRPbmVTaG90KG1p
bmludW1Xcml0ZUludGVydmFsKTsKK30KKwordm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjp3
cml0ZVRpbWVyRmlyZWQoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAg
ICBWZWN0b3I8U3RyaW5nQ2FwdHVyZT4gaGFzaGVzVG9BZGQ7CisgICAgY29weVRvVmVjdG9yKG1f
aGFzaGVzVG9BZGQsIGhhc2hlc1RvQWRkKTsKKyAgICBtX2hhc2hlc1RvQWRkLmNsZWFyKCk7CisK
KyAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZ0NhcHR1cmUsIE5ldHdvcmtDYWNoZTo6U3RvcmVE
ZWNpc2lvbj4+IHN0b3JlRGVjaXNpb25zVG9BZGQ7CisgICAgY29weVRvVmVjdG9yKG1fc3RvcmVE
ZWNpc2lvbnNUb0FkZCwgc3RvcmVEZWNpc2lvbnNUb0FkZCk7CisgICAgbV9zdG9yZURlY2lzaW9u
c1RvQWRkLmNsZWFyKCk7CiAKICAgICBzaHJpbmtJZk5lZWRlZCgpOworCisgICAgZGlzcGF0Y2hf
YXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgW3RoaXMsIGhhc2hlc1RvQWRkLCBzdG9y
ZURlY2lzaW9uc1RvQWRkXSB7CisgICAgICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbklu
UHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7CisgICAgICAgIFdlYkNvcmU6
OlNRTGl0ZVRyYW5zYWN0aW9uIHdyaXRlVHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgICAg
IHdyaXRlVHJhbnNhY3Rpb24uYmVnaW4oKTsKKworICAgICAgICBhZGRIYXNoZXNUb0RhdGFiYXNl
KGhhc2hlc1RvQWRkKTsKKyAgICAgICAgYWRkU3RvcmVEZWNpc2lvbnNUb0RhdGFiYXNlKHN0b3Jl
RGVjaXNpb25zVG9BZGQpOworCisgICAgICAgIHdyaXRlVHJhbnNhY3Rpb24uY29tbWl0KCk7Cisg
ICAgfSk7CiB9CiAKLXZvaWQgTmV0d29ya0NhY2hlU3RhdGlzdGljczo6cXVlcnlXYXNFdmVyUmVx
dWVzdGVkKGNvbnN0IFN0cmluZyYgaGFzaCwgY29uc3QgUmVxdWVzdGVkQ29tcGxldGlvbkhhbmRs
ZXImIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjpxdWVy
eVdhc0V2ZXJSZXF1ZXN0ZWQoY29uc3QgU3RyaW5nJiBoYXNoLCBOZWVkVW5jYWNoZWRSZWFzb24g
bmVlZFVuY2FjaGVkUmVhc29uLCBjb25zdCBSZXF1ZXN0ZWRDb21wbGV0aW9uSGFuZGxlciYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAg
IGF1dG8gZXZlclJlcXVlc3RlZFF1ZXJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxFdmVyUmVxdWVzdGVk
UXVlcnk+KEV2ZXJSZXF1ZXN0ZWRRdWVyeSB7IGhhc2gsIGNvbXBsZXRpb25IYW5kbGVyIH0pOwor
ICAgIC8vIFF1ZXJ5IHBlbmRpbmcgd3JpdGVzIGZpcnN0LgorICAgIGJvb2wgd2FzQWxyZWFkeVJl
cXVlc3RlZCA9IG1faGFzaGVzVG9BZGQuY29udGFpbnMoaGFzaCk7CisgICAgaWYgKHdhc0FscmVh
ZHlSZXF1ZXN0ZWQgJiYgbmVlZFVuY2FjaGVkUmVhc29uID09IE5lZWRVbmNhY2hlZFJlYXNvbjo6
Tm8pIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSwgTnVsbG9wdCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgaWYgKG5lZWRVbmNhY2hlZFJlYXNvbiA9PSBOZWVkVW5jYWNo
ZWRSZWFzb246OlllcyAmJiBtX3N0b3JlRGVjaXNpb25zVG9BZGQuY29udGFpbnMoaGFzaCkpIHsK
KyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSwgbV9zdG9yZURlY2lzaW9uc1RvQWRkLmdl
dChoYXNoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBRdWVyeSB0aGUgZGF0
YWJhc2UuCisgICAgYXV0byBldmVyUmVxdWVzdGVkUXVlcnkgPSBzdGQ6Om1ha2VfdW5pcXVlPEV2
ZXJSZXF1ZXN0ZWRRdWVyeT4oRXZlclJlcXVlc3RlZFF1ZXJ5IHsgaGFzaCwgbmVlZFVuY2FjaGVk
UmVhc29uID09IE5lZWRVbmNhY2hlZFJlYXNvbjo6WWVzLCBjb21wbGV0aW9uSGFuZGxlciB9KTsK
ICAgICBhdXRvJiBxdWVyeSA9ICpldmVyUmVxdWVzdGVkUXVlcnk7CiAgICAgbV9hY3RpdmVRdWVy
aWVzLmFkZChXVEY6Om1vdmUoZXZlclJlcXVlc3RlZFF1ZXJ5KSk7Ci0gICAgZGlzcGF0Y2hfYXN5
bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgW3RoaXMsICZxdWVyeV0geworICAgIGRpc3Bh
dGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFt0aGlzLCB3YXNBbHJlYWR5UmVx
dWVzdGVkLCAmcXVlcnldICgpIG11dGFibGUgewogICAgICAgICBXZWJDb3JlOjpTUUxpdGVUcmFu
c2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7Ci0gICAgICAg
IGJvb2wgd2FzQWxyZWFkeVJlcXVlc3RlZCA9IGZhbHNlOwogICAgICAgICBPcHRpb25hbDxOZXR3
b3JrQ2FjaGU6OlN0b3JlRGVjaXNpb24+IHN0b3JlRGVjaXNpb247CiAgICAgICAgIGlmIChtX2Rh
dGFiYXNlLmlzT3BlbigpKSB7Ci0gICAgICAgICAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQg
c3RhdGVtZW50KG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgiU0VMRUNUIEFscmVhZHlSZXF1ZXN0
ZWQuaGFzaCwgcmVhc29uIEZST00gQWxyZWFkeVJlcXVlc3RlZCBMRUZUIE9VVEVSIEpPSU4gVW5j
YWNoZWRSZWFzb24gT04gQWxyZWFkeVJlcXVlc3RlZC5oYXNoPVVuY2FjaGVkUmVhc29uLmhhc2gg
V0hFUkUgQWxyZWFkeVJlcXVlc3RlZC5oYXNoPT8iKSk7Ci0gICAgICAgICAgICBpZiAoc3RhdGVt
ZW50LnByZXBhcmUoKSA9PSBXZWJDb3JlOjpTUUxSZXN1bHRPaykgewotICAgICAgICAgICAgICAg
IHN0YXRlbWVudC5iaW5kVGV4dCgxLCBxdWVyeS5oYXNoKTsKLSAgICAgICAgICAgICAgICBpZiAo
c3RhdGVtZW50LnN0ZXAoKSA9PSBXZWJDb3JlOjpTUUxSZXN1bHRSb3cpIHsKLSAgICAgICAgICAg
ICAgICAgICAgd2FzQWxyZWFkeVJlcXVlc3RlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
IHN0b3JlRGVjaXNpb24gPSBzdGF0ZW1lbnQuaXNDb2x1bW5OdWxsKDEpID8gTmV0d29ya0NhY2hl
OjpTdG9yZURlY2lzaW9uOjpZZXMgOiBzdGF0aWNfY2FzdDxOZXR3b3JrQ2FjaGU6OlN0b3JlRGVj
aXNpb24+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOworICAgICAgICAgICAgaWYgKCF3YXNB
bHJlYWR5UmVxdWVzdGVkKSB7CisgICAgICAgICAgICAgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVt
ZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBBU0NJSUxpdGVyYWwoIlNFTEVDVCBoYXNoIEZST00g
QWxyZWFkeVJlcXVlc3RlZCBXSEVSRSBoYXNoPT8iKSk7CisgICAgICAgICAgICAgICAgaWYgKHN0
YXRlbWVudC5wcmVwYXJlKCkgPT0gV2ViQ29yZTo6U1FMUmVzdWx0T2spIHsKKyAgICAgICAgICAg
ICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIHF1ZXJ5Lmhhc2gpOworICAgICAgICAgICAg
ICAgICAgICB3YXNBbHJlYWR5UmVxdWVzdGVkID0gKHN0YXRlbWVudC5zdGVwKCkgPT0gV2ViQ29y
ZTo6U1FMUmVzdWx0Um93KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAod2FzQWxyZWFkeVJlcXVlc3RlZCAmJiBxdWVyeS5uZWVkVW5jYWNoZWRSZWFz
b24pIHsKKyAgICAgICAgICAgICAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50
KG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgiU0VMRUNUIHJlYXNvbiBGUk9NIFVuY2FjaGVkUmVh
c29uIFdIRVJFIGhhc2g9PyIpKTsKKyAgICAgICAgICAgICAgICBzdG9yZURlY2lzaW9uID0gTmV0
d29ya0NhY2hlOjpTdG9yZURlY2lzaW9uOjpZZXM7CisgICAgICAgICAgICAgICAgaWYgKHN0YXRl
bWVudC5wcmVwYXJlKCkgPT0gV2ViQ29yZTo6U1FMUmVzdWx0T2spIHsKKyAgICAgICAgICAgICAg
ICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIHF1ZXJ5Lmhhc2gpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSA9PSBXZWJDb3JlOjpTUUxSZXN1bHRSb3cpCisgICAg
ICAgICAgICAgICAgICAgICAgICBzdG9yZURlY2lzaW9uID0gc3RhdGljX2Nhc3Q8TmV0d29ya0Nh
Y2hlOjpTdG9yZURlY2lzaW9uPihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTM0NSw3ICszODYsNyBAQCB2
b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OmNsZWFyKCkKICAgICB9KTsKIH0KIAotdm9pZCBO
ZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjphZGRIYXNoVG9EYXRhYmFzZShjb25zdCBTdHJpbmcmIGhh
c2gpCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OmFkZEhhc2hlc1RvRGF0YWJhc2UoY29u
c3QgVmVjdG9yPFN0cmluZ0NhcHR1cmU+JiBoYXNoZXMpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CiAgICAgQVNTRVJUKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6
aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwpAQCAtMzU1LDExICszOTYsMzAgQEAgdm9pZCBO
ZXR3b3JrQ2FjaGVTdGF0aXN0aWNzOjphZGRIYXNoVG9EYXRhYmFzZShjb25zdCBTdHJpbmcmIGhh
c2gpCiAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gV2ViQ29yZTo6U1FMUmVzdWx0T2sp
CiAgICAgICAgIHJldHVybjsKIAotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBoYXNoKTsKLSAg
ICBpZiAoIWV4ZWN1dGVTUUxTdGF0ZW1lbnQoc3RhdGVtZW50KSkKKyAgICBmb3IgKGF1dG8mIGhh
c2ggOiBoYXNoZXMpIHsKKyAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIGhhc2guc3RyaW5n
KCkpOworICAgICAgICBpZiAoZXhlY3V0ZVNRTFN0YXRlbWVudChzdGF0ZW1lbnQpKQorICAgICAg
ICAgICAgKyttX2FwcHJveGltYXRlRW50cnlDb3VudDsKKyAgICAgICAgc3RhdGVtZW50LnJlc2V0
KCk7CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3M6OmFkZFN0b3JlRGVj
aXNpb25zVG9EYXRhYmFzZShjb25zdCBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZ0NhcHR1cmUsIE5l
dHdvcmtDYWNoZTo6U3RvcmVEZWNpc2lvbj4+JiBzdG9yZURlY2lzaW9ucykKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoV2ViQ29yZTo6U1FMaXRlRGF0YWJh
c2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CisgICAgQVNTRVJUKG1fZGF0
YWJhc2UuaXNPcGVuKCkpOworCisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dChtX2RhdGFiYXNlLCBBU0NJSUxpdGVyYWwoIklOU0VSVCBPUiBSRVBMQUNFIElOVE8gVW5jYWNo
ZWRSZWFzb24gKGhhc2gsIHJlYXNvbikgVkFMVUVTICg/LCA/KSIpKTsKKyAgICBpZiAoc3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBXZWJDb3JlOjpTUUxSZXN1bHRPaykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgKyttX2FwcHJveGltYXRlRW50cnlDb3VudDsKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBz
dG9yZURlY2lzaW9ucykgeworICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgcGFpci5maXJz
dC5zdHJpbmcoKSk7CisgICAgICAgIHN0YXRlbWVudC5iaW5kSW50KDIsIHN0YXRpY19jYXN0PGlu
dD4ocGFpci5zZWNvbmQpKTsKKyAgICAgICAgZXhlY3V0ZVNRTFN0YXRlbWVudChzdGF0ZW1lbnQp
OworICAgICAgICBzdGF0ZW1lbnQucmVzZXQoKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBy
b2Nlc3NQb29sQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJv
Y2Vzc1Bvb2xDb2NvYS5tbQppbmRleCAzNDg4ZDFjNzA0NDY3NjU0ZDFhZTFmOTc3NzNkZDBlMTVi
ZjdlM2VkLi5mMDBhNWZmYmQyMGY0ZTE1OWZmNjI4NmNkNmZjNGQzM2E1MjA2ZmVkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2Nv
YS5tbQpAQCAtMTA3LDcgKzEwNyw3IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRz
SWZOZWVkZWQoKQogCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiAgICAgW3JlZ2lzdHJhdGlv
bkRpY3Rpb25hcnkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdIGZvcktl
eTpXZWJLaXROZXR3b3JrQ2FjaGVFbmFibGVkRGVmYXVsdHNLZXldOwotICAgIFtyZWdpc3RyYXRp
b25EaWN0aW9uYXJ5IHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9dIGZvcktl
eTpXZWJLaXROZXR3b3JrQ2FjaGVFZmZpY2FjeUxvZ2dpbmdFbmFibGVkRGVmYXVsdHNLZXldOwor
ICAgIFtyZWdpc3RyYXRpb25EaWN0aW9uYXJ5IHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0
aEJvb2w6WUVTXSBmb3JLZXk6V2ViS2l0TmV0d29ya0NhY2hlRWZmaWNhY3lMb2dnaW5nRW5hYmxl
ZERlZmF1bHRzS2V5XTsKICNlbmRpZgogCiAgICAgW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVz
ZXJEZWZhdWx0c10gcmVnaXN0ZXJEZWZhdWx0czpyZWdpc3RyYXRpb25EaWN0aW9uYXJ5XTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>