<?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>154845</bug_id>
          
          <creation_ts>2016-02-29 20:36:49 -0800</creation_ts>
          <short_desc>Have parseHTMLInteger() / parseHTMLNonNegativeInteger() use WTF::Optional</short_desc>
          <delta_ts>2016-03-02 09:12:33 -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>DOM</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></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>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1169356</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-02-29 20:36:49 -0800</bug_when>
    <thetext>Have parseHTMLInteger() / parseHTMLNonNegativeInteger() use WTF::Optional</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169357</commentid>
    <comment_count>1</comment_count>
      <attachid>272545</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-02-29 20:41:36 -0800</bug_when>
    <thetext>Created attachment 272545
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169377</commentid>
    <comment_count>2</comment_count>
      <attachid>272545</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-29 23:37:09 -0800</bug_when>
    <thetext>Comment on attachment 272545
Patch

Clearing flags on attachment: 272545

Committed r197389: &lt;http://trac.webkit.org/changeset/197389&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169378</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-29 23:37:15 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169435</commentid>
    <comment_count>4</comment_count>
      <attachid>272545</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-03-01 08:26:06 -0800</bug_when>
    <thetext>Comment on attachment 272545
Patch

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

&gt; Source/WebCore/html/HTMLElement.cpp:137
&gt; +    auto optionalBorderWidth = value.isEmpty() ? Nullopt : parseHTMLNonNegativeInteger(value);
&gt; +    return optionalBorderWidth.valueOr(hasTagName(tableTag) ? 1 : 0);

Since parseHTMLNonNegativeInteger already returns Nullopt when passed an empty string, there is no need the explicit isEmpty check here; we should remove that.

I’ll also note that doing work inside the expression passed to valueOr is not the same as using an explicit “if”; the hasTagName check is always done in the new code, and was only conditionally done in the old code.

