<?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>181604</bug_id>
          
          <creation_ts>2018-01-12 11:08:17 -0800</creation_ts>
          <short_desc>Avoid traversing too much when doing class change invalidation</short_desc>
          <delta_ts>2018-01-30 08:13:22 -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>CSS</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1388869</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-01-12 11:08:17 -0800</bug_when>
    <thetext>Currently StyleInvalidator traverses all descendants if there is something to potentially invalidate, even if we know only element itself or direct children can be affected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388870</commentid>
    <comment_count>1</comment_count>
      <attachid>331218</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-01-12 11:09:47 -0800</bug_when>
    <thetext>Created attachment 331218
wip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1389113</commentid>
    <comment_count>2</comment_count>
      <attachid>331283</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-01-13 08:24:06 -0800</bug_when>
    <thetext>Created attachment 331283
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1394540</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-01-30 07:55:37 -0800</bug_when>
    <thetext>&lt;rdar://problem/37028606&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1394547</commentid>
    <comment_count>4</comment_count>
      <attachid>331283</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-30 08:13:20 -0800</bug_when>
    <thetext>Comment on attachment 331283
patch

Clearing flags on attachment: 331283

Committed r227787: &lt;https://trac.webkit.org/changeset/227787&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1394548</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-30 08:13:22 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331218</attachid>
            <date>2018-01-12 11:09:47 -0800</date>
            <delta_ts>2018-01-13 08:24:06 -0800</delta_ts>
            <desc>wip</desc>
            <filename>invalidation-ruleset-3.patch</filename>
            <type>text/plain</type>
            <size>17961</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxlU2V0cy5jcHAJKHJldmlzaW9uIDIy
Njg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTY3LDI2ICsxNjcsMzEgQEAgdm9pZCBEb2N1bWVudFJ1bGVTZXRzOjpjb2xs
ZWN0RmVhdHVyZXMoKQogICAgIG1fc2libGluZ1J1bGVTZXQgPSBtYWtlUnVsZVNldChtX2ZlYXR1
cmVzLnNpYmxpbmdSdWxlcyk7CiAgICAgbV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQgPSBtYWtl
UnVsZVNldChtX2ZlYXR1cmVzLnVuY29tbW9uQXR0cmlidXRlUnVsZXMpOwogCi0gICAgbV9zdWJq
ZWN0Q2xhc3NSdWxlU2V0cy5jbGVhcigpOwotICAgIG1fYW5jZXN0b3JDbGFzc1J1bGVTZXRzLmNs
ZWFyKCk7CisgICAgbV9jbGFzc0ludmFsaWRhdGlvblJ1bGVTZXRzLmNsZWFyKCk7CiAgICAgbV9h
bmNlc3RvckF0dHJpYnV0ZVJ1bGVTZXRzRm9ySFRNTC5jbGVhcigpOwogCiAgICAgbV9mZWF0dXJl
cy5zaHJpbmtUb0ZpdCgpOwogfQogCi1SdWxlU2V0KiBEb2N1bWVudFJ1bGVTZXRzOjpzdWJqZWN0
Q2xhc3NSdWxlcyhjb25zdCBBdG9taWNTdHJpbmcmIGNsYXNzTmFtZSkgY29uc3QKK2NvbnN0IFZl
Y3RvcjxJbnZhbGlkYXRpb25SdWxlU2V0PiogRG9jdW1lbnRSdWxlU2V0czo6Y2xhc3NJbnZhbGlk
YXRpb25SdWxlU2V0cyhjb25zdCBBdG9taWNTdHJpbmcmIGNsYXNzTmFtZSkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV9zdWJqZWN0Q2xhc3NSdWxlU2V0cy5lbnN1cmUoY2xhc3NOYW1lLCBbJl0gewot
ICAgICAgICBhdXRvKiBydWxlcyA9IG1fZmVhdHVyZXMuc3ViamVjdENsYXNzUnVsZXMuZ2V0KGNs
YXNzTmFtZSk7Ci0gICAgICAgIHJldHVybiBydWxlcyA/IG1ha2VSdWxlU2V0KCpydWxlcykgOiBu
dWxscHRyOwotICAgIH0pLml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLX0KLQotUnVsZVNldCogRG9j
dW1lbnRSdWxlU2V0czo6YW5jZXN0b3JDbGFzc1J1bGVzKGNvbnN0IEF0b21pY1N0cmluZyYgY2xh
c3NOYW1lKSBjb25zdAotewotICAgIHJldHVybiBtX2FuY2VzdG9yQ2xhc3NSdWxlU2V0cy5lbnN1
cmUoY2xhc3NOYW1lLCBbJl0gewotICAgICAgICBhdXRvKiBydWxlcyA9IG1fZmVhdHVyZXMuYW5j
ZXN0b3JDbGFzc1J1bGVzLmdldChjbGFzc05hbWUpOwotICAgICAgICByZXR1cm4gcnVsZXMgPyBt
YWtlUnVsZVNldCgqcnVsZXMpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gbV9jbGFzc0ludmFsaWRh
dGlvblJ1bGVTZXRzLmVuc3VyZShjbGFzc05hbWUsIFsmXSAoKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8
VmVjdG9yPEludmFsaWRhdGlvblJ1bGVTZXQ+PiB7CisgICAgICAgIGF1dG8qIGZlYXR1cmVzID0g
bV9mZWF0dXJlcy5jbGFzc1J1bGVzLmdldChjbGFzc05hbWUpOworICAgICAgICBpZiAoIWZlYXR1
cmVzKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHN0ZDo6YXJyYXk8c3Rk
Ojp1bmlxdWVfcHRyPFJ1bGVTZXQ+LCBtYXRjaEVsZW1lbnRDb3VudD4gbWF0Y2hFbGVtZW50QXJy
YXk7CisgICAgICAgIGZvciAoYXV0byYgZmVhdHVyZSA6ICpmZWF0dXJlcykgeworICAgICAgICAg
ICAgYXV0byYgcnVsZVNldCA9IG1hdGNoRWxlbWVudEFycmF5W3N0YXRpY19jYXN0PHVuc2lnbmVk
PigqZmVhdHVyZS5tYXRjaEVsZW1lbnQpXTsKKyAgICAgICAgICAgIGlmICghcnVsZVNldCkKKyAg
ICAgICAgICAgICAgICBydWxlU2V0ID0gc3RkOjptYWtlX3VuaXF1ZTxSdWxlU2V0PigpOworICAg
ICAgICAgICAgcnVsZVNldC0+YWRkUnVsZShmZWF0dXJlLnJ1bGUsIGZlYXR1cmUuc2VsZWN0b3JJ
bmRleCk7CisgICAgICAgIH0KKyAgICAgICAgYXV0byBpbnZhbGlkYXRpb25SdWxlU2V0cyA9IHN0
ZDo6bWFrZV91bmlxdWU8VmVjdG9yPEludmFsaWRhdGlvblJ1bGVTZXQ+PigpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hFbGVtZW50QXJyYXkuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChtYXRjaEVsZW1lbnRBcnJheVtpXSkKKyAgICAgICAgICAgICAgICBp
bnZhbGlkYXRpb25SdWxlU2V0cy0+YXBwZW5kKHsgc3RhdGljX2Nhc3Q8TWF0Y2hFbGVtZW50Pihp
KSwgV1RGTW92ZShtYXRjaEVsZW1lbnRBcnJheVtpXSkgfSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGludmFsaWRhdGlvblJ1bGVTZXRzOwogICAgIH0pLml0ZXJhdG9yLT52YWx1ZS5nZXQo
KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxlU2V0cy5oCShyZXZpc2lv
biAyMjY4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxlU2V0cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw2ICszOCwxMyBAQCBjbGFzcyBFeHRlbnNpb25TdHlsZVNoZWV0czsK
IGNsYXNzIEluc3BlY3RvckNTU09NV3JhcHBlcnM7CiBjbGFzcyBNZWRpYVF1ZXJ5RXZhbHVhdG9y
OwogCitzdHJ1Y3QgSW52YWxpZGF0aW9uUnVsZVNldCB7CisgICAgTWF0Y2hFbGVtZW50IG1hdGNo
RWxlbWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVsZVNldD4gcnVsZVNldDsKKworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworfTsKKwogY2xhc3MgRG9jdW1lbnRSdWxlU2V0cyB7CiBw
dWJsaWM6CiAgICAgRG9jdW1lbnRSdWxlU2V0cyhTdHlsZVJlc29sdmVyJik7CkBAIC01MCw4ICs1
Nyw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBSdWxlRmVhdHVyZVNldCYgZmVhdHVyZXMoKSBjb25z
dDsKICAgICBSdWxlU2V0KiBzaWJsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaWJsaW5nUnVsZVNl
dC5nZXQoKTsgfQogICAgIFJ1bGVTZXQqIHVuY29tbW9uQXR0cmlidXRlKCkgY29uc3QgeyByZXR1
cm4gbV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQuZ2V0KCk7IH0KLSAgICBSdWxlU2V0KiBzdWJq
ZWN0Q2xhc3NSdWxlcyhjb25zdCBBdG9taWNTdHJpbmcmIGNsYXNzTmFtZSkgY29uc3Q7Ci0gICAg
UnVsZVNldCogYW5jZXN0b3JDbGFzc1J1bGVzKGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NOYW1l
KSBjb25zdDsKKworICAgIGNvbnN0IFZlY3RvcjxJbnZhbGlkYXRpb25SdWxlU2V0PiogY2xhc3NJ
bnZhbGlkYXRpb25SdWxlU2V0cyhjb25zdCBBdG9taWNTdHJpbmcmIGNsYXNzTmFtZSkgY29uc3Q7
CiAKICAgICBzdHJ1Y3QgQXR0cmlidXRlUnVsZXMgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKQEAgLTkxLDggKzk4LDcgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIHVuc2lnbmVk
IG1fdXNlckFnZW50TWVkaWFRdWVyeVJ1bGVDb3VudE9uVXBkYXRlIHsgMCB9OwogICAgIG11dGFi
bGUgc3RkOjp1bmlxdWVfcHRyPFJ1bGVTZXQ+IG1fc2libGluZ1J1bGVTZXQ7CiAgICAgbXV0YWJs
ZSBzdGQ6OnVuaXF1ZV9wdHI8UnVsZVNldD4gbV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQ7Ci0g
ICAgbXV0YWJsZSBIYXNoTWFwPEF0b21pY1N0cmluZywgc3RkOjp1bmlxdWVfcHRyPFJ1bGVTZXQ+
PiBtX3N1YmplY3RDbGFzc1J1bGVTZXRzOwotICAgIG11dGFibGUgSGFzaE1hcDxBdG9taWNTdHJp
bmcsIHN0ZDo6dW5pcXVlX3B0cjxSdWxlU2V0Pj4gbV9hbmNlc3RvckNsYXNzUnVsZVNldHM7Cisg
ICAgbXV0YWJsZSBIYXNoTWFwPEF0b21pY1N0cmluZywgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxJ
bnZhbGlkYXRpb25SdWxlU2V0Pj4+IG1fY2xhc3NJbnZhbGlkYXRpb25SdWxlU2V0czsKICAgICBt
dXRhYmxlIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8QXR0cmlidXRlUnVs
ZXM+PiBtX2FuY2VzdG9yQXR0cmlidXRlUnVsZVNldHNGb3JIVE1MOwogfTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL1J1bGVGZWF0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvUnVsZUZlYXR1cmUuY3BwCShyZXZpc2lvbiAyMjY4ODApCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvUnVsZUZlYXR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUnVsZUZlYXR1cmVTZXQ6Ok1hdGNoRWxlbWVudCBS
dWxlRmVhdHVyZVNldDo6Y29tcHV0ZU5leHRNYXRjaEVsZW1lbnQoTWF0Y2hFbGVtZW50IG1hdGNo
RWxlbWVudCwgQ1NTU2VsZWN0b3I6OlJlbGF0aW9uVHlwZSByZWxhdGlvbikKK01hdGNoRWxlbWVu
dCBSdWxlRmVhdHVyZVNldDo6Y29tcHV0ZU5leHRNYXRjaEVsZW1lbnQoTWF0Y2hFbGVtZW50IG1h
dGNoRWxlbWVudCwgQ1NTU2VsZWN0b3I6OlJlbGF0aW9uVHlwZSByZWxhdGlvbikKIHsKICAgICBp
ZiAobWF0Y2hFbGVtZW50ID09IE1hdGNoRWxlbWVudDo6U3ViamVjdCB8fCBtYXRjaEVsZW1lbnQg
PT0gTWF0Y2hFbGVtZW50OjpJbmRpcmVjdFNpYmxpbmcgfHwgbWF0Y2hFbGVtZW50ID09IE1hdGNo
RWxlbWVudDo6RGlyZWN0U2libGluZykgewogICAgICAgICBzd2l0Y2ggKHJlbGF0aW9uKSB7CkBA
IC02OSw3ICs2OSw3IEBAIFJ1bGVGZWF0dXJlU2V0OjpNYXRjaEVsZW1lbnQgUnVsZUZlYXR1cmUK
ICAgICByZXR1cm4gbWF0Y2hFbGVtZW50OwogfTsKIAotUnVsZUZlYXR1cmVTZXQ6Ok1hdGNoRWxl
bWVudCBSdWxlRmVhdHVyZVNldDo6Y29tcHV0ZVN1YlNlbGVjdG9yTWF0Y2hFbGVtZW50KE1hdGNo
RWxlbWVudCBtYXRjaEVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvcikKK01hdGNo
RWxlbWVudCBSdWxlRmVhdHVyZVNldDo6Y29tcHV0ZVN1YlNlbGVjdG9yTWF0Y2hFbGVtZW50KE1h
dGNoRWxlbWVudCBtYXRjaEVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvcikKIHsK
ICAgICBBU1NFUlQoc2VsZWN0b3Iuc2VsZWN0b3JMaXN0KCkpOwogCkBAIC0xNTcsMjggKzE1Nywx
MiBAQCB2b2lkIFJ1bGVGZWF0dXJlU2V0Ojpjb2xsZWN0RmVhdHVyZXMoY29uCiAgICAgICAgIHNp
YmxpbmdSdWxlcy5hcHBlbmQoUnVsZUZlYXR1cmUocnVsZURhdGEucnVsZSgpLCBydWxlRGF0YS5z
ZWxlY3RvckluZGV4KCkpKTsKICAgICBpZiAocnVsZURhdGEuY29udGFpbnNVbmNvbW1vbkF0dHJp
YnV0ZVNlbGVjdG9yKCkpCiAgICAgICAgIHVuY29tbW9uQXR0cmlidXRlUnVsZXMuYXBwZW5kKFJ1
bGVGZWF0dXJlKHJ1bGVEYXRhLnJ1bGUoKSwgcnVsZURhdGEuc2VsZWN0b3JJbmRleCgpKSk7Ci0g
ICAgZm9yIChhdXRvJiBjbGFzc05hbWVBbmRNYXRjaEVsZW1lbnQgOiBzZWxlY3RvckZlYXR1cmVz
LmNsYXNzZXMpIHsKLSAgICAgICAgYXV0byYgY2xhc3NOYW1lID0gY2xhc3NOYW1lQW5kTWF0Y2hF
bGVtZW50LmZpcnN0OwotICAgICAgICBzd2l0Y2ggKGNsYXNzTmFtZUFuZE1hdGNoRWxlbWVudC5z
ZWNvbmQpIHsKLSAgICAgICAgY2FzZSBNYXRjaEVsZW1lbnQ6OlN1YmplY3Q6Ci0gICAgICAgICAg
ICBzdWJqZWN0Q2xhc3NSdWxlcy5lbnN1cmUoY2xhc3NOYW1lLCBbXSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VmVjdG9yPFJ1bGVGZWF0dXJlPj4oKTsKLSAgICAg
ICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZS0+YXBwZW5kKFJ1bGVGZWF0dXJlKHJ1bGVEYXRhLnJ1
bGUoKSwgcnVsZURhdGEuc2VsZWN0b3JJbmRleCgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBNYXRjaEVsZW1lbnQ6OlBhcmVudDoKLSAgICAgICAgY2FzZSBNYXRjaEVsZW1l
bnQ6OkFuY2VzdG9yOgotICAgICAgICAgICAgYW5jZXN0b3JDbGFzc1J1bGVzLmVuc3VyZShjbGFz
c05hbWUsIFtdIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxWZWN0
b3I8UnVsZUZlYXR1cmU+PigpOwotICAgICAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlLT5hcHBl
bmQoUnVsZUZlYXR1cmUocnVsZURhdGEucnVsZSgpLCBydWxlRGF0YS5zZWxlY3RvckluZGV4KCkp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1hdGNoRWxlbWVudDo6RGlyZWN0
U2libGluZzoKLSAgICAgICAgY2FzZSBNYXRjaEVsZW1lbnQ6OkluZGlyZWN0U2libGluZzoKLSAg
ICAgICAgY2FzZSBNYXRjaEVsZW1lbnQ6OlBhcmVudFNpYmxpbmc6Ci0gICAgICAgIGNhc2UgTWF0
Y2hFbGVtZW50OjpBbmNlc3RvclNpYmxpbmc6Ci0gICAgICAgIGNhc2UgTWF0Y2hFbGVtZW50OjpI
b3N0OgotICAgICAgICAgICAgb3RoZXJDbGFzc2VzSW5SdWxlcy5hZGQoY2xhc3NOYW1lKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9OworICAgIGZvciAoYXV0byYgbmFtZUFuZE1hdGNo
IDogc2VsZWN0b3JGZWF0dXJlcy5jbGFzc2VzKSB7CisgICAgICAgIGNsYXNzUnVsZXMuZW5zdXJl
KG5hbWVBbmRNYXRjaC5maXJzdCwgW10geworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91
bmlxdWU8VmVjdG9yPFJ1bGVGZWF0dXJlPj4oKTsKKyAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVl
LT5hcHBlbmQoUnVsZUZlYXR1cmUocnVsZURhdGEucnVsZSgpLCBydWxlRGF0YS5zZWxlY3Rvcklu
ZGV4KCksIG5hbWVBbmRNYXRjaC5zZWNvbmQpKTsKKyAgICAgICAgaWYgKG5hbWVBbmRNYXRjaC5z
ZWNvbmQgPT0gTWF0Y2hFbGVtZW50OjpIb3N0KQorICAgICAgICAgICAgY2xhc3Nlc0FmZmVjdGlu
Z0hvc3QuYWRkKG5hbWVBbmRNYXRjaC5maXJzdCk7CiAgICAgfQogICAgIGZvciAoYXV0byogc2Vs
ZWN0b3IgOiBzZWxlY3RvckZlYXR1cmVzLmF0dHJpYnV0ZVNlbGVjdG9yc01hdGNoaW5nQW5jZXN0
b3JzKSB7CiAgICAgICAgIC8vIEhhc2hpbmcgYnkgYXR0cmlidXRlQ2Fub25pY2FsTG9jYWxOYW1l
IG1ha2VzIHRoaXMgSFRNTCBzcGVjaWZpYy4KQEAgLTE5NiwyMSArMTgwLDE2IEBAIHZvaWQgUnVs
ZUZlYXR1cmVTZXQ6OmFkZChjb25zdCBSdWxlRmVhdHUKIHsKICAgICBpZHNJblJ1bGVzLmFkZChv
dGhlci5pZHNJblJ1bGVzLmJlZ2luKCksIG90aGVyLmlkc0luUnVsZXMuZW5kKCkpOwogICAgIGlk
c01hdGNoaW5nQW5jZXN0b3JzSW5SdWxlcy5hZGQob3RoZXIuaWRzTWF0Y2hpbmdBbmNlc3RvcnNJ
blJ1bGVzLmJlZ2luKCksIG90aGVyLmlkc01hdGNoaW5nQW5jZXN0b3JzSW5SdWxlcy5lbmQoKSk7
Ci0gICAgb3RoZXJDbGFzc2VzSW5SdWxlcy5hZGQob3RoZXIub3RoZXJDbGFzc2VzSW5SdWxlcy5i
ZWdpbigpLCBvdGhlci5vdGhlckNsYXNzZXNJblJ1bGVzLmVuZCgpKTsKICAgICBhdHRyaWJ1dGVD
YW5vbmljYWxMb2NhbE5hbWVzSW5SdWxlcy5hZGQob3RoZXIuYXR0cmlidXRlQ2Fub25pY2FsTG9j
YWxOYW1lc0luUnVsZXMuYmVnaW4oKSwgb3RoZXIuYXR0cmlidXRlQ2Fub25pY2FsTG9jYWxOYW1l
c0luUnVsZXMuZW5kKCkpOwogICAgIGF0dHJpYnV0ZUxvY2FsTmFtZXNJblJ1bGVzLmFkZChvdGhl
ci5hdHRyaWJ1dGVMb2NhbE5hbWVzSW5SdWxlcy5iZWdpbigpLCBvdGhlci5hdHRyaWJ1dGVMb2Nh
bE5hbWVzSW5SdWxlcy5lbmQoKSk7CiAgICAgc2libGluZ1J1bGVzLmFwcGVuZFZlY3RvcihvdGhl
ci5zaWJsaW5nUnVsZXMpOwogICAgIHVuY29tbW9uQXR0cmlidXRlUnVsZXMuYXBwZW5kVmVjdG9y
KG90aGVyLnVuY29tbW9uQXR0cmlidXRlUnVsZXMpOwotICAgIGZvciAoYXV0byYga2V5VmFsdWVQ
YWlyIDogb3RoZXIuYW5jZXN0b3JDbGFzc1J1bGVzKSB7Ci0gICAgICAgIGFuY2VzdG9yQ2xhc3NS
dWxlcy5lbnN1cmUoa2V5VmFsdWVQYWlyLmtleSwgW10gewotICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8VmVjdG9yPFJ1bGVGZWF0dXJlPj4oKTsKLSAgICAgICAgfSkuaXRlcmF0
b3ItPnZhbHVlLT5hcHBlbmRWZWN0b3IoKmtleVZhbHVlUGFpci52YWx1ZSk7Ci0gICAgfQotICAg
IGZvciAoYXV0byYga2V5VmFsdWVQYWlyIDogb3RoZXIuc3ViamVjdENsYXNzUnVsZXMpIHsKLSAg
ICAgICAgc3ViamVjdENsYXNzUnVsZXMuZW5zdXJlKGtleVZhbHVlUGFpci5rZXksIFtdIHsKKyAg
ICBmb3IgKGF1dG8mIGtleVZhbHVlUGFpciA6IG90aGVyLmNsYXNzUnVsZXMpIHsKKyAgICAgICAg
Y2xhc3NSdWxlcy5lbnN1cmUoa2V5VmFsdWVQYWlyLmtleSwgW10gewogICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bWFrZV91bmlxdWU8VmVjdG9yPFJ1bGVGZWF0dXJlPj4oKTsKICAgICAgICAgfSku
aXRlcmF0b3ItPnZhbHVlLT5hcHBlbmRWZWN0b3IoKmtleVZhbHVlUGFpci52YWx1ZSk7CiAgICAg
fQorICAgIGNsYXNzZXNBZmZlY3RpbmdIb3N0LmFkZChvdGhlci5jbGFzc2VzQWZmZWN0aW5nSG9z
dC5iZWdpbigpLCBvdGhlci5jbGFzc2VzQWZmZWN0aW5nSG9zdC5lbmQoKSk7CiAKICAgICBmb3Ig
KGF1dG8mIGtleVZhbHVlUGFpciA6IG90aGVyLmFuY2VzdG9yQXR0cmlidXRlUnVsZXNGb3JIVE1M
KSB7CiAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gYW5jZXN0b3JBdHRyaWJ1dGVSdWxlc0ZvckhU
TUwuZW5zdXJlKGtleVZhbHVlUGFpci5rZXksIFtdIHsKQEAgLTIyOSwxMyArMjA4LDEyIEBAIHZv
aWQgUnVsZUZlYXR1cmVTZXQ6OmNsZWFyKCkKIHsKICAgICBpZHNJblJ1bGVzLmNsZWFyKCk7CiAg
ICAgaWRzTWF0Y2hpbmdBbmNlc3RvcnNJblJ1bGVzLmNsZWFyKCk7Ci0gICAgb3RoZXJDbGFzc2Vz
SW5SdWxlcy5jbGVhcigpOwogICAgIGF0dHJpYnV0ZUNhbm9uaWNhbExvY2FsTmFtZXNJblJ1bGVz
LmNsZWFyKCk7CiAgICAgYXR0cmlidXRlTG9jYWxOYW1lc0luUnVsZXMuY2xlYXIoKTsKICAgICBz
aWJsaW5nUnVsZXMuY2xlYXIoKTsKICAgICB1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmNsZWFyKCk7
Ci0gICAgYW5jZXN0b3JDbGFzc1J1bGVzLmNsZWFyKCk7Ci0gICAgc3ViamVjdENsYXNzUnVsZXMu
Y2xlYXIoKTsKKyAgICBjbGFzc1J1bGVzLmNsZWFyKCk7CisgICAgY2xhc3Nlc0FmZmVjdGluZ0hv
c3QuY2xlYXIoKTsKICAgICBhbmNlc3RvckF0dHJpYnV0ZVJ1bGVzRm9ySFRNTC5jbGVhcigpOwog
ICAgIHVzZXNGaXJzdExpbmVSdWxlcyA9IGZhbHNlOwogICAgIHVzZXNGaXJzdExldHRlclJ1bGVz
ID0gZmFsc2U7CkBAIC0yNDUsOSArMjIzLDcgQEAgdm9pZCBSdWxlRmVhdHVyZVNldDo6c2hyaW5r
VG9GaXQoKQogewogICAgIHNpYmxpbmdSdWxlcy5zaHJpbmtUb0ZpdCgpOwogICAgIHVuY29tbW9u
QXR0cmlidXRlUnVsZXMuc2hyaW5rVG9GaXQoKTsKLSAgICBmb3IgKGF1dG8mIHJ1bGVzIDogYW5j
ZXN0b3JDbGFzc1J1bGVzLnZhbHVlcygpKQotICAgICAgICBydWxlcy0+c2hyaW5rVG9GaXQoKTsK
LSAgICBmb3IgKGF1dG8mIHJ1bGVzIDogc3ViamVjdENsYXNzUnVsZXMudmFsdWVzKCkpCisgICAg
Zm9yIChhdXRvJiBydWxlcyA6IGNsYXNzUnVsZXMudmFsdWVzKCkpCiAgICAgICAgIHJ1bGVzLT5z
aHJpbmtUb0ZpdCgpOwogICAgIGZvciAoYXV0byYgcnVsZXMgOiBhbmNlc3RvckF0dHJpYnV0ZVJ1
bGVzRm9ySFRNTC52YWx1ZXMoKSkKICAgICAgICAgcnVsZXMtPmZlYXR1cmVzLnNocmlua1RvRml0
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvUnVsZUZlYXR1cmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvUnVsZUZlYXR1cmUuaAkocmV2aXNpb24gMjI2ODgwKQorKysg
U291cmNlL1dlYkNvcmUvY3NzL1J1bGVGZWF0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE0
ICszMywxOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBSdWxlRGF0YTsKIGNsYXNzIFN0
eWxlUnVsZTsKIAorZW51bSBjbGFzcyBNYXRjaEVsZW1lbnQgeyBTdWJqZWN0LCBQYXJlbnQsIEFu
Y2VzdG9yLCBEaXJlY3RTaWJsaW5nLCBJbmRpcmVjdFNpYmxpbmcsIFBhcmVudFNpYmxpbmcsIEFu
Y2VzdG9yU2libGluZywgSG9zdCB9OworY29uc3RleHByIHVuc2lnbmVkIG1hdGNoRWxlbWVudENv
dW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE1hdGNoRWxlbWVudDo6SG9zdCkgKyAxOworCiBz
dHJ1Y3QgUnVsZUZlYXR1cmUgewotICAgIFJ1bGVGZWF0dXJlKFN0eWxlUnVsZSogcnVsZSwgdW5z
aWduZWQgc2VsZWN0b3JJbmRleCkKKyAgICBSdWxlRmVhdHVyZShTdHlsZVJ1bGUqIHJ1bGUsIHVu
c2lnbmVkIHNlbGVjdG9ySW5kZXgsIHN0ZDo6b3B0aW9uYWw8TWF0Y2hFbGVtZW50PiBtYXRjaEVs
ZW1lbnQgPSBzdGQ6Om51bGxvcHQpCiAgICAgICAgIDogcnVsZShydWxlKQogICAgICAgICAsIHNl
bGVjdG9ySW5kZXgoc2VsZWN0b3JJbmRleCkKKyAgICAgICAgLCBtYXRjaEVsZW1lbnQobWF0Y2hF
bGVtZW50KQogICAgIHsKICAgICB9CiAgICAgU3R5bGVSdWxlKiBydWxlOwogICAgIHVuc2lnbmVk
IHNlbGVjdG9ySW5kZXg7CisgICAgc3RkOjpvcHRpb25hbDxNYXRjaEVsZW1lbnQ+IG1hdGNoRWxl
bWVudDsKIH07CiAKIHN0cnVjdCBSdWxlRmVhdHVyZVNldCB7CkBAIC01NSw5ICs2MCw5IEBAIHN0
cnVjdCBSdWxlRmVhdHVyZVNldCB7CiAgICAgSGFzaFNldDxBdG9taWNTdHJpbmc+IGF0dHJpYnV0
ZUxvY2FsTmFtZXNJblJ1bGVzOwogICAgIFZlY3RvcjxSdWxlRmVhdHVyZT4gc2libGluZ1J1bGVz
OwogICAgIFZlY3RvcjxSdWxlRmVhdHVyZT4gdW5jb21tb25BdHRyaWJ1dGVSdWxlczsKLSAgICBI
YXNoTWFwPEF0b21pY1N0cmluZywgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxSdWxlRmVhdHVyZT4+
PiBhbmNlc3RvckNsYXNzUnVsZXM7Ci0gICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIHN0ZDo6dW5p
cXVlX3B0cjxWZWN0b3I8UnVsZUZlYXR1cmU+Pj4gc3ViamVjdENsYXNzUnVsZXM7Ci0gICAgSGFz
aFNldDxBdG9taWNTdHJpbmc+IG90aGVyQ2xhc3Nlc0luUnVsZXM7CisgICAgCisgICAgSGFzaE1h
cDxBdG9taWNTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8UnVsZUZlYXR1cmU+Pj4gY2xh
c3NSdWxlczsKKyAgICBIYXNoU2V0PEF0b21pY1N0cmluZz4gY2xhc3Nlc0FmZmVjdGluZ0hvc3Q7
CiAKICAgICBzdHJ1Y3QgQXR0cmlidXRlUnVsZXMgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKQEAgLTcxLDggKzc2LDYgQEAgc3RydWN0IFJ1bGVGZWF0dXJlU2V0IHsKICAgICBi
b29sIHVzZXNGaXJzdExldHRlclJ1bGVzIHsgZmFsc2UgfTsKIAogcHJpdmF0ZToKLSAgICBlbnVt
IGNsYXNzIE1hdGNoRWxlbWVudCB7IFN1YmplY3QsIFBhcmVudCwgQW5jZXN0b3IsIERpcmVjdFNp
YmxpbmcsIEluZGlyZWN0U2libGluZywgUGFyZW50U2libGluZywgQW5jZXN0b3JTaWJsaW5nLCBI
b3N0IH07Ci0KICAgICBzdGF0aWMgTWF0Y2hFbGVtZW50IGNvbXB1dGVOZXh0TWF0Y2hFbGVtZW50
KE1hdGNoRWxlbWVudCwgQ1NTU2VsZWN0b3I6OlJlbGF0aW9uVHlwZSk7CiAgICAgc3RhdGljIE1h
dGNoRWxlbWVudCBjb21wdXRlU3ViU2VsZWN0b3JNYXRjaEVsZW1lbnQoTWF0Y2hFbGVtZW50LCBj
b25zdCBDU1NTZWxlY3RvciYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9DbGFzc0No
YW5nZUludmFsaWRhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUv
Q2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCShyZXZpc2lvbiAyMjY4ODApCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdHlsZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg5LDI2ICs4OSwxMyBAQCB2b2lkIENsYXNzQ2hhbmdlSW52YWxpZGF0aW9uOjpjb21wdXRl
SW52CiAKICAgICBib29sIHNob3VsZEludmFsaWRhdGVDdXJyZW50ID0gZmFsc2U7CiAgICAgYm9v
bCBtYXlBZmZlY3RTdHlsZUluU2hhZG93VHJlZSA9IGZhbHNlOwotICAgIENsYXNzQ2hhbmdlVmVj
dG9yIGNsYXNzZXNBZmZlY3RpbmdEZXNjZW5kYW50OwotICAgIENsYXNzQ2hhbmdlVmVjdG9yIGNs
YXNzZXNBZmZlY3RpbmdDdXJyZW50OwogCiAgICAgdHJhdmVyc2VSdWxlRmVhdHVyZXMobV9lbGVt
ZW50LCBbJl0gKGNvbnN0IFJ1bGVGZWF0dXJlU2V0JiBmZWF0dXJlcywgYm9vbCBtYXlBZmZlY3RT
aGFkb3dUcmVlKSB7CiAgICAgICAgIGZvciAoYXV0byogY2hhbmdlZENsYXNzIDogY2hhbmdlZENs
YXNzZXMpIHsKLSAgICAgICAgICAgIGJvb2wgbWF5QWZmZWN0U3R5bGUgPSBmYWxzZTsKLSAgICAg
ICAgICAgIGlmIChmZWF0dXJlcy5vdGhlckNsYXNzZXNJblJ1bGVzLmNvbnRhaW5zKGNoYW5nZWRD
bGFzcykpIHsKLSAgICAgICAgICAgICAgICBzaG91bGRJbnZhbGlkYXRlQ3VycmVudCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgbWF5QWZmZWN0U3R5bGUgPSB0cnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKGZlYXR1cmVzLmFuY2VzdG9yQ2xhc3NSdWxlcy5jb250YWlucyhjaGFu
Z2VkQ2xhc3MpKSB7Ci0gICAgICAgICAgICAgICAgY2xhc3Nlc0FmZmVjdGluZ0Rlc2NlbmRhbnQu
YXBwZW5kKGNoYW5nZWRDbGFzcyk7Ci0gICAgICAgICAgICAgICAgbWF5QWZmZWN0U3R5bGUgPSB0
cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZlYXR1cmVzLnN1YmplY3RDbGFz
c1J1bGVzLmNvbnRhaW5zKGNoYW5nZWRDbGFzcykpIHsKLSAgICAgICAgICAgICAgICBjbGFzc2Vz
QWZmZWN0aW5nQ3VycmVudC5hcHBlbmQoY2hhbmdlZENsYXNzKTsKLSAgICAgICAgICAgICAgICBt
YXlBZmZlY3RTdHlsZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobWF5
QWZmZWN0U3R5bGUgJiYgbWF5QWZmZWN0U2hhZG93VHJlZSkKKyAgICAgICAgICAgIGlmIChtYXlB
ZmZlY3RTaGFkb3dUcmVlICYmIGZlYXR1cmVzLmNsYXNzUnVsZXMuY29udGFpbnMoY2hhbmdlZENs
YXNzKSkKICAgICAgICAgICAgICAgICBtYXlBZmZlY3RTdHlsZUluU2hhZG93VHJlZSA9IHRydWU7
CisgICAgICAgICAgICBpZiAoZmVhdHVyZXMuY2xhc3Nlc0FmZmVjdGluZ0hvc3QuY29udGFpbnMo
Y2hhbmdlZENsYXNzKSkKKyAgICAgICAgICAgICAgICBzaG91bGRJbnZhbGlkYXRlQ3VycmVudCA9
IHRydWU7CiAgICAgICAgIH0KICAgICB9KTsKIApAQCAtMTE4LDMxICsxMDUsNDMgQEAgdm9pZCBD
bGFzc0NoYW5nZUludmFsaWRhdGlvbjo6Y29tcHV0ZUludgogICAgICAgICByZXR1cm47CiAgICAg
fQogCisgICAgaWYgKHNob3VsZEludmFsaWRhdGVDdXJyZW50KQorICAgICAgICBtX2VsZW1lbnQu
aW52YWxpZGF0ZVN0eWxlKCk7CisKICAgICBhdXRvJiBydWxlU2V0cyA9IG1fZWxlbWVudC5zdHls
ZVJlc29sdmVyKCkucnVsZVNldHMoKTsKIAotICAgIGlmIChjaGlsZHJlbk9mVHlwZTxFbGVtZW50
PihtX2VsZW1lbnQpLmZpcnN0KCkpIHsKLSAgICAgICAgZm9yIChhdXRvKiBjaGFuZ2VkQ2xhc3Mg
OiBjbGFzc2VzQWZmZWN0aW5nRGVzY2VuZGFudCkgewotICAgICAgICAgICAgaWYgKGF1dG8qIHJ1
bGVzID0gcnVsZVNldHMuYW5jZXN0b3JDbGFzc1J1bGVzKGNoYW5nZWRDbGFzcykpCi0gICAgICAg
ICAgICAgICAgbV9pbnZhbGlkYXRpb25SdWxlU2V0cy5hcHBlbmQocnVsZXMpOworICAgIGZvciAo
YXV0byogY2hhbmdlZENsYXNzIDogY2hhbmdlZENsYXNzZXMpIHsKKyAgICAgICAgaWYgKGF1dG8q
IGludmFsaWRhdGlvblJ1bGVTZXRzID0gcnVsZVNldHMuY2xhc3NJbnZhbGlkYXRpb25SdWxlU2V0
cyhjaGFuZ2VkQ2xhc3MpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGludmFsaWRhdGlvblJ1
bGVTZXQgOiAqaW52YWxpZGF0aW9uUnVsZVNldHMpCisgICAgICAgICAgICAgICAgbV9pbnZhbGlk
YXRpb25SdWxlU2V0cy5hcHBlbmQoJmludmFsaWRhdGlvblJ1bGVTZXQpOwogICAgICAgICB9CiAg
ICAgfQotCi0gICAgaWYgKHNob3VsZEludmFsaWRhdGVDdXJyZW50KSB7Ci0gICAgICAgIG1fZWxl
bWVudC5pbnZhbGlkYXRlU3R5bGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZv
ciAoYXV0byogY2hhbmdlZENsYXNzIDogY2xhc3Nlc0FmZmVjdGluZ0N1cnJlbnQpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHJ1bGVzID0gcnVsZVNldHMuc3ViamVjdENsYXNzUnVsZXMoY2hhbmdlZENs
YXNzKSkKLSAgICAgICAgICAgIG1faW52YWxpZGF0aW9uUnVsZVNldHMuYXBwZW5kKHJ1bGVzKTsK
LSAgICB9CiB9CiAKIHZvaWQgQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb246OmludmFsaWRhdGVTdHls
ZVdpdGhSdWxlU2V0cygpCiB7Ci0gICAgZm9yIChhdXRvKiBydWxlcyA6IG1faW52YWxpZGF0aW9u
UnVsZVNldHMpIHsKLSAgICAgICAgSW52YWxpZGF0b3IgaW52YWxpZGF0b3IoKnJ1bGVzKTsKLSAg
ICAgICAgaW52YWxpZGF0b3IuaW52YWxpZGF0ZVN0eWxlKG1fZWxlbWVudCk7CisgICAgZm9yIChh
dXRvKiBpbnZhbGlkYXRpb25SdWxlU2V0IDogbV9pbnZhbGlkYXRpb25SdWxlU2V0cykgeworICAg
ICAgICBzd2l0Y2ggKGludmFsaWRhdGlvblJ1bGVTZXQtPm1hdGNoRWxlbWVudCkgeworICAgICAg
ICBjYXNlIE1hdGNoRWxlbWVudDo6U3ViamVjdDogeworICAgICAgICAgICAgSW52YWxpZGF0b3Ig
aW52YWxpZGF0b3IoKmludmFsaWRhdGlvblJ1bGVTZXQtPnJ1bGVTZXQpOworICAgICAgICAgICAg
aW52YWxpZGF0b3IuaW52YWxpZGF0ZVN0eWxlRm9yU2luZ2xlRWxlbWVudChtX2VsZW1lbnQpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBNYXRjaEVsZW1lbnQ6
OlBhcmVudDoKKyAgICAgICAgY2FzZSBNYXRjaEVsZW1lbnQ6OkFuY2VzdG9yOiB7CisgICAgICAg
ICAgICBJbnZhbGlkYXRvciBpbnZhbGlkYXRvcigqaW52YWxpZGF0aW9uUnVsZVNldC0+cnVsZVNl
dCk7CisgICAgICAgICAgICBpbnZhbGlkYXRvci5pbnZhbGlkYXRlU3R5bGUobV9lbGVtZW50KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgTWF0Y2hFbGVtZW50
OjpEaXJlY3RTaWJsaW5nOgorICAgICAgICBjYXNlIE1hdGNoRWxlbWVudDo6SW5kaXJlY3RTaWJs
aW5nOgorICAgICAgICBjYXNlIE1hdGNoRWxlbWVudDo6UGFyZW50U2libGluZzoKKyAgICAgICAg
Y2FzZSBNYXRjaEVsZW1lbnQ6OkFuY2VzdG9yU2libGluZzoKKyAgICAgICAgICAgIG1fZWxlbWVu
dC5pbnZhbGlkYXRlU3R5bGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1h
dGNoRWxlbWVudDo6SG9zdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hhbmdlSW52YWxpZGF0
aW9uLmgJKHJldmlzaW9uIDIyNjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hh
bmdlSW52YWxpZGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgRG9jdW1lbnRSdWxlU2V0czsKIGNsYXNzIFJ1bGVTZXQ7CiBj
bGFzcyBTcGFjZVNwbGl0U3RyaW5nOworc3RydWN0IEludmFsaWRhdGlvblJ1bGVTZXQ7CiAKIG5h
bWVzcGFjZSBTdHlsZSB7CiAKQEAgLTQ4LDcgKzQ5LDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBi
b29sIG1faXNFbmFibGVkOwogICAgIEVsZW1lbnQmIG1fZWxlbWVudDsKIAotICAgIFZlY3Rvcjxj
b25zdCBSdWxlU2V0KiwgND4gbV9pbnZhbGlkYXRpb25SdWxlU2V0czsKKyAgICBWZWN0b3I8Y29u
c3QgSW52YWxpZGF0aW9uUnVsZVNldCosIDQ+IG1faW52YWxpZGF0aW9uUnVsZVNldHM7CiB9Owog
CiBpbmxpbmUgQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb246OkNsYXNzQ2hhbmdlSW52YWxpZGF0aW9u
KEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIG9sZENsYXNzZXMsIGNv
bnN0IFNwYWNlU3BsaXRTdHJpbmcmIG5ld0NsYXNzZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZUludmFsaWRhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZUludmFsaWRhdG9yLmNwcAkocmV2aXNpb24gMjI2ODgwKQorKysgU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVJbnZhbGlkYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNSw1
ICsyMDUsMTAgQEAgdm9pZCBJbnZhbGlkYXRvcjo6aW52YWxpZGF0ZVN0eWxlKEVsZW1lbgogICAg
IGludmFsaWRhdGVTdHlsZUZvclRyZWUoZWxlbWVudCwgbnVsbHB0cik7CiB9CiAKK3ZvaWQgSW52
YWxpZGF0b3I6OmludmFsaWRhdGVTdHlsZUZvclNpbmdsZUVsZW1lbnQoRWxlbWVudCYgZWxlbWVu
dCkKK3sKKyAgICBpbnZhbGlkYXRlSWZOZWVkZWQoZWxlbWVudCwgbnVsbHB0cik7Cit9CisKIH0K
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdG9yLmgJKHJldmlzaW9u
IDIyNjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnZhbGlkYXRl
U3R5bGUoRG9jdW1lbnQmKTsKICAgICB2b2lkIGludmFsaWRhdGVTdHlsZShTaGFkb3dSb290Jik7
CiAgICAgdm9pZCBpbnZhbGlkYXRlU3R5bGUoRWxlbWVudCYpOworICAgIHZvaWQgaW52YWxpZGF0
ZVN0eWxlRm9yU2luZ2xlRWxlbWVudChFbGVtZW50Jik7CiAKIHByaXZhdGU6CiAgICAgZW51bSBj
bGFzcyBDaGVja0Rlc2NlbmRhbnRzIHsgWWVzLCBObyB9OwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3R5bGUvU3R5bGVTaGFyaW5nUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlU2hhcmluZ1Jlc29sdmVyLmNwcAkocmV2aXNpb24gMjI2ODgwKQorKysg
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTaGFyaW5nUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNDAsMTMgKzM0MCw4IEBAIGJvb2wgU2hhcmluZ1Jlc29sdmVyOjpzaGFyaW5nQ2Fu
ZGlkYXRlSGEKIGJvb2wgU2hhcmluZ1Jlc29sdmVyOjpjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVz
KGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFtZXMpIGNvbnN0CiB7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGNsYXNzTmFtZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYg
KG1fcnVsZVNldHMuZmVhdHVyZXMoKS5vdGhlckNsYXNzZXNJblJ1bGVzLmNvbnRhaW5zKGNsYXNz
TmFtZXNbaV0pKQorICAgICAgICBpZiAobV9ydWxlU2V0cy5mZWF0dXJlcygpLmNsYXNzUnVsZXMu
Y29udGFpbnMoY2xhc3NOYW1lc1tpXSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgaWYgKG1fcnVsZVNldHMuZmVhdHVyZXMoKS5hbmNlc3RvckNsYXNzUnVsZXMuY29udGFpbnMo
Y2xhc3NOYW1lc1tpXSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKG1f
cnVsZVNldHMuZmVhdHVyZXMoKS5zdWJqZWN0Q2xhc3NSdWxlcy5jb250YWlucyhjbGFzc05hbWVz
W2ldKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCiAgICAgfQogICAgIHJldHVybiBmYWxz
ZTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331283</attachid>
            <date>2018-01-13 08:24:06 -0800</date>
            <delta_ts>2018-01-30 08:13:20 -0800</delta_ts>
            <desc>patch</desc>
            <filename>invalidation-ruleset-4.patch</filename>
            <type>text/plain</type>
            <size>21780</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNjkzNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBACisyMDE4LTAxLTEzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBdm9pZCB0cmF2ZXJzaW5nIHRv
byBtdWNoIHdoZW4gZG9pbmcgY2xhc3MgY2hhbmdlIGludmFsaWRhdGlvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgxNjA0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2UgYXJlIG5vdyBjb2xsZWN0aW5n
IGluZm9ybWF0aW9uIGFib3V0IHdoaWNoIHBhcnQgb2YgdGhlIHRyZWUgYSBjaGFuZ2UgaW4gY2xh
c3MgY2FuIHBvdGVudGlhbGx5IGFmZmVjdC4KKyAgICAgICAgVXNlIHRoZSBpbmZvcm1hdGlvbiB0
byB0cmF2ZXJzZSBvbmx5IHRoZSByZXF1aXJlZCBlbGVtZW50cyBpbiBTdHlsZTo6SW52YWxpZGF0
b3IuCisKKyAgICAgICAgVGhlIHNhbWUgbWVjaGFuaXNtIGNhbiBiZSBsYXRlciB1c2VkIGZvciBh
dHRyaWJ1dGUgYW5kIGlkIGNoYW5nZSBpbnZhbGlkYXRpb24uCisKKyAgICAgICAgKiBjc3MvRG9j
dW1lbnRSdWxlU2V0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFJ1bGVTZXRzOjpj
b2xsZWN0RmVhdHVyZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRSdWxlU2V0
czo6Y2xhc3NJbnZhbGlkYXRpb25SdWxlU2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudFJ1bGVTZXRzOjpzdWJqZWN0Q2xhc3NSdWxlcyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudFJ1bGVTZXRzOjphbmNlc3RvckNsYXNzUnVsZXMgY29uc3Qp
OiBEZWxldGVkLgorCisgICAgICAgICAgICBSZW1vdmUgc2VwYXJhdGUgc3ViamVjdCBhbmQgYW5j
ZXN0b3IgaW52YWxpZGF0aW9uIFJ1bGVTZXRzLiBJbnN0ZWFkIGNvbGxlY3QgYWxsIGludmFsaWRh
dGlvbiBydWxlc2V0cworICAgICAgICAgICAgdG8gYSB2ZWN0b3IgYWxvbmcgd2l0aCB0aGVpciBN
YXRjaEVsZW1lbnRzLgorCisgICAgICAgICogY3NzL0RvY3VtZW50UnVsZVNldHMuaDoKKyAgICAg
ICAgKiBjc3MvUnVsZUZlYXR1cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UnVsZUZlYXR1cmVT
ZXQ6OmNvbXB1dGVOZXh0TWF0Y2hFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVGZWF0
dXJlU2V0Ojpjb21wdXRlU3ViU2VsZWN0b3JNYXRjaEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UnVsZUZlYXR1cmVTZXQ6OmNvbGxlY3RGZWF0dXJlcyk6CisKKyAgICAgICAgICAgIFNpbWls
YXJseSBjb2xsZWN0IGFsbCBjbGFzcyBpbnZhbGlkYXRpb24gUnVsZUZlYXR1cmVzIHRvIGEgZ2Vu
ZXJhbCBIYXNoTWFwIGFsb25nIHdpdGggdGhlIE1hdGNoRWxlbWVudC4KKworICAgICAgICAoV2Vi
Q29yZTo6UnVsZUZlYXR1cmVTZXQ6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlRmVhdHVy
ZVNldDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZUZlYXR1cmVTZXQ6OnNocmlua1Rv
Rml0KToKKyAgICAgICAgKiBjc3MvUnVsZUZlYXR1cmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJ1
bGVGZWF0dXJlOjpSdWxlRmVhdHVyZSk6CisgICAgICAgICogc3R5bGUvQ2xhc3NDaGFuZ2VJbnZh
bGlkYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkNsYXNzQ2hhbmdlSW52YWxp
ZGF0aW9uOjpjb21wdXRlSW52YWxpZGF0aW9uKToKKworICAgICAgICAgICAgRmluZCBvdXQgSW52
YWxpZGF0aW9uUnVsZVNldHMgdG8gdXNlLgorCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6Q2xh
c3NDaGFuZ2VJbnZhbGlkYXRpb246OmludmFsaWRhdGVTdHlsZVdpdGhSdWxlU2V0cyk6CisKKyAg
ICAgICAgICAgIFBhc3MgdGhlbSB0byBTdHlsZTo6SW52YWxpZGF0b3IuCisKKyAgICAgICAgKiBz
dHlsZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5oOgorICAgICAgICAqIHN0eWxlL1N0eWxlSW52
YWxpZGF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkludmFsaWRhdG9yOjppbnZh
bGlkYXRlU3R5bGVGb3JUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpJbnZhbGlkYXRv
cjo6aW52YWxpZGF0ZVN0eWxlRm9yRGVzY2VuZGFudHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6OkludmFsaWRhdG9yOjppbnZhbGlkYXRlU3R5bGVXaXRoTWF0Y2hFbGVtZW50KToKKworICAg
ICAgICAgICAgVHJhdmVyc2Ugb25seSB0aGUgcGFydCBvZiB0aGUgdHJlZSBuZWVkZWQgYnkgdGhl
IGdpdmVuIE1hdGNoRWxlbWVudC4KKworICAgICAgICAqIHN0eWxlL1N0eWxlSW52YWxpZGF0b3Iu
aDoKKyAgICAgICAgKiBzdHlsZS9TdHlsZVNoYXJpbmdSZXNvbHZlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6U2hhcmluZ1Jlc29sdmVyOjpjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVz
IGNvbnN0KToKKwogMjAxOC0wMS0xMyAgTWluc2hlbmcgTGl1ICA8bGFtYmRhQGxpdS5tcz4KIAog
ICAgICAgICBNYXRoTUwgTGVuZ3RocyBzaG91bGQgdGFrZSB6b29tIGxldmVsIGludG8gYWNjb3Vu
dApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmNwcAkocmV2aXNpb24g
MjI2ODgwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjcsMjYgKzE2NywzMSBAQCB2b2lkIERvY3VtZW50UnVsZVNldHM6OmNv
bGxlY3RGZWF0dXJlcygpCiAgICAgbV9zaWJsaW5nUnVsZVNldCA9IG1ha2VSdWxlU2V0KG1fZmVh
dHVyZXMuc2libGluZ1J1bGVzKTsKICAgICBtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldCA9IG1h
a2VSdWxlU2V0KG1fZmVhdHVyZXMudW5jb21tb25BdHRyaWJ1dGVSdWxlcyk7CiAKLSAgICBtX3N1
YmplY3RDbGFzc1J1bGVTZXRzLmNsZWFyKCk7Ci0gICAgbV9hbmNlc3RvckNsYXNzUnVsZVNldHMu
Y2xlYXIoKTsKKyAgICBtX2NsYXNzSW52YWxpZGF0aW9uUnVsZVNldHMuY2xlYXIoKTsKICAgICBt
X2FuY2VzdG9yQXR0cmlidXRlUnVsZVNldHNGb3JIVE1MLmNsZWFyKCk7CiAKICAgICBtX2ZlYXR1
cmVzLnNocmlua1RvRml0KCk7CiB9CiAKLVJ1bGVTZXQqIERvY3VtZW50UnVsZVNldHM6OnN1Ympl
Y3RDbGFzc1J1bGVzKGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lKSBjb25zdAorY29uc3Qg
VmVjdG9yPEludmFsaWRhdGlvblJ1bGVTZXQ+KiBEb2N1bWVudFJ1bGVTZXRzOjpjbGFzc0ludmFs
aWRhdGlvblJ1bGVTZXRzKGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lKSBjb25zdAogewot
ICAgIHJldHVybiBtX3N1YmplY3RDbGFzc1J1bGVTZXRzLmVuc3VyZShjbGFzc05hbWUsIFsmXSB7
Ci0gICAgICAgIGF1dG8qIHJ1bGVzID0gbV9mZWF0dXJlcy5zdWJqZWN0Q2xhc3NSdWxlcy5nZXQo
Y2xhc3NOYW1lKTsKLSAgICAgICAgcmV0dXJuIHJ1bGVzID8gbWFrZVJ1bGVTZXQoKnJ1bGVzKSA6
IG51bGxwdHI7Ci0gICAgfSkuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwotfQotCi1SdWxlU2V0KiBE
b2N1bWVudFJ1bGVTZXRzOjphbmNlc3RvckNsYXNzUnVsZXMoY29uc3QgQXRvbWljU3RyaW5nJiBj
bGFzc05hbWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYW5jZXN0b3JDbGFzc1J1bGVTZXRzLmVu
c3VyZShjbGFzc05hbWUsIFsmXSB7Ci0gICAgICAgIGF1dG8qIHJ1bGVzID0gbV9mZWF0dXJlcy5h
bmNlc3RvckNsYXNzUnVsZXMuZ2V0KGNsYXNzTmFtZSk7Ci0gICAgICAgIHJldHVybiBydWxlcyA/
IG1ha2VSdWxlU2V0KCpydWxlcykgOiBudWxscHRyOworICAgIHJldHVybiBtX2NsYXNzSW52YWxp
ZGF0aW9uUnVsZVNldHMuZW5zdXJlKGNsYXNzTmFtZSwgWyZdICgpIC0+IHN0ZDo6dW5pcXVlX3B0
cjxWZWN0b3I8SW52YWxpZGF0aW9uUnVsZVNldD4+IHsKKyAgICAgICAgYXV0byogZmVhdHVyZXMg
PSBtX2ZlYXR1cmVzLmNsYXNzUnVsZXMuZ2V0KGNsYXNzTmFtZSk7CisgICAgICAgIGlmICghZmVh
dHVyZXMpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgc3RkOjphcnJheTxz
dGQ6OnVuaXF1ZV9wdHI8UnVsZVNldD4sIG1hdGNoRWxlbWVudENvdW50PiBtYXRjaEVsZW1lbnRB
cnJheTsKKyAgICAgICAgZm9yIChhdXRvJiBmZWF0dXJlIDogKmZlYXR1cmVzKSB7CisgICAgICAg
ICAgICBhdXRvJiBydWxlU2V0ID0gbWF0Y2hFbGVtZW50QXJyYXlbc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KCpmZWF0dXJlLm1hdGNoRWxlbWVudCldOworICAgICAgICAgICAgaWYgKCFydWxlU2V0KQor
ICAgICAgICAgICAgICAgIHJ1bGVTZXQgPSBzdGQ6Om1ha2VfdW5pcXVlPFJ1bGVTZXQ+KCk7Cisg
ICAgICAgICAgICBydWxlU2V0LT5hZGRSdWxlKGZlYXR1cmUucnVsZSwgZmVhdHVyZS5zZWxlY3Rv
ckluZGV4KTsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGludmFsaWRhdGlvblJ1bGVTZXRzID0g
c3RkOjptYWtlX3VuaXF1ZTxWZWN0b3I8SW52YWxpZGF0aW9uUnVsZVNldD4+KCk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXRjaEVsZW1lbnRBcnJheS5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgaWYgKG1hdGNoRWxlbWVudEFycmF5W2ldKQorICAgICAgICAgICAgICAg
IGludmFsaWRhdGlvblJ1bGVTZXRzLT5hcHBlbmQoeyBzdGF0aWNfY2FzdDxNYXRjaEVsZW1lbnQ+
KGkpLCBXVEZNb3ZlKG1hdGNoRWxlbWVudEFycmF5W2ldKSB9KTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gaW52YWxpZGF0aW9uUnVsZVNldHM7CiAgICAgfSkuaXRlcmF0b3ItPnZhbHVlLmdl
dCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxlU2V0cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmgJKHJldmlz
aW9uIDIyNjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDEzIEBAIGNsYXNzIEV4dGVuc2lvblN0eWxlU2hlZXRz
OwogY2xhc3MgSW5zcGVjdG9yQ1NTT01XcmFwcGVyczsKIGNsYXNzIE1lZGlhUXVlcnlFdmFsdWF0
b3I7CiAKK3N0cnVjdCBJbnZhbGlkYXRpb25SdWxlU2V0IHsKKyAgICBNYXRjaEVsZW1lbnQgbWF0
Y2hFbGVtZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxSdWxlU2V0PiBydWxlU2V0OworCisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Cit9OworCiBjbGFzcyBEb2N1bWVudFJ1bGVTZXRzIHsK
IHB1YmxpYzoKICAgICBEb2N1bWVudFJ1bGVTZXRzKFN0eWxlUmVzb2x2ZXImKTsKQEAgLTUwLDgg
KzU3LDggQEAgcHVibGljOgogICAgIGNvbnN0IFJ1bGVGZWF0dXJlU2V0JiBmZWF0dXJlcygpIGNv
bnN0OwogICAgIFJ1bGVTZXQqIHNpYmxpbmcoKSBjb25zdCB7IHJldHVybiBtX3NpYmxpbmdSdWxl
U2V0LmdldCgpOyB9CiAgICAgUnVsZVNldCogdW5jb21tb25BdHRyaWJ1dGUoKSBjb25zdCB7IHJl
dHVybiBtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldC5nZXQoKTsgfQotICAgIFJ1bGVTZXQqIHN1
YmplY3RDbGFzc1J1bGVzKGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lKSBjb25zdDsKLSAg
ICBSdWxlU2V0KiBhbmNlc3RvckNsYXNzUnVsZXMoY29uc3QgQXRvbWljU3RyaW5nJiBjbGFzc05h
bWUpIGNvbnN0OworCisgICAgY29uc3QgVmVjdG9yPEludmFsaWRhdGlvblJ1bGVTZXQ+KiBjbGFz
c0ludmFsaWRhdGlvblJ1bGVTZXRzKGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lKSBjb25z
dDsKIAogICAgIHN0cnVjdCBBdHRyaWJ1dGVSdWxlcyB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwpAQCAtOTEsOCArOTgsNyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgdW5zaWdu
ZWQgbV91c2VyQWdlbnRNZWRpYVF1ZXJ5UnVsZUNvdW50T25VcGRhdGUgeyAwIH07CiAgICAgbXV0
YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8UnVsZVNldD4gbV9zaWJsaW5nUnVsZVNldDsKICAgICBtdXRh
YmxlIHN0ZDo6dW5pcXVlX3B0cjxSdWxlU2V0PiBtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldDsK
LSAgICBtdXRhYmxlIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8UnVsZVNl
dD4+IG1fc3ViamVjdENsYXNzUnVsZVNldHM7Ci0gICAgbXV0YWJsZSBIYXNoTWFwPEF0b21pY1N0
cmluZywgc3RkOjp1bmlxdWVfcHRyPFJ1bGVTZXQ+PiBtX2FuY2VzdG9yQ2xhc3NSdWxlU2V0czsK
KyAgICBtdXRhYmxlIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9y
PEludmFsaWRhdGlvblJ1bGVTZXQ+Pj4gbV9jbGFzc0ludmFsaWRhdGlvblJ1bGVTZXRzOwogICAg
IG11dGFibGUgSGFzaE1hcDxBdG9taWNTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxBdHRyaWJ1dGVS
dWxlcz4+IG1fYW5jZXN0b3JBdHRyaWJ1dGVSdWxlU2V0c0ZvckhUTUw7CiB9OwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvUnVsZUZlYXR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9SdWxlRmVhdHVyZS5jcHAJKHJldmlzaW9uIDIyNjg4MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9SdWxlRmVhdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SdWxlRmVhdHVyZVNldDo6TWF0Y2hFbGVtZW50
IFJ1bGVGZWF0dXJlU2V0Ojpjb21wdXRlTmV4dE1hdGNoRWxlbWVudChNYXRjaEVsZW1lbnQgbWF0
Y2hFbGVtZW50LCBDU1NTZWxlY3Rvcjo6UmVsYXRpb25UeXBlIHJlbGF0aW9uKQorTWF0Y2hFbGVt
ZW50IFJ1bGVGZWF0dXJlU2V0Ojpjb21wdXRlTmV4dE1hdGNoRWxlbWVudChNYXRjaEVsZW1lbnQg
bWF0Y2hFbGVtZW50LCBDU1NTZWxlY3Rvcjo6UmVsYXRpb25UeXBlIHJlbGF0aW9uKQogewogICAg
IGlmIChtYXRjaEVsZW1lbnQgPT0gTWF0Y2hFbGVtZW50OjpTdWJqZWN0IHx8IG1hdGNoRWxlbWVu
dCA9PSBNYXRjaEVsZW1lbnQ6OkluZGlyZWN0U2libGluZyB8fCBtYXRjaEVsZW1lbnQgPT0gTWF0
Y2hFbGVtZW50OjpEaXJlY3RTaWJsaW5nKSB7CiAgICAgICAgIHN3aXRjaCAocmVsYXRpb24pIHsK
QEAgLTY5LDcgKzY5LDcgQEAgUnVsZUZlYXR1cmVTZXQ6Ok1hdGNoRWxlbWVudCBSdWxlRmVhdHVy
ZQogICAgIHJldHVybiBtYXRjaEVsZW1lbnQ7CiB9OwogCi1SdWxlRmVhdHVyZVNldDo6TWF0Y2hF
bGVtZW50IFJ1bGVGZWF0dXJlU2V0Ojpjb21wdXRlU3ViU2VsZWN0b3JNYXRjaEVsZW1lbnQoTWF0
Y2hFbGVtZW50IG1hdGNoRWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yKQorTWF0
Y2hFbGVtZW50IFJ1bGVGZWF0dXJlU2V0Ojpjb21wdXRlU3ViU2VsZWN0b3JNYXRjaEVsZW1lbnQo
TWF0Y2hFbGVtZW50IG1hdGNoRWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yKQog
ewogICAgIEFTU0VSVChzZWxlY3Rvci5zZWxlY3Rvckxpc3QoKSk7CiAKQEAgLTE1NywyOCArMTU3
LDEyIEBAIHZvaWQgUnVsZUZlYXR1cmVTZXQ6OmNvbGxlY3RGZWF0dXJlcyhjb24KICAgICAgICAg
c2libGluZ1J1bGVzLmFwcGVuZChSdWxlRmVhdHVyZShydWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRh
LnNlbGVjdG9ySW5kZXgoKSkpOwogICAgIGlmIChydWxlRGF0YS5jb250YWluc1VuY29tbW9uQXR0
cmlidXRlU2VsZWN0b3IoKSkKICAgICAgICAgdW5jb21tb25BdHRyaWJ1dGVSdWxlcy5hcHBlbmQo
UnVsZUZlYXR1cmUocnVsZURhdGEucnVsZSgpLCBydWxlRGF0YS5zZWxlY3RvckluZGV4KCkpKTsK
LSAgICBmb3IgKGF1dG8mIGNsYXNzTmFtZUFuZE1hdGNoRWxlbWVudCA6IHNlbGVjdG9yRmVhdHVy
ZXMuY2xhc3NlcykgewotICAgICAgICBhdXRvJiBjbGFzc05hbWUgPSBjbGFzc05hbWVBbmRNYXRj
aEVsZW1lbnQuZmlyc3Q7Ci0gICAgICAgIHN3aXRjaCAoY2xhc3NOYW1lQW5kTWF0Y2hFbGVtZW50
LnNlY29uZCkgewotICAgICAgICBjYXNlIE1hdGNoRWxlbWVudDo6U3ViamVjdDoKLSAgICAgICAg
ICAgIHN1YmplY3RDbGFzc1J1bGVzLmVuc3VyZShjbGFzc05hbWUsIFtdIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxWZWN0b3I8UnVsZUZlYXR1cmU+PigpOwotICAg
ICAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlLT5hcHBlbmQoUnVsZUZlYXR1cmUocnVsZURhdGEu
cnVsZSgpLCBydWxlRGF0YS5zZWxlY3RvckluZGV4KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIE1hdGNoRWxlbWVudDo6UGFyZW50OgotICAgICAgICBjYXNlIE1hdGNoRWxl
bWVudDo6QW5jZXN0b3I6Ci0gICAgICAgICAgICBhbmNlc3RvckNsYXNzUnVsZXMuZW5zdXJlKGNs
YXNzTmFtZSwgW10gewotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFZl
Y3RvcjxSdWxlRmVhdHVyZT4+KCk7Ci0gICAgICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWUtPmFw
cGVuZChSdWxlRmVhdHVyZShydWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVjdG9ySW5kZXgo
KSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTWF0Y2hFbGVtZW50OjpEaXJl
Y3RTaWJsaW5nOgotICAgICAgICBjYXNlIE1hdGNoRWxlbWVudDo6SW5kaXJlY3RTaWJsaW5nOgot
ICAgICAgICBjYXNlIE1hdGNoRWxlbWVudDo6UGFyZW50U2libGluZzoKLSAgICAgICAgY2FzZSBN
YXRjaEVsZW1lbnQ6OkFuY2VzdG9yU2libGluZzoKLSAgICAgICAgY2FzZSBNYXRjaEVsZW1lbnQ6
Okhvc3Q6Ci0gICAgICAgICAgICBvdGhlckNsYXNzZXNJblJ1bGVzLmFkZChjbGFzc05hbWUpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH07CisgICAgZm9yIChhdXRvJiBuYW1lQW5kTWF0
Y2ggOiBzZWxlY3RvckZlYXR1cmVzLmNsYXNzZXMpIHsKKyAgICAgICAgY2xhc3NSdWxlcy5lbnN1
cmUobmFtZUFuZE1hdGNoLmZpcnN0LCBbXSB7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxWZWN0b3I8UnVsZUZlYXR1cmU+PigpOworICAgICAgICB9KS5pdGVyYXRvci0+dmFs
dWUtPmFwcGVuZChSdWxlRmVhdHVyZShydWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVjdG9y
SW5kZXgoKSwgbmFtZUFuZE1hdGNoLnNlY29uZCkpOworICAgICAgICBpZiAobmFtZUFuZE1hdGNo
LnNlY29uZCA9PSBNYXRjaEVsZW1lbnQ6Okhvc3QpCisgICAgICAgICAgICBjbGFzc2VzQWZmZWN0
aW5nSG9zdC5hZGQobmFtZUFuZE1hdGNoLmZpcnN0KTsKICAgICB9CiAgICAgZm9yIChhdXRvKiBz
ZWxlY3RvciA6IHNlbGVjdG9yRmVhdHVyZXMuYXR0cmlidXRlU2VsZWN0b3JzTWF0Y2hpbmdBbmNl
c3RvcnMpIHsKICAgICAgICAgLy8gSGFzaGluZyBieSBhdHRyaWJ1dGVDYW5vbmljYWxMb2NhbE5h
bWUgbWFrZXMgdGhpcyBIVE1MIHNwZWNpZmljLgpAQCAtMTk2LDIxICsxODAsMTYgQEAgdm9pZCBS
dWxlRmVhdHVyZVNldDo6YWRkKGNvbnN0IFJ1bGVGZWF0dQogewogICAgIGlkc0luUnVsZXMuYWRk
KG90aGVyLmlkc0luUnVsZXMuYmVnaW4oKSwgb3RoZXIuaWRzSW5SdWxlcy5lbmQoKSk7CiAgICAg
aWRzTWF0Y2hpbmdBbmNlc3RvcnNJblJ1bGVzLmFkZChvdGhlci5pZHNNYXRjaGluZ0FuY2VzdG9y
c0luUnVsZXMuYmVnaW4oKSwgb3RoZXIuaWRzTWF0Y2hpbmdBbmNlc3RvcnNJblJ1bGVzLmVuZCgp
KTsKLSAgICBvdGhlckNsYXNzZXNJblJ1bGVzLmFkZChvdGhlci5vdGhlckNsYXNzZXNJblJ1bGVz
LmJlZ2luKCksIG90aGVyLm90aGVyQ2xhc3Nlc0luUnVsZXMuZW5kKCkpOwogICAgIGF0dHJpYnV0
ZUNhbm9uaWNhbExvY2FsTmFtZXNJblJ1bGVzLmFkZChvdGhlci5hdHRyaWJ1dGVDYW5vbmljYWxM
b2NhbE5hbWVzSW5SdWxlcy5iZWdpbigpLCBvdGhlci5hdHRyaWJ1dGVDYW5vbmljYWxMb2NhbE5h
bWVzSW5SdWxlcy5lbmQoKSk7CiAgICAgYXR0cmlidXRlTG9jYWxOYW1lc0luUnVsZXMuYWRkKG90
aGVyLmF0dHJpYnV0ZUxvY2FsTmFtZXNJblJ1bGVzLmJlZ2luKCksIG90aGVyLmF0dHJpYnV0ZUxv
Y2FsTmFtZXNJblJ1bGVzLmVuZCgpKTsKICAgICBzaWJsaW5nUnVsZXMuYXBwZW5kVmVjdG9yKG90
aGVyLnNpYmxpbmdSdWxlcyk7CiAgICAgdW5jb21tb25BdHRyaWJ1dGVSdWxlcy5hcHBlbmRWZWN0
b3Iob3RoZXIudW5jb21tb25BdHRyaWJ1dGVSdWxlcyk7Ci0gICAgZm9yIChhdXRvJiBrZXlWYWx1
ZVBhaXIgOiBvdGhlci5hbmNlc3RvckNsYXNzUnVsZXMpIHsKLSAgICAgICAgYW5jZXN0b3JDbGFz
c1J1bGVzLmVuc3VyZShrZXlWYWx1ZVBhaXIua2V5LCBbXSB7Ci0gICAgICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3VuaXF1ZTxWZWN0b3I8UnVsZUZlYXR1cmU+PigpOwotICAgICAgICB9KS5pdGVy
YXRvci0+dmFsdWUtPmFwcGVuZFZlY3Rvcigqa2V5VmFsdWVQYWlyLnZhbHVlKTsKLSAgICB9Ci0g
ICAgZm9yIChhdXRvJiBrZXlWYWx1ZVBhaXIgOiBvdGhlci5zdWJqZWN0Q2xhc3NSdWxlcykgewot
ICAgICAgICBzdWJqZWN0Q2xhc3NSdWxlcy5lbnN1cmUoa2V5VmFsdWVQYWlyLmtleSwgW10gewor
ICAgIGZvciAoYXV0byYga2V5VmFsdWVQYWlyIDogb3RoZXIuY2xhc3NSdWxlcykgeworICAgICAg
ICBjbGFzc1J1bGVzLmVuc3VyZShrZXlWYWx1ZVBhaXIua2V5LCBbXSB7CiAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxWZWN0b3I8UnVsZUZlYXR1cmU+PigpOwogICAgICAgICB9
KS5pdGVyYXRvci0+dmFsdWUtPmFwcGVuZFZlY3Rvcigqa2V5VmFsdWVQYWlyLnZhbHVlKTsKICAg
ICB9CisgICAgY2xhc3Nlc0FmZmVjdGluZ0hvc3QuYWRkKG90aGVyLmNsYXNzZXNBZmZlY3RpbmdI
b3N0LmJlZ2luKCksIG90aGVyLmNsYXNzZXNBZmZlY3RpbmdIb3N0LmVuZCgpKTsKIAogICAgIGZv
ciAoYXV0byYga2V5VmFsdWVQYWlyIDogb3RoZXIuYW5jZXN0b3JBdHRyaWJ1dGVSdWxlc0ZvckhU
TUwpIHsKICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBhbmNlc3RvckF0dHJpYnV0ZVJ1bGVzRm9y
SFRNTC5lbnN1cmUoa2V5VmFsdWVQYWlyLmtleSwgW10gewpAQCAtMjI5LDEzICsyMDgsMTIgQEAg
dm9pZCBSdWxlRmVhdHVyZVNldDo6Y2xlYXIoKQogewogICAgIGlkc0luUnVsZXMuY2xlYXIoKTsK
ICAgICBpZHNNYXRjaGluZ0FuY2VzdG9yc0luUnVsZXMuY2xlYXIoKTsKLSAgICBvdGhlckNsYXNz
ZXNJblJ1bGVzLmNsZWFyKCk7CiAgICAgYXR0cmlidXRlQ2Fub25pY2FsTG9jYWxOYW1lc0luUnVs
ZXMuY2xlYXIoKTsKICAgICBhdHRyaWJ1dGVMb2NhbE5hbWVzSW5SdWxlcy5jbGVhcigpOwogICAg
IHNpYmxpbmdSdWxlcy5jbGVhcigpOwogICAgIHVuY29tbW9uQXR0cmlidXRlUnVsZXMuY2xlYXIo
KTsKLSAgICBhbmNlc3RvckNsYXNzUnVsZXMuY2xlYXIoKTsKLSAgICBzdWJqZWN0Q2xhc3NSdWxl
cy5jbGVhcigpOworICAgIGNsYXNzUnVsZXMuY2xlYXIoKTsKKyAgICBjbGFzc2VzQWZmZWN0aW5n
SG9zdC5jbGVhcigpOwogICAgIGFuY2VzdG9yQXR0cmlidXRlUnVsZXNGb3JIVE1MLmNsZWFyKCk7
CiAgICAgdXNlc0ZpcnN0TGluZVJ1bGVzID0gZmFsc2U7CiAgICAgdXNlc0ZpcnN0TGV0dGVyUnVs
ZXMgPSBmYWxzZTsKQEAgLTI0NSw5ICsyMjMsNyBAQCB2b2lkIFJ1bGVGZWF0dXJlU2V0OjpzaHJp
bmtUb0ZpdCgpCiB7CiAgICAgc2libGluZ1J1bGVzLnNocmlua1RvRml0KCk7CiAgICAgdW5jb21t
b25BdHRyaWJ1dGVSdWxlcy5zaHJpbmtUb0ZpdCgpOwotICAgIGZvciAoYXV0byYgcnVsZXMgOiBh
bmNlc3RvckNsYXNzUnVsZXMudmFsdWVzKCkpCi0gICAgICAgIHJ1bGVzLT5zaHJpbmtUb0ZpdCgp
OwotICAgIGZvciAoYXV0byYgcnVsZXMgOiBzdWJqZWN0Q2xhc3NSdWxlcy52YWx1ZXMoKSkKKyAg
ICBmb3IgKGF1dG8mIHJ1bGVzIDogY2xhc3NSdWxlcy52YWx1ZXMoKSkKICAgICAgICAgcnVsZXMt
PnNocmlua1RvRml0KCk7CiAgICAgZm9yIChhdXRvJiBydWxlcyA6IGFuY2VzdG9yQXR0cmlidXRl
UnVsZXNGb3JIVE1MLnZhbHVlcygpKQogICAgICAgICBydWxlcy0+ZmVhdHVyZXMuc2hyaW5rVG9G
aXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlRmVhdHVyZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlRmVhdHVyZS5oCShyZXZpc2lvbiAyMjY4ODApCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvUnVsZUZlYXR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMs
MTQgKzMzLDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFJ1bGVEYXRhOwogY2xhc3Mg
U3R5bGVSdWxlOwogCitlbnVtIGNsYXNzIE1hdGNoRWxlbWVudCB7IFN1YmplY3QsIFBhcmVudCwg
QW5jZXN0b3IsIERpcmVjdFNpYmxpbmcsIEluZGlyZWN0U2libGluZywgUGFyZW50U2libGluZywg
QW5jZXN0b3JTaWJsaW5nLCBIb3N0IH07Citjb25zdGV4cHIgdW5zaWduZWQgbWF0Y2hFbGVtZW50
Q291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTWF0Y2hFbGVtZW50OjpIb3N0KSArIDE7CisK
IHN0cnVjdCBSdWxlRmVhdHVyZSB7Ci0gICAgUnVsZUZlYXR1cmUoU3R5bGVSdWxlKiBydWxlLCB1
bnNpZ25lZCBzZWxlY3RvckluZGV4KQorICAgIFJ1bGVGZWF0dXJlKFN0eWxlUnVsZSogcnVsZSwg
dW5zaWduZWQgc2VsZWN0b3JJbmRleCwgc3RkOjpvcHRpb25hbDxNYXRjaEVsZW1lbnQ+IG1hdGNo
RWxlbWVudCA9IHN0ZDo6bnVsbG9wdCkKICAgICAgICAgOiBydWxlKHJ1bGUpCiAgICAgICAgICwg
c2VsZWN0b3JJbmRleChzZWxlY3RvckluZGV4KQorICAgICAgICAsIG1hdGNoRWxlbWVudChtYXRj
aEVsZW1lbnQpCiAgICAgewogICAgIH0KICAgICBTdHlsZVJ1bGUqIHJ1bGU7CiAgICAgdW5zaWdu
ZWQgc2VsZWN0b3JJbmRleDsKKyAgICBzdGQ6Om9wdGlvbmFsPE1hdGNoRWxlbWVudD4gbWF0Y2hF
bGVtZW50OwogfTsKIAogc3RydWN0IFJ1bGVGZWF0dXJlU2V0IHsKQEAgLTU1LDkgKzYwLDkgQEAg
c3RydWN0IFJ1bGVGZWF0dXJlU2V0IHsKICAgICBIYXNoU2V0PEF0b21pY1N0cmluZz4gYXR0cmli
dXRlTG9jYWxOYW1lc0luUnVsZXM7CiAgICAgVmVjdG9yPFJ1bGVGZWF0dXJlPiBzaWJsaW5nUnVs
ZXM7CiAgICAgVmVjdG9yPFJ1bGVGZWF0dXJlPiB1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzOwotICAg
IEhhc2hNYXA8QXRvbWljU3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFJ1bGVGZWF0dXJl
Pj4+IGFuY2VzdG9yQ2xhc3NSdWxlczsKLSAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgc3RkOjp1
bmlxdWVfcHRyPFZlY3RvcjxSdWxlRmVhdHVyZT4+PiBzdWJqZWN0Q2xhc3NSdWxlczsKLSAgICBI
YXNoU2V0PEF0b21pY1N0cmluZz4gb3RoZXJDbGFzc2VzSW5SdWxlczsKKyAgICAKKyAgICBIYXNo
TWFwPEF0b21pY1N0cmluZywgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxSdWxlRmVhdHVyZT4+PiBj
bGFzc1J1bGVzOworICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiBjbGFzc2VzQWZmZWN0aW5nSG9z
dDsKIAogICAgIHN0cnVjdCBBdHRyaWJ1dGVSdWxlcyB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwpAQCAtNzEsOCArNzYsNiBAQCBzdHJ1Y3QgUnVsZUZlYXR1cmVTZXQgewogICAg
IGJvb2wgdXNlc0ZpcnN0TGV0dGVyUnVsZXMgeyBmYWxzZSB9OwogCiBwcml2YXRlOgotICAgIGVu
dW0gY2xhc3MgTWF0Y2hFbGVtZW50IHsgU3ViamVjdCwgUGFyZW50LCBBbmNlc3RvciwgRGlyZWN0
U2libGluZywgSW5kaXJlY3RTaWJsaW5nLCBQYXJlbnRTaWJsaW5nLCBBbmNlc3RvclNpYmxpbmcs
IEhvc3QgfTsKLQogICAgIHN0YXRpYyBNYXRjaEVsZW1lbnQgY29tcHV0ZU5leHRNYXRjaEVsZW1l
bnQoTWF0Y2hFbGVtZW50LCBDU1NTZWxlY3Rvcjo6UmVsYXRpb25UeXBlKTsKICAgICBzdGF0aWMg
TWF0Y2hFbGVtZW50IGNvbXB1dGVTdWJTZWxlY3Rvck1hdGNoRWxlbWVudChNYXRjaEVsZW1lbnQs
IGNvbnN0IENTU1NlbGVjdG9yJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNz
Q2hhbmdlSW52YWxpZGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5jcHAJKHJldmlzaW9uIDIyNjg4MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODksMjYgKzg5LDEzIEBAIHZvaWQgQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb246OmNvbXB1
dGVJbnYKIAogICAgIGJvb2wgc2hvdWxkSW52YWxpZGF0ZUN1cnJlbnQgPSBmYWxzZTsKICAgICBi
b29sIG1heUFmZmVjdFN0eWxlSW5TaGFkb3dUcmVlID0gZmFsc2U7Ci0gICAgQ2xhc3NDaGFuZ2VW
ZWN0b3IgY2xhc3Nlc0FmZmVjdGluZ0Rlc2NlbmRhbnQ7Ci0gICAgQ2xhc3NDaGFuZ2VWZWN0b3Ig
Y2xhc3Nlc0FmZmVjdGluZ0N1cnJlbnQ7CiAKICAgICB0cmF2ZXJzZVJ1bGVGZWF0dXJlcyhtX2Vs
ZW1lbnQsIFsmXSAoY29uc3QgUnVsZUZlYXR1cmVTZXQmIGZlYXR1cmVzLCBib29sIG1heUFmZmVj
dFNoYWRvd1RyZWUpIHsKICAgICAgICAgZm9yIChhdXRvKiBjaGFuZ2VkQ2xhc3MgOiBjaGFuZ2Vk
Q2xhc3NlcykgewotICAgICAgICAgICAgYm9vbCBtYXlBZmZlY3RTdHlsZSA9IGZhbHNlOwotICAg
ICAgICAgICAgaWYgKGZlYXR1cmVzLm90aGVyQ2xhc3Nlc0luUnVsZXMuY29udGFpbnMoY2hhbmdl
ZENsYXNzKSkgewotICAgICAgICAgICAgICAgIHNob3VsZEludmFsaWRhdGVDdXJyZW50ID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBtYXlBZmZlY3RTdHlsZSA9IHRydWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoZmVhdHVyZXMuYW5jZXN0b3JDbGFzc1J1bGVzLmNvbnRhaW5zKGNo
YW5nZWRDbGFzcykpIHsKLSAgICAgICAgICAgICAgICBjbGFzc2VzQWZmZWN0aW5nRGVzY2VuZGFu
dC5hcHBlbmQoY2hhbmdlZENsYXNzKTsKLSAgICAgICAgICAgICAgICBtYXlBZmZlY3RTdHlsZSA9
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZmVhdHVyZXMuc3ViamVjdENs
YXNzUnVsZXMuY29udGFpbnMoY2hhbmdlZENsYXNzKSkgewotICAgICAgICAgICAgICAgIGNsYXNz
ZXNBZmZlY3RpbmdDdXJyZW50LmFwcGVuZChjaGFuZ2VkQ2xhc3MpOwotICAgICAgICAgICAgICAg
IG1heUFmZmVjdFN0eWxlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICht
YXlBZmZlY3RTdHlsZSAmJiBtYXlBZmZlY3RTaGFkb3dUcmVlKQorICAgICAgICAgICAgaWYgKG1h
eUFmZmVjdFNoYWRvd1RyZWUgJiYgZmVhdHVyZXMuY2xhc3NSdWxlcy5jb250YWlucyhjaGFuZ2Vk
Q2xhc3MpKQogICAgICAgICAgICAgICAgIG1heUFmZmVjdFN0eWxlSW5TaGFkb3dUcmVlID0gdHJ1
ZTsKKyAgICAgICAgICAgIGlmIChmZWF0dXJlcy5jbGFzc2VzQWZmZWN0aW5nSG9zdC5jb250YWlu
cyhjaGFuZ2VkQ2xhc3MpKQorICAgICAgICAgICAgICAgIHNob3VsZEludmFsaWRhdGVDdXJyZW50
ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0pOwogCkBAIC0xMTgsMzEgKzEwNSwyNCBAQCB2b2lk
IENsYXNzQ2hhbmdlSW52YWxpZGF0aW9uOjpjb21wdXRlSW52CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKKyAgICBpZiAoc2hvdWxkSW52YWxpZGF0ZUN1cnJlbnQpCisgICAgICAgIG1fZWxlbWVu
dC5pbnZhbGlkYXRlU3R5bGUoKTsKKwogICAgIGF1dG8mIHJ1bGVTZXRzID0gbV9lbGVtZW50LnN0
eWxlUmVzb2x2ZXIoKS5ydWxlU2V0cygpOwogCi0gICAgaWYgKGNoaWxkcmVuT2ZUeXBlPEVsZW1l
bnQ+KG1fZWxlbWVudCkuZmlyc3QoKSkgewotICAgICAgICBmb3IgKGF1dG8qIGNoYW5nZWRDbGFz
cyA6IGNsYXNzZXNBZmZlY3RpbmdEZXNjZW5kYW50KSB7Ci0gICAgICAgICAgICBpZiAoYXV0byog
cnVsZXMgPSBydWxlU2V0cy5hbmNlc3RvckNsYXNzUnVsZXMoY2hhbmdlZENsYXNzKSkKLSAgICAg
ICAgICAgICAgICBtX2ludmFsaWRhdGlvblJ1bGVTZXRzLmFwcGVuZChydWxlcyk7CisgICAgZm9y
IChhdXRvKiBjaGFuZ2VkQ2xhc3MgOiBjaGFuZ2VkQ2xhc3NlcykgeworICAgICAgICBpZiAoYXV0
byogaW52YWxpZGF0aW9uUnVsZVNldHMgPSBydWxlU2V0cy5jbGFzc0ludmFsaWRhdGlvblJ1bGVT
ZXRzKGNoYW5nZWRDbGFzcykpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgaW52YWxpZGF0aW9u
UnVsZVNldCA6ICppbnZhbGlkYXRpb25SdWxlU2V0cykKKyAgICAgICAgICAgICAgICBtX2ludmFs
aWRhdGlvblJ1bGVTZXRzLmFwcGVuZCgmaW52YWxpZGF0aW9uUnVsZVNldCk7CiAgICAgICAgIH0K
ICAgICB9Ci0KLSAgICBpZiAoc2hvdWxkSW52YWxpZGF0ZUN1cnJlbnQpIHsKLSAgICAgICAgbV9l
bGVtZW50LmludmFsaWRhdGVTdHlsZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Zm9yIChhdXRvKiBjaGFuZ2VkQ2xhc3MgOiBjbGFzc2VzQWZmZWN0aW5nQ3VycmVudCkgewotICAg
ICAgICBpZiAoYXV0byogcnVsZXMgPSBydWxlU2V0cy5zdWJqZWN0Q2xhc3NSdWxlcyhjaGFuZ2Vk
Q2xhc3MpKQotICAgICAgICAgICAgbV9pbnZhbGlkYXRpb25SdWxlU2V0cy5hcHBlbmQocnVsZXMp
OwotICAgIH0KIH0KIAogdm9pZCBDbGFzc0NoYW5nZUludmFsaWRhdGlvbjo6aW52YWxpZGF0ZVN0
eWxlV2l0aFJ1bGVTZXRzKCkKIHsKLSAgICBmb3IgKGF1dG8qIHJ1bGVzIDogbV9pbnZhbGlkYXRp
b25SdWxlU2V0cykgewotICAgICAgICBJbnZhbGlkYXRvciBpbnZhbGlkYXRvcigqcnVsZXMpOwot
ICAgICAgICBpbnZhbGlkYXRvci5pbnZhbGlkYXRlU3R5bGUobV9lbGVtZW50KTsKKyAgICBmb3Ig
KGF1dG8qIGludmFsaWRhdGlvblJ1bGVTZXQgOiBtX2ludmFsaWRhdGlvblJ1bGVTZXRzKSB7Cisg
ICAgICAgIEludmFsaWRhdG9yIGludmFsaWRhdG9yKCppbnZhbGlkYXRpb25SdWxlU2V0LT5ydWxl
U2V0KTsKKyAgICAgICAgaW52YWxpZGF0b3IuaW52YWxpZGF0ZVN0eWxlV2l0aE1hdGNoRWxlbWVu
dChtX2VsZW1lbnQsIGludmFsaWRhdGlvblJ1bGVTZXQtPm1hdGNoRWxlbWVudCk7CiAgICAgfQog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hhbmdlSW52YWxpZGF0
aW9uLmgJKHJldmlzaW9uIDIyNjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hh
bmdlSW52YWxpZGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgRG9jdW1lbnRSdWxlU2V0czsKIGNsYXNzIFJ1bGVTZXQ7CiBj
bGFzcyBTcGFjZVNwbGl0U3RyaW5nOworc3RydWN0IEludmFsaWRhdGlvblJ1bGVTZXQ7CiAKIG5h
bWVzcGFjZSBTdHlsZSB7CiAKQEAgLTQ4LDcgKzQ5LDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBi
b29sIG1faXNFbmFibGVkOwogICAgIEVsZW1lbnQmIG1fZWxlbWVudDsKIAotICAgIFZlY3Rvcjxj
b25zdCBSdWxlU2V0KiwgND4gbV9pbnZhbGlkYXRpb25SdWxlU2V0czsKKyAgICBWZWN0b3I8Y29u
c3QgSW52YWxpZGF0aW9uUnVsZVNldCosIDQ+IG1faW52YWxpZGF0aW9uUnVsZVNldHM7CiB9Owog
CiBpbmxpbmUgQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb246OkNsYXNzQ2hhbmdlSW52YWxpZGF0aW9u
KEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIG9sZENsYXNzZXMsIGNv
bnN0IFNwYWNlU3BsaXRTdHJpbmcmIG5ld0NsYXNzZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZUludmFsaWRhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZUludmFsaWRhdG9yLmNwcAkocmV2aXNpb24gMjI2ODgwKQorKysgU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVJbnZhbGlkYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Myw3
ICsxNDMsMTEgQEAgdm9pZCBJbnZhbGlkYXRvcjo6aW52YWxpZGF0ZVN0eWxlRm9yVHJlZQogewog
ICAgIGlmIChpbnZhbGlkYXRlSWZOZWVkZWQocm9vdCwgZmlsdGVyKSA9PSBDaGVja0Rlc2NlbmRh
bnRzOjpObykKICAgICAgICAgcmV0dXJuOworICAgIGludmFsaWRhdGVTdHlsZUZvckRlc2NlbmRh
bnRzKHJvb3QsIGZpbHRlcik7Cit9CiAKK3ZvaWQgSW52YWxpZGF0b3I6OmludmFsaWRhdGVTdHls
ZUZvckRlc2NlbmRhbnRzKEVsZW1lbnQmIHJvb3QsIFNlbGVjdG9yRmlsdGVyKiBmaWx0ZXIpCit7
CiAgICAgVmVjdG9yPEVsZW1lbnQqLCAyMD4gcGFyZW50U3RhY2s7CiAgICAgRWxlbWVudCogcHJl
dmlvdXNFbGVtZW50ID0gJnJvb3Q7CiAgICAgYXV0byBkZXNjZW5kYW50cyA9IGRlc2NlbmRhbnRz
T2ZUeXBlPEVsZW1lbnQ+KHJvb3QpOwpAQCAtMjA1LDUgKzIwOSwzNSBAQCB2b2lkIEludmFsaWRh
dG9yOjppbnZhbGlkYXRlU3R5bGUoRWxlbWVuCiAgICAgaW52YWxpZGF0ZVN0eWxlRm9yVHJlZShl
bGVtZW50LCBudWxscHRyKTsKIH0KIAordm9pZCBJbnZhbGlkYXRvcjo6aW52YWxpZGF0ZVN0eWxl
V2l0aE1hdGNoRWxlbWVudChFbGVtZW50JiBlbGVtZW50LCBNYXRjaEVsZW1lbnQgbWF0Y2hFbGVt
ZW50KQoreworICAgIHN3aXRjaCAobWF0Y2hFbGVtZW50KSB7CisgICAgY2FzZSBNYXRjaEVsZW1l
bnQ6OlN1YmplY3Q6IHsKKyAgICAgICAgaW52YWxpZGF0ZUlmTmVlZGVkKGVsZW1lbnQsIG51bGxw
dHIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBNYXRjaEVsZW1lbnQ6OlBhcmVu
dDogeworICAgICAgICBhdXRvIGNoaWxkcmVuID0gY2hpbGRyZW5PZlR5cGU8RWxlbWVudD4oZWxl
bWVudCk7CisgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbikKKyAgICAgICAgICAg
IGludmFsaWRhdGVJZk5lZWRlZChjaGlsZCwgbnVsbHB0cik7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIE1hdGNoRWxlbWVudDo6QW5jZXN0b3I6IHsKKyAgICAgICAgaW52YWxpZGF0
ZVN0eWxlRm9yRGVzY2VuZGFudHMoZWxlbWVudCwgbnVsbHB0cik7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIE1hdGNoRWxlbWVudDo6RGlyZWN0U2libGluZzoKKyAgICBjYXNlIE1h
dGNoRWxlbWVudDo6SW5kaXJlY3RTaWJsaW5nOgorICAgIGNhc2UgTWF0Y2hFbGVtZW50OjpQYXJl
bnRTaWJsaW5nOgorICAgIGNhc2UgTWF0Y2hFbGVtZW50OjpBbmNlc3RvclNpYmxpbmc6CisgICAg
ICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgc2libGluZyBpbnZhbGlkYXRpb24gaGFwcGVucyBkdXJp
bmcgc3R5bGUgcmVzb2x1dGlvbiB0cmVlIHdhbGsuIEl0IHNob3VsZCBiZSBkb25lIGhlcmUgdG9v
LgorICAgICAgICBlbGVtZW50LmludmFsaWRhdGVTdHlsZSgpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIE1hdGNoRWxlbWVudDo6SG9zdDoKKyAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGlz
IGhlcmUgYXMgd2VsbC4KKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiB9CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVJbnZhbGlkYXRvci5oCShyZXZpc2lvbiAyMjY4ODApCisr
KyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJSdWxlRmVhdHVy
ZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTQ5LDExICs1MCwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnZhbGlkYXRlU3R5bGUoRG9jdW1l
bnQmKTsKICAgICB2b2lkIGludmFsaWRhdGVTdHlsZShTaGFkb3dSb290Jik7CiAgICAgdm9pZCBp
bnZhbGlkYXRlU3R5bGUoRWxlbWVudCYpOworICAgIHZvaWQgaW52YWxpZGF0ZVN0eWxlV2l0aE1h
dGNoRWxlbWVudChFbGVtZW50JiwgTWF0Y2hFbGVtZW50KTsKIAogcHJpdmF0ZToKICAgICBlbnVt
IGNsYXNzIENoZWNrRGVzY2VuZGFudHMgeyBZZXMsIE5vIH07CiAgICAgQ2hlY2tEZXNjZW5kYW50
cyBpbnZhbGlkYXRlSWZOZWVkZWQoRWxlbWVudCYsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKik7CiAg
ICAgdm9pZCBpbnZhbGlkYXRlU3R5bGVGb3JUcmVlKEVsZW1lbnQmLCBTZWxlY3RvckZpbHRlciop
OworICAgIHZvaWQgaW52YWxpZGF0ZVN0eWxlRm9yRGVzY2VuZGFudHMoRWxlbWVudCYsIFNlbGVj
dG9yRmlsdGVyKik7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVsZVNldD4gbV9vd25lZFJ1bGVT
ZXQ7CiAgICAgY29uc3QgUnVsZVNldCYgbV9ydWxlU2V0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3R5bGUvU3R5bGVTaGFyaW5nUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlU2hhcmluZ1Jlc29sdmVyLmNwcAkocmV2aXNpb24gMjI2ODgwKQorKysg
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTaGFyaW5nUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNDAsMTMgKzM0MCw4IEBAIGJvb2wgU2hhcmluZ1Jlc29sdmVyOjpzaGFyaW5nQ2Fu
ZGlkYXRlSGEKIGJvb2wgU2hhcmluZ1Jlc29sdmVyOjpjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVz
KGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFtZXMpIGNvbnN0CiB7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGNsYXNzTmFtZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYg
KG1fcnVsZVNldHMuZmVhdHVyZXMoKS5vdGhlckNsYXNzZXNJblJ1bGVzLmNvbnRhaW5zKGNsYXNz
TmFtZXNbaV0pKQorICAgICAgICBpZiAobV9ydWxlU2V0cy5mZWF0dXJlcygpLmNsYXNzUnVsZXMu
Y29udGFpbnMoY2xhc3NOYW1lc1tpXSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgaWYgKG1fcnVsZVNldHMuZmVhdHVyZXMoKS5hbmNlc3RvckNsYXNzUnVsZXMuY29udGFpbnMo
Y2xhc3NOYW1lc1tpXSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKG1f
cnVsZVNldHMuZmVhdHVyZXMoKS5zdWJqZWN0Q2xhc3NSdWxlcy5jb250YWlucyhjbGFzc05hbWVz
W2ldKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCiAgICAgfQogICAgIHJldHVybiBmYWxz
ZTsKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>