<?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>151079</bug_id>
          
          <creation_ts>2015-11-09 22:52:54 -0800</creation_ts>
          <short_desc>Create an FTLExceptionHandlerManager abstraction</short_desc>
          <delta_ts>2015-11-10 14:51:35 -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>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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sukolsak</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1140691</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-09 22:52:54 -0800</bug_when>
    <thetext>I think some of the exception handling state and code in FTLCompile can use a nice
abstraction or just a different file to live in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140692</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-09 23:02:10 -0800</bug_when>
    <thetext>This should also handle the case where it shouldn&apos;t bother generating call site indices for tail calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140881</commentid>
    <comment_count>2</comment_count>
      <attachid>265212</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-10 11:54:30 -0800</bug_when>
    <thetext>Created attachment 265212
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140883</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-10 11:56:23 -0800</bug_when>
    <thetext>Attachment 265212 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLExceptionHandlerManager.h:45:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/ftl/FTLExceptionHandlerManager.h:54:  The parameter name &quot;state&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140910</commentid>
    <comment_count>4</comment_count>
      <attachid>265212</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-11-10 12:54:54 -0800</bug_when>
    <thetext>Comment on attachment 265212
patch

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

r=me with comments.

&gt; Source/JavaScriptCore/CMakeLists.txt:-993
&gt; +        ftl/FTLDataSection.cpp
&gt;          ftl/FTLDWARFDebugLineInfo.cpp
&gt;          ftl/FTLDWARFRegister.cpp
&gt; -        ftl/FTLDataSection.cpp

nit: Technically, FTLDWARFRegister.cpp should come before FTLDataSection.cpp according to ASCII sort order.  However, I see that the vcxproj files do it differently.  I&apos;ll let you decide on which is best.

&gt; Source/JavaScriptCore/ftl/FTLExceptionHandlerManager.cpp:122
&gt; +    if (!exit.m_exceptionHandlerCallSiteIndex)
&gt; +        exit.m_exceptionHandlerCallSiteIndex = m_state.jitCode-&gt;common.addUniqueCallSiteIndex(origin);

This part is new, and not present in the original generateOrGetAlreadyGeneratedCallSiteIndex().  I see that this used to be assigned at line 613 in fixFunctionBasedOnStackMaps(), and it still is assigned there.  Is there a reason that we need to have a separate assignment here?  Can it be one or the other (and not both)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140914</commentid>
    <comment_count>5</comment_count>
      <attachid>265212</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-10 13:07:53 -0800</bug_when>
    <thetext>Comment on attachment 265212
patch

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

&gt;&gt; Source/JavaScriptCore/ftl/FTLExceptionHandlerManager.cpp:122
&gt;&gt; +        exit.m_exceptionHandlerCallSiteIndex = m_state.jitCode-&gt;common.addUniqueCallSiteIndex(origin);
&gt; 
&gt; This part is new, and not present in the original generateOrGetAlreadyGeneratedCallSiteIndex().  I see that this used to be assigned at line 613 in fixFunctionBasedOnStackMaps(), and it still is assigned there.  Is there a reason that we need to have a separate assignment here?  Can it be one or the other (and not both)?

You&apos;re right.
We should never need to generate one here.
I&apos;ll just assert that we have a valid callsiteindex here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140961</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-10 14:51:35 -0800</bug_when>
    <thetext>landed in:
http://trac.webkit.org/changeset/192273</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265212</attachid>
            <date>2015-11-10 11:54:30 -0800</date>
            <delta_ts>2015-11-10 12:54:54 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>33421</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyMjU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBA
CisyMDE1LTExLTEwICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IENyZWF0ZSBhbiBGVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlciBhYnN0cmFjdGlvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMDc5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQmVmb3JlLCB3ZSB1c2Vk
IHRvIG1hbmFnZSB0aGUge3N0YWNrbWFwUmVjb3JkSW5kZXggPT4gT1NSRXhpdH0gcmVsYXRpb25z
aGlwCisgICAgICAgIGZvciBleGNlcHRpb24gaGFuZGxlcnMgd2l0aCBhIGxvY2FsbHkgYWxsb2Nh
dGVkIEhhc2hNYXAgYW5kIGEgZmV3IGRpZmZlcmVudAorICAgICAgICBsYW1iZGFzIGFuZCByYW5k
b20gY2hlY2tzLiBJdCdzIGNsZWFuZXIgYW5kIG1vcmUgbWFuYWdlYWJsZSB0byBqdXN0IGNyZWF0
ZSAKKyAgICAgICAgYSBjbGFzcyB0aGF0IGhhbmRsZXMgdGhpcyBhYnN0cmFjdGlvbiBmb3IgdXMu
IFRoaXMgY2xhc3MgcHJvdmlkZXMgbmljZSBoZWxwZXIgCisgICAgICAgIGZ1bmN0aW9ucyBmb3Ig
ZXZlcnl0aGluZyB3ZSBuZWVkLiBUaGlzIGFic3RyYWN0aW9uIG1ha2VzIHJlYWRpbmcgdGhlIGNv
ZGUgZWFzaWVyLgorICAgICAgICBBbmQgaXQgd2lsbCBhbHNvIG1ha2VzIGhhY2tpbmcgb24gdGhl
IGNvZGUgaW4gdGhlIGZ1dHVyZSBlYXNpZXIuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
LmZpbHRlcnM6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdEJhc2UuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpPU1JFeGl0QmFzZTo6T1NSRXhpdEJhc2UpOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjptbUFsbG9jYXRlRGF0YVNlY3Rpb24pOgorICAgICAgICAq
IGZ0bC9GVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpGVEw6OkV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjpFeGNlcHRpb25IYW5kbGVyTWFuYWdlcik6
CisgICAgICAgIChKU0M6OkZUTDo6RXhjZXB0aW9uSGFuZGxlck1hbmFnZXI6OmFkZE5ld0V4aXQp
OgorICAgICAgICAoSlNDOjpGVEw6OkV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjpnZXRPclB1dEJ5
SWRDYWxsT3BlcmF0aW9uRXhjZXB0aW9uVGFyZ2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGNl
cHRpb25IYW5kbGVyTWFuYWdlcjo6bGF6eVNsb3dQYXRoRXhjZXB0aW9uVGFyZ2V0KToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGNlcHRpb25IYW5kbGVyTWFuYWdlcjo6Z2V0QnlJZE9TUkV4aXQpOgor
ICAgICAgICAoSlNDOjpGVEw6OkV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjpnZXRDYWxsT1NSRXhp
dENvbW1vbik6CisgICAgICAgIChKU0M6OkZUTDo6RXhjZXB0aW9uSGFuZGxlck1hbmFnZXI6Omdl
dENhbGxPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGNlcHRpb25IYW5kbGVyTWFuYWdl
cjo6cHJvY3VyZUNhbGxTaXRlSW5kZXgpOgorICAgICAgICAqIGZ0bC9GVExFeGNlcHRpb25IYW5k
bGVyTWFuYWdlci5oOiBBZGRlZC4KKwogMjAxNS0xMS0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgogCiAgICAgICAgIFtCM10gQWRkIG1vcmUgdGVzdHMgZm9yIENoZWNrIGFuZCBm
aXggYnVncyB0aGlzIGZvdW5kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CShyZXZpc2lvbiAxOTIyMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTk4OCw5ICs5ODgsMTAgQEAgaWYgKEVOQUJMRV9GVExfSklU
KQogICAgICAgICBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAogICAgICAgICBmdGwvRlRMQ29tbW9u
VmFsdWVzLmNwcAogICAgICAgICBmdGwvRlRMQ29tcGlsZS5jcHAKKyAgICAgICAgZnRsL0ZUTERh
dGFTZWN0aW9uLmNwcAogICAgICAgICBmdGwvRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmNwcAogICAg
ICAgICBmdGwvRlRMRFdBUkZSZWdpc3Rlci5jcHAKLSAgICAgICAgZnRsL0ZUTERhdGFTZWN0aW9u
LmNwcAorICAgICAgICBmdGwvRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuY3BwCiAgICAgICAg
IGZ0bC9GVExFeGl0QXJndW1lbnQuY3BwCiAgICAgICAgIGZ0bC9GVExFeGl0QXJndW1lbnRGb3JP
cGVyYW5kLmNwcAogICAgICAgICBmdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE5MjIwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRD
b3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUyNSw2ICs1MjUsNyBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTERhdGFTZWN0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExEV0FSRkRlYnVnTGluZUluZm8uY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTERXQVJGUmVnaXN0ZXIuY3BwIiAvPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0QXJndW1lbnQuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRBcmd1bWVudEZvck9wZXJh
bmQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRQcm9wZXJ0
eVZhbHVlLmNwcCIgLz4KQEAgLTEyOTAsNiArMTI5MSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxmdGxcRlRMRGF0YVNlY3Rpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGZ0bFxGVExEV0FSRkRlYnVnTGluZUluZm8uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExEV0FSRlJlZ2lzdGVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxmdGxcRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0QXJndW1lbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGZ0bFxGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdEFyZ3VtZW50TGlzdC5oIiAvPgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNp
b24gMTkyMjAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYz
LDYgKzE1NjMsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTERXQVJGUmVn
aXN0ZXIuY3BwIj4KICAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFn
ZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdEFyZ3VtZW50LmNwcCI+CiAgICAg
ICA8RmlsdGVyPmZ0bDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtNDEyMCw2ICs0MTIz
LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExEV0FSRlJlZ2lzdGVyLmgi
PgogICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlci5oIj4KKyAg
ICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdEFyZ3VtZW50LmgiPgogICAgICAgPEZpbHRlcj5mdGw8
L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxOTIyMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTIwNiw2
ICsxMjA2LDggQEAKIAkJNzk3RTA3QUExQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNh
bEVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3OTdFMDdBODFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1l
bnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
OUM0QjE1RDFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRp
b25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3OUM0QjE1QjFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2
YXRpb25QaGFzZS5jcHAgKi87IH07CiAJCTc5QzRCMTVFMUJBMjE1OEYwMEZENTkyRSAvKiBERkdM
aXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUM0QjE1QzFCQTIxNThGMDBGRDU5MkUgLyogREZH
TGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTc5REY2NkIwMUJGMjZBNTcwMDAxQ0YxMSAv
KiBGVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OURGNjZBRTFCRjI2QTU3MDAwMUNGMTEgLyogRlRMRXhj
ZXB0aW9uSGFuZGxlck1hbmFnZXIuY3BwICovOyB9OworCQk3OURGNjZCMTFCRjI2QTU3MDAwMUNG
MTEgLyogRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5REY2NkFGMUJGMjZBNTcwMDAxQ0YxMSAvKiBGVExF
eGNlcHRpb25IYW5kbGVyTWFuYWdlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTc5RUUwQkZGMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVu
dmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc5RUUwQkZEMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmNwcCAq
LzsgfTsKIAkJNzlFRTBDMDAxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RUUwQkZF
MUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlGOEZDMUUxQjlGRUQwRjAwQ0E2
NkFCIC8qIERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RjhGQzFDMUI5RkVEMEYwMENBNjZBQiAv
KiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHAgKi87IH07CkBAIC0zMjUyLDYgKzMy
NTQsOCBAQAogCQk3OTdFMDdBODFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlDNEIxNUIx
QkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGl2ZUNhdGNoVmFy
aWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHTGl2ZUNhdGNoVmFyaWFi
bGVQcmVzZXJ2YXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5
QzRCMTVDMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlv
blBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xpdmVDYXRjaFZh
cmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJs
ZVByZXNlcnZhdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5REY2
NkFFMUJGMjZBNTcwMDAxQ0YxMSAvKiBGVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExFeGNlcHRpb25IYW5kbGVyTWFu
YWdlci5jcHA7IHBhdGggPSBmdGwvRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OURGNjZBRjFCRjI2QTU3MDAwMUNGMTEgLyogRlRM
RXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuaDsgcGF0aCA9IGZ0bC9GVExFeGNlcHRpb25I
YW5kbGVyTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUVFMEJGRDFC
NEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUVudmlyb25tZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlFRTBCRkUxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxl
RW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVF
bnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUY4RkMxQzFCOUZF
RDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhh
c2UuY3BwOyBwYXRoID0gZGZnL0RGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQzMzgsNiArNDM0Miw4IEBACiAJCQkJMkFDOTIy
QkExOEExNjE4MjAwM0NFMEZCIC8qIEZUTERXQVJGRGVidWdMaW5lSW5mby5oICovLAogCQkJCTBG
OUM1RTVDMThFMzVGNUUwMEQ0MzFDMyAvKiBGVExEV0FSRlJlZ2lzdGVyLmNwcCAqLywKIAkJCQkw
RjlDNUU1RDE4RTM1RjVFMDBENDMxQzMgLyogRlRMRFdBUkZSZWdpc3Rlci5oICovLAorCQkJCTc5
REY2NkFFMUJGMjZBNTcwMDAxQ0YxMSAvKiBGVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlci5jcHAg
Ki8sCisJCQkJNzlERjY2QUYxQkYyNkE1NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRsZXJN
YW5hZ2VyLmggKi8sCiAJCQkJMEYyMzVCQkQxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1
bWVudC5jcHAgKi8sCiAJCQkJMEYyMzVCQkUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1
bWVudC5oICovLAogCQkJCTBGMjM1QkJGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1l
bnRGb3JPcGVyYW5kLmNwcCAqLywKQEAgLTY1ODIsNiArNjU4OCw3IEBACiAJCQkJMEY0NTcwMzkx
QkU0NEM5MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2RlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkVDODU3NzFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkVDODU3OTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTc5REY2NkIxMUJGMjZBNTcwMDAxQ0YxMSAvKiBGVExFeGNl
cHRpb25IYW5kbGVyTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1N0ExQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODU3QzFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRUM4NTdFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQu
aCBpbiBIZWFkZXJzICovLApAQCAtODcwMCw2ICs4NzA3LDcgQEAKIAkJCQkwRjJCNjZGRTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzRD
NDU3RTFCQzcyNTQ5MDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCURFQTdFMjQ0MUJCQzY3NzIwMEQ3ODQ0MCAvKiBKU1R5cGVkQXJy
YXlWaWV3UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTc5REY2NkIwMUJGMjZBNTcw
MDAxQ0YxMSAvKiBGVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4NkUzQzYxQTE2N0JBQkVFMDA2RDc2MEEgLyogSlNWYWx1ZS5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTE0QkQ1QTMyMEEzRTkxRjYwMEJBRjU5QyAvKiBKU1ZhbHVlUmVmLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg2RTNDNjFDMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5l
Lm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0QmFzZS5oCShyZXZpc2lvbiAxOTIyMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDYgQEAgc3Ry
dWN0IE9TUkV4aXRCYXNlIHsKICAgICAgICAgLCBtX2NvdW50KDApCiAgICAgICAgICwgbV9jb2Rl
T3JpZ2luKG9yaWdpbikKICAgICAgICAgLCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZShvcmln
aW5Gb3JQcm9maWxlKQotICAgICAgICAsIG1fZXhjZXB0aW9uSGFuZGxlckNhbGxTaXRlSW5kZXgo
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQogICAgICAgICAsIG1faXNFeGNl
cHRpb25IYW5kbGVyKGZhbHNlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fY29kZU9yaWdpbi5p
c1NldCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAko
cmV2aXNpb24gMTkyMjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkRGR09wZXJh
dGlvbnMuaCIKICNpbmNsdWRlICJEYXRhVmlldy5oIgogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5o
IgorI2luY2x1ZGUgIkZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiRlRM
RXhpdFRodW5rR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiRlRMSW5saW5lQ2FjaGVTaXplLmgiCiAj
aW5jbHVkZSAiRlRMSklUQ29kZS5oIgpAQCAtNDY2LDcgKzQ2Nyw3IEBAIHN0YXRpYyBSZWdpc3Rl
clNldCB1c2VkUmVnaXN0ZXJzRm9yKGNvbnMKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2FsbFR5
cGU+Ci12b2lkIGFkanVzdENhbGxJQ3NGb3JTdGFja21hcHMoVmVjdG9yPENhbGxUeXBlPiYgY2Fs
bHMsIFN0YWNrTWFwczo6UmVjb3JkTWFwJiByZWNvcmRNYXAsIHN0ZDo6ZnVuY3Rpb248Q2FsbFNp
dGVJbmRleCAodWludDMyX3QgcmVjb3JkSW5kZXgsIENvZGVPcmlnaW4gb3JpZ2luKT4gZ2VuZXJh
dGVDYWxsU2l0ZUluZGV4RnVuY3Rpb24sIHN0ZDo6ZnVuY3Rpb248T1NSRXhpdCogKHVpbnQzMl90
IHJlY29yZEluZGV4KT4gZ2V0Q29ycmVzcG9uZGluZ09TUkV4aXQpCit2b2lkIGFkanVzdENhbGxJ
Q3NGb3JTdGFja21hcHMoVmVjdG9yPENhbGxUeXBlPiYgY2FsbHMsIFN0YWNrTWFwczo6UmVjb3Jk
TWFwJiByZWNvcmRNYXAsIEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyJiBleGNlcHRpb25IYW5kbGVy
TWFuYWdlcikKIHsKICAgICAvLyBIYW5kbGluZyBKUyBjYWxscyBpcyB3ZWlyZDogd2UgbmVlZCB0
byBlbnN1cmUgdGhhdCB3ZSBzb3J0IHRoZW0gYnkgdGhlIFBDIGluIExMVk0KICAgICAvLyBnZW5l
cmF0ZWQgY29kZS4gVGhhdCBpbXBsaWVzIGZpcnN0IHBydW5pbmcgdGhlIG9uZXMgdGhhdCBMTFZN
IGRpZG4ndCBnZW5lcmF0ZS4KQEAgLTQ4NCw4ICs0ODUsOCBAQCB2b2lkIGFkanVzdENhbGxJQ3NG
b3JTdGFja21hcHMoVmVjdG9yPENhCiAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBp
dGVyLT52YWx1ZS5zaXplKCk7ICsraikgewogICAgICAgICAgICAgQ2FsbFR5cGUgY29weSA9IGNh
bGw7CiAgICAgICAgICAgICBjb3B5Lm1faW5zdHJ1Y3Rpb25PZmZzZXQgPSBpdGVyLT52YWx1ZVtq
XS5yZWNvcmQuaW5zdHJ1Y3Rpb25PZmZzZXQ7Ci0gICAgICAgICAgICBjb3B5LnNldENhbGxTaXRl
SW5kZXgoZ2VuZXJhdGVDYWxsU2l0ZUluZGV4RnVuY3Rpb24oaXRlci0+dmFsdWVbal0uaW5kZXgs
IGNvcHkuY2FsbFNpdGVEZXNjcmlwdGlvbk9yaWdpbigpKSk7Ci0gICAgICAgICAgICBjb3B5LnNl
dENvcnJlc3BvbmRpbmdHZW5lcmljVW53aW5kT1NSRXhpdChnZXRDb3JyZXNwb25kaW5nT1NSRXhp
dChpdGVyLT52YWx1ZVtqXS5pbmRleCkpOworICAgICAgICAgICAgY29weS5zZXRDYWxsU2l0ZUlu
ZGV4KGV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLnByb2N1cmVDYWxsU2l0ZUluZGV4KGl0ZXItPnZh
bHVlW2pdLmluZGV4LCBjb3B5KSk7CisgICAgICAgICAgICBjb3B5LnNldENvcnJlc3BvbmRpbmdH
ZW5lcmljVW53aW5kT1NSRXhpdChleGNlcHRpb25IYW5kbGVyTWFuYWdlci5nZXRDYWxsT1NSRXhp
dChpdGVyLT52YWx1ZVtqXS5pbmRleCwgY29weSkpOwogCiAgICAgICAgICAgICBjYWxscy5hcHBl
bmQoY29weSk7CiAgICAgICAgIH0KQEAgLTUwMiwyOSArNTAzLDcgQEAgc3RhdGljIHZvaWQgZml4
RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgIFZNJiB2bSA9IGdyYXBoLm1fdm07CiAgICAg
U3RhY2tNYXBzJiBzdGFja21hcHMgPSBqaXRDb2RlLT5zdGFja21hcHM7CiAKLSAgICAvLyBXZSBm
aWxsIHRoaXMgd2hlbiBnZW5lcmF0aW5nIE9TUiBleGl0cyB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQg
dmlhIGdlbmVyaWNVbndpbmQoKQotICAgIC8vIG9yIGxhenkgc2xvdyBwYXRoIGV4Y2VwdGlvbiBj
aGVja3MuCi0gICAgLy8gVGhhdCB3YXksIHdoZW4gd2UgYXNzaWduIGEgQ2FsbFNpdGVJbmRleCB0
byB0aGUgQ2FsbC9HZXRCeUlkL1B1dEJ5SWQvTGF6eVNsb3dQYXRoLCB3ZSBhc3NpZ24KLSAgICAv
LyBpdCB0aGUgcHJvcGVyIENhbGxTaXRlSW5kZXggdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgT1NS
RXhpdCBleGNlcHRpb24gaGFuZGxlci4KLSAgICBIYXNoTWFwPHVpbnQzMl90LCBzaXplX3QsIFdU
Rjo6SW50SGFzaDx1aW50MzJfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8
dWludDMyX3Q+PiByZWNvcmRJbmRleFRvR2VuZXJpY1Vud2luZE9yTGF6eVNsb3dQYXRoT1NSRXhp
dDsKLSAgICBhdXRvIGdlbmVyYXRlT3JHZXRBbHJlYWR5R2VuZXJhdGVkQ2FsbFNpdGVJbmRleCA9
IFsmXSAodWludDMyX3QgcmVjb3JkSW5kZXgsIENvZGVPcmlnaW4gb3JpZ2luKSAtPiBDYWxsU2l0
ZUluZGV4IHsKLSAgICAgICAgYXV0byBmaW5kUmVzdWx0ID0gcmVjb3JkSW5kZXhUb0dlbmVyaWNV
bndpbmRPckxhenlTbG93UGF0aE9TUkV4aXQuZmluZChyZWNvcmRJbmRleCk7Ci0gICAgICAgIGlm
IChmaW5kUmVzdWx0ID09IHJlY29yZEluZGV4VG9HZW5lcmljVW53aW5kT3JMYXp5U2xvd1BhdGhP
U1JFeGl0LmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmppdENvZGUtPmNvbW1vbi5h
ZGRVbmlxdWVDYWxsU2l0ZUluZGV4KG9yaWdpbik7Ci0gICAgICAgIHNpemVfdCBvc3JFeGl0SW5k
ZXggPSBmaW5kUmVzdWx0LT52YWx1ZTsKLSAgICAgICAgcmV0dXJuIHN0YXRlLmppdENvZGUtPm9z
ckV4aXRbb3NyRXhpdEluZGV4XS5tX2V4Y2VwdGlvbkhhbmRsZXJDYWxsU2l0ZUluZGV4OwotICAg
IH07Ci0gICAgYXV0byBqc0NhbGxPU1JFeGl0Rm9yUmVjb3JkSW5kZXggPSBbJl0gKHVpbnQzMl90
IHJlY29yZEluZGV4KSAtPiBPU1JFeGl0KiB7Ci0gICAgICAgIGF1dG8gZmluZFJlc3VsdCA9IHJl
Y29yZEluZGV4VG9HZW5lcmljVW53aW5kT3JMYXp5U2xvd1BhdGhPU1JFeGl0LmZpbmQocmVjb3Jk
SW5kZXgpOwotICAgICAgICBpZiAoZmluZFJlc3VsdCA9PSByZWNvcmRJbmRleFRvR2VuZXJpY1Vu
d2luZE9yTGF6eVNsb3dQYXRoT1NSRXhpdC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgICAgIHNpemVfdCBvc3JFeGl0SW5kZXggPSBmaW5kUmVzdWx0LT52YWx1ZTsK
LSAgICAgICAgT1NSRXhpdCYgZXhpdCA9IHN0YXRlLmppdENvZGUtPm9zckV4aXRbb3NyRXhpdElu
ZGV4XTsKLSAgICAgICAgaWYgKCFleGl0Lm1fZGVzY3JpcHRvci5tX2lzRXhjZXB0aW9uRnJvbUpT
Q2FsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gJmV4aXQ7
Ci0gICAgfTsKKyAgICBFeGNlcHRpb25IYW5kbGVyTWFuYWdlciBleGNlcHRpb25IYW5kbGVyTWFu
YWdlcihzdGF0ZSk7CiAgICAgCiAgICAgaW50IGxvY2Fsc09mZnNldCA9IG9mZnNldE9mU3RhY2tS
ZWdpb24ocmVjb3JkTWFwLCBzdGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQpICsgZ3JhcGgubV9uZXh0
TWFjaGluZUxvY2FsOwogICAgIGludCB2YXJhcmdzU3BpbGxTbG90c09mZnNldCA9IG9mZnNldE9m
U3RhY2tSZWdpb24ocmVjb3JkTWFwLCBzdGF0ZS52YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQp
OwpAQCAtNjEwLDcgKzU4OSw3IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNr
TWFwcygKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChleGl0Lm1fZGVzY3JpcHRvci5t
X3NlbWFudGljQ29kZU9yaWdpbkZvckNhbGxGcmFtZUhlYWRlci5pc1NldCgpKTsKICAgICAgICAg
ICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSBzdGF0ZS5qaXRDb2RlLT5jb21t
b24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChleGl0Lm1fZGVzY3JpcHRvci5tX3NlbWFudGljQ29k
ZU9yaWdpbkZvckNhbGxGcmFtZUhlYWRlcik7CiAgICAgICAgICAgICAgICAgZXhpdC5tX2V4Y2Vw
dGlvbkhhbmRsZXJDYWxsU2l0ZUluZGV4ID0gY2FsbFNpdGVJbmRleDsKLSAgICAgICAgICAgICAg
ICByZWNvcmRJbmRleFRvR2VuZXJpY1Vud2luZE9yTGF6eVNsb3dQYXRoT1NSRXhpdC5hZGQoaXRl
ci0+dmFsdWVbal0uaW5kZXgsIHN0YXRlLmppdENvZGUtPm9zckV4aXQuc2l6ZSgpIC0gMSk7Cisg
ICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuYWRkTmV3RXhpdChpdGVyLT52
YWx1ZVtqXS5pbmRleCwgc3RhdGUuaml0Q29kZS0+b3NyRXhpdC5zaXplKCkgLSAxKTsKIAogICAg
ICAgICAgICAgICAgIGlmIChleGl0RGVzY3JpcHRvci5tX2lzRXhjZXB0aW9uRnJvbUpTQ2FsbCkK
ICAgICAgICAgICAgICAgICAgICAgZXhpdC5nYXRoZXJSZWdpc3RlcnNUb1NwaWxsRm9yQ2FsbElm
RXhjZXB0aW9uKHN0YWNrbWFwcywgcmVjb3JkKTsKQEAgLTY4MywxNiArNjYyLDExIEBAIHN0YXRp
YyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKIAogICAgICAgICBWZWN0b3I8c3Rk
OjpwYWlyPENDYWxsSGVscGVyczo6SnVtcExpc3QsIENvZGVMb2NhdGlvbkxhYmVsPj4gZXhjZXB0
aW9uSnVtcHNUb0xpbms7CiAgICAgICAgIGF1dG8gYWRkTmV3RXhjZXB0aW9uSnVtcElmTmVjZXNz
YXJ5ID0gWyZdICh1aW50MzJfdCByZWNvcmRJbmRleCkgewotICAgICAgICAgICAgYXV0byBmaW5k
UmVzdWx0ID0gcmVjb3JkSW5kZXhUb0dlbmVyaWNVbndpbmRPckxhenlTbG93UGF0aE9TUkV4aXQu
ZmluZChyZWNvcmRJbmRleCk7Ci0gICAgICAgICAgICBpZiAoZmluZFJlc3VsdCA9PSByZWNvcmRJ
bmRleFRvR2VuZXJpY1Vud2luZE9yTGF6eVNsb3dQYXRoT1NSRXhpdC5lbmQoKSkKKyAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvblRhcmdldCA9IGV4Y2VwdGlvbkhhbmRsZXJN
YW5hZ2VyLmdldE9yUHV0QnlJZENhbGxPcGVyYXRpb25FeGNlcHRpb25UYXJnZXQocmVjb3JkSW5k
ZXgpOworICAgICAgICAgICAgaWYgKCFleGNlcHRpb25UYXJnZXQpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBzaXplX3Qgb3NyRXhpdEluZGV4ID0gZmluZFJl
c3VsdC0+dmFsdWU7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5qaXRDb2RlLT5v
c3JFeGl0W29zckV4aXRJbmRleF0ubV9kZXNjcmlwdG9yLm1fd2lsbEFycml2ZUF0T1NSRXhpdEZy
b21HZW5lcmljVW53aW5kKTsKLSAgICAgICAgICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGlu
Zm8gPSBzdGF0ZS5maW5hbGl6ZXItPm9zckV4aXRbb3NyRXhpdEluZGV4XTsKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGluZm8ubV9nZXRBbmRQdXRCeUlkQ2FsbE9wZXJhdGlvbkV4Y2VwdGlv
bk9TUkV4aXRFbnRyYW5jZS5pc1NldCgpKTsKICAgICAgICAgICAgIGV4Y2VwdGlvbkp1bXBzVG9M
aW5rLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcihDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0KCksIHN0YXRlLmZpbmFsaXplci0+ZXhpdFRodW5rc0xpbmtCdWZmZXItPmxvY2F0
aW9uT2YoaW5mby5tX2dldEFuZFB1dEJ5SWRDYWxsT3BlcmF0aW9uRXhjZXB0aW9uT1NSRXhpdEVu
dHJhbmNlKSkpOworICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyKENDYWxsSGVscGVyczo6
SnVtcExpc3QoKSwgZXhjZXB0aW9uVGFyZ2V0KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfTsKICAgICAgICAgCkBAIC03MTgsNyArNjkyLDcgQEAgc3RhdGljIHZvaWQgZml4
RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlID0g
cmVjb3JkLmxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgICAgICAgICAg
Y29kZUJsb2NrLCBjb2RlT3JpZ2luLCBnZW5lcmF0ZU9yR2V0QWxyZWFkeUdlbmVyYXRlZENhbGxT
aXRlSW5kZXgoaXRlci0+dmFsdWVbaV0uaW5kZXgsIGNvZGVPcmlnaW4pLCB1c2VkUmVnaXN0ZXJz
LCBKU1ZhbHVlUmVncyhiYXNlKSwKKyAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLCBjb2Rl
T3JpZ2luLCBleGNlcHRpb25IYW5kbGVyTWFuYWdlci5wcm9jdXJlQ2FsbFNpdGVJbmRleChpdGVy
LT52YWx1ZVtpXS5pbmRleCwgY29kZU9yaWdpbiksIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdz
KGJhc2UpLAogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHQpKTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBib29sIGFkZGVkVW5pcXVlRXhjZXB0aW9uSnVt
cCA9IGFkZE5ld0V4Y2VwdGlvbkp1bXBJZk5lY2Vzc2FyeShpdGVyLT52YWx1ZVtpXS5pbmRleCk7
CkBAIC03MzMsMTMgKzcwNyw4IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNr
TWFwcygKICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgdGhhdCB3ZSB3b3VsZCBsaWtl
IHRvIGRvIHZhbHVlIHJlY292ZXJ5IG9uLiBXZSBjb21iYXQgdGhpcyBzaXR1YXRpb24gZnJvbSBl
dmVyCiAgICAgICAgICAgICAgICAgICAgIC8vIHRha2luZyBwbGFjZSBieSBlbnN1cmluZyB3ZSBz
cGlsbCB0aGUgb3JpZ2luYWwgYmFzZSB2YWx1ZSBhbmQgdGhlbiByZWNvdmVyIGl0IGZyb20KICAg
ICAgICAgICAgICAgICAgICAgLy8gdGhlIHNwaWxsIHNsb3QgYXMgdGhlIGZpcnN0IHN0ZXAgaW4g
T1NSIGV4aXQuCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gZmluZFJlc3VsdCA9IHJlY29yZElu
ZGV4VG9HZW5lcmljVW53aW5kT3JMYXp5U2xvd1BhdGhPU1JFeGl0LmZpbmQoaXRlci0+dmFsdWVb
aV0uaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZmluZFJlc3VsdCAhPSByZWNvcmRJ
bmRleFRvR2VuZXJpY1Vud2luZE9yTGF6eVNsb3dQYXRoT1NSRXhpdC5lbmQoKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IG9zckV4aXRJbmRleCA9IGZpbmRSZXN1bHQtPnZhbHVl
OwotICAgICAgICAgICAgICAgICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IHN0YXRlLmppdENvZGUt
Pm9zckV4aXRbb3NyRXhpdEluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGV4aXQubV9kZXNjcmlwdG9yLm1faXNFeGNlcHRpb25Gcm9tR2V0QnlJZCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBleGl0LnNwaWxsUmVnaXN0ZXJzVG9TcGlsbFNsb3Qoc2xvd1Bh
dGhKSVQsIGpzQ2FsbFRoYXRNaWdodFRocm93U3BpbGxPZmZzZXQpOwotICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChPU1JFeGl0KiBleGl0ID0gZXhjZXB0aW9u
SGFuZGxlck1hbmFnZXIuZ2V0QnlJZE9TUkV4aXQoaXRlci0+dmFsdWVbaV0uaW5kZXgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgZXhpdC0+c3BpbGxSZWdpc3RlcnNUb1NwaWxsU2xvdChzbG93
UGF0aEpJVCwganNDYWxsVGhhdE1pZ2h0VGhyb3dTcGlsbE9mZnNldCk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKAogICAgICAgICAgICAgICAgICAgICBzdGF0ZSwgdXNlZFJlZ2lzdGVycywgc2xvd1Bh
dGhKSVQsIGNvZGVPcmlnaW4sIGFkZGVkVW5pcXVlRXhjZXB0aW9uSnVtcCA/ICZleGNlcHRpb25K
dW1wc1RvTGluay5sYXN0KCkuZmlyc3QgOiAmZXhjZXB0aW9uVGFyZ2V0LApAQCAtNzc1LDcgKzc0
NCw3IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAg
ICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWNvcmQubG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGdlbmVyYXRlT3JH
ZXRBbHJlYWR5R2VuZXJhdGVkQ2FsbFNpdGVJbmRleChpdGVyLT52YWx1ZVtpXS5pbmRleCwgY29k
ZU9yaWdpbiksIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzKGJhc2UpLAorICAgICAgICAgICAg
ICAgICAgICBjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLnBy
b2N1cmVDYWxsU2l0ZUluZGV4KGl0ZXItPnZhbHVlW2ldLmluZGV4LCBjb2RlT3JpZ2luKSwgdXNl
ZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MoYmFzZSksCiAgICAgICAgICAgICAgICAgICAgIEpTVmFs
dWVSZWdzKHZhbHVlKSwgR1BSSW5mbzo6cGF0Y2hwb2ludFNjcmF0Y2hSZWdpc3RlciwgcHV0QnlJ
ZC5lY21hTW9kZSgpLCBwdXRCeUlkLnB1dEtpbmQoKSk7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgYm9vbCBhZGRlZFVuaXF1ZUV4Y2VwdGlvbkp1bXAgPSBhZGROZXdFeGNlcHRp
b25KdW1wSWZOZWNlc3NhcnkoaXRlci0+dmFsdWVbaV0uaW5kZXgpOwpAQCAtODgzLDE4ICs4NTIs
MTIgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAg
ICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9CiAgICAgICAgICAgICAgICAgICAgIGJpdHdpc2VfY2Fz
dDxjaGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24pICsgcmVjb3JkLmluc3RydWN0aW9uT2Zmc2V0Owog
ICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHBhdGNocG9pbnQoKE1hY3JvQXNzZW1i
bGVyQ29kZVB0cihzdGFydE9mSUMpKSk7Ci0gICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwgZXhjZXB0aW9uVGFyZ2V0OwotICAgICAgICAgICAgICAgIGF1dG8gZmluZFJlc3VsdCA9IHJl
Y29yZEluZGV4VG9HZW5lcmljVW53aW5kT3JMYXp5U2xvd1BhdGhPU1JFeGl0LmZpbmQoaXRlci0+
dmFsdWVbaV0uaW5kZXgpOwotICAgICAgICAgICAgICAgIGlmIChmaW5kUmVzdWx0ICE9IHJlY29y
ZEluZGV4VG9HZW5lcmljVW53aW5kT3JMYXp5U2xvd1BhdGhPU1JFeGl0LmVuZCgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBvc3JFeGl0SW5kZXggPSBmaW5kUmVzdWx0LT52YWx1ZTsK
LSAgICAgICAgICAgICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IHN0YXRl
LmZpbmFsaXplci0+b3NyRXhpdFtvc3JFeGl0SW5kZXhdOwotICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdGF0ZS5qaXRDb2RlLT5vc3JFeGl0W29zckV4aXRJbmRleF0ubV9kZXNj
cmlwdG9yLm1faXNFeGNlcHRpb25Gcm9tTGF6eVNsb3dQYXRoKTsKLSAgICAgICAgICAgICAgICAg
ICAgZXhjZXB0aW9uVGFyZ2V0ID0gc3RhdGUuZmluYWxpemVyLT5leGl0VGh1bmtzTGlua0J1ZmZl
ci0+bG9jYXRpb25PZihpbmZvLm1fdGh1bmtMYWJlbCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uVGFyZ2V0ID0gZXhj
ZXB0aW9uSGFuZGxlck1hbmFnZXIubGF6eVNsb3dQYXRoRXhjZXB0aW9uVGFyZ2V0KGl0ZXItPnZh
bHVlW2ldLmluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWV4Y2VwdGlvblRhcmdldCkKICAg
ICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uVGFyZ2V0ID0gc3RhdGUuZmluYWxpemVyLT5oYW5k
bGVFeGNlcHRpb25zTGlua0J1ZmZlci0+ZW50cnlwb2ludCgpOwogCiAgICAgICAgICAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPExhenlTbG93UGF0aD4gbGF6eVNsb3dQYXRoID0gc3RkOjptYWtlX3Vu
aXF1ZTxMYXp5U2xvd1BhdGg+KAotICAgICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LCBleGNl
cHRpb25UYXJnZXQsIHVzZWRSZWdpc3RlcnMsIGdlbmVyYXRlT3JHZXRBbHJlYWR5R2VuZXJhdGVk
Q2FsbFNpdGVJbmRleChpdGVyLT52YWx1ZVtpXS5pbmRleCwgY29kZU9yaWdpbiksCisgICAgICAg
ICAgICAgICAgICAgIHBhdGNocG9pbnQsIGV4Y2VwdGlvblRhcmdldCwgdXNlZFJlZ2lzdGVycywg
ZXhjZXB0aW9uSGFuZGxlck1hbmFnZXIucHJvY3VyZUNhbGxTaXRlSW5kZXgoaXRlci0+dmFsdWVb
aV0uaW5kZXgsIGNvZGVPcmlnaW4pLAogICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLm1f
bGlua2VyLT5ydW4obG9jYXRpb25zKSk7CiAKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkxhYmVsIGJlZ2luID0gc2xvd1BhdGhKSVQubGFiZWwoKTsKQEAgLTk1Miw3ICs5MTUsNyBAQCBz
dGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICBzdGF0
ZS5maW5hbGl6ZXItPnNpZGVDb2RlTGlua0J1ZmZlci0+bGluayhwYWlyLmZpcnN0LCBwYWlyLnNl
Y29uZCk7CiAgICAgfQogICAgIAotICAgIGFkanVzdENhbGxJQ3NGb3JTdGFja21hcHMoc3RhdGUu
anNDYWxscywgcmVjb3JkTWFwLCBnZW5lcmF0ZU9yR2V0QWxyZWFkeUdlbmVyYXRlZENhbGxTaXRl
SW5kZXgsIGpzQ2FsbE9TUkV4aXRGb3JSZWNvcmRJbmRleCk7CisgICAgYWRqdXN0Q2FsbElDc0Zv
clN0YWNrbWFwcyhzdGF0ZS5qc0NhbGxzLCByZWNvcmRNYXAsIGV4Y2VwdGlvbkhhbmRsZXJNYW5h
Z2VyKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5qc0NhbGxzLnNpemUoKTsg
aS0tOykgewogICAgICAgICBKU0NhbGwmIGNhbGwgPSBzdGF0ZS5qc0NhbGxzW2ldOwpAQCAtOTY3
LDcgKzkzMCw3IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAg
ICAgICAgfSk7CiAgICAgfQogICAgIAotICAgIGFkanVzdENhbGxJQ3NGb3JTdGFja21hcHMoc3Rh
dGUuanNDYWxsVmFyYXJnc2VzLCByZWNvcmRNYXAsIGdlbmVyYXRlT3JHZXRBbHJlYWR5R2VuZXJh
dGVkQ2FsbFNpdGVJbmRleCwganNDYWxsT1NSRXhpdEZvclJlY29yZEluZGV4KTsKKyAgICBhZGp1
c3RDYWxsSUNzRm9yU3RhY2ttYXBzKHN0YXRlLmpzQ2FsbFZhcmFyZ3NlcywgcmVjb3JkTWFwLCBl
eGNlcHRpb25IYW5kbGVyTWFuYWdlcik7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gc3Rh
dGUuanNDYWxsVmFyYXJnc2VzLnNpemUoKTsgaS0tOykgewogICAgICAgICBKU0NhbGxWYXJhcmdz
JiBjYWxsID0gc3RhdGUuanNDYWxsVmFyYXJnc2VzW2ldOwpAQCAtOTgzLDkgKzk0Niw3IEBAIHN0
YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgfSk7CiAgICAg
fQogCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBnZW5lcmF0ZSBDYWxsU2l0ZSBpbmRpY2Vz
IGZvciB0YWlsIGNhbGxzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTEwNzkKLSAgICBhZGp1c3RDYWxsSUNzRm9yU3RhY2ttYXBzKHN0YXRlLmpzVGFp
bENhbGxzLCByZWNvcmRNYXAsIGdlbmVyYXRlT3JHZXRBbHJlYWR5R2VuZXJhdGVkQ2FsbFNpdGVJ
bmRleCwganNDYWxsT1NSRXhpdEZvclJlY29yZEluZGV4KTsKKyAgICBhZGp1c3RDYWxsSUNzRm9y
U3RhY2ttYXBzKHN0YXRlLmpzVGFpbENhbGxzLCByZWNvcmRNYXAsIGV4Y2VwdGlvbkhhbmRsZXJN
YW5hZ2VyKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmpzVGFpbENhbGxzLnNpemUo
KTsgaS0tOykgewogICAgICAgICBKU1RhaWxDYWxsJiBjYWxsID0gc3RhdGUuanNUYWlsQ2FsbHNb
aV07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvbkhhbmRsZXJN
YW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4
Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExFeGNlcHRpb25IYW5k
bGVyTWFuYWdlci5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExTdGF0
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK0V4Y2VwdGlvbkhhbmRs
ZXJNYW5hZ2VyOjpFeGNlcHRpb25IYW5kbGVyTWFuYWdlcihTdGF0ZSYgc3RhdGUpCisgICAgOiBt
X3N0YXRlKHN0YXRlKQoreworfQorCit2b2lkIEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjphZGRO
ZXdFeGl0KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgsIHNpemVfdCBvc3JFeGl0SW5kZXgp
Cit7CisgICAgbV9tYXAuYWRkKHN0YWNrbWFwUmVjb3JkSW5kZXgsIG9zckV4aXRJbmRleCk7Cisg
ICAgT1NSRXhpdCYgZXhpdCA9IG1fc3RhdGUuaml0Q29kZS0+b3NyRXhpdFtvc3JFeGl0SW5kZXhd
OworICAgIFJFTEVBU0VfQVNTRVJUKGV4aXQubV9kZXNjcmlwdG9yLm1fd2lsbEFycml2ZUF0T1NS
RXhpdEZyb21HZW5lcmljVW53aW5kIHx8IGV4aXQubV9kZXNjcmlwdG9yLm1faXNFeGNlcHRpb25G
cm9tTGF6eVNsb3dQYXRoKTsKK30KKworQ29kZUxvY2F0aW9uTGFiZWwgRXhjZXB0aW9uSGFuZGxl
ck1hbmFnZXI6OmdldE9yUHV0QnlJZENhbGxPcGVyYXRpb25FeGNlcHRpb25UYXJnZXQodWludDMy
X3Qgc3RhY2ttYXBSZWNvcmRJbmRleCkKK3sKKyAgICBhdXRvIGZpbmRSZXN1bHQgPSBtX21hcC5m
aW5kKHN0YWNrbWFwUmVjb3JkSW5kZXgpOworICAgIGlmIChmaW5kUmVzdWx0ID09IG1fbWFwLmVu
ZCgpKQorICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwoKTsKKworICAgIHNpemVfdCBv
c3JFeGl0SW5kZXggPSBmaW5kUmVzdWx0LT52YWx1ZTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3N0
YXRlLmppdENvZGUtPm9zckV4aXRbb3NyRXhpdEluZGV4XS5tX2Rlc2NyaXB0b3IubV93aWxsQXJy
aXZlQXRPU1JFeGl0RnJvbUdlbmVyaWNVbndpbmQpOworICAgIE9TUkV4aXRDb21waWxhdGlvbklu
Zm8mIGluZm8gPSBtX3N0YXRlLmZpbmFsaXplci0+b3NyRXhpdFtvc3JFeGl0SW5kZXhdOworICAg
IFJFTEVBU0VfQVNTRVJUKGluZm8ubV9nZXRBbmRQdXRCeUlkQ2FsbE9wZXJhdGlvbkV4Y2VwdGlv
bk9TUkV4aXRFbnRyYW5jZS5pc1NldCgpKTsKKyAgICByZXR1cm4gbV9zdGF0ZS5maW5hbGl6ZXIt
PmV4aXRUaHVua3NMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGluZm8ubV9nZXRBbmRQdXRCeUlkQ2Fs
bE9wZXJhdGlvbkV4Y2VwdGlvbk9TUkV4aXRFbnRyYW5jZSk7Cit9CisKK0NvZGVMb2NhdGlvbkxh
YmVsIEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjpsYXp5U2xvd1BhdGhFeGNlcHRpb25UYXJnZXQo
dWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleCkKK3sKKyAgICBhdXRvIGZpbmRSZXN1bHQgPSBt
X21hcC5maW5kKHN0YWNrbWFwUmVjb3JkSW5kZXgpOworICAgIGlmIChmaW5kUmVzdWx0ID09IG1f
bWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwoKTsKKworICAgIHNp
emVfdCBvc3JFeGl0SW5kZXggPSBmaW5kUmVzdWx0LT52YWx1ZTsKKyAgICBSRUxFQVNFX0FTU0VS
VChtX3N0YXRlLmppdENvZGUtPm9zckV4aXRbb3NyRXhpdEluZGV4XS5tX2Rlc2NyaXB0b3IubV9p
c0V4Y2VwdGlvbkZyb21MYXp5U2xvd1BhdGgpOworICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8m
IGluZm8gPSBtX3N0YXRlLmZpbmFsaXplci0+b3NyRXhpdFtvc3JFeGl0SW5kZXhdOworICAgIFJF
TEVBU0VfQVNTRVJUKGluZm8ubV90aHVua0xhYmVsLmlzU2V0KCkpOworICAgIHJldHVybiBtX3N0
YXRlLmZpbmFsaXplci0+ZXhpdFRodW5rc0xpbmtCdWZmZXItPmxvY2F0aW9uT2YoaW5mby5tX3Ro
dW5rTGFiZWwpOworfQorCitPU1JFeGl0KiBFeGNlcHRpb25IYW5kbGVyTWFuYWdlcjo6Z2V0QnlJ
ZE9TUkV4aXQodWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleCkKK3sKKyAgICBhdXRvIGZpbmRS
ZXN1bHQgPSBtX21hcC5maW5kKHN0YWNrbWFwUmVjb3JkSW5kZXgpOworICAgIGlmIChmaW5kUmVz
dWx0ID09IG1fbWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBzaXplX3Qg
b3NyRXhpdEluZGV4ID0gZmluZFJlc3VsdC0+dmFsdWU7CisgICAgT1NSRXhpdCogZXhpdCA9ICZt
X3N0YXRlLmppdENvZGUtPm9zckV4aXRbb3NyRXhpdEluZGV4XTsKKyAgICBSRUxFQVNFX0FTU0VS
VChleGl0LT5tX2Rlc2NyaXB0b3IubV9pc0V4Y2VwdGlvbkZyb21HZXRCeUlkKTsKKyAgICByZXR1
cm4gZXhpdDsgCit9CisKK09TUkV4aXQqIEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjpnZXRDYWxs
T1NSRXhpdENvbW1vbih1aW50MzJfdCBzdGFja21hcFJlY29yZEluZGV4KQoreworICAgIGF1dG8g
ZmluZFJlc3VsdCA9IG1fbWFwLmZpbmQoc3RhY2ttYXBSZWNvcmRJbmRleCk7CisgICAgaWYgKGZp
bmRSZXN1bHQgPT0gbV9tYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHNp
emVfdCBvc3JFeGl0SW5kZXggPSBmaW5kUmVzdWx0LT52YWx1ZTsKKyAgICBPU1JFeGl0KiBleGl0
ID0gJm1fc3RhdGUuaml0Q29kZS0+b3NyRXhpdFtvc3JFeGl0SW5kZXhdOworICAgIFJFTEVBU0Vf
QVNTRVJUKGV4aXQtPm1fZGVzY3JpcHRvci5tX2lzRXhjZXB0aW9uRnJvbUpTQ2FsbCk7CisgICAg
cmV0dXJuIGV4aXQ7IAorfQorCitPU1JFeGl0KiBFeGNlcHRpb25IYW5kbGVyTWFuYWdlcjo6Z2V0
Q2FsbE9TUkV4aXQodWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleCwgY29uc3QgSlNDYWxsJikK
K3sKKyAgICByZXR1cm4gZ2V0Q2FsbE9TUkV4aXRDb21tb24oc3RhY2ttYXBSZWNvcmRJbmRleCk7
Cit9CisKK09TUkV4aXQqIEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjpnZXRDYWxsT1NSRXhpdCh1
aW50MzJfdCBzdGFja21hcFJlY29yZEluZGV4LCBjb25zdCBKU0NhbGxWYXJhcmdzJikKK3sKKyAg
ICByZXR1cm4gZ2V0Q2FsbE9TUkV4aXRDb21tb24oc3RhY2ttYXBSZWNvcmRJbmRleCk7Cit9CisK
K09TUkV4aXQqIEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjpnZXRDYWxsT1NSRXhpdCh1aW50MzJf
dCBzdGFja21hcFJlY29yZEluZGV4LCBjb25zdCBKU1RhaWxDYWxsJiBjYWxsKQoreworICAgIFVO
VVNFRF9QQVJBTShzdGFja21hcFJlY29yZEluZGV4KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbCk7
CisgICAgQVNTRVJUKG1fbWFwLmZpbmQoc3RhY2ttYXBSZWNvcmRJbmRleCkgPT0gbV9tYXAuZW5k
KCkpOworICAgIC8vIEEgY2FsbCBjYW4ndCBiZSBpbiB0YWlsIHBvc2l0aW9uIGluc2lkZSBhIHRy
eSBibG9jay4KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQ2FsbFNpdGVJbmRleCBFeGNlcHRp
b25IYW5kbGVyTWFuYWdlcjo6cHJvY3VyZUNhbGxTaXRlSW5kZXgodWludDMyX3Qgc3RhY2ttYXBS
ZWNvcmRJbmRleCwgQ29kZU9yaWdpbiBvcmlnaW4pCit7CisgICAgYXV0byBmaW5kUmVzdWx0ID0g
bV9tYXAuZmluZChzdGFja21hcFJlY29yZEluZGV4KTsKKyAgICBpZiAoZmluZFJlc3VsdCA9PSBt
X21hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG1fc3RhdGUuaml0Q29kZS0+Y29tbW9uLmFkZFVu
aXF1ZUNhbGxTaXRlSW5kZXgob3JpZ2luKTsKKyAgICBzaXplX3Qgb3NyRXhpdEluZGV4ID0gZmlu
ZFJlc3VsdC0+dmFsdWU7CisgICAgT1NSRXhpdCYgZXhpdCA9IG1fc3RhdGUuaml0Q29kZS0+b3Ny
RXhpdFtvc3JFeGl0SW5kZXhdOworICAgIGlmICghZXhpdC5tX2V4Y2VwdGlvbkhhbmRsZXJDYWxs
U2l0ZUluZGV4KQorICAgICAgICBleGl0Lm1fZXhjZXB0aW9uSGFuZGxlckNhbGxTaXRlSW5kZXgg
PSBtX3N0YXRlLmppdENvZGUtPmNvbW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KG9yaWdpbik7
CisgICAgcmV0dXJuIGV4aXQubV9leGNlcHRpb25IYW5kbGVyQ2FsbFNpdGVJbmRleDsKK30KKwor
Q2FsbFNpdGVJbmRleCBFeGNlcHRpb25IYW5kbGVyTWFuYWdlcjo6cHJvY3VyZUNhbGxTaXRlSW5k
ZXgodWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleCwgY29uc3QgSlNDYWxsJiBjYWxsKQorewor
ICAgIHJldHVybiBwcm9jdXJlQ2FsbFNpdGVJbmRleChzdGFja21hcFJlY29yZEluZGV4LCBjYWxs
LmNhbGxTaXRlRGVzY3JpcHRpb25PcmlnaW4oKSk7Cit9CisKK0NhbGxTaXRlSW5kZXggRXhjZXB0
aW9uSGFuZGxlck1hbmFnZXI6OnByb2N1cmVDYWxsU2l0ZUluZGV4KHVpbnQzMl90IHN0YWNrbWFw
UmVjb3JkSW5kZXgsIGNvbnN0IEpTQ2FsbFZhcmFyZ3MmIGNhbGwpCit7CisgICAgcmV0dXJuIHBy
b2N1cmVDYWxsU2l0ZUluZGV4KHN0YWNrbWFwUmVjb3JkSW5kZXgsIGNhbGwuY2FsbFNpdGVEZXNj
cmlwdGlvbk9yaWdpbigpKTsKK30KKworQ2FsbFNpdGVJbmRleCBFeGNlcHRpb25IYW5kbGVyTWFu
YWdlcjo6cHJvY3VyZUNhbGxTaXRlSW5kZXgodWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleCwg
Y29uc3QgSlNUYWlsQ2FsbCYgY2FsbCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhY2ttYXBSZWNv
cmRJbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGwpOworICAgIC8vIFdlIGRvbid0IG5lZWQg
dG8gZ2VuZXJhdGUgYSBjYWxsIHNpdGUgaW5kZXggZm9yIHRhaWwgY2FsbHMKKyAgICAvLyBiZWNh
dXNlIHRoZXkgZG9uJ3Qgc3RvcmUgYSBDYWxsU2l0ZUluZGV4IG9uIHRoZSBjYWxsIGZyYW1lLgor
ICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uSGFuZGxlck1h
bmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMRXhjZXB0aW9uSGFuZGxl
ck1hbmFnZXJfaAorI2RlZmluZSBGVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlcl9oCisKKyNpZiBF
TkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkZUTEpT
Q2FsbC5oIgorI2luY2x1ZGUgIkZUTEpTQ2FsbFZhcmFyZ3MuaCIKKyNpbmNsdWRlICJGVExKU1Rh
aWxDYWxsLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworLy8gVGhpcyBj
bGFzcyBpcyBpbnRlbnRlZCB0byBiZSB1c2VkIGR1cmluZyBGVExDb21waWxlIHRvIG1hbmFnZSBz
b21lIGNvbW1vbiB0YXNrcworLy8gbmVlZGVkIHRvIHF1ZXJ5IHRoZSBjb3JyZXNwb25kZW5jZSBi
ZXR3ZWVuIHN0YWNrbWFwIHJlY29yZHMgYW5kIE9TUiBleGl0cyB0aGF0IGFyZQorLy8gZXhjZXB0
aW9uIGhhbmRsZXJzLiBUaGUgb25seSBraW5kIG9mIE9TUiBleGl0cyB3ZSBrZWVwIGFyZSB0aG9z
ZSBPU1IgZXhpdHMgdGhhdAorLy8gY29ycmVzcG9uZCB0byBleGNlcHRpb25zIGZyb20gcGF0Y2hw
b2ludHMuIFRoYXQgbWVhbnMgZXhpdHMgZnJvbSBsYXp5IHNsb3cgcGF0aHMsCisvLyBKUyBjYWxs
cywgR2V0L1B1dCBCeUlkLCBldGMuIE5vdGU6IHRoaXMgbWVhbnMgd2UgZG9uJ3Qga2VlcCB0cmFj
ayBvZiBleGNlcHRpb24gY2hlY2tzCisvLyBhZnRlciBDIGNhbGxzIGJlY2F1c2UgdGhvc2UgYXJl
IG1vZGVsZWQgZXhwbGljdGx5IGluIExMVk0gSVIgYXMgYSBicmFuY2ggdG8gYSBzdGFja21hcAor
Ly8gaW50cmluc2ljLiBUaGVzZSBwYXRjaHBvaW50IE9TUiBleGl0cyB0aGF0IHRoaXMgY2xhc3Mg
a2VlcHMgdHJhY2sgb2YgYXJlIG5vdCBicmFuY2hlZCB0bworLy8gZGlyZWN0bHkgd2l0aGluIExM
Vk0gSVIuICBXZSBqdW1wIHRvIHRoZXNlIE9TUiBleGl0cyBmcm9tIGdlbmVyYXRlZCBwYXRjaHBv
aW50IGNvZGUsCisvLyBmcm9tIGdlbmVyaWNVbndpbmQoKSwgb3IgZnJvbSBGVEw6OmNhbGxPcGVy
YXRpb24oKS4KKyAgICAKK2NsYXNzIFN0YXRlOworCitjbGFzcyBFeGNlcHRpb25IYW5kbGVyTWFu
YWdlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIp
OworCitwdWJsaWM6CisgICAgRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIoU3RhdGUmIHN0YXRlKTsK
KworICAgIHZvaWQgYWRkTmV3RXhpdCh1aW50MzJfdCBzdGFja21hcFJlY29yZEluZGV4LCBzaXpl
X3Qgb3NyRXhpdEluZGV4KTsKKworICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBvbmx5IG1ha2Ugc2Vu
c2UgdG8gYmUgY2FsbGVkIGFmdGVyIHdlJ3ZlIGdlbmVyYXRlZCB0aGUgT1NSCisgICAgLy8gZXhp
dCB0aHVua3MgYW5kIGFsbG9jYXRlZCB0aGUgT1NSIGV4aXQgdGh1bmtzJyBsaW5rIGJ1ZmZlci4K
KyAgICBDb2RlTG9jYXRpb25MYWJlbCBnZXRPclB1dEJ5SWRDYWxsT3BlcmF0aW9uRXhjZXB0aW9u
VGFyZ2V0KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgpOworICAgIENvZGVMb2NhdGlvbkxh
YmVsIGxhenlTbG93UGF0aEV4Y2VwdGlvblRhcmdldCh1aW50MzJfdCBzdGFja21hcFJlY29yZElu
ZGV4KTsKKworICAgIE9TUkV4aXQqIGdldEJ5SWRPU1JFeGl0KHVpbnQzMl90IHN0YWNrbWFwUmVj
b3JkSW5kZXgpOworICAgIE9TUkV4aXQqIGdldENhbGxPU1JFeGl0KHVpbnQzMl90IHN0YWNrbWFw
UmVjb3JkSW5kZXgsIGNvbnN0IEpTQ2FsbCYpOworICAgIE9TUkV4aXQqIGdldENhbGxPU1JFeGl0
KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgsIGNvbnN0IEpTVGFpbENhbGwmKTsKKyAgICBP
U1JFeGl0KiBnZXRDYWxsT1NSRXhpdCh1aW50MzJfdCBzdGFja21hcFJlY29yZEluZGV4LCBjb25z
dCBKU0NhbGxWYXJhcmdzJik7CisKKyAgICBDYWxsU2l0ZUluZGV4IHByb2N1cmVDYWxsU2l0ZUlu
ZGV4KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgsIENvZGVPcmlnaW4pOworICAgIENhbGxT
aXRlSW5kZXggcHJvY3VyZUNhbGxTaXRlSW5kZXgodWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRl
eCwgY29uc3QgSlNDYWxsJik7CisgICAgQ2FsbFNpdGVJbmRleCBwcm9jdXJlQ2FsbFNpdGVJbmRl
eCh1aW50MzJfdCBzdGFja21hcFJlY29yZEluZGV4LCBjb25zdCBKU1RhaWxDYWxsJik7CisgICAg
Q2FsbFNpdGVJbmRleCBwcm9jdXJlQ2FsbFNpdGVJbmRleCh1aW50MzJfdCBzdGFja21hcFJlY29y
ZEluZGV4LCBjb25zdCBKU0NhbGxWYXJhcmdzJik7CisgICAgT1NSRXhpdCoganNDYWxsT1NSRXhp
dCh1aW50MzJfdCBzdGFja21hcFJlY29yZEluZGV4KTsKKworcHJpdmF0ZToKKyAgICBPU1JFeGl0
KiBnZXRDYWxsT1NSRXhpdENvbW1vbih1aW50MzJfdCBzdGFja21hcFJlY29yZEluZGV4KTsKKwor
ICAgIFN0YXRlJiBtX3N0YXRlOworICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50MzJfdCwgc2l6ZV90
LCBXVEY6OkludEhhc2g8dWludDMyX3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJh
aXRzPHVpbnQzMl90Pj4gUmVjb3JkSW5kZXhUb09TUkV4aXRJbmRleE1hcDsKKyAgICBSZWNvcmRJ
bmRleFRvT1NSRXhpdEluZGV4TWFwIG1fbWFwOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExFeGNlcHRp
b25IYW5kbGVyTWFuYWdlcl9oCg==
</data>
<flag name="review"
          id="290276"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>