&gt; Source/WebCore/html/HTMLElement.cpp:457
&gt; -        int tabIndex = 0;
&gt;          if (value.isEmpty())
&gt;              clearTabIndexExplicitlyIfNeeded();
&gt; -        else if (parseHTMLInteger(value, tabIndex)) {
&gt; +        else if (auto optionalTabIndex = parseHTMLInteger(value)) {
&gt;              // Clamp tab index to a 16-bit value to match Firefox&apos;s behavior.
&gt; -            setTabIndexExplicitly(std::max(-0x8000, std::min(tabIndex, 0x7FFF)));
&gt; +            setTabIndexExplicitly(std::max(-0x8000, std::min(optionalTabIndex.value(), 0x7FFF)));
&gt;          }

The behavior here is unlikely to be correct. No attribute at all and the empty string both do clearTabIndexExplicitlyIfNeeded. But a string containing, say, just a space character, does not. I would be surprised if that is actually helpful behavior. We probably don’t have sufficient tests for dynamically changing to detect this mistake.

&gt; Source/WebCore/html/HTMLTextAreaElement.cpp:429
&gt; +    auto optionalMaxLength = parseHTMLNonNegativeInteger(fastGetAttribute(maxlengthAttr));
&gt; +    if (!optionalMaxLength)
&gt; +        return -1;
&gt; +    return optionalMaxLength.value();

Annoying that we can’t use valueOr(-1) here. It’s a little peculiar that parseHTMLNonNegativeInteger actually returns a non-negative int, but we use the type unsigned. I like using unsigned for things guaranteed to not be negative, but it seems to get a little messy.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.h:126
&gt;      ASSERT(value &gt; 0 &amp;&amp; value &lt;= maxHTMLNonNegativeInteger);

Normally we’d break this up into two separate assertions, rather than using &amp;&amp;.

Also, I think we should assert that defaultValue is non-zero and assert that it is &lt;= maxHTMLNonNegativeInteger, rather than just asserting that about the result of the function. After all, it’s unlikely that parseHTMLNonNegativeInteger will get it wrong, and much more likely that the person passes in an inappropriate default value. In fact, I think we probably only need to assert these things about the default value. No real need to assert that parseHTMLNonNegativeInteger did its job.

&gt; Source/WebCore/html/parser/HTMLParserIdioms.h:139
&gt;      ASSERT(value &lt;= maxHTMLNonNegativeInteger);

Same comment about this assertion. We should be asserting about the value of defaultValue, not about our ultimate function return result, because we know that parseHTMLNonNegativeInteger will do its job, but we don’t know about the caller’s passed in number.

&gt; Source/WebCore/svg/SVGElement.cpp:521
&gt; +        else if (auto optionalTabIndex = parseHTMLInteger(value)) {

Not sure we really need the word optional in the name of this local.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169619</commentid>
    <comment_count>5</comment_count>
      <attachid>272545</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-03-01 16:23:38 -0800</bug_when>
    <thetext>Comment on attachment 272545
Patch

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

&gt;&gt; Source/WebCore/html/HTMLElement.cpp:137
&gt;&gt; +    return optionalBorderWidth.valueOr(hasTagName(tableTag) ? 1 : 0);
&gt; 
&gt; Since parseHTMLNonNegativeInteger already returns Nullopt when passed an empty string, there is no need the explicit isEmpty check here; we should remove that.
&gt; 
&gt; I’ll also note that doing work inside the expression passed to valueOr is not the same as using an explicit “if”; the hasTagName check is always done in the new code, and was only conditionally done in the old code.

Ok, will fix both issues.

&gt;&gt; Source/WebCore/html/HTMLElement.cpp:457
&gt;&gt;          }
&gt; 
&gt; The behavior here is unlikely to be correct. No attribute at all and the empty string both do clearTabIndexExplicitlyIfNeeded. But a string containing, say, just a space character, does not. I would be surprised if that is actually helpful behavior. We probably don’t have sufficient tests for dynamically changing to detect this mistake.

Ok, I&apos;ll take a look at this separately as it likely needs test coverage.

&gt;&gt; Source/WebCore/html/HTMLTextAreaElement.cpp:429
&gt;&gt; +    return optionalMaxLength.value();
&gt; 
&gt; Annoying that we can’t use valueOr(-1) here. It’s a little peculiar that parseHTMLNonNegativeInteger actually returns a non-negative int, but we use the type unsigned. I like using unsigned for things guaranteed to not be negative, but it seems to get a little messy.

Agreed, let&apos;s return an Optional&lt;int&gt; and use valueOr(-1).

&gt;&gt; Source/WebCore/html/parser/HTMLParserIdioms.h:126
&gt;&gt;      ASSERT(value &gt; 0 &amp;&amp; value &lt;= maxHTMLNonNegativeInteger);
&gt; 
&gt; Normally we’d break this up into two separate assertions, rather than using &amp;&amp;.
&gt; 
&gt; Also, I think we should assert that defaultValue is non-zero and assert that it is &lt;= maxHTMLNonNegativeInteger, rather than just asserting that about the result of the function. After all, it’s unlikely that parseHTMLNonNegativeInteger will get it wrong, and much more likely that the person passes in an inappropriate default value. In fact, I think we probably only need to assert these things about the default value. No real need to assert that parseHTMLNonNegativeInteger did its job.

Ok, I&apos;ll add assertions for the defaultValue. However, I&apos;d still like to keep these to be safe.

&gt;&gt; Source/WebCore/svg/SVGElement.cpp:521
&gt;&gt; +        else if (auto optionalTabIndex = parseHTMLInteger(value)) {
&gt; 
&gt; Not sure we really need the word optional in the name of this local.

I find it confusing otherwise, especially with the use of auto.

if (auto tabIndex = parseHTMLInteger(value))
  // If you&apos;re not familiar with parseHTMLInteger, you may assume that we&apos;re here because tabIndex is not zero.

Maybe I should do:
if (Optional&lt;int&gt; tabIndex = parseHTMLInteger(value))

Then I would find it clear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169623</commentid>
    <comment_count>6</comment_count>
      <attachid>272605</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-03-01 16:29:59 -0800</bug_when>
    <thetext>Created attachment 272605
Fix review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169641</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-03-01 16:47:59 -0800</bug_when>
    <thetext>Reopening to fix review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169643</commentid>
    <comment_count>8</comment_count>
      <attachid>272609</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-03-01 16:49:31 -0800</bug_when>
    <thetext>Created attachment 272609
Fix review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169825</commentid>
    <comment_count>9</comment_count>
      <attachid>272609</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-03-02 09:12:28 -0800</bug_when>
    <thetext>Comment on attachment 272609
Fix review comments

Clearing flags on attachment: 272609

Committed r197449: &lt;http://trac.webkit.org/changeset/197449&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169826</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-03-02 09:12:33 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272545</attachid>
            <date>2016-02-29 20:41:36 -0800</date>
            <delta_ts>2016-02-29 23:37:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154845-20160229204120.patch</filename>
            <type>text/plain</type>
            <size>18444</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk3MzgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTlhOTkyZTllMmY4Yzc5
OTE2N2NkZGYyZTI5MzRhZjUxYjEzYTE5Ni4uNTg2YWMxODFjOTZlM2E0OTA0ZDdhMjE1YjIxYmZk
MGUyNWRkNGIwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE2LTAyLTI5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBwYXJzZUhUTUxJbnRl
Z2VyKCkgLyBwYXJzZUhUTUxOb25OZWdhdGl2ZUludGVnZXIoKSB1c2UgV1RGOjpPcHRpb25hbAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0ODQ1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSGF2ZSBwYXJz
ZUhUTUxJbnRlZ2VyKCkgLyBwYXJzZUhUTUxOb25OZWdhdGl2ZUludGVnZXIoKSB1c2UKKyAgICAg
ICAgV1RGOjpPcHRpb25hbC4KKworICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OmdldEludGVncmFsQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OmdldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudDo6c2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisg
ICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxl
bWVudDo6cGFyc2VCb3JkZXJXaWR0aEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpwYXJzZU1heExlbmd0
aEF0dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50Lmg6CisgICAgICAg
ICogaHRtbC9IVE1MT0xpc3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPTGlz
dEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6bWF4TGVu
Z3RoKToKKyAgICAgICAgKiBodG1sL0ltYWdlSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlSW5wdXRUeXBlOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VJbnB1
dFR5cGU6OndpZHRoKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSFRNTEludGVnZXJJbnRlcm5hbCk6CisgICAgICAg
IChXZWJDb3JlOjpwYXJzZUhUTUxJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSFRN
TE5vbk5lZ2F0aXZlSW50ZWdlcik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklk
aW9tcy5oOgorICAgICAgICAoV2ViQ29yZTo6bGltaXRUb09ubHlIVE1MTm9uTmVnYXRpdmVOdW1i
ZXJzR3JlYXRlclRoYW5aZXJvKToKKyAgICAgICAgKFdlYkNvcmU6OmxpbWl0VG9Pbmx5SFRNTE5v
bk5lZ2F0aXZlKToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisKIDIwMTYtMDItMjkgIEplciBOb2Js
ZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVmYWN0b3IgQ29yZVZpZGVvIEFQ
SSBhY2Nlc3MgaW50byB0aGVpciBvd24gY2xhc3NlcyBzbyBjb2RlIGNhbiBiZSByZS11c2VkLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IGMyY2ZiOGY4MTBlN2QyZDQ3NWMwOWE5Zjk5ZWIxOTk5
Yjg4ZDVhMTMuLjYyZmFiMThjYTFiYjk0ODBjYWM2ZTcwY2YzOTM2NWEyMjVkZWY5MDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAKQEAgLTI3NjUsOSArMjc2NSw3IEBAIFVSTCBFbGVtZW50OjpnZXRO
b25FbXB0eVVSTEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAogCiBp
bnQgRWxlbWVudDo6Z2V0SW50ZWdyYWxBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
cmlidXRlTmFtZSkgY29uc3QKIHsKLSAgICBpbnQgdmFsdWUgPSAwOwotICAgIHBhcnNlSFRNTElu
dGVnZXIoZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHZh
bHVlOworICAgIHJldHVybiBwYXJzZUhUTUxJbnRlZ2VyKGdldEF0dHJpYnV0ZShhdHRyaWJ1dGVO
YW1lKSkudmFsdWVPcigwKTsKIH0KIAogdm9pZCBFbGVtZW50OjpzZXRJbnRlZ3JhbEF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBpbnQgdmFsdWUpCkBAIC0yNzc3
LDkgKzI3NzUsNyBAQCB2b2lkIEVsZW1lbnQ6OnNldEludGVncmFsQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIGludCB2YWx1ZQogCiB1bnNpZ25lZCBFbGVtZW50
OjpnZXRVbnNpZ25lZEludGVncmFsQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJp
YnV0ZU5hbWUpIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgdmFsdWUgPSAwOwotICAgIHBhcnNlSFRN
TE5vbk5lZ2F0aXZlSW50ZWdlcihnZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSksIHZhbHVlKTsK
LSAgICByZXR1cm4gdmFsdWU7CisgICAgcmV0dXJuIHBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdl
cihnZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkpLnZhbHVlT3IoMCk7CiB9CiAKIHZvaWQgRWxl
bWVudDo6c2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyaWJ1dGVOYW1lLCB1bnNpZ25lZCB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5j
cHAKaW5kZXggZmE3MDJkOTAwMTIzYWRlNTI4ZjdkMWRhYjIyODdmZTNmYWVmNTY2YS4uYmQ2MjNh
ZDQzODVkMDI2MGFhYmMxMWZmNjNhNGY5ODA5MzkxNmVjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RWxlbWVudC5jcHAKQEAgLTEzMywxMCArMTMzLDggQEAgc3RhdGljIGlubGluZSBDU1NWYWx1ZUlE
IHVuaWNvZGVCaWRpQXR0cmlidXRlRm9yRGlyQXV0byhIVE1MRWxlbWVudCYgZWxlbWVudCkKIAog
dW5zaWduZWQgSFRNTEVsZW1lbnQ6OnBhcnNlQm9yZGVyV2lkdGhBdHRyaWJ1dGUoY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBib3JkZXJXaWR0aCA9IDA7
Ci0gICAgaWYgKHZhbHVlLmlzRW1wdHkoKSB8fCAhcGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2Vy
KHZhbHVlLCBib3JkZXJXaWR0aCkpCi0gICAgICAgIHJldHVybiBoYXNUYWdOYW1lKHRhYmxlVGFn
KSA/IDEgOiBib3JkZXJXaWR0aDsKLSAgICByZXR1cm4gYm9yZGVyV2lkdGg7CisgICAgYXV0byBv
cHRpb25hbEJvcmRlcldpZHRoID0gdmFsdWUuaXNFbXB0eSgpID8gTnVsbG9wdCA6IHBhcnNlSFRN
TE5vbk5lZ2F0aXZlSW50ZWdlcih2YWx1ZSk7CisgICAgcmV0dXJuIG9wdGlvbmFsQm9yZGVyV2lk
dGgudmFsdWVPcihoYXNUYWdOYW1lKHRhYmxlVGFnKSA/IDEgOiAwKTsKIH0KIAogdm9pZCBIVE1M
RWxlbWVudDo6YXBwbHlCb3JkZXJBdHRyaWJ1dGVUb1N0eWxlKGNvbnN0IEF0b21pY1N0cmluZyYg
dmFsdWUsIE11dGFibGVTdHlsZVByb3BlcnRpZXMmIHN0eWxlKQpAQCAtNDUxLDEyICs0NDksMTEg
QEAgdm9pZCBIVE1MRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJgogICAgIH0KIAogICAgIGlmIChuYW1lID09IHRhYmlu
ZGV4QXR0cikgewotICAgICAgICBpbnQgdGFiSW5kZXggPSAwOwogICAgICAgICBpZiAodmFsdWUu
aXNFbXB0eSgpKQogICAgICAgICAgICAgY2xlYXJUYWJJbmRleEV4cGxpY2l0bHlJZk5lZWRlZCgp
OwotICAgICAgICBlbHNlIGlmIChwYXJzZUhUTUxJbnRlZ2VyKHZhbHVlLCB0YWJJbmRleCkpIHsK
KyAgICAgICAgZWxzZSBpZiAoYXV0byBvcHRpb25hbFRhYkluZGV4ID0gcGFyc2VIVE1MSW50ZWdl
cih2YWx1ZSkpIHsKICAgICAgICAgICAgIC8vIENsYW1wIHRhYiBpbmRleCB0byBhIDE2LWJpdCB2
YWx1ZSB0byBtYXRjaCBGaXJlZm94J3MgYmVoYXZpb3IuCi0gICAgICAgICAgICBzZXRUYWJJbmRl
eEV4cGxpY2l0bHkoc3RkOjptYXgoLTB4ODAwMCwgc3RkOjptaW4odGFiSW5kZXgsIDB4N0ZGRikp
KTsKKyAgICAgICAgICAgIHNldFRhYkluZGV4RXhwbGljaXRseShzdGQ6Om1heCgtMHg4MDAwLCBz
dGQ6Om1pbihvcHRpb25hbFRhYkluZGV4LnZhbHVlKCksIDB4N0ZGRikpKTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5jcHAKaW5kZXggYjI0NjI4NTM3NzYwOGUwMTM2YjJjZTBlYTAwYWU2NjYwNTAxYTljMC4uYmEw
Yjg3M2UwMjYxMzZhOWM4YmIyMTMwNzRhNTMyYTJmN2JjOGJlMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC04OSw3ICs4OSw3IEBAIHByaXZhdGU6CiAvLyBs
YXJnZS4gSG93ZXZlciwgZHVlIHRvIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDUzNiB0aGluZ3MKIC8vIGdldCByYXRoZXIgc2x1Z2dpc2ggd2hlbiBhIHRleHQgZmll
bGQgaGFzIGEgbGFyZ2VyIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYW4KIC8vIHRoaXMsIGV2ZW4g
d2hlbiBqdXN0IGNsaWNraW5nIGluIHRoZSB0ZXh0IGZpZWxkLgotY29uc3QgaW50IEhUTUxJbnB1
dEVsZW1lbnQ6Om1heGltdW1MZW5ndGggPSA1MjQyODg7Citjb25zdCB1bnNpZ25lZCBIVE1MSW5w
dXRFbGVtZW50OjptYXhpbXVtTGVuZ3RoID0gNTI0Mjg4OwogY29uc3QgaW50IGRlZmF1bHRTaXpl
ID0gMjA7CiBjb25zdCBpbnQgbWF4U2F2ZWRSZXN1bHRzID0gMjU2OwogCkBAIC0xNzQyLDExICsx
NzQyLDcgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc0VtcHR5VmFsdWUoKSBjb25zdAogCiB2
b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlTWF4TGVuZ3RoQXR0cmlidXRlKGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUpCiB7Ci0gICAgaW50IG1heExlbmd0aDsKLSAgICBpZiAoIXBhcnNlSFRN
TEludGVnZXIodmFsdWUsIG1heExlbmd0aCkpCi0gICAgICAgIG1heExlbmd0aCA9IG1heGltdW1M
ZW5ndGg7Ci0gICAgaWYgKG1heExlbmd0aCA8IDAgfHwgbWF4TGVuZ3RoID4gbWF4aW11bUxlbmd0
aCkKLSAgICAgICAgbWF4TGVuZ3RoID0gbWF4aW11bUxlbmd0aDsKKyAgICBpbnQgbWF4TGVuZ3Ro
ID0gc3RkOjptaW4ocGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2VyKHZhbHVlKS52YWx1ZU9yKG1h
eGltdW1MZW5ndGgpLCBtYXhpbXVtTGVuZ3RoKTsKICAgICBpbnQgb2xkTWF4TGVuZ3RoID0gbV9t
YXhMZW5ndGg7CiAgICAgbV9tYXhMZW5ndGggPSBtYXhMZW5ndGg7CiAgICAgaWYgKG9sZE1heExl
bmd0aCAhPSBtYXhMZW5ndGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bnB1dEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCmlu
ZGV4IGQxZDBkNTc3OTAyNDQ2NDVmZmFhNGIwMzRjNjdkY2JjYzkyMjMzOWUuLjgzZTg5MTVkZTNk
ZWU2YTcyZTJhZjNhNjhjZWIxZDZhYWY3NTMzYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTElucHV0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElu
cHV0RWxlbWVudC5oCkBAIC0yODksNyArMjg5LDcgQEAgcHVibGljOgogICAgIGJvb2wgc2hvdWxk
VXNlTWVkaWFDYXB0dXJlKCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4aW11bUxlbmd0aDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUxlbmd0aDsK
IAogICAgIHVuc2lnbmVkIGhlaWdodCgpIGNvbnN0OwogICAgIHVuc2lnbmVkIHdpZHRoKCkgY29u
c3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPTGlzdEVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT0xpc3RFbGVtZW50LmNwcAppbmRleCA0YWNjNjE5
ZTkyZDljOTU3NTdmNzBiN2Q0YWQ2NTU3OTE4ZDA2NTgzLi4yYWQ1ZThmZGFlM2I5Y2MwZjM4MTZj
NmYyNDVmYjUzZjY4NjA1ODM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxP
TGlzdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9MaXN0RWxlbWVu
dC5jcHAKQEAgLTgwLDExICs4MCw3IEBAIHZvaWQgSFRNTE9MaXN0RWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyCiB7CiAgICAg
aWYgKG5hbWUgPT0gc3RhcnRBdHRyKSB7CiAgICAgICAgIGludCBvbGRTdGFydCA9IHN0YXJ0KCk7
Ci0gICAgICAgIGludCBwYXJzZWRTdGFydDsKLSAgICAgICAgaWYgKHBhcnNlSFRNTEludGVnZXIo
dmFsdWUsIHBhcnNlZFN0YXJ0KSkKLSAgICAgICAgICAgIG1fc3RhcnQgPSBwYXJzZWRTdGFydDsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9zdGFydCA9IE51bGxvcHQ7CisgICAgICAgIG1f
c3RhcnQgPSBwYXJzZUhUTUxJbnRlZ2VyKHZhbHVlKTsKICAgICAgICAgaWYgKG9sZFN0YXJ0ID09
IHN0YXJ0KCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHVwZGF0ZUl0ZW1WYWx1ZXMo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCmluZGV4IDI0
ZDZmMjk4NTViYjg3ZjM0NzM3ZTBmMTU1NzMwMjU2YWYxZDQwMTMuLjg2Y2Q3MDhlOWU3NmFlYTg3
MjQ5YTY1Zjk0ZGI0MWI5MzhjNmY5MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFRleHRBcmVhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4
dEFyZWFFbGVtZW50LmNwcApAQCAtNDIzLDEwICs0MjMsMTAgQEAgdm9pZCBIVE1MVGV4dEFyZWFF
bGVtZW50OjpzZXREZWZhdWx0VmFsdWUoY29uc3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUpCiAKIGlu
dCBIVE1MVGV4dEFyZWFFbGVtZW50OjptYXhMZW5ndGgoKSBjb25zdAogewotICAgIHVuc2lnbmVk
IHJlc3VsdDsKLSAgICBpZiAocGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2VyKGZhc3RHZXRBdHRy
aWJ1dGUobWF4bGVuZ3RoQXR0ciksIHJlc3VsdCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgcmV0dXJuIC0xOworICAgIGF1dG8gb3B0aW9uYWxNYXhMZW5ndGggPSBwYXJzZUhUTUxOb25O
ZWdhdGl2ZUludGVnZXIoZmFzdEdldEF0dHJpYnV0ZShtYXhsZW5ndGhBdHRyKSk7CisgICAgaWYg
KCFvcHRpb25hbE1heExlbmd0aCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJldHVybiBvcHRp
b25hbE1heExlbmd0aC52YWx1ZSgpOwogfQogCiB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNl
dE1heExlbmd0aChpbnQgbmV3VmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0ltYWdlSW5wdXRUeXBlLmNwcAppbmRleCBiZWIxMDVkYWJjZGMxYmE0MmNlMjc3MzI1MzYx
YmQ1ZGRkZmRiNjJiLi5kNDIxNmE4MDg3MjM2NTQ0MDUxYjExODk4Yzk0ZDcxY2I5OTYzY2Q5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlSW5wdXRUeXBlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlSW5wdXRUeXBlLmNwcApAQCAtMTc2LDkgKzE3Niw4IEBA
IHVuc2lnbmVkIEltYWdlSW5wdXRUeXBlOjpoZWlnaHQoKSBjb25zdAogCiAgICAgaWYgKCFlbGVt
ZW50LT5yZW5kZXJlcigpKSB7CiAgICAgICAgIC8vIENoZWNrIHRoZSBhdHRyaWJ1dGUgZmlyc3Qg
Zm9yIGFuIGV4cGxpY2l0IHBpeGVsIHZhbHVlLgotICAgICAgICB1bnNpZ25lZCBoZWlnaHQ7Ci0g
ICAgICAgIGlmIChwYXJzZUhUTUxOb25OZWdhdGl2ZUludGVnZXIoZWxlbWVudC0+ZmFzdEdldEF0
dHJpYnV0ZShoZWlnaHRBdHRyKSwgaGVpZ2h0KSkKLSAgICAgICAgICAgIHJldHVybiBoZWlnaHQ7
CisgICAgICAgIGlmIChhdXRvIG9wdGlvbmFsSGVpZ2h0ID0gcGFyc2VIVE1MTm9uTmVnYXRpdmVJ
bnRlZ2VyKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0cikpKQorICAgICAgICAg
ICAgcmV0dXJuIG9wdGlvbmFsSGVpZ2h0LnZhbHVlKCk7CiAKICAgICAgICAgLy8gSWYgdGhlIGlt
YWdlIGlzIGF2YWlsYWJsZSwgdXNlIGl0cyBoZWlnaHQuCiAgICAgICAgIEhUTUxJbWFnZUxvYWRl
ciogaW1hZ2VMb2FkZXIgPSBlbGVtZW50LT5pbWFnZUxvYWRlcigpOwpAQCAtMTk4LDkgKzE5Nyw4
IEBAIHVuc2lnbmVkIEltYWdlSW5wdXRUeXBlOjp3aWR0aCgpIGNvbnN0CiAKICAgICBpZiAoIWVs
ZW1lbnQtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgLy8gQ2hlY2sgdGhlIGF0dHJpYnV0ZSBmaXJz
dCBmb3IgYW4gZXhwbGljaXQgcGl4ZWwgdmFsdWUuCi0gICAgICAgIHVuc2lnbmVkIHdpZHRoOwot
ICAgICAgICBpZiAocGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2VyKGVsZW1lbnQtPmZhc3RHZXRB
dHRyaWJ1dGUod2lkdGhBdHRyKSwgd2lkdGgpKQotICAgICAgICAgICAgcmV0dXJuIHdpZHRoOwor
ICAgICAgICBpZiAoYXV0byBvcHRpb25hbFdpZHRoID0gcGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRl
Z2VyKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUod2lkdGhBdHRyKSkpCisgICAgICAgICAgICBy
ZXR1cm4gb3B0aW9uYWxXaWR0aC52YWx1ZSgpOwogCiAgICAgICAgIC8vIElmIHRoZSBpbWFnZSBp
cyBhdmFpbGFibGUsIHVzZSBpdHMgd2lkdGguCiAgICAgICAgIEhUTUxJbWFnZUxvYWRlciogaW1h
Z2VMb2FkZXIgPSBlbGVtZW50LT5pbWFnZUxvYWRlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcAppbmRleCBiNTk5NjE3MDdkZWU3YzNhMjk5
NmY4NzUyZGEwYWFhM2VhNWI2YzZlLi4yNzE2MzU3NTAyOWU5YWU4NDIzNGFlMDE4YmVmMzI2NDJi
M2U1NjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2Vy
SWRpb21zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRp
b21zLmNwcApAQCAtMTUzLDEzICsxNTMsMTMgQEAgZG91YmxlIHBhcnNlVG9Eb3VibGVGb3JOdW1i
ZXJUeXBlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4KLXN0YXRpYyBib29sIHBhcnNlSFRNTEludGVnZXJJbnRlcm5hbChjb25zdCBD
aGFyYWN0ZXJUeXBlKiBwb3NpdGlvbiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBpbnQmIHZh
bHVlKQorc3RhdGljIE9wdGlvbmFsPGludD4gcGFyc2VIVE1MSW50ZWdlckludGVybmFsKGNvbnN0
IENoYXJhY3RlclR5cGUqIHBvc2l0aW9uLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCiB7CiAg
ICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kICYmIGlzSFRNTFNwYWNlKCpwb3NpdGlvbikpCiAgICAg
ICAgICsrcG9zaXRpb247CiAKICAgICBpZiAocG9zaXRpb24gPT0gZW5kKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBOdWxsb3B0OwogCiAgICAgYm9vbCBpc05lZ2F0aXZl
ID0gZmFsc2U7CiAgICAgaWYgKCpwb3NpdGlvbiA9PSAnLScpIHsKQEAgLTE2OSw3ICsxNjksNyBA
QCBzdGF0aWMgYm9vbCBwYXJzZUhUTUxJbnRlZ2VySW50ZXJuYWwoY29uc3QgQ2hhcmFjdGVyVHlw
ZSogcG9zaXRpb24sIGNvbnN0IENoYXJhYwogICAgICAgICArK3Bvc2l0aW9uOwogCiAgICAgaWYg
KHBvc2l0aW9uID09IGVuZCB8fCAhaXNBU0NJSURpZ2l0KCpwb3NpdGlvbikpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAKICAgICBjb25zdGV4cHIgaW50
IGludE1heCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7CiAgICAgY29uc3RleHBy
IGludCBiYXNlID0gMTA7CkBAIC0xODAsNDEgKzE4MCwzOSBAQCBzdGF0aWMgYm9vbCBwYXJzZUhU
TUxJbnRlZ2VySW50ZXJuYWwoY29uc3QgQ2hhcmFjdGVyVHlwZSogcG9zaXRpb24sIGNvbnN0IENo
YXJhYwogICAgICAgICBpbnQgZGlnaXRWYWx1ZSA9ICpwb3NpdGlvbiAtICcwJzsKIAogICAgICAg
ICBpZiAocmVzdWx0ID4gbWF4TXVsdGlwbGllciB8fCAocmVzdWx0ID09IG1heE11bHRpcGxpZXIg
JiYgZGlnaXRWYWx1ZSA+IChpbnRNYXggJSBiYXNlKSArIGlzTmVnYXRpdmUpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAKICAgICAgICAg
cmVzdWx0ID0gYmFzZSAqIHJlc3VsdCArIGRpZ2l0VmFsdWU7CiAgICAgICAgICsrcG9zaXRpb247
CiAgICAgfSB3aGlsZSAocG9zaXRpb24gPCBlbmQgJiYgaXNBU0NJSURpZ2l0KCpwb3NpdGlvbikp
OwogCi0gICAgdmFsdWUgPSBpc05lZ2F0aXZlID8gLXJlc3VsdCA6IHJlc3VsdDsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gaXNOZWdhdGl2ZSA/IC1yZXN1bHQgOiByZXN1bHQ7CiB9CiAK
IC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2luZnJhc3RydWN0dXJl
Lmh0bWwjcnVsZXMtZm9yLXBhcnNpbmctaW50ZWdlcnMKLWJvb2wgcGFyc2VIVE1MSW50ZWdlcihj
b25zdCBTdHJpbmcmIGlucHV0LCBpbnQmIHZhbHVlKQorT3B0aW9uYWw8aW50PiBwYXJzZUhUTUxJ
bnRlZ2VyKGNvbnN0IFN0cmluZyYgaW5wdXQpCiB7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gaW5w
dXQubGVuZ3RoKCk7CiAgICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuIE51bGxvcHQ7CiAKICAgICBpZiAoTElLRUxZKGlucHV0LmlzOEJpdCgpKSkg
ewogICAgICAgICBhdXRvKiBzdGFydCA9IGlucHV0LmNoYXJhY3RlcnM4KCk7Ci0gICAgICAgIHJl
dHVybiBwYXJzZUhUTUxJbnRlZ2VySW50ZXJuYWwoc3RhcnQsIHN0YXJ0ICsgbGVuZ3RoLCB2YWx1
ZSk7CisgICAgICAgIHJldHVybiBwYXJzZUhUTUxJbnRlZ2VySW50ZXJuYWwoc3RhcnQsIHN0YXJ0
ICsgbGVuZ3RoKTsKICAgICB9CiAKICAgICBhdXRvKiBzdGFydCA9IGlucHV0LmNoYXJhY3RlcnMx
NigpOwotICAgIHJldHVybiBwYXJzZUhUTUxJbnRlZ2VySW50ZXJuYWwoc3RhcnQsIHN0YXJ0ICsg
bGVuZ3RoLCB2YWx1ZSk7CisgICAgcmV0dXJuIHBhcnNlSFRNTEludGVnZXJJbnRlcm5hbChzdGFy
dCwgc3RhcnQgKyBsZW5ndGgpOwogfQogCiAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3Jn
L211bHRpcGFnZS9pbmZyYXN0cnVjdHVyZS5odG1sI3J1bGVzLWZvci1wYXJzaW5nLW5vbi1uZWdh
dGl2ZS1pbnRlZ2VycwotYm9vbCBwYXJzZUhUTUxOb25OZWdhdGl2ZUludGVnZXIoY29uc3QgU3Ry
aW5nJiBpbnB1dCwgdW5zaWduZWQmIHZhbHVlKQorT3B0aW9uYWw8dW5zaWduZWQ+IHBhcnNlSFRN
TE5vbk5lZ2F0aXZlSW50ZWdlcihjb25zdCBTdHJpbmcmIGlucHV0KQogewotICAgIGludCBzaWdu
ZWRWYWx1ZTsKLSAgICBpZiAoIXBhcnNlSFRNTEludGVnZXIoaW5wdXQsIHNpZ25lZFZhbHVlKSB8
fCBzaWduZWRWYWx1ZSA8IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBPcHRpb25hbDxp
bnQ+IHNpZ25lZFZhbHVlID0gcGFyc2VIVE1MSW50ZWdlcihpbnB1dCk7CisgICAgaWYgKCFzaWdu
ZWRWYWx1ZSB8fCBzaWduZWRWYWx1ZS52YWx1ZSgpIDwgMCkKKyAgICAgICAgcmV0dXJuIE51bGxv
cHQ7CiAKLSAgICB2YWx1ZSA9IHNpZ25lZFZhbHVlOwotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiBzaWduZWRWYWx1ZS52YWx1ZSgpOwogfQogCiBzdGF0aWMgYm9vbCB0aHJlYWRTYWZlRXF1
YWwoY29uc3QgU3RyaW5nSW1wbCYgYSwgY29uc3QgU3RyaW5nSW1wbCYgYikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuaAppbmRleCA3NGMyY2ViODIwOTBh
OTIxY2RkMTRiN2Y3NWYyM2VlYjkxODUyMjQ1Li4xNDUyNDc0Njc1MjkxZTI4MjgyYTRjNGFiZjY2
OWJhNzE4N2JkMDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
UGFyc2VySWRpb21zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNl
cklkaW9tcy5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02MCwxMCArNjEsMTAgQEAgZG91YmxlIHBhcnNlVG9E
b3VibGVGb3JOdW1iZXJUeXBlKGNvbnN0IFN0cmluZyYpOwogZG91YmxlIHBhcnNlVG9Eb3VibGVG
b3JOdW1iZXJUeXBlKGNvbnN0IFN0cmluZyYsIGRvdWJsZSBmYWxsYmFja1ZhbHVlKTsKIAogLy8g
aHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jcnVsZXMt
Zm9yLXBhcnNpbmctaW50ZWdlcnMKLVdFQkNPUkVfRVhQT1JUIGJvb2wgcGFyc2VIVE1MSW50ZWdl
cihjb25zdCBTdHJpbmcmLCBpbnQmKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPGludD4gcGFy
c2VIVE1MSW50ZWdlcihjb25zdCBTdHJpbmcmKTsKIAogLy8gaHR0cDovL3d3dy53aGF0d2cub3Jn
L3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jcnVsZXMtZm9yLXBhcnNpbmctbm9uLW5lZ2F0
aXZlLWludGVnZXJzCi1XRUJDT1JFX0VYUE9SVCBib29sIHBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50
ZWdlcihjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCYpOworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8
dW5zaWduZWQ+IHBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcihjb25zdCBTdHJpbmcmKTsKIAog
Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW5mcmFzdHJ1Y3R1cmUu
aHRtbCNjb3JzLXNldHRpbmdzLWF0dHJpYnV0ZQogU3RyaW5nIHBhcnNlQ09SU1NldHRpbmdzQXR0
cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYpOwpAQCAtMTIwLDkgKzEyMSw4IEBAIGlubGluZSB1
bnNpZ25lZCBsaW1pdFRvT25seUhUTUxOb25OZWdhdGl2ZU51bWJlcnNHcmVhdGVyVGhhblplcm8o
dW5zaWduZWQgdmFsdWUsCiAKIGlubGluZSB1bnNpZ25lZCBsaW1pdFRvT25seUhUTUxOb25OZWdh
dGl2ZU51bWJlcnNHcmVhdGVyVGhhblplcm8oY29uc3QgU3RyaW5nJiBzdHJpbmdWYWx1ZSwgdW5z
aWduZWQgZGVmYXVsdFZhbHVlID0gMSkKIHsKLSAgICB1bnNpZ25lZCB2YWx1ZTsKLSAgICBpZiAo
IXBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcihzdHJpbmdWYWx1ZSwgdmFsdWUpIHx8ICF2YWx1
ZSkKLSAgICAgICAgdmFsdWUgPSBkZWZhdWx0VmFsdWU7CisgICAgYXV0byBvcHRpb25hbFZhbHVl
ID0gcGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2VyKHN0cmluZ1ZhbHVlKTsKKyAgICB1bnNpZ25l
ZCB2YWx1ZSA9IG9wdGlvbmFsVmFsdWUgJiYgb3B0aW9uYWxWYWx1ZS52YWx1ZSgpID8gb3B0aW9u
YWxWYWx1ZS52YWx1ZSgpIDogZGVmYXVsdFZhbHVlOwogICAgIEFTU0VSVCh2YWx1ZSA+IDAgJiYg
dmFsdWUgPD0gbWF4SFRNTE5vbk5lZ2F0aXZlSW50ZWdlcik7CiAgICAgcmV0dXJuIHZhbHVlOwog
fQpAQCAtMTM1LDkgKzEzNSw3IEBAIGlubGluZSB1bnNpZ25lZCBsaW1pdFRvT25seUhUTUxOb25O
ZWdhdGl2ZSh1bnNpZ25lZCB2YWx1ZSwgdW5zaWduZWQgZGVmYXVsdFZhbHVlCiAKIGlubGluZSB1
bnNpZ25lZCBsaW1pdFRvT25seUhUTUxOb25OZWdhdGl2ZShjb25zdCBTdHJpbmcmIHN0cmluZ1Zh
bHVlLCB1bnNpZ25lZCBkZWZhdWx0VmFsdWUgPSAwKQogewotICAgIHVuc2lnbmVkIHZhbHVlOwot
ICAgIGlmICghcGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2VyKHN0cmluZ1ZhbHVlLCB2YWx1ZSkp
Ci0gICAgICAgIHZhbHVlID0gZGVmYXVsdFZhbHVlOworICAgIHVuc2lnbmVkIHZhbHVlID0gcGFy
c2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2VyKHN0cmluZ1ZhbHVlKS52YWx1ZU9yKGRlZmF1bHRWYWx1
ZSk7CiAgICAgQVNTRVJUKHZhbHVlIDw9IG1heEhUTUxOb25OZWdhdGl2ZUludGVnZXIpOwogICAg
IHJldHVybiB2YWx1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAppbmRleCBhYTU4N2Fk
M2FkOGUzMjk5ZmE4NWM1M2U0OTA3ZTM2MTc2YTFhMTNjLi44Y2Y4NWM1M2FkYWMyODAwOTQ3MDNh
MWQwNzhhZTdjMzcyNzA2NDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCkBAIC01MTYs
MTIgKzUxNiwxMSBAQCB2b2lkIFNWR0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdgogICAgIH0KIAogICAgIGlmIChu
YW1lID09IEhUTUxOYW1lczo6dGFiaW5kZXhBdHRyKSB7Ci0gICAgICAgIGludCB0YWJpbmRleCA9
IDA7CiAgICAgICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjbGVhclRhYklu
ZGV4RXhwbGljaXRseUlmTmVlZGVkKCk7Ci0gICAgICAgIGVsc2UgaWYgKHBhcnNlSFRNTEludGVn
ZXIodmFsdWUsIHRhYmluZGV4KSkgeworICAgICAgICBlbHNlIGlmIChhdXRvIG9wdGlvbmFsVGFi
SW5kZXggPSBwYXJzZUhUTUxJbnRlZ2VyKHZhbHVlKSkgewogICAgICAgICAgICAgLy8gQ2xhbXAg
dGFiaW5kZXggdG8gdGhlIHJhbmdlIG9mICdzaG9ydCcgdG8gbWF0Y2ggRmlyZWZveCdzIGJlaGF2
aW9yLgotICAgICAgICAgICAgc2V0VGFiSW5kZXhFeHBsaWNpdGx5KHN0ZDo6bWF4KHN0YXRpY19j
YXN0PGludD4oc3RkOjpudW1lcmljX2xpbWl0czxzaG9ydD46Om1pbigpKSwgc3RkOjptaW4odGFi
aW5kZXgsIHN0YXRpY19jYXN0PGludD4oc3RkOjpudW1lcmljX2xpbWl0czxzaG9ydD46Om1heCgp
KSkpKTsKKyAgICAgICAgICAgIHNldFRhYkluZGV4RXhwbGljaXRseShzdGQ6Om1heChzdGF0aWNf
Y2FzdDxpbnQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8c2hvcnQ+OjptaW4oKSksIHN0ZDo6bWluKG9w
dGlvbmFsVGFiSW5kZXgudmFsdWUoKSwgc3RhdGljX2Nhc3Q8aW50PihzdGQ6Om51bWVyaWNfbGlt
aXRzPHNob3J0Pjo6bWF4KCkpKSkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNmRl
YjNkNDVlNjQyMjAyNjJlNjMwYTAyNDY4ZjE2M2ZiN2Q4OGEyMS4uNDE4MmRiNjg2ZTgxMTk4MTU5
OWQ2NTFhYTE3NGRjODdlM2MxYTc2OSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBi
L1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDE2LTAyLTI5ICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBwYXJzZUhUTUxJbnRlZ2VyKCkg
LyBwYXJzZUhUTUxOb25OZWdhdGl2ZUludGVnZXIoKSB1c2UgV1RGOjpPcHRpb25hbAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0ODQ1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIEFQSSB0ZXN0
cyBhY2NvcmRpbmdseS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9I
VE1MUGFyc2VySWRpb21zLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRlc3RQYXJzZUhU
TUxJbnRlZ2VyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnBhcnNlSFRNTEludGVnZXJGYWls
cyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0UGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRl
Z2VyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdl
ckZhaWxzKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOiBEZWxldGVkLgorCiAyMDE2
LTAyLTI5ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXgg
dGltaW5nIGZsYWtpbmVzcyBpbiB0ZXN0IEkgYWRkZWQgaW4gaHR0cDovL3RyYWMud2Via2l0Lm9y
Zy9jaGFuZ2VzZXQvMTk3MzcyCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvSFRNTFBhcnNlcklkaW9tcy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvSFRNTFBhcnNlcklkaW9tcy5jcHAKaW5kZXggMmE5N2ZiNWM5Y2M3OTg3YjFjOGRl
ODVmM2I2NWFhZTNjYjIyOGNkOC4uMGYxYzAyZDllNmNhODVjMDljYjQ5NmNiMzdmMTJjMjk5ZjU4
ZmVmOCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0hUTUxQ
YXJzZXJJZGlvbXMuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9I
VE1MUGFyc2VySWRpb21zLmNwcApAQCAtMzUsMTYgKzM1LDE0IEBAIG5hbWVzcGFjZSBUZXN0V2Vi
S2l0QVBJIHsKIAogc3RhdGljIGludCB0ZXN0UGFyc2VIVE1MSW50ZWdlcihjb25zdCBTdHJpbmcm
IGlucHV0KQogewotICAgIGludCByZXN1bHQgPSAwOwotICAgIGJvb2wgc3VjY2VzcyA9IHBhcnNl
SFRNTEludGVnZXIoaW5wdXQsIHJlc3VsdCk7Ci0gICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICBhdXRvIG9wdGlvbmFsUmVzdWx0ID0gcGFyc2VIVE1MSW50
ZWdlcihpbnB1dCk7CisgICAgRVhQRUNUX1RSVUUoISFvcHRpb25hbFJlc3VsdCk7CisgICAgcmV0
dXJuIG9wdGlvbmFsUmVzdWx0LnZhbHVlT3IoMCk7CiB9CiAKIHN0YXRpYyBib29sIHBhcnNlSFRN
TEludGVnZXJGYWlscyhjb25zdCBTdHJpbmcmIGlucHV0KQogewotICAgIGludCByZXN1bHQgPSAw
OwotICAgIHJldHVybiAhcGFyc2VIVE1MSW50ZWdlcihpbnB1dCwgcmVzdWx0KTsKKyAgICByZXR1
cm4gIXBhcnNlSFRNTEludGVnZXIoaW5wdXQpOwogfQogCiBURVNUKFdlYkNvcmVIVE1MUGFyc2Vy
SWRpb21zLCBwYXJzZUhUTUxJbnRlZ2VyKQpAQCAtMTAxLDE2ICs5OSwxNCBAQCBURVNUKFdlYkNv
cmVIVE1MUGFyc2VySWRpb21zLCBwYXJzZUhUTUxJbnRlZ2VyKQogCiBzdGF0aWMgdW5zaWduZWQg
dGVzdFBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcihjb25zdCBTdHJpbmcmIGlucHV0KQogewot
ICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7Ci0gICAgYm9vbCBzdWNjZXNzID0gcGFyc2VIVE1MTm9u
TmVnYXRpdmVJbnRlZ2VyKGlucHV0LCByZXN1bHQpOwotICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3Mp
OwotICAgIHJldHVybiByZXN1bHQ7CisgICAgYXV0byBvcHRpb25hbFJlc3VsdCA9IHBhcnNlSFRN
TE5vbk5lZ2F0aXZlSW50ZWdlcihpbnB1dCk7CisgICAgRVhQRUNUX1RSVUUoISFvcHRpb25hbFJl
c3VsdCk7CisgICAgcmV0dXJuIG9wdGlvbmFsUmVzdWx0LnZhbHVlT3IoMCk7CiB9CiAKIHN0YXRp
YyBib29sIHBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlckZhaWxzKGNvbnN0IFN0cmluZyYgaW5w
dXQpCiB7Ci0gICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKLSAgICByZXR1cm4gIXBhcnNlSFRNTE5v
bk5lZ2F0aXZlSW50ZWdlcihpbnB1dCwgcmVzdWx0KTsKKyAgICByZXR1cm4gIXBhcnNlSFRNTE5v
bk5lZ2F0aXZlSW50ZWdlcihpbnB1dCk7CiB9CiAKIFRFU1QoV2ViQ29yZUhUTUxQYXJzZXJJZGlv
bXMsIHBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272605</attachid>
            <date>2016-03-01 16:29:59 -0800</date>
            <delta_ts>2016-03-01 16:49:31 -0800</delta_ts>
            <desc>Fix review comments</desc>
            <filename>154845_nitfixes.patch</filename>
            <type>text/plain</type>
            <size>9925</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzMjMyNTQ4Li5lYjVjMjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAg
QEAKKzIwMTYtMDMtMDEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAg
ICBIYXZlIHBhcnNlSFRNTEludGVnZXIoKSAvIHBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcigp
IHVzZSBXVEY6Ok9wdGlvbmFsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTQ4NDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUYWtlIGludG8gY29uc2lkZXJhdGlvbiByZXZpZXcgY29tbWVudHMgbWFkZSBh
ZnRlciBsYW5kaW5nIHIxOTczODkuCisKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpwYXJzZUJvcmRlcldpZHRoQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAg
ICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1
dEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6bWF4TGVuZ3RoKToKKyAgICAgICAg
KiBodG1sL0ltYWdlSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlSW5wdXRU
eXBlOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VJbnB1dFR5cGU6OndpZHRoKToK
KyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcik6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTFBhcnNlcklkaW9tcy5oOgorICAgICAgICAoV2ViQ29yZTo6bGltaXRUb09ubHlIVE1M
Tm9uTmVnYXRpdmVOdW1iZXJzR3JlYXRlclRoYW5aZXJvKToKKyAgICAgICAgKFdlYkNvcmU6Omxp
bWl0VG9Pbmx5SFRNTE5vbk5lZ2F0aXZlKToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisKIDIwMTYt
MDMtMDEgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIGNvbS5h
cHBsZS5XZWJLaXQuTmV0d29ya2luZy5EZXZlbG9wbWVudCBjcmFzaGVzIGluIFdlYkNvcmU6OmZv
cm1PcGVuKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKaW5kZXggYmQ2MjNhZC4uNGY1
ODAzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKQEAgLTEzMyw4ICsxMzMsMTAg
QEAgc3RhdGljIGlubGluZSBDU1NWYWx1ZUlEIHVuaWNvZGVCaWRpQXR0cmlidXRlRm9yRGlyQXV0
byhIVE1MRWxlbWVudCYgZWxlbWVudCkKIAogdW5zaWduZWQgSFRNTEVsZW1lbnQ6OnBhcnNlQm9y
ZGVyV2lkdGhBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkgY29uc3QKIHsKLSAg
ICBhdXRvIG9wdGlvbmFsQm9yZGVyV2lkdGggPSB2YWx1ZS5pc0VtcHR5KCkgPyBOdWxsb3B0IDog
cGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2VyKHZhbHVlKTsKLSAgICByZXR1cm4gb3B0aW9uYWxC
b3JkZXJXaWR0aC52YWx1ZU9yKGhhc1RhZ05hbWUodGFibGVUYWcpID8gMSA6IDApOworICAgIGlm
IChPcHRpb25hbDxpbnQ+IGJvcmRlcldpZHRoID0gcGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2Vy
KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGJvcmRlcldpZHRoLnZhbHVlKCk7CisKKyAgICByZXR1
cm4gaGFzVGFnTmFtZSh0YWJsZVRhZykgPyAxIDogMDsKIH0KIAogdm9pZCBIVE1MRWxlbWVudDo6
YXBwbHlCb3JkZXJBdHRyaWJ1dGVUb1N0eWxlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIE11
dGFibGVTdHlsZVByb3BlcnRpZXMmIHN0eWxlKQpAQCAtNDUxLDkgKzQ1Myw5IEBAIHZvaWQgSFRN
TEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0
IEF0b21pY1N0cmluZyYKICAgICBpZiAobmFtZSA9PSB0YWJpbmRleEF0dHIpIHsKICAgICAgICAg
aWYgKHZhbHVlLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNsZWFyVGFiSW5kZXhFeHBsaWNpdGx5
SWZOZWVkZWQoKTsKLSAgICAgICAgZWxzZSBpZiAoYXV0byBvcHRpb25hbFRhYkluZGV4ID0gcGFy
c2VIVE1MSW50ZWdlcih2YWx1ZSkpIHsKKyAgICAgICAgZWxzZSBpZiAoT3B0aW9uYWw8aW50PiB0
YWJJbmRleCA9IHBhcnNlSFRNTEludGVnZXIodmFsdWUpKSB7CiAgICAgICAgICAgICAvLyBDbGFt
cCB0YWIgaW5kZXggdG8gYSAxNi1iaXQgdmFsdWUgdG8gbWF0Y2ggRmlyZWZveCdzIGJlaGF2aW9y
LgotICAgICAgICAgICAgc2V0VGFiSW5kZXhFeHBsaWNpdGx5KHN0ZDo6bWF4KC0weDgwMDAsIHN0
ZDo6bWluKG9wdGlvbmFsVGFiSW5kZXgudmFsdWUoKSwgMHg3RkZGKSkpOworICAgICAgICAgICAg
c2V0VGFiSW5kZXhFeHBsaWNpdGx5KHN0ZDo6bWF4KC0weDgwMDAsIHN0ZDo6bWluKHRhYkluZGV4
LnZhbHVlKCksIDB4N0ZGRikpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXggMDhkZDljNy4uMGJh
NWZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC04OSw3
ICs4OSw3IEBAIHByaXZhdGU6CiAvLyBsYXJnZS4gSG93ZXZlciwgZHVlIHRvIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDUzNiB0aGluZ3MKIC8vIGdldCByYXRoZXIg
c2x1Z2dpc2ggd2hlbiBhIHRleHQgZmllbGQgaGFzIGEgbGFyZ2VyIG51bWJlciBvZiBjaGFyYWN0
ZXJzIHRoYW4KIC8vIHRoaXMsIGV2ZW4gd2hlbiBqdXN0IGNsaWNraW5nIGluIHRoZSB0ZXh0IGZp
ZWxkLgotY29uc3QgdW5zaWduZWQgSFRNTElucHV0RWxlbWVudDo6bWF4aW11bUxlbmd0aCA9IDUy
NDI4ODsKK2NvbnN0IGludCBIVE1MSW5wdXRFbGVtZW50OjptYXhpbXVtTGVuZ3RoID0gNTI0Mjg4
OwogY29uc3QgaW50IGRlZmF1bHRTaXplID0gMjA7CiBjb25zdCBpbnQgbWF4U2F2ZWRSZXN1bHRz
ID0gMjU2OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCmluZGV4IDc3Njhj
N2YuLmE5ODVmNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCkBAIC0y
OTIsNyArMjkyLDcgQEAgcHVibGljOgogICAgIGJvb2wgc2hvdWxkVXNlTWVkaWFDYXB0dXJlKCkg
Y29uc3Q7CiAjZW5kaWYKIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhpbXVtTGVuZ3Ro
OworICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bUxlbmd0aDsKIAogICAgIHVuc2lnbmVkIGhl
aWdodCgpIGNvbnN0OwogICAgIHVuc2lnbmVkIHdpZHRoKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAppbmRleCAwMGNhMzVkLi5iYjhkZmRmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKQEAgLTQyMywx
MCArNDIzLDcgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpzZXREZWZhdWx0VmFsdWUoY29u
c3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUpCiAKIGludCBIVE1MVGV4dEFyZWFFbGVtZW50OjptYXhM
ZW5ndGgoKSBjb25zdAogewotICAgIGF1dG8gb3B0aW9uYWxNYXhMZW5ndGggPSBwYXJzZUhUTUxO
b25OZWdhdGl2ZUludGVnZXIoZmFzdEdldEF0dHJpYnV0ZShtYXhsZW5ndGhBdHRyKSk7Ci0gICAg
aWYgKCFvcHRpb25hbE1heExlbmd0aCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVybiBv
cHRpb25hbE1heExlbmd0aC52YWx1ZSgpOworICAgIHJldHVybiBwYXJzZUhUTUxOb25OZWdhdGl2
ZUludGVnZXIoZmFzdEdldEF0dHJpYnV0ZShtYXhsZW5ndGhBdHRyKSkudmFsdWVPcigtMSk7CiB9
CiAKIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6c2V0TWF4TGVuZ3RoKGludCBuZXdWYWx1ZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdl
SW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwCmlu
ZGV4IGQ0MjE2YTguLmUwOGM0OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1h
Z2VJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUu
Y3BwCkBAIC0xNzYsOCArMTc2LDggQEAgdW5zaWduZWQgSW1hZ2VJbnB1dFR5cGU6OmhlaWdodCgp
IGNvbnN0CiAKICAgICBpZiAoIWVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgLy8gQ2hl
Y2sgdGhlIGF0dHJpYnV0ZSBmaXJzdCBmb3IgYW4gZXhwbGljaXQgcGl4ZWwgdmFsdWUuCi0gICAg
ICAgIGlmIChhdXRvIG9wdGlvbmFsSGVpZ2h0ID0gcGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2Vy
KGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0cikpKQotICAgICAgICAgICAgcmV0
dXJuIG9wdGlvbmFsSGVpZ2h0LnZhbHVlKCk7CisgICAgICAgIGlmIChPcHRpb25hbDxpbnQ+IGhl
aWdodCA9IHBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcihlbGVtZW50LT5mYXN0R2V0QXR0cmli
dXRlKGhlaWdodEF0dHIpKSkKKyAgICAgICAgICAgIHJldHVybiBoZWlnaHQudmFsdWUoKTsKIAog
ICAgICAgICAvLyBJZiB0aGUgaW1hZ2UgaXMgYXZhaWxhYmxlLCB1c2UgaXRzIGhlaWdodC4KICAg
ICAgICAgSFRNTEltYWdlTG9hZGVyKiBpbWFnZUxvYWRlciA9IGVsZW1lbnQtPmltYWdlTG9hZGVy
KCk7CkBAIC0xOTcsOCArMTk3LDggQEAgdW5zaWduZWQgSW1hZ2VJbnB1dFR5cGU6OndpZHRoKCkg
Y29uc3QKIAogICAgIGlmICghZWxlbWVudC0+cmVuZGVyZXIoKSkgewogICAgICAgICAvLyBDaGVj
ayB0aGUgYXR0cmlidXRlIGZpcnN0IGZvciBhbiBleHBsaWNpdCBwaXhlbCB2YWx1ZS4KLSAgICAg
ICAgaWYgKGF1dG8gb3B0aW9uYWxXaWR0aCA9IHBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcihl
bGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHdpZHRoQXR0cikpKQotICAgICAgICAgICAgcmV0dXJu
IG9wdGlvbmFsV2lkdGgudmFsdWUoKTsKKyAgICAgICAgaWYgKE9wdGlvbmFsPGludD4gd2lkdGgg
PSBwYXJzZUhUTUxOb25OZWdhdGl2ZUludGVnZXIoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZSh3
aWR0aEF0dHIpKSkKKyAgICAgICAgICAgIHJldHVybiB3aWR0aC52YWx1ZSgpOwogCiAgICAgICAg
IC8vIElmIHRoZSBpbWFnZSBpcyBhdmFpbGFibGUsIHVzZSBpdHMgd2lkdGguCiAgICAgICAgIEhU
TUxJbWFnZUxvYWRlciogaW1hZ2VMb2FkZXIgPSBlbGVtZW50LT5pbWFnZUxvYWRlcigpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcAppbmRleCAy
NzE2MzU3Li5hMDE1Y2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MUGFyc2VySWRpb21zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
UGFyc2VySWRpb21zLmNwcApAQCAtMjA2LDEzICsyMDYsMTMgQEAgT3B0aW9uYWw8aW50PiBwYXJz
ZUhUTUxJbnRlZ2VyKGNvbnN0IFN0cmluZyYgaW5wdXQpCiB9CiAKIC8vIGh0dHBzOi8vaHRtbC5z
cGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2luZnJhc3RydWN0dXJlLmh0bWwjcnVsZXMtZm9yLXBh
cnNpbmctbm9uLW5lZ2F0aXZlLWludGVnZXJzCi1PcHRpb25hbDx1bnNpZ25lZD4gcGFyc2VIVE1M
Tm9uTmVnYXRpdmVJbnRlZ2VyKGNvbnN0IFN0cmluZyYgaW5wdXQpCitPcHRpb25hbDxpbnQ+IHBh
cnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcihjb25zdCBTdHJpbmcmIGlucHV0KQogewogICAgIE9w
dGlvbmFsPGludD4gc2lnbmVkVmFsdWUgPSBwYXJzZUhUTUxJbnRlZ2VyKGlucHV0KTsKICAgICBp
ZiAoIXNpZ25lZFZhbHVlIHx8IHNpZ25lZFZhbHVlLnZhbHVlKCkgPCAwKQogICAgICAgICByZXR1
cm4gTnVsbG9wdDsKIAotICAgIHJldHVybiBzaWduZWRWYWx1ZS52YWx1ZSgpOworICAgIHJldHVy
biBzaWduZWRWYWx1ZTsKIH0KIAogc3RhdGljIGJvb2wgdGhyZWFkU2FmZUVxdWFsKGNvbnN0IFN0
cmluZ0ltcGwmIGEsIGNvbnN0IFN0cmluZ0ltcGwmIGIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmgKaW5kZXggMTQ1MjQ3NC4uMWQ1ODNjYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuaApAQCAtNjQsNyAr
NjQsNyBAQCBkb3VibGUgcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoY29uc3QgU3RyaW5nJiwg
ZG91YmxlIGZhbGxiYWNrVmFsdWUpOwogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8aW50PiBwYXJz
ZUhUTUxJbnRlZ2VyKGNvbnN0IFN0cmluZyYpOwogCiAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcv
c3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyNydWxlcy1mb3ItcGFyc2luZy1ub24tbmVnYXRp
dmUtaW50ZWdlcnMKLVdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPHVuc2lnbmVkPiBwYXJzZUhUTUxO
b25OZWdhdGl2ZUludGVnZXIoY29uc3QgU3RyaW5nJik7CitXRUJDT1JFX0VYUE9SVCBPcHRpb25h
bDxpbnQ+IHBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcihjb25zdCBTdHJpbmcmKTsKIAogLy8g
aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW5mcmFzdHJ1Y3R1cmUuaHRt
bCNjb3JzLXNldHRpbmdzLWF0dHJpYnV0ZQogU3RyaW5nIHBhcnNlQ09SU1NldHRpbmdzQXR0cmli
dXRlKGNvbnN0IEF0b21pY1N0cmluZyYpOwpAQCAtMTIxLDIwICsxMjEsMjUgQEAgaW5saW5lIHVu
c2lnbmVkIGxpbWl0VG9Pbmx5SFRNTE5vbk5lZ2F0aXZlTnVtYmVyc0dyZWF0ZXJUaGFuWmVybyh1
bnNpZ25lZCB2YWx1ZSwKIAogaW5saW5lIHVuc2lnbmVkIGxpbWl0VG9Pbmx5SFRNTE5vbk5lZ2F0
aXZlTnVtYmVyc0dyZWF0ZXJUaGFuWmVybyhjb25zdCBTdHJpbmcmIHN0cmluZ1ZhbHVlLCB1bnNp
Z25lZCBkZWZhdWx0VmFsdWUgPSAxKQogeworICAgIEFTU0VSVChkZWZhdWx0VmFsdWUgPiAwKTsK
KyAgICBBU1NFUlQoZGVmYXVsdFZhbHVlIDw9IG1heEhUTUxOb25OZWdhdGl2ZUludGVnZXIpOwog
ICAgIGF1dG8gb3B0aW9uYWxWYWx1ZSA9IHBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcihzdHJp
bmdWYWx1ZSk7CiAgICAgdW5zaWduZWQgdmFsdWUgPSBvcHRpb25hbFZhbHVlICYmIG9wdGlvbmFs
VmFsdWUudmFsdWUoKSA/IG9wdGlvbmFsVmFsdWUudmFsdWUoKSA6IGRlZmF1bHRWYWx1ZTsKLSAg
ICBBU1NFUlQodmFsdWUgPiAwICYmIHZhbHVlIDw9IG1heEhUTUxOb25OZWdhdGl2ZUludGVnZXIp
OworICAgIEFTU0VSVCh2YWx1ZSA+IDApOworICAgIEFTU0VSVCh2YWx1ZSA8PSBtYXhIVE1MTm9u
TmVnYXRpdmVJbnRlZ2VyKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKIC8vIGh0dHBzOi8vaHRt
bC5zcGVjLndoYXR3Zy5vcmcvI3JlZmxlY3RpbmctY29udGVudC1hdHRyaWJ1dGVzLWluLWlkbC1h
dHRyaWJ1dGVzOmlkbC11bnNpZ25lZC1sb25nCiBpbmxpbmUgdW5zaWduZWQgbGltaXRUb09ubHlI
VE1MTm9uTmVnYXRpdmUodW5zaWduZWQgdmFsdWUsIHVuc2lnbmVkIGRlZmF1bHRWYWx1ZSA9IDAp
CiB7CisgICAgQVNTRVJUKGRlZmF1bHRWYWx1ZSA8PSBtYXhIVE1MTm9uTmVnYXRpdmVJbnRlZ2Vy
KTsKICAgICByZXR1cm4gdmFsdWUgPD0gbWF4SFRNTE5vbk5lZ2F0aXZlSW50ZWdlciA/IHZhbHVl
IDogZGVmYXVsdFZhbHVlOwogfQogCiBpbmxpbmUgdW5zaWduZWQgbGltaXRUb09ubHlIVE1MTm9u
TmVnYXRpdmUoY29uc3QgU3RyaW5nJiBzdHJpbmdWYWx1ZSwgdW5zaWduZWQgZGVmYXVsdFZhbHVl
ID0gMCkKIHsKKyAgICBBU1NFUlQoZGVmYXVsdFZhbHVlIDw9IG1heEhUTUxOb25OZWdhdGl2ZUlu
dGVnZXIpOwogICAgIHVuc2lnbmVkIHZhbHVlID0gcGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2Vy
KHN0cmluZ1ZhbHVlKS52YWx1ZU9yKGRlZmF1bHRWYWx1ZSk7CiAgICAgQVNTRVJUKHZhbHVlIDw9
IG1heEhUTUxOb25OZWdhdGl2ZUludGVnZXIpOwogICAgIHJldHVybiB2YWx1ZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50LmNwcAppbmRleCAzOGQ0ZTU1Li4xNzdjMDdlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnQuY3BwCkBAIC01MTgsOSArNTE4LDkgQEAgdm9pZCBTVkdFbGVtZW50OjpwYXJzZUF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHYK
ICAgICBpZiAobmFtZSA9PSBIVE1MTmFtZXM6OnRhYmluZGV4QXR0cikgewogICAgICAgICBpZiAo
dmFsdWUuaXNFbXB0eSgpKQogICAgICAgICAgICAgY2xlYXJUYWJJbmRleEV4cGxpY2l0bHlJZk5l
ZWRlZCgpOwotICAgICAgICBlbHNlIGlmIChhdXRvIG9wdGlvbmFsVGFiSW5kZXggPSBwYXJzZUhU
TUxJbnRlZ2VyKHZhbHVlKSkgeworICAgICAgICBlbHNlIGlmIChPcHRpb25hbDxpbnQ+IHRhYklu
ZGV4ID0gcGFyc2VIVE1MSW50ZWdlcih2YWx1ZSkpIHsKICAgICAgICAgICAgIC8vIENsYW1wIHRh
YmluZGV4IHRvIHRoZSByYW5nZSBvZiAnc2hvcnQnIHRvIG1hdGNoIEZpcmVmb3gncyBiZWhhdmlv
ci4KLSAgICAgICAgICAgIHNldFRhYkluZGV4RXhwbGljaXRseShzdGQ6Om1heChzdGF0aWNfY2Fz
dDxpbnQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8c2hvcnQ+OjptaW4oKSksIHN0ZDo6bWluKG9wdGlv
bmFsVGFiSW5kZXgudmFsdWUoKSwgc3RhdGljX2Nhc3Q8aW50PihzdGQ6Om51bWVyaWNfbGltaXRz
PHNob3J0Pjo6bWF4KCkpKSkpOworICAgICAgICAgICAgc2V0VGFiSW5kZXhFeHBsaWNpdGx5KHN0
ZDo6bWF4KHN0YXRpY19jYXN0PGludD4oc3RkOjpudW1lcmljX2xpbWl0czxzaG9ydD46Om1pbigp
KSwgc3RkOjptaW4odGFiSW5kZXgudmFsdWUoKSwgc3RhdGljX2Nhc3Q8aW50PihzdGQ6Om51bWVy
aWNfbGltaXRzPHNob3J0Pjo6bWF4KCkpKSkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsK
ICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272609</attachid>
            <date>2016-03-01 16:49:31 -0800</date>
            <delta_ts>2016-03-02 09:12:28 -0800</delta_ts>
            <desc>Fix review comments</desc>
            <filename>154845_nitfixes.patch</filename>
            <type>text/plain</type>
            <size>9925</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzMjMyNTQ4Li5lYjVjMjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAg
QEAKKzIwMTYtMDMtMDEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAg
ICBIYXZlIHBhcnNlSFRNTEludGVnZXIoKSAvIHBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcigp
IHVzZSBXVEY6Ok9wdGlvbmFsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTQ4NDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUYWtlIGludG8gY29uc2lkZXJhdGlvbiByZXZpZXcgY29tbWVudHMgbWFkZSBh
ZnRlciBsYW5kaW5nIHIxOTczODkuCisKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpwYXJzZUJvcmRlcldpZHRoQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAg
ICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1
dEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6bWF4TGVuZ3RoKToKKyAgICAgICAg
KiBodG1sL0ltYWdlSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlSW5wdXRU
eXBlOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VJbnB1dFR5cGU6OndpZHRoKToK
KyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcik6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTFBhcnNlcklkaW9tcy5oOgorICAgICAgICAoV2ViQ29yZTo6bGltaXRUb09ubHlIVE1M
Tm9uTmVnYXRpdmVOdW1iZXJzR3JlYXRlclRoYW5aZXJvKToKKyAgICAgICAgKFdlYkNvcmU6Omxp
bWl0VG9Pbmx5SFRNTE5vbk5lZ2F0aXZlKToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisKIDIwMTYt
MDMtMDEgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIGNvbS5h
cHBsZS5XZWJLaXQuTmV0d29ya2luZy5EZXZlbG9wbWVudCBjcmFzaGVzIGluIFdlYkNvcmU6OmZv
cm1PcGVuKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKaW5kZXggYmQ2MjNhZC4uNGY1
ODAzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKQEAgLTEzMyw4ICsxMzMsMTAg
QEAgc3RhdGljIGlubGluZSBDU1NWYWx1ZUlEIHVuaWNvZGVCaWRpQXR0cmlidXRlRm9yRGlyQXV0
byhIVE1MRWxlbWVudCYgZWxlbWVudCkKIAogdW5zaWduZWQgSFRNTEVsZW1lbnQ6OnBhcnNlQm9y
ZGVyV2lkdGhBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkgY29uc3QKIHsKLSAg
ICBhdXRvIG9wdGlvbmFsQm9yZGVyV2lkdGggPSB2YWx1ZS5pc0VtcHR5KCkgPyBOdWxsb3B0IDog
cGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2VyKHZhbHVlKTsKLSAgICByZXR1cm4gb3B0aW9uYWxC
b3JkZXJXaWR0aC52YWx1ZU9yKGhhc1RhZ05hbWUodGFibGVUYWcpID8gMSA6IDApOworICAgIGlm
IChPcHRpb25hbDxpbnQ+IGJvcmRlcldpZHRoID0gcGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2Vy
KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGJvcmRlcldpZHRoLnZhbHVlKCk7CisKKyAgICByZXR1
cm4gaGFzVGFnTmFtZSh0YWJsZVRhZykgPyAxIDogMDsKIH0KIAogdm9pZCBIVE1MRWxlbWVudDo6
YXBwbHlCb3JkZXJBdHRyaWJ1dGVUb1N0eWxlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIE11
dGFibGVTdHlsZVByb3BlcnRpZXMmIHN0eWxlKQpAQCAtNDUxLDkgKzQ1Myw5IEBAIHZvaWQgSFRN
TEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0
IEF0b21pY1N0cmluZyYKICAgICBpZiAobmFtZSA9PSB0YWJpbmRleEF0dHIpIHsKICAgICAgICAg
aWYgKHZhbHVlLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNsZWFyVGFiSW5kZXhFeHBsaWNpdGx5
SWZOZWVkZWQoKTsKLSAgICAgICAgZWxzZSBpZiAoYXV0byBvcHRpb25hbFRhYkluZGV4ID0gcGFy
c2VIVE1MSW50ZWdlcih2YWx1ZSkpIHsKKyAgICAgICAgZWxzZSBpZiAoT3B0aW9uYWw8aW50PiB0
YWJJbmRleCA9IHBhcnNlSFRNTEludGVnZXIodmFsdWUpKSB7CiAgICAgICAgICAgICAvLyBDbGFt
cCB0YWIgaW5kZXggdG8gYSAxNi1iaXQgdmFsdWUgdG8gbWF0Y2ggRmlyZWZveCdzIGJlaGF2aW9y
LgotICAgICAgICAgICAgc2V0VGFiSW5kZXhFeHBsaWNpdGx5KHN0ZDo6bWF4KC0weDgwMDAsIHN0
ZDo6bWluKG9wdGlvbmFsVGFiSW5kZXgudmFsdWUoKSwgMHg3RkZGKSkpOworICAgICAgICAgICAg
c2V0VGFiSW5kZXhFeHBsaWNpdGx5KHN0ZDo6bWF4KC0weDgwMDAsIHN0ZDo6bWluKHRhYkluZGV4
LnZhbHVlKCksIDB4N0ZGRikpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXggMDhkZDljNy4uMGJh
NWZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC04OSw3
ICs4OSw3IEBAIHByaXZhdGU6CiAvLyBsYXJnZS4gSG93ZXZlciwgZHVlIHRvIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDUzNiB0aGluZ3MKIC8vIGdldCByYXRoZXIg
c2x1Z2dpc2ggd2hlbiBhIHRleHQgZmllbGQgaGFzIGEgbGFyZ2VyIG51bWJlciBvZiBjaGFyYWN0
ZXJzIHRoYW4KIC8vIHRoaXMsIGV2ZW4gd2hlbiBqdXN0IGNsaWNraW5nIGluIHRoZSB0ZXh0IGZp
ZWxkLgotY29uc3QgdW5zaWduZWQgSFRNTElucHV0RWxlbWVudDo6bWF4aW11bUxlbmd0aCA9IDUy
NDI4ODsKK2NvbnN0IGludCBIVE1MSW5wdXRFbGVtZW50OjptYXhpbXVtTGVuZ3RoID0gNTI0Mjg4
OwogY29uc3QgaW50IGRlZmF1bHRTaXplID0gMjA7CiBjb25zdCBpbnQgbWF4U2F2ZWRSZXN1bHRz
ID0gMjU2OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCmluZGV4IDc3Njhj
N2YuLmE5ODVmNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCkBAIC0y
OTIsNyArMjkyLDcgQEAgcHVibGljOgogICAgIGJvb2wgc2hvdWxkVXNlTWVkaWFDYXB0dXJlKCkg
Y29uc3Q7CiAjZW5kaWYKIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhpbXVtTGVuZ3Ro
OworICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bUxlbmd0aDsKIAogICAgIHVuc2lnbmVkIGhl
aWdodCgpIGNvbnN0OwogICAgIHVuc2lnbmVkIHdpZHRoKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAppbmRleCAwMGNhMzVkLi5iYjhkZmRmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKQEAgLTQyMywx
MCArNDIzLDcgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpzZXREZWZhdWx0VmFsdWUoY29u
c3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUpCiAKIGludCBIVE1MVGV4dEFyZWFFbGVtZW50OjptYXhM
ZW5ndGgoKSBjb25zdAogewotICAgIGF1dG8gb3B0aW9uYWxNYXhMZW5ndGggPSBwYXJzZUhUTUxO
b25OZWdhdGl2ZUludGVnZXIoZmFzdEdldEF0dHJpYnV0ZShtYXhsZW5ndGhBdHRyKSk7Ci0gICAg
aWYgKCFvcHRpb25hbE1heExlbmd0aCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVybiBv
cHRpb25hbE1heExlbmd0aC52YWx1ZSgpOworICAgIHJldHVybiBwYXJzZUhUTUxOb25OZWdhdGl2
ZUludGVnZXIoZmFzdEdldEF0dHJpYnV0ZShtYXhsZW5ndGhBdHRyKSkudmFsdWVPcigtMSk7CiB9
CiAKIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6c2V0TWF4TGVuZ3RoKGludCBuZXdWYWx1ZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdl
SW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwCmlu
ZGV4IGQ0MjE2YTguLmUwOGM0OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1h
Z2VJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUu
Y3BwCkBAIC0xNzYsOCArMTc2LDggQEAgdW5zaWduZWQgSW1hZ2VJbnB1dFR5cGU6OmhlaWdodCgp
IGNvbnN0CiAKICAgICBpZiAoIWVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgLy8gQ2hl
Y2sgdGhlIGF0dHJpYnV0ZSBmaXJzdCBmb3IgYW4gZXhwbGljaXQgcGl4ZWwgdmFsdWUuCi0gICAg
ICAgIGlmIChhdXRvIG9wdGlvbmFsSGVpZ2h0ID0gcGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2Vy
KGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0cikpKQotICAgICAgICAgICAgcmV0
dXJuIG9wdGlvbmFsSGVpZ2h0LnZhbHVlKCk7CisgICAgICAgIGlmIChPcHRpb25hbDxpbnQ+IGhl
aWdodCA9IHBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcihlbGVtZW50LT5mYXN0R2V0QXR0cmli
dXRlKGhlaWdodEF0dHIpKSkKKyAgICAgICAgICAgIHJldHVybiBoZWlnaHQudmFsdWUoKTsKIAog
ICAgICAgICAvLyBJZiB0aGUgaW1hZ2UgaXMgYXZhaWxhYmxlLCB1c2UgaXRzIGhlaWdodC4KICAg
ICAgICAgSFRNTEltYWdlTG9hZGVyKiBpbWFnZUxvYWRlciA9IGVsZW1lbnQtPmltYWdlTG9hZGVy
KCk7CkBAIC0xOTcsOCArMTk3LDggQEAgdW5zaWduZWQgSW1hZ2VJbnB1dFR5cGU6OndpZHRoKCkg
Y29uc3QKIAogICAgIGlmICghZWxlbWVudC0+cmVuZGVyZXIoKSkgewogICAgICAgICAvLyBDaGVj
ayB0aGUgYXR0cmlidXRlIGZpcnN0IGZvciBhbiBleHBsaWNpdCBwaXhlbCB2YWx1ZS4KLSAgICAg
ICAgaWYgKGF1dG8gb3B0aW9uYWxXaWR0aCA9IHBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcihl
bGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHdpZHRoQXR0cikpKQotICAgICAgICAgICAgcmV0dXJu
IG9wdGlvbmFsV2lkdGgudmFsdWUoKTsKKyAgICAgICAgaWYgKE9wdGlvbmFsPGludD4gd2lkdGgg
PSBwYXJzZUhUTUxOb25OZWdhdGl2ZUludGVnZXIoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZSh3
aWR0aEF0dHIpKSkKKyAgICAgICAgICAgIHJldHVybiB3aWR0aC52YWx1ZSgpOwogCiAgICAgICAg
IC8vIElmIHRoZSBpbWFnZSBpcyBhdmFpbGFibGUsIHVzZSBpdHMgd2lkdGguCiAgICAgICAgIEhU
TUxJbWFnZUxvYWRlciogaW1hZ2VMb2FkZXIgPSBlbGVtZW50LT5pbWFnZUxvYWRlcigpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcAppbmRleCAy
NzE2MzU3Li5hMDE1Y2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MUGFyc2VySWRpb21zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
UGFyc2VySWRpb21zLmNwcApAQCAtMjA2LDEzICsyMDYsMTMgQEAgT3B0aW9uYWw8aW50PiBwYXJz
ZUhUTUxJbnRlZ2VyKGNvbnN0IFN0cmluZyYgaW5wdXQpCiB9CiAKIC8vIGh0dHBzOi8vaHRtbC5z
cGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2luZnJhc3RydWN0dXJlLmh0bWwjcnVsZXMtZm9yLXBh
cnNpbmctbm9uLW5lZ2F0aXZlLWludGVnZXJzCi1PcHRpb25hbDx1bnNpZ25lZD4gcGFyc2VIVE1M
Tm9uTmVnYXRpdmVJbnRlZ2VyKGNvbnN0IFN0cmluZyYgaW5wdXQpCitPcHRpb25hbDxpbnQ+IHBh
cnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcihjb25zdCBTdHJpbmcmIGlucHV0KQogewogICAgIE9w
dGlvbmFsPGludD4gc2lnbmVkVmFsdWUgPSBwYXJzZUhUTUxJbnRlZ2VyKGlucHV0KTsKICAgICBp
ZiAoIXNpZ25lZFZhbHVlIHx8IHNpZ25lZFZhbHVlLnZhbHVlKCkgPCAwKQogICAgICAgICByZXR1
cm4gTnVsbG9wdDsKIAotICAgIHJldHVybiBzaWduZWRWYWx1ZS52YWx1ZSgpOworICAgIHJldHVy
biBzaWduZWRWYWx1ZTsKIH0KIAogc3RhdGljIGJvb2wgdGhyZWFkU2FmZUVxdWFsKGNvbnN0IFN0
cmluZ0ltcGwmIGEsIGNvbnN0IFN0cmluZ0ltcGwmIGIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmgKaW5kZXggMTQ1MjQ3NC4uMWQ1ODNjYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuaApAQCAtNjQsNyAr
NjQsNyBAQCBkb3VibGUgcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoY29uc3QgU3RyaW5nJiwg
ZG91YmxlIGZhbGxiYWNrVmFsdWUpOwogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8aW50PiBwYXJz
ZUhUTUxJbnRlZ2VyKGNvbnN0IFN0cmluZyYpOwogCiAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcv
c3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyNydWxlcy1mb3ItcGFyc2luZy1ub24tbmVnYXRp
dmUtaW50ZWdlcnMKLVdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPHVuc2lnbmVkPiBwYXJzZUhUTUxO
b25OZWdhdGl2ZUludGVnZXIoY29uc3QgU3RyaW5nJik7CitXRUJDT1JFX0VYUE9SVCBPcHRpb25h
bDxpbnQ+IHBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcihjb25zdCBTdHJpbmcmKTsKIAogLy8g
aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW5mcmFzdHJ1Y3R1cmUuaHRt
bCNjb3JzLXNldHRpbmdzLWF0dHJpYnV0ZQogU3RyaW5nIHBhcnNlQ09SU1NldHRpbmdzQXR0cmli
dXRlKGNvbnN0IEF0b21pY1N0cmluZyYpOwpAQCAtMTIxLDIwICsxMjEsMjUgQEAgaW5saW5lIHVu
c2lnbmVkIGxpbWl0VG9Pbmx5SFRNTE5vbk5lZ2F0aXZlTnVtYmVyc0dyZWF0ZXJUaGFuWmVybyh1
bnNpZ25lZCB2YWx1ZSwKIAogaW5saW5lIHVuc2lnbmVkIGxpbWl0VG9Pbmx5SFRNTE5vbk5lZ2F0
aXZlTnVtYmVyc0dyZWF0ZXJUaGFuWmVybyhjb25zdCBTdHJpbmcmIHN0cmluZ1ZhbHVlLCB1bnNp
Z25lZCBkZWZhdWx0VmFsdWUgPSAxKQogeworICAgIEFTU0VSVChkZWZhdWx0VmFsdWUgPiAwKTsK
KyAgICBBU1NFUlQoZGVmYXVsdFZhbHVlIDw9IG1heEhUTUxOb25OZWdhdGl2ZUludGVnZXIpOwog
ICAgIGF1dG8gb3B0aW9uYWxWYWx1ZSA9IHBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcihzdHJp
bmdWYWx1ZSk7CiAgICAgdW5zaWduZWQgdmFsdWUgPSBvcHRpb25hbFZhbHVlICYmIG9wdGlvbmFs
VmFsdWUudmFsdWUoKSA/IG9wdGlvbmFsVmFsdWUudmFsdWUoKSA6IGRlZmF1bHRWYWx1ZTsKLSAg
ICBBU1NFUlQodmFsdWUgPiAwICYmIHZhbHVlIDw9IG1heEhUTUxOb25OZWdhdGl2ZUludGVnZXIp
OworICAgIEFTU0VSVCh2YWx1ZSA+IDApOworICAgIEFTU0VSVCh2YWx1ZSA8PSBtYXhIVE1MTm9u
TmVnYXRpdmVJbnRlZ2VyKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKIC8vIGh0dHBzOi8vaHRt
bC5zcGVjLndoYXR3Zy5vcmcvI3JlZmxlY3RpbmctY29udGVudC1hdHRyaWJ1dGVzLWluLWlkbC1h
dHRyaWJ1dGVzOmlkbC11bnNpZ25lZC1sb25nCiBpbmxpbmUgdW5zaWduZWQgbGltaXRUb09ubHlI
VE1MTm9uTmVnYXRpdmUodW5zaWduZWQgdmFsdWUsIHVuc2lnbmVkIGRlZmF1bHRWYWx1ZSA9IDAp
CiB7CisgICAgQVNTRVJUKGRlZmF1bHRWYWx1ZSA8PSBtYXhIVE1MTm9uTmVnYXRpdmVJbnRlZ2Vy
KTsKICAgICByZXR1cm4gdmFsdWUgPD0gbWF4SFRNTE5vbk5lZ2F0aXZlSW50ZWdlciA/IHZhbHVl
IDogZGVmYXVsdFZhbHVlOwogfQogCiBpbmxpbmUgdW5zaWduZWQgbGltaXRUb09ubHlIVE1MTm9u
TmVnYXRpdmUoY29uc3QgU3RyaW5nJiBzdHJpbmdWYWx1ZSwgdW5zaWduZWQgZGVmYXVsdFZhbHVl
ID0gMCkKIHsKKyAgICBBU1NFUlQoZGVmYXVsdFZhbHVlIDw9IG1heEhUTUxOb25OZWdhdGl2ZUlu
dGVnZXIpOwogICAgIHVuc2lnbmVkIHZhbHVlID0gcGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2Vy
KHN0cmluZ1ZhbHVlKS52YWx1ZU9yKGRlZmF1bHRWYWx1ZSk7CiAgICAgQVNTRVJUKHZhbHVlIDw9
IG1heEhUTUxOb25OZWdhdGl2ZUludGVnZXIpOwogICAgIHJldHVybiB2YWx1ZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50LmNwcAppbmRleCAzOGQ0ZTU1Li4xNzdjMDdlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnQuY3BwCkBAIC01MTgsOSArNTE4LDkgQEAgdm9pZCBTVkdFbGVtZW50OjpwYXJzZUF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHYK
ICAgICBpZiAobmFtZSA9PSBIVE1MTmFtZXM6OnRhYmluZGV4QXR0cikgewogICAgICAgICBpZiAo
dmFsdWUuaXNFbXB0eSgpKQogICAgICAgICAgICAgY2xlYXJUYWJJbmRleEV4cGxpY2l0bHlJZk5l
ZWRlZCgpOwotICAgICAgICBlbHNlIGlmIChhdXRvIG9wdGlvbmFsVGFiSW5kZXggPSBwYXJzZUhU
TUxJbnRlZ2VyKHZhbHVlKSkgeworICAgICAgICBlbHNlIGlmIChPcHRpb25hbDxpbnQ+IHRhYklu
ZGV4ID0gcGFyc2VIVE1MSW50ZWdlcih2YWx1ZSkpIHsKICAgICAgICAgICAgIC8vIENsYW1wIHRh
YmluZGV4IHRvIHRoZSByYW5nZSBvZiAnc2hvcnQnIHRvIG1hdGNoIEZpcmVmb3gncyBiZWhhdmlv
ci4KLSAgICAgICAgICAgIHNldFRhYkluZGV4RXhwbGljaXRseShzdGQ6Om1heChzdGF0aWNfY2Fz
dDxpbnQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8c2hvcnQ+OjptaW4oKSksIHN0ZDo6bWluKG9wdGlv
bmFsVGFiSW5kZXgudmFsdWUoKSwgc3RhdGljX2Nhc3Q8aW50PihzdGQ6Om51bWVyaWNfbGltaXRz
PHNob3J0Pjo6bWF4KCkpKSkpOworICAgICAgICAgICAgc2V0VGFiSW5kZXhFeHBsaWNpdGx5KHN0
ZDo6bWF4KHN0YXRpY19jYXN0PGludD4oc3RkOjpudW1lcmljX2xpbWl0czxzaG9ydD46Om1pbigp
KSwgc3RkOjptaW4odGFiSW5kZXgudmFsdWUoKSwgc3RhdGljX2Nhc3Q8aW50PihzdGQ6Om51bWVy
aWNfbGltaXRzPHNob3J0Pjo6bWF4KCkpKSkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsK
ICAgICB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>