<?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>31299</bug_id>
          
          <creation_ts>2009-11-10 09:11:57 -0800</creation_ts>
          <short_desc>WAI-ARIA: implement treegrid</short_desc>
          <delta_ts>2009-12-15 11:20:56 -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>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="chris fleizach">cfleizach</reporter>
          <assigned_to name="chris fleizach">cfleizach</assigned_to>
          <cc>bdakin</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>162064</commentid>
    <comment_count>0</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2009-11-10 09:11:57 -0800</bug_when>
    <thetext>the treegrid role needs to be implemented</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171224</commentid>
    <comment_count>1</comment_count>
      <attachid>44760</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2009-12-13 13:43:29 -0800</bug_when>
    <thetext>Created attachment 44760
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171226</commentid>
    <comment_count>2</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2009-12-13 13:44:04 -0800</bug_when>
    <thetext>the last ARIA role…</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171227</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-13 13:44:22 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44760 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171452</commentid>
    <comment_count>4</comment_count>
      <attachid>44760</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-12-14 09:56:41 -0800</bug_when>
    <thetext>Comment on attachment 44760
patch

&gt; +    for (int k = index+1; k &lt; rowCount; ++k) {

We put spaces around operators like the &quot;+&quot; here.

&gt; +        if (row-&gt;hierarchicalLevel() == (level+1))
&gt; +            disclosedRows.append(row);
&gt; +        // Stop at the first row that doesn&apos;t match the correct level.
&gt; +        else
&gt; +            break;

I would reverse the logic and says if != break, then put the append outside the if, avoiding the else. Also, I would omit the parentheses around &quot;level+1&quot; and include the spaces around the &quot;+&quot;.

&gt; +    // If the level is 1 or less, than nothing discloses this row.
&gt; +    unsigned level = hierarchicalLevel();
&gt; +    if (level &lt; 2)
&gt; +        return 0;

Comment says 1 or less, code should say &lt;= 1 to match it.

&gt; +    for (int k = index-1; k &gt;= 0; --k) {

Should have a space around the &quot;-&quot;.

&gt; +        if (row-&gt;hierarchicalLevel() == (level-1))

Space around the &quot;-&quot; and no parentheses around &quot;level - 1&quot;.

&gt; +    const AtomicString&amp; ariaMultiSelectable = getAttribute(aria_multiselectableAttr).string();

Please remove the &quot;.string()&quot; here. It causes the compiler to create a new temporary AtomicString by converting to String and back to AtomicString, but without it everything should work fine.

&gt;      // Setting selected rows only works on trees for now.
&gt; -    if (roleValue() != TreeRole)
&gt; +    AccessibilityRole role = roleValue();
&gt; +    if (role != TreeRole &amp;&amp; role != TreeGridRole &amp;&amp; role != TableRole)
&gt;          return;

Comment no longer makes sense, since it works for tables now.
&gt;      
&gt; -    bool isMultiselectable = elementAttributeValue(aria_multiselectableAttr);
&gt; +    bool isMultiselectable = isMultiSelectable();

This works only because you treated &quot;multiselectable&quot; as one word in the local variable and two words in the function name. The two should be capitalized consistently (all lowercase in both cases) and then you either need to eliminate the local variable or use &quot;this-&gt;&quot; syntax to call the function.

The override of the supportsSelectedRows function in AccessibilityARIAGrid.h should be private. It&apos;s programming mistake to ever call it on an AccessibilityARIAGrid* and it would be good to have the compiler catch such a mistake.

All of these are minor quibbles. r=me as is</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171732</commentid>
    <comment_count>5</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2009-12-14 23:12:52 -0800</bug_when>
    <thetext>(In reply to comment #4)
Thanx. Will address all of these</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171737</commentid>
    <comment_count>6</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2009-12-14 23:32:46 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/52140</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171748</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-15 00:42:00 -0800</bug_when>
    <thetext>This change geborked the bots:
http://build.webkit.org/results/Leopard%20Intel%20Release%20(Tests)/r52140%20(8362)/platform/mac/accessibility/aria-treegrid-pretty-diff.html

:(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171768</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-15 02:10:30 -0800</bug_when>
    <thetext>This broke the leopard bots.  No response from Chris (emailed him). I assume he&apos;s asleep.  Going to roll this out so that the tree rolls back green and Chris can land this again in the morning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171769</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-15 02:18:35 -0800</bug_when>
    <thetext>Committed r52146: &lt;http://trac.webkit.org/changeset/52146&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171770</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-15 02:19:18 -0800</bug_when>
    <thetext>Rolled out the change, so re-opening the bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171905</commentid>
    <comment_count>11</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2009-12-15 10:01:44 -0800</bug_when>
    <thetext>the leopard/tiger test that failed (the new test) should just not be run on leopard...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171908</commentid>
    <comment_count>12</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2009-12-15 10:08:07 -0800</bug_when>
    <thetext>try again
http://trac.webkit.org/changeset/52159</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171937</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-15 11:20:56 -0800</bug_when>
    <thetext>Thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44760</attachid>
            <date>2009-12-13 13:43:29 -0800</date>
            <delta_ts>2009-12-14 09:56:40 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>26636</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjA2OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMDktMTItMTMgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBXQUktQVJJQTogaW1wbGVtZW50IHRyZWVncmlkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTI5OQorCisgICAgICAgIFRlc3Q6IHBsYXRmb3JtL21h
Yy9hY2Nlc3NpYmlsaXR5L2FyaWEtdHJlZWdyaWQuaHRtbAorCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6
OmdldE9yQ3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklB
R3JpZC5oOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkOjpzdXBwb3J0
c1NlbGVjdGVkUm93cyk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJ
QUdyaWRSb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93
Ojppc0FSSUFUcmVlR3JpZFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJ
QUdyaWRSb3c6OmRpc2Nsb3NlZFJvd3MpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eUFSSUFHcmlkUm93OjpkaXNjbG9zZWRCeVJvdyk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQVJJQVJvbGVNYXAp
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aXNBUklBVHJlZUdyaWRSb3cpOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc011bHRpU2VsZWN0YWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRJc0V4
cGFuZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNl
dFNlbGVjdGVkUm93cyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjphcmlhU2VsZWN0ZWRSb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmFyaWFMaXN0Ym94U2VsZWN0ZWRDaGlsZHJlbik6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZWxlY3RlZENoaWxkcmVuKToKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaDoKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5oOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVRhYmxlOjpzdXBwb3J0c1NlbGVjdGVkUm93cyk6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW06CisgICAgICAgICgt
W0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFkZGl0aW9uYWxBY2Nlc3NpYmlsaXR5QXR0cmli
dXRlTmFtZXNdKToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZU5hbWVzXSk6CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpdKToKKyAgICAgICAgKC1bQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVNldFZhbHVlOmZvckF0dHJpYnV0ZTpd
KToKKwogMjAwOS0xMi0wOCAgSmVyZW15IE1vc2tvdmljaCAgPGplcmVteUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCShyZXZpc2lvbiA1MTk3OCkKKysrIFdlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDcgKzE0
OCw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE8KICAgICAgICAg
ICAgIG5ld09iaiA9IEFjY2Vzc2liaWxpdHlMaXN0OjpjcmVhdGUocmVuZGVyZXIpOwogICAgICAg
ICAKICAgICAgICAgLy8gYXJpYSB0YWJsZXMKLSAgICAgICAgZWxzZSBpZiAobm9kZUlzQXJpYVR5
cGUobm9kZSwgImdyaWQiKSkKKyAgICAgICAgZWxzZSBpZiAobm9kZUlzQXJpYVR5cGUobm9kZSwg
ImdyaWQiKSB8fCBub2RlSXNBcmlhVHlwZShub2RlLCAidHJlZWdyaWQiKSkKICAgICAgICAgICAg
IG5ld09iaiA9IEFjY2Vzc2liaWxpdHlBUklBR3JpZDo6Y3JlYXRlKHJlbmRlcmVyKTsKICAgICAg
ICAgZWxzZSBpZiAobm9kZUlzQXJpYVR5cGUobm9kZSwgInJvdyIpKQogICAgICAgICAgICAgbmV3
T2JqID0gQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpjcmVhdGUocmVuZGVyZXIpOwpJbmRleDog
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuaAkocmV2aXNp
b24gNTE5NzgpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlk
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDggQEAgcHVibGljOgogICAgIAogICAgIHZp
cnR1YWwgdm9pZCBhZGRDaGlsZHJlbigpOwogICAgIAorICAgIC8vIEFSSUEgdHJlZWdyaWRzIGFu
ZCBncmlkcyBzdXBwb3J0IHNlbGVjdGVkIHJvd3MuCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRz
U2VsZWN0ZWRSb3dzKCkgeyByZXR1cm4gdHJ1ZTsgfSAgICAKICAgICB2aXJ0dWFsIEFjY2Vzc2li
aWxpdHlUYWJsZUNlbGwqIGNlbGxGb3JDb2x1bW5BbmRSb3codW5zaWduZWQgY29sdW1uLCB1bnNp
Z25lZCByb3cpOwogCiBwcml2YXRlOgpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlBUklBR3JpZFJvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZFJvdy5jcHAJKHJldmlzaW9uIDUxOTc4KQorKysgV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZFJvdy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5QVJJQUdyaWRS
b3cuaCIKIAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKKyNpbmNsdWRlICJBY2Nl
c3NpYmlsaXR5VGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKIAogdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKQEAgLTUwLDYgKzUxLDcxIEBAIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eUFS
SUFHcmlkUm93PiBBY2MKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlBUklB
R3JpZFJvdyhyZW5kZXJlcikpOwogfQogCitib29sIEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6
aXNBUklBVHJlZUdyaWRSb3coKSBjb25zdAoreworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBh
cmVudCA9IHBhcmVudFRhYmxlKCk7CisgICAgaWYgKCFwYXJlbnQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICByZXR1cm4gcGFyZW50LT5hcmlhUm9sZUF0dHJpYnV0ZSgpID09IFRy
ZWVHcmlkUm9sZTsKK30KKyAgICAKK3ZvaWQgQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpkaXNj
bG9zZWRSb3dzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgZGlzY2xvc2VkUm93cykKK3sK
KyAgICAvLyBUaGUgY29udGlndW91cyBkaXNjbG9zZWQgcm93cyB3aWxsIGJlIHRoZSByb3dzIGlu
IHRoZSB0YWJsZSB0aGF0IAorICAgIC8vIGhhdmUgYW4gYXJpYS1sZXZlbCBvZiBwbHVzIDEgZnJv
bSB0aGlzIHJvdy4KKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBwYXJlbnRPYmpl
Y3RVbmlnbm9yZWQoKTsKKyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5pc0RhdGFUYWJsZSgp
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gU2VhcmNoIGZvciByb3dzIHRoYXQgbWF0
Y2ggdGhlIGNvcnJlY3QgbGV2ZWwuIAorICAgIC8vIE9ubHkgdGFrZSB0aGUgc3Vic2VxdWVudCBy
b3dzIGZyb20gdGhpcyBvbmUgdGhhdCBhcmUgKzEgZnJvbSB0aGlzIHJvdydzIGxldmVsLgorICAg
IGludCBpbmRleCA9IHJvd0luZGV4KCk7CisgICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIHVuc2lnbmVkIGxldmVsID0gaGllcmFyY2hpY2FsTGV2ZWwoKTsKKyAg
ICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGFsbFJvd3MgPSBzdGF0aWNfY2FzdDxBY2Nl
c3NpYmlsaXR5VGFibGUqPihwYXJlbnQpLT5yb3dzKCk7CisgICAgaW50IHJvd0NvdW50ID0gYWxs
Um93cy5zaXplKCk7CisgICAgZm9yIChpbnQgayA9IGluZGV4KzE7IGsgPCByb3dDb3VudDsgKytr
KSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHJvdyA9IGFsbFJvd3Nba10uZ2V0KCk7
CisgICAgICAgIGlmIChyb3ctPmhpZXJhcmNoaWNhbExldmVsKCkgPT0gKGxldmVsKzEpKQorICAg
ICAgICAgICAgZGlzY2xvc2VkUm93cy5hcHBlbmQocm93KTsKKyAgICAgICAgLy8gU3RvcCBhdCB0
aGUgZmlyc3Qgcm93IHRoYXQgZG9lc24ndCBtYXRjaCB0aGUgY29ycmVjdCBsZXZlbC4KKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorICAgIAorQWNjZXNzaWJpbGl0
eU9iamVjdCogQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpkaXNjbG9zZWRCeVJvdygpIGNvbnN0
Cit7CisgICAgLy8gVGhlIHJvdyB0aGF0IGRpc2Nsb3NlcyB0aGlzIG9uZSBpcyB0aGUgcm93IGlu
IHRoZSB0YWJsZQorICAgIC8vIHRoYXQgaXMgYXJpYS1sZXZlbCBzdWJ0cmFjdCAxIGZyb20gdGhp
cyByb3cuCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gcGFyZW50T2JqZWN0VW5p
Z25vcmVkKCk7CisgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXNEYXRhVGFibGUoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgLy8gSWYgdGhlIGxldmVsIGlzIDEgb3IgbGVzcywg
dGhhbiBub3RoaW5nIGRpc2Nsb3NlcyB0aGlzIHJvdy4KKyAgICB1bnNpZ25lZCBsZXZlbCA9IGhp
ZXJhcmNoaWNhbExldmVsKCk7CisgICAgaWYgKGxldmVsIDwgMikKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgCisgICAgLy8gU2VhcmNoIGZvciB0aGUgcHJldmlvdXMgcm93IHRoYXQgbWF0Y2hlcyB0
aGUgY29ycmVjdCBsZXZlbC4KKyAgICBpbnQgaW5kZXggPSByb3dJbmRleCgpOworICAgIEFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciYgYWxsUm93cyA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxp
dHlUYWJsZSo+KHBhcmVudCktPnJvd3MoKTsKKyAgICBpbnQgcm93Q291bnQgPSBhbGxSb3dzLnNp
emUoKTsKKyAgICBpZiAoaW5kZXggPj0gcm93Q291bnQpCisgICAgICAgIHJldHVybiAwOworICAg
IAorICAgIGZvciAoaW50IGsgPSBpbmRleC0xOyBrID49IDA7IC0taykgeworICAgICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiByb3cgPSBhbGxSb3dzW2tdLmdldCgpOworICAgICAgICBpZiAocm93
LT5oaWVyYXJjaGljYWxMZXZlbCgpID09IChsZXZlbC0xKSkKKyAgICAgICAgICAgIHJldHVybiBy
b3c7CisgICAgfQorICAgIAorICAgIHJldHVybiAwOworfQorICAgIAogQWNjZXNzaWJpbGl0eU9i
amVjdCogQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpwYXJlbnRUYWJsZSgpIGNvbnN0CiB7CiAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gcGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7
CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3Jp
ZFJvdy5oCShyZXZpc2lvbiA1MTk3OCkKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5QVJJQUdyaWRSb3cuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsMTAgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdz4gY3Jl
YXRlKFJlbmRlck9iamVjdCopOwogICAgIHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlBUklBR3JpZFJv
dygpOwogICAgIAorICAgIHZpcnR1YWwgYm9vbCBpc0FSSUFUcmVlR3JpZFJvdygpIGNvbnN0Owor
ICAgIHZvaWQgZGlzY2xvc2VkUm93cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKTsKKyAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBkaXNjbG9zZWRCeVJvdygpIGNvbnN0OworICAgIAogICAg
IHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogaGVhZGVyT2JqZWN0KCk7CiAgICAgdmlydHVh
bCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnRUYWJsZSgpIGNvbnN0OyAgICAKIH07IApJbmRl
eDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2
aXNpb24gNTE5NzgpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxMiw2ICs5MTIsNyBAQCBzdGF0aWMgQVJJQVJvbGVN
YXAqIGNyZWF0ZUFSSUFSb2xlTWFwKCkKICAgICAgICAgeyAidG9vbGJhciIsIFRvb2xiYXJSb2xl
IH0sCiAgICAgICAgIHsgInRvb2x0aXAiLCBVc2VySW50ZXJmYWNlVG9vbHRpcFJvbGUgfSwKICAg
ICAgICAgeyAidHJlZSIsIFRyZWVSb2xlIH0sCisgICAgICAgIHsgInRyZWVncmlkIiwgVHJlZUdy
aWRSb2xlIH0sCiAgICAgICAgIHsgInRyZWVpdGVtIiwgVHJlZUl0ZW1Sb2xlIH0KICAgICB9Owog
ICAgIEFSSUFSb2xlTWFwKiByb2xlTWFwID0gbmV3IEFSSUFSb2xlTWFwOwpJbmRleDogV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCShyZXZpc2lvbiA1MTk3OCkK
KysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE2NSw2ICsxNjUsNyBAQCBlbnVtIEFjY2Vzc2liaWxpdHlSb2xlIHsKICAgICBU
YWJMaXN0Um9sZSwKICAgICBUYWJQYW5lbFJvbGUsCiAgICAgVHJlZVJvbGUsCisgICAgVHJlZUdy
aWRSb2xlLAogICAgIFRyZWVJdGVtUm9sZSwKICAgICBEaXJlY3RvcnlSb2xlLAogICAgIApAQCAt
Mjc5LDYgKzI4MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNUYWJsZUNlbGwoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0ZpZWxkc2V0KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNHcm91cCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQVJJQVRyZWVHcmlkUm93KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29sIGlzVGFiTGlzdCgpIGNvbnN0IHsgcmV0dXJu
IHJvbGVWYWx1ZSgpID09IFRhYkxpc3RSb2xlOyB9CiAgICAgYm9vbCBpc1RhYkl0ZW0oKSBjb25z
dCB7IHJldHVybiByb2xlVmFsdWUoKSA9PSBUYWJSb2xlOyB9CiAgICAgYm9vbCBpc1JhZGlvR3Jv
dXAoKSBjb25zdCB7IHJldHVybiByb2xlVmFsdWUoKSA9PSBSYWRpb0dyb3VwUm9sZTsgfQpJbmRl
eDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcAkocmV2aXNpb24gNTE5NzgpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NSw5ICszNzUsMTYg
QEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0hvdmVyZQogICAgIHJldHVybiBt
X3JlbmRlcmVyLT5ub2RlKCkgJiYgbV9yZW5kZXJlci0+bm9kZSgpLT5ob3ZlcmVkKCk7CiB9CiAK
LWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNNdWx0aVNlbGVjdCgpIGNvbnN0Citi
b29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTXVsdGlTZWxlY3RhYmxlKCkgY29uc3QK
IHsKICAgICBBU1NFUlQobV9yZW5kZXJlcik7CisgICAgCisgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBhcmlhTXVsdGlTZWxlY3RhYmxlID0gZ2V0QXR0cmlidXRlKGFyaWFfbXVsdGlzZWxlY3RhYmxl
QXR0cikuc3RyaW5nKCk7CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGFyaWFNdWx0aVNlbGVj
dGFibGUsICJ0cnVlIikpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShhcmlhTXVsdGlTZWxlY3RhYmxlLCAiZmFsc2UiKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAogICAgIGlmICghbV9yZW5kZXJlci0+aXNMaXN0Qm94KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICByZXR1cm4gbV9yZW5kZXJlci0+bm9kZSgpICYmIHN0YXRpY19jYXN0
PEhUTUxTZWxlY3RFbGVtZW50Kj4obV9yZW5kZXJlci0+bm9kZSgpKS0+bXVsdGlwbGUoKTsKQEAg
LTE3MjcsMTMgKzE3MzQsMTggQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjplbGVt
ZW50QQogICAgIAogdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRJc0V4cGFuZGVk
KGJvb2wgaXNFeHBhbmRlZCkKIHsKLSAgICAvLyBDb21ibyBib3hlcyBhbmQgdHJlZSBpdGVtcyBj
YW4gYmUgZXhwYW5kZWQgKGluIGRpZmZlcmVudCB3YXlzIG9uIGRpZmZlcmVudCBwbGF0Zm9ybXMp
LgorICAgIC8vIENvbWJvIGJveGVzLCB0cmVlIGl0ZW1zIGFuZCByb3dzIGNhbiBiZSBleHBhbmRl
ZCAoaW4gZGlmZmVyZW50IHdheXMgb24gZGlmZmVyZW50IHBsYXRmb3JtcykuCiAgICAgLy8gVGhh
dCBhY3Rpb24gdHJhbnNsYXRlcyBpbnRvIHNldHRpbmcgdGhlIGFyaWEtZXhwYW5kZWQgYXR0cmli
dXRlIHRvIHRydWUuCiAgICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IHJvbGVWYWx1ZSgpOwot
ICAgIGlmIChyb2xlICE9IENvbWJvQm94Um9sZSAmJiByb2xlICE9IFRyZWVJdGVtUm9sZSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIHNldEVsZW1lbnRBdHRyaWJ1dGVWYWx1ZShhcmlhX2V4
cGFuZGVkQXR0ciwgaXNFeHBhbmRlZCk7CisgICAgc3dpdGNoIChyb2xlKSB7CisgICAgY2FzZSBD
b21ib0JveFJvbGU6CisgICAgY2FzZSBUcmVlSXRlbVJvbGU6CisgICAgY2FzZSBSb3dSb2xlOgor
ICAgICAgICBzZXRFbGVtZW50QXR0cmlidXRlVmFsdWUoYXJpYV9leHBhbmRlZEF0dHIsIGlzRXhw
YW5kZWQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAg
ICB9CiB9CiAgICAgCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzUmVxdWlyZWQo
KSBjb25zdApAQCAtMTg1OSwxMCArMTg3MSwxMSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OnNldFNlbGVjCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFNlbGVj
dGVkUm93cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHNlbGVjdGVkUm93cykKIHsKICAg
ICAvLyBTZXR0aW5nIHNlbGVjdGVkIHJvd3Mgb25seSB3b3JrcyBvbiB0cmVlcyBmb3Igbm93Lgot
ICAgIGlmIChyb2xlVmFsdWUoKSAhPSBUcmVlUm9sZSkKKyAgICBBY2Nlc3NpYmlsaXR5Um9sZSBy
b2xlID0gcm9sZVZhbHVlKCk7CisgICAgaWYgKHJvbGUgIT0gVHJlZVJvbGUgJiYgcm9sZSAhPSBU
cmVlR3JpZFJvbGUgJiYgcm9sZSAhPSBUYWJsZVJvbGUpCiAgICAgICAgIHJldHVybjsKICAgICAK
LSAgICBib29sIGlzTXVsdGlzZWxlY3RhYmxlID0gZWxlbWVudEF0dHJpYnV0ZVZhbHVlKGFyaWFf
bXVsdGlzZWxlY3RhYmxlQXR0cik7CisgICAgYm9vbCBpc011bHRpc2VsZWN0YWJsZSA9IGlzTXVs
dGlTZWxlY3RhYmxlKCk7CiAgICAgdW5zaWduZWQgY291bnQgPSBzZWxlY3RlZFJvd3Muc2l6ZSgp
OwogICAgIGlmIChjb3VudCA+IDEgJiYgIWlzTXVsdGlzZWxlY3RhYmxlKQogICAgICAgICBjb3Vu
dCA9IDE7CkBAIC0yODM0LDE4ICsyODQ3LDE4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6YWRkQ2hpbGQKICAgICB9CiB9CiAKLXZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6YXJpYVRyZWVTZWxlY3RlZFJvd3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiByZXN1
bHQpCit2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFyaWFTZWxlY3RlZFJvd3MoQWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiByZXN1bHQpCiB7CiAgICAgLy8gR2V0IGFsbCB0aGUg
cm93cy4gCiAgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFsbFJvd3M7CiAgICAgYXJp
YVRyZWVSb3dzKGFsbFJvd3MpOwogCiAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHJvd3MgYXJlIHNl
bGVjdGVkLgotICAgIGJvb2wgaXNNdWx0aXNlbGVjdGFibGUgPSBlbGVtZW50QXR0cmlidXRlVmFs
dWUoYXJpYV9tdWx0aXNlbGVjdGFibGVBdHRyKTsKKyAgICBib29sIGlzTXVsdGlzZWxlY3RhYmxl
ID0gaXNNdWx0aVNlbGVjdGFibGUoKTsKIAogICAgIC8vIFByZWZlciBhY3RpdmUgZGVzY2VuZGFu
dCBvdmVyIGFyaWEtc2VsZWN0ZWQuCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYWN0aXZlRGVz
YyA9IGFjdGl2ZURlc2NlbmRhbnQoKTsKLSAgICBpZiAoYWN0aXZlRGVzYyAmJiBhY3RpdmVEZXNj
LT5pc1RyZWVJdGVtKCkpIHsKKyAgICBpZiAoYWN0aXZlRGVzYyAmJiAoYWN0aXZlRGVzYy0+aXNU
cmVlSXRlbSgpIHx8IGFjdGl2ZURlc2MtPmlzVGFibGVSb3coKSkpIHsKICAgICAgICAgcmVzdWx0
LmFwcGVuZChhY3RpdmVEZXNjKTsgICAgCiAgICAgICAgIGlmICghaXNNdWx0aXNlbGVjdGFibGUp
CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yODY5LDcgKzI4ODIsNyBAQCB2b2lkIEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OmFyaWFMaXN0CiAgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50
LT5pc0VsZW1lbnROb2RlKCkpIC8vIGRvIHRoaXMgY2hlY2sgdG8gZW5zdXJlIHNhZmV0eSBvZiBz
dGF0aWNfY2FzdCBhYm92ZQogICAgICAgICByZXR1cm47CiAKLSAgICBib29sIGlzTXVsdGlzZWxl
Y3RhYmxlID0gZWxlbWVudEF0dHJpYnV0ZVZhbHVlKGFyaWFfbXVsdGlzZWxlY3RhYmxlQXR0cik7
CisgICAgYm9vbCBpc011bHRpc2VsZWN0YWJsZSA9IGlzTXVsdGlTZWxlY3RhYmxlKCk7CiAgICAg
CiAgICAgd2hpbGUgKGNoaWxkKSB7CiAgICAgICAgIC8vIGV2ZXJ5IGNoaWxkIHNob3VsZCBoYXZl
IGFyaWEtcm9sZSBvcHRpb24sIGFuZCBpZiBzbywgY2hlY2sgZm9yIHNlbGVjdGVkIGF0dHJpYnV0
ZS9zdGF0ZQpAQCAtMjkwMCw4ICsyOTEzLDggQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjpzZWxlY3RlZAogICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUgPSByb2xlVmFsdWUoKTsK
ICAgICBpZiAocm9sZSA9PSBMaXN0Qm94Um9sZSkgLy8gbmF0aXZlIGxpc3QgYm94ZXMgd291bGQg
YmUgQWNjZXNzaWJpbGl0eUxpc3RCb3hlcywgc28gb25seSBjaGVjayBmb3IgYXJpYSBsaXN0IGJv
eGVzCiAgICAgICAgIGFyaWFMaXN0Ym94U2VsZWN0ZWRDaGlsZHJlbihyZXN1bHQpOwotICAgIGVs
c2UgaWYgKHJvbGUgPT0gVHJlZVJvbGUpCi0gICAgICAgIGFyaWFUcmVlU2VsZWN0ZWRSb3dzKHJl
c3VsdCk7CisgICAgZWxzZSBpZiAocm9sZSA9PSBUcmVlUm9sZSB8fCByb2xlID09IFRyZWVHcmlk
Um9sZSB8fCByb2xlID09IFRhYmxlUm9sZSkKKyAgICAgICAgYXJpYVNlbGVjdGVkUm93cyhyZXN1
bHQpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFyaWFMaXN0Ym94Vmlz
aWJsZUNoaWxkcmVuKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgcmVzdWx0KSAgICAgIApJ
bmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5oCShyZXZpc2lvbiA1MTk3OCkKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0hvdmVyZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgaXNJbmRldGVybWluYXRlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzTG9hZGVkKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzTXVsdGlTZWxlY3QoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNP
ZmZTY3JlZW4oKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNQcmVzc2VkKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIGlzUmVhZE9ubHkoKSBjb25zdDsKQEAgLTI3OSw3ICsyNzksNyBAQCBw
cml2YXRlOgogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY2Vzc2liaWxpdHlJbWFnZU1hcEhp
dFRlc3QoSFRNTEFyZWFFbGVtZW50KiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBhY2Nlc3NpYmlsaXR5UGFyZW50Rm9ySW1hZ2VNYXAoSFRNTE1hcEVs
ZW1lbnQqIG1hcCkgY29uc3Q7CiAKLSAgICB2b2lkIGFyaWFUcmVlU2VsZWN0ZWRSb3dzKEFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciYpOworICAgIHZvaWQgYXJpYVNlbGVjdGVkUm93cyhBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKTsKICAgICAKICAgICBib29sIGVsZW1lbnRBdHRyaWJ1
dGVWYWx1ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdm9pZCBzZXRFbGVtZW50QXR0cmli
dXRlVmFsdWUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGJvb2wpOwpJbmRleDogV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuaAkocmV2aXNpb24gNTE5NzgpCisrKyBXZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYzLDYgKzYzLDcgQEAgcHVibGljOgogICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYg
Y29sdW1ucygpOwogICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgcm93cygpOwogICAg
IAorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1NlbGVjdGVkUm93cygpIHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdW5zaWduZWQgY29sdW1uQ291bnQoKTsKICAgICB1bnNpZ25lZCByb3dDb3VudCgp
OwogICAgIApJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0Fj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCShyZXZpc2lvbiA1MTk3OCkKKysrIFdlYkNvcmUv
YWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpCiAKICNpbXBv
cnQgIkFYT2JqZWN0Q2FjaGUuaCIKKyNpbXBvcnQgIkFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdy5o
IgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUxpc3RCb3guaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxp
dHlMaXN0LmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgiCkBAIC01OTks
NiArNjAwLDkgQEAgc3RhdGljIFdlYkNvcmVUZXh0TWFya2VyUmFuZ2UqIHRleHRNYXJrZQogICAg
IGlmIChtX29iamVjdC0+c3VwcG9ydHNBUklBRHJvcHBpbmcoKSkKICAgICAgICAgW2FkZGl0aW9u
YWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eURyb3BFZmZlY3RzQXR0cmlidXRlXTsKIAorICAg
IGlmIChtX29iamVjdC0+aXNEYXRhVGFibGUoKSAmJiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5
VGFibGUqPihtX29iamVjdCktPnN1cHBvcnRzU2VsZWN0ZWRSb3dzKCkpCisgICAgICAgIFthZGRp
dGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFJvd3NBdHRyaWJ1dGVdOyAg
ICAgICAgCisgICAgCiAgICAgcmV0dXJuIGFkZGl0aW9uYWw7CiB9CiAKQEAgLTg2Myw3ICs4Njcs
NiBAQCBzdGF0aWMgV2ViQ29yZVRleHRNYXJrZXJSYW5nZSogdGV4dE1hcmtlCiAgICAgfQogICAg
IGlmIChvdXRsaW5lUm93QXR0cnMgPT0gbmlsKSB7CiAgICAgICAgIHRlbXBBcnJheSA9IFtbTlNN
dXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6dGFibGVSb3dBdHRyc107Ci0gICAgICAg
IFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUluZGV4QXR0cmlidXRlXTsKICAg
ICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5RGlzY2xvc2luZ0F0dHJp
YnV0ZV07CiAgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eURpc2Ns
b3NlZEJ5Um93QXR0cmlidXRlXTsKICAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nl
c3NpYmlsaXR5RGlzY2xvc3VyZUxldmVsQXR0cmlidXRlXTsKQEAgLTg4OCwxMiArODkxLDE3IEBA
IHN0YXRpYyBXZWJDb3JlVGV4dE1hcmtlclJhbmdlKiB0ZXh0TWFya2UKIAogICAgIGVsc2UgaWYg
KG1fb2JqZWN0LT5pc0RhdGFUYWJsZSgpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gdGFi
bGVBdHRyczsKLSAgICBlbHNlIGlmIChtX29iamVjdC0+aXNUYWJsZVJvdygpKQotICAgICAgICBv
YmplY3RBdHRyaWJ1dGVzID0gdGFibGVSb3dBdHRyczsKICAgICBlbHNlIGlmIChtX29iamVjdC0+
aXNUYWJsZUNvbHVtbigpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gdGFibGVDb2xBdHRy
czsKICAgICBlbHNlIGlmIChtX29iamVjdC0+aXNUYWJsZUNlbGwoKSkKICAgICAgICAgb2JqZWN0
QXR0cmlidXRlcyA9IHRhYmxlQ2VsbEF0dHJzOworICAgIGVsc2UgaWYgKG1fb2JqZWN0LT5pc1Rh
YmxlUm93KCkpIHsKKyAgICAgICAgLy8gQW4gQVJJQSB0YWJsZSByb3cgY2FuIGJlIGNvbGxhcHNl
ZCBhbmQgZXhwYW5kZWQsIHNvIGl0IG5lZWRzIHRoZSBleHRyYSBhdHRyaWJ1dGVzLgorICAgICAg
ICBpZiAobV9vYmplY3QtPmlzQVJJQVRyZWVHcmlkUm93KCkpCisgICAgICAgICAgICBvYmplY3RB
dHRyaWJ1dGVzID0gb3V0bGluZVJvd0F0dHJzOworICAgICAgICBlbHNlCisgICAgICAgICAgICBv
YmplY3RBdHRyaWJ1dGVzID0gdGFibGVSb3dBdHRyczsKKyAgICB9CiAgICAgCiAgICAgZWxzZSBp
ZiAobV9vYmplY3QtPmlzVHJlZSgpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gb3V0bGlu
ZUF0dHJzOwpAQCAtMTU2OCw5ICsxNTc2LDE0IEBAIHN0YXRpYyBOU1N0cmluZyogcm9sZVZhbHVl
VG9OU1N0cmluZyhBY2MKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5KHN0YXRp
Y19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+KG1fb2JqZWN0KS0+Y29sdW1ucygpKTsKICAgICAg
ICAgfQogICAgICAgICAKKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFJvd3NBdHRyaWJ1dGVdKSB7CisgICAgICAgICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRD
aGlsZHJlbkNvcHk7CisgICAgICAgICAgICBtX29iamVjdC0+c2VsZWN0ZWRDaGlsZHJlbihzZWxl
Y3RlZENoaWxkcmVuQ29weSk7CisgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShz
ZWxlY3RlZENoaWxkcmVuQ29weSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIC8vIEhU
TUwgdGFibGVzIGRvbid0IHN1cHBvcnQgdGhlc2UKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZENvbHVtbnNBdHRyaWJ1dGVd
IHx8IAotICAgICAgICAgICAgW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eVNlbGVjdGVkUm93c0F0dHJpYnV0ZV0gfHwKICAgICAgICAgICAgIFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZENlbGxzQXR0cmlidXRl
XSkKICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgIApAQCAtMTYwMCwxMSArMTYxMyw2
IEBAIHN0YXRpYyBOU1N0cmluZyogcm9sZVZhbHVlVG9OU1N0cmluZyhBY2MKICAgICAgICAgfSAg
ICAgICAgCiAgICAgfQogICAgIAotICAgIGlmIChtX29iamVjdC0+aXNUYWJsZVJvdygpKSB7Ci0g
ICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5
SW5kZXhBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRo
SW50OnN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZVJvdyo+KG1fb2JqZWN0KS0+cm93SW5k
ZXgoKV07Ci0gICAgfQotICAgIAogICAgIGlmIChtX29iamVjdC0+aXNUYWJsZUNvbHVtbigpKSB7
CiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmls
aXR5SW5kZXhBdHRyaWJ1dGVdKQogICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJX
aXRoSW50OnN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbio+KG1fb2JqZWN0KS0+
Y29sdW1uSW5kZXgoKV07CkBAIC0xNjUyLDggKzE2NjAsOCBAQCBzdGF0aWMgTlNTdHJpbmcqIHJv
bGVWYWx1ZVRvTlNTdHJpbmcoQWNjCiAgICAgICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXld
OwogICAgIH0KIAotICAgIGlmIChtX29iamVjdC0+aXNUcmVlSXRlbSgpKSB7Ci0gICAgICAgIGlm
IChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW5kZXhBdHRy
aWJ1dGVdKSB7CisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlJbmRleEF0dHJpYnV0ZV0pIHsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RyZWVJ
dGVtKCkpIHsKICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1fb2Jq
ZWN0LT5wYXJlbnRPYmplY3QoKTsKICAgICAgICAgICAgIGZvciAoOyBwYXJlbnQgJiYgIXBhcmVu
dC0+aXNUcmVlKCk7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpCiAgICAgICAgICAg
ICB7IH0KQEAgLTE2NzEsMTYgKzE2NzksMjggQEAgc3RhdGljIE5TU3RyaW5nKiByb2xlVmFsdWVU
b05TU3RyaW5nKEFjYwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBUaGUgcm93cyB0aGF0IGFyZSBjb25zaWRlcmVk
IGluc2lkZSB0aGlzIHJvdy4gCi0gICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5RGlzY2xvc2VkUm93c0F0dHJpYnV0ZV0pIHsKKyAgICAgICAg
aWYgKG1fb2JqZWN0LT5pc1RhYmxlUm93KCkpIHsKKyAgICAgICAgICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW5kZXhBdHRyaWJ1dGVdKQorICAg
ICAgICAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpzdGF0aWNfY2FzdDxB
Y2Nlc3NpYmlsaXR5VGFibGVSb3cqPihtX29iamVjdCktPnJvd0luZGV4KCldOworICAgICAgICB9
CisgICAgfSAgICAKKyAgICAKKyAgICAvLyBUaGUgcm93cyB0aGF0IGFyZSBjb25zaWRlcmVkIGlu
c2lkZSB0aGlzIHJvdy4gCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlEaXNjbG9zZWRSb3dzQXR0cmlidXRlXSkgeworICAgICAgICBpZiAobV9v
YmplY3QtPmlzVHJlZUl0ZW0oKSkgewogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd3NDb3B5OwogICAgICAgICAgICAgbV9vYmpl
Y3QtPmFyaWFUcmVlSXRlbURpc2Nsb3NlZFJvd3Mocm93c0NvcHkpOwogICAgICAgICAgICAgcmV0
dXJuIGNvbnZlcnRUb05TQXJyYXkocm93c0NvcHkpOyAgICAKKyAgICAgICAgfSBlbHNlIGlmICht
X29iamVjdC0+aXNBUklBVHJlZUdyaWRSb3coKSkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0
eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd3NDb3B5OworICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93Kj4obV9vYmplY3QpLT5kaXNj
bG9zZWRSb3dzKHJvd3NDb3B5KTsKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9OU0FycmF5
KHJvd3NDb3B5KTsgICAgCiAgICAgICAgIH0KLQotICAgICAgICAvLyBUaGUgcm93IHRoYXQgY29u
dGFpbnMgdGhpcyByb3cuIEl0IHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgZmlyc3QgcGFyZW50
IHRoYXQgaXMgYSB0cmVlaXRlbS4KLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlEaXNjbG9zZWRCeVJvd0F0dHJpYnV0ZV0pIHsKKyAgICB9
CisgICAgCisgICAgLy8gVGhlIHJvdyB0aGF0IGNvbnRhaW5zIHRoaXMgcm93LiBJdCBzaG91bGQg
YmUgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IHBhcmVudCB0aGF0IGlzIGEgdHJlZWl0ZW0uCisgICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlEaXNjbG9z
ZWRCeVJvd0F0dHJpYnV0ZV0pIHsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1RyZWVJdGVtKCkp
IHsKICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1fb2JqZWN0LT5w
YXJlbnRPYmplY3QoKTsKICAgICAgICAgICAgIHdoaWxlIChwYXJlbnQpIHsKICAgICAgICAgICAg
ICAgICBpZiAocGFyZW50LT5pc1RyZWVJdGVtKCkpCkBAIC0xNjkxLDEyICsxNzExLDE4IEBAIHN0
YXRpYyBOU1N0cmluZyogcm9sZVZhbHVlVG9OU1N0cmluZyhBY2MKICAgICAgICAgICAgICAgICBw
YXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICAgICAgfSBlbHNlIGlmIChtX29iamVjdC0+aXNBUklBVHJlZUdy
aWRSb3coKSkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcm93ID0gc3RhdGlj
X2Nhc3Q8QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93Kj4obV9vYmplY3QpLT5kaXNjbG9zZWRCeVJv
dygpOworICAgICAgICAgICAgaWYgKCFyb3cpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICAgICAgICAgIHJldHVybiByb3ctPndyYXBwZXIoKTsKICAgICAgICAgfQotICAgICAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURpc2Nsb3N1
cmVMZXZlbEF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldp
dGhJbnQ6bV9vYmplY3QtPmhpZXJhcmNoaWNhbExldmVsKCldOwotICAgICAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURpc2Nsb3NpbmdBdHRyaWJ1
dGVdKQotICAgICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDptX29iamVj
dC0+aXNFeHBhbmRlZCgpXTsKICAgICB9CisKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eURpc2Nsb3N1cmVMZXZlbEF0dHJpYnV0ZV0pCisgICAg
ICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDptX29iamVjdC0+aGllcmFyY2hpY2Fs
TGV2ZWwoKV07CisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlEaXNjbG9zaW5nQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBu
dW1iZXJXaXRoQm9vbDptX29iamVjdC0+aXNFeHBhbmRlZCgpXTsKICAgICAKICAgICBpZiAoKG1f
b2JqZWN0LT5pc0xpc3RCb3goKSB8fCBtX29iamVjdC0+aXNMaXN0KCkpICYmIFthdHRyaWJ1dGVO
YW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlPcmllbnRhdGlvbkF0dHJpYnV0ZV0p
CiAgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlWZXJ0aWNhbE9yaWVudGF0aW9uVmFsdWU7
CkBAIC0yMTUzLDcgKzIxNzksNyBAQCBzdGF0aWMgTlNTdHJpbmcqIHJvbGVWYWx1ZVRvTlNTdHJp
bmcoQWNjCiAgICAgZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNj
ZXNzaWJpbGl0eVNlbGVjdGVkUm93c0F0dHJpYnV0ZV0pIHsKICAgICAgICAgQWNjZXNzaWJpbGl0
eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVkUm93czsKICAgICAg
ICAgY29udmVydFRvVmVjdG9yKGFycmF5LCBzZWxlY3RlZFJvd3MpOwotICAgICAgICBpZiAobV9v
YmplY3QtPmlzVHJlZSgpKQorICAgICAgICBpZiAobV9vYmplY3QtPmlzVHJlZSgpIHx8IG1fb2Jq
ZWN0LT5pc0RhdGFUYWJsZSgpKQogICAgICAgICAgICAgbV9vYmplY3QtPnNldFNlbGVjdGVkUm93
cyhzZWxlY3RlZFJvd3MpOwogICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eUdyYWJiZWRBdHRyaWJ1dGVdKQogICAgICAgICBtX29iamVj
dC0+c2V0QVJJQUdyYWJiZWQoW251bWJlciBib29sVmFsdWVdKTsKSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDUyMDY4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTMgQEAKKzIwMDktMTItMTMgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXQUkt
QVJJQTogaW1wbGVtZW50IHRyZWVncmlkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zMTI5OQorCisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2li
aWxpdHkvYXJpYS10cmVlZ3JpZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtdHJlZWdyaWQuaHRtbDogQWRkZWQuCisKIDIwMDkt
MTItMTMgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAg
Tm8gcmV2aWV3LCByb2xsaW5nIG91dCByNTIwNTkgdW50aWwgSSBjYW4gZ2VuZXJhdGUgbmV3IFRp
Z2VyIHRlc3QKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2Fy
aWEtdHJlZWdyaWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9hY2Nlc3NpYmlsaXR5L2FyaWEtdHJlZWdyaWQtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvYXJpYS10cmVl
Z3JpZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMgQEAKK0Jvb2sgTmFt
ZSAvIElTQk4JQXV0aG9yCVByaWNlICgkKQorKyBBIFF1ZXN0aW9uIG9mIExvdmUKKzk3OC0zLTQ1
My00MDU0MC0wCU5vcmEgUm9iZXJ0cwkKKzkuOTkKK1RoaXMgdGVzdHMgdGhhdCB0aGUgdHJlZWdy
aWQgQVJJQSByb2xlIGRvZXMgd2hhdCBpdCBzaG91bGQgKGJlIGV4cG9zZWQgYXMgYSBBWFRhYmxl
IGFuZCBzdXBwb3J0IEFYU2VsZWN0ZWRSb3dzKQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyB0cmVlZ3JpZC5pc0F0dHJpYnV0ZVN1cHBvcnRlZCgnQVhTZWxlY3RlZFJvd3Mn
KSBpcyB0cnVlCitQQVNTIHRyZWVncmlkLnNlbGVjdGVkUm93QXRJbmRleCgwKS5pc0VxdWFsKHNl
bGVjdGVkUm93KSBpcyB0cnVlCitQQVNTIHNlbGVjdGVkUm93LmlzRXhwYW5kZWQgaXMgZmFsc2UK
K1BBU1Mgc2VsZWN0ZWRSb3cuaGllcmFyY2hpY2FsTGV2ZWwgaXMgMQorUEFTUyBzZWNvbmRSb3cu
aXNFeHBhbmRlZCBpcyB0cnVlCitQQVNTIHNlY29uZFJvdy5oaWVyYXJjaGljYWxMZXZlbCBpcyAx
CitQQVNTIHRoaXJkUm93LmlzRXhwYW5kZWQgaXMgdHJ1ZQorUEFTUyB0aGlyZFJvdy5oaWVyYXJj
aGljYWxMZXZlbCBpcyAyCitQQVNTIHRoaXJkUm93LmRpc2Nsb3NlZEJ5Um93KCkuaXNFcXVhbChz
ZWNvbmRSb3cpIGlzIHRydWUKK1BBU1Mgc2Vjb25kUm93LmRpc2Nsb3NlZFJvd0F0SW5kZXgoMCku
aXNFcXVhbCh0aGlyZFJvdykgaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nl
c3NpYmlsaXR5L2FyaWEtdHJlZWdyaWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLXRyZWVncmlkLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9hcmlhLXRyZWVncmlk
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIj4KKzxzY3JpcHQ+Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7Cis8L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBpZD0iYm9keSI+CisKKzx0YWJsZSB0YWJpbmRl
eD0wIGlkPSJncmlkLTEiIHJvbGU9InRyZWVncmlkIiBhcmlhLWxhYmVsbGVkYnk9ImdyaWQtMS1o
ZWFkZXIiIGJvcmRlcj0iMSIgYXJpYS1hY3RpdmVkZXNjZW5kYW50PSJyb3cxIj4KKzx0aGVhZD4K
KyAgICA8dHIgY2E9InRyIiByb2xlPSJyb3ciIGFyaWEtbGV2ZWw9IjEiIGlkPSJyb3cxIj4KKyAg
ICAgICAgPHRoIGlkPSJncmlkLTEtaXNibl9pZCI+Qm9vayBOYW1lIC8gSVNCTjwvdGg+PHRoIGlk
PSJncmlkLTEtYXV0aG9yX2lkIj5BdXRob3I8L3RoPjx0aCBpZD0iZ3JpZC0xLXByaWNlX2lkIiBj
bGFzcz0ibnVtZXJpYyIgPlByaWNlICgkKTwvdGg+CisgICAgPC90cj4KKzwvdGhlYWQ+Cis8dGJv
ZHk+CisgICAgPHRyIGNhPSJ0byIgcm9sZT0icm93IiBhcmlhLWxldmVsPSIxIiBhcmlhLWV4cGFu
ZGVkPSJ0cnVlIj4KKyAgICAgICAgIDx0ZCBoZWFkZXJzPSJncmlkLTEtdGl0bGVfaWQiIGlkPSJ0
YWJsZV9lbnRyeSIgcm9sZT0iZ3JpZGNlbGwiIGNvbHNwYW49IjMiICB0YWJpbmRleD0iMCI+Cisg
ICAgICAgICA8c3BhbiBjbGFzcz0iZXhwYW5kIj4rPC9zcGFuPiBBIFF1ZXN0aW9uIG9mIExvdmU8
L3RkPiAgICAgICAgICAgICAgICAgIAorICAgICA8L3RyPgorICAgICA8dHIgY2E9InRpIiByb2xl
PSJyb3ciICBhcmlhLWxldmVsPSIyIiBhcmlhLWV4cGFuZGVkPSJ0cnVlIj4KKyAgICAgICAgIDx0
ZCBoZWFkZXJzPSJncmlkLTEtaXNibl9pZCIgcm9sZT0iZ3JpZGNlbGwiPjk3OC0zLTQ1My00MDU0
MC0wPC90ZD4KKyAgICAgICAgIDx0ZCBoZWFkZXJzPSJncmlkLTEtYXV0aG9yX2lkIiByb2xlPSJn
cmlkY2VsbCI+Tm9yYSBSb2JlcnRzPC90ZD4KKyAgICAgICAgIDx0ZCBoZWFkZXJzPSJncmlkLTEt
cHJpY2VfaWQiIGNsYXNzPSJudW1lcmljIiByb2xlPSJncmlkY2VsbCIgY2E9InRlIj48ZGl2Pjku
OTk8L2Rpdj48L3RkPgorICAgICA8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+CisKKzxwIGlkPSJk
ZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CisK
KyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IHRoZSB0cmVlZ3JpZCBBUklBIHJvbGUg
ZG9lcyB3aGF0IGl0IHNob3VsZCAoYmUgZXhwb3NlZCBhcyBhIEFYVGFibGUgYW5kIHN1cHBvcnQg
QVhTZWxlY3RlZFJvd3MpIik7CisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9s
bGVyKSB7CisKKyAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3JpZC0xIikuZm9j
dXMoKTsKKyAgICAgICAgICB2YXIgdHJlZWdyaWQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5m
b2N1c2VkRWxlbWVudDsKKyAgICAgICAgICB2YXIgc2VsZWN0ZWRSb3cgPSB0cmVlZ3JpZC5jaGls
ZEF0SW5kZXgoMCk7CisgICAgICAgICAgc2hvdWxkQmUoInRyZWVncmlkLmlzQXR0cmlidXRlU3Vw
cG9ydGVkKCdBWFNlbGVjdGVkUm93cycpIiwgInRydWUiKTsKKyAgICAgICAgICBzaG91bGRCZSgi
dHJlZWdyaWQuc2VsZWN0ZWRSb3dBdEluZGV4KDApLmlzRXF1YWwoc2VsZWN0ZWRSb3cpIiwgInRy
dWUiKTsKKyAgICAgICAgICBzaG91bGRCZSgic2VsZWN0ZWRSb3cuaXNFeHBhbmRlZCIsICJmYWxz
ZSIpOworICAgICAgICAgIHNob3VsZEJlKCJzZWxlY3RlZFJvdy5oaWVyYXJjaGljYWxMZXZlbCIs
ICIxIik7CisKKyAgICAgICAgICB2YXIgc2Vjb25kUm93ID0gdHJlZWdyaWQuY2hpbGRBdEluZGV4
KDEpOworICAgICAgICAgIHNob3VsZEJlKCJzZWNvbmRSb3cuaXNFeHBhbmRlZCIsICJ0cnVlIik7
CisgICAgICAgICAgc2hvdWxkQmUoInNlY29uZFJvdy5oaWVyYXJjaGljYWxMZXZlbCIsICIxIik7
CisKKyAgICAgICAgICB2YXIgdGhpcmRSb3cgPSB0cmVlZ3JpZC5jaGlsZEF0SW5kZXgoMik7Cisg
ICAgICAgICAgc2hvdWxkQmUoInRoaXJkUm93LmlzRXhwYW5kZWQiLCAidHJ1ZSIpOworICAgICAg
ICAgIHNob3VsZEJlKCJ0aGlyZFJvdy5oaWVyYXJjaGljYWxMZXZlbCIsICIyIik7CisKKyAgICAg
ICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcm93IGRpc2Nsb3N1cmUgd29ya3MgY29ycmVjdGx5
LgorICAgICAgICAgIHNob3VsZEJlKCJ0aGlyZFJvdy5kaXNjbG9zZWRCeVJvdygpLmlzRXF1YWwo
c2Vjb25kUm93KSIsICJ0cnVlIik7CisgICAgICAgICAgc2hvdWxkQmUoInNlY29uZFJvdy5kaXNj
bG9zZWRSb3dBdEluZGV4KDApLmlzRXF1YWwodGhpcmRSb3cpIiwgInRydWUiKTsKKyAgICB9CisK
KyAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3Jj
PSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="26664"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>