<?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>127266</bug_id>
          
          <creation_ts>2014-01-19 23:24:09 -0800</creation_ts>
          <short_desc>Add a nicer way to iterate over all the attributes of an element</short_desc>
          <delta_ts>2014-01-20 17:27:38 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>969725</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-19 23:24:09 -0800</bug_when>
    <thetext>Add a nicer way to iterate over all the attributes of an element</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969728</commentid>
    <comment_count>1</comment_count>
      <attachid>221620</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-19 23:33:29 -0800</bug_when>
    <thetext>Created attachment 221620
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969870</commentid>
    <comment_count>2</comment_count>
      <attachid>221620</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-01-20 09:13:41 -0800</bug_when>
    <thetext>Comment on attachment 221620
Patch

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

&gt; Source/WebCore/dom/ElementData.h:73
&gt; +class AttributeIteratorAccessor {
&gt; +public:
&gt; +    AttributeIteratorAccessor(const Attribute* array, unsigned size)
&gt; +        : m_array(array)
&gt; +        , m_size(size)
&gt; +    {
&gt; +    }
&gt; +
&gt; +    AttributeConstIterator begin() const { return AttributeConstIterator(m_array, 0); }
&gt; +    AttributeConstIterator end() const { return AttributeConstIterator(m_array, m_size); }
&gt; +private:
&gt; +    const Attribute* m_array;
&gt; +    unsigned m_size;
&gt; +};

I think you can use WTF::IteratorRange here instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969884</commentid>
    <comment_count>3</comment_count>
      <attachid>221620</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-20 09:30:44 -0800</bug_when>
    <thetext>Comment on attachment 221620
Patch

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

r=me

Please consider Anders&apos;s suggestion.

&gt; Source/WebCore/dom/ElementData.cpp:182
&gt; +    unsigned count = length();

In cases like this, I prefer &quot;unsigned length = this-&gt;length()&quot; or &quot;unsigned length = ElementData::length()&quot;. It&apos;s bad when one thing becomes two. Taking &quot;length&quot; and renaming it to &quot;count&quot; makes it seem like you&apos;ve changed it somehow, which can be confusing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970087</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-20 17:07:09 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; I think you can use WTF::IteratorRange here instead.

My first idea was to just use the Attribute* as the iterator. But for some reason clang really sucks iterating with pointers :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970092</commentid>
    <comment_count>5</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-01-20 17:27:38 -0800</bug_when>
    <thetext>Committed r162394: &lt;http://trac.webkit.org/changeset/162394&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221620</attachid>
            <date>2014-01-19 23:33:29 -0800</date>
            <delta_ts>2014-01-20 09:30:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-127266-20140119233327.patch</filename>
            <type>text/plain</type>
            <size>30494</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MjMwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBACisyMDE0LTAxLTE5ICBCZW5qYW1p
biBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgYSBuaWNlciB3
YXkgdG8gaXRlcmF0ZSBvdmVyIGFsbCB0aGUgYXR0cmlidXRlcyBvZiBhbiBlbGVtZW50CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjcyNjYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHVzaW5nIEVs
ZW1lbnQ6OmF0dHJpYnV0ZUF0KCkgaW4gYSBsb29wLCB0aGUgY29tcGlsZXIgaGFkIHRvIGdlbmVy
YXRlIHR3byBraW5kcyBvZgorICAgICAgICBhY2Nlc3NvcjoKKyAgICAgICAgLUlmIHRoZSBlbGVt
ZW50IGRhdGEgaXMgdW5pcXVlLCB0aGUgbGVuZ3RoIGFuZCBkYXRhIGNvbWVzIGZyb20gdGhlIGF0
dHJpYnV0ZSBWZWN0b3IuCisgICAgICAgIC1JZiB0aGUgZWxlbWVudCBkYXRhIGlzIHNoYXJlZCwg
dGhlIGRhdGEgY29tZXMgZnJvbSB0aGUgdGFpbCBvZiBlbGVtZW50RGF0YSBpdHNlbGYuCisKKyAg
ICAgICAgVGhlIGNob2ljZSB3YXMgZG9uZSBmb3IgZXZlcnkgYWNjZXNzLCB3aGljaCBjYXVzZWQg
dGhlIGFzc2VtYmx5IHRvIGJlIGEgbGl0dGxlCisgICAgICAgIGhhcmQgdG8gZm9sbG93LgorICAg
ICAgICBUaGlzIHBhdGNoIHVuaWZ5IHRoZSBkYXRhIGFjY2VzcyBieSBkb2luZyBldmVyeXRoaW5n
IGFzIGEgYXJyYXkgcG9pbnRlciB3aXRoIG9mZnNldCAoZ2V0dGluZworICAgICAgICB0aGF0IGRh
dGEgZnJvbSBWZWN0b3Igd2hlbiBuZWNlc3NhcnkpLgorCisgICAgICAgIFRvIG1ha2UgaXQgZWFz
aWVyIHRvIGRvIHRoZSByaWdodCB0aGluZywgYSBuZXcgaXRlcmF0b3Igd2FzIGFkZGVkIHNvIHRo
YXQgcmFuZ2UtYmFzZWQgbG9vcHMKKyAgICAgICAgY2FuIHJlcGxhY2UgYWxsIHRoZSBmYXVsdHkg
Y2FzZXMuCisKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmFueUF0dHJpYnV0ZU1hdGNoZXMpOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNr
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tFeGFjdEF0dHJp
YnV0ZSk6CisgICAgICAgICogZG9tL0RhdGFzZXRET01TdHJpbmdNYXAuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YXNldERPTVN0cmluZ01hcDo6Z2V0TmFtZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YXNldERPTVN0cmluZ01hcDo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhc2V0
RE9NU3RyaW5nTWFwOjpjb250YWlucyk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudDo6bm9ybWFsaXplQXR0cmlidXRlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50OjpkZXRhY2hBbGxBdHRyTm9kZXNGcm9tRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50OjpjbG9uZUF0dHJpYnV0ZXNGcm9tRWxlbWVudCk6CisgICAgICAg
ICogZG9tL0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmF0dHJpYnV0ZXNJ
dGVyYXRvcik6CisgICAgICAgICogZG9tL0VsZW1lbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnREYXRhOjppc0VxdWl2YWxlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dERhdGE6OmZpbmRBdHRyaWJ1dGVJbmRleEJ5TmFtZVNsb3dDYXNlKToKKyAgICAgICAgKiBkb20v
RWxlbWVudERhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkF0dHJpYnV0ZUNvbnN0SXRlcmF0b3I6
OkF0dHJpYnV0ZUNvbnN0SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QXR0cmlidXRlQ29u
c3RJdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKFdlYkNvcmU6OkF0dHJpYnV0ZUNvbnN0
SXRlcmF0b3I6Om9wZXJhdG9yLT4pOgorICAgICAgICAoV2ViQ29yZTo6QXR0cmlidXRlQ29uc3RJ
dGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChXZWJDb3JlOjpBdHRyaWJ1dGVDb25zdEl0
ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkF0dHJpYnV0ZUNvbnN0SXRl
cmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6QXR0cmlidXRlSXRlcmF0b3JB
Y2Nlc3Nvcjo6QXR0cmlidXRlSXRlcmF0b3JBY2Nlc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpB
dHRyaWJ1dGVJdGVyYXRvckFjY2Vzc29yOjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpBdHRy
aWJ1dGVJdGVyYXRvckFjY2Vzc29yOjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERh
dGE6OmF0dHJpYnV0ZXNJdGVyYXRvcik6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6aXNEZWZhdWx0TmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6Omxvb2t1cE5hbWVzcGFjZVVSSSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpsb29r
dXBOYW1lc3BhY2VQcmVmaXgpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y29tcGFyZURvY3Vt
ZW50UG9zaXRpb24pOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6Om1ha2VQcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZUtl
eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjpyZWJ1aWxkUHJlc2VudGF0aW9u
QXR0cmlidXRlU3R5bGUpOgorICAgICAgICAqIGVkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQpOgor
ICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBsZXRl
VVJMcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
RWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQ6OnBhcmFtZXRlcnNGb3JQbHVnaW4pOgorICAgICAg
ICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9i
amVjdEVsZW1lbnQ6OnBhcmFtZXRlcnNGb3JQbHVnaW4pOgorICAgICAgICAqIGluc3BlY3Rvci9E
T01QYXRjaFN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGF0Y2hTdXBwb3J0Ojpp
bm5lclBhdGNoTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpET01QYXRjaFN1cHBvcnQ6OmNyZWF0
ZURpZ2VzdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRyaWJ1dGVzQXNUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpidWlsZEFycmF5Rm9yRWxlbWVu
dEF0dHJpYnV0ZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JOb2RlRmluZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck5vZGVGaW5kZXI6Om1hdGNoZXNFbGVtZW50
KToKKyAgICAgICAgKiBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmlzQ2hhcnNldFNwZWNpZnlpbmdOb2RlKToKKyAgICAgICAgKiB4bWwvWFBhdGhOb2RlU2V0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOb2RlU2V0Ojp0cmF2ZXJzYWxTb3J0KToKKyAg
ICAgICAgKiB4bWwvWFBhdGhTdGVwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVw
Ojpub2Rlc0luQXhpcyk6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxp
YnhtbDIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3Vt
ZW50UGFyc2VyKToKKwogMjAxNC0wMS0xOSAgSmlud29vIFNvbmcgIDxqaW53b283LnNvbmdAc2Ft
c3VuZy5jb20+CiAKICAgICAgICAgVXNlIHVuc2lnbmVkIHR5cGUgZm9yIHRoZSBzaXplIG9mIENT
U1BhcnNlclZhbHVlTGlzdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5j
cHAJKHJldmlzaW9uIDE2MjI5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNr
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDIsOSArMzQyLDcgQEAgc3RhdGljIGJvb2wgYXR0
cmlidXRlVmFsdWVNYXRjaGVzKGNvbnN0IAogc3RhdGljIGJvb2wgYW55QXR0cmlidXRlTWF0Y2hl
cyhFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIGNvbnN0IFF1
YWxpZmllZE5hbWUmIHNlbGVjdG9yQXR0ciwgYm9vbCBjYXNlU2Vuc2l0aXZlKQogewogICAgIEFT
U0VSVChlbGVtZW50LT5oYXNBdHRyaWJ1dGVzV2l0aG91dFVwZGF0ZSgpKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMCwgY291bnQgPSBlbGVtZW50LT5hdHRyaWJ1dGVDb3VudCgpOyBpIDwgY291bnQ7
ICsraSkgewotICAgICAgICBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IGVsZW1lbnQtPmF0
dHJpYnV0ZUF0KGkpOwotCisgICAgZm9yIChjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA6IGVs
ZW1lbnQtPmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7CiAgICAgICAgIGlmICghYXR0cmlidXRlLm1h
dGNoZXMoc2VsZWN0b3JBdHRyLnByZWZpeCgpLCBlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgPyBz
ZWxlY3Rvci0+YXR0cmlidXRlQ2Fub25pY2FsTG9jYWxOYW1lKCkgOiBzZWxlY3RvckF0dHIubG9j
YWxOYW1lKCksIHNlbGVjdG9yQXR0ci5uYW1lc3BhY2VVUkkoKSkpCiAgICAgICAgICAgICBjb250
aW51ZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAkocmV2aXNpb24g
MTYyMjk5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzEsOSArMTMxLDcgQEAgaW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpj
aGVja0V4YWN0QQogICAgIGlmICghZWxlbWVudC0+aGFzQXR0cmlidXRlc1dpdGhvdXRVcGRhdGUo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxO
YW1lID0gZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpID8gc2VsZWN0b3ItPmF0dHJpYnV0ZUNhbm9u
aWNhbExvY2FsTmFtZSgpIDogc2VsZWN0b3JBdHRyaWJ1dGVOYW1lLmxvY2FsTmFtZSgpOwotICAg
IHVuc2lnbmVkIHNpemUgPSBlbGVtZW50LT5hdHRyaWJ1dGVDb3VudCgpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgY29uc3QgQXR0cmlidXRlJiBh
dHRyaWJ1dGUgPSBlbGVtZW50LT5hdHRyaWJ1dGVBdChpKTsKKyAgICBmb3IgKGNvbnN0IEF0dHJp
YnV0ZSYgYXR0cmlidXRlIDogZWxlbWVudC0+YXR0cmlidXRlc0l0ZXJhdG9yKCkpIHsKICAgICAg
ICAgaWYgKGF0dHJpYnV0ZS5tYXRjaGVzKHNlbGVjdG9yQXR0cmlidXRlTmFtZS5wcmVmaXgoKSwg
bG9jYWxOYW1lLCBzZWxlY3RvckF0dHJpYnV0ZU5hbWUubmFtZXNwYWNlVVJJKCkpICYmICghdmFs
dWUgfHwgYXR0cmlidXRlLnZhbHVlKCkuaW1wbCgpID09IHZhbHVlKSkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0RE9NU3Ry
aW5nTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRGF0YXNldERPTVN0
cmluZ01hcC5jcHAJKHJldmlzaW9uIDE2MjI5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRh
c2V0RE9NU3RyaW5nTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDkgKzEzOCw3IEBAIHZv
aWQgRGF0YXNldERPTVN0cmluZ01hcDo6Z2V0TmFtZXMoVmVjdG8KICAgICBpZiAoIW1fZWxlbWVu
dC5oYXNBdHRyaWJ1dGVzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVuc2lnbmVkIGxlbmd0
aCA9IG1fZWxlbWVudC5hdHRyaWJ1dGVDb3VudCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9
IG1fZWxlbWVudC5hdHRyaWJ1dGVBdChpKTsKKyAgICBmb3IgKGNvbnN0IEF0dHJpYnV0ZSYgYXR0
cmlidXRlIDogbV9lbGVtZW50LmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7CiAgICAgICAgIGlmIChp
c1ZhbGlkQXR0cmlidXRlTmFtZShhdHRyaWJ1dGUubG9jYWxOYW1lKCkpKQogICAgICAgICAgICAg
bmFtZXMuYXBwZW5kKGNvbnZlcnRBdHRyaWJ1dGVOYW1lVG9Qcm9wZXJ0eU5hbWUoYXR0cmlidXRl
LmxvY2FsTmFtZSgpKSk7CiAgICAgfQpAQCAtMTUxLDkgKzE0OSw3IEBAIFN0cmluZyBEYXRhc2V0
RE9NU3RyaW5nTWFwOjppdGVtKGNvbnN0IFMKICAgICBpZiAoIW1fZWxlbWVudC5oYXNBdHRyaWJ1
dGVzKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIHVuc2lnbmVkIGxlbmd0aCA9
IG1fZWxlbWVudC5hdHRyaWJ1dGVDb3VudCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgewotICAgICAgICBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IG1f
ZWxlbWVudC5hdHRyaWJ1dGVBdChpKTsKKyAgICBmb3IgKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmli
dXRlIDogbV9lbGVtZW50LmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7CiAgICAgICAgIGlmIChwcm9w
ZXJ0eU5hbWVNYXRjaGVzQXR0cmlidXRlTmFtZShuYW1lLCBhdHRyaWJ1dGUubG9jYWxOYW1lKCkp
KQogICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZS52YWx1ZSgpOwogICAgIH0KQEAgLTE2Niw5
ICsxNjIsNyBAQCBib29sIERhdGFzZXRET01TdHJpbmdNYXA6OmNvbnRhaW5zKGNvbnN0CiAgICAg
aWYgKCFtX2VsZW1lbnQuaGFzQXR0cmlidXRlcygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2VsZW1lbnQuYXR0cmlidXRlQ291bnQoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgY29uc3QgQXR0
cmlidXRlJiBhdHRyaWJ1dGUgPSBtX2VsZW1lbnQuYXR0cmlidXRlQXQoaSk7CisgICAgZm9yIChj
b25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA6IG1fZWxlbWVudC5hdHRyaWJ1dGVzSXRlcmF0b3Io
KSkgewogICAgICAgICBpZiAocHJvcGVydHlOYW1lTWF0Y2hlc0F0dHJpYnV0ZU5hbWUobmFtZSwg
YXR0cmlidXRlLmxvY2FsTmFtZSgpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjI5OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxNCw4ICsyMzE0LDgg
QEAgdm9pZCBFbGVtZW50Ojpub3JtYWxpemVBdHRyaWJ1dGVzKCkKIHsKICAgICBpZiAoIWhhc0F0
dHJpYnV0ZXMoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBhdHRyaWJ1dGVDb3VudCgpOyArK2kpIHsKLSAgICAgICAgaWYgKFJlZlB0cjxBdHRyPiBhdHRy
ID0gYXR0cklmRXhpc3RzKGF0dHJpYnV0ZUF0KGkpLm5hbWUoKSkpCisgICAgZm9yIChjb25zdCBB
dHRyaWJ1dGUmIGF0dHJpYnV0ZSA6IGF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7CisgICAgICAgIGlm
IChSZWZQdHI8QXR0cj4gYXR0ciA9IGF0dHJJZkV4aXN0cyhhdHRyaWJ1dGUubmFtZSgpKSkKICAg
ICAgICAgICAgIGF0dHItPm5vcm1hbGl6ZSgpOwogICAgIH0KIH0KQEAgLTI5MTYsOCArMjkxNiw3
IEBAIHZvaWQgRWxlbWVudDo6ZGV0YWNoQWxsQXR0ck5vZGVzRnJvbUVsZW0KICAgICBBdHRyTm9k
ZUxpc3QqIGF0dHJOb2RlTGlzdCA9IGF0dHJOb2RlTGlzdEZvckVsZW1lbnQodGhpcyk7CiAgICAg
QVNTRVJUKGF0dHJOb2RlTGlzdCk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0
cmlidXRlQ291bnQoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRl
ID0gYXR0cmlidXRlQXQoaSk7CisgICAgZm9yIChjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA6
IGF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7CiAgICAgICAgIGlmIChSZWZQdHI8QXR0cj4gYXR0ck5v
ZGUgPSBmaW5kQXR0ck5vZGVJbkxpc3QoKmF0dHJOb2RlTGlzdCwgYXR0cmlidXRlLm5hbWUoKSkp
CiAgICAgICAgICAgICBhdHRyTm9kZS0+ZGV0YWNoRnJvbUVsZW1lbnRXaXRoVmFsdWUoYXR0cmli
dXRlLnZhbHVlKCkpOwogICAgIH0KQEAgLTMwMzgsOSArMzAzNyw3IEBAIHZvaWQgRWxlbWVudDo6
Y2xvbmVBdHRyaWJ1dGVzRnJvbUVsZW1lbnQKICAgICBlbHNlCiAgICAgICAgIG1fZWxlbWVudERh
dGEgPSBvdGhlci5tX2VsZW1lbnREYXRhLT5tYWtlVW5pcXVlQ29weSgpOwogCi0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0gbV9lbGVtZW50RGF0YS0+bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmli
dXRlID0gY29uc3RfY2FzdDxjb25zdCBFbGVtZW50RGF0YSo+KG1fZWxlbWVudERhdGEuZ2V0KCkp
LT5hdHRyaWJ1dGVBdChpKTsKKyAgICBmb3IgKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlIDog
YXR0cmlidXRlc0l0ZXJhdG9yKCkpIHsKICAgICAgICAgYXR0cmlidXRlQ2hhbmdlZChhdHRyaWJ1
dGUubmFtZSgpLCBhdHRyaWJ1dGUudmFsdWUoKSwgTW9kaWZpZWRCeUNsb25pbmcpOwogICAgIH0K
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAkocmV2aXNpb24gMTYyMjk5KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDYgKzE4Niw3IEBAIHB1
YmxpYzoKIAogICAgIC8vIEludGVybmFsIG1ldGhvZHMgdGhhdCBhc3N1bWUgdGhlIGV4aXN0ZW5j
ZSBvZiBhdHRyaWJ1dGUgc3RvcmFnZSwgb25lIHNob3VsZCB1c2UgaGFzQXR0cmlidXRlcygpCiAg
ICAgLy8gYmVmb3JlIGNhbGxpbmcgdGhlbS4KKyAgICBBdHRyaWJ1dGVJdGVyYXRvckFjY2Vzc29y
IGF0dHJpYnV0ZXNJdGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIGVsZW1lbnREYXRhKCktPmF0dHJp
YnV0ZXNJdGVyYXRvcigpOyB9CiAgICAgdW5zaWduZWQgYXR0cmlidXRlQ291bnQoKSBjb25zdDsK
ICAgICBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdDsK
ICAgICBjb25zdCBBdHRyaWJ1dGUqIGZpbmRBdHRyaWJ1dGVCeU5hbWUoY29uc3QgUXVhbGlmaWVk
TmFtZSYpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnREYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudERhdGEuY3BwCShyZXZpc2lv
biAxNjIyOTkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudERhdGEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjMsMTIgKzE2MywxMCBAQCBib29sIEVsZW1lbnREYXRhOjppc0VxdWl2YWxl
bnQoY29uc3QgRWxlCiAgICAgaWYgKCFvdGhlcikKICAgICAgICAgcmV0dXJuIGlzRW1wdHkoKTsK
IAotICAgIHVuc2lnbmVkIGxlbiA9IGxlbmd0aCgpOwotICAgIGlmIChsZW4gIT0gb3RoZXItPmxl
bmd0aCgpKQorICAgIGlmIChsZW5ndGgoKSAhPSBvdGhlci0+bGVuZ3RoKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47IGkrKykgewot
ICAgICAgICBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZUF0KGkpOworICAg
IGZvciAoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUgOiBhdHRyaWJ1dGVzSXRlcmF0b3IoKSkg
ewogICAgICAgICBjb25zdCBBdHRyaWJ1dGUqIG90aGVyQXR0ciA9IG90aGVyLT5maW5kQXR0cmli
dXRlQnlOYW1lKGF0dHJpYnV0ZS5uYW1lKCkpOwogICAgICAgICBpZiAoIW90aGVyQXR0ciB8fCBh
dHRyaWJ1dGUudmFsdWUoKSAhPSBvdGhlckF0dHItPnZhbHVlKCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0xODAsOCArMTc4LDEwIEBAIGJvb2wgRWxlbWVudERhdGE6OmlzRXF1aXZh
bGVudChjb25zdCBFbGUKIHVuc2lnbmVkIEVsZW1lbnREYXRhOjpmaW5kQXR0cmlidXRlSW5kZXhC
eU5hbWVTbG93Q2FzZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3Jl
QXR0cmlidXRlQ2FzZSkgY29uc3QKIHsKICAgICAvLyBDb250aW51ZSB0byBjaGVja2luZyBjYXNl
LWluc2Vuc2l0aXZlbHkgYW5kL29yIGZ1bGwgbmFtZXNwYWNlZCBuYW1lcyBpZiBuZWNlc3Nhcnk6
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAg
Y29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVBdChpKTsKKyAgICBjb25zdCBB
dHRyaWJ1dGUqIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVCYXNlKCk7CisgICAgdW5zaWduZWQgY291
bnQgPSBsZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkg
eworICAgICAgICBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNbaV07CiAg
ICAgICAgIGlmICghYXR0cmlidXRlLm5hbWUoKS5oYXNQcmVmaXgoKSkgewogICAgICAgICAgICAg
aWYgKHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UgJiYgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwg
YXR0cmlidXRlLmxvY2FsTmFtZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gaTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50RGF0YS5oCShyZXZpc2lvbiAxNjIyOTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNDEgQEAg
Y2xhc3MgU2hhcmVhYmxlRWxlbWVudERhdGE7CiBjbGFzcyBTdHlsZVByb3BlcnRpZXM7CiBjbGFz
cyBVbmlxdWVFbGVtZW50RGF0YTsKIAorY2xhc3MgQXR0cmlidXRlQ29uc3RJdGVyYXRvciB7Citw
dWJsaWM6CisgICAgQXR0cmlidXRlQ29uc3RJdGVyYXRvcihjb25zdCBBdHRyaWJ1dGUqIGFycmF5
LCB1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogbV9hcnJheShhcnJheSkKKyAgICAgICAgLCBt
X29mZnNldChvZmZzZXQpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IEF0dHJpYnV0ZSYgb3Bl
cmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheVttX29mZnNldF07IH0KKyAgICBjb25zdCBB
dHRyaWJ1dGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmbV9hcnJheVttX29mZnNldF07
IH0KKyAgICBBdHRyaWJ1dGVDb25zdEl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgeyArK21fb2Zmc2V0
OyByZXR1cm4gKnRoaXM7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdHRyaWJ1dGVD
b25zdEl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIubV9v
ZmZzZXQ7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQXR0cmlidXRlQ29uc3RJdGVyYXRv
ciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisKK3ByaXZhdGU6
CisgICAgY29uc3QgQXR0cmlidXRlKiBtX2FycmF5OworICAgIHVuc2lnbmVkIG1fb2Zmc2V0Owor
fTsKKworY2xhc3MgQXR0cmlidXRlSXRlcmF0b3JBY2Nlc3NvciB7CitwdWJsaWM6CisgICAgQXR0
cmlidXRlSXRlcmF0b3JBY2Nlc3Nvcihjb25zdCBBdHRyaWJ1dGUqIGFycmF5LCB1bnNpZ25lZCBz
aXplKQorICAgICAgICA6IG1fYXJyYXkoYXJyYXkpCisgICAgICAgICwgbV9zaXplKHNpemUpCisg
ICAgeworICAgIH0KKworICAgIEF0dHJpYnV0ZUNvbnN0SXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7
IHJldHVybiBBdHRyaWJ1dGVDb25zdEl0ZXJhdG9yKG1fYXJyYXksIDApOyB9CisgICAgQXR0cmli
dXRlQ29uc3RJdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBBdHRyaWJ1dGVDb25zdEl0ZXJh
dG9yKG1fYXJyYXksIG1fc2l6ZSk7IH0KK3ByaXZhdGU6CisgICAgY29uc3QgQXR0cmlidXRlKiBt
X2FycmF5OworICAgIHVuc2lnbmVkIG1fc2l6ZTsKK307CisKIGNsYXNzIEVsZW1lbnREYXRhIDog
cHVibGljIFJlZkNvdW50ZWQ8RWxlbWVudERhdGE+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKQEAgLTYxLDYgKzk2LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxl
bmd0aCgpIGNvbnN0OwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFsZW5ndGgo
KTsgfQogCisgICAgQXR0cmlidXRlSXRlcmF0b3JBY2Nlc3NvciBhdHRyaWJ1dGVzSXRlcmF0b3Io
KSBjb25zdDsKICAgICBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZUF0KHVuc2lnbmVkIGluZGV4
KSBjb25zdDsKICAgICBjb25zdCBBdHRyaWJ1dGUqIGZpbmRBdHRyaWJ1dGVCeU5hbWUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYpIGNvbnN0OwogICAgIHVuc2lnbmVkIGZpbmRBdHRyaWJ1dGVJbmRleEJ5
TmFtZShjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CkBAIC0yMDgsNiArMjQ0LDE1IEBAIGlu
bGluZSBjb25zdCBTdHlsZVByb3BlcnRpZXMqIEVsZW1lbnREYXQKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgVW5pcXVlRWxlbWVudERhdGEqPih0aGlzKS0+bV9wcmVzZW50YXRpb25BdHRy
aWJ1dGVTdHlsZS5nZXQoKTsKIH0KIAoraW5saW5lIEF0dHJpYnV0ZUl0ZXJhdG9yQWNjZXNzb3Ig
RWxlbWVudERhdGE6OmF0dHJpYnV0ZXNJdGVyYXRvcigpIGNvbnN0Cit7CisgICAgaWYgKGlzVW5p
cXVlKCkpIHsKKyAgICAgICAgY29uc3QgVmVjdG9yPEF0dHJpYnV0ZSwgND4mIGF0dHJpYnV0ZVZl
Y3RvciA9IHN0YXRpY19jYXN0PGNvbnN0IFVuaXF1ZUVsZW1lbnREYXRhKj4odGhpcyktPm1fYXR0
cmlidXRlVmVjdG9yOworICAgICAgICByZXR1cm4gQXR0cmlidXRlSXRlcmF0b3JBY2Nlc3Nvcihh
dHRyaWJ1dGVWZWN0b3IuZGF0YSgpLCBhdHRyaWJ1dGVWZWN0b3Iuc2l6ZSgpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIEF0dHJpYnV0ZUl0ZXJhdG9yQWNjZXNzb3Ioc3RhdGljX2Nhc3Q8Y29uc3QgU2hh
cmVhYmxlRWxlbWVudERhdGEqPih0aGlzKS0+bV9hdHRyaWJ1dGVBcnJheSwgYXJyYXlTaXplKCkp
OworfQorCiBpbmxpbmUgY29uc3QgQXR0cmlidXRlKiBFbGVtZW50RGF0YTo6ZmluZEF0dHJpYnV0
ZUJ5TmFtZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmli
dXRlQ2FzZSkgY29uc3QKIHsKICAgICB1bnNpZ25lZCBpbmRleCA9IGZpbmRBdHRyaWJ1dGVJbmRl
eEJ5TmFtZShuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAJKHJldmlzaW9uIDE2MjI5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTEzMyw5ICsxMTMzLDcgQEAgYm9vbCBOb2RlOjppc0RlZmF1bHRO
YW1lc3BhY2UoY29uc3QgQXRvbQogICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLT5uYW1lc3Bh
Y2VVUkkoKSA9PSBuYW1lc3BhY2VVUkk7CiAKICAgICAgICAgICAgIGlmIChlbGVtLT5oYXNBdHRy
aWJ1dGVzKCkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWxl
bS0+YXR0cmlidXRlQ291bnQoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0
dHJpYnV0ZSYgYXR0cmlidXRlID0gZWxlbS0+YXR0cmlidXRlQXQoaSk7Ci0gICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUg
OiBlbGVtLT5hdHRyaWJ1dGVzSXRlcmF0b3IoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAo
YXR0cmlidXRlLmxvY2FsTmFtZSgpID09IHhtbG5zQXRvbSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBhdHRyaWJ1dGUudmFsdWUoKSA9PSBuYW1lc3BhY2VVUkk7CiAgICAgICAgICAg
ICAgICAgfQpAQCAtMTIxNyw4ICsxMjE1LDcgQEAgU3RyaW5nIE5vZGU6Omxvb2t1cE5hbWVzcGFj
ZVVSSShjb25zdCBTdAogICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLT5uYW1lc3BhY2VVUkko
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGVsZW0tPmhhc0F0dHJpYnV0ZXMoKSkg
ewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtLT5hdHRyaWJ1
dGVDb3VudCgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgQXR0cmlidXRlJiBh
dHRyaWJ1dGUgPSBlbGVtLT5hdHRyaWJ1dGVBdChpKTsKKyAgICAgICAgICAgICAgICBmb3IgKGNv
bnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlIDogZWxlbS0+YXR0cmlidXRlc0l0ZXJhdG9yKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUu
cHJlZml4KCkgPT0geG1sbnNBdG9tICYmIGF0dHJpYnV0ZS5sb2NhbE5hbWUoKSA9PSBwcmVmaXgp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXR0cmlidXRlLnZhbHVlKCkuaXNFbXB0
eSgpKQpAQCAtMTI3Myw5ICsxMjcwLDcgQEAgU3RyaW5nIE5vZGU6Omxvb2t1cE5hbWVzcGFjZVBy
ZWZpeChjb25zdAogICAgIEFTU0VSVChpc0VsZW1lbnROb2RlKCkpOwogICAgIGNvbnN0IEVsZW1l
bnQqIHRoaXNFbGVtZW50ID0gdG9FbGVtZW50KHRoaXMpOwogICAgIGlmICh0aGlzRWxlbWVudC0+
aGFzQXR0cmlidXRlcygpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlz
RWxlbWVudC0+YXR0cmlidXRlQ291bnQoKTsgaSsrKSB7Ci0gICAgICAgICAgICBjb25zdCBBdHRy
aWJ1dGUmIGF0dHJpYnV0ZSA9IHRoaXNFbGVtZW50LT5hdHRyaWJ1dGVBdChpKTsKLSAgICAgICAg
ICAgIAorICAgICAgICBmb3IgKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlIDogdGhpc0VsZW1l
bnQtPmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7CiAgICAgICAgICAgICBpZiAoYXR0cmlidXRlLnBy
ZWZpeCgpID09IHhtbG5zQXRvbSAmJiBhdHRyaWJ1dGUudmFsdWUoKSA9PSBfbmFtZXNwYWNlVVJJ
CiAgICAgICAgICAgICAgICAgJiYgb3JpZ2luYWxFbGVtZW50LT5sb29rdXBOYW1lc3BhY2VVUkko
YXR0cmlidXRlLmxvY2FsTmFtZSgpKSA9PSBfbmFtZXNwYWNlVVJJKQogICAgICAgICAgICAgICAg
IHJldHVybiBhdHRyaWJ1dGUubG9jYWxOYW1lKCk7CkBAIC0xNDI2LDE0ICsxNDIxLDEyIEBAIHVu
c2lnbmVkIHNob3J0IE5vZGU6OmNvbXBhcmVEb2N1bWVudFBvc2kKICAgICAgICAgLy8gV2UgYXJl
IGNvbXBhcmluZyB0d28gYXR0cmlidXRlcyBvbiB0aGUgc2FtZSBub2RlLiBDcmF3bCBvdXIgYXR0
cmlidXRlIG1hcCBhbmQgc2VlIHdoaWNoIG9uZSB3ZSBoaXQgZmlyc3QuCiAgICAgICAgIEVsZW1l
bnQqIG93bmVyMSA9IGF0dHIxLT5vd25lckVsZW1lbnQoKTsKICAgICAgICAgb3duZXIxLT5zeW5j
aHJvbml6ZUFsbEF0dHJpYnV0ZXMoKTsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gb3duZXIx
LT5hdHRyaWJ1dGVDb3VudCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgICAgIC8vIElmIG5laXRoZXIgb2YgdGhlIHR3byBkZXRlcm1p
bmluZyBub2RlcyBpcyBhIGNoaWxkIG5vZGUgYW5kIG5vZGVUeXBlIGlzIHRoZSBzYW1lIGZvciBi
b3RoIGRldGVybWluaW5nIG5vZGVzLCB0aGVuIGFuIAorICAgICAgICBmb3IgKGNvbnN0IEF0dHJp
YnV0ZSYgYXR0cmlidXRlIDogb3duZXIxLT5hdHRyaWJ1dGVzSXRlcmF0b3IoKSkgeworICAgICAg
ICAgICAgLy8gSWYgbmVpdGhlciBvZiB0aGUgdHdvIGRldGVybWluaW5nIG5vZGVzIGlzIGEgY2hp
bGQgbm9kZSBhbmQgbm9kZVR5cGUgaXMgdGhlIHNhbWUgZm9yIGJvdGggZGV0ZXJtaW5pbmcgbm9k
ZXMsIHRoZW4gYW4KICAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudCBvcmRl
ciBiZXR3ZWVuIHRoZSBkZXRlcm1pbmluZyBub2RlcyBpcyByZXR1cm5lZC4gVGhpcyBvcmRlciBp
cyBzdGFibGUgYXMgbG9uZyBhcyBubyBub2RlcyBvZgogICAgICAgICAgICAgLy8gdGhlIHNhbWUg
bm9kZVR5cGUgYXJlIGluc2VydGVkIGludG8gb3IgcmVtb3ZlZCBmcm9tIHRoZSBkaXJlY3QgY29u
dGFpbmVyLiBUaGlzIHdvdWxkIGJlIHRoZSBjYXNlLCBmb3IgZXhhbXBsZSwgCiAgICAgICAgICAg
ICAvLyB3aGVuIGNvbXBhcmluZyB0d28gYXR0cmlidXRlcyBvZiB0aGUgc2FtZSBlbGVtZW50LCBh
bmQgaW5zZXJ0aW5nIG9yIHJlbW92aW5nIGFkZGl0aW9uYWwgYXR0cmlidXRlcyBtaWdodCBjaGFu
Z2UgCiAgICAgICAgICAgICAvLyB0aGUgb3JkZXIgYmV0d2VlbiBleGlzdGluZyBhdHRyaWJ1dGVz
LgotICAgICAgICAgICAgY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUgPSBvd25lcjEtPmF0dHJp
YnV0ZUF0KGkpOwogICAgICAgICAgICAgaWYgKGF0dHIxLT5xdWFsaWZpZWROYW1lKCkgPT0gYXR0
cmlidXRlLm5hbWUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gRE9DVU1FTlRfUE9TSVRJT05f
SU1QTEVNRU5UQVRJT05fU1BFQ0lGSUMgfCBET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkc7CiAg
ICAgICAgICAgICBpZiAoYXR0cjItPnF1YWxpZmllZE5hbWUoKSA9PSBhdHRyaWJ1dGUubmFtZSgp
KQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMjk5
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yODUsOSArMjg1LDcgQEAgdm9pZCBTdHlsZWRFbGVtZW50OjptYWtlUHJlc2VudGF0aW9u
QXR0cgogICAgIC8vIEludGVycHJldGF0aW9uIG9mIHRoZSBzaXplIGF0dHJpYnV0ZXMgb24gPGlu
cHV0PiBkZXBlbmRzIG9uIHRoZSB0eXBlIGF0dHJpYnV0ZS4KICAgICBpZiAoaGFzVGFnTmFtZShp
bnB1dFRhZykpCiAgICAgICAgIHJldHVybjsKLSAgICB1bnNpZ25lZCBzaXplID0gYXR0cmlidXRl
Q291bnQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAg
ICAgIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlID0gYXR0cmlidXRlQXQoaSk7CisgICAgZm9y
IChjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA6IGF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7CiAg
ICAgICAgIGlmICghaXNQcmVzZW50YXRpb25BdHRyaWJ1dGUoYXR0cmlidXRlLm5hbWUoKSkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCFhdHRyaWJ1dGUubmFtZXNwYWNlVVJJ
KCkuaXNOdWxsKCkpCkBAIC0zMzUsMTEgKzMzMyw4IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6cmVi
dWlsZFByZXNlbnRhdGlvbkEKICAgICAgICAgcHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGVDbGVh
bmVyKCkuZGlkSGl0UHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGUoKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICBzdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZShpc1NWR0VsZW1l
bnQoKSA/IFNWR0F0dHJpYnV0ZU1vZGUgOiBDU1NRdWlya3NNb2RlKTsKLSAgICAgICAgdW5zaWdu
ZWQgc2l6ZSA9IGF0dHJpYnV0ZUNvdW50KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRl
ID0gYXR0cmlidXRlQXQoaSk7CisgICAgICAgIGZvciAoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1
dGUgOiBhdHRyaWJ1dGVzSXRlcmF0b3IoKSkKICAgICAgICAgICAgIGNvbGxlY3RTdHlsZUZvclBy
ZXNlbnRhdGlvbkF0dHJpYnV0ZShhdHRyaWJ1dGUubmFtZSgpLCBhdHRyaWJ1dGUudmFsdWUoKSwg
c3RhdGljX2Nhc3Q8TXV0YWJsZVN0eWxlUHJvcGVydGllcyY+KCpzdHlsZSkpOwotICAgICAgICB9
CiAgICAgfQogCiAgICAgLy8gU2hhcmVhYmxlRWxlbWVudERhdGEgZG9lc24ndCBzdG9yZSBwcmVz
ZW50YXRpb24gYXR0cmlidXRlIHN0eWxlLCBzbyBtYWtlIHN1cmUgd2UgaGF2ZSBhIFVuaXF1ZUVs
ZW1lbnREYXRhLgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVs
YXRvci5jcHAJKHJldmlzaW9uIDE2MjI5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFy
a3VwQWNjdW11bGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjYsOSArNDI2LDggQEAgdm9p
ZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChTdAogICAgIGFwcGVuZE9wZW5UYWco
cmVzdWx0LCBlbGVtZW50LCBuYW1lc3BhY2VzKTsKIAogICAgIGlmIChlbGVtZW50Lmhhc0F0dHJp
YnV0ZXMoKSkgewotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBlbGVtZW50LmF0dHJpYnV0ZUNv
dW50KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
Ci0gICAgICAgICAgICBhcHBlbmRBdHRyaWJ1dGUocmVzdWx0LCBlbGVtZW50LCBlbGVtZW50LmF0
dHJpYnV0ZUF0KGkpLCBuYW1lc3BhY2VzKTsKKyAgICAgICAgZm9yIChjb25zdCBBdHRyaWJ1dGUm
IGF0dHJpYnV0ZSA6IGVsZW1lbnQuYXR0cmlidXRlc0l0ZXJhdG9yKCkpCisgICAgICAgICAgICBh
cHBlbmRBdHRyaWJ1dGUocmVzdWx0LCBlbGVtZW50LCBhdHRyaWJ1dGUsIG5hbWVzcGFjZXMpOwog
ICAgIH0KIAogICAgIC8vIEdpdmUgYW4gb3Bwb3J0dW5pdHkgdG8gc3ViY2xhc3NlcyB0byBhZGQg
dGhlaXIgb3duIGF0dHJpYnV0ZXMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCShy
ZXZpc2lvbiAxNjIyOTkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMiw5ICsxMDIsNyBAQCBzdGF0aWMgdm9pZCBjb21wbGV0ZVVSTHMo
RG9jdW1lbnRGcmFnbWVuCiAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZGVzY2VuZGFudHNPZlR5
cGU8RWxlbWVudD4oKmZyYWdtZW50KSkgewogICAgICAgICBpZiAoIWVsZW1lbnQuaGFzQXR0cmli
dXRlcygpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGVsZW1lbnQuYXR0cmlidXRlQ291bnQoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0
ZSA9IGVsZW1lbnQuYXR0cmlidXRlQXQoaSk7CisgICAgICAgIGZvciAoY29uc3QgQXR0cmlidXRl
JiBhdHRyaWJ1dGUgOiBlbGVtZW50LmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7CiAgICAgICAgICAg
ICBpZiAoZWxlbWVudC5pc1VSTEF0dHJpYnV0ZShhdHRyaWJ1dGUpICYmICFhdHRyaWJ1dGUudmFs
dWUoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY2hhbmdlcy5hcHBlbmQoQXR0cmlidXRl
Q2hhbmdlKCZlbGVtZW50LCBhdHRyaWJ1dGUubmFtZSgpLCBVUkwocGFyc2VkQmFzZVVSTCwgYXR0
cmlidXRlLnZhbHVlKCkpLnN0cmluZygpKSk7CiAgICAgICAgIH0KQEAgLTI5MCwxNSArMjg4LDE1
IEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW0KICAgICBjb25zdCBi
b29sIGRvY3VtZW50SXNIVE1MID0gZWxlbWVudC5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCk7
CiAgICAgYXBwZW5kT3BlblRhZyhvdXQsIGVsZW1lbnQsIDApOwogCi0gICAgY29uc3QgdW5zaWdu
ZWQgbGVuZ3RoID0gZWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkgPyBlbGVtZW50LmF0dHJpYnV0ZUNv
dW50KCkgOiAwOwogICAgIGNvbnN0IGJvb2wgc2hvdWxkQW5ub3RhdGVPckZvcmNlSW5saW5lID0g
ZWxlbWVudC5pc0hUTUxFbGVtZW50KCkgJiYgKHNob3VsZEFubm90YXRlKCkgfHwgYWRkRGlzcGxh
eUlubGluZSk7CiAgICAgY29uc3QgYm9vbCBzaG91bGRPdmVycmlkZVN0eWxlQXR0ciA9IHNob3Vs
ZEFubm90YXRlT3JGb3JjZUlubGluZSB8fCBzaG91bGRBcHBseVdyYXBwaW5nU3R5bGUoZWxlbWVu
dCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAg
IGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlID0gZWxlbWVudC5hdHRyaWJ1dGVBdChpKTsKLSAg
ICAgICAgLy8gV2UnbGwgaGFuZGxlIHRoZSBzdHlsZSBhdHRyaWJ1dGUgc2VwYXJhdGVseSwgYmVs
b3cuCi0gICAgICAgIGlmIChhdHRyaWJ1dGUubmFtZSgpID09IHN0eWxlQXR0ciAmJiBzaG91bGRP
dmVycmlkZVN0eWxlQXR0cikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhcHBlbmRB
dHRyaWJ1dGUob3V0LCBlbGVtZW50LCBhdHRyaWJ1dGUsIDApOworICAgIGlmIChlbGVtZW50Lmhh
c0F0dHJpYnV0ZXMoKSkgeworICAgICAgICBmb3IgKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRl
IDogZWxlbWVudC5hdHRyaWJ1dGVzSXRlcmF0b3IoKSkgeworICAgICAgICAgICAgLy8gV2UnbGwg
aGFuZGxlIHRoZSBzdHlsZSBhdHRyaWJ1dGUgc2VwYXJhdGVseSwgYmVsb3cuCisgICAgICAgICAg
ICBpZiAoYXR0cmlidXRlLm5hbWUoKSA9PSBzdHlsZUF0dHIgJiYgc2hvdWxkT3ZlcnJpZGVTdHls
ZUF0dHIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBhcHBlbmRBdHRy
aWJ1dGUob3V0LCBlbGVtZW50LCBhdHRyaWJ1dGUsIDApOworICAgICAgICB9CiAgICAgfQogCiAg
ICAgaWYgKHNob3VsZE92ZXJyaWRlU3R5bGVBdHRyKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjI5OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw4ICsx
MjAsNyBAQCB2b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OnBhcmFtZXRlcnNGb3JQbHVnCiAgICAgaWYg
KCFoYXNBdHRyaWJ1dGVzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBhdHRyaWJ1dGVDb3VudCgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgQXR0cmli
dXRlJiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVBdChpKTsKKyAgICBmb3IgKGNvbnN0IEF0dHJpYnV0
ZSYgYXR0cmlidXRlIDogYXR0cmlidXRlc0l0ZXJhdG9yKCkpIHsKICAgICAgICAgcGFyYW1OYW1l
cy5hcHBlbmQoYXR0cmlidXRlLmxvY2FsTmFtZSgpLnN0cmluZygpKTsKICAgICAgICAgcGFyYW1W
YWx1ZXMuYXBwZW5kKGF0dHJpYnV0ZS52YWx1ZSgpLnN0cmluZygpKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMjk5
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwMiw4ICsyMDIsNyBAQCB2b2lkIEhUTUxPYmplY3RFbGVtZW50OjpwYXJhbWV0
ZXJzRm9yUGx1CiAgICAgCiAgICAgLy8gVHVybiB0aGUgYXR0cmlidXRlcyBvZiB0aGUgPG9iamVj
dD4gZWxlbWVudCBpbnRvIGFycmF5cywgYnV0IGRvbid0IG92ZXJyaWRlIDxwYXJhbT4gdmFsdWVz
LgogICAgIGlmIChoYXNBdHRyaWJ1dGVzKCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGF0dHJpYnV0ZUNvdW50KCk7ICsraSkgewotICAgICAgICAgICAgY29uc3QgQXR0cmli
dXRlJiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVBdChpKTsKKyAgICAgICAgZm9yIChjb25zdCBBdHRy
aWJ1dGUmIGF0dHJpYnV0ZSA6IGF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7CiAgICAgICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBhdHRyaWJ1dGUubmFtZSgpLmxvY2FsTmFtZSgpOwog
ICAgICAgICAgICAgaWYgKCF1bmlxdWVQYXJhbU5hbWVzLmNvbnRhaW5zKG5hbWUuaW1wbCgpKSkg
ewogICAgICAgICAgICAgICAgIHBhcmFtTmFtZXMuYXBwZW5kKG5hbWUuc3RyaW5nKCkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAJKHJldmlz
aW9uIDE2MjI5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsOSArMTk3LDcgQEAgYm9vbCBET01QYXRjaFN1cHBv
cnQ6OmlubmVyUGF0Y2hOb2RlKERpZwogCiAgICAgICAgIC8vIEZJWE1FOiBDcmVhdGUgYSBmdW5j
dGlvbiBpbiBFbGVtZW50IGZvciBjb3B5aW5nIHByb3BlcnRpZXMuIGNsb25lRGF0YUZyb21FbGVt
ZW50KCkgaXMgY2xvc2UgYnV0IG5vdCBlbm91Z2ggZm9yIHRoaXMgY2FzZS4KICAgICAgICAgaWYg
KG5ld0VsZW1lbnQtPmhhc0F0dHJpYnV0ZXNXaXRob3V0VXBkYXRlKCkpIHsKLSAgICAgICAgICAg
IHNpemVfdCBudW1BdHRycyA9IG5ld0VsZW1lbnQtPmF0dHJpYnV0ZUNvdW50KCk7Ci0gICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUF0dHJzOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IG5ld0VsZW1lbnQtPmF0dHJpYnV0ZUF0
KGkpOworICAgICAgICAgICAgZm9yIChjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA6IG5ld0Vs
ZW1lbnQtPmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFtX2Rv
bUVkaXRvci0+c2V0QXR0cmlidXRlKG9sZEVsZW1lbnQsIGF0dHJpYnV0ZS5uYW1lKCkubG9jYWxO
YW1lKCksIGF0dHJpYnV0ZS52YWx1ZSgpLCBlYykpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgICAgIH0KQEAgLTQzMywxMCArNDMxLDggQEAgUGFzc093blB0cjxE
T01QYXRjaFN1cHBvcnQ6OkRpZ2VzdD4gRE9NUAogICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0g
dG9FbGVtZW50KG5vZGUpOwogCiAgICAgICAgIGlmIChlbGVtZW50LT5oYXNBdHRyaWJ1dGVzV2l0
aG91dFVwZGF0ZSgpKSB7Ci0gICAgICAgICAgICBzaXplX3QgbnVtQXR0cnMgPSBlbGVtZW50LT5h
dHRyaWJ1dGVDb3VudCgpOwogICAgICAgICAgICAgU0hBMSBhdHRyc1NIQTE7Ci0gICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUF0dHJzOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IGVsZW1lbnQtPmF0dHJpYnV0ZUF0KGkpOwor
ICAgICAgICAgICAgZm9yIChjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA6IGVsZW1lbnQtPmF0
dHJpYnV0ZXNJdGVyYXRvcigpKSB7CiAgICAgICAgICAgICAgICAgYWRkU3RyaW5nVG9TSEExKGF0
dHJzU0hBMSwgYXR0cmlidXRlLm5hbWUoKS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgICBh
ZGRTdHJpbmdUb1NIQTEoYXR0cnNTSEExLCBhdHRyaWJ1dGUudmFsdWUoKSk7CiAgICAgICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5jcHAJKHJldmlzaW9uIDE2MjI5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01BZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3OSwxMCArNjc5LDggQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlc0FzVAogICAgIH0KIAogICAgIGJvb2wg
Zm91bmRPcmlnaW5hbEF0dHJpYnV0ZSA9IGZhbHNlOwotICAgIHVuc2lnbmVkIG51bUF0dHJzID0g
Y2hpbGRFbGVtZW50LT5hdHRyaWJ1dGVDb3VudCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1BdHRyczsgKytpKSB7CisgICAgZm9yIChjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0
ZSA6IGNoaWxkRWxlbWVudC0+YXR0cmlidXRlc0l0ZXJhdG9yKCkpIHsKICAgICAgICAgLy8gQWRk
IGF0dHJpYnV0ZSBwYWlyCi0gICAgICAgIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlID0gY2hp
bGRFbGVtZW50LT5hdHRyaWJ1dGVBdChpKTsKICAgICAgICAgZm91bmRPcmlnaW5hbEF0dHJpYnV0
ZSA9IGZvdW5kT3JpZ2luYWxBdHRyaWJ1dGUgfHwgKG5hbWUgJiYgYXR0cmlidXRlLm5hbWUoKS50
b1N0cmluZygpID09ICpuYW1lKTsKICAgICAgICAgaWYgKCFtX2RvbUVkaXRvci0+c2V0QXR0cmli
dXRlKGVsZW1lbnQsIGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKSwgYXR0cmlidXRlLnZhbHVl
KCksIGVycm9yU3RyaW5nKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEzMjIsMTAgKzEzMjAs
OCBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5CiAgICAgLy8gR28g
dGhyb3VnaCBhbGwgYXR0cmlidXRlcyBhbmQgc2VyaWFsaXplIHRoZW0uCiAgICAgaWYgKCFlbGVt
ZW50LT5oYXNBdHRyaWJ1dGVzKCkpCiAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzVmFsdWUucmVs
ZWFzZSgpOwotICAgIHVuc2lnbmVkIG51bUF0dHJzID0gZWxlbWVudC0+YXR0cmlidXRlQ291bnQo
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQXR0cnM7ICsraSkgeworICAgIGZv
ciAoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUgOiBlbGVtZW50LT5hdHRyaWJ1dGVzSXRlcmF0
b3IoKSkgewogICAgICAgICAvLyBBZGQgYXR0cmlidXRlIHBhaXIKLSAgICAgICAgY29uc3QgQXR0
cmlidXRlJiBhdHRyaWJ1dGUgPSBlbGVtZW50LT5hdHRyaWJ1dGVBdChpKTsKICAgICAgICAgYXR0
cmlidXRlc1ZhbHVlLT5hZGRJdGVtKGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKSk7CiAgICAg
ICAgIGF0dHJpYnV0ZXNWYWx1ZS0+YWRkSXRlbShhdHRyaWJ1dGUudmFsdWUoKSk7CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck5vZGVGaW5kZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JOb2RlRmluZGVy
LmNwcAkocmV2aXNpb24gMTYyMjk5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvck5vZGVGaW5kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsOSArMTIyLDggQEAgYm9v
bCBJbnNwZWN0b3JOb2RlRmluZGVyOjptYXRjaGVzRWxlbWVudAogICAgIGlmICghZWxlbWVudC5o
YXNBdHRyaWJ1dGVzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHVuc2lnbmVkIG51
bUF0dHJzID0gZWxlbWVudC5hdHRyaWJ1dGVDb3VudCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1BdHRyczsgKytpKSB7Ci0gICAgICAgIGlmIChtYXRjaGVzQXR0cmlidXRlKGVs
ZW1lbnQuYXR0cmlidXRlQXQoaSkpKQorICAgIGZvciAoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1
dGUgOiBlbGVtZW50LmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7CisgICAgICAgIGlmIChtYXRjaGVz
QXR0cmlidXRlKGF0dHJpYnV0ZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCShyZXZpc2lvbiAxNjIy
OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzQsOCArNzQsNyBAQCBzdGF0aWMgYm9vbCBpc0NoYXJzZXRTcGVjaWZ5aW5nTm9k
ZShjb25zCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBIVE1MTWV0YUNoYXJzZXRQYXJzZXI6
OkF0dHJpYnV0ZUxpc3QgYXR0cmlidXRlczsKICAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGVz
KCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1lbnQuYXR0cmlidXRl
Q291bnQoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9
IGVsZW1lbnQuYXR0cmlidXRlQXQoaSk7CisgICAgICAgIGZvciAoY29uc3QgQXR0cmlidXRlJiBh
dHRyaWJ1dGUgOiBlbGVtZW50LmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7CiAgICAgICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGRlYWwgYXBwcm9wcmlhdGVseSB3aXRoIHRoZSBhdHRyaWJ1dGUg
aWYgdGhleSBoYXZlIGEgbmFtZXNwYWNlLgogICAgICAgICAgICAgYXR0cmlidXRlcy5hcHBlbmQo
c3RkOjptYWtlX3BhaXIoYXR0cmlidXRlLm5hbWUoKS50b1N0cmluZygpLCBhdHRyaWJ1dGUudmFs
dWUoKS5zdHJpbmcoKSkpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWFBh
dGhOb2RlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhOb2Rl
U2V0LmNwcAkocmV2aXNpb24gMTYyMjk5KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hQYXRoTm9k
ZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOCw5ICsyMTgsOCBAQCB2b2lkIE5vZGVTZXQ6
OnRyYXZlcnNhbFNvcnQoKSBjb25zdAogICAgICAgICBpZiAoIWVsZW1lbnQtPmhhc0F0dHJpYnV0
ZXMoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0
ZUNvdW50ID0gZWxlbWVudC0+YXR0cmlidXRlQ291bnQoKTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGF0dHJpYnV0ZUNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIFJlZlB0cjxB
dHRyPiBhdHRyID0gZWxlbWVudC0+YXR0cklmRXhpc3RzKGVsZW1lbnQtPmF0dHJpYnV0ZUF0KGkp
Lm5hbWUoKSk7CisgICAgICAgIGZvciAoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUgOiBlbGVt
ZW50LT5hdHRyaWJ1dGVzSXRlcmF0b3IoKSkgeworICAgICAgICAgICAgUmVmUHRyPEF0dHI+IGF0
dHIgPSBlbGVtZW50LT5hdHRySWZFeGlzdHMoYXR0cmlidXRlLm5hbWUoKSk7CiAgICAgICAgICAg
ICBpZiAoYXR0ciAmJiBub2Rlcy5jb250YWlucyhhdHRyLmdldCgpKSkKICAgICAgICAgICAgICAg
ICBzb3J0ZWROb2Rlcy5hcHBlbmQoYXR0cik7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3htbC9YUGF0aFN0ZXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9Y
UGF0aFN0ZXAuY3BwCShyZXZpc2lvbiAxNjIyOTkpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWFBh
dGhTdGVwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYxLDggKzM2MSw4IEBAIHZvaWQgU3RlcDo6
bm9kZXNJbkF4aXMoTm9kZSYgY29udGV4dCwgTm8KICAgICAgICAgICAgIGlmICghY29udGV4dEVs
ZW1lbnQuaGFzQXR0cmlidXRlcygpKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbnRleHRFbGVtZW50LmF0dHJpYnV0ZUNv
dW50KCk7ICsraSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxBdHRyPiBhdHRyID0gY29udGV4
dEVsZW1lbnQuZW5zdXJlQXR0cihjb250ZXh0RWxlbWVudC5hdHRyaWJ1dGVBdChpKS5uYW1lKCkp
OworICAgICAgICAgICAgZm9yIChjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA6IGNvbnRleHRF
bGVtZW50LmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPEF0
dHI+IGF0dHIgPSBjb250ZXh0RWxlbWVudC5lbnN1cmVBdHRyKGF0dHJpYnV0ZS5uYW1lKCkpOwog
ICAgICAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcygqYXR0ciwgQXR0cmlidXRlQXhpcywgbV9u
b2RlVGVzdCkpCiAgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChhdHRyLnJlbGVhc2Uo
KSk7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERv
Y3VtZW50UGFyc2VyTGlieG1sMi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1s
L3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCShyZXZpc2lvbiAxNjIyOTkpCisr
KyBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYyOCw4ICs2MjgsNyBAQCBYTUxEb2N1bWVudFBhcnNlcjo6WE1M
RG9jdW1lbnRQYXJzZXIoRG9jCiAgICAgZm9yICg7ICFlbGVtU3RhY2suaXNFbXB0eSgpOyBlbGVt
U3RhY2sucmVtb3ZlTGFzdCgpKSB7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtU3Rh
Y2subGFzdCgpOwogICAgICAgICBpZiAoZWxlbWVudC0+aGFzQXR0cmlidXRlcygpKSB7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWxlbWVudC0+YXR0cmlidXRlQ291bnQo
KTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUgPSBl
bGVtZW50LT5hdHRyaWJ1dGVBdChpKTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgQXR0cmlidXRl
JiBhdHRyaWJ1dGUgOiBlbGVtZW50LT5hdHRyaWJ1dGVzSXRlcmF0b3IoKSkgewogICAgICAgICAg
ICAgICAgIGlmIChhdHRyaWJ1dGUubG9jYWxOYW1lKCkgPT0geG1sbnNBdG9tKQogICAgICAgICAg
ICAgICAgICAgICBtX2RlZmF1bHROYW1lc3BhY2VVUkkgPSBhdHRyaWJ1dGUudmFsdWUoKTsKICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGUucHJlZml4KCkgPT0geG1sbnNBdG9tKQo=
</data>
<flag name="review"
          id="245568"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>