<?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>150478</bug_id>
          
          <creation_ts>2015-10-22 16:03:39 -0700</creation_ts>
          <short_desc>Air should lay out code optimally</short_desc>
          <delta_ts>2015-11-17 14:30:13 -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>All</rep_platform>
          <op_sys>All</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>
          
          <blocked>150456</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1135884</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-22 16:03:39 -0700</bug_when>
    <thetext>Optimal code layout can be achieved by using a pre-order traversal that does not traverse Rare edges but instead saves them in a secondary rare worklist, followed by a second pre-order traversal that starts with that rare worklist and traverses all edges.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142618</commentid>
    <comment_count>1</comment_count>
      <attachid>265700</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-17 13:09:14 -0800</bug_when>
    <thetext>Created attachment 265700
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142621</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-17 13:10:48 -0800</bug_when>
    <thetext>Attachment 265700 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirOptimizeBlockOrder.cpp:58:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirOptimizeBlockOrder.cpp:141:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 2 in 15 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>1142662</commentid>
    <comment_count>3</comment_count>
      <attachid>265700</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-17 14:19:01 -0800</bug_when>
    <thetext>Comment on attachment 265700
the patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:17
&gt; +        This also adds the requisite branch flipping, so that branches&apos; taken successor is not the

a branch&apos;s taken successor

&gt; Source/JavaScriptCore/b3/air/AirBasicBlock.h:54
&gt; +    // You shouldn&apos;t call this except when you know what you&apos;re doing.

Can you say something more specific here? This comment is true of all functions :).

&gt; Source/JavaScriptCore/b3/air/AirOptimizeBlockOrder.cpp:90
&gt; +        for (FrequentedBlock&amp; successor : block-&gt;successors()) {

I think I would like this more if the class were called &quot;BlockWithFrequency&quot;. &quot;Frequented blocks&quot; sounds like a block that has a high frequency.

&gt; Source/JavaScriptCore/b3/air/AirOptimizeBlockOrder.cpp:140
&gt; +        // forget about this phase, then at worse your new instructions won&apos;t opt into the inversion

at worst</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142663</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-17 14:27:28 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 265700 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=265700&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:17
&gt; &gt; +        This also adds the requisite branch flipping, so that branches&apos; taken successor is not the
&gt; 
&gt; a branch&apos;s taken successor
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirBasicBlock.h:54
&gt; &gt; +    // You shouldn&apos;t call this except when you know what you&apos;re doing.
&gt; 
&gt; Can you say something more specific here? This comment is true of all
&gt; functions :).
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirOptimizeBlockOrder.cpp:90
&gt; &gt; +        for (FrequentedBlock&amp; successor : block-&gt;successors()) {
&gt; 
&gt; I think I would like this more if the class were called
&gt; &quot;BlockWithFrequency&quot;. &quot;Frequented blocks&quot; sounds like a block that has a
&gt; high frequency.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirOptimizeBlockOrder.cpp:140
&gt; &gt; +        // forget about this phase, then at worse your new instructions won&apos;t opt into the inversion
&gt; 
&gt; at worst

Fixed everything but the name of FrequentedBlock.  I agree there is probably a better name.  That would be a sizeable patch, so it should probably be done separately.  I&apos;m not sure how urgent that is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142665</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-17 14:30:13 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/192539</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265700</attachid>
            <date>2015-11-17 13:09:14 -0800</date>
            <delta_ts>2015-11-17 14:19:01 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>36957</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyNTI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBA
CisyMDE1LTExLTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QWlyIHNob3VsZCBsYXkgb3V0IGNvZGUgb3B0aW1hbGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NzgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGFkZHMgYSBwaGFzZSB0aGF0IG9wdGltaXpl
cyBjb2RlIGxheW91dCB1c2luZyBzb21ldGhpbmcgdGhhdCdzIHdvcmtlZCB3ZWxsIGZvciBtZSBp
biB0aGUgcGFzdC4KKyAgICAgICAgQmFzaWNhbGx5LCBpdCBqdXN0IGZvcmNlcyBwcmUtb3JkZXJp
bmcgb24gdGhlIENGRywgZXhjZXB0IHRoYXQ6CisKKyAgICAgICAgLSBCbG9ja3MgdGhhdCBhcmUg
b25seSByZWFjaGFibGUgYnkgUmFyZSBjb250cm9sIGZsb3cgYXJlIHNjaGVkdWxlZCBzZXBhcmF0
ZWx5LCBhbGwgdGhlIHdheSBhdCB0aGUKKyAgICAgICAgICBlbmQuCisKKyAgICAgICAgLSBTdWNj
ZXNzb3JzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBjbGFzcyBhcmUgcHVzaGVkIGluIGFzY2VuZGlu
ZyBvcmRlciBvZiBmcmVxdWVuY3ksIHNvIHRoYXQgdGhlIG1vc3QKKyAgICAgICAgICBmcmVxdWVu
dCBzdWNjZXNzb3IgaXMgc2NoZWR1bGVkIGltbWVkaWF0ZWx5IGFmdGVyLgorCisgICAgICAgIFRo
aXMgYWxzbyBhZGRzIHRoZSByZXF1aXNpdGUgYnJhbmNoIGZsaXBwaW5nLCBzbyB0aGF0IGJyYW5j
aGVzJyB0YWtlbiBzdWNjZXNzb3IgaXMgbm90IHRoZQorICAgICAgICBmYWxsLXRocm91Z2ggYmxv
Y2suIFdlIHdhbnQgdGhlIGZhbGwtdGhyb3VnaCB0byBiZSB0aGUgbm90LXRha2VuIHN1Y2Nlc3Nv
ciBpZiBhdCBhbGwgcG9zc2libGUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGIzL0IzQmxvY2tXb3JrbGlzdC5oOgorICAg
ICAgICAqIGIzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpCMzo6
R2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazo6ZnJlcXVlbmN5KToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6OmlzUmFyZSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5lcmlj
RnJlcXVlbnRlZEJsb2NrOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5oOgorICAg
ICAgICAqIGIzL2Fpci9BaXJBcmcuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0Rv
dWJsZUNvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzQ29uZGl0aW9uKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmFzRG91YmxlQ29uZGl0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJn
Ojppc0ludmVydGlibGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmludmVydGVkKToK
KyAgICAgICAgKiBiMy9haXIvQWlyQmFzaWNCbG9jay5oOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpCYXNpY0Jsb2NrOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6
OnNldEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6c2l6ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QmFzaWNCbG9jazo6Y29udGFpbnNQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmZyZXF1ZW5jeSk6CisgICAgICAgICogYjMvYWlyL0FpckJs
b2NrV29ya2xpc3QuaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckNvZGUuY3BwOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpmaW5kTmV4dEJsb2NrKToKKyAgICAgICAgKiBiMy9h
aXIvQWlyQ29kZS5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpwcm9jKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2Rl
OjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YmxvY2tMaXN0KToK
KyAgICAgICAgKiBiMy9haXIvQWlyR2VuZXJhdGUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpnZW5lcmF0ZSk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAg
ICAqIGIzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6b3B0aW1pemVCbG9ja09yZGVyKToKKyAgICAgICAgKiBiMy9haXIvQWlyT3B0
aW1pemVCbG9ja09yZGVyLmg6IEFkZGVkLgorCiAyMDE1LTExLTE3ICBTYWFtIGJhcmF0aSAgPHNi
YXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIEZUTExhenlTbG93UGF0aHMgc2hvdWxkIGJlIGFi
bGUgdG8gaGFuZGxlIGJlaW5nIHBhc3NlZCB0aGUgemVybyByZWdpc3RlciBhcyBhIGxvY2F0aW9u
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkyNTE2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI4Niw3ICsyODYsNyBAQAogCQkwRjMzOERGNjFCRTkz
RDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOERGNDFCRTkzRDU1MDAxM0M4OEYgLyogQjND
b25zdHJhaW5lZFZhbHVlLmggKi87IH07CiAJCTBGMzM4REY5MUJFOTZBQTgwMDEzQzg4RiAvKiBC
M0NDYWxsVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYzMzhERjcxQkU5NkFBODAwMTNDODhGIC8qIEIzQ0NhbGxWYWx1ZS5jcHAgKi87IH07
CiAJCTBGMzM4REZBMUJFOTZBQTgwMDEzQzg4RiAvKiBCM0NDYWxsVmFsdWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4REY4MUJFOTZBQTgwMDEz
Qzg4RiAvKiBCM0NDYWxsVmFsdWUuaCAqLzsgfTsKLSAgICAgICAgICAgICAgICAwRjMzOERGRDFC
RUQ1MTI3MDAxM0M4OEYgLyogQWlyU2ltcGxpZnlDRkcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhERkIxQkVENTEyNzAwMTNDODhGIC8qIEFp
clNpbXBsaWZ5Q0ZHLmNwcCAqLzsgfTsKKwkJMEYzMzhERkQxQkVENTEyNzAwMTNDODhGIC8qIEFp
clNpbXBsaWZ5Q0ZHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMzM4REZCMUJFRDUxMjcwMDEzQzg4RiAvKiBBaXJTaW1wbGlmeUNGRy5jcHAgKi87
IH07CiAJCTBGMzM4REZFMUJFRDUxMjcwMDEzQzg4RiAvKiBBaXJTaW1wbGlmeUNGRy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhERkMxQkVENTEy
NzAwMTNDODhGIC8qIEFpclNpbXBsaWZ5Q0ZHLmggKi87IH07CiAJCTBGMzM4RTBCMUJGMDI3NkMw
MDEzQzg4RiAvKiBCM0NvbXBpbGF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4REZGMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0NvbXBpbGF0
aW9uLmNwcCAqLzsgfTsKIAkJMEYzMzhFMEMxQkYwMjc2QzAwMTNDODhGIC8qIEIzQ29tcGlsYXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4
RTAwMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0NvbXBpbGF0aW9uLmggKi87IH07CkBAIC0zMDAsMTIg
KzMwMCwxMiBAQAogCQkwRjMzOEUxNDFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUwODFC
RjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleS5jcHAgKi87IH07CiAJCTBGMzM4RTE1MUJGMDI3
NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUwOTFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleS5o
ICovOyB9OwogCQkwRjMzOEUxNjFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleUlubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4RTBB
MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5SW5saW5lcy5oICovOyB9OwotICAgICAgICAg
ICAgICAgIDBGMzM4RTFCMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4RTE3
MUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCAqLzsgfTsKKwkJMEYz
MzhFMUIxQkYyODZFQTAwMTNDODhGIC8qIEIzQmxvY2tJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMTcxQkYyODZFQTAw
MTNDODhGIC8qIEIzQmxvY2tJbnNlcnRpb25TZXQuY3BwICovOyB9OwogCQkwRjMzOEUxQzFCRjI4
NkVBMDAxM0M4OEYgLyogQjNCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMTgxQkYyODZFQTAwMTNDODhGIC8qIEIz
QmxvY2tJbnNlcnRpb25TZXQuaCAqLzsgfTsKIAkJMEYzMzhFMUQxQkYyODZFQTAwMTNDODhGIC8q
IEIzTG93ZXJNYWNyb3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzMzhFMTkxQkYyODZFQTAwMTNDODhGIC8qIEIzTG93ZXJNYWNyb3MuY3BwICov
OyB9OwogCQkwRjMzOEUxRTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMUExQkYyODZF
QTAwMTNDODhGIC8qIEIzTG93ZXJNYWNyb3MuaCAqLzsgfTsKIAkJMEYzNEIxNDkxNkQ0MjAxMDAw
MUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3Bw
ICovOyB9OwotICAgICAgICAgICAgICAgIDBGMzRCMTRBMTZENDIwMTMwMDFDREE1QSAvKiBERkdV
c2VLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjM0QjE0ODE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oICovOyB9OworCQkwRjM0QjE0
QTE2RDQyMDEzMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDgxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1Vz
ZUtpbmQuaCAqLzsgfTsKIAkJMEYzOEIwMTExN0NGMDc4MDAwQjE0NEQzIC8qIExMSW50RW50cnlw
b2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjM4QjAwRjE3Q0YwNzdGMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNwcCAqLzsgfTsKIAkJ
MEYzOEIwMTIxN0NGMDc4MzAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTAxN0NGMDc3RjAwQjE0
NEQzIC8qIExMSW50RW50cnlwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGMzhCMDE3MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxh
dGlvbktleS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjM4QjAxMzE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuY3BwICovOyB9
OwpAQCAtNTI3LDYgKzUyNyw5IEBACiAJCTBGQjE3NjYxMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdI
ZWFwTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQjE3NjVEMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24uaCAqLzsgfTsK
IAkJMEZCMTc2NjIxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIxNzY1RTE5NkI4RjlFMDA5
MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLzsgfTsKIAkJMEZCMTc2NjMxOTZCOEY5RTAwOTEw
NTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICov
OyB9OworCQkwRkIzODc4RTFCRkJDNDREMDBFM0FCMUUgLyogQWlyQmxvY2tXb3JrbGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzg3OEIxQkZC
QzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCAqLzsgfTsKKwkJMEZCMzg3OEYxQkZC
QzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkIzODc4QzFCRkJDNDREMDBFM0FCMUUg
LyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcCAqLzsgfTsKKwkJMEZCMzg3OTAxQkZCQzQ0RDAw
RTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzg3OEQxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9w
dGltaXplQmxvY2tPcmRlci5oICovOyB9OwogCQkwRkI0MzhBMzE5MjcwQjFEMDBFMUZCQzkgLyog
U3RydWN0dXJlU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQjQzOEEyMTkyNzBCMUQwMEUxRkJDOSAvKiBTdHJ1Y3R1cmVTZXQuY3BwICovOyB9
OwogCQkwRkI0RkI3MzFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjRGQjcwMUJDODQz
MTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGguY3BwICovOyB9OwogCQkwRkI0RkI3NDFCQzg0
MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0RkI3MTFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6
eVNsb3dQYXRoLmggKi87IH07CkBAIC0yMzM1LDcgKzIzMzgsNyBAQAogCQkwRjMzOERGNDFCRTkz
RDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzQ29uc3RyYWluZWRWYWx1ZS5oOyBwYXRoID0gYjMvQjNDb25zdHJhaW5l
ZFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzM4REY3MUJFOTZBQTgw
MDEzQzg4RiAvKiBCM0NDYWxsVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQjNDQ2FsbFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzQ0NhbGxWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzM4REY4MUJFOTZBQTgwMDEzQzg4RiAvKiBC
M0NDYWxsVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDQ2FsbFZh
bHVlLmg7IHBhdGggPSBiMy9CM0NDYWxsVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLSAgICAgICAgICAgICAgICAwRjMzOERGQjFCRUQ1MTI3MDAxM0M4OEYgLyogQWlyU2ltcGxp
ZnlDRkcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyU2ltcGxp
ZnlDRkcuY3BwOyBwYXRoID0gYjMvYWlyL0FpclNpbXBsaWZ5Q0ZHLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYzMzhERkIxQkVENTEyNzAwMTNDODhGIC8qIEFpclNpbXBsaWZ5
Q0ZHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclNpbXBsaWZ5
Q0ZHLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJTaW1wbGlmeUNGRy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMzM4REZDMUJFRDUxMjcwMDEzQzg4RiAvKiBBaXJTaW1wbGlmeUNG
Ry5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJTaW1wbGlmeUNGRy5oOyBw
YXRoID0gYjMvYWlyL0FpclNpbXBsaWZ5Q0ZHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMzM4REZGMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0NvbXBpbGF0aW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29tcGlsYXRpb24uY3BwOyBwYXRoID0g
YjMvQjNDb21waWxhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzM4
RTAwMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0NvbXBpbGF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzQ29tcGlsYXRpb24uaDsgcGF0aCA9IGIzL0IzQ29tcGlsYXRpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzNDksMTIgKzIzNTIsMTIgQEAKIAkJ
MEYzMzhFMDgxQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWx1ZUtleS5jcHA7IHBhdGggPSBiMy9CM1ZhbHVl
S2V5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMzhFMDkxQkYwMjc2QzAw
MTNDODhGIC8qIEIzVmFsdWVLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QjNWYWx1ZUtleS5oOyBwYXRoID0gYjMvQjNWYWx1ZUtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjMzOEUwQTFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleUlubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNWYWx1ZUtleUlubGluZXMuaDsg
cGF0aCA9IGIzL0IzVmFsdWVLZXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0gICAgICAgICAgICAgICAgMEYzMzhFMTcxQkYyODZFQTAwMTNDODhGIC8qIEIzQmxvY2tJbnNl
cnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNCbG9j
a0luc2VydGlvblNldC5jcHA7IHBhdGggPSBiMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzMzhFMTcxQkYyODZFQTAwMTNDODhGIC8qIEIz
QmxvY2tJbnNlcnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNCbG9ja0luc2VydGlvblNldC5jcHA7IHBhdGggPSBiMy9CM0Jsb2NrSW5zZXJ0aW9uU2V0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMzhFMTgxQkYyODZFQTAwMTND
ODhGIC8qIEIzQmxvY2tJbnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNCbG9ja0luc2VydGlvblNldC5oOyBwYXRoID0gYjMvQjNCbG9ja0luc2VydGlvblNl
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMzOEUxOTFCRjI4NkVBMDAxM0M4
OEYgLyogQjNMb3dlck1hY3Jvcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM0xvd2VyTWFjcm9zLmNwcDsgcGF0aCA9IGIzL0IzTG93ZXJNYWNyb3MuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMzOEUxQTFCRjI4NkVBMDAxM0M4OEYgLyogQjNM
b3dlck1hY3Jvcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0xvd2VyTWFj
cm9zLmg7IHBhdGggPSBiMy9CM0xvd2VyTWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzRCMTQ3MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1VzZUtpbmQuY3BwOyBwYXRoID0gZGZn
L0RGR1VzZUtpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotICAgICAgICAgICAg
ICAgIDBGMzRCMTQ4MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1VzZUtpbmQuaDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5k
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzRCMTQ4MTZENDIwMEUwMDFDREE1
QSAvKiBERkdVc2VLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Vz
ZUtpbmQuaDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzhCMDBGMTdDRjA3N0YwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gTExJbnRFbnRyeXBvaW50LmNwcDsgcGF0aCA9IGxsaW50L0xMSW50
RW50cnlwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzhCMDEwMTdD
RjA3N0YwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRF
bnRyeXBvaW50Lmg7IHBhdGggPSBsbGludC9MTEludEVudHJ5cG9pbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOEIwMTMxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0
aW9uS2V5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbXBp
bGF0aW9uS2V5LmNwcDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbktleS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTc1LDYgKzI1NzgsOSBAQAogCQkwRkIxNzY1RDE5NkI4
RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0hlYXBMb2NhdGlvbi5oOyBwYXRoID0gZGZnL0RGR0hlYXBMb2NhdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkIxNzY1RTE5NkI4RjlFMDA5MTA1MkEg
LyogREZHUHVyZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR1B1cmVWYWx1ZS5jcHA7IHBhdGggPSBkZmcvREZHUHVyZVZhbHVlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVW
YWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQdXJlVmFsdWUuaDsg
cGF0aCA9IGRmZy9ERkdQdXJlVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZCMzg3OEIxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQmxvY2tXb3JrbGlzdC5oOyBwYXRoID0gYjMvYWly
L0FpckJsb2NrV29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCMzg3
OEMxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwOyBw
YXRoID0gYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjM4NzhEMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2Nr
T3JkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyT3B0aW1pemVCbG9j
a09yZGVyLmg7IHBhdGggPSBiMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQzOEEyMTkyNzBCMUQwMEUxRkJDOSAvKiBTdHJ1Y3R1
cmVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RydWN0dXJl
U2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNEI1MTAxNkIzQTk2NDAw
M0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHTWluaWZpZWRJRC5oOyBwYXRoID0gZGZnL0RGR01pbmlmaWVkSUQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNEI1MTkxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0FsbG9j
YXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBbGxvY2F0b3IuaDsg
cGF0aCA9IGRmZy9ERkdBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTQ1NjgsNiArNDU3NCw3IEBACiAJCQkJMEZFQzg1NEIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFy
Zy5oICovLAogCQkJCTBGRUM4NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNw
cCAqLywKIAkJCQkwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICov
LAorCQkJCTBGQjM4NzhCMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJCbG9ja1dvcmtsaXN0LmggKi8s
CiAJCQkJMEZFQzg1NEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi8s
CiAJCQkJMEZFQzg1NEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovLAog
CQkJCTBGRUM4NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCAqLywKQEAgLTQ1OTAs
NiArNDU5Nyw4IEBACiAJCQkJMjY3MThCQTMxQkU5OUY3ODAwNTIwMTdCIC8qIEFpckl0ZXJhdGVk
UmVnaXN0ZXJDb2FsZXNjaW5nLmggKi8sCiAJCQkJMEZFQzg1NUQxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckxpdmVuZXNzLmggKi8sCiAJCQkJMjY0MDkxRkExQkUyRkQ0MTAwNjg0REIyIC8qIEFpck9w
Y29kZS5vcGNvZGVzICovLAorCQkJCTBGQjM4NzhDMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRp
bWl6ZUJsb2NrT3JkZXIuY3BwICovLAorCQkJCTBGQjM4NzhEMUJGQkM0NEQwMEUzQUIxRSAvKiBB
aXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCAqLywKIAkJCQkwRkVDODU1RTFCREFDREM3MDA4MEZGNzQg
LyogQWlyUGhhc2VTY29wZS5jcHAgKi8sCiAJCQkJMEZFQzg1NUYxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclBoYXNlU2NvcGUuaCAqLywKIAkJCQkwRkVDODU2MDFCREFDREM3MDA4MEZGNzQgLyogQWly
UmVnaXN0ZXJQcmlvcml0eS5jcHAgKi8sCkBAIC03NTAxLDYgKzc1MTAsNyBAQAogCQkJCTBGRjcy
OUE1MTY2QUQzNTEwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkY3MjlCOTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMTM5MTJBMTY3NzFDMzYwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVj
b2RlU2VxdWVuY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjM4NzkwMUJGQkM0NEQwMEUzQUIx
RSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJB
MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkY3MjlCQjE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbktpbmQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJDMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxl
ckNvbXBpbGVkQnl0ZWNvZGUuaCBpbiBIZWFkZXJzICovLApAQCAtNzYwMiw2ICs3NjEyLDcgQEAK
IAkJCQk5OTZCNzMyNjFCREEwOEVGMDAzMzFCODQgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUu
bHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2ODBFMTZGNUNEMDBCMzQ0NjAgLyogU3Ry
aW5nT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2QTBFMTZGNUNEMDBCMzQ0NjAg
LyogU3RyaW5nUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkIzODc4RTFCRkJDNDRE
MDBFM0FCMUUgLyogQWlyQmxvY2tXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMx
M0IxMzRGRjBBNjAwQUZBREI1IC8qIFN0cm9uZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ1NzIy
ODYxNDM3RTE0MDAwNUZERTI2IC8qIFN0cm9uZ0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDREUzQUI4MEU2QzgyRjUwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICovLApA
QCAtODQzMiw2ICs4NDQzLDcgQEAKIAkJCQkwRkYyQ0Q1QjFCNjFBNEY4MDA0OTU1QTggLyogREZH
TXVsdGlHZXRCeU9mZnNldERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTczNzgxMEQxNzk5
RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkYwRjE5QzE2QjcyQTAzMDA1REY5NUIgLyogREZHTm9kZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkIzODc4RjFCRkJDNDREMDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGQTU4MUJBMTUwRTk1MkMwMEI5QTJEOSAvKiBERkdOb2RlRmxh
Z3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1RDA4NUQxQjhDRjk5RDAwMTE0M0I0IC8qIERG
R05vZGVPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjlDRTYxOUQwQkE3RDAwQjFE
MUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5oCShyZXZp
c2lvbiAxOTI1MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CiAKLWNsYXNzIEJhc2ljQmxvY2s7Ci0KIHR5cGVkZWYgR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0Owog
CiAvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0IGFzICJi
bG9jayB3aXRoIGFuIGludCIuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5l
cmljRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCShyZXZpc2lvbiAxOTI1MTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY3LDYgKzY3LDggQEAgcHVibGljOgogICAgIEZyZXF1ZW5jeUNsYXNzIGZyZXF1
ZW5jeSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJlcXVlbmN5OyB9CiAgICAgRnJlcXVlbmN5Q2xhc3Mm
IGZyZXF1ZW5jeSgpIHsgcmV0dXJuIG1fZnJlcXVlbmN5OyB9CiAKKyAgICBib29sIGlzUmFyZSgp
IGNvbnN0IHsgcmV0dXJuIGZyZXF1ZW5jeSgpID09IEZyZXF1ZW5jeUNsYXNzOjpSYXJlOyB9CisK
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICB7CiAgICAgICAgIGlm
IChmcmVxdWVuY3koKSAhPSBGcmVxdWVuY3lDbGFzczo6Tm9ybWFsKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHJldmlzaW9uIDE5MjUxNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1
Myw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9jZWR1cmUoKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSB+UHJvY2VkdXJlKCk7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBC
YXNpY0Jsb2NrKiBhZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgQmFzaWNCbG9jayogYWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSA9IDEpOwog
ICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1l
bnRzPgogICAgIFZhbHVlVHlwZSogYWRkKEFyZ3VtZW50cy4uLik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDE5MjUxNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4MCw2ICszODAs
MTggQEAgcHVibGljOgogICAgICAgICByZXR1cm4ga2luZCgpID09IERvdWJsZUNvbmQ7CiAgICAg
fQogCisgICAgYm9vbCBpc0NvbmRpdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2gg
KGtpbmQoKSkgeworICAgICAgICBjYXNlIFJlbENvbmQ6CisgICAgICAgIGNhc2UgUmVzQ29uZDoK
KyAgICAgICAgY2FzZSBEb3VibGVDb25kOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisKICAgICBib29sIGlzU3BlY2lhbCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4ga2lu
ZCgpID09IFNwZWNpYWw7CkBAIC03MjQsNiArNzM2LDIxIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24+KG1fb2Zmc2V0
KTsKICAgICB9CiAKKyAgICAvLyBUZWxscyB5b3UgaWYgdGhlIEFyZyBpcyBpbnZlcnRpYmxlLiBP
bmx5IGNvbmRpdGlvbiBhcmd1bWVudHMgYXJlIGludmVydGlibGUsIGFuZCBldmVuIGZvciB0aG9z
ZSwgdGhlcmUKKyAgICAvLyBhcmUgYSBmZXcgZXhjZXB0aW9ucyAtIG5vdGFibHkgT3ZlcmZsb3cg
YW5kIFNpZ25lZC4KKyAgICBib29sIGlzSW52ZXJ0aWJsZSgpIGNvbnN0CisgICAgeworICAgICAg
ICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIFJlbENvbmQ6CisgICAgICAgIGNhc2Ug
RG91YmxlQ29uZDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFJlc0Nv
bmQ6CisgICAgICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OmlzSW52ZXJ0aWJsZShhc1Jl
c3VsdENvbmRpdGlvbigpKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8vIFRoaXMgaXMgdmFsaWQgZm9yIGNvbmRp
dGlvbiBhcmd1bWVudHMuIEl0IHdpbGwgaW52ZXJ0IHRoZW0uCiAgICAgQXJnIGludmVydGVkKGJv
b2wgaW52ZXJ0ZWQgPSB0cnVlKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxOTI1MTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtNTAsNiArNTAsOSBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBWZWN0b3I8RnJlcXVlbnRlZEJs
b2NrLCAyPiBTdWNjZXNzb3JMaXN0OwogCiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJl
dHVybiBtX2luZGV4OyB9CisKKyAgICAvLyBZb3Ugc2hvdWxkbid0IGNhbGwgdGhpcyBleGNlcHQg
d2hlbiB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy4KKyAgICB2b2lkIHNldEluZGV4KHVuc2ln
bmVkIGluZGV4KSB7IG1faW5kZXggPSBpbmRleDsgfQogICAgIAogICAgIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX2luc3RzLnNpemUoKTsgfQogICAgIEluc3RMaXN0OjppdGVyYXRv
ciBiZWdpbigpIHsgcmV0dXJuIG1faW5zdHMuYmVnaW4oKTsgfQpAQCAtMTEwLDYgKzExMyw4IEBA
IHB1YmxpYzoKICAgICBib29sIHJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBC
YXNpY0Jsb2NrKiB0byk7CiAgICAgYm9vbCBjb250YWluc1ByZWRlY2Vzc29yKEJhc2ljQmxvY2sq
IHByZWRlY2Vzc29yKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29ycy5jb250YWlucyhwcmVk
ZWNlc3Nvcik7IH0KIAorICAgIGRvdWJsZSBmcmVxdWVuY3koKSBjb25zdCB7IHJldHVybiBtX2Zy
ZXF1ZW5jeTsgfQorCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9p
ZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJsb2NrV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckJsb2NrV29ya2xpc3QuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmxvY2tXb3JrbGlzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBBaXJCbG9ja1dvcmtsaXN0X2gKKyNkZWZpbmUgQWlyQmxvY2tX
b3JrbGlzdF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9j
ay5oIgorI2luY2x1ZGUgIkIzQmxvY2tXb3JrbGlzdC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3R5cGVkZWYgR3JhcGhOb2RlV29ya2xpc3Q8
QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0OworCisvLyBX
aGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3
aXRoIGFuIGludCIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFw
aE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKKworLy8gRXh0ZW5kZWQgYmxvY2sgd29ya2xpc3Qg
aXMgdXNlZnVsIGZvciBlbnF1ZXVlaW5nIHNvbWUgbWV0YS1kYXRhIGFsb25nIHdpdGggdGhlIGJs
b2NrLiBJdCBhbHNvCisvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4g
aWYgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCisvLyB0
aGluZ3MgbGlrZSBidWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhl
IGF1eGlsaWFyeSBwYXlsb2FkKSB3b3VsZCBiZSB0aGUKKy8vIHN1Y2Nlc3NvciBpbmRleC4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVk
R3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsK
KwordHlwZWRlZiBHcmFwaE5vZGVXaXRoT3JkZXI8QmFzaWNCbG9jayo+IEJsb2NrV2l0aE9yZGVy
OworCit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRl
eFNldDxCYXNpY0Jsb2NrPj4gUG9zdE9yZGVyQmxvY2tXb3JrbGlzdDsKKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEFpckJsb2NrV29ya2xpc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQ29kZS5jcHAJKHJldmlzaW9uIDE5MjUxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw3ICsxMjgsMTAgQEAg
dW5zaWduZWQgQ29kZTo6ZmluZE5leHRCbG9ja0luZGV4KHVuc2lnbgogCiBCYXNpY0Jsb2NrKiBD
b2RlOjpmaW5kTmV4dEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAogewotICAgIHJldHVy
biBhdChmaW5kTmV4dEJsb2NrSW5kZXgoYmxvY2stPmluZGV4KCkpKTsKKyAgICB1bnNpZ25lZCBp
bmRleCA9IGZpbmROZXh0QmxvY2tJbmRleChibG9jay0+aW5kZXgoKSk7CisgICAgaWYgKGluZGV4
IDwgc2l6ZSgpKQorICAgICAgICByZXR1cm4gYXQoaW5kZXgpOworICAgIHJldHVybiBudWxscHRy
OwogfQogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMTkyNTE2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1
LDcgQEAgcHVibGljOgogCiAgICAgUHJvY2VkdXJlJiBwcm9jKCkgeyByZXR1cm4gbV9wcm9jOyB9
CiAKLSAgICBCYXNpY0Jsb2NrKiBhZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7Cisg
ICAgQmFzaWNCbG9jayogYWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSA9IDEpOwogCiAgICAgU3Rh
Y2tTbG90KiBhZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQsIFN0
YWNrU2xvdFZhbHVlKiA9IG51bGxwdHIpOwogICAgIFN0YWNrU2xvdCogYWRkU3RhY2tTbG90KFN0
YWNrU2xvdFZhbHVlKik7CkBAIC0xMTUsNiArMTE1LDEwIEBAIHB1YmxpYzoKICAgICBCYXNpY0Js
b2NrKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3NbaW5kZXhdLmdl
dCgpOyB9CiAgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gYXQoaW5kZXgpOyB9CiAKKyAgICAvLyBUaGlzIGlzIHVzZWQgYnkgcGhhc2VzIHRo
YXQgb3B0aW1pemUgdGhlIGJsb2NrIGxpc3QuIFlvdSBzaG91bGRuJ3QgdXNlIHRoaXMgdW5sZXNz
IHlvdSByZWFsbHkga25vdworICAgIC8vIHdoYXQgeW91J3JlIGRvaW5nLgorICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBibG9ja0xpc3QoKSB7IHJldHVybiBtX2Jsb2Nr
czsgfQorCiAgICAgLy8gRmluZHMgdGhlIHNtYWxsZXN0IGluZGV4JyBzdWNoIHRoYXQgYXQoaW5k
ZXgnKSAhPSBudWxsIGFuZCBpbmRleCcgPj0gaW5kZXguCiAgICAgdW5zaWduZWQgZmluZEZpcnN0
QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAxOTI1MTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCiAj
aW5jbHVkZSAiQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCIKICNpbmNsdWRlICJBaXJJdGVyYXRlZFJl
Z2lzdGVyQ29hbGVzY2luZy5oIgorI2luY2x1ZGUgIkFpck9wdGltaXplQmxvY2tPcmRlci5oIgog
I2luY2x1ZGUgIkFpclJlcG9ydFVzZWRSZWdpc3RlcnMuaCIKICNpbmNsdWRlICJBaXJTaW1wbGlm
eUNGRy5oIgogI2luY2x1ZGUgIkFpclNwaWxsRXZlcnl0aGluZy5oIgpAQCAtODYsOSArODcsMTEg
QEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIAogICAgIC8vIHBoYXNl
LgogICAgIHNpbXBsaWZ5Q0ZHKGNvZGUpOwogCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWFs
bHkgaGF2ZSBhIGNvZGUgbGF5b3V0IG9wdGltaXphdGlvbiBoZXJlLgotICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NzgKKyAgICAvLyBUaGlzIHNvcnRz
IHRoZSBiYXNpYyBibG9ja3MgaW4gQ29kZSB0byBhY2hpZXZlIGFuIG9yZGVyaW5nIHRoYXQgbWF4
aW1pemVzIHRoZSBsaWtlbGlob29kIHRoYXQgYSBoaWdoCisgICAgLy8gZnJlcXVlbmN5IHN1Y2Nl
c3NvciBpcyBhbHNvIHRoZSBmYWxsLXRocm91Z2ggdGFyZ2V0LgorICAgIG9wdGltaXplQmxvY2tP
cmRlcihjb2RlKTsKIAorICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIHNhdGlzZnkgYSByZXF1aXJl
bWVudCBvZiBCMzo6U3RhY2ttYXBWYWx1ZS4KICAgICByZXBvcnRVc2VkUmVnaXN0ZXJzKGNvZGUp
OwogCiAgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMTkyNTE2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBj
b3B5KQpAQCAtMjY1LDYgKzI2NSw5IEBAIFRlc3Q2NCBVOkcsIFU6RywgVTpHLCBEOkcKICAgICBS
ZXNDb25kLCBUbXAsIEltbSwgVG1wCiAgICAgUmVzQ29uZCwgVG1wLCBUbXAsIFRtcAogCisjIE5v
dGUgdGhhdCBicmFuY2hlcyBoYXZlIHNvbWUgbG9naWMgaW4gQWlyT3B0aW1pemVCbG9ja09yZGVy
LmNwcC4gSWYgeW91IGFkZCBuZXcgYnJhbmNoZXMsIHBsZWFzZSBtYWtlIHN1cmUKKyMgeW91IG9w
dCB0aGVtIGludG8gdGhlIGJsb2NrIG9yZGVyIG9wdGltaXphdGlvbnMuCisKIEJyYW5jaDggVTpH
LCBVOkcsIFU6RyAvYnJhbmNoCiAgICAgUmVsQ29uZCwgQWRkciwgSW1tCiAgICAgUmVsQ29uZCwg
SW5kZXgsIEltbQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6
ZUJsb2NrT3JkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyT3B0aW1pemVCbG9j
a09yZGVyLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmxvY2tXb3Jr
bGlzdC5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5o
IgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKyNpbmNsdWRlIDx3dGYvQnViYmxlU29ydC5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK25h
bWVzcGFjZSB7CisKK2NsYXNzIFNvcnRlZFN1Y2Nlc3NvcnMgeworcHVibGljOgorICAgIFNvcnRl
ZFN1Y2Nlc3NvcnMoKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZChCYXNpY0Jsb2Nr
KiBibG9jaykKKyAgICB7CisgICAgICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQoYmxvY2spOworICAg
IH0KKworICAgIHZvaWQgcHJvY2VzcyhCbG9ja1dvcmtsaXN0JiB3b3JrbGlzdCkKKyAgICB7Cisg
ICAgICAgIC8vIFdlIHByZWZlciBhIHN0YWJsZSBzb3J0LCBhbmQgd2UgZG9uJ3Qgd2FudCBpdCB0
byBnbyBvZmYgdGhlIHJhaWxzIGlmIHdlIHNlZSBOYU4uIEFsc28sIHRoZSBudW1iZXIKKyAgICAg
ICAgLy8gb2Ygc3VjY2Vzc29ycyBpcyBib3VuZGVkLiBJbiBmYWN0LCBpdCBjdXJyZW50bHkgY2Fu
bm90IGJlIG1vcmUgdGhhbiAyLiA6LSkKKyAgICAgICAgYnViYmxlU29ydCgKKyAgICAgICAgICAg
IG1fc3VjY2Vzc29ycy5iZWdpbigpLCBtX3N1Y2Nlc3NvcnMuZW5kKCksCisgICAgICAgICAgICBb
XSAoQmFzaWNCbG9jayogbGVmdCwgQmFzaWNCbG9jayogcmlnaHQpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbGVmdC0+ZnJlcXVlbmN5KCkgPCByaWdodC0+ZnJlcXVlbmN5KCk7CisgICAgICAg
ICAgICB9KTsKKworICAgICAgICAvLyBQdXNoaW5nIHRoZSBzdWNjZXNzb3JzIGluIGFzY2VuZGlu
ZyBvcmRlciBvZiBmcmVxdWVuY3kgZW5zdXJlcyB0aGF0IHRoZSB2ZXJ5IG5leHQgYmxvY2sgd2Ug
dmlzaXQKKyAgICAgICAgLy8gaXMgb3VyIGhpZ2hlc3QtZnJlcXVlbmN5IHN1Y2Nlc3NvciAodW5s
ZXNzIHRoYXQgc3VjY2Vzc29yIGhhcyBhbHJlYWR5IGJlZW4gdmlzaXRlZCkuCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N1Y2Nlc3NvcnMuc2l6ZSgpOyArK2kpCisgICAgICAg
ICAgICB3b3JrbGlzdC5wdXNoKG1fc3VjY2Vzc29yc1tpXSk7CisgICAgICAgIAorICAgICAgICBt
X3N1Y2Nlc3NvcnMucmVzaXplKDApOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8QmFz
aWNCbG9jayosIDI+IG1fc3VjY2Vzc29yczsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFj
ZQorCit2b2lkIG9wdGltaXplQmxvY2tPcmRlcihDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2Nv
cGUgcGhhc2VTY29wZShjb2RlLCAib3B0aW1pemVCbG9ja09yZGVyIik7CisKKyAgICBWZWN0b3I8
QmFzaWNCbG9jayo+IGJsb2Nrc0luT3JkZXI7CisKKyAgICBCbG9ja1dvcmtsaXN0IGZhc3RXb3Jr
bGlzdDsKKyAgICBTb3J0ZWRTdWNjZXNzb3JzIHNvcnRlZFN1Y2Nlc3NvcnM7CisgICAgU29ydGVk
U3VjY2Vzc29ycyBzb3J0ZWRTbG93U3VjY2Vzc29yczsKKyAgICAKKyAgICBmYXN0V29ya2xpc3Qu
cHVzaChjb2RlWzBdKTsKKyAgICAKKyAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSBmYXN0
V29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgYmxvY2tzSW5PcmRlci5hcHBlbmQoYmxvY2spOwor
ICAgICAgICBmb3IgKEZyZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3Nv
cnMoKSkgeworICAgICAgICAgICAgaWYgKHN1Y2Nlc3Nvci5pc1JhcmUoKSkKKyAgICAgICAgICAg
ICAgICBzb3J0ZWRTbG93U3VjY2Vzc29ycy5hcHBlbmQoc3VjY2Vzc29yLmJsb2NrKCkpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNvcnRlZFN1Y2Nlc3NvcnMuYXBwZW5kKHN1
Y2Nlc3Nvci5ibG9jaygpKTsKKyAgICAgICAgfQorICAgICAgICBzb3J0ZWRTdWNjZXNzb3JzLnBy
b2Nlc3MoZmFzdFdvcmtsaXN0KTsKKyAgICB9CisKKyAgICBCbG9ja1dvcmtsaXN0IHNsb3dXb3Jr
bGlzdDsKKyAgICBzb3J0ZWRTbG93U3VjY2Vzc29ycy5wcm9jZXNzKHNsb3dXb3JrbGlzdCk7CisK
KyAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSBzbG93V29ya2xpc3QucG9wKCkpIHsKKyAg
ICAgICAgLy8gV2UgbWlnaHQgaGF2ZSBhbHJlYWR5IHByb2Nlc3NlZCB0aGlzIGJsb2NrLgorICAg
ICAgICBpZiAoZmFzdFdvcmtsaXN0LnNhdyhibG9jaykpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgCisgICAgICAgIGJsb2Nrc0luT3JkZXIuYXBwZW5kKGJsb2NrKTsKKyAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpCisg
ICAgICAgICAgICBzb3J0ZWRTdWNjZXNzb3JzLmFwcGVuZChzdWNjZXNzb3IpOworICAgICAgICBz
b3J0ZWRTdWNjZXNzb3JzLnByb2Nlc3Moc2xvd1dvcmtsaXN0KTsKKyAgICB9CisKKyAgICBBU1NF
UlQoZmFzdFdvcmtsaXN0LmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKHNsb3dXb3JrbGlzdC5pc0Vt
cHR5KCkpOworCisgICAgLy8gUGxhY2UgYmxvY2tzIGludG8gQ29kZSdzIGJsb2NrIGxpc3QgYWNj
b3JkaW5nIHRvIHRoZSBvcmRlcmluZyBpbiBibG9ja3NJbk9yZGVyLiBXZSBkbyB0aGlzIGJ5IGxl
YWtpbmcKKyAgICAvLyBhbGwgb2YgdGhlIGJsb2NrcyBhbmQgdGhlbiByZWFkb3B0aW5nIHRoZW0u
CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IGNvZGUuYmxvY2tMaXN0KCkpCisgICAgICAgIGVudHJ5
LnJlbGVhc2UoKTsKKworICAgIGNvZGUuYmxvY2tMaXN0KCkucmVzaXplKDApOworCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2Nrc0luT3JkZXIuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBibG9ja3NJbk9yZGVyW2ldOworICAgICAgICBibG9jay0+
c2V0SW5kZXgoaSk7CisgICAgICAgIGNvZGUuYmxvY2tMaXN0KCkuYXBwZW5kKHN0ZDo6dW5pcXVl
X3B0cjxCYXNpY0Jsb2NrPihibG9jaykpOworICAgIH0KKworICAgIC8vIEZpbmFsbHksIGZsaXAg
YW55IGJyYW5jaGVzIHRoYXQgd2UgcmVjb2duaXplLiBJdCdzIG1vc3Qgb3B0aW1hbCBpZiB0aGUg
dGFrZW4gc3VjY2Vzc29yIGRvZXMgbm90IHBvaW50CisgICAgLy8gYXQgdGhlIG5leHQgYmxvY2su
CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgSW5zdCYgYnJh
bmNoID0gYmxvY2stPmxhc3QoKTsKKworICAgICAgICAvLyBJdCdzIHNvbWV3aGF0IHRlbXB0aW5n
IHRvIGp1c3Qgc2F5IHRoYXQgaWYgdGhlIGJsb2NrIGhhcyB0d28gc3VjY2Vzc29ycyBhbmQgdGhl
IGZpcnN0IGFyZyBpcworICAgICAgICAvLyBpbnZlcnRpYmxlLCB0aGVuIHdlIGNhbiBkbyB0aGUg
b3B0aW1pemF0aW9uLiBCdXQgdGhhdCdzIHdhZ2dpbmcgdGhlIGRvZy4gVGhlIGZhY3QgdGhhdCBh
bgorICAgICAgICAvLyBpbnN0cnVjdGlvbiBoYXBwZW5zIHRvIGhhdmUgYW4gYXJndW1lbnQgdGhh
dCBpcyBpbnZlcnRpYmxlIGRvZXNuJ3QgbWVhbiBpdCdzIGEgYnJhbmNoLCBldmVuIHRob3VnaAor
ICAgICAgICAvLyBpdCBpcyB0cnVlIHRoYXQgY3VycmVudGx5IG9ubHkgYnJhbmNoZXMgaGF2ZSBp
bnZlcnRpYmxlIGFyZ3VtZW50cy4gSXQncyBhbHNvIHRlbXB0aW5nIHRvIHNheSB0aGF0CisgICAg
ICAgIC8vIHRoZSAvYnJhbmNoIGZsYWcgaW4gQWlyT3Bjb2RlLm9wY29kZXMgdGVsbHMgdXMgdGhh
dCBzb21ldGhpbmcgaXMgYSBicmFuY2ggLSBleGNlcHQgdGhhdCB0aGVyZSwKKyAgICAgICAgLy8g
L2JyYW5jaCBhbHNvIG1lYW5zIEp1bXAuIFRoZSBhcHByb2FjaCB0YWtlbiBoZXJlIG1lYW5zIHRo
YXQgaWYgeW91IGFkZCBuZXcgYnJhbmNoIGluc3RydWN0aW9ucyBhbmQKKyAgICAgICAgLy8gZm9y
Z2V0IGFib3V0IHRoaXMgcGhhc2UsIHRoZW4gYXQgd29yc2UgeW91ciBuZXcgaW5zdHJ1Y3Rpb25z
IHdvbid0IG9wdCBpbnRvIHRoZSBpbnZlcnNpb24KKyAgICAgICAgLy8gb3B0aW1pemF0aW9uLiAg
WW91J2xsIHByb2JhYmx5IHJlYWxpemUgdGhhdCBhcyBzb29uIGFzIHlvdSBsb29rIGF0IHRoZSBk
aXNhc3NlbWJseSwgYW5kIGl0CisgICAgICAgIC8vIGNlcnRhaW5seSB3b24ndCBjYXVzZSBhbnkg
Y29ycmVjdG5lc3MgaXNzdWVzLgorICAgICAgICAKKyAgICAgICAgc3dpdGNoIChicmFuY2gub3Bj
b2RlKSB7CisgICAgICAgIGNhc2UgQnJhbmNoODoKKyAgICAgICAgY2FzZSBCcmFuY2gzMjoKKyAg
ICAgICAgY2FzZSBCcmFuY2g2NDoKKyAgICAgICAgY2FzZSBCcmFuY2hUZXN0ODoKKyAgICAgICAg
Y2FzZSBCcmFuY2hUZXN0MzI6CisgICAgICAgIGNhc2UgQnJhbmNoVGVzdDY0OgorICAgICAgICBj
YXNlIEJyYW5jaERvdWJsZToKKyAgICAgICAgY2FzZSBCcmFuY2hBZGQzMjoKKyAgICAgICAgY2Fz
ZSBCcmFuY2hBZGQ2NDoKKyAgICAgICAgY2FzZSBCcmFuY2hNdWwzMjoKKyAgICAgICAgY2FzZSBC
cmFuY2hNdWw2NDoKKyAgICAgICAgY2FzZSBCcmFuY2hTdWIzMjoKKyAgICAgICAgY2FzZSBCcmFu
Y2hTdWI2NDoKKyAgICAgICAgY2FzZSBCcmFuY2hOZWczMjoKKyAgICAgICAgY2FzZSBCcmFuY2hO
ZWc2NDoKKyAgICAgICAgICAgIGlmIChjb2RlLmZpbmROZXh0QmxvY2soYmxvY2spID09IGJsb2Nr
LT5zdWNjZXNzb3JCbG9jaygwKSAmJiBicmFuY2guYXJnc1swXS5pc0ludmVydGlibGUoKSkgewor
ICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChibG9jay0+c3VjY2Vzc29yKDApLCBibG9jay0+c3Vj
Y2Vzc29yKDEpKTsKKyAgICAgICAgICAgICAgICBicmFuY2guYXJnc1swXSA9IGJyYW5jaC5hcmdz
WzBdLmludmVydGVkKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9w
dGltaXplQmxvY2tPcmRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXJfaAorI2RlZmluZSBBaXJPcHRp
bWl6ZUJsb2NrT3JkZXJfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBSZW9y
ZGVycyB0aGUgYmFzaWMgYmxvY2tzIHRvIGtlZXAgaG90IGJsb2NrcyBhdCB0aGUgdG9wLCBhbmQg
bWF4aW1pemUgdGhlIGxpa2VsaWhvb2QgdGhhdCBhIGZyZXF1ZW50bHkKKy8vIHRha2VuIGVkZ2Ug
aXMganVzdCBhIGZhbGwtdGhyb3VnaC4KKwordm9pZCBvcHRpbWl6ZUJsb2NrT3JkZXIoQ29kZSYp
OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQWlyT3B0aW1pemVCbG9ja09yZGVyX2gKKwpJbmRleDogU291
cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE5MjUxNikKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTUtMTEtMTcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNv
bT4KKworICAgICAgICBBaXIgc2hvdWxkIGxheSBvdXQgY29kZSBvcHRpbWFsbHkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ3OAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0dyYXBoTm9kZVdv
cmtsaXN0Lmg6CisgICAgICAgIChXVEY6OkdyYXBoTm9kZVdvcmtsaXN0OjpwdXNoKToKKyAgICAg
ICAgKFdURjo6R3JhcGhOb2RlV29ya2xpc3Q6OmlzRW1wdHkpOgorICAgICAgICAoV1RGOjpHcmFw
aE5vZGVXb3JrbGlzdDo6bm90RW1wdHkpOgorICAgICAgICAoV1RGOjpHcmFwaE5vZGVXb3JrbGlz
dDo6cG9wKToKKwogMjAxNS0xMS0xMSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUu
Y29tPgogCiAgICAgICAgIEVuYWJsZSBjcm9zcy1wbGF0Zm9ybSBjb250ZXh0IG1lbnVzIGJ5IGRl
ZmF1bHQKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0dyYXBoTm9kZVdvcmtsaXN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvR3JhcGhOb2RlV29ya2xpc3QuaAkocmV2aXNpb24gMTkyNTE2
KQorKysgU291cmNlL1dURi93dGYvR3JhcGhOb2RlV29ya2xpc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNDUsNiArNDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAor
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2suaXNFbXB0eSgpOyB9CiAg
ICAgYm9vbCBub3RFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX3N0YWNrLmlzRW1wdHkoKTsgfQog
ICAgIAogICAgIE5vZGUgcG9wKCkK
</data>
<flag name="review"
          id="290719"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>