<?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>196836</bug_id>
          
          <creation_ts>2019-04-11 16:24:59 -0700</creation_ts>
          <short_desc>Improve the Inline Cache Stats code</short_desc>
          <delta_ts>2019-04-11 17:53:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</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="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1526527</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2019-04-11 16:24:59 -0700</bug_when>
    <thetext>There had been a little bit rot in the Inline Cache Statistics code.  This patch is to address those issue and add a little bit more capability.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526528</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-04-11 16:25:25 -0700</bug_when>
    <thetext>&lt;rdar://problem/49832701&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526540</commentid>
    <comment_count>2</comment_count>
      <attachid>367264</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2019-04-11 16:46:43 -0700</bug_when>
    <thetext>Created attachment 367264
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526543</commentid>
    <comment_count>3</comment_count>
      <attachid>367264</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2019-04-11 16:50:22 -0700</bug_when>
    <thetext>Comment on attachment 367264
Patch

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

&gt; Tools/Scripts/ic-stats.py:110
&gt; +            print &quot;Trying to open \&quot;{0}\&quot;...&quot;.format(sys.argv[1])

Deleted this line locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526544</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2019-04-11 16:51:02 -0700</bug_when>
    <thetext>This is the kind of output the ic-stats.py script produces:
Total Slow getById =   295,834,778
Total Slow putById =    31,270,401
Operation                            Base                  Property                              Location          Count  % tot
-----------------------------------  --------------------  ------------------------------------  ------------  ---------   slow
OperationGetById                     Object                __ember_meta__                        self           62436278  22.5%
OperationGetById                     Object                toString                              proto lookup   34845746  11.8%
OperationGetById                     Object                hasOwnProperty                        proto lookup   29258531  10.7%
OperationPutByIdNonStrict            Object                _super                                self           19380688  63.8%
OperationGetById                     Object                _super                                self           19216410   6.5%
OperationGetById                     Object                trigger                               proto lookup   12426411   4.2%
OperationGetById                     Function              toString                              proto lookup    9210778   3.1%
OperationGetById                     Object                isDestroyed                           proto lookup    8553798   2.9%
OperationGetById                     Object                constructor                           proto lookup    7834272   2.7%
OperationGetById                     Object                toStringExtension                     proto lookup    6264855   2.1%
OperationGetById                     Object                didRemoveListener                     proto lookup    6224125   2.1%
OperationGetById                     Object                didAddListener                        proto lookup    6167481   2.1%
OperationGetById                     Object                attrs                                 self            4501599   1.5%
OperationGetById                     Object                __ember_meta__                        proto lookup    3993339  22.5%
OperationGetById                     Object                __ember1554940456344                  self            3556566   1.2%
OperationPutByIdStrict               Array                 length                                proto lookup    3475904  11.3%
OperationGetById                     Object                _renderNode                           self            3348433   1.1%
OperationGetById                     Object                isDescriptor                          proto lookup    3247885   1.2%
OperationGetById                     Object                __ember1554940461387                  self            3168559   1.1%
OperationGetById                     Object                _propagateAttrsToThis                 proto lookup    3004106   1.0%
OperationPutByIdStrict               Object                _isDispatchingAttrs                   self            2980890   9.5%
...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526550</commentid>
    <comment_count>5</comment_count>
      <attachid>367264</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-04-11 17:14:22 -0700</bug_when>
    <thetext>Comment on attachment 367264
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:43
&gt; +2019-04-11  Michael Saboff  &lt;msaboff@apple.com&gt;
&gt; +
&gt; +        Need a short description (OOPS!).
&gt; +        Need the bug URL (OOPS!).
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        * jit/ICStats.cpp:
&gt; +        (JSC::ICEvent::operator&lt; const):
&gt; +        (JSC::ICEvent::dump const):
&gt; +        * jit/ICStats.h:
&gt; +        (JSC::ICEvent::ICEvent):
&gt; +        (JSC::ICEvent::hash const):
&gt; +        * jit/JITOperations.cpp:
&gt; +        * jit/Repatch.cpp:
&gt; +        (JSC::tryCacheGetByID):
&gt; +        (JSC::tryCachePutByID):
&gt; +        (JSC::tryCacheInByID):

style: duplicate entries. remove this

&gt; Tools/ChangeLog:34
&gt; +2019-04-11  Michael Saboff  &lt;msaboff@apple.com&gt;
&gt; +
&gt; +        Need a short description (OOPS!).
&gt; +        Need the bug URL (OOPS!).
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        * Scripts/ic-stats.py: Added.
&gt; +        (ICStats):
&gt; +        (ICStats.__init__):
&gt; +        (ICStats.parse):
&gt; +        (ICStats.dumpStats):
&gt; +        (usage):

ditto: remove

&gt; Tools/Scripts/ic-stats.py:104
&gt; +    print &quot;Usage: {0} [ic-stats-file]&quot;.format(sys.argv[0])

can you also make this print with --help?
Also, can you add information in this to how to generate ic-stats-file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526566</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2019-04-11 17:51:22 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #5)
&gt; Comment on attachment 367264 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=367264&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:43
&gt; &gt; +2019-04-11  Michael Saboff  &lt;msaboff@apple.com&gt;
&gt; &gt; +
&gt; &gt; +        Need a short description (OOPS!).
&gt; &gt; +        Need the bug URL (OOPS!).
&gt; &gt; +
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; +
&gt; &gt; +        * jit/ICStats.cpp:
&gt; &gt; +        (JSC::ICEvent::operator&lt; const):
&gt; &gt; +        (JSC::ICEvent::dump const):
&gt; &gt; +        * jit/ICStats.h:
&gt; &gt; +        (JSC::ICEvent::ICEvent):
&gt; &gt; +        (JSC::ICEvent::hash const):
&gt; &gt; +        * jit/JITOperations.cpp:
&gt; &gt; +        * jit/Repatch.cpp:
&gt; &gt; +        (JSC::tryCacheGetByID):
&gt; &gt; +        (JSC::tryCachePutByID):
&gt; &gt; +        (JSC::tryCacheInByID):
&gt; 
&gt; style: duplicate entries. remove this

Removed.

&gt; &gt; Tools/ChangeLog:34
&gt; &gt; +2019-04-11  Michael Saboff  &lt;msaboff@apple.com&gt;
&gt; &gt; +
&gt; &gt; +        Need a short description (OOPS!).
&gt; &gt; +        Need the bug URL (OOPS!).
&gt; &gt; +
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; +
&gt; &gt; +        * Scripts/ic-stats.py: Added.
&gt; &gt; +        (ICStats):
&gt; &gt; +        (ICStats.__init__):
&gt; &gt; +        (ICStats.parse):
&gt; &gt; +        (ICStats.dumpStats):
&gt; &gt; +        (usage):
&gt; 
&gt; ditto: remove

Removed.

&gt; &gt; Tools/Scripts/ic-stats.py:104
&gt; &gt; +    print &quot;Usage: {0} [ic-stats-file]&quot;.format(sys.argv[0])
&gt; 
&gt; can you also make this print with --help?
&gt; Also, can you add information in this to how to generate ic-stats-file?

I added both of these items.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526568</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2019-04-11 17:53:14 -0700</bug_when>
    <thetext>Committed r244204: &lt;https://trac.webkit.org/changeset/244204&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>367264</attachid>
            <date>2019-04-11 16:46:43 -0700</date>
            <delta_ts>2019-04-11 17:14:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>196836.patch</filename>
            <type>text/plain</type>
            <size>26212</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQ0MjAxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBA
CisyMDE5LTA0LTExICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEltcHJvdmUgdGhlIElubGluZSBDYWNoZSBTdGF0cyBjb2RlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY4MzYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZWVkZWQgdG8gaGFuZGxlIHRoZSBjYXNl
IHdoZXJlIHRoZSBJZGVudGlmaWVyIGNvdWxkIGJlIG51bGwsIGZvciBleGFtcGxlIHdpdGggSW5z
dGFuY2VPZkFkZEFjY2Vzc0Nhc2UKKyAgICAgICAgYW5kIEluc3RhbmNlT2ZSZXBsYWNlV2l0aEp1
bXAuCisKKyAgICAgICAgQWRkZWQgdGhlIGFiaWxpdHkgdG8gbG9nIHRoZSBsb2NhdGlvbiBvZiBh
IEdldEJ5IGFuZCBQdXRCeSBwcm9wZXJ0eSBhcyBlaXRoZXIgb24gc2VsZiBvciB1cCB0aGUKKyAg
ICAgICAgcHJvdG9jb2wgY2hhaW4uCisKKyAgICAgICAgKiBqaXQvSUNTdGF0cy5jcHA6CisgICAg
ICAgIChKU0M6OklDRXZlbnQ6Om9wZXJhdG9yPCBjb25zdCk6CisgICAgICAgIChKU0M6OklDRXZl
bnQ6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGppdC9JQ1N0YXRzLmg6CisgICAgICAgIChKU0M6
OklDRXZlbnQ6OklDRXZlbnQpOgorICAgICAgICAoSlNDOjpJQ0V2ZW50OjpoYXNoIGNvbnN0KToK
KyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L1JlcGF0Y2gu
Y3BwOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlD
YWNoZVB1dEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUluQnlJRCk6CisKKzIwMTktMDQt
MTEgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgTmVlZCBh
IHNob3J0IGRlc2NyaXB0aW9uIChPT1BTISkuCisgICAgICAgIE5lZWQgdGhlIGJ1ZyBVUkwgKE9P
UFMhKS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGppdC9JQ1N0YXRzLmNwcDoKKyAgICAgICAgKEpTQzo6SUNFdmVudDo6b3BlcmF0b3I8IGNvbnN0
KToKKyAgICAgICAgKEpTQzo6SUNFdmVudDo6ZHVtcCBjb25zdCk6CisgICAgICAgICogaml0L0lD
U3RhdHMuaDoKKyAgICAgICAgKEpTQzo6SUNFdmVudDo6SUNFdmVudCk6CisgICAgICAgIChKU0M6
OklDRXZlbnQ6Omhhc2ggY29uc3QpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoK
KyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnRyeUNhY2hlR2V0QnlJ
RCk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlUHV0QnlJRCk6CisgICAgICAgIChKU0M6OnRyeUNh
Y2hlSW5CeUlEKToKKwogMjAxOS0wNC0xMSAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5j
b20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogVGltZWxpbmVzOiBjYW4ndCByZWxpYWJseSBz
dG9wL3N0YXJ0IGEgcmVjb3JkaW5nCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lD
U3RhdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0
cy5jcHAJKHJldmlzaW9uIDI0NDIwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNT
dGF0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEzICs0MCwxOCBAQCBib29sIElDRXZlbnQ6
Om9wZXJhdG9yPChjb25zdCBJQ0V2ZW50JiBvCiAgICAgCiAgICAgaWYgKG1fcHJvcGVydHlOYW1l
ICE9IG90aGVyLm1fcHJvcGVydHlOYW1lKQogICAgICAgICByZXR1cm4gY29kZVBvaW50Q29tcGFy
ZShtX3Byb3BlcnR5TmFtZS5zdHJpbmcoKSwgb3RoZXIubV9wcm9wZXJ0eU5hbWUuc3RyaW5nKCkp
IDwgMDsKLSAgICAKLSAgICByZXR1cm4gbV9raW5kIDwgb3RoZXIubV9raW5kOworCisgICAgaWYg
KG1fa2luZCAhPSBvdGhlci5tX2tpbmQpCisgICAgICAgIHJldHVybiBtX2tpbmQgPCBvdGhlci5t
X2tpbmQ7CisKKyAgICByZXR1cm4gbV9wcm9wZXJ0eUxvY2F0aW9uIDwgb3RoZXIubV9wcm9wZXJ0
eUxvY2F0aW9uOwogfQogCiB2b2lkIElDRXZlbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKIHsKICAgICBvdXQucHJpbnQobV9raW5kLCAiKCIsIG1fY2xhc3NJbmZvID8gbV9jbGFzc0lu
Zm8tPmNsYXNzTmFtZSA6ICI8bnVsbD4iLCAiLCAiLCBtX3Byb3BlcnR5TmFtZSwgIikiKTsKKyAg
ICBpZiAobV9wcm9wZXJ0eUxvY2F0aW9uICE9IFVua25vd24pCisgICAgICAgIG91dC5wcmludCht
X3Byb3BlcnR5TG9jYXRpb24gPT0gQmFzZU9iamVjdCA/ICIgc2VsZiIgOiAiIHByb3RvIGxvb2t1
cCIpOwogfQogCiB2b2lkIElDRXZlbnQ6OmxvZygpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0lDU3RhdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0lDU3RhdHMuaAkocmV2aXNpb24gMjQ0MjAxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9JQ1N0YXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDEzIEBAIHB1Ymxp
YzoKICAgICAgICAgRk9SX0VBQ0hfSUNFVkVOVF9LSU5EKElDRVZFTlRfS0lORF9ERUNMQVJBVElP
TikKICN1bmRlZiBJQ0VWRU5UX0tJTkRfREVDTEFSQVRJT04KICAgICB9OwotICAgIAorCisgICAg
ZW51bSBQcm9wZXJ0eUxvY2F0aW9uIHsKKyAgICAgICAgVW5rbm93biwKKyAgICAgICAgQmFzZU9i
amVjdCwKKyAgICAgICAgUHJvdG9Mb29rdXAKKyAgICB9OworCiAgICAgSUNFdmVudCgpCiAgICAg
ewogICAgIH0KQEAgLTg3LDkgKzkzLDE4IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX2tpbmQoa2lu
ZCkKICAgICAgICAgLCBtX2NsYXNzSW5mbyhjbGFzc0luZm8pCiAgICAgICAgICwgbV9wcm9wZXJ0
eU5hbWUocHJvcGVydHlOYW1lKQorICAgICAgICAsIG1fcHJvcGVydHlMb2NhdGlvbihVbmtub3du
KQogICAgIHsKICAgICB9CiAKKyAgICBJQ0V2ZW50KEtpbmQga2luZCwgY29uc3QgQ2xhc3NJbmZv
KiBjbGFzc0luZm8sIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBib29sIGlzQmFzZVBy
b3BlcnR5KQorICAgICAgICA6IG1fa2luZChraW5kKQorICAgICAgICAsIG1fY2xhc3NJbmZvKGNs
YXNzSW5mbykKKyAgICAgICAgLCBtX3Byb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpCisgICAgICAg
ICwgbV9wcm9wZXJ0eUxvY2F0aW9uKGlzQmFzZVByb3BlcnR5ID8gQmFzZU9iamVjdCA6IFByb3Rv
TG9va3VwKQorICAgIHsKKyAgICB9CisgICAgCiAgICAgSUNFdmVudChXVEY6Okhhc2hUYWJsZURl
bGV0ZWRWYWx1ZVR5cGUpCiAgICAgICAgIDogbV9raW5kKE9wZXJhdGlvbkdldEJ5SWQpCiAgICAg
ewpAQCAtMTIzLDcgKzEzOCw5IEBAIHB1YmxpYzoKICAgICAKICAgICB1bnNpZ25lZCBoYXNoKCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2tpbmQgKyBXVEY6OlB0ckhhc2g8Y29uc3Qg
Q2xhc3NJbmZvKj46Omhhc2gobV9jbGFzc0luZm8pICsgU3RyaW5nSGFzaDo6aGFzaChtX3Byb3Bl
cnR5TmFtZS5zdHJpbmcoKSk7CisgICAgICAgIGlmIChtX3Byb3BlcnR5TmFtZS5pc051bGwoKSkK
KyAgICAgICAgICAgIHJldHVybiBtX2tpbmQgKyBtX3Byb3BlcnR5TG9jYXRpb24gKyBXVEY6OlB0
ckhhc2g8Y29uc3QgQ2xhc3NJbmZvKj46Omhhc2gobV9jbGFzc0luZm8pOworICAgICAgICByZXR1
cm4gbV9raW5kICsgbV9wcm9wZXJ0eUxvY2F0aW9uICsgV1RGOjpQdHJIYXNoPGNvbnN0IENsYXNz
SW5mbyo+OjpoYXNoKG1fY2xhc3NJbmZvKSArIFN0cmluZ0hhc2g6Omhhc2gobV9wcm9wZXJ0eU5h
bWUuc3RyaW5nKCkpOwogICAgIH0KICAgICAKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlKCkgY29uc3QKQEAgLTE0MCw2ICsxNTcsNyBAQCBwcml2YXRlOgogICAgIEtpbmQgbV9raW5k
IHsgSW52YWxpZEtpbmQgfTsKICAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xhc3NJbmZvIHsgbnVs
bHB0ciB9OwogICAgIElkZW50aWZpZXIgbV9wcm9wZXJ0eU5hbWU7CisgICAgUHJvcGVydHlMb2Nh
dGlvbiBtX3Byb3BlcnR5TG9jYXRpb247CiB9OwogCiBzdHJ1Y3QgSUNFdmVudEhhc2ggewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lv
biAyNDQyMDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsOSArMjUyLDExIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShiYXNlKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIFByb3BlcnR5U2xv
dDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVu
dGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwotICAgIAotICAgIExPR19JQygoSUNFdmVudDo6T3Bl
cmF0aW9uR2V0QnlJZCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCgqdm0pLCBpZGVudCkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xv
dCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xv
dCk7CisKKyAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvbkdldEJ5SWQsIGJhc2VWYWx1ZS5j
bGFzc0luZm9Pck51bGwoKnZtKSwgaWRlbnQsIGJhc2VWYWx1ZSA9PSBzbG90LnNsb3RCYXNlKCkp
KTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkR2VuZXJpYyhFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCkBAIC0yNjcs
OCArMjY5LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKICAgICBQcm9wZXJ0
eVNsb3Qgc2xvdChiYXNlVmFsdWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpH
ZXQpOwogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQp
OwotICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uR2V0QnlJZEdlbmVyaWMsIGJhc2VWYWx1
ZS5jbGFzc0luZm9Pck51bGwoKnZtKSwgaWRlbnQpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpOworICAgIAorICAgIExPR19JQygo
SUNFdmVudDo6T3BlcmF0aW9uR2V0QnlJZEdlbmVyaWMsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51
bGwoKnZtKSwgaWRlbnQsIGJhc2VWYWx1ZSA9PSBzbG90LnNsb3RCYXNlKCkpKTsKKyAgICAKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKQpAQCAtMjgwLDkgKzI4NSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZy
b21VaWQodm0sIHVpZCk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShiYXNlKTsKLSAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwg
YmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCgqdm0pLCBpZGVudCkpOwogCiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBbJl0g
KGJvb2wgZm91bmQsIFByb3BlcnR5U2xvdCYgc2xvdCkgLT4gSlNWYWx1ZSB7CisgICAgICAgIAor
ICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgYmFzZVZh
bHVlLmNsYXNzSW5mb09yTnVsbCgqdm0pLCBpZGVudCwgYmFzZVZhbHVlID09IHNsb3Quc2xvdEJh
c2UoKSkpOworICAgICAgICAKICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmco
ZXhlYy0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZS5zdHJ1Y3R1cmVPck51bGwoKSkpCiAgICAgICAg
ICAgICByZXBhdGNoR2V0QnlJRChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCAqc3R1Yklu
Zm8sIEdldEJ5SURLaW5kOjpOb3JtYWwpOwogICAgICAgICByZXR1cm4gZm91bmQgPyBzbG90Lmdl
dFZhbHVlKGV4ZWMsIGlkZW50KSA6IGpzVW5kZWZpbmVkKCk7CkBAIC0zMzEsMTAgKzMzOCwxMSBA
QCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAKICAgICBKU1ZhbHVl
IGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IEpTVmFsdWU6OmRlY29kZSh0aGlzRW5jb2RlZCk7Ci0gICAgTE9HX0lDKChJQ0V2ZW50OjpP
cGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVs
bCgqdm0pLCBpZGVudCkpOwogCiAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpc1ZhbHVlLCBQcm9w
ZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGJhc2VWYWx1ZS5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QsIFsmXSAo
Ym9vbCBmb3VuZCwgUHJvcGVydHlTbG90JiBzbG90KSAtPiBKU1ZhbHVlIHsKKyAgICAgICAgTE9H
X0lDKChJQ0V2ZW50OjpPcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgYmFzZVZhbHVl
LmNsYXNzSW5mb09yTnVsbCgqdm0pLCBpZGVudCwgYmFzZVZhbHVlID09IHNsb3Quc2xvdEJhc2Uo
KSkpOworICAgICAgICAKICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmcoZXhl
Yy0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZS5zdHJ1Y3R1cmVPck51bGwoKSkpCiAgICAgICAgICAg
ICByZXBhdGNoR2V0QnlJRChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCAqc3R1YkluZm8s
IEdldEJ5SURLaW5kOjpXaXRoVGhpcyk7CiAgICAgICAgIHJldHVybiBmb3VuZCA/IHNsb3QuZ2V0
VmFsdWUoZXhlYywgaWRlbnQpIDoganNVbmRlZmluZWQoKTsKQEAgLTQzOSwxMCArNDQ3LDEwIEBA
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWMKICAgICAKICAgICBKU1Zh
bHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CiAgICAgSWRlbnRp
ZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7Ci0gICAgTE9HX0lDKChJ
Q0V2ZW50OjpPcGVyYXRpb25QdXRCeUlkU3RyaWN0LCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxs
KCp2bSksIGlkZW50KSk7Ci0KICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIHRy
dWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKICAgICBiYXNlVmFsdWUu
cHV0SW5saW5lKGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xv
dCk7CisgICAgCisgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25QdXRCeUlkU3RyaWN0LCBi
YXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKCp2bSksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNl
VmFsdWUpKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJp
Y3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQpCkBAIC00NTYsOSArNDY0LDEwIEBAIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeUlkTm9uU3QKICAgICAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CiAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZp
ZXI6OmZyb21VaWQodm0sIHVpZCk7Ci0gICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25QdXRC
eUlkTm9uU3RyaWN0LCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKCp2bSksIGlkZW50KSk7CiAg
ICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBmYWxzZSwgZXhlYy0+Y29kZUJsb2Nr
KCktPnB1dEJ5SWRDb250ZXh0KCkpOwogICAgIGJhc2VWYWx1ZS5wdXRJbmxpbmUoZXhlYywgaWRl
bnQsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKKworICAgIExPR19JQygo
SUNFdmVudDo6T3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCwgYmFzZVZhbHVlLmNsYXNzSW5mb09y
TnVsbCgqdm0pLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiB9CiAKIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQpA
QCAtNDcyLDkgKzQ4MSwxMCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERp
cmVjCiAgICAgCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZEJhc2UpOwogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKCZ2bSwg
dWlkKTsKLSAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Qs
IGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBpZGVudCkpOwogICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KGJhc2VWYWx1ZSwgdHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250
ZXh0KCkpOwogICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0V2l0aFJlaWZ5KHZtLCBleGVj
LCBhc09iamVjdChiYXNlVmFsdWUpLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSksIHNsb3QpOworCisgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25QdXRCeUlkRGlyZWN0
U3RyaWN0LCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgaWRlbnQsIHNsb3QuYmFzZSgp
ID09IGJhc2VWYWx1ZSkpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKQEAgLTQ4OCw5ICs0OTgsMTAgQEAgdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlYwogICAgIAogICAgIEpTVmFsdWUgYmFz
ZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKICAgICBJZGVudGlmaWVyIGlk
ZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHVpZCk7Ci0gICAgTE9HX0lDKChJQ0V2ZW50
OjpPcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0LCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JO
dWxsKHZtKSwgaWRlbnQpKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGZh
bHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CiAgICAgQ29tbW9uU2xv
d1BhdGhzOjpwdXREaXJlY3RXaXRoUmVpZnkodm0sIGV4ZWMsIGFzT2JqZWN0KGJhc2VWYWx1ZSks
IGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CisKKyAgICBMT0df
SUMoKElDRXZlbnQ6Ok9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QsIGJhc2VWYWx1ZS5j
bGFzc0luZm9Pck51bGwodm0pLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiB9
CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUoRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpCkBAIC01MDYsMTIgKzUxNywxNCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZFN0cmljCiAKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZEJhc2UpOwotICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uUHV0QnlJZFN0cmljdE9w
dGltaXplLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKCp2bSksIGlkZW50KSk7CiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdChiYXNlVmFsdWUsIHRydWUsIGNvZGVCbG9jay0+cHV0QnlJZENvbnRleHQoKSk7CiAK
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VWYWx1ZS5pc0NlbGwoKSA/IGJhc2VWYWx1
ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCp2bSkgOiBudWxscHRyOwogICAgIGJhc2VWYWx1ZS5wdXRJ
bmxpbmUoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKKworICAgIExPR19JQygoSUNFdmVudDo6
T3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxs
KCp2bSksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0
aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNjZXNzVHlwZSkpCkBAIC01MzQsMTIgKzU0
NywxNCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0CiAKICAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgSlNWYWx1
ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwotICAgIExPR19JQygo
SUNFdmVudDo6T3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplLCBiYXNlVmFsdWUuY2xh
c3NJbmZvT3JOdWxsKCp2bSksIGlkZW50KSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBl
eGVjLT5jb2RlQmxvY2soKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGZh
bHNlLCBjb2RlQmxvY2stPnB1dEJ5SWRDb250ZXh0KCkpOwogCiAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBiYXNlVmFsdWUuaXNDZWxsKCkgPyBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVy
ZSgqdm0pIDogbnVsbHB0cjsgICAgCiAgICAgYmFzZVZhbHVlLnB1dElubGluZShleGVjLCBpZGVu
dCwgdmFsdWUsIHNsb3QpOworCisgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25QdXRCeUlk
Tm9uU3RyaWN0T3B0aW1pemUsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwoKnZtKSwgaWRlbnQs
IHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOworCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgdm9pZCgpKTsKIAogICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vz
c1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKQEAgLTU2MiwxMSArNTc3LDEzIEBAIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWMKIAogICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBKU09iamVjdCogYmFzZU9iamVj
dCA9IGFzT2JqZWN0KEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSkpOwotICAgIExPR19JQygo
SUNFdmVudDo6T3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplLCBiYXNlT2JqZWN0
LT5jbGFzc0luZm8odm0pLCBpZGVudCkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhl
Yy0+Y29kZUJsb2NrKCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZU9iamVjdCwgdHJ1
ZSwgY29kZUJsb2NrLT5wdXRCeUlkQ29udGV4dCgpKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IG51bGxwdHI7CiAgICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RXaXRoUmVpZnkodm0s
IGV4ZWMsIGJhc2VPYmplY3QsIGlkZW50LCB2YWx1ZSwgc2xvdCwgJnN0cnVjdHVyZSk7CisKKyAg
ICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSwg
YmFzZU9iamVjdC0+Y2xhc3NJbmZvKHZtKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VPYmpl
Y3QpKTsKKwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgCiAg
ICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFj
Y2Vzc1R5cGUpKQpAQCAtNTg5LDExICs2MDYsMTMgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5SWREaXJlYwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwogICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKSk7Ci0gICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25Q
dXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUsIGJhc2VPYmplY3QtPmNsYXNzSW5mbyh2bSks
IGlkZW50KSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsK
ICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlT2JqZWN0LCBmYWxzZSwgY29kZUJsb2NrLT5w
dXRCeUlkQ29udGV4dCgpKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG51bGxwdHI7CiAg
ICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RXaXRoUmVpZnkodm0sIGV4ZWMsIGJhc2VPYmpl
Y3QsIGlkZW50LCB2YWx1ZSwgc2xvdCwgJnN0cnVjdHVyZSk7CisKKyAgICBMT0dfSUMoKElDRXZl
bnQ6Ok9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSwgYmFzZU9iamVjdC0+
Y2xhc3NJbmZvKHZtKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VPYmplY3QpKTsKKwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgCiAgICAgaWYgKGFjY2Vz
c1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyNDQyMDEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNjcsNyArMjY3LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0
QnlJRAogCiAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhzdHViSW5mbywgc3RydWN0dXJlLCBz
bG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlu
bGluZSkgewotICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5SWRTZWxm
UGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIHByb3BlcnR5TmFtZSkpOworICAgICAgICAg
ICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5SWRTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+
Y2xhc3NJbmZvKCksIHByb3BlcnR5TmFtZSwgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkp
OwogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZv
clJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRo
Q2FsbExvY2F0aW9uKCksIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5SWRGdW5jdGlvbihraW5k
KSk7CiAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZihjb2RlQmxv
Y2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CkBAIC0zNzYsMTIgKzM3NiwxMiBA
QCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KIAotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5SWRBZGRBY2Nlc3ND
YXNlLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgcHJvcGVydHlOYW1lKSk7CisgICAg
ICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlJZEFkZEFjY2Vzc0Nhc2UsIGJhc2VWYWx1ZS5jbGFz
c0luZm9Pck51bGwodm0pLCBwcm9wZXJ0eU5hbWUsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFs
dWUpKTsKIAogICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwg
Y29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUobmV3Q2FzZSkpOwogCiAgICAgICAgIGlm
IChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAgICAgICAgICAgTE9HX0lDKChJQ0V2
ZW50OjpHZXRCeUlkUmVwbGFjZVdpdGhKdW1wLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZt
KSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5SWRS
ZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBwcm9wZXJ0eU5h
bWUsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CiAgICAgICAgICAgICBJbmxpbmVB
Y2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAoc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CkBAIC00NzUsNyArNDc1LDcgQEAgc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIHN0cnVjdHVyZSwg
c2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRD
b2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1
dEJ5SWRTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50KSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5SWRTZWxmUGF0Y2gsIHN0cnVj
dHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ss
IHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1
dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBz
dHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2UoY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVM
YXRlcjsKQEAgLTU4OCwxMiArNTg4LDEyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZVB1dEJ5SUQKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIExPR19JQygo
SUNFdmVudDo6UHV0QnlJZEFkZEFjY2Vzc0Nhc2UsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlk
ZW50KSk7CisgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZEFkZEFjY2Vzc0Nhc2UsIHN0
cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsK
ICAgICAgICAgCiAgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2Vy
LCBjb2RlQmxvY2ssIGlkZW50LCBXVEZNb3ZlKG5ld0Nhc2UpKTsKIAogICAgICAgICBpZiAocmVz
dWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6
UHV0QnlJZFJlcGxhY2VXaXRoSnVtcCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQpKTsK
KyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZFJlcGxhY2VXaXRoSnVtcCwgc3Ry
dWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsK
IApAQCAtNjU0LDcgKzY1NCw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUlu
QnlJRCgKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KCkpIHsKICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUg
PSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUp
OwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5CeUlkU2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLCBpZGVudCkpOworICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6
OkluQnlJZFNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xv
dEJhc2UoKSA9PSBiYXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRX
YXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsK
ICAgICAgICAgICAgICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgb3BlcmF0aW9uSW5CeUlkT3B0aW1pemUp
OwogICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0SW5CeUlkU2VsZihjb2RlQmxvY2ss
IHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CkBAIC02OTIsNyArNjkyLDcgQEAgc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5CeUlEKAogICAgICAgICBpZiAoIWNvbmRp
dGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAot
ICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQWRkQWNjZXNzQ2FzZSwgc3RydWN0dXJlLT5jbGFz
c0luZm8oKSwgaWRlbnQpKTsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkFkZEFjY2Vzc0Nh
c2UsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFz
ZSkpOwogCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0gQWNj
ZXNzQ2FzZTo6Y3JlYXRlKAogICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgd2FzRm91bmQgPyBB
Y2Nlc3NDYXNlOjpJbkhpdCA6IEFjY2Vzc0Nhc2U6OkluTWlzcywgd2FzRm91bmQgPyBzbG90LmNh
Y2hlZE9mZnNldCgpIDogaW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIFdU
Rk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKQEAgLTcwMCw3ICs3MDAsNyBAQCBzdGF0aWMg
SW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5SUQoCiAgICAgICAgIHJlc3VsdCA9IHN0dWJJ
bmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBjb2RlQmxvY2ssIGlkZW50LCBXVEZNb3ZlKG5ld0Nh
c2UpKTsKIAogICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAg
ICAgICAgIExPR19JQygoSUNFdmVudDo6SW5SZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xh
c3NJbmZvKCksIGlkZW50KSk7CisgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluUmVwbGFj
ZVdpdGhKdW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgp
ID09IGJhc2UpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVz
dWx0LmNvZGUoKSk7CiAgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAo
c3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQu
Y29kZSgpKSk7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNDQyMDEpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwzOCBAQAorMjAxOS0wNC0xMSAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2Zm
QGFwcGxlLmNvbT4KKworICAgICAgICBJbXByb3ZlIHRoZSBJbmxpbmUgQ2FjaGUgU3RhdHMgY29k
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2ODM2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQg
YSBuZXcgc2NyaXB0IHRvIGNvbnNvbGlkYXRlIGFuZCBhcnJhbmdlIHRoZSBvdXRwdXQgb2YgLS11
c2VJQ1N0YXRzIG9wdGlvbi4KKworICAgICAgICBUaGlzIHNjcmlwdCBtZXJnZXMgdGhlIG91dHB1
dCBmcm9tIGV2ZXJ5IGdyb3VwIGludG8gb25lIGxhcmdlIHRhYmxlIGFuZCBzb3J0cyBpdCBmcm9t
IG1vc3QgY29tbW9uIHRvCisgICAgICAgIGxlYXN0IGNvbW1vbi4gIEl0IGFsc28gY291bnRzIHRo
ZSBzbG93IHBhdGggR2V0QnlJZCBhbmQgUHV0QnlJZCB2YXJpYW50cyBhbmQgdGhlbiBjYWxjdWxh
dGVzIHRoZQorICAgICAgICBwZXJjZW50YWdlIG9mIGdldHMgb3IgcHV0cyBmb3IgZWFjaCB1bmlx
dWUgYmFzZSxwcm9wZXJ0eSBwYWlyIGNvbXBhcmVkIHRvIGFsbCB0aGUgZ2V0cyBhbmQgcHV0cy4K
KyAgICAgICAgUHV0IHRvZ2V0aGVyLCB0aGlzIGlzIHVzZWZ1bCB0byBzZWUgd2hhdCBwcm9wZXJ0
eSBhY2Nlc3NlcyBhcmUgbm90IGdldHRpbmcgY2FjaGVkLgorCisgICAgICAgICogU2NyaXB0cy9p
Yy1zdGF0cy5weTogQWRkZWQuCisgICAgICAgIChJQ1N0YXRzKToKKyAgICAgICAgKElDU3RhdHMu
X19pbml0X18pOgorICAgICAgICAoSUNTdGF0cy5wYXJzZSk6CisgICAgICAgIChJQ1N0YXRzLmR1
bXBTdGF0cyk6CisgICAgICAgICh1c2FnZSk6CisKKzIwMTktMDQtMTEgIE1pY2hhZWwgU2Fib2Zm
ICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9u
IChPT1BTISkuCisgICAgICAgIE5lZWQgdGhlIGJ1ZyBVUkwgKE9PUFMhKS4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvaWMtc3RhdHMu
cHk6IEFkZGVkLgorICAgICAgICAoSUNTdGF0cyk6CisgICAgICAgIChJQ1N0YXRzLl9faW5pdF9f
KToKKyAgICAgICAgKElDU3RhdHMucGFyc2UpOgorICAgICAgICAoSUNTdGF0cy5kdW1wU3RhdHMp
OgorICAgICAgICAodXNhZ2UpOgorCiAyMDE5LTA0LTEwICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgV0tOYXZpZ2F0aW9uUmVzcG9uc2UuX2Rv
d25sb2FkQXR0cmlidXRlIHNob3VsZCBiZSBuaWwgd2hlbiBubyBkb3dubG9hZCBhdHRyaWJ1dGUg
aXMgcHJlc2VudApJbmRleDogVG9vbHMvU2NyaXB0cy9pYy1zdGF0cy5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL2ljLXN0YXRzLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1Njcmlw
dHMvaWMtc3RhdHMucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjMgQEAKKyMhIC91c3Iv
YmluL3B5dGhvbgorCisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisj
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBv
cnQgcmUKK2ltcG9ydCBzeXMKKworaWNTdGF0UmVjb3JkID0gcmUuY29tcGlsZSgiICsoXHcrKVwo
KFteLF0rKSwgKFteKV0rKVwpKFteOl0qKTogKFxkKykiKQorZ2V0QnlJZFByZWZpeCA9ICJPcGVy
YXRpb25HZXRCeUlkIgorcHV0QnlJZFByZWZpeCA9ICJPcGVyYXRpb25QdXRCeUlkIgorCisKK2Ns
YXNzIElDU3RhdHM6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmNvbWJp
bmVkUmVjb3JkcyA9IHt9CisgICAgICAgIHNlbGYuc2xvd0dldEJ5SWQgPSB7fQorICAgICAgICBz
ZWxmLnNsb3dQdXRCeUlkID0ge30KKyAgICAgICAgc2VsZi50b3RhbFNsb3dHZXRCeUlkID0gMAor
ICAgICAgICBzZWxmLnRvdGFsU2xvd1B1dEJ5SWQgPSAwCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwg
ZmlsZSk6CisgICAgICAgIGZvciBsaW5lIGluIGZpbGU6CisgICAgICAgICAgICBtYXRjaCA9IHJl
Lm1hdGNoKGljU3RhdFJlY29yZCwgbGluZSkKKyAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAg
ICAgICAgICAgIG9wZXJhdGlvbiA9IG1hdGNoLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgYmFz
ZSA9IG1hdGNoLmdyb3VwKDIpCisgICAgICAgICAgICAgICAgcHJvcGVydHkgPSBtYXRjaC5ncm91
cCgzKQorICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gbWF0Y2guZ3JvdXAoNCkuc3RyaXAoKQor
ICAgICAgICAgICAgICAgIGNvdW50ID0gaW50KG1hdGNoLmdyb3VwKDUpKQorICAgICAgICAgICAg
ICAgIHJlY29yZEtleSA9IChvcGVyYXRpb24sIGJhc2UsIHByb3BlcnR5LCBsb2NhdGlvbikKKwor
ICAgICAgICAgICAgICAgIGlmIHJlY29yZEtleSBub3QgaW4gc2VsZi5jb21iaW5lZFJlY29yZHM6
CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29tYmluZWRSZWNvcmRzW3JlY29yZEtleV0gPSBj
b3VudAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29t
YmluZWRSZWNvcmRzW3JlY29yZEtleV0gKz0gY291bnQKKworICAgICAgICAgICAgICAgIGlmIG9w
ZXJhdGlvbi5zdGFydHN3aXRoKGdldEJ5SWRQcmVmaXgpOgorICAgICAgICAgICAgICAgICAgICBz
ZWxmLnRvdGFsU2xvd0dldEJ5SWQgKz0gY291bnQKKworICAgICAgICAgICAgICAgICAgICBzbG93
R2V0QnlJZEtleSA9IChiYXNlLCBwcm9wZXJ0eSkKKyAgICAgICAgICAgICAgICAgICAgaWYgc2xv
d0dldEJ5SWRLZXkgbm90IGluIHNlbGYuc2xvd0dldEJ5SWQ6CisgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLnNsb3dHZXRCeUlkW3Nsb3dHZXRCeUlkS2V5XSA9IGNvdW50CisgICAgICAgICAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNsb3dHZXRCeUlk
W3Nsb3dHZXRCeUlkS2V5XSArPSBjb3VudAorCisgICAgICAgICAgICAgICAgZWxpZiBvcGVyYXRp
b24uc3RhcnRzd2l0aChwdXRCeUlkUHJlZml4KToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50
b3RhbFNsb3dQdXRCeUlkICs9IGNvdW50CisKKyAgICAgICAgICAgICAgICAgICAgc2xvd1B1dEJ5
SWRLZXkgPSAoYmFzZSwgcHJvcGVydHkpCisgICAgICAgICAgICAgICAgICAgIGlmIHNsb3dQdXRC
eUlkS2V5IG5vdCBpbiBzZWxmLnNsb3dQdXRCeUlkOgorICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5zbG93UHV0QnlJZFtzbG93UHV0QnlJZEtleV0gPSBjb3VudAorICAgICAgICAgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zbG93UHV0QnlJZFtzbG93
UHV0QnlJZEtleV0gKz0gY291bnQKKworICAgIGRlZiBkdW1wU3RhdHMoc2VsZik6CisgICAgICAg
IHByaW50ICJUb3RhbCBTbG93IGdldEJ5SWQgPSB7MDo+MTMsZH0iLmZvcm1hdChzZWxmLnRvdGFs
U2xvd0dldEJ5SWQpCisgICAgICAgIHByaW50ICJUb3RhbCBTbG93IHB1dEJ5SWQgPSB7MDo+MTMs
ZH0iLmZvcm1hdChzZWxmLnRvdGFsU2xvd1B1dEJ5SWQpCisKKyAgICAgICAgcHJpbnQgIk9wZXJh
dGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNlICAgICAgICAgICAgICAgICAgUHJv
cGVydHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhdGlvbiAgICAgICAgICBDb3Vu
dCAgJSB0b3QiCisgICAgICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSAgLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0gICBzbG93IgorCisgICAgICAgIGtleXMg
PSBzb3J0ZWQoc2VsZi5jb21iaW5lZFJlY29yZHMua2V5cygpLCBrZXk9bGFtYmRhIHQ6IHNlbGYu
Y29tYmluZWRSZWNvcmRzW3RdLCByZXZlcnNlPVRydWUpCisgICAgICAgIGZvciBrZXkgaW4ga2V5
czoKKyAgICAgICAgICAgIGNvdW50ID0gc2VsZi5jb21iaW5lZFJlY29yZHNba2V5XQorICAgICAg
ICAgICAgb3BlcmF0aW9uID0ga2V5WzBdCisgICAgICAgICAgICBiYXNlID0ga2V5WzFdCisgICAg
ICAgICAgICBwcm9wZXJ0eSA9IGtleVsyXQorCisgICAgICAgICAgICBpZiBvcGVyYXRpb24uc3Rh
cnRzd2l0aChnZXRCeUlkUHJlZml4KToKKyAgICAgICAgICAgICAgICBzbG93UGVyY2VudCA9ICIg
IHswOj40LjFmfSUiLmZvcm1hdChmbG9hdChzZWxmLnNsb3dHZXRCeUlkWyhiYXNlLCBwcm9wZXJ0
eSldICogMTAwKSAvIGZsb2F0KHNlbGYudG90YWxTbG93R2V0QnlJZCkpCisgICAgICAgICAgICBl
bGlmIG9wZXJhdGlvbi5zdGFydHN3aXRoKHB1dEJ5SWRQcmVmaXgpOgorICAgICAgICAgICAgICAg
IHNsb3dQZXJjZW50ID0gIiAgezA6PjQuMWZ9JSIuZm9ybWF0KGZsb2F0KHNlbGYuc2xvd1B1dEJ5
SWRbKGJhc2UsIHByb3BlcnR5KV0gKiAxMDApIC8gZmxvYXQoc2VsZi50b3RhbFNsb3dQdXRCeUlk
KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2xvd1BlcmNlbnQgPSAiIgor
CisgICAgICAgICAgICBpZiBsZW4ocHJvcGVydHkpID4gMzY6CisgICAgICAgICAgICAgICAgcHJv
cGVydHkgPSBwcm9wZXJ0eVswOjMyXSArICIuLi4iCisKKyAgICAgICAgICAgIHByaW50ICJ7MDoz
NX0gIHsxOjIwfSAgezI6MzZ9ICB7MzoxMn0gIHs0Oj45ZH17NX0iLmZvcm1hdChvcGVyYXRpb25b
MDozNF0sIGJhc2UsIHByb3BlcnR5LCBrZXlbM10sIGNvdW50LCBzbG93UGVyY2VudCkKKworCitk
ZWYgdXNhZ2UoKToKKyAgICBwcmludCAiVXNhZ2U6IHswfSBbaWMtc3RhdHMtZmlsZV0iLmZvcm1h
dChzeXMuYXJndlswXSkKKyAgICBleGl0KDEpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6
CisgICAgaWYgbGVuKHN5cy5hcmd2KSA+IDE6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBy
aW50ICJUcnlpbmcgdG8gb3BlbiBcInswfVwiLi4uIi5mb3JtYXQoc3lzLmFyZ3ZbMV0pCisgICAg
ICAgICAgICBmaWxlID0gb3BlbihzeXMuYXJndlsxXSwgInIiKQorICAgICAgICBleGNlcHQgSU9F
cnJvciBhcyBlOgorICAgICAgICAgICAgcHJpbnQgIkNvdWxkbid0IG9wZW4gezB9LCB7MX0iLmZv
cm1hdChzeXMuYXJndlsxXSwgZS5zdHJlcnJvcikKKyAgICAgICAgICAgIHVzYWdlKCkKKyAgICAg
ICAgZXhjZXB0OgorICAgICAgICAgICAgcHJpbnQgIlVuZXhwZWN0ZWQgZXJyb3I6Iiwgc3lzLmV4
Y19pbmZvKClbMF0KKyAgICAgICAgICAgIHVzYWdlKCkKKyAgICBlbHNlOgorICAgICAgICBmaWxl
ID0gc3lzLnN0ZGluCisKKyAgICBpY1N0YXRzID0gSUNTdGF0cygpCisgICAgaWNTdGF0cy5wYXJz
ZShmaWxlKQorICAgIGljU3RhdHMuZHVtcFN0YXRzKCkKClByb3BlcnR5IGNoYW5nZXMgb246IFRv
b2xzL1NjcmlwdHMvaWMtc3RhdHMucHkKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUK
IyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cg==
</data>
<flag name="review"
          id="383619"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>