<?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>236570</bug_id>
          
          <creation_ts>2022-02-13 13:31:51 -0800</creation_ts>
          <short_desc>Cache an entire attribute QualifiedName when parsing HTML, not just its local name AtomString</short_desc>
          <delta_ts>2022-02-16 19:22:17 -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>DOM</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Cameron McCormack (:heycam)">heycam</reporter>
          <assigned_to name="Cameron McCormack (:heycam)">heycam</assigned_to>
          <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1841068</commentid>
    <comment_count>0</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2022-02-13 13:31:51 -0800</bug_when>
    <thetext>Bug 229907 added HTMLAtomStringCache, which uses a fast to compute hash that works well to cache HTML tag names, attribute names, and attribute value.  When AtomHTMLToken initializes its list of Attributes, it uses HTMLAtomStringCache to look up or create an AtomString for the attribute&apos;s local name, and then creates a QualifiedName to wrap it.  QualifiedName construction involves looking up QualifiedNameCache, which is a thread-specific cache of QualifiedNameImpl objects.  If we make HTMLAtomStringCache responsible for caching an attribute&apos;s QualifiedName instead of just its local name AtomString, we can avoid the work of looking up the QualifiedNameCache.

Doing this results in a 0.2-0.3% improvement on Speedometer 2, and a 0.3-0.4% improvement on PLT5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841069</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-02-13 13:32:03 -0800</bug_when>
    <thetext>&lt;rdar://problem/88876545&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841070</commentid>
    <comment_count>2</comment_count>
      <attachid>451841</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2022-02-13 14:00:49 -0800</bug_when>
    <thetext>Created attachment 451841
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841080</commentid>
    <comment_count>3</comment_count>
      <attachid>451841</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-13 15:29:28 -0800</bug_when>
    <thetext>Comment on attachment 451841
Patch

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

&gt; Source/WebCore/html/parser/HTMLNameCache.h:38
&gt; +    ALWAYS_INLINE static AtomString makeTagName(const Vector&lt;UChar, inlineCapacity&gt;&amp; string)

Can this take a Span&lt;UChar&gt; instead? Should be just as fast, although we’d need to test.

&gt; Source/WebCore/html/parser/HTMLNameCache.h:44
&gt; +    ALWAYS_INLINE static QualifiedName makeAttributeQualifiedName(const Vector&lt;UChar, inlineCapacity&gt;&amp; string)

Ditto.

&gt; Source/WebCore/html/parser/HTMLNameCache.h:50
&gt; +    ALWAYS_INLINE static AtomString makeAttributeValue(const Vector&lt;UChar, inlineCapacity&gt;&amp; string)

Ditto.

&gt; Source/WebCore/html/parser/HTMLNameCache.h:67
&gt; +    ALWAYS_INLINE static AtomString makeAtomString(const Vector&lt;UChar, inlineCapacity&gt;&amp; string)

Ditto.

&gt; Source/WebCore/html/parser/HTMLNameCache.h:89
&gt; +    ALWAYS_INLINE static QualifiedName makeQualifiedName(const Vector&lt;UChar, inlineCapacity&gt;&amp; string)

Ditto.

&gt; Source/WebCore/html/parser/HTMLNameCache.h:134
&gt; +    using QualifiedNameCache = std::array&lt;RefPtr&lt;QualifiedName::QualifiedNameImpl&gt;, capacity&gt;;

Why is this RefPtr&lt;Impl&gt; instead of just QualifiedName?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841082</commentid>
    <comment_count>4</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2022-02-13 15:45:47 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #3)
&gt; Can this take a Span&lt;UChar&gt; instead? Should be just as fast, although we’d
&gt; need to test.

Yes, should be able to.  Then it could be untemplatized.

&gt; &gt; Source/WebCore/html/parser/HTMLNameCache.h:134
&gt; &gt; +    using QualifiedNameCache = std::array&lt;RefPtr&lt;QualifiedName::QualifiedNameImpl&gt;, capacity&gt;;
&gt; 
&gt; Why is this RefPtr&lt;Impl&gt; instead of just QualifiedName?

std::array&lt;QualifiedName&gt; would require QualifiedName have a default constructor, which it doesn&apos;t currently, since it doesn&apos;t support its m_impl being null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841091</commentid>
    <comment_count>5</comment_count>
      <attachid>451849</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2022-02-13 17:35:06 -0800</bug_when>
    <thetext>Created attachment 451849
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842655</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-02-16 19:22:13 -0800</bug_when>
    <thetext>Committed r289991 (247377@main): &lt;https://commits.webkit.org/247377@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 451849.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451841</attachid>
            <date>2022-02-13 14:00:49 -0800</date>
            <delta_ts>2022-02-13 17:35:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236570-20220214090048.patch</filename>
            <type>text/plain</type>
            <size>28436</size>
            <attacher name="Cameron McCormack (:heycam)">heycam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5Njg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjI0NTg1YWViYjRhMzYy
OTdhNjY4OTMyY2ZmNzNmMGZiZjA2MDQ3My4uZmY0NGQwNGFkN2JmN2RkZGZiMDhmNmMwYmM2YjU0
M2JlNzkzZmViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDIyLTAyLTEzICBDYW1l
cm9uIE1jQ29ybWFjayAgPGhleWNhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQ2FjaGUgYW4gZW50
aXJlIGF0dHJpYnV0ZSBRdWFsaWZpZWROYW1lIHdoZW4gcGFyc2luZyBIVE1MLCBub3QganVzdCBp
dHMgbG9jYWwgbmFtZSBBdG9tU3RyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzY1NzAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg4ODc2NTQ1
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAy
Mjk5MDcgYWRkZWQgSFRNTEF0b21TdHJpbmdDYWNoZSwgd2hpY2ggdXNlcyBhIGZhc3QgdG8gY29t
cHV0ZSBoYXNoCisgICAgICAgIHRoYXQgd29ya3Mgd2VsbCB0byBjYWNoZSBIVE1MIHRhZyBuYW1l
cywgYXR0cmlidXRlIG5hbWVzLCBhbmQgYXR0cmlidXRlCisgICAgICAgIHZhbHVlcy4gV2hlbiBB
dG9tSFRNTFRva2VuIGluaXRpYWxpemVzIGl0cyBsaXN0IG9mIEF0dHJpYnV0ZXMsIGl0IHVzZXMK
KyAgICAgICAgSFRNTEF0b21TdHJpbmdDYWNoZSB0byBsb29rIHVwIG9yIGNyZWF0ZSBhbiBBdG9t
U3RyaW5nIGZvciB0aGUKKyAgICAgICAgYXR0cmlidXRlJ3MgbG9jYWwgbmFtZSwgYW5kIHRoZW4g
Y3JlYXRlcyBhIFF1YWxpZmllZE5hbWUgdG8gd3JhcCBpdC4KKyAgICAgICAgUXVhbGlmaWVkTmFt
ZSBjb25zdHJ1Y3Rpb24gaW52b2x2ZXMgbG9va2luZyB1cCBRdWFsaWZpZWROYW1lQ2FjaGUsIHdo
aWNoCisgICAgICAgIGlzIGEgdGhyZWFkLXNwZWNpZmljIGNhY2hlIG9mIFF1YWxpZmllZE5hbWVJ
bXBsIG9iamVjdHMuIElmIHdlIG1ha2UKKyAgICAgICAgSFRNTEF0b21TdHJpbmdDYWNoZSByZXNw
b25zaWJsZSBmb3IgY2FjaGluZyBhbiBhdHRyaWJ1dGUncyBRdWFsaWZpZWROYW1lCisgICAgICAg
IGluc3RlYWQgb2YganVzdCBpdHMgbG9jYWwgbmFtZSBBdG9tU3RyaW5nLCB3ZSBjYW4gYXZvaWQg
dGhlIHdvcmsgb2YKKyAgICAgICAgbG9va2luZyB1cCB0aGUgUXVhbGlmaWVkTmFtZUNhY2hlLgor
CisgICAgICAgIFRvIHJlZmxlY3QgaXRzIGJyb2FkZXIgcmVzcG9uc2liaWxpdGllcywgSFRNTEF0
b21TdHJpbmdDYWNoZSBpcyByZW5hbWVkCisgICAgICAgIHRvIEhUTUxOYW1lQ2FjaGUuCisKKyAg
ICAgICAgRG9pbmcgdGhpcyByZXN1bHRzIGluIGEgMC4yLTAuMyUgaW1wcm92ZW1lbnQgb24gU3Bl
ZWRvbWV0ZXIgMiwgYW5kIGEKKyAgICAgICAgMC4zLTAuNCUgaW1wcm92ZW1lbnQgb24gUExUNSAo
d2l0aCB0aGUgbG93ZXIgZW5kIG9mIHRob3NlIHJhbmdlcyBiZWluZworICAgICAgICBvbiBBcHBs
ZSBTaWxpY29uIGFuZCB0aGUgaGlnaGVyIGVuZCBvbiBJbnRlbCkuCisKKyAgICAgICAgKiBTb3Vy
Y2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogZG9tL1F1YWxpZmllZE5hbWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlF1YWxpZmll
ZE5hbWU6OlF1YWxpZmllZE5hbWUpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0F0b21IVE1MVG9r
ZW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OkF0b21IVE1MVG9rZW46OmluaXRpYWxpemVBdHRyaWJ1
dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21IVE1MVG9rZW46OkF0b21IVE1MVG9rZW4pOgor
ICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxBdG9tU3RyaW5nQ2FjaGUuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxBdG9tU3RyaW5nQ2FjaGU6Om1ha2VUYWdPckF0dHJpYnV0ZU5h
bWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEF0b21TdHJpbmdDYWNoZTo6bWFr
ZUF0dHJpYnV0ZVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdG9tU3Ry
aW5nQ2FjaGU6OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdG9tU3Ry
aW5nQ2FjaGU6Om1ha2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEF0b21TdHJp
bmdDYWNoZTo6Y2FjaGVTbG90KTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1M
TmFtZUNhY2hlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxBdG9tU3RyaW5nQ2FjaGUuY3BwLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5hbWVDYWNoZTo6
YXRvbVN0cmluZ0NhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lQ2FjaGU6OnF1YWxp
ZmllZE5hbWVDYWNoZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTE5hbWVDYWNoZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lQ2FjaGU6Om1ha2VUYWdOYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lQ2FjaGU6Om1ha2VBdHRyaWJ1dGVRdWFsaWZpZWROYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lQ2FjaGU6Om1ha2VBdHRyaWJ1dGVWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTmFtZUNhY2hlOjpjbGVhcik6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTmFtZUNhY2hlOjptYWtlQXRvbVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTmFtZUNhY2hlOjptYWtlUXVhbGlmaWVkTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TmFtZUNhY2hlOjpzbG90SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5hbWVDYWNoZTo6
YXRvbVN0cmluZ0NhY2hlU2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTmFtZUNhY2hlOjpx
dWFsaWZpZWROYW1lQ2FjaGVTbG90KToKKyAgICAgICAgKiBwYWdlL01lbW9yeVJlbGVhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cmVsZWFzZU5vbmNyaXRpY2FsTWVtb3J5KToKKyAgICAgICAg
KiBwYWdlL2NvY29hL01lbW9yeVJlbGVhc2VDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6Ompl
dHRpc29uRXhwZW5zaXZlT2JqZWN0c09uVG9wTGV2ZWxOYXZpZ2F0aW9uKToKKwogMjAyMi0wMi0x
MSAgQ2FtZXJvbiBNY0Nvcm1hY2sgIDxoZXljYW1AYXBwbGUuY29tPgogCiAgICAgICAgIENvbnNp
c3Rlbmx5IHVzZSBoYXNUYWdOYW1lIGluc3RlYWQgb2YgaXM8PiBpbiBIVE1MU3RhY2tJdGVtIHRl
c3RpbmcgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDYxNDJkMjQzZGIyODgwYzUxZWZlZjU4
YTA0YzliMGJhNzUzZjYwNDEuLmUxM2UzM2QyMmMwNGU1OGZlOTg0ZTdlNDQyMmQ3ZjNhODZhNDdj
NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xNDA3LDcgKzE0MDcsNiBAQCBodG1sL2NhbnZhcy9XZWJH
TFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAKIGh0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVMuY3BwCiBodG1sL2Zvcm1zL0ZpbGVJY29uTG9hZGVyLmNwcAogaHRtbC9wYXJzZXIv
Q1NTUHJlbG9hZFNjYW5uZXIuY3BwCi1odG1sL3BhcnNlci9IVE1MQXRvbVN0cmluZ0NhY2hlLmNw
cAogaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCiBodG1sL3BhcnNlci9IVE1M
RG9jdW1lbnRQYXJzZXIuY3BwCiBodG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcApAQCAt
MTQxNSw2ICsxNDE0LDcgQEAgaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHAKIGh0bWwv
cGFyc2VyL0hUTUxFbnRpdHlTZWFyY2guY3BwCiBodG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0Vs
ZW1lbnRMaXN0LmNwcAogaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcAoraHRt
bC9wYXJzZXIvSFRNTE5hbWVDYWNoZS5jcHAKIGh0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMu
Y3BwCiBodG1sL3BhcnNlci9IVE1MUGFyc2VyT3B0aW9ucy5jcHAKIGh0bWwvcGFyc2VyL0hUTUxQ
YXJzZXJTY2hlZHVsZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggYThkNzM2ODVlMGJiNGY0YTc1NGVkZTQ5MTc2YTMyYjgw
ZTJkMmRiYi4uZTk1NmJhNzYxYTJiMTNlNjEyMzM3YTM1NDFhN2NjODY3NTg3Y2E1MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
NTU0Miw3ICs1NTQyLDcgQEAKIAkJRjQ5MzI4ODMyNzY5MDQxQjAwM0UyMEY4IC8qIE1vZGFsQ29u
dGFpbmVyVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY0OTMyODgyMjc2OTA0MUIwMDNFMjBGOCAvKiBNb2RhbENvbnRhaW5lclR5cGVzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ5Nzg2ODgx
RkY0NUZBNTAwRTA2MEFCIC8qIFBhc3RlYm9hcmRJdGVtSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ5Nzg2ODcxRkY0NUZBNTAwRTA2MEFCIC8q
IFBhc3RlYm9hcmRJdGVtSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUY0QTA2NEM4Mjc3RTQ4QzkwMEIwNkExNyAvKiBGb250Q29jb2EuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0QTA2NEM2Mjc3
RTQ4QzYwMEIwNkExNyAvKiBGb250Q29jb2EuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQlGNEIwMDE4OTI2RTdGMjFGMDA2RUFBQkUgLyogSFRNTEF0
b21TdHJpbmdDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRjRCMDAxODcyNkU3RjIxRjAwNkVBQUJFIC8qIEhUTUxBdG9tU3RyaW5nQ2FjaGUuaCAq
LzsgfTsKKwkJRjRCMDAxODkyNkU3RjIxRjAwNkVBQUJFIC8qIEhUTUxOYW1lQ2FjaGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0QjAwMTg3MjZFN0Yy
MUYwMDZFQUFCRSAvKiBIVE1MTmFtZUNhY2hlLmggKi87IH07CiAJCUY0QjJBOTA5MjY1MDMwQkEw
MDlFNzI4NiAvKiBEYXRhRGV0ZWN0b3JIaWdobGlnaHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0QjJBOTA2MjY1MDJCQTAwMDlFNzI4NiAvKiBEYXRh
RGV0ZWN0b3JIaWdobGlnaHQuaCAqLzsgfTsKIAkJRjRCNDIyQzQyMjBDMDU2ODAwOUUxRTdEIC8q
IERPTVBhc3RlQWNjZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNEI0MjJDMjIyMEMwMDAwMDA5RTFFN0QgLyogRE9NUGFzdGVBY2Nlc3MuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNEJGQjk4NTFF
MURERjlCMDA4NjJDMjQgLyogRHVtcEVkaXRpbmdIaXN0b3J5LmpzIGluIENvcHkgU2NyaXB0cyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDgzODk4MzFFMURERjJCMDA3NkI3
RUEgLyogRHVtcEVkaXRpbmdIaXN0b3J5LmpzICovOyB9OwpAQCAtMTc4NDEsOCArMTc4NDEsOCBA
QAogCQlGNDk3ODY4NzFGRjQ1RkE1MDBFMDYwQUIgLyogUGFzdGVib2FyZEl0ZW1JbmZvLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBhc3RlYm9hcmRJdGVtSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGNDlFOThFNDIxREVFNkMxMDA5QUU1NUUgLyogRWRpdEFjdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBFZGl0QWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRjRBMDY0QzYyNzdFNDhDNjAwQjA2QTE3IC8qIEZvbnRDb2NvYS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGb250Q29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRjRCMDAxODcyNkU3RjIxRjAwNkVBQUJFIC8qIEhUTUxBdG9tU3RyaW5nQ2FjaGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSFRNTEF0b21TdHJpbmdDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGNEIwMDE4ODI2RTdGMjFGMDA2RUFBQkUgLyogSFRNTEF0b21TdHJpbmdDYWNo
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MQXRvbVN0cmluZ0NhY2hlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjRCMDAxODcyNkU3RjIxRjAwNkVBQUJFIC8qIEhUTUxO
YW1lQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTE5hbWVDYWNoZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGNEIwMDE4ODI2RTdGMjFGMDA2RUFBQkUgLyogSFRNTE5hbWVDYWNo
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MTmFtZUNhY2hlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRjRCMkE5MDYyNjUwMkJBMDAwOUU3Mjg2IC8qIERhdGFEZXRlY3Rv
ckhpZ2hsaWdodC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRGV0ZWN0b3JIaWdobGlnaHQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRCMkE5MDgyNjUwMkJDMDAwOUU3Mjg2IC8qIERh
dGFEZXRlY3RvckhpZ2hsaWdodC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERhdGFEZXRlY3Rv
ckhpZ2hsaWdodC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRCMkE5MEMyNjUw
ODdFNDAwOUU3Mjg2IC8qIEltYWdlT3ZlcmxheUNvbnRyb2xsZXJNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBJbWFnZU92ZXJsYXlDb250cm9sbGVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjYzNzAsOCArMjYzNzAsNiBAQAogCQkJCTk3QzFGNTUyMTIyODU1Q0Iw
MEVERTYxNyAvKiBBdG9tSFRNTFRva2VuLmggKi8sCiAJCQkJOTc3QjM4NDkxMjI4ODNFOTAwQjgx
RkY4IC8qIENTU1ByZWxvYWRTY2FubmVyLmNwcCAqLywKIAkJCQk5NzdCMzg0QTEyMjg4M0U5MDBC
ODFGRjggLyogQ1NTUHJlbG9hZFNjYW5uZXIuaCAqLywKLQkJCQlGNEIwMDE4ODI2RTdGMjFGMDA2
RUFBQkUgLyogSFRNTEF0b21TdHJpbmdDYWNoZS5jcHAgKi8sCi0JCQkJRjRCMDAxODcyNkU3RjIx
RjAwNkVBQUJFIC8qIEhUTUxBdG9tU3RyaW5nQ2FjaGUuaCAqLywKIAkJCQk5NzdCMzg0QjEyMjg4
M0U5MDBCODFGRjggLyogSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwICovLAogCQkJCTk3N0IzODRD
MTIyODgzRTkwMEI4MUZGOCAvKiBIVE1MQ29uc3RydWN0aW9uU2l0ZS5oICovLAogCQkJCTk3N0Iz
ODREMTIyODgzRTkwMEI4MUZGOCAvKiBIVE1MRG9jdW1lbnRQYXJzZXIuY3BwICovLApAQCAtMjYz
ODksNiArMjYzODcsOCBAQAogCQkJCTk3QkM4NDlBMTIzNzBBNEIwMDBDNjE2MSAvKiBIVE1MSW5w
dXRTdHJlYW0uaCAqLywKIAkJCQkyQkU4RTJDODEyQTU4QTAxMDBGQUQ1NTAgLyogSFRNTE1ldGFD
aGFyc2V0UGFyc2VyLmNwcCAqLywKIAkJCQkyQkU4RTJDNjEyQTU4OUVDMDBGQUQ1NTAgLyogSFRN
TE1ldGFDaGFyc2V0UGFyc2VyLmggKi8sCisJCQkJRjRCMDAxODgyNkU3RjIxRjAwNkVBQUJFIC8q
IEhUTUxOYW1lQ2FjaGUuY3BwICovLAorCQkJCUY0QjAwMTg3MjZFN0YyMUYwMDZFQUFCRSAvKiBI
VE1MTmFtZUNhY2hlLmggKi8sCiAJCQkJOTNFMkEzMDQxMjNFOURDMDAwOUZFMTJBIC8qIEhUTUxQ
YXJzZXJJZGlvbXMuY3BwICovLAogCQkJCTkzRTJBMzA1MTIzRTlEQzAwMDlGRTEyQSAvKiBIVE1M
UGFyc2VySWRpb21zLmggKi8sCiAJCQkJOTczRjQxODcxNjlCOTVFRjAwMDZCRjYwIC8qIEhUTUxQ
YXJzZXJPcHRpb25zLmNwcCAqLywKQEAgLTM0NzM1LDcgKzM0NzM1LDYgQEAKIAkJCQlBOENGRjdB
QjBBMTU2OTc4MDAwQTQyMzQgLyogSFRNTEFuY2hvckVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUNEMUY5QjdEMjcwRTY2NzgwMDYxN0VCNiAvKiBIVE1MQW5jaG9yRWxlbWVudElubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3RDJFMEExOTM4NTUwMEE4RUY1RiAvKiBIVE1MQXJl
YUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUY0QjAwMTg5MjZFN0YyMUYwMDZFQUFCRSAv
KiBIVE1MQXRvbVN0cmluZ0NhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzVGMjhGQzFBODI3
RDg0MDBDMEYzMUYgLyogSFRNTEF0dGFjaG1lbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFNDQ2MTNBMjBDRDYzMzEwMDBGQURBNzUgLyogSFRNTEF1ZGlvRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTg3MURDMUYwQTE1MjA1NzAwQjEyQTY4IC8qIEhUTUxCYXNlRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCkBAIC0zNDgwMiw2ICszNDgwMSw3IEBACiAJCQkJNzFBM0QxODEyNTYy
Qjg1QjAwNjRFMkE2IC8qIEhUTUxNb2RlbEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcx
NzdBRDU3Mjc0Mjk1RDEwMDJGMTAzQiAvKiBIVE1MTW9kZWxFbGVtZW50Q2FtZXJhLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOENGRjdBNzBBMTU2OTc4MDAwQTQyMzQgLyogSFRNTE1vZEVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAorCQkJCUY0QjAwMTg5MjZFN0YyMUYwMDZFQUFCRSAvKiBIVE1MTmFt
ZUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOERGM0ZENDA5N0ZBMEZDMDA1Mjk4MUIgLyog
SFRNTE5hbWVDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODcxRDQ1QTBBMTI3Q0JD
MDBCMTJBNjggLyogSFRNTE9iamVjdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3
OUYxMEExOTE2REYwMEE4RUY1RiAvKiBIVE1MT0xpc3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5oCmluZGV4IDQyOWZjNTU5NjQzNTFmMTI0OWJjMWM4
ZjI4OWUzNzdhNGRkM2UzMzYuLjNjZjk4Y2QyMDdjOTc1NDdmYTA3YWVhNmRkNDYwNDNmOTAwZWEx
MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWUuaApAQCAtNzIsNiArNzIsNyBAQCBwdWJs
aWM6CiAgICAgfTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFF1YWxpZmllZE5hbWUoY29uc3QgQXRv
bVN0cmluZyYgcHJlZml4LCBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUsIGNvbnN0IEF0b21T
dHJpbmcmIG5hbWVzcGFjZVVSSSk7CisgICAgUXVhbGlmaWVkTmFtZShRdWFsaWZpZWROYW1lSW1w
bCYgaW1wbCkgOiBtX2ltcGwoJmltcGwpIHsgfQogICAgIGV4cGxpY2l0IFF1YWxpZmllZE5hbWUo
V1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1faW1wbChXVEY6Okhhc2hUYWJsZURl
bGV0ZWRWYWx1ZSkgeyB9CiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1faW1wbC5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CiAjaWZkZWYgUU5B
TUVfREVGQVVMVF9DT05TVFJVQ1RPUgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvQXRvbUhUTUxUb2tlbi5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQXRvbUhU
TUxUb2tlbi5oCmluZGV4IGU3YTVmNGI5OGI3ODY3NDgyN2ViNTQxNzU2NDRjZmMyODZiZjBlNTYu
LmJmOWQ0Nzk3YzlkZDRmZjViZGNmZGE2OWM2NTk4M2Q4ZDU4MjkwZWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0F0b21IVE1MVG9rZW4uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9BdG9tSFRNTFRva2VuLmgKQEAgLTI2LDcgKzI2LDcgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlICJIVE1MQXRvbVN0cmluZ0NhY2hlLmgiCisjaW5jbHVkZSAi
SFRNTE5hbWVDYWNoZS5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbi5oIgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3JUcmFpdHMuaD4KIApAQCAtMjIwLDExICsyMjAsMTEgQEAgaW5saW5lIHZvaWQgQXRvbUhU
TUxUb2tlbjo6aW5pdGlhbGl6ZUF0dHJpYnV0ZXMoY29uc3QgSFRNTFRva2VuOjpBdHRyaWJ1dGVM
aXN0JgogICAgICAgICBpZiAoYXR0cmlidXRlLm5hbWUuaXNFbXB0eSgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAKLSAgICAgICAgYXV0byBsb2NhbE5hbWUgPSBIVE1MQXRvbVN0cmluZ0NhY2hl
OjptYWtlVGFnT3JBdHRyaWJ1dGVOYW1lKGF0dHJpYnV0ZS5uYW1lKTsKKyAgICAgICAgYXV0byBx
dWFsaWZpZWROYW1lID0gSFRNTE5hbWVDYWNoZTo6bWFrZUF0dHJpYnV0ZVF1YWxpZmllZE5hbWUo
YXR0cmlidXRlLm5hbWUpOwogCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIE5eMiBmb3IgdGhl
IG51bWJlciBvZiBhdHRyaWJ1dGVzLgotICAgICAgICBpZiAoIWhhc0F0dHJpYnV0ZShtX2F0dHJp
YnV0ZXMsIGxvY2FsTmFtZSkpCi0gICAgICAgICAgICBtX2F0dHJpYnV0ZXMudW5jaGVja2VkQXBw
ZW5kKEF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51bGxBdG9tKCksIGxvY2FsTmFtZSwgbnVsbEF0
b20oKSksIEhUTUxBdG9tU3RyaW5nQ2FjaGU6Om1ha2VBdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1dGUu
dmFsdWUpKSk7CisgICAgICAgIGlmICghaGFzQXR0cmlidXRlKG1fYXR0cmlidXRlcywgcXVhbGlm
aWVkTmFtZS5sb2NhbE5hbWUoKSkpCisgICAgICAgICAgICBtX2F0dHJpYnV0ZXMudW5jaGVja2Vk
QXBwZW5kKEF0dHJpYnV0ZShXVEZNb3ZlKHF1YWxpZmllZE5hbWUpLCBIVE1MTmFtZUNhY2hlOjpt
YWtlQXR0cmlidXRlVmFsdWUoYXR0cmlidXRlLnZhbHVlKSkpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBtX2hhc0R1cGxpY2F0ZUF0dHJpYnV0ZSA9IEhhc0R1cGxpY2F0ZUF0dHJpYnV0ZTo6
WWVzOwogICAgIH0KQEAgLTIzOSw3ICsyMzksNyBAQCBpbmxpbmUgQXRvbUhUTUxUb2tlbjo6QXRv
bUhUTUxUb2tlbihIVE1MVG9rZW4mIHRva2VuLCB1bnNpZ25lZCBsb2NhdGlvbkFmdGVyKQogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSFRN
TFRva2VuOjpET0NUWVBFOgotICAgICAgICBtX25hbWUgPSBIVE1MQXRvbVN0cmluZ0NhY2hlOjpt
YWtlVGFnT3JBdHRyaWJ1dGVOYW1lKHRva2VuLm5hbWUoKSk7CisgICAgICAgIG1fbmFtZSA9IEhU
TUxOYW1lQ2FjaGU6Om1ha2VUYWdOYW1lKHRva2VuLm5hbWUoKSk7CiAgICAgICAgIG1fZG9jdHlw
ZURhdGEgPSB0b2tlbi5yZWxlYXNlRG9jdHlwZURhdGEoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgSFRNTFRva2VuOjpFbmRPZkZpbGU6CkBAIC0yNDcsNyArMjQ3LDcgQEAgaW5saW5lIEF0
b21IVE1MVG9rZW46OkF0b21IVE1MVG9rZW4oSFRNTFRva2VuJiB0b2tlbiwgdW5zaWduZWQgbG9j
YXRpb25BZnRlcikKICAgICBjYXNlIEhUTUxUb2tlbjo6U3RhcnRUYWc6CiAgICAgY2FzZSBIVE1M
VG9rZW46OkVuZFRhZzoKICAgICAgICAgbV9zZWxmQ2xvc2luZyA9IHRva2VuLnNlbGZDbG9zaW5n
KCk7Ci0gICAgICAgIG1fbmFtZSA9IEhUTUxBdG9tU3RyaW5nQ2FjaGU6Om1ha2VUYWdPckF0dHJp
YnV0ZU5hbWUodG9rZW4ubmFtZSgpKTsKKyAgICAgICAgbV9uYW1lID0gSFRNTE5hbWVDYWNoZTo6
bWFrZVRhZ05hbWUodG9rZW4ubmFtZSgpKTsKICAgICAgICAgaW5pdGlhbGl6ZUF0dHJpYnV0ZXMo
dG9rZW4uYXR0cmlidXRlcygpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSFRNTFRva2Vu
OjpDb21tZW50OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEF0
b21TdHJpbmdDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQXRvbVN0
cmluZ0NhY2hlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA0NTIwY2JiZDA4
ZDFkZjE1MzQyNjIzM2M4MjliMjU2NjIwNTFiMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQXRvbVN0
cmluZ0NhY2hlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSFRNTEF0b21TdHJpbmdDYWNoZS5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUhUTUxBdG9tU3RyaW5nQ2FjaGU6OkNhY2hlJiBIVE1M
QXRvbVN0cmluZ0NhY2hlOjpjYWNoZShUeXBlIHR5cGUpCi17Ci0gICAgc3RhdGljIE1haW5UaHJl
YWROZXZlckRlc3Ryb3llZDxDYWNoZT4gY2FjaGVzWzJdOwotICAgIHJldHVybiBjYWNoZXNbc3Rh
dGljX2Nhc3Q8c2l6ZV90Pih0eXBlKV0uZ2V0KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxBdG9tU3RyaW5n
Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxBdG9tU3RyaW5nQ2FjaGUu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNhYzU3YTQ1OWMzOWJkMzczMzk3MmE0
MTE0ZWIyZDM1ZTQxMjQzZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQXRvbVN0cmluZ0NhY2hlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEhUTUxBdG9tU3RyaW5nQ2FjaGUgewotcHVibGljOgotICAgIHRlbXBsYXRl
PHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBBdG9tU3Ry
aW5nIG1ha2VUYWdPckF0dHJpYnV0ZU5hbWUoY29uc3QgVmVjdG9yPFVDaGFyLCBpbmxpbmVDYXBh
Y2l0eT4mIHN0cmluZykKLSAgICB7Ci0gICAgICAgIHJldHVybiBtYWtlPFR5cGU6OlRhZ09yQXR0
cmlidXRlTmFtZT4oc3RyaW5nKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxzaXplX3QgaW5saW5l
Q2FwYWNpdHk+Ci0gICAgQUxXQVlTX0lOTElORSBzdGF0aWMgQXRvbVN0cmluZyBtYWtlQXR0cmli
dXRlVmFsdWUoY29uc3QgVmVjdG9yPFVDaGFyLCBpbmxpbmVDYXBhY2l0eT4mIHN0cmluZykKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtYWtlPFR5cGU6OkF0dHJpYnV0ZVZhbHVlPihzdHJpbmcpOwot
ICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgY2xlYXIoKQotICAgIHsKLSAg
ICAgICAgLy8gRklYTUUgKHdlYmtpdC5vcmcvYi8yMzAwMTkpOiBXZSBzaG91bGQgdHJ5IHRvIGZp
bmQgbW9yZSBvcHBvcnR1bml0aWVzIHRvIGNsZWFyIHRoaXMgY2FjaGUgd2l0aG91dCBoaW5kZXJp
bmcgdGhpcyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uCi0gICAgICAgIGNhY2hlKFR5cGU6OlRh
Z09yQXR0cmlidXRlTmFtZSkuZmlsbCh7IH0pOwotICAgICAgICBjYWNoZShUeXBlOjpBdHRyaWJ1
dGVWYWx1ZSkuZmlsbCh7IH0pOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBlbnVtIGNsYXNzIFR5
cGUgOiBib29sIHsgVGFnT3JBdHRyaWJ1dGVOYW1lLCBBdHRyaWJ1dGVWYWx1ZSB9OwotCi0gICAg
dGVtcGxhdGU8SFRNTEF0b21TdHJpbmdDYWNoZTo6VHlwZSB0eXBlLCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHk+Ci0gICAgQUxXQVlTX0lOTElORSBzdGF0aWMgQXRvbVN0cmluZyBtYWtlKGNvbnN0IFZl
Y3RvcjxVQ2hhciwgaW5saW5lQ2FwYWNpdHk+JiBzdHJpbmcpCi0gICAgewotICAgICAgICBpZiAo
c3RyaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eUF0b20oKTsKLQotICAg
ICAgICBhdXRvIGxlbmd0aCA9IHN0cmluZy5zaXplKCk7Ci0gICAgICAgIGlmIChsZW5ndGggPiBt
YXhTdHJpbmdMZW5ndGhGb3JDYWNoZSkKLSAgICAgICAgICAgIHJldHVybiBBdG9tU3RyaW5nKHN0
cmluZyk7Ci0KLSAgICAgICAgYXV0byBmaXJzdENoYXJhY3RlciA9IHN0cmluZ1swXTsKLSAgICAg
ICAgYXV0byBsYXN0Q2hhcmFjdGVyID0gc3RyaW5nW2xlbmd0aCAtIDFdOwotICAgICAgICBhdXRv
JiBzbG90ID0gY2FjaGVTbG90KHR5cGUsIGZpcnN0Q2hhcmFjdGVyLCBsYXN0Q2hhcmFjdGVyLCBs
ZW5ndGgpOwotICAgICAgICBpZiAoIWVxdWFsKHNsb3QuaW1wbCgpLCBzdHJpbmcuZGF0YSgpLCBs
ZW5ndGgpKSB7Ci0gICAgICAgICAgICBBdG9tU3RyaW5nIHJlc3VsdChzdHJpbmcpOwotICAgICAg
ICAgICAgc2xvdCA9IHJlc3VsdDsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gc2xvdDsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHN0
YXRpYyBBdG9tU3RyaW5nJiBjYWNoZVNsb3QoVHlwZSB0eXBlLCBVQ2hhciBmaXJzdENoYXJhY3Rl
ciwgVUNoYXIgbGFzdENoYXJhY3RlciwgVUNoYXIgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgdW5z
aWduZWQgaGFzaCA9IChmaXJzdENoYXJhY3RlciA8PCA2KSBeICgobGFzdENoYXJhY3RlciA8PCAx
NCkgXiBmaXJzdENoYXJhY3Rlcik7Ci0gICAgICAgIGhhc2ggKz0gKGhhc2ggPj4gMTQpICsgKGxl
bmd0aCA8PCAxNCk7Ci0gICAgICAgIGhhc2ggXj0gaGFzaCA8PCAxNDsKLSAgICAgICAgcmV0dXJu
IGNhY2hlKHR5cGUpWyhoYXNoICsgKGhhc2ggPj4gNikpICUgY2FwYWNpdHldOwotICAgIH0KLQot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBtYXhTdHJpbmdMZW5ndGhGb3JDYWNoZSA9IDM2Owot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjYXBhY2l0eSA9IDUxMjsKLSAgICB1c2luZyBDYWNo
ZSA9IHN0ZDo6YXJyYXk8QXRvbVN0cmluZywgY2FwYWNpdHk+OwotICAgIHN0YXRpYyBDYWNoZSYg
Y2FjaGUoVHlwZSk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTmFtZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxOYW1lQ2FjaGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1N2Q3ZWNlNWY5
N2IyMmIzZTI2NjQ3OTg5ZjcwZWM5YzQ0ZWFhNGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTmFtZUNhY2hlLmNwcApAQCAtMCwwICsxLDQzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhUTUxOYW1lQ2FjaGUu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitIVE1MTmFtZUNhY2hlOjpBdG9tU3RyaW5nQ2Fj
aGUmIEhUTUxOYW1lQ2FjaGU6OmF0b21TdHJpbmdDYWNoZShBdG9tU3RyaW5nVHlwZSB0eXBlKQor
eworICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8QXRvbVN0cmluZ0NhY2hlPiBj
YWNoZXNbMl07CisgICAgcmV0dXJuIGNhY2hlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHR5cGUpXS5n
ZXQoKTsKK30KKworSFRNTE5hbWVDYWNoZTo6UXVhbGlmaWVkTmFtZUNhY2hlJiBIVE1MTmFtZUNh
Y2hlOjpxdWFsaWZpZWROYW1lQ2FjaGUoKQoreworICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJE
ZXN0cm95ZWQ8UXVhbGlmaWVkTmFtZUNhY2hlPiBjYWNoZTsKKyAgICByZXR1cm4gY2FjaGUuZ2V0
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxOYW1lQ2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxOYW1lQ2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MmNkNGRiY2ZkMjY0ZDZiYzIxZmU5MjBi
YTk5YTQ2ZjUyMjdlNmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTE5hbWVDYWNoZS5oCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCisjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0F0b21TdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIVE1MTmFt
ZUNhY2hlIHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNpdHk+Cisg
ICAgQUxXQVlTX0lOTElORSBzdGF0aWMgQXRvbVN0cmluZyBtYWtlVGFnTmFtZShjb25zdCBWZWN0
b3I8VUNoYXIsIGlubGluZUNhcGFjaXR5PiYgc3RyaW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1ha2VBdG9tU3RyaW5nPEF0b21TdHJpbmdUeXBlOjpUYWdOYW1lPihzdHJpbmcpOworICAgIH0K
KworICAgIHRlbXBsYXRlPHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBBTFdBWVNfSU5MSU5F
IHN0YXRpYyBRdWFsaWZpZWROYW1lIG1ha2VBdHRyaWJ1dGVRdWFsaWZpZWROYW1lKGNvbnN0IFZl
Y3RvcjxVQ2hhciwgaW5saW5lQ2FwYWNpdHk+JiBzdHJpbmcpCisgICAgeworICAgICAgICByZXR1
cm4gbWFrZVF1YWxpZmllZE5hbWUoc3RyaW5nKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxzaXpl
X3QgaW5saW5lQ2FwYWNpdHk+CisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgQXRvbVN0cmluZyBt
YWtlQXR0cmlidXRlVmFsdWUoY29uc3QgVmVjdG9yPFVDaGFyLCBpbmxpbmVDYXBhY2l0eT4mIHN0
cmluZykKKyAgICB7CisgICAgICAgIHJldHVybiBtYWtlQXRvbVN0cmluZzxBdG9tU3RyaW5nVHlw
ZTo6QXR0cmlidXRlVmFsdWU+KHN0cmluZyk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBz
dGF0aWMgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICAvLyBGSVhNRSAod2Via2l0Lm9yZy9i
LzIzMDAxOSk6IFdlIHNob3VsZCB0cnkgdG8gZmluZCBtb3JlIG9wcG9ydHVuaXRpZXMgdG8gY2xl
YXIgdGhpcyBjYWNoZSB3aXRob3V0IGhpbmRlcmluZyB0aGlzIHBlcmZvcm1hbmNlIG9wdGltaXph
dGlvbi4KKyAgICAgICAgYXRvbVN0cmluZ0NhY2hlKEF0b21TdHJpbmdUeXBlOjpUYWdOYW1lKS5m
aWxsKHsgfSk7CisgICAgICAgIGF0b21TdHJpbmdDYWNoZShBdG9tU3RyaW5nVHlwZTo6QXR0cmli
dXRlVmFsdWUpLmZpbGwoeyB9KTsKKyAgICAgICAgcXVhbGlmaWVkTmFtZUNhY2hlKCkuZmlsbCh7
IH0pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBlbnVtIGNsYXNzIEF0b21TdHJpbmdUeXBlIDog
Ym9vbCB7IFRhZ05hbWUsIEF0dHJpYnV0ZVZhbHVlIH07CisKKyAgICB0ZW1wbGF0ZTxIVE1MTmFt
ZUNhY2hlOjpBdG9tU3RyaW5nVHlwZSB0eXBlLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAg
QUxXQVlTX0lOTElORSBzdGF0aWMgQXRvbVN0cmluZyBtYWtlQXRvbVN0cmluZyhjb25zdCBWZWN0
b3I8VUNoYXIsIGlubGluZUNhcGFjaXR5PiYgc3RyaW5nKQorICAgIHsKKyAgICAgICAgaWYgKHN0
cmluZy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlBdG9tKCk7CisKKyAgICAg
ICAgYXV0byBsZW5ndGggPSBzdHJpbmcuc2l6ZSgpOworICAgICAgICBpZiAobGVuZ3RoID4gbWF4
U3RyaW5nTGVuZ3RoRm9yQ2FjaGUpCisgICAgICAgICAgICByZXR1cm4gQXRvbVN0cmluZyhzdHJp
bmcpOworCisgICAgICAgIGF1dG8gZmlyc3RDaGFyYWN0ZXIgPSBzdHJpbmdbMF07CisgICAgICAg
IGF1dG8gbGFzdENoYXJhY3RlciA9IHN0cmluZ1tsZW5ndGggLSAxXTsKKyAgICAgICAgYXV0byYg
c2xvdCA9IGF0b21TdHJpbmdDYWNoZVNsb3QodHlwZSwgZmlyc3RDaGFyYWN0ZXIsIGxhc3RDaGFy
YWN0ZXIsIGxlbmd0aCk7CisgICAgICAgIGlmICghZXF1YWwoc2xvdC5pbXBsKCksIHN0cmluZy5k
YXRhKCksIGxlbmd0aCkpIHsKKyAgICAgICAgICAgIEF0b21TdHJpbmcgcmVzdWx0KHN0cmluZyk7
CisgICAgICAgICAgICBzbG90ID0gcmVzdWx0OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzbG90OworICAgIH0KKworICAgIHRlbXBsYXRl
PHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBRdWFsaWZp
ZWROYW1lIG1ha2VRdWFsaWZpZWROYW1lKGNvbnN0IFZlY3RvcjxVQ2hhciwgaW5saW5lQ2FwYWNp
dHk+JiBzdHJpbmcpCisgICAgeworICAgICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxsUU5hbWUoKTsKKworICAgICAgICBhdXRvIGxlbmd0aCA9IHN0cmlu
Zy5zaXplKCk7CisgICAgICAgIGlmIChsZW5ndGggPiBtYXhTdHJpbmdMZW5ndGhGb3JDYWNoZSkK
KyAgICAgICAgICAgIHJldHVybiBRdWFsaWZpZWROYW1lKG51bGxBdG9tKCksIEF0b21TdHJpbmco
c3RyaW5nKSwgbnVsbEF0b20oKSk7CisKKyAgICAgICAgYXV0byBmaXJzdENoYXJhY3RlciA9IHN0
cmluZ1swXTsKKyAgICAgICAgYXV0byBsYXN0Q2hhcmFjdGVyID0gc3RyaW5nW2xlbmd0aCAtIDFd
OworICAgICAgICBhdXRvJiBzbG90ID0gcXVhbGlmaWVkTmFtZUNhY2hlU2xvdChmaXJzdENoYXJh
Y3RlciwgbGFzdENoYXJhY3RlciwgbGVuZ3RoKTsKKyAgICAgICAgaWYgKCFzbG90IHx8ICFlcXVh
bChzbG90LT5tX2xvY2FsTmFtZS5pbXBsKCksIHN0cmluZy5kYXRhKCksIGxlbmd0aCkpIHsKKyAg
ICAgICAgICAgIFF1YWxpZmllZE5hbWUgcmVzdWx0KG51bGxBdG9tKCksIEF0b21TdHJpbmcoc3Ry
aW5nKSwgbnVsbEF0b20oKSk7CisgICAgICAgICAgICBzbG90ID0gcmVzdWx0LmltcGwoKTsKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gKnNs
b3Q7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgc2l6ZV90IHNsb3RJbmRleChV
Q2hhciBmaXJzdENoYXJhY3RlciwgVUNoYXIgbGFzdENoYXJhY3RlciwgVUNoYXIgbGVuZ3RoKQor
ICAgIHsKKyAgICAgICAgdW5zaWduZWQgaGFzaCA9IChmaXJzdENoYXJhY3RlciA8PCA2KSBeICgo
bGFzdENoYXJhY3RlciA8PCAxNCkgXiBmaXJzdENoYXJhY3Rlcik7CisgICAgICAgIGhhc2ggKz0g
KGhhc2ggPj4gMTQpICsgKGxlbmd0aCA8PCAxNCk7CisgICAgICAgIGhhc2ggXj0gaGFzaCA8PCAx
NDsKKyAgICAgICAgcmV0dXJuIChoYXNoICsgKGhhc2ggPj4gNikpICUgY2FwYWNpdHk7CisgICAg
fQorCisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgQXRvbVN0cmluZyYgYXRvbVN0cmluZ0NhY2hl
U2xvdChBdG9tU3RyaW5nVHlwZSB0eXBlLCBVQ2hhciBmaXJzdENoYXJhY3RlciwgVUNoYXIgbGFz
dENoYXJhY3RlciwgVUNoYXIgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgYXV0byBpbmRleCA9IHNs
b3RJbmRleChmaXJzdENoYXJhY3RlciwgbGFzdENoYXJhY3RlciwgbGVuZ3RoKTsKKyAgICAgICAg
cmV0dXJuIGF0b21TdHJpbmdDYWNoZSh0eXBlKVtpbmRleF07CisgICAgfQorCisgICAgQUxXQVlT
X0lOTElORSBzdGF0aWMgUmVmUHRyPFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWVJbXBsPiYg
cXVhbGlmaWVkTmFtZUNhY2hlU2xvdChVQ2hhciBmaXJzdENoYXJhY3RlciwgVUNoYXIgbGFzdENo
YXJhY3RlciwgVUNoYXIgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgYXV0byBpbmRleCA9IHNsb3RJ
bmRleChmaXJzdENoYXJhY3RlciwgbGFzdENoYXJhY3RlciwgbGVuZ3RoKTsKKyAgICAgICAgcmV0
dXJuIHF1YWxpZmllZE5hbWVDYWNoZSgpW2luZGV4XTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29u
c3RleHByIGF1dG8gbWF4U3RyaW5nTGVuZ3RoRm9yQ2FjaGUgPSAzNjsKKyAgICBzdGF0aWMgY29u
c3RleHByIGF1dG8gY2FwYWNpdHkgPSA1MTI7CisKKyAgICB1c2luZyBBdG9tU3RyaW5nQ2FjaGUg
PSBzdGQ6OmFycmF5PEF0b21TdHJpbmcsIGNhcGFjaXR5PjsKKyAgICB1c2luZyBRdWFsaWZpZWRO
YW1lQ2FjaGUgPSBzdGQ6OmFycmF5PFJlZlB0cjxRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1l
SW1wbD4sIGNhcGFjaXR5PjsKKworICAgIHN0YXRpYyBBdG9tU3RyaW5nQ2FjaGUmIGF0b21TdHJp
bmdDYWNoZShBdG9tU3RyaW5nVHlwZSk7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWVDYWNoZSYg
cXVhbGlmaWVkTmFtZUNhY2hlKCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lbW9yeVJlbGVhc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9NZW1vcnlSZWxlYXNlLmNwcAppbmRleCBiYmE5NWZhM2U2NzljYWZiMWIyOTE0
ODA1N2RmMjdiY2IwNjgxMmM4Li5jMjMzZmJhODkzNjRhMzA4NDc2NWZmZDgwNDhlMDk4NjJlYWE3
YzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lbW9yeVJlbGVhc2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVtb3J5UmVsZWFzZS5jcHAKQEAgLTM4LDggKzM4LDgg
QEAKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkdDQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkhUTUxBdG9tU3RyaW5nQ2FjaGUuaCIKICNpbmNs
dWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVDYWNoZS5oIgogI2lu
Y2x1ZGUgIklubGluZVN0eWxlU2hlZXRPd25lci5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUxheW91dC5oIgpA
QCAtODksNyArODksNyBAQCBzdGF0aWMgdm9pZCByZWxlYXNlTm9uY3JpdGljYWxNZW1vcnkoTWFp
bnRhaW5NZW1vcnlDYWNoZSBtYWludGFpbk1lbW9yeUNhY2hlKQogICAgICAgICBNZW1vcnlDYWNo
ZTo6c2luZ2xldG9uKCkucHJ1bmVEZWFkUmVzb3VyY2VzVG9TaXplKDApOwogCiAgICAgSW5saW5l
U3R5bGVTaGVldE93bmVyOjpjbGVhckNhY2hlKCk7Ci0gICAgSFRNTEF0b21TdHJpbmdDYWNoZTo6
Y2xlYXIoKTsKKyAgICBIVE1MTmFtZUNhY2hlOjpjbGVhcigpOwogfQogCiBzdGF0aWMgdm9pZCBy
ZWxlYXNlQ3JpdGljYWxNZW1vcnkoU3luY2hyb25vdXMgc3luY2hyb25vdXMsIE1haW50YWluQmFj
a0ZvcndhcmRDYWNoZSBtYWludGFpbkJhY2tGb3J3YXJkQ2FjaGUsIE1haW50YWluTWVtb3J5Q2Fj
aGUgbWFpbnRhaW5NZW1vcnlDYWNoZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Y29jb2EvTWVtb3J5UmVsZWFzZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9N
ZW1vcnlSZWxlYXNlQ29jb2EubW0KaW5kZXggMzU2NWRiMzVmYjg5MjRmMTFlNWM3ODE3M2Y0YjI1
OWEyODNjZTEyYi4uYjk0MjI2MTRiZjMxNWQ5Y2JhZTQyZTFlNDRhMWU1ZWJhZWVmZDNiOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9NZW1vcnlSZWxlYXNlQ29jb2EubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9NZW1vcnlSZWxlYXNlQ29jb2EubW0KQEAg
LTI4LDcgKzI4LDcgQEAKIAogI2ltcG9ydCAiRm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4
dC5oIgogI2ltcG9ydCAiR0NDb250cm9sbGVyLmgiCi0jaW1wb3J0ICJIVE1MQXRvbVN0cmluZ0Nh
Y2hlLmgiCisjaW1wb3J0ICJIVE1MTmFtZUNhY2hlLmgiCiAjaW1wb3J0ICJJT1N1cmZhY2VQb29s
LmgiCiAjaW1wb3J0ICJMYXllclBvb2wuaCIKICNpbXBvcnQgIkxvY2FsZUNvY29hLmgiCkBAIC0x
MDEsNyArMTAxLDcgQEAgdm9pZCBqZXR0aXNvbkV4cGVuc2l2ZU9iamVjdHNPblRvcExldmVsTmF2
aWdhdGlvbigpCiAgICAgR0NDb250cm9sbGVyOjpzaW5nbGV0b24oKS5kZWxldGVBbGxMaW5rZWRD
b2RlKEpTQzo6RGVsZXRlQWxsQ29kZUlmTm90Q29sbGVjdGluZyk7CiAjZW5kaWYKIAotICAgIEhU
TUxBdG9tU3RyaW5nQ2FjaGU6OmNsZWFyKCk7CisgICAgSFRNTE5hbWVDYWNoZTo6Y2xlYXIoKTsK
IH0KIAogdm9pZCByZWdpc3Rlck1lbW9yeVJlbGVhc2VOb3RpZnlDYWxsYmFja3MoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451849</attachid>
            <date>2022-02-13 17:35:06 -0800</date>
            <delta_ts>2022-02-16 19:22:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236570-20220214123505.patch</filename>
            <type>text/plain</type>
            <size>28174</size>
            <attacher name="Cameron McCormack (:heycam)">heycam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5Njg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWEwYjdjMDBhYTg3MjVh
NWI1NDdiYjU2OWNhMzVmNDQxMTRjNmEzMi4uMTFjMzJjNjBkZWYzNTI0MmU2MGQ4OGU4OTA4YjY1
NTk2NGFkNGUyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDIyLTAyLTEzICBDYW1l
cm9uIE1jQ29ybWFjayAgPGhleWNhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQ2FjaGUgYW4gZW50
aXJlIGF0dHJpYnV0ZSBRdWFsaWZpZWROYW1lIHdoZW4gcGFyc2luZyBIVE1MLCBub3QganVzdCBp
dHMgbG9jYWwgbmFtZSBBdG9tU3RyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzY1NzAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg4ODc2NTQ1
PgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIEJ1ZyAyMjk5
MDcgYWRkZWQgSFRNTEF0b21TdHJpbmdDYWNoZSwgd2hpY2ggdXNlcyBhIGZhc3QgdG8gY29tcHV0
ZSBoYXNoCisgICAgICAgIHRoYXQgd29ya3Mgd2VsbCB0byBjYWNoZSBIVE1MIHRhZyBuYW1lcywg
YXR0cmlidXRlIG5hbWVzLCBhbmQgYXR0cmlidXRlCisgICAgICAgIHZhbHVlcy4gV2hlbiBBdG9t
SFRNTFRva2VuIGluaXRpYWxpemVzIGl0cyBsaXN0IG9mIEF0dHJpYnV0ZXMsIGl0IHVzZXMKKyAg
ICAgICAgSFRNTEF0b21TdHJpbmdDYWNoZSB0byBsb29rIHVwIG9yIGNyZWF0ZSBhbiBBdG9tU3Ry
aW5nIGZvciB0aGUKKyAgICAgICAgYXR0cmlidXRlJ3MgbG9jYWwgbmFtZSwgYW5kIHRoZW4gY3Jl
YXRlcyBhIFF1YWxpZmllZE5hbWUgdG8gd3JhcCBpdC4KKyAgICAgICAgUXVhbGlmaWVkTmFtZSBj
b25zdHJ1Y3Rpb24gaW52b2x2ZXMgbG9va2luZyB1cCBRdWFsaWZpZWROYW1lQ2FjaGUsIHdoaWNo
CisgICAgICAgIGlzIGEgdGhyZWFkLXNwZWNpZmljIGNhY2hlIG9mIFF1YWxpZmllZE5hbWVJbXBs
IG9iamVjdHMuIElmIHdlIG1ha2UKKyAgICAgICAgSFRNTEF0b21TdHJpbmdDYWNoZSByZXNwb25z
aWJsZSBmb3IgY2FjaGluZyBhbiBhdHRyaWJ1dGUncyBRdWFsaWZpZWROYW1lCisgICAgICAgIGlu
c3RlYWQgb2YganVzdCBpdHMgbG9jYWwgbmFtZSBBdG9tU3RyaW5nLCB3ZSBjYW4gYXZvaWQgdGhl
IHdvcmsgb2YKKyAgICAgICAgbG9va2luZyB1cCB0aGUgUXVhbGlmaWVkTmFtZUNhY2hlLgorCisg
ICAgICAgIFRvIHJlZmxlY3QgaXRzIGJyb2FkZXIgcmVzcG9uc2liaWxpdGllcywgSFRNTEF0b21T
dHJpbmdDYWNoZSBpcyByZW5hbWVkCisgICAgICAgIHRvIEhUTUxOYW1lQ2FjaGUuCisKKyAgICAg
ICAgRG9pbmcgdGhpcyByZXN1bHRzIGluIGEgMC4yLTAuMyUgaW1wcm92ZW1lbnQgb24gU3BlZWRv
bWV0ZXIgMiwgYW5kIGEKKyAgICAgICAgMC4zLTAuNCUgaW1wcm92ZW1lbnQgb24gUExUNSAod2l0
aCB0aGUgbG93ZXIgZW5kIG9mIHRob3NlIHJhbmdlcyBiZWluZworICAgICAgICBvbiBBcHBsZSBT
aWxpY29uIGFuZCB0aGUgaGlnaGVyIGVuZCBvbiBJbnRlbCkuCisKKyAgICAgICAgKiBTb3VyY2Vz
LnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogZG9tL1F1YWxpZmllZE5hbWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlF1YWxpZmllZE5h
bWU6OlF1YWxpZmllZE5hbWUpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0F0b21IVE1MVG9rZW4u
aDoKKyAgICAgICAgKFdlYkNvcmU6OkF0b21IVE1MVG9rZW46OmluaXRpYWxpemVBdHRyaWJ1dGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21IVE1MVG9rZW46OkF0b21IVE1MVG9rZW4pOgorICAg
ICAgICAqIGh0bWwvcGFyc2VyL0hUTUxBdG9tU3RyaW5nQ2FjaGUuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxBdG9tU3RyaW5nQ2FjaGU6Om1ha2VUYWdPckF0dHJpYnV0ZU5hbWUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEF0b21TdHJpbmdDYWNoZTo6bWFrZUF0
dHJpYnV0ZVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdG9tU3RyaW5n
Q2FjaGU6OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdG9tU3RyaW5n
Q2FjaGU6Om1ha2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEF0b21TdHJpbmdD
YWNoZTo6Y2FjaGVTbG90KTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MTmFt
ZUNhY2hlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxB
dG9tU3RyaW5nQ2FjaGUuY3BwLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5hbWVDYWNoZTo6YXRv
bVN0cmluZ0NhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lQ2FjaGU6OnF1YWxpZmll
ZE5hbWVDYWNoZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTE5hbWVDYWNoZS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lQ2FjaGU6Om1ha2VUYWdOYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxOYW1lQ2FjaGU6Om1ha2VBdHRyaWJ1dGVRdWFsaWZpZWROYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lQ2FjaGU6Om1ha2VBdHRyaWJ1dGVWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTmFtZUNhY2hlOjpjbGVhcik6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTmFtZUNhY2hlOjptYWtlQXRvbVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TmFtZUNhY2hlOjptYWtlUXVhbGlmaWVkTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTmFt
ZUNhY2hlOjpzbG90SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5hbWVDYWNoZTo6YXRv
bVN0cmluZ0NhY2hlU2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTmFtZUNhY2hlOjpxdWFs
aWZpZWROYW1lQ2FjaGVTbG90KToKKyAgICAgICAgKiBwYWdlL01lbW9yeVJlbGVhc2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cmVsZWFzZU5vbmNyaXRpY2FsTWVtb3J5KToKKyAgICAgICAgKiBw
YWdlL2NvY29hL01lbW9yeVJlbGVhc2VDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OmpldHRp
c29uRXhwZW5zaXZlT2JqZWN0c09uVG9wTGV2ZWxOYXZpZ2F0aW9uKToKKwogMjAyMi0wMi0xMSAg
QWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgYGNvbnRhaW46Y29udGVu
dGAgYnJlYWtzIGZ1bGxzY3JlZW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNjE0MmQyNDNkYjI4ODBjNTFl
ZmVmNThhMDRjOWIwYmE3NTNmNjA0MS4uZTEzZTMzZDIyYzA0ZTU4ZmU5ODRlN2U0NDIyZDdmM2E4
NmE0N2M0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE0MDcsNyArMTQwNyw2IEBAIGh0bWwvY2FudmFz
L1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcAogaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUy5jcHAKIGh0bWwvZm9ybXMvRmlsZUljb25Mb2FkZXIuY3BwCiBodG1sL3Bh
cnNlci9DU1NQcmVsb2FkU2Nhbm5lci5jcHAKLWh0bWwvcGFyc2VyL0hUTUxBdG9tU3RyaW5nQ2Fj
aGUuY3BwCiBodG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKIGh0bWwvcGFyc2Vy
L0hUTUxEb2N1bWVudFBhcnNlci5jcHAKIGh0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suY3Bw
CkBAIC0xNDE1LDYgKzE0MTQsNyBAQCBodG1sL3BhcnNlci9IVE1MRW50aXR5UGFyc2VyLmNwcAog
aHRtbC9wYXJzZXIvSFRNTEVudGl0eVNlYXJjaC5jcHAKIGh0bWwvcGFyc2VyL0hUTUxGb3JtYXR0
aW5nRWxlbWVudExpc3QuY3BwCiBodG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3Bw
CitodG1sL3BhcnNlci9IVE1MTmFtZUNhY2hlLmNwcAogaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklk
aW9tcy5jcHAKIGh0bWwvcGFyc2VyL0hUTUxQYXJzZXJPcHRpb25zLmNwcAogaHRtbC9wYXJzZXIv
SFRNTFBhcnNlclNjaGVkdWxlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhOGQ3MzY4NWUwYmI0ZjRhNzU0ZWRlNDkxNzZh
MzJiODBlMmQyZGJiLi5lOTU2YmE3NjFhMmIxM2U2MTIzMzdhMzU0MWE3Y2M4Njc1ODdjYTUwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC01NTQyLDcgKzU1NDIsNyBAQAogCQlGNDkzMjg4MzI3NjkwNDFCMDAzRTIwRjggLyogTW9k
YWxDb250YWluZXJUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjQ5MzI4ODIyNzY5MDQxQjAwM0UyMEY4IC8qIE1vZGFsQ29udGFpbmVyVHlwZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDk3
ODY4ODFGRjQ1RkE1MDBFMDYwQUIgLyogUGFzdGVib2FyZEl0ZW1JbmZvLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDk3ODY4NzFGRjQ1RkE1MDBFMDYw
QUIgLyogUGFzdGVib2FyZEl0ZW1JbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjRBMDY0QzgyNzdFNDhDOTAwQjA2QTE3IC8qIEZvbnRDb2Nv
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRBMDY0
QzYyNzdFNDhDNjAwQjA2QTE3IC8qIEZvbnRDb2NvYS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUY0QjAwMTg5MjZFN0YyMUYwMDZFQUFCRSAvKiBI
VE1MQXRvbVN0cmluZ0NhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNEIwMDE4NzI2RTdGMjFGMDA2RUFBQkUgLyogSFRNTEF0b21TdHJpbmdDYWNo
ZS5oICovOyB9OworCQlGNEIwMDE4OTI2RTdGMjFGMDA2RUFBQkUgLyogSFRNTE5hbWVDYWNoZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRCMDAxODcy
NkU3RjIxRjAwNkVBQUJFIC8qIEhUTUxOYW1lQ2FjaGUuaCAqLzsgfTsKIAkJRjRCMkE5MDkyNjUw
MzBCQTAwOUU3Mjg2IC8qIERhdGFEZXRlY3RvckhpZ2hsaWdodC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRCMkE5MDYyNjUwMkJBMDAwOUU3Mjg2IC8q
IERhdGFEZXRlY3RvckhpZ2hsaWdodC5oICovOyB9OwogCQlGNEI0MjJDNDIyMEMwNTY4MDA5RTFF
N0QgLyogRE9NUGFzdGVBY2Nlc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY0QjQyMkMyMjIwQzAwMDAwMDlFMUU3RCAvKiBET01QYXN0ZUFjY2Vzcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0QkZC
OTg1MUUxRERGOUIwMDg2MkMyNCAvKiBEdW1wRWRpdGluZ0hpc3RvcnkuanMgaW4gQ29weSBTY3Jp
cHRzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0ODM4OTgzMUUxRERGMkIw
MDc2QjdFQSAvKiBEdW1wRWRpdGluZ0hpc3RvcnkuanMgKi87IH07CkBAIC0xNzg0MSw4ICsxNzg0
MSw4IEBACiAJCUY0OTc4Njg3MUZGNDVGQTUwMEUwNjBBQiAvKiBQYXN0ZWJvYXJkSXRlbUluZm8u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGFzdGVib2FyZEl0ZW1JbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUY0OUU5OEU0MjFERUU2QzEwMDlBRTU1RSAvKiBFZGl0QWN0aW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEVkaXRBY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGNEEwNjRDNjI3N0U0OEM2MDBCMDZBMTcgLyogRm9udENvY29hLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlGNEIwMDE4NzI2RTdGMjFGMDA2RUFBQkUgLyogSFRNTEF0b21TdHJpbmdDYWNo
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MQXRvbVN0cmluZ0NhY2hlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUY0QjAwMTg4MjZFN0YyMUYwMDZFQUFCRSAvKiBIVE1MQXRvbVN0cmlu
Z0NhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxBdG9tU3RyaW5nQ2FjaGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNEIwMDE4NzI2RTdGMjFGMDA2RUFBQkUgLyog
SFRNTE5hbWVDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MTmFtZUNhY2hlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0QjAwMTg4MjZFN0YyMUYwMDZFQUFCRSAvKiBIVE1MTmFt
ZUNhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxOYW1lQ2FjaGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGNEIyQTkwNjI2NTAyQkEwMDA5RTcyODYgLyogRGF0YURl
dGVjdG9ySGlnaGxpZ2h0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFEZXRlY3RvckhpZ2hsaWdodC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNEIyQTkwODI2NTAyQkMwMDA5RTcyODYg
LyogRGF0YURldGVjdG9ySGlnaGxpZ2h0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGF0YURl
dGVjdG9ySGlnaGxpZ2h0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNEIyQTkw
QzI2NTA4N0U0MDA5RTcyODYgLyogSW1hZ2VPdmVybGF5Q29udHJvbGxlck1hYy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IEltYWdlT3ZlcmxheUNvbnRyb2xsZXJNYWMubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yNjM3MCw4ICsyNjM3MCw2IEBACiAJCQkJOTdDMUY1NTIxMjI4
NTVDQjAwRURFNjE3IC8qIEF0b21IVE1MVG9rZW4uaCAqLywKIAkJCQk5NzdCMzg0OTEyMjg4M0U5
MDBCODFGRjggLyogQ1NTUHJlbG9hZFNjYW5uZXIuY3BwICovLAogCQkJCTk3N0IzODRBMTIyODgz
RTkwMEI4MUZGOCAvKiBDU1NQcmVsb2FkU2Nhbm5lci5oICovLAotCQkJCUY0QjAwMTg4MjZFN0Yy
MUYwMDZFQUFCRSAvKiBIVE1MQXRvbVN0cmluZ0NhY2hlLmNwcCAqLywKLQkJCQlGNEIwMDE4NzI2
RTdGMjFGMDA2RUFBQkUgLyogSFRNTEF0b21TdHJpbmdDYWNoZS5oICovLAogCQkJCTk3N0IzODRC
MTIyODgzRTkwMEI4MUZGOCAvKiBIVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAgKi8sCiAJCQkJOTc3
QjM4NEMxMjI4ODNFOTAwQjgxRkY4IC8qIEhUTUxDb25zdHJ1Y3Rpb25TaXRlLmggKi8sCiAJCQkJ
OTc3QjM4NEQxMjI4ODNFOTAwQjgxRkY4IC8qIEhUTUxEb2N1bWVudFBhcnNlci5jcHAgKi8sCkBA
IC0yNjM4OSw2ICsyNjM4Nyw4IEBACiAJCQkJOTdCQzg0OUExMjM3MEE0QjAwMEM2MTYxIC8qIEhU
TUxJbnB1dFN0cmVhbS5oICovLAogCQkJCTJCRThFMkM4MTJBNThBMDEwMEZBRDU1MCAvKiBIVE1M
TWV0YUNoYXJzZXRQYXJzZXIuY3BwICovLAogCQkJCTJCRThFMkM2MTJBNTg5RUMwMEZBRDU1MCAv
KiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuaCAqLywKKwkJCQlGNEIwMDE4ODI2RTdGMjFGMDA2RUFB
QkUgLyogSFRNTE5hbWVDYWNoZS5jcHAgKi8sCisJCQkJRjRCMDAxODcyNkU3RjIxRjAwNkVBQUJF
IC8qIEhUTUxOYW1lQ2FjaGUuaCAqLywKIAkJCQk5M0UyQTMwNDEyM0U5REMwMDA5RkUxMkEgLyog
SFRNTFBhcnNlcklkaW9tcy5jcHAgKi8sCiAJCQkJOTNFMkEzMDUxMjNFOURDMDAwOUZFMTJBIC8q
IEhUTUxQYXJzZXJJZGlvbXMuaCAqLywKIAkJCQk5NzNGNDE4NzE2OUI5NUVGMDAwNkJGNjAgLyog
SFRNTFBhcnNlck9wdGlvbnMuY3BwICovLApAQCAtMzQ3MzUsNyArMzQ3MzUsNiBAQAogCQkJCUE4
Q0ZGN0FCMEExNTY5NzgwMDBBNDIzNCAvKiBIVE1MQW5jaG9yRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQ0QxRjlCN0QyNzBFNjY3ODAwNjE3RUI2IC8qIEhUTUxBbmNob3JFbGVtZW50SW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThFQTdEMkUwQTE5Mzg1NTAwQThFRjVGIC8qIEhU
TUxBcmVhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRjRCMDAxODkyNkU3RjIxRjAwNkVB
QUJFIC8qIEhUTUxBdG9tU3RyaW5nQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDNUYyOEZD
MUE4MjdEODQwMEMwRjMxRiAvKiBIVE1MQXR0YWNobWVudEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUU0NDYxM0EyMENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBODcxREMxRjBBMTUyMDU3MDBCMTJBNjggLyogSFRNTEJhc2VFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTM0ODAyLDYgKzM0ODAxLDcgQEAKIAkJCQk3MUEzRDE4
MTI1NjJCODVCMDA2NEUyQTYgLyogSFRNTE1vZGVsRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNzE3N0FENTcyNzQyOTVEMTAwMkYxMDNCIC8qIEhUTUxNb2RlbEVsZW1lbnRDYW1lcmEuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4Q0ZGN0E3MEExNTY5NzgwMDBBNDIzNCAvKiBIVE1MTW9kRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjRCMDAxODkyNkU3RjIxRjAwNkVBQUJFIC8qIEhU
TUxOYW1lQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4REYzRkQ0MDk3RkEwRkMwMDUyOTgx
QiAvKiBIVE1MTmFtZUNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NzFENDVBMEEx
MjdDQkMwMEIxMkE2OCAvKiBIVE1MT2JqZWN0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QThFQTc5RjEwQTE5MTZERjAwQThFRjVGIC8qIEhUTUxPTGlzdEVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWUuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmgKaW5kZXggNDI5ZmM1NTk2NDM1MWYxMjQ5
YmMxYzhmMjg5ZTM3N2E0ZGQzZTMzNi4uM2NmOThjZDIwN2M5NzU0N2ZhMDdhZWE2ZGQ0NjA0M2Y5
MDBlYTExMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5oCkBAIC03Miw2ICs3Miw3IEBA
IHB1YmxpYzoKICAgICB9OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgUXVhbGlmaWVkTmFtZShjb25z
dCBBdG9tU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsTmFtZSwgY29uc3Qg
QXRvbVN0cmluZyYgbmFtZXNwYWNlVVJJKTsKKyAgICBRdWFsaWZpZWROYW1lKFF1YWxpZmllZE5h
bWVJbXBsJiBpbXBsKSA6IG1faW1wbCgmaW1wbCkgeyB9CiAgICAgZXhwbGljaXQgUXVhbGlmaWVk
TmFtZShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpIDogbV9pbXBsKFdURjo6SGFzaFRh
YmxlRGVsZXRlZFZhbHVlKSB7IH0KICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gbV9pbXBsLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KICNpZmRl
ZiBRTkFNRV9ERUZBVUxUX0NPTlNUUlVDVE9SCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9BdG9tSFRNTFRva2VuLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9B
dG9tSFRNTFRva2VuLmgKaW5kZXggZTdhNWY0Yjk4Yjc4Njc0ODI3ZWI1NDE3NTY0NGNmYzI4NmJm
MGU1Ni4uYmY5ZDQ3OTdjOWRkNGZmNWJkY2ZkYTY5YzY1OTgzZDhkNTgyOTBlZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQXRvbUhUTUxUb2tlbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0F0b21IVE1MVG9rZW4uaApAQCAtMjYsNyArMjYsNyBAQAog
CiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkhUTUxBdG9tU3RyaW5nQ2FjaGUuaCIKKyNpbmNs
dWRlICJIVE1MTmFtZUNhY2hlLmgiCiAjaW5jbHVkZSAiSFRNTFRva2VuLmgiCiAjaW5jbHVkZSA8
d3RmL1ZlY3RvclRyYWl0cy5oPgogCkBAIC0yMjAsMTEgKzIyMCwxMSBAQCBpbmxpbmUgdm9pZCBB
dG9tSFRNTFRva2VuOjppbml0aWFsaXplQXR0cmlidXRlcyhjb25zdCBIVE1MVG9rZW46OkF0dHJp
YnV0ZUxpc3QmCiAgICAgICAgIGlmIChhdHRyaWJ1dGUubmFtZS5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICBhdXRvIGxvY2FsTmFtZSA9IEhUTUxBdG9tU3RyaW5n
Q2FjaGU6Om1ha2VUYWdPckF0dHJpYnV0ZU5hbWUoYXR0cmlidXRlLm5hbWUpOworICAgICAgICBh
dXRvIHF1YWxpZmllZE5hbWUgPSBIVE1MTmFtZUNhY2hlOjptYWtlQXR0cmlidXRlUXVhbGlmaWVk
TmFtZShhdHRyaWJ1dGUubmFtZSk7CiAKICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgTl4yIGZv
ciB0aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMuCi0gICAgICAgIGlmICghaGFzQXR0cmlidXRlKG1f
YXR0cmlidXRlcywgbG9jYWxOYW1lKSkKLSAgICAgICAgICAgIG1fYXR0cmlidXRlcy51bmNoZWNr
ZWRBcHBlbmQoQXR0cmlidXRlKFF1YWxpZmllZE5hbWUobnVsbEF0b20oKSwgbG9jYWxOYW1lLCBu
dWxsQXRvbSgpKSwgSFRNTEF0b21TdHJpbmdDYWNoZTo6bWFrZUF0dHJpYnV0ZVZhbHVlKGF0dHJp
YnV0ZS52YWx1ZSkpKTsKKyAgICAgICAgaWYgKCFoYXNBdHRyaWJ1dGUobV9hdHRyaWJ1dGVzLCBx
dWFsaWZpZWROYW1lLmxvY2FsTmFtZSgpKSkKKyAgICAgICAgICAgIG1fYXR0cmlidXRlcy51bmNo
ZWNrZWRBcHBlbmQoQXR0cmlidXRlKFdURk1vdmUocXVhbGlmaWVkTmFtZSksIEhUTUxOYW1lQ2Fj
aGU6Om1ha2VBdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1dGUudmFsdWUpKSk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIG1faGFzRHVwbGljYXRlQXR0cmlidXRlID0gSGFzRHVwbGljYXRlQXR0cmli
dXRlOjpZZXM7CiAgICAgfQpAQCAtMjM5LDcgKzIzOSw3IEBAIGlubGluZSBBdG9tSFRNTFRva2Vu
OjpBdG9tSFRNTFRva2VuKEhUTUxUb2tlbiYgdG9rZW4sIHVuc2lnbmVkIGxvY2F0aW9uQWZ0ZXIp
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBIVE1MVG9rZW46OkRPQ1RZUEU6Ci0gICAgICAgIG1fbmFtZSA9IEhUTUxBdG9tU3RyaW5nQ2Fj
aGU6Om1ha2VUYWdPckF0dHJpYnV0ZU5hbWUodG9rZW4ubmFtZSgpKTsKKyAgICAgICAgbV9uYW1l
ID0gSFRNTE5hbWVDYWNoZTo6bWFrZVRhZ05hbWUodG9rZW4ubmFtZSgpKTsKICAgICAgICAgbV9k
b2N0eXBlRGF0YSA9IHRva2VuLnJlbGVhc2VEb2N0eXBlRGF0YSgpOwogICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBIVE1MVG9rZW46OkVuZE9mRmlsZToKQEAgLTI0Nyw3ICsyNDcsNyBAQCBpbmxp
bmUgQXRvbUhUTUxUb2tlbjo6QXRvbUhUTUxUb2tlbihIVE1MVG9rZW4mIHRva2VuLCB1bnNpZ25l
ZCBsb2NhdGlvbkFmdGVyKQogICAgIGNhc2UgSFRNTFRva2VuOjpTdGFydFRhZzoKICAgICBjYXNl
IEhUTUxUb2tlbjo6RW5kVGFnOgogICAgICAgICBtX3NlbGZDbG9zaW5nID0gdG9rZW4uc2VsZkNs
b3NpbmcoKTsKLSAgICAgICAgbV9uYW1lID0gSFRNTEF0b21TdHJpbmdDYWNoZTo6bWFrZVRhZ09y
QXR0cmlidXRlTmFtZSh0b2tlbi5uYW1lKCkpOworICAgICAgICBtX25hbWUgPSBIVE1MTmFtZUNh
Y2hlOjptYWtlVGFnTmFtZSh0b2tlbi5uYW1lKCkpOwogICAgICAgICBpbml0aWFsaXplQXR0cmli
dXRlcyh0b2tlbi5hdHRyaWJ1dGVzKCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBIVE1M
VG9rZW46OkNvbW1lbnQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MQXRvbVN0cmluZ0NhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxB
dG9tU3RyaW5nQ2FjaGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDQ1MjBj
YmJkMDhkMWRmMTUzNDI2MjMzYzgyOWIyNTY2MjA1MWIyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxB
dG9tU3RyaW5nQ2FjaGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJIVE1MQXRvbVN0cmluZ0NhY2hl
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSFRNTEF0b21TdHJpbmdDYWNoZTo6Q2FjaGUm
IEhUTUxBdG9tU3RyaW5nQ2FjaGU6OmNhY2hlKFR5cGUgdHlwZSkKLXsKLSAgICBzdGF0aWMgTWFp
blRocmVhZE5ldmVyRGVzdHJveWVkPENhY2hlPiBjYWNoZXNbMl07Ci0gICAgcmV0dXJuIGNhY2hl
c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHR5cGUpXS5nZXQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEF0b21T
dHJpbmdDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEF0b21TdHJpbmdD
YWNoZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2FjNTdhNDU5YzM5YmQzNzMz
OTcyYTQxMTRlYjJkMzVlNDEyNDNlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxBdG9tU3RyaW5nQ2Fj
aGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgSFRNTEF0b21TdHJpbmdDYWNoZSB7Ci1wdWJsaWM6Ci0gICAgdGVt
cGxhdGU8c2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIEF0
b21TdHJpbmcgbWFrZVRhZ09yQXR0cmlidXRlTmFtZShjb25zdCBWZWN0b3I8VUNoYXIsIGlubGlu
ZUNhcGFjaXR5PiYgc3RyaW5nKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1ha2U8VHlwZTo6VGFn
T3JBdHRyaWJ1dGVOYW1lPihzdHJpbmcpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHNpemVfdCBp
bmxpbmVDYXBhY2l0eT4KLSAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBBdG9tU3RyaW5nIG1ha2VB
dHRyaWJ1dGVWYWx1ZShjb25zdCBWZWN0b3I8VUNoYXIsIGlubGluZUNhcGFjaXR5PiYgc3RyaW5n
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1ha2U8VHlwZTo6QXR0cmlidXRlVmFsdWU+KHN0cmlu
Zyk7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBjbGVhcigpCi0gICAg
ewotICAgICAgICAvLyBGSVhNRSAod2Via2l0Lm9yZy9iLzIzMDAxOSk6IFdlIHNob3VsZCB0cnkg
dG8gZmluZCBtb3JlIG9wcG9ydHVuaXRpZXMgdG8gY2xlYXIgdGhpcyBjYWNoZSB3aXRob3V0IGhp
bmRlcmluZyB0aGlzIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4KLSAgICAgICAgY2FjaGUoVHlw
ZTo6VGFnT3JBdHRyaWJ1dGVOYW1lKS5maWxsKHsgfSk7Ci0gICAgICAgIGNhY2hlKFR5cGU6OkF0
dHJpYnV0ZVZhbHVlKS5maWxsKHsgfSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGVudW0gY2xh
c3MgVHlwZSA6IGJvb2wgeyBUYWdPckF0dHJpYnV0ZU5hbWUsIEF0dHJpYnV0ZVZhbHVlIH07Ci0K
LSAgICB0ZW1wbGF0ZTxIVE1MQXRvbVN0cmluZ0NhY2hlOjpUeXBlIHR5cGUsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eT4KLSAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBBdG9tU3RyaW5nIG1ha2UoY29u
c3QgVmVjdG9yPFVDaGFyLCBpbmxpbmVDYXBhY2l0eT4mIHN0cmluZykKLSAgICB7Ci0gICAgICAg
IGlmIChzdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5QXRvbSgpOwot
Ci0gICAgICAgIGF1dG8gbGVuZ3RoID0gc3RyaW5nLnNpemUoKTsKLSAgICAgICAgaWYgKGxlbmd0
aCA+IG1heFN0cmluZ0xlbmd0aEZvckNhY2hlKQotICAgICAgICAgICAgcmV0dXJuIEF0b21TdHJp
bmcoc3RyaW5nKTsKLQotICAgICAgICBhdXRvIGZpcnN0Q2hhcmFjdGVyID0gc3RyaW5nWzBdOwot
ICAgICAgICBhdXRvIGxhc3RDaGFyYWN0ZXIgPSBzdHJpbmdbbGVuZ3RoIC0gMV07Ci0gICAgICAg
IGF1dG8mIHNsb3QgPSBjYWNoZVNsb3QodHlwZSwgZmlyc3RDaGFyYWN0ZXIsIGxhc3RDaGFyYWN0
ZXIsIGxlbmd0aCk7Ci0gICAgICAgIGlmICghZXF1YWwoc2xvdC5pbXBsKCksIHN0cmluZy5kYXRh
KCksIGxlbmd0aCkpIHsKLSAgICAgICAgICAgIEF0b21TdHJpbmcgcmVzdWx0KHN0cmluZyk7Ci0g
ICAgICAgICAgICBzbG90ID0gcmVzdWx0OwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICAgICAgfQotCi0gICAgICAgIHJldHVybiBzbG90OwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJ
TkUgc3RhdGljIEF0b21TdHJpbmcmIGNhY2hlU2xvdChUeXBlIHR5cGUsIFVDaGFyIGZpcnN0Q2hh
cmFjdGVyLCBVQ2hhciBsYXN0Q2hhcmFjdGVyLCBVQ2hhciBsZW5ndGgpCi0gICAgewotICAgICAg
ICB1bnNpZ25lZCBoYXNoID0gKGZpcnN0Q2hhcmFjdGVyIDw8IDYpIF4gKChsYXN0Q2hhcmFjdGVy
IDw8IDE0KSBeIGZpcnN0Q2hhcmFjdGVyKTsKLSAgICAgICAgaGFzaCArPSAoaGFzaCA+PiAxNCkg
KyAobGVuZ3RoIDw8IDE0KTsKLSAgICAgICAgaGFzaCBePSBoYXNoIDw8IDE0OwotICAgICAgICBy
ZXR1cm4gY2FjaGUodHlwZSlbKGhhc2ggKyAoaGFzaCA+PiA2KSkgJSBjYXBhY2l0eV07Ci0gICAg
fQotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIG1heFN0cmluZ0xlbmd0aEZvckNhY2hlID0g
MzY7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNhcGFjaXR5ID0gNTEyOwotICAgIHVzaW5n
IENhY2hlID0gc3RkOjphcnJheTxBdG9tU3RyaW5nLCBjYXBhY2l0eT47Ci0gICAgc3RhdGljIENh
Y2hlJiBjYWNoZShUeXBlKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxOYW1lQ2FjaGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE5hbWVDYWNoZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTU3ZDdl
Y2U1Zjk3YjIyYjNlMjY2NDc5ODlmNzBlYzljNDRlYWE0YQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxOYW1lQ2FjaGUuY3BwCkBAIC0wLDAgKzEsNDMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVD
YWNoZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0hUTUxOYW1lQ2FjaGU6OkF0b21TdHJp
bmdDYWNoZSYgSFRNTE5hbWVDYWNoZTo6YXRvbVN0cmluZ0NhY2hlKEF0b21TdHJpbmdUeXBlIHR5
cGUpCit7CisgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxBdG9tU3RyaW5nQ2Fj
aGU+IGNhY2hlc1syXTsKKyAgICByZXR1cm4gY2FjaGVzW3N0YXRpY19jYXN0PHNpemVfdD4odHlw
ZSldLmdldCgpOworfQorCitIVE1MTmFtZUNhY2hlOjpRdWFsaWZpZWROYW1lQ2FjaGUmIEhUTUxO
YW1lQ2FjaGU6OnF1YWxpZmllZE5hbWVDYWNoZSgpCit7CisgICAgc3RhdGljIE1haW5UaHJlYWRO
ZXZlckRlc3Ryb3llZDxRdWFsaWZpZWROYW1lQ2FjaGU+IGNhY2hlOworICAgIHJldHVybiBjYWNo
ZS5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE5hbWVDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTE5hbWVDYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzY2U0M2U4ZTEyMjE5MTEyZDNj
MDIzMzllYzY5YmNiMGQ5OTEwOTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MTmFtZUNhY2hlLmgKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKKyNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQXRvbVN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhU
TUxOYW1lQ2FjaGUgeworcHVibGljOgorICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIEF0b21TdHJp
bmcgbWFrZVRhZ05hbWUoU3Bhbjxjb25zdCBVQ2hhcj4gc3RyaW5nKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1ha2VBdG9tU3RyaW5nPEF0b21TdHJpbmdUeXBlOjpUYWdOYW1lPihzdHJpbmcpOwor
ICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIFF1YWxpZmllZE5hbWUgbWFrZUF0dHJp
YnV0ZVF1YWxpZmllZE5hbWUoU3Bhbjxjb25zdCBVQ2hhcj4gc3RyaW5nKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1ha2VRdWFsaWZpZWROYW1lKHN0cmluZyk7CisgICAgfQorCisgICAgQUxXQVlT
X0lOTElORSBzdGF0aWMgQXRvbVN0cmluZyBtYWtlQXR0cmlidXRlVmFsdWUoU3Bhbjxjb25zdCBV
Q2hhcj4gc3RyaW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ha2VBdG9tU3RyaW5nPEF0b21T
dHJpbmdUeXBlOjpBdHRyaWJ1dGVWYWx1ZT4oc3RyaW5nKTsKKyAgICB9CisKKyAgICBBTFdBWVNf
SU5MSU5FIHN0YXRpYyB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FICh3ZWJr
aXQub3JnL2IvMjMwMDE5KTogV2Ugc2hvdWxkIHRyeSB0byBmaW5kIG1vcmUgb3Bwb3J0dW5pdGll
cyB0byBjbGVhciB0aGlzIGNhY2hlIHdpdGhvdXQgaGluZGVyaW5nIHRoaXMgcGVyZm9ybWFuY2Ug
b3B0aW1pemF0aW9uLgorICAgICAgICBhdG9tU3RyaW5nQ2FjaGUoQXRvbVN0cmluZ1R5cGU6OlRh
Z05hbWUpLmZpbGwoeyB9KTsKKyAgICAgICAgYXRvbVN0cmluZ0NhY2hlKEF0b21TdHJpbmdUeXBl
OjpBdHRyaWJ1dGVWYWx1ZSkuZmlsbCh7IH0pOworICAgICAgICBxdWFsaWZpZWROYW1lQ2FjaGUo
KS5maWxsKHsgfSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGVudW0gY2xhc3MgQXRvbVN0cmlu
Z1R5cGUgOiBib29sIHsgVGFnTmFtZSwgQXR0cmlidXRlVmFsdWUgfTsKKworICAgIHRlbXBsYXRl
PEhUTUxOYW1lQ2FjaGU6OkF0b21TdHJpbmdUeXBlIHR5cGU+CisgICAgQUxXQVlTX0lOTElORSBz
dGF0aWMgQXRvbVN0cmluZyBtYWtlQXRvbVN0cmluZyhTcGFuPGNvbnN0IFVDaGFyPiBzdHJpbmcp
CisgICAgeworICAgICAgICBpZiAoc3RyaW5nLmVtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4g
ZW1wdHlBdG9tKCk7CisKKyAgICAgICAgYXV0byBsZW5ndGggPSBzdHJpbmcuc2l6ZSgpOworICAg
ICAgICBpZiAobGVuZ3RoID4gbWF4U3RyaW5nTGVuZ3RoRm9yQ2FjaGUpCisgICAgICAgICAgICBy
ZXR1cm4gQXRvbVN0cmluZyhzdHJpbmcuZGF0YSgpLCBsZW5ndGgpOworCisgICAgICAgIGF1dG8g
Zmlyc3RDaGFyYWN0ZXIgPSBzdHJpbmdbMF07CisgICAgICAgIGF1dG8gbGFzdENoYXJhY3RlciA9
IHN0cmluZ1tsZW5ndGggLSAxXTsKKyAgICAgICAgYXV0byYgc2xvdCA9IGF0b21TdHJpbmdDYWNo
ZVNsb3QodHlwZSwgZmlyc3RDaGFyYWN0ZXIsIGxhc3RDaGFyYWN0ZXIsIGxlbmd0aCk7CisgICAg
ICAgIGlmICghZXF1YWwoc2xvdC5pbXBsKCksIHN0cmluZy5kYXRhKCksIGxlbmd0aCkpIHsKKyAg
ICAgICAgICAgIEF0b21TdHJpbmcgcmVzdWx0KHN0cmluZy5kYXRhKCksIGxlbmd0aCk7CisgICAg
ICAgICAgICBzbG90ID0gcmVzdWx0OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBzbG90OworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUg
c3RhdGljIFF1YWxpZmllZE5hbWUgbWFrZVF1YWxpZmllZE5hbWUoU3Bhbjxjb25zdCBVQ2hhcj4g
c3RyaW5nKQorICAgIHsKKyAgICAgICAgaWYgKHN0cmluZy5lbXB0eSgpKQorICAgICAgICAgICAg
cmV0dXJuIG51bGxRTmFtZSgpOworCisgICAgICAgIGF1dG8gbGVuZ3RoID0gc3RyaW5nLnNpemUo
KTsKKyAgICAgICAgaWYgKGxlbmd0aCA+IG1heFN0cmluZ0xlbmd0aEZvckNhY2hlKQorICAgICAg
ICAgICAgcmV0dXJuIFF1YWxpZmllZE5hbWUobnVsbEF0b20oKSwgQXRvbVN0cmluZyhzdHJpbmcu
ZGF0YSgpLCBsZW5ndGgpLCBudWxsQXRvbSgpKTsKKworICAgICAgICBhdXRvIGZpcnN0Q2hhcmFj
dGVyID0gc3RyaW5nWzBdOworICAgICAgICBhdXRvIGxhc3RDaGFyYWN0ZXIgPSBzdHJpbmdbbGVu
Z3RoIC0gMV07CisgICAgICAgIGF1dG8mIHNsb3QgPSBxdWFsaWZpZWROYW1lQ2FjaGVTbG90KGZp
cnN0Q2hhcmFjdGVyLCBsYXN0Q2hhcmFjdGVyLCBsZW5ndGgpOworICAgICAgICBpZiAoIXNsb3Qg
fHwgIWVxdWFsKHNsb3QtPm1fbG9jYWxOYW1lLmltcGwoKSwgc3RyaW5nLmRhdGEoKSwgbGVuZ3Ro
KSkgeworICAgICAgICAgICAgUXVhbGlmaWVkTmFtZSByZXN1bHQobnVsbEF0b20oKSwgQXRvbVN0
cmluZyhzdHJpbmcuZGF0YSgpLCBsZW5ndGgpLCBudWxsQXRvbSgpKTsKKyAgICAgICAgICAgIHNs
b3QgPSByZXN1bHQuaW1wbCgpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiAqc2xvdDsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHN0
YXRpYyBzaXplX3Qgc2xvdEluZGV4KFVDaGFyIGZpcnN0Q2hhcmFjdGVyLCBVQ2hhciBsYXN0Q2hh
cmFjdGVyLCBVQ2hhciBsZW5ndGgpCisgICAgeworICAgICAgICB1bnNpZ25lZCBoYXNoID0gKGZp
cnN0Q2hhcmFjdGVyIDw8IDYpIF4gKChsYXN0Q2hhcmFjdGVyIDw8IDE0KSBeIGZpcnN0Q2hhcmFj
dGVyKTsKKyAgICAgICAgaGFzaCArPSAoaGFzaCA+PiAxNCkgKyAobGVuZ3RoIDw8IDE0KTsKKyAg
ICAgICAgaGFzaCBePSBoYXNoIDw8IDE0OworICAgICAgICByZXR1cm4gKGhhc2ggKyAoaGFzaCA+
PiA2KSkgJSBjYXBhY2l0eTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBBdG9t
U3RyaW5nJiBhdG9tU3RyaW5nQ2FjaGVTbG90KEF0b21TdHJpbmdUeXBlIHR5cGUsIFVDaGFyIGZp
cnN0Q2hhcmFjdGVyLCBVQ2hhciBsYXN0Q2hhcmFjdGVyLCBVQ2hhciBsZW5ndGgpCisgICAgewor
ICAgICAgICBhdXRvIGluZGV4ID0gc2xvdEluZGV4KGZpcnN0Q2hhcmFjdGVyLCBsYXN0Q2hhcmFj
dGVyLCBsZW5ndGgpOworICAgICAgICByZXR1cm4gYXRvbVN0cmluZ0NhY2hlKHR5cGUpW2luZGV4
XTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBSZWZQdHI8UXVhbGlmaWVkTmFt
ZTo6UXVhbGlmaWVkTmFtZUltcGw+JiBxdWFsaWZpZWROYW1lQ2FjaGVTbG90KFVDaGFyIGZpcnN0
Q2hhcmFjdGVyLCBVQ2hhciBsYXN0Q2hhcmFjdGVyLCBVQ2hhciBsZW5ndGgpCisgICAgeworICAg
ICAgICBhdXRvIGluZGV4ID0gc2xvdEluZGV4KGZpcnN0Q2hhcmFjdGVyLCBsYXN0Q2hhcmFjdGVy
LCBsZW5ndGgpOworICAgICAgICByZXR1cm4gcXVhbGlmaWVkTmFtZUNhY2hlKClbaW5kZXhdOwor
ICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBtYXhTdHJpbmdMZW5ndGhGb3JDYWNo
ZSA9IDM2OworICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjYXBhY2l0eSA9IDUxMjsKKworICAg
IHVzaW5nIEF0b21TdHJpbmdDYWNoZSA9IHN0ZDo6YXJyYXk8QXRvbVN0cmluZywgY2FwYWNpdHk+
OworICAgIHVzaW5nIFF1YWxpZmllZE5hbWVDYWNoZSA9IHN0ZDo6YXJyYXk8UmVmUHRyPFF1YWxp
ZmllZE5hbWU6OlF1YWxpZmllZE5hbWVJbXBsPiwgY2FwYWNpdHk+OworCisgICAgc3RhdGljIEF0
b21TdHJpbmdDYWNoZSYgYXRvbVN0cmluZ0NhY2hlKEF0b21TdHJpbmdUeXBlKTsKKyAgICBzdGF0
aWMgUXVhbGlmaWVkTmFtZUNhY2hlJiBxdWFsaWZpZWROYW1lQ2FjaGUoKTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVtb3J5
UmVsZWFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lbW9yeVJlbGVhc2UuY3BwCmluZGV4
IGJiYTk1ZmEzZTY3OWNhZmIxYjI5MTQ4MDU3ZGYyN2JjYjA2ODEyYzguLmMyMzNmYmE4OTM2NGEz
MDg0NzY1ZmZkODA0OGUwOTg2MmVhYTdjMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvTWVtb3J5UmVsZWFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9NZW1vcnlSZWxl
YXNlLmNwcApAQCAtMzgsOCArMzgsOCBAQAogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiSFRNTEF0
b21TdHJpbmdDYWNoZS5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJIVE1MTmFtZUNhY2hlLmgiCiAjaW5jbHVkZSAiSW5saW5lU3R5bGVTaGVldE93bmVyLmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTGF5b3V0SW50
ZWdyYXRpb25MaW5lTGF5b3V0LmgiCkBAIC04OSw3ICs4OSw3IEBAIHN0YXRpYyB2b2lkIHJlbGVh
c2VOb25jcml0aWNhbE1lbW9yeShNYWludGFpbk1lbW9yeUNhY2hlIG1haW50YWluTWVtb3J5Q2Fj
aGUpCiAgICAgICAgIE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5wcnVuZURlYWRSZXNvdXJjZXNU
b1NpemUoMCk7CiAKICAgICBJbmxpbmVTdHlsZVNoZWV0T3duZXI6OmNsZWFyQ2FjaGUoKTsKLSAg
ICBIVE1MQXRvbVN0cmluZ0NhY2hlOjpjbGVhcigpOworICAgIEhUTUxOYW1lQ2FjaGU6OmNsZWFy
KCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VDcml0aWNhbE1lbW9yeShTeW5jaHJvbm91cyBz
eW5jaHJvbm91cywgTWFpbnRhaW5CYWNrRm9yd2FyZENhY2hlIG1haW50YWluQmFja0ZvcndhcmRD
YWNoZSwgTWFpbnRhaW5NZW1vcnlDYWNoZSBtYWludGFpbk1lbW9yeUNhY2hlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9NZW1vcnlSZWxlYXNlQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2NvY29hL01lbW9yeVJlbGVhc2VDb2NvYS5tbQppbmRleCAzNTY1ZGIz
NWZiODkyNGYxMWU1Yzc4MTczZjRiMjU5YTI4M2NlMTJiLi5iOTQyMjYxNGJmMzE1ZDljYmFlNDJl
MWU0NGExZTVlYmFlZWZkM2I5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29h
L01lbW9yeVJlbGVhc2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL01l
bW9yeVJlbGVhc2VDb2NvYS5tbQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaW1wb3J0ICJGb250RmFt
aWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmgiCiAjaW1wb3J0ICJHQ0NvbnRyb2xsZXIuaCIKLSNp
bXBvcnQgIkhUTUxBdG9tU3RyaW5nQ2FjaGUuaCIKKyNpbXBvcnQgIkhUTUxOYW1lQ2FjaGUuaCIK
ICNpbXBvcnQgIklPU3VyZmFjZVBvb2wuaCIKICNpbXBvcnQgIkxheWVyUG9vbC5oIgogI2ltcG9y
dCAiTG9jYWxlQ29jb2EuaCIKQEAgLTEwMSw3ICsxMDEsNyBAQCB2b2lkIGpldHRpc29uRXhwZW5z
aXZlT2JqZWN0c09uVG9wTGV2ZWxOYXZpZ2F0aW9uKCkKICAgICBHQ0NvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLmRlbGV0ZUFsbExpbmtlZENvZGUoSlNDOjpEZWxldGVBbGxDb2RlSWZOb3RDb2xsZWN0
aW5nKTsKICNlbmRpZgogCi0gICAgSFRNTEF0b21TdHJpbmdDYWNoZTo6Y2xlYXIoKTsKKyAgICBI
VE1MTmFtZUNhY2hlOjpjbGVhcigpOwogfQogCiB2b2lkIHJlZ2lzdGVyTWVtb3J5UmVsZWFzZU5v
dGlmeUNhbGxiYWNrcygpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>