<?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>178321</bug_id>
          
          <creation_ts>2017-10-15 12:36:26 -0700</creation_ts>
          <short_desc>[Settings] Split non-macro generated parts of Settings into SettingsBase base class</short_desc>
          <delta_ts>2017-10-15 19:59:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1360581</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-15 12:36:26 -0700</bug_when>
    <thetext>[Settings] Split non-macro generated parts of Settings into SettingsBase base class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360582</commentid>
    <comment_count>1</comment_count>
      <attachid>323847</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-15 12:39:31 -0700</bug_when>
    <thetext>Created attachment 323847
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360583</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-15 12:42:18 -0700</bug_when>
    <thetext>Attachment 323847 did not pass style-queue:


ERROR: Source/WebCore/page/SettingsBase.h:140:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/page/SettingsBase.h:190:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/page/SettingsBase.cpp:314:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/page/SettingsBase.cpp:417:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/page/SettingsBase.cpp:455:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 5 in 9 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>1360609</commentid>
    <comment_count>3</comment_count>
      <attachid>323847</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-10-15 17:38:54 -0700</bug_when>
    <thetext>Comment on attachment 323847
Patch

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

&gt; Source/WebCore/page/SettingsBase.cpp:144
&gt; +SettingsBase::SettingsBase(Page* page)

Take a reference to a page?

&gt; Source/WebCore/page/SettingsBase.cpp:145
&gt;      : m_page(nullptr)

Initialize in class definition instead of here?

&gt; Source/WebCore/page/SettingsBase.cpp:146
&gt;      , m_mediaTypeOverride(&quot;screen&quot;)

Initialize in class definition instead of here?

&gt; Source/WebCore/page/SettingsBase.cpp:148
&gt;      , m_storageBlockingPolicy(SecurityOrigin::AllowAllStorage)

Initialize in class definition instead of here?

&gt; Source/WebCore/page/SettingsBase.cpp:168
&gt;      , m_timeWithoutMouseMovementBeforeHidingControls(3_s)

Initialize in class definition instead of here?

&gt; Source/WebCore/page/SettingsBase.h:102
&gt; +    ~SettingsBase();

I’d think this would need to be virtual, or the reference counting would need to be in the derived class, not the base. Or some other trick to make sure we call ~Settings when we do the last deref.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360621</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-15 18:59:49 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #3)
&gt; Comment on attachment 323847 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=323847&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/SettingsBase.cpp:144
&gt; &gt; +SettingsBase::SettingsBase(Page* page)
&gt; 
&gt; Take a reference to a page?

Alas, we can&apos;t, there is caller who passes nullptr in Document for frameless Documents.

&gt; 
&gt; &gt; Source/WebCore/page/SettingsBase.cpp:145
&gt; &gt;      : m_page(nullptr)
&gt; 
&gt; Initialize in class definition instead of here?

Yup, will fix all of these.


&gt; &gt; Source/WebCore/page/SettingsBase.h:102
&gt; &gt; +    ~SettingsBase();
&gt; 
&gt; I’d think this would need to be virtual, or the reference counting would
&gt; need to be in the derived class, not the base. Or some other trick to make
&gt; sure we call ~Settings when we do the last deref.

I&apos;m going to move the RefCounted back to Settings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360624</commentid>
    <comment_count>5</comment_count>
      <attachid>323855</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-15 19:13:42 -0700</bug_when>
    <thetext>Created attachment 323855
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360625</commentid>
    <comment_count>6</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-15 19:16:06 -0700</bug_when>
    <thetext>Attachment 323855 did not pass style-queue:


ERROR: Source/WebCore/page/SettingsBase.h:140:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/page/SettingsBase.h:190:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/page/SettingsBase.cpp:311:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/page/SettingsBase.cpp:414:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/page/SettingsBase.cpp:452:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 5 in 9 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>1360643</commentid>
    <comment_count>7</comment_count>
      <attachid>323855</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-15 19:59:11 -0700</bug_when>
    <thetext>Comment on attachment 323855
Patch

Clearing flags on attachment: 323855

Committed r223332: &lt;https://trac.webkit.org/changeset/223332&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360644</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-15 19:59:12 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360645</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-10-15 19:59:41 -0700</bug_when>
    <thetext>&lt;rdar://problem/35000638&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323847</attachid>
            <date>2017-10-15 12:39:31 -0700</date>
            <delta_ts>2017-10-15 19:13:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-178321-20171015123930.patch</filename>
            <type>text/plain</type>
            <size>151780</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMzMyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDE3LTEwLTE1ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1NldHRpbmdzXSBTcGxpdCBub24tbWFj
cm8gZ2VuZXJhdGVkIHBhcnRzIG9mIFNldHRpbmdzIGludG8gU2V0dGluZ3NCYXNlIGJhc2UgY2xh
c3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODMy
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdvcmtp
bmcgdG93YXJkcyBnZXR0aW5nIGdlbmVyYXRlZCBTZXR0aW5ncyB3b3JraW5nIGFnYWluLCBidXQg
aW4gc21hbGxlciBwYXRjaGVzLCBzcGxpdAorICAgICAgICBub24tZ2VuZXJhdGVkIHBhcnQgb2Zm
IGludG8gU2V0dGluZ3NCYXNlIGFzIGEgZmlyc3Qgc3RlcC4KKyAgICAgICAgCisgICAgICAgIE9u
ZSBmdW5jdGlvbiwgZWZmZWN0aXZlRnJhbWVGbGF0dGVuaW5nKCksIG5lZWRzIHRvIHJlbWFpbiBp
biBTZXR0aW5ncyBmb3Igbm93LCBhcyBpdCBkaXJlY3RseQorICAgICAgICByZWZlcmVuY2VzIGEg
bWFjcm8gZ2VuZXJhdGVkIGZ1bmN0aW9uLCBmcmFtZUZsYXR0ZW5pbmcoKS4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBwYWdlL1BhZ2UuaDoKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNw
cDoKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAgICogcGFnZS9TZXR0aW5nc0Jh
c2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oLgorICAgICAg
ICAqIHBhZ2UvY29jb2EvU2V0dGluZ3NCYXNlQ29jb2EubW06IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvY29jb2EvU2V0dGluZ3NDb2NvYS5tbS4KKyAgICAgICAgKiBwYWdlL2NvY29h
L1NldHRpbmdzQ29jb2EubW06IFJlbW92ZWQuCisKIDIwMTctMTAtMTQgIEFudG9pbmUgUXVpbnQg
IDxncmFvdXRzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgYWxsIFdlYiBBbmltYXRpb25z
IGNvZGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMjMzMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjI0Niw2ICsyMjQ2
LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBhZ2UvU2VjdXJpdHlPcmlnaW5EYXRhLmNw
cAogICAgIHBhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwCiAgICAgcGFnZS9TZXR0aW5ncy5jcHAKKyAg
ICBwYWdlL1NldHRpbmdzQmFzZS5jcHAKICAgICBwYWdlL1NvY2tldFByb3ZpZGVyLmNwcAogICAg
IHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCiAgICAgcGFnZS9TdXNwZW5kYWJsZVRpbWVyLmNw
cApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjIzMzI4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMzMxLDkgKzMzMzEsMTEg
QEAKIAkJN0NDMkRFMDMxRUNBMDRBNTAwMjdCNzc0IC8qIE5vdGlmaWNhdGlvbkRpcmVjdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NDMkRFMDIx
RUNBMDRBNTAwMjdCNzc0IC8qIE5vdGlmaWNhdGlvbkRpcmVjdGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDQzU2NEI4MThCQUJFQTYwMDFC
OTY1MiAvKiBUZWxlcGhvbmVOdW1iZXJEZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NDNTY0QjYxOEJBQkVBNjAwMUI5NjUyIC8qIFRlbGVw
aG9uZU51bWJlckRldGVjdG9yLmggKi87IH07CiAJCTdDQzU2NEJBMThCQUM3MjAwMDFCOTY1MiAv
KiBUZWxlcGhvbmVOdW1iZXJEZXRlY3RvckNvY29hLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQzU2NEI5MThCQUM3MjAwMDFCOTY1MiAvKiBUZWxl
cGhvbmVOdW1iZXJEZXRlY3RvckNvY29hLmNwcCAqLzsgfTsKKwkJN0NDNjYwQTIxRjkzQ0I5MDAw
RDUwMEU5IC8qIFNldHRpbmdzQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3Q0M2NjA5QjFGOTMwNTc5MDBENTAwRTkgLyogU2V0dGluZ3NCYXNl
LmNwcCAqLzsgfTsKIAkJN0NDNjk5NDAxOTFFQzVGNTAwQUYyMjcwIC8qIEpTV2ViS2l0TmFtZXNw
YWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
QzY5OTNFMTkxRUM1RjUwMEFGMjI3MCAvKiBKU1dlYktpdE5hbWVzcGFjZS5jcHAgKi87IH07CiAJ
CTdDQzY5OTQxMTkxRUM1RjUwMEFGMjI3MCAvKiBKU1dlYktpdE5hbWVzcGFjZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NDNjk5M0YxOTFFQzVGNTAw
QUYyMjcwIC8qIEpTV2ViS2l0TmFtZXNwYWNlLmggKi87IH07CiAJCTdDQzdFM0Q3MTcyMDhDMEYw
MDNDNTI3NyAvKiBJRE5TY3JpcHRXaGl0ZUxpc3QudHh0IGluIFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0M3RTNENjE3MjA4QzBGMDAzQzUyNzcgLyogSURO
U2NyaXB0V2hpdGVMaXN0LnR4dCAqLzsgfTsKKwkJN0NDOTcyMkUxRjkzRTMzNjAwMDRENENGIC8q
IFNldHRpbmdzQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0NDNjYwOTkxRjkzMDU3ODAwRDUwMEU5IC8qIFNldHRpbmdzQmFzZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDQ0VCRkMwMUREOEY2
QUIwMDJDNDBCOCAvKiBTVkdMZW5ndGhWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNThENTMxREQ3QjA5MzAwMTI4NTUyIC8qIFNWR0xlbmd0
aFZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJN0NEMEJBMDQxQjhGNzlDOTAwNUNFQkJFIC8qIEFjdGl2ZURPTUNhbGxiYWNrTWljcm90YXNr
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRDBC
QTAyMUI4Rjc5QzkwMDVDRUJCRSAvKiBBY3RpdmVET01DYWxsYmFja01pY3JvdGFzay5jcHAgKi87
IH07CiAJCTdDRDBCQTA1MUI4Rjc5QzkwMDVDRUJCRSAvKiBBY3RpdmVET01DYWxsYmFja01pY3Jv
dGFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NE
MEJBMDMxQjhGNzlDOTAwNUNFQkJFIC8qIEFjdGl2ZURPTUNhbGxiYWNrTWljcm90YXNrLmggKi87
IH07CkBAIC00NDE5LDcgKzQ0MjEsNyBAQAogCQlBMTdDODEyMzBGMkE1Q0Y3MDA1REFBRUIgLyog
SFRNTEVsZW1lbnRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMTdDODEyMTBGMkE1Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5
LmggKi87IH07CiAJCUExN0QyNzVFMUVBQzU3OTgwMEJGMDFFNyAvKiBNZWRpYVNlbGVjdGlvbk9w
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE3
RDI3NUQxRUFDNTc5ODAwQkYwMUU3IC8qIE1lZGlhU2VsZWN0aW9uT3B0aW9uLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTE3RkVFNjQxRjg4OTMy
MjAwMjFFODExIC8qIFBheW1lbnRTZXNzaW9uQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE3RkVFNjMxRjg4OTMyMjAwMjFFODExIC8qIFBheW1l
bnRTZXNzaW9uQmFzZS5oICovOyB9OwotCQlBMTgyRDVCNzFCRTcyMjY3MDA4N0E3Q0MgLyogU2V0
dGluZ3NDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEExODJENUI2MUJFNzIyNjIwMDg3QTdDQyAvKiBTZXR0aW5nc0NvY29hLm1tICovOyB9Owor
CQlBMTgyRDVCNzFCRTcyMjY3MDA4N0E3Q0MgLyogU2V0dGluZ3NCYXNlQ29jb2EubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTgyRDVCNjFCRTcyMjYy
MDA4N0E3Q0MgLyogU2V0dGluZ3NCYXNlQ29jb2EubW0gKi87IH07CiAJCUExODVCNDI5MUU4MjEx
QTEwMERDOTExOCAvKiBQcmV2aWV3TG9hZGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTE4NUI0MjcxRTgyMTFBMTAwREM5MTE4IC8qIFByZXZpZXdM
b2FkZXIubW0gKi87IH07CiAJCUExODVCNDJBMUU4MjExQTEwMERDOTExOCAvKiBQcmV2aWV3TG9h
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTg1
QjQyODFFODIxMUExMDBEQzkxMTggLyogUHJldmlld0xvYWRlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUExODg5MEFFMUFBMTNGMjUwMDI2QzMw
MSAvKiBQYXJlbnRhbENvbnRyb2xzQ29udGVudEZpbHRlci5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExODg5MEFDMUFBMTNGMjUwMDI2QzMwMSAvKiBQ
YXJlbnRhbENvbnRyb2xzQ29udGVudEZpbHRlci5tbSAqLzsgfTsKQEAgLTExNTkwLDYgKzExNTky
LDggQEAKIAkJN0NDMkRFMDIxRUNBMDRBNTAwMjdCNzc0IC8qIE5vdGlmaWNhdGlvbkRpcmVjdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBOb3RpZmljYXRpb25EaXJlY3Rpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0NDNTY0QjYxOEJBQkVBNjAwMUI5NjUyIC8qIFRlbGVwaG9uZU51
bWJlckRldGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbGVwaG9u
ZU51bWJlckRldGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQzU2NEI5
MThCQUM3MjAwMDFCOTY1MiAvKiBUZWxlcGhvbmVOdW1iZXJEZXRlY3RvckNvY29hLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlbGVwaG9uZU51bWJlckRldGVjdG9y
Q29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0M2NjA5OTFGOTMwNTc4
MDBENTAwRTkgLyogU2V0dGluZ3NCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNldHRpbmdzQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0M2NjA5
QjFGOTMwNTc5MDBENTAwRTkgLyogU2V0dGluZ3NCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNldHRpbmdzQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdDQzY5OTNFMTkxRUM1RjUwMEFGMjI3MCAvKiBKU1dlYktpdE5hbWVzcGFjZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYktpdE5hbWVzcGFj
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQzY5OTNGMTkxRUM1RjUwMEFG
MjI3MCAvKiBKU1dlYktpdE5hbWVzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1dlYktpdE5hbWVzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
Q0M3RTNENjE3MjA4QzBGMDAzQzUyNzcgLyogSUROU2NyaXB0V2hpdGVMaXN0LnR4dCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBJRE5TY3JpcHRXaGl0ZUxpc3QudHh0OyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTI4NzksNyArMTI4ODMsNyBAQAogCQlBMTdDODEyMTBGMkE1Q0Y3MDA1
REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEhUTUxFbGVtZW50RmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBMTdEMjc1RDFFQUM1Nzk4MDBCRjAxRTcgLyogTWVkaWFTZWxlY3Rpb25PcHRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWVkaWFTZWxlY3Rpb25PcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTE3RkVFNjMxRjg4OTMyMjAwMjFFODExIC8qIFBheW1lbnRTZXNzaW9uQmFzZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQYXltZW50U2Vzc2lvbkJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQTE4MkQ1QjYxQkU3MjI2MjAwODdBN0NDIC8qIFNldHRpbmdzQ29jb2EubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTZXR0aW5nc0NvY29hLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMTgyRDVCNjFCRTcyMjYyMDA4N0E3Q0Mg
LyogU2V0dGluZ3NCYXNlQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBTZXR0aW5nc0Jhc2VDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTE4NUI0MjcxRTgyMTFBMTAwREM5MTE4IC8qIFByZXZpZXdMb2FkZXIubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQcmV2aWV3TG9hZGVyLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBMTg1QjQyODFFODIxMUExMDBEQzkxMTggLyogUHJldmll
d0xvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmV2aWV3TG9hZGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExODg5MEFDMUFBMTNGMjUwMDI2QzMw
MSAvKiBQYXJlbnRhbENvbnRyb2xzQ29udGVudEZpbHRlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBhcmVudGFsQ29udHJvbHNDb250ZW50RmlsdGVyLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkwNTUsMTAgKzE5MDU5LDEwIEBACiAJCTUx
N0M4NzA3MUY4RThGRjIwMEVCODA3NiAvKiBjb250ZXh0ICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk1MTdDODcwODFGOEVCOUJGMDBFQjgwNzYgLyogU1dD
b250ZXh0TWFuYWdlci5jcHAgKi8sCi0JCQkJNTE3Qzg3MDkxRjhFQjlDMDAwRUI4MDc2IC8qIFNX
Q29udGV4dE1hbmFnZXIuaCAqLywKIAkJCQk1MTdDODcxMTFGOEVFNzJGMDBFQjgwNzYgLyogU2Vy
dmljZVdvcmtlclRocmVhZC5jcHAgKi8sCiAJCQkJNTE3Qzg3MTAxRjhFRTcyRTAwRUI4MDc2IC8q
IFNlcnZpY2VXb3JrZXJUaHJlYWQuaCAqLywKKwkJCQk1MTdDODcwODFGOEVCOUJGMDBFQjgwNzYg
LyogU1dDb250ZXh0TWFuYWdlci5jcHAgKi8sCisJCQkJNTE3Qzg3MDkxRjhFQjlDMDAwRUI4MDc2
IC8qIFNXQ29udGV4dE1hbmFnZXIuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gY29udGV4dDsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xOTMwNyw3ICsxOTMxMSw3IEBACiAJCQkJQUQ1
QTBDMjIxREVDQTM3RTAwNzA3MDU0IC8qIFBlcmZvcm1hbmNlTG9nZ2luZ0NvY29hLm1tICovLAog
CQkJCUFERkUyQjU0MUJENUY0MTIwMERBQjQ1NyAvKiBSZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29h
Lm1tICovLAogCQkJCUE1MDcxRTg4MUM1NkQ0RkEwMDk5NTFCRSAvKiBSZXNvdXJjZVVzYWdlVGhy
ZWFkQ29jb2EubW0gKi8sCi0JCQkJQTE4MkQ1QjYxQkU3MjI2MjAwODdBN0NDIC8qIFNldHRpbmdz
Q29jb2EubW0gKi8sCisJCQkJQTE4MkQ1QjYxQkU3MjI2MjAwODdBN0NDIC8qIFNldHRpbmdzQmFz
ZUNvY29hLm1tICovLAogCQkJCTI2MjU1RjAxMTg4NzhFMTEwMDA2RTFGRCAvKiBVc2VyQWdlbnQu
aCAqLywKIAkJCQk1RDU5NzVCNjE5NjM2MzdCMDBEMDA4NzggLyogVXNlckFnZW50Lm1tICovLAog
CQkJKTsKQEAgLTE5ODc4LDYgKzE5ODgyLDggQEAKIAkJCQkxNEM5QTVFOTBCM0QxMDVGMDA1QTAy
MzIgLyogU2V0dGluZ3MuY3BwICovLAogCQkJCUY1ODc4NjNBMDJERTNBMTQwMUVBNDEyMiAvKiBT
ZXR0aW5ncy5oICovLAogCQkJCUJDNTlERUY4MTY5REVEQzMwMDE2QUMzNCAvKiBTZXR0aW5ncy5p
biAqLywKKwkJCQk3Q0M2NjA5QjFGOTMwNTc5MDBENTAwRTkgLyogU2V0dGluZ3NCYXNlLmNwcCAq
LywKKwkJCQk3Q0M2NjA5OTFGOTMwNTc4MDBENTAwRTkgLyogU2V0dGluZ3NCYXNlLmggKi8sCiAJ
CQkJNUM2ODhBQTIxRDM4MTI2RjAwMEI1NEZBIC8qIFNvY2tldFByb3ZpZGVyLmNwcCAqLywKIAkJ
CQk1QzdDODhENzFEMEYxRjJCMDA5RDJGNkQgLyogU29ja2V0UHJvdmlkZXIuaCAqLywKIAkJCQk2
MjZDREUwQzExNDA0MjRDMDAxRTVBNjggLyogU3BhdGlhbE5hdmlnYXRpb24uY3BwICovLApAQCAt
Mjg1NTIsNyArMjg1NTgsNiBAQAogCQkJCTdDODEzOUFBMUVENjYwNEIwMENFMjZFOCAvKiBKU0RP
TUNhc3RlZFRoaXNFcnJvckJlaGF2aW9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTNDMkMzNDFC
QzI5QThGMDA3NTIwNEMgLyogSlNET01Db25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTMwODQxMzQxQ0REQjE1NTAwQjA5NThDIC8qIEpTRE9NQ29udmVydC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJNTE3Qzg3MEIxRjhFQkIyNTAwRUI4MDc2IC8qIFNXQ29udGV4dE1hbmFnZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTdDOEUzNEFEMUU0QTMzQUYwMDU0Q0UyMyAvKiBKU0RPTUNvbnZlcnRB
bnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDOEUzNEFFMUU0QTMzQUYwMDU0Q0UyMyAvKiBKU0RP
TUNvbnZlcnRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzhFMzRBRjFFNEEzM0FGMDA1NENF
MjMgLyogSlNET01Db252ZXJ0Qm9vbGVhbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDEwNywxMCAr
MzAxMTIsMTIgQEAKIAkJCQk1MTdBNTM0RjFGNTRBOEJBMDBEQ0RDMEEgLyogU2VydmljZVdvcmtl
clJlZ2lzdHJhdGlvbkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxN0E1MzI5MUY0QjkwQjkw
MERDREMwQSAvKiBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5LmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MUYxNzU2OTFGM0VCQzgzMDBDNzQ5NTAgLyogU2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bk9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxQkNDRTMwMUY4RjE3OUUwMDZCQTBFRCAv
KiBTZXJ2aWNlV29ya2VyVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUYxNzU2QzFGM0VC
QzgzMDBDNzQ5NTAgLyogU2VydmljZVdvcmtlclVwZGF0ZVZpYUNhY2hlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5MzMwOUUxMDA5OUU2NDkyMDA1NkU1ODEgLyogU2V0Tm9kZUF0dHJpYnV0ZUNvbW1h
bmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUI4REJEQjRDMTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRT
ZWxlY3Rpb25Db21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTk0RjA4MjQ1RTU5MDAx
RTlBQkMgLyogU2V0dGluZ3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDQzk3MjJFMUY5M0UzMzYw
MDA0RDRDRiAvKiBTZXR0aW5nc0Jhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzRUY3NjZCMTY1
MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYz
REQ0NTAxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDNUVCOEM0MEU4MjAzMUIwMEIyNTk2NSAvKiBTaGFkb3dEYXRhLmggaW4gSGVhZGVycyAqLywK
QEAgLTMwMzM3LDcgKzMwMzQ0LDYgQEAKIAkJCQlCMjIyNzlDNTBEMDBCRjIyMDA3MUI3ODIgLyog
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5
QzgwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFQmxlbmRFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCMjIyNzlDQjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAotCQkJCTUxQkNDRTMwMUY4RjE3OUUwMDZCQTBFRCAvKiBTZXJ2aWNl
V29ya2VyVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzlDRTBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUIyMjI3OUQxMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE5MjEzMjc1MTFDMEU2QkIwMDQ1NjIzOCAvKiBTVkdGRUNvbnZvbHZl
TWF0cml4RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDUyNyw2ICszMDUzMyw3IEBACiAJ
CQkJQjIyMjdBRjYwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1pvb21BbmRQYW4uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUIyRTRFQzk4MEQwMEMyMkIwMDQzMjY0MyAvKiBTVkdab29tRXZlbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxN0E1MzFEMUY0QjUzQjEwMERDREMwQSAvKiBTV0NsaWVudENvbm5l
Y3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTUxN0M4NzBCMUY4RUJCMjUwMEVCODA3NiAvKiBT
V0NvbnRleHRNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTdBNTJGMDFGNDc1MzVCMDBE
Q0RDMEEgLyogU1dTZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRjY0NTk3MUY0QTY4NkYw
MEI1NERFRCAvKiBTV1NlcnZlclJlZ2lzdHJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3
QTUzNDYxRjUwQzE3RjAwRENEQzBBIC8qIFNXU2VydmVyV29ya2VyLmggaW4gSGVhZGVycyAqLywK
QEAgLTMxNTEyLDcgKzMxNTE5LDYgQEAKIAkJCQk0MUQxMjlDRjFGM0QwRUZFMDBEMTVFNDcgLyog
Q2FjaGVTdG9yYWdlQ29ubmVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDNBRjhFNjFB
QzVCN0U4MDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTQ5QUUyRDk2MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCTUxN0M4NzE4MUY4RkQ0RDkwMEVCODA3NiAvKiBTZXJ2aWNlV29ya2VyQ29u
dGV4dERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTUyMDc2MDQxRjI2NzVGRTAwN0QyQUFC
IC8qIENhbGxUcmFjZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE1Q0RBRjQxRTZCOEY4NzAw
NEYxMUVFIC8qIENhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTQ5NDg0RkMxMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNHcmFkaWVudC5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTMyMTUzLDcgKzMyMTU5LDYgQEAKIAkJCQk5NkFCQTQyMzE0QkNCODBF
MDBENTYyMDQgLyogR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjJFRDk3NzEwQjFGNTVDRTAwMjU3RDBGIC8qIEdyYXBoaWNzQ29udGV4dENHLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUIyNzdCNDA0MEIyMkYzN0MwMDA0QkVDNiAvKiBHcmFwaGlj
c0NvbnRleHRDb2NvYS5tbSBpbiBTb3VyY2VzICovLAotCQkJCTUxQkNDRTJGMUY4RjE3OTUwMDZC
QTBFRCAvKiBTZXJ2aWNlV29ya2VyVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTgw
QjBDMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTQ5OUIzRUQ2MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZBMjRENzkxNjJERjkxOTAwQTNGNEMwIC8qIEdyYXBoaWNzTGF5ZXJV
cGRhdGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzM0NTgsNyArMzM0NjMsNiBAQAogCQkJCUM5
NkY1RUM2MUI1ODcyMjYwMDkxRUE5RCAvKiBNZWRpYVNlc3Npb25JbnRlcnJ1cHRpb25Qcm92aWRl
ck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUM5MEY2NTU1MUIyMjUzQjEwMDIxNjNBMSAvKiBN
ZWRpYVNlc3Npb25NYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNENjY5RDY4MUQyMzM2
NEIwMDREMTg2NiAvKiBNZWRpYVNlc3Npb25NYW5hZ2VyQ29jb2EuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJNTE3Qzg3MEExRjhFQkIyNTAwRUI4MDc2IC8qIFNXQ29udGV4dE1hbmFnZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMDc2MzhBOUExODg0NDg3MjAwRTE1QTFCIC8qIE1lZGlhU2Vzc2lv
bk1hbmFnZXJJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQkwN0VEQzNFRTFBQUNCNzVEMDA5ODNF
QjUgLyogTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEM0E0
OTVFMTdBOUQwMUIwMDI3NEU0MiAvKiBNZWRpYVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTM0MDE1LDYgKzM0MDE5LDcgQEAKIAkJCQkyRDkzQUVFNDE5REY1NjQxMDAyQTg2QzMgLyogU2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxRjE3NTVDMUYz
RUJDODMwMEM3NDk1MCAvKiBTZXJ2aWNlV29ya2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUx
RjE3NTVFMUYzRUJDODMwMEM3NDk1MCAvKiBTZXJ2aWNlV29ya2VyQ29udGFpbmVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTUxN0M4NzE4MUY4RkQ0RDkwMEVCODA3NiAvKiBTZXJ2aWNlV29ya2Vy
Q29udGV4dERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMTc1NjAxRjNFQkM4MzAwQzc0
OTUwIC8qIFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
MUYxNzU2MjFGM0VCQzgzMDBDNzQ5NTAgLyogU2VydmljZVdvcmtlckpvYi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MTdBNTMyNTFGNEI5MDU1MDBEQ0RDMEEgLyogU2VydmljZVdvcmtlckpvYkRh
dGEuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zNDAyMywxMCArMzQwMjgsMTIgQEAKIAkJCQk1MTdB
NTM0RTFGNTRBOEJBMDBEQ0RDMEEgLyogU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRhdGEuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3QTUzMjgxRjRCOTBCOTAwRENEQzBBIC8qIFNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25LZXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGNjQ1QTIxRjRC
RjUzQzAwQjU0REVEIC8qIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25PcHRpb25zLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTUxQkNDRTJGMUY4RjE3OTUwMDZCQTBFRCAvKiBTZXJ2aWNlV29ya2Vy
VGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTBGMDk5RTY0OTIwMDU2RTU4MSAv
KiBTZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCOERCREI0
QjEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNEM5QTVFQTBCM0QxMDVGMDA1QTAyMzIgLyogU2V0dGluZ3MuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQTE4MkQ1QjcxQkU3MjI2NzAwODdBN0NDIC8qIFNldHRpbmdzQ29jb2EubW0g
aW4gU291cmNlcyAqLywKKwkJCQk3Q0M2NjBBMjFGOTNDQjkwMDBENTAwRTkgLyogU2V0dGluZ3NC
YXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUExODJENUI3MUJFNzIyNjcwMDg3QTdDQyAvKiBT
ZXR0aW5nc0Jhc2VDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGM0RENDRGMTJGNUVBMUIw
MDBEOTE5MCAvKiBTaGFkb3dCbHVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNUVCOEMzMEU4
MjAzMUIwMEIyNTk2NSAvKiBTaGFkb3dEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE2RDE2
OTYyMTM0NkI0OUIwMDBFQjc3MCAvKiBTaGFkb3dSb290LmNwcCBpbiBTb3VyY2VzICovLApAQCAt
MzQzMjcsNiArMzQzMzQsNyBAQAogCQkJCUIyMjI3QUY1MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkda
b29tQW5kUGFuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRTRFQzk3MEQwMEMyMkIwMDQzMjY0
MyAvKiBTVkdab29tRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3QTUzMUMxRjRCNTNC
MTAwRENEQzBBIC8qIFNXQ2xpZW50Q29ubmVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1
MTdDODcwQTFGOEVCQjI1MDBFQjgwNzYgLyogU1dDb250ZXh0TWFuYWdlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MTdBNTJGMTFGNDc1NEU3MDBEQ0RDMEEgLyogU1dTZXJ2ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTFGNjQ1OTYxRjRBNjg2RjAwQjU0REVEIC8qIFNXU2VydmVyUmVnaXN0
cmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxN0E1MzQ1MUY1MEMxN0YwMERDREMwQSAv
KiBTV1NlcnZlcldvcmtlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCShy
ZXZpc2lvbiAyMjMzMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIGVudW0gY2xhc3MgRGlkV3JhcCA6IGJvb2w7CiBjbGFz
cyBQYWdlIDogcHVibGljIFN1cHBsZW1lbnRhYmxlPFBhZ2U+IHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShQYWdlKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBmcmllbmQg
Y2xhc3MgU2V0dGluZ3M7CisgICAgZnJpZW5kIGNsYXNzIFNldHRpbmdzQmFzZTsKIAogcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHVwZGF0ZVN0eWxlRm9yQWxsUGFnZXNB
ZnRlckdsb2JhbENoYW5nZUluRW52aXJvbm1lbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvU2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGlu
Z3MuY3BwCShyZXZpc2lvbiAyMjMzMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsODYgKzQxLDEzIEBACiAjaW5jbHVkZSAiSGlzdG9y
eUl0ZW0uaCIKICNpbmNsdWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5j
bHVkZSAiUGFnZUNhY2hlLmgiCi0jaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgi
CiAjaW5jbHVkZSAiU3RvcmFnZU1hcC5oIgogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKLSNp
ZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlIDx3dGYvc3BpL2Rhcndpbi9keWxkU1BJLmg+Ci0j
ZW5kaWYKLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCi0j
aW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5oIgotI2VuZGlmCi0KLSNpZiBF
TkFCTEUoTUVESUFfU1RSRUFNKQotI2luY2x1ZGUgIk1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgdm9pZCBzZXRJ
bWFnZUxvYWRpbmdTZXR0aW5ncyhQYWdlKiBwYWdlKQotewotICAgIGlmICghcGFnZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmcGFnZS0+bWFpbkZyYW1lKCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAg
aWYgKCFmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBm
cmFtZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5zZXRJbWFnZXNFbmFibGVk
KHBhZ2UtPnNldHRpbmdzKCkuYXJlSW1hZ2VzRW5hYmxlZCgpKTsKLSAgICAgICAgZnJhbWUtPmRv
Y3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCkuc2V0QXV0b0xvYWRJbWFnZXMocGFnZS0+
c2V0dGluZ3MoKS5sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoKSk7Ci0gICAgfQotfQotCi1zdGF0
aWMgdm9pZCBpbnZhbGlkYXRlQWZ0ZXJHZW5lcmljRmFtaWx5Q2hhbmdlKFBhZ2UqIHBhZ2UpCi17
Ci0gICAgaW52YWxpZGF0ZUZvbnRDYXNjYWRlQ2FjaGUoKTsKLSAgICBpZiAocGFnZSkKLSAgICAg
ICAgcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7Ci19Ci0KLSNpZiBVU0Uo
QVZGT1VOREFUSU9OKQotYm9vbCBTZXR0aW5nczo6Z0FWRm91bmRhdGlvbkVuYWJsZWQgPSB0cnVl
OwotYm9vbCBTZXR0aW5nczo6Z0FWRm91bmRhdGlvbk5TVVJMU2Vzc2lvbkVuYWJsZWQgPSB0cnVl
OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShDT0NPQSkKLWJvb2wgU2V0dGluZ3M6OmdRVEtpdEVu
YWJsZWQgPSBmYWxzZTsKLSNlbmRpZgotCi0jaWYgVVNFKEdTVFJFQU1FUikKLWJvb2wgU2V0dGlu
Z3M6OmdHU3RyZWFtZXJFbmFibGVkID0gdHJ1ZTsKLSNlbmRpZgotCi1ib29sIFNldHRpbmdzOjpn
TW9ja1Njcm9sbGJhcnNFbmFibGVkID0gZmFsc2U7Ci1ib29sIFNldHRpbmdzOjpnVXNlc092ZXJs
YXlTY3JvbGxiYXJzID0gZmFsc2U7Ci1ib29sIFNldHRpbmdzOjpnTW9ja1Njcm9sbEFuaW1hdG9y
RW5hYmxlZCA9IGZhbHNlOwotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLWJvb2wgU2V0dGlu
Z3M6OmdNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkID0gZmFsc2U7Ci1ib29sIFNldHRpbmdzOjpn
TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uID0gdHJ1ZTsKLSNlbmRpZgotCi0j
aWYgUExBVEZPUk0oV0lOKQotYm9vbCBTZXR0aW5nczo6Z1Nob3VsZFVzZUhpZ2hSZXNvbHV0aW9u
VGltZXJzID0gdHJ1ZTsKLSNlbmRpZgotICAgIAotYm9vbCBTZXR0aW5nczo6Z1Nob3VsZFJlc3Bl
Y3RQcmlvcml0eUluQ1NTQXR0cmlidXRlU2V0dGVycyA9IGZhbHNlOwotYm9vbCBTZXR0aW5nczo6
Z0xvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkID0gZmFsc2U7Ci1ib29sIFNldHRp
bmdzOjpnUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWRFbmFibGVkID0gZmFsc2U7Ci1ib29s
IFNldHRpbmdzOjpnQWxsb3dzQW55U1NMQ2VydGlmaWNhdGUgPSBmYWxzZTsKLQotI2lmIFBMQVRG
T1JNKElPUykKLWJvb2wgU2V0dGluZ3M6OmdOZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVk
ID0gZmFsc2U7Ci1ib29sIFNldHRpbmdzOjpnQVZLaXRFbmFibGVkID0gZmFsc2U7Ci1ib29sIFNl
dHRpbmdzOjpnU2hvdWxkT3B0T3V0T2ZOZXR3b3JrU3RhdGVPYnNlcnZhdGlvbiA9IGZhbHNlOwot
I2VuZGlmCi1ib29sIFNldHRpbmdzOjpnTWFuYWdlQXVkaW9TZXNzaW9uID0gZmFsc2U7Ci1ib29s
IFNldHRpbmdzOjpnQ3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkID0gZmFsc2U7Ci0KIC8vIE5P
VEVzCiAvLyAgMSkgRWRpdGluZ01hY0JlaGF2aW9yIGNvbXByaXNlcyBUaWdlciwgTGVvcGFyZCwg
U25vd0xlb3BhcmQgYW5kIGlPUyBidWlsZHMsIGFzIHdlbGwgYXMgUXRXZWJLaXQgd2hlbiBidWls
dCBvbiBNYWM7CiAvLyAgMikgRWRpdGluZ1dpbmRvd3NCZWhhdmlvciBjb21wcmlzZXMgV2luMzIg
YnVpbGQ7CkBAIC0xNDQsMTkgKzcxLDYgQEAgc3RhdGljIEVkaXRpbmdCZWhhdmlvclR5cGUgZWRp
dGluZ0JlaGF2aQogICAgIDsKIH0KIAotYm9vbCBTZXR0aW5nczo6ZGVmYXVsdEN1c3RvbVBhc3Rl
Ym9hcmREYXRhRW5hYmxlZCgpCi17Ci0jaWYgUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19W
RVJTSU9OX01BWF9BTExPV0VEID49IDExMDMwMAotICAgIHJldHVybiBJT1NBcHBsaWNhdGlvbjo6
aXNNb2JpbGVTYWZhcmkoKSB8fCBkeWxkX2dldF9wcm9ncmFtX3Nka192ZXJzaW9uKCkgPj0gRFlM
RF9JT1NfVkVSU0lPTl8xMV8zOwotI2VsaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZF
UlNJT05fTUFYX0FMTE9XRUQgPj0gMTAxMzAwCi0gICAgcmV0dXJuIE1hY0FwcGxpY2F0aW9uOjpp
c1NhZmFyaSgpIHx8IGR5bGRfZ2V0X3Byb2dyYW1fc2RrX3ZlcnNpb24oKSA+IERZTERfTUFDT1NY
X1ZFUlNJT05fMTBfMTM7Ci0jZWxpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIE1hY0FwcGxp
Y2F0aW9uOjppc1NhZmFyaSgpOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0K
LQogI2lmIFBMQVRGT1JNKENPQ09BKQogc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdFlvdVR1YmVG
bGFzaFBsdWdpblJlcGxhY2VtZW50RW5hYmxlZCA9IHRydWU7CiAjZWxzZQpAQCAtMTkyLDcgKzEw
Niw2IEBAIHN0YXRpYyBjb25zdCBib29sIGRlZmF1bHRRdWlja1RpbWVQbHVnaW4KICNlbmRpZgog
CiBzdGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0UmVxdWlyZXNVc2VyR2VzdHVyZVRvTG9hZFZpZGVv
ID0gdHJ1ZTsKLQogc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdEFsbG93c1BpY3R1cmVJblBpY3R1
cmVNZWRpYVBsYXliYWNrID0gdHJ1ZTsKIAogc3RhdGljIGNvbnN0IGRvdWJsZSBkZWZhdWx0SW5j
cmVtZW50YWxSZW5kZXJpbmdTdXBwcmVzc2lvblRpbWVvdXRJblNlY29uZHMgPSA1OwpAQCAtMjA0
LDI0MiArMTE3LDIyIEBAIHN0YXRpYyBjb25zdCBib29sIGRlZmF1bHRVbmlmaWVkVGV4dENoZWMK
IHN0YXRpYyBjb25zdCBib29sIGRlZmF1bHRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQgPSB0cnVl
Owogc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJs
ZWQgPSBmYWxzZTsKIAotLy8gVGhpcyBhbW91bnQgb2YgdGltZSBtdXN0IGhhdmUgZWxhcHNlZCBi
ZWZvcmUgd2Ugd2lsbCBldmVuIGNvbnNpZGVyIHNjaGVkdWxpbmcgYSBsYXlvdXQgd2l0aG91dCBh
IGRlbGF5LgotLy8gRklYTUU6IEZvciBmYXN0ZXIgbWFjaGluZXMgdGhpcyB2YWx1ZSBjYW4gcmVh
bGx5IGJlIGxvd2VyZWQgdG8gMjAwLiAyNTAgaXMgYWRlcXVhdGUsIGJ1dCBhIGxpdHRsZSBoaWdo
Ci0vLyBmb3IgZHVhbCBHNXMuIDopCi1zdGF0aWMgY29uc3QgU2Vjb25kcyBsYXlvdXRTY2hlZHVs
ZVRocmVzaG9sZCA9IDI1MF9tczsKLQotU2V0dGluZ3M6OlNldHRpbmdzKFBhZ2UqIHBhZ2UpCi0g
ICAgOiBtX3BhZ2UobnVsbHB0cikKLSAgICAsIG1fbWVkaWFUeXBlT3ZlcnJpZGUoInNjcmVlbiIp
Ci0gICAgLCBtX2ZvbnRHZW5lcmljRmFtaWxpZXMoc3RkOjptYWtlX3VuaXF1ZTxGb250R2VuZXJp
Y0ZhbWlsaWVzPigpKQotICAgICwgbV9zdG9yYWdlQmxvY2tpbmdQb2xpY3koU2VjdXJpdHlPcmln
aW46OkFsbG93QWxsU3RvcmFnZSkKLSAgICAsIG1fbGF5b3V0SW50ZXJ2YWwobGF5b3V0U2NoZWR1
bGVUaHJlc2hvbGQpCi0gICAgLCBtX21pbmltdW1ET01UaW1lckludGVydmFsKERPTVRpbWVyOjpk
ZWZhdWx0TWluaW11bUludGVydmFsKCkpCi0gICAgU0VUVElOR1NfSU5JVElBTElaRVJfTElTVAot
ICAgICwgbV9pc0phdmFFbmFibGVkKGZhbHNlKQotICAgICwgbV9pc0phdmFFbmFibGVkRm9yTG9j
YWxGaWxlcyh0cnVlKQotICAgICwgbV9sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoZmFsc2UpCi0g
ICAgLCBtX2FyZUltYWdlc0VuYWJsZWQodHJ1ZSkKLSAgICAsIG1fcHJlZmVyTUlNRVR5cGVGb3JJ
bWFnZXMoZmFsc2UpCi0gICAgLCBtX2FyZVBsdWdpbnNFbmFibGVkKGZhbHNlKQotICAgICwgbV9p
c1NjcmlwdEVuYWJsZWQoZmFsc2UpCi0gICAgLCBtX25lZWRzQWRvYmVGcmFtZVJlbG9hZGluZ1F1
aXJrKGZhbHNlKQotICAgICwgbV91c2VzUGFnZUNhY2hlKGZhbHNlKQotICAgICwgbV9mb250UmVu
ZGVyaW5nTW9kZSgwKQotICAgICwgbV9zaG93VGlsZWRTY3JvbGxpbmdJbmRpY2F0b3IoZmFsc2Up
Ci0gICAgLCBtX2JhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKGZhbHNlKQotICAgICwg
bV9kbnNQcmVmZXRjaGluZ0VuYWJsZWQoZmFsc2UpCi0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykK
LSAgICAsIG1fdG91Y2hFdmVudEVtdWxhdGlvbkVuYWJsZWQoZmFsc2UpCi0jZW5kaWYKLSAgICAs
IG1fc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChmYWxzZSkKLSAgICAsIG1fdGlt
ZVdpdGhvdXRNb3VzZU1vdmVtZW50QmVmb3JlSGlkaW5nQ29udHJvbHMoM19zKQotICAgICwgbV9z
ZXRJbWFnZUxvYWRpbmdTZXR0aW5nc1RpbWVyKCp0aGlzLCAmU2V0dGluZ3M6OmltYWdlTG9hZGlu
Z1NldHRpbmdzVGltZXJGaXJlZCkKLSAgICAsIG1faGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGlu
Z0VuYWJsZWQoZmFsc2UpCi0gICAgLCBtX2hpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9u
RW5hYmxlZChmYWxzZSkKLSAgICAsIG1fZm9udEZhbGxiYWNrUHJlZmVyc1BpY3RvZ3JhcGhzKGZh
bHNlKQotICAgICwgbV9mb3JjZVBlbmRpbmdXZWJHTFBvbGljeShmYWxzZSkKLXsKLSAgICAvLyBB
IEZyYW1lIG1heSBub3QgaGF2ZSBiZWVuIGNyZWF0ZWQgeWV0LCBzbyB3ZSBpbml0aWFsaXplIHRo
ZSBBdG9taWNTdHJpbmcKLSAgICAvLyBoYXNoIGJlZm9yZSB0cnlpbmcgdG8gdXNlIGl0LgotICAg
IEF0b21pY1N0cmluZzo6aW5pdCgpOwotICAgIGluaXRpYWxpemVEZWZhdWx0Rm9udEZhbWlsaWVz
KCk7Ci0gICAgbV9wYWdlID0gcGFnZTsgLy8gUGFnZSBpcyBub3QgeWV0IGZ1bGx5IGluaXRpYWxp
emVkIHdoZW4gY29uc3RydWN0aW5nIFNldHRpbmdzLCBzbyBrZWVwaW5nIG1fcGFnZSBudWxsIG92
ZXIgaW5pdGlhbGl6ZURlZmF1bHRGb250RmFtaWxpZXMoKSBjYWxsLgotfQotCi1TZXR0aW5nczo6
flNldHRpbmdzKCkKLXsKLX0KLQogUmVmPFNldHRpbmdzPiBTZXR0aW5nczo6Y3JlYXRlKFBhZ2Uq
IHBhZ2UpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0dGluZ3MocGFnZSkpOwogfQog
Ci1TRVRUSU5HU19TRVRURVJfQk9ESUVTCi0KLSNpZiAhUExBVEZPUk0oQ09DT0EpCi12b2lkIFNl
dHRpbmdzOjppbml0aWFsaXplRGVmYXVsdEZvbnRGYW1pbGllcygpCi17Ci0gICAgLy8gT3RoZXIg
cGxhdGZvcm1zIGNhbiBzZXQgdXAgZm9udHMgZnJvbSBhIGNsaWVudCwgYnV0IG9uIE1hYywgd2Ug
d2FudCBpdCBpbiBXZWJDb3JlIHRvIHNoYXJlIGNvZGUgYmV0d2VlbiBXZWJLaXQxIGFuZCBXZWJL
aXQyLgotfQotI2VuZGlmCi0KLWNvbnN0IEF0b21pY1N0cmluZyYgU2V0dGluZ3M6OnN0YW5kYXJk
Rm9udEZhbWlseShVU2NyaXB0Q29kZSBzY3JpcHQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZm9u
dEdlbmVyaWNGYW1pbGllcy0+c3RhbmRhcmRGb250RmFtaWx5KHNjcmlwdCk7Ci19Ci0KLXZvaWQg
U2V0dGluZ3M6OnNldFN0YW5kYXJkRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWls
eSwgVVNjcmlwdENvZGUgc2NyaXB0KQotewotICAgIGJvb2wgY2hhbmdlcyA9IG1fZm9udEdlbmVy
aWNGYW1pbGllcy0+c2V0U3RhbmRhcmRGb250RmFtaWx5KGZhbWlseSwgc2NyaXB0KTsKLSAgICBp
ZiAoY2hhbmdlcykKLSAgICAgICAgaW52YWxpZGF0ZUFmdGVyR2VuZXJpY0ZhbWlseUNoYW5nZSht
X3BhZ2UpOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIFNldHRpbmdzOjpmaXhlZEZvbnRGYW1p
bHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAotewotICAgIHJldHVybiBtX2ZvbnRHZW5lcmlj
RmFtaWxpZXMtPmZpeGVkRm9udEZhbWlseShzY3JpcHQpOwotfQotCi12b2lkIFNldHRpbmdzOjpz
ZXRGaXhlZEZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDb2Rl
IHNjcmlwdCkKLXsKLSAgICBib29sIGNoYW5nZXMgPSBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNl
dEZpeGVkRm9udEZhbWlseShmYW1pbHksIHNjcmlwdCk7Ci0gICAgaWYgKGNoYW5nZXMpCi0gICAg
ICAgIGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKLX0KLQotY29u
c3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nczo6c2VyaWZGb250RmFtaWx5KFVTY3JpcHRDb2RlIHNj
cmlwdCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zZXJpZkZv
bnRGYW1pbHkoc2NyaXB0KTsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0U2VyaWZGb250RmFtaWx5
KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCi17Ci0gICAg
Ym9vbCBjaGFuZ2VzID0gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zZXRTZXJpZkZvbnRGYW1pbHko
ZmFtaWx5LCBzY3JpcHQpOwotICAgIGlmIChjaGFuZ2VzKQotICAgICAgICBpbnZhbGlkYXRlQWZ0
ZXJHZW5lcmljRmFtaWx5Q2hhbmdlKG1fcGFnZSk7Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYg
U2V0dGluZ3M6OnNhbnNTZXJpZkZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAot
ewotICAgIHJldHVybiBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNhbnNTZXJpZkZvbnRGYW1pbHko
c2NyaXB0KTsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0U2Fuc1NlcmlmRm9udEZhbWlseShjb25z
dCBBdG9taWNTdHJpbmcmIGZhbWlseSwgVVNjcmlwdENvZGUgc2NyaXB0KQotewotICAgIGJvb2wg
Y2hhbmdlcyA9IG1fZm9udEdlbmVyaWNGYW1pbGllcy0+c2V0U2Fuc1NlcmlmRm9udEZhbWlseShm
YW1pbHksIHNjcmlwdCk7Ci0gICAgaWYgKGNoYW5nZXMpCi0gICAgICAgIGludmFsaWRhdGVBZnRl
ckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBT
ZXR0aW5nczo6Y3Vyc2l2ZUZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAotewot
ICAgIHJldHVybiBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPmN1cnNpdmVGb250RmFtaWx5KHNjcmlw
dCk7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldEN1cnNpdmVGb250RmFtaWx5KGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCi17Ci0gICAgYm9vbCBjaGFuZ2Vz
ID0gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zZXRDdXJzaXZlRm9udEZhbWlseShmYW1pbHksIHNj
cmlwdCk7Ci0gICAgaWYgKGNoYW5nZXMpCi0gICAgICAgIGludmFsaWRhdGVBZnRlckdlbmVyaWNG
YW1pbHlDaGFuZ2UobV9wYWdlKTsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nczo6
ZmFudGFzeUZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAotewotICAgIHJldHVy
biBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPmZhbnRhc3lGb250RmFtaWx5KHNjcmlwdCk7Ci19Ci0K
LXZvaWQgU2V0dGluZ3M6OnNldEZhbnRhc3lGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCi17Ci0gICAgYm9vbCBjaGFuZ2VzID0gbV9mb250
R2VuZXJpY0ZhbWlsaWVzLT5zZXRGYW50YXN5Rm9udEZhbWlseShmYW1pbHksIHNjcmlwdCk7Ci0g
ICAgaWYgKGNoYW5nZXMpCi0gICAgICAgIGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFu
Z2UobV9wYWdlKTsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nczo6cGljdG9ncmFw
aEZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAotewotICAgIHJldHVybiBtX2Zv
bnRHZW5lcmljRmFtaWxpZXMtPnBpY3RvZ3JhcGhGb250RmFtaWx5KHNjcmlwdCk7Ci19Ci0KLXZv
aWQgU2V0dGluZ3M6OnNldFBpY3RvZ3JhcGhGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCi17Ci0gICAgYm9vbCBjaGFuZ2VzID0gbV9mb250
R2VuZXJpY0ZhbWlsaWVzLT5zZXRQaWN0b2dyYXBoRm9udEZhbWlseShmYW1pbHksIHNjcmlwdCk7
Ci0gICAgaWYgKGNoYW5nZXMpCi0gICAgICAgIGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlD
aGFuZ2UobV9wYWdlKTsKLX0KLQotZmxvYXQgU2V0dGluZ3M6OmRlZmF1bHRNaW5pbXVtWm9vbUZv
bnRTaXplKCkKLXsKLSAgICByZXR1cm4gMTU7Ci19Ci0KLSNpZiAhUExBVEZPUk0oSU9TKQotYm9v
bCBTZXR0aW5nczo6ZGVmYXVsdFRleHRBdXRvc2l6aW5nRW5hYmxlZCgpCi17Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotI2VuZGlmCi0KLXZvaWQgU2V0dGluZ3M6OnNldE1lZGlhVHlwZU92ZXJyaWRl
KGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlT3ZlcnJpZGUpCi17Ci0gICAgaWYgKG1fbWVkaWFUeXBl
T3ZlcnJpZGUgPT0gbWVkaWFUeXBlT3ZlcnJpZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
bWVkaWFUeXBlT3ZlcnJpZGUgPSBtZWRpYVR5cGVPdmVycmlkZTsKLQotICAgIGlmICghbV9wYWdl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX3BhZ2UtPm1haW5G
cmFtZSgpLnZpZXcoKTsKLSAgICBBU1NFUlQodmlldyk7Ci0KLSAgICB2aWV3LT5zZXRNZWRpYVR5
cGUobWVkaWFUeXBlT3ZlcnJpZGUpOwotICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUlu
QWxsRnJhbWVzKCk7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldExvYWRzSW1hZ2VzQXV0b21hdGlj
YWxseShib29sIGxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSkKLXsKLSAgICBtX2xvYWRzSW1hZ2Vz
QXV0b21hdGljYWxseSA9IGxvYWRzSW1hZ2VzQXV0b21hdGljYWxseTsKLSAgICAKLSAgICAvLyBD
aGFuZ2luZyB0aGlzIHNldHRpbmcgdG8gdHJ1ZSBtaWdodCBpbW1lZGlhdGVseSBzdGFydCBuZXcg
bG9hZHMgZm9yIGltYWdlcyB0aGF0IGhhZCBwcmV2aW91c2x5IGhhZCBsb2FkaW5nIGRpc2FibGVk
LgotICAgIC8vIElmIHRoaXMgaGFwcGVucyB3aGlsZSBhIFdlYlZpZXcgaXMgYmVpbmcgZGVhbGxv
YydlZCwgYW5kIHdlIGRvbid0IGtub3cgdGhlIFdlYlZpZXcgaXMgYmVpbmcgZGVhbGxvYydlZCwg
dGhlc2UgbmV3IGxvYWRzCi0gICAgLy8gY2FuIGNhdXNlIGNyYXNoZXMgZG93bnN0cmVhbSB3aGVu
IHRoZSBXZWJWaWV3IG1lbW9yeSBoYXMgYWN0dWFsbHkgYmVlbiBmcmVlJ2QuCi0gICAgLy8gT25l
IGV4YW1wbGUgd2hlcmUgdGhpcyBjYW4gaGFwcGVuIGlzIGluIE1hYyBhcHBzIHRoYXQgc3ViY2xh
c3MgV2ViVmlldyB0aGVuIGRvIHdvcmsgaW4gdGhlaXIgb3ZlcnJpZGRlbiBkZWFsbG9jIG1ldGhv
ZHMuCi0gICAgLy8gU3RhcnRpbmcgdGhlc2UgbG9hZHMgc3luY2hyb25vdXNseSBpcyBub3QgaW1w
b3J0YW50LiAgQnkgcHV0dGluZyBpdCBvbiBhIDAtZGVsYXksIHByb3Blcmx5IGNsb3NpbmcgdGhl
IFBhZ2UgY2FuY2VscyB0aGVtCi0gICAgLy8gYmVmb3JlIHRoZXkgaGF2ZSBhIGNoYW5jZSB0byBy
ZWFsbHkgc3RhcnQuCi0gICAgLy8gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvNjA1NzIgZm9yIG1v
cmUgZGlzY3Vzc2lvbi4KLSAgICBtX3NldEltYWdlTG9hZGluZ1NldHRpbmdzVGltZXIuc3RhcnRP
bmVTaG90KDBfcyk7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OmltYWdlTG9hZGluZ1NldHRpbmdzVGlt
ZXJGaXJlZCgpCi17Ci0gICAgc2V0SW1hZ2VMb2FkaW5nU2V0dGluZ3MobV9wYWdlKTsKLX0KLQot
dm9pZCBTZXR0aW5nczo6c2V0U2NyaXB0RW5hYmxlZChib29sIGlzU2NyaXB0RW5hYmxlZCkKLXsK
LSAgICBpZiAobV9pc1NjcmlwdEVuYWJsZWQgPT0gaXNTY3JpcHRFbmFibGVkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2lzU2NyaXB0RW5hYmxlZCA9IGlzU2NyaXB0RW5hYmxlZDsKLQotICAg
IGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBQTEFURk9STShJT1MpCi0gICAg
bV9wYWdlLT5zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKLSNlbmRpZgotfQotCi12
b2lkIFNldHRpbmdzOjpzZXRKYXZhRW5hYmxlZChib29sIGlzSmF2YUVuYWJsZWQpCi17Ci0gICAg
bV9pc0phdmFFbmFibGVkID0gaXNKYXZhRW5hYmxlZDsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0
SmF2YUVuYWJsZWRGb3JMb2NhbEZpbGVzKGJvb2wgaXNKYXZhRW5hYmxlZEZvckxvY2FsRmlsZXMp
Ci17Ci0gICAgbV9pc0phdmFFbmFibGVkRm9yTG9jYWxGaWxlcyA9IGlzSmF2YUVuYWJsZWRGb3JM
b2NhbEZpbGVzOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRJbWFnZXNFbmFibGVkKGJvb2wgYXJl
SW1hZ2VzRW5hYmxlZCkKK1NldHRpbmdzOjpTZXR0aW5ncyhQYWdlKiBwYWdlKQorICAgIDogU2V0
dGluZ3NCYXNlKHBhZ2UpCisgICAgU0VUVElOR1NfSU5JVElBTElaRVJfTElTVAogewotICAgIG1f
YXJlSW1hZ2VzRW5hYmxlZCA9IGFyZUltYWdlc0VuYWJsZWQ7Ci0KLSAgICAvLyBTZWUgY29tbWVu
dCBpbiBzZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkuCi0gICAgbV9zZXRJbWFnZUxvYWRpbmdT
ZXR0aW5nc1RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRQ
cmVmZXJNSU1FVHlwZUZvckltYWdlcyhib29sIHByZWZlck1JTUVUeXBlRm9ySW1hZ2VzKQorU2V0
dGluZ3M6On5TZXR0aW5ncygpCiB7Ci0gICAgbV9wcmVmZXJNSU1FVHlwZUZvckltYWdlcyA9IHBy
ZWZlck1JTUVUeXBlRm9ySW1hZ2VzOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRGb3JjZVBlbmRp
bmdXZWJHTFBvbGljeShib29sIGZvcmNlZCkKLXsKLSAgICBtX2ZvcmNlUGVuZGluZ1dlYkdMUG9s
aWN5ID0gZm9yY2VkOwotfQorU0VUVElOR1NfU0VUVEVSX0JPRElFUwogCiBGcmFtZUZsYXR0ZW5p
bmcgU2V0dGluZ3M6OmVmZmVjdGl2ZUZyYW1lRmxhdHRlbmluZygpCiB7CkBAIC00NTMsMzgxICsx
NDYsNCBAQCBGcmFtZUZsYXR0ZW5pbmcgU2V0dGluZ3M6OmVmZmVjdGl2ZUZyYW1lCiAgICAgcmV0
dXJuIGZyYW1lRmxhdHRlbmluZygpOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRQbHVnaW5zRW5h
YmxlZChib29sIGFyZVBsdWdpbnNFbmFibGVkKQotewotICAgIGlmIChtX2FyZVBsdWdpbnNFbmFi
bGVkID09IGFyZVBsdWdpbnNFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2FyZVBs
dWdpbnNFbmFibGVkID0gYXJlUGx1Z2luc0VuYWJsZWQ7Ci0gICAgUGFnZTo6cmVmcmVzaFBsdWdp
bnMoZmFsc2UpOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9u
KGNvbnN0IFVSTCYgdXNlclN0eWxlU2hlZXRMb2NhdGlvbikKLXsKLSAgICBpZiAobV91c2VyU3R5
bGVTaGVldExvY2F0aW9uID09IHVzZXJTdHlsZVNoZWV0TG9jYXRpb24pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IHVzZXJTdHlsZVNoZWV0TG9jYXRp
b247Ci0KLSAgICBpZiAobV9wYWdlKQotICAgICAgICBtX3BhZ2UtPnVzZXJTdHlsZVNoZWV0TG9j
YXRpb25DaGFuZ2VkKCk7Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIHF1aXJrIGlzIG5lZWRlZCBiZWNh
dXNlIG9mIFJhZGFyIDQ2NzQ1MzcgYW5kIDUyMTEyNzEuIFdlIG5lZWQgdG8gcGhhc2UgaXQgb3V0
IG9uY2UgQWRvYmUKLS8vIGNhbiBmaXggdGhlIGJ1ZyBmcm9tIHRoZWlyIGVuZC4KLXZvaWQgU2V0
dGluZ3M6OnNldE5lZWRzQWRvYmVGcmFtZVJlbG9hZGluZ1F1aXJrKGJvb2wgc2hvdWxkTm90UmVs
b2FkSUZyYW1lc0ZvclVuY2hhbmdlZFNSQykKLXsKLSAgICBtX25lZWRzQWRvYmVGcmFtZVJlbG9h
ZGluZ1F1aXJrID0gc2hvdWxkTm90UmVsb2FkSUZyYW1lc0ZvclVuY2hhbmdlZFNSQzsKLX0KLQot
dm9pZCBTZXR0aW5nczo6c2V0TWluaW11bURPTVRpbWVySW50ZXJ2YWwoU2Vjb25kcyBpbnRlcnZh
bCkKLXsKLSAgICBhdXRvIG9sZFRpbWVySW50ZXJ2YWwgPSBzdGQ6OmV4Y2hhbmdlKG1fbWluaW11
bURPTVRpbWVySW50ZXJ2YWwsIGludGVydmFsKTsKLQotICAgIGlmICghbV9wYWdlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX3BhZ2UtPm1haW5GcmFtZSgp
OyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAg
IGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5h
ZGp1c3RNaW5pbXVtRE9NVGltZXJJbnRlcnZhbChvbGRUaW1lckludGVydmFsKTsKLSAgICB9Ci19
Ci0KLXZvaWQgU2V0dGluZ3M6OnNldExheW91dEludGVydmFsKFNlY29uZHMgbGF5b3V0SW50ZXJ2
YWwpCi17Ci0gICAgLy8gRklYTUU6IEl0IHNlZW1zIHdlaXJkIHRoYXQgdGhpcyBmdW5jdGlvbiBt
YXkgZGlzcmVnYXJkIHRoZSBzcGVjaWZpZWQgbGF5b3V0IGludGVydmFsLgotICAgIC8vIFdlIHNo
b3VsZCBlaXRoZXIgZXhwb3NlIGxheW91dFNjaGVkdWxlVGhyZXNob2xkIG9yIGJldHRlciBjb21t
dW5pY2F0ZSB0aGlzIGludmFyaWFudC4KLSAgICBtX2xheW91dEludGVydmFsID0gc3RkOjptYXgo
bGF5b3V0SW50ZXJ2YWwsIGxheW91dFNjaGVkdWxlVGhyZXNob2xkKTsKLX0KLQotdm9pZCBTZXR0
aW5nczo6c2V0VXNlc1BhZ2VDYWNoZShib29sIHVzZXNQYWdlQ2FjaGUpCi17Ci0gICAgaWYgKG1f
dXNlc1BhZ2VDYWNoZSA9PSB1c2VzUGFnZUNhY2hlKQotICAgICAgICByZXR1cm47Ci0gICAgICAg
IAotICAgIG1fdXNlc1BhZ2VDYWNoZSA9IHVzZXNQYWdlQ2FjaGU7Ci0KLSAgICBpZiAoIW1fcGFn
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3VzZXNQYWdlQ2FjaGUpCi0gICAgICAg
IFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkucHJ1bmVUb1NpemVOb3coMCwgUHJ1bmluZ1JlYXNvbjo6
Tm9uZSk7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldEZvbnRSZW5kZXJpbmdNb2RlKEZvbnRSZW5k
ZXJpbmdNb2RlIG1vZGUpCi17Ci0gICAgaWYgKGZvbnRSZW5kZXJpbmdNb2RlKCkgPT0gbW9kZSkK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fZm9udFJlbmRlcmluZ01vZGUgPSBzdGF0aWNfY2FzdDxp
bnQ+KG1vZGUpOwotICAgIGlmIChtX3BhZ2UpCi0gICAgICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNh
bGNTdHlsZUluQWxsRnJhbWVzKCk7Ci19Ci0KLUZvbnRSZW5kZXJpbmdNb2RlIFNldHRpbmdzOjpm
b250UmVuZGVyaW5nTW9kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRS
ZW5kZXJpbmdNb2RlPihtX2ZvbnRSZW5kZXJpbmdNb2RlKTsKLX0KLQotdm9pZCBTZXR0aW5nczo6
c2V0RE5TUHJlZmV0Y2hpbmdFbmFibGVkKGJvb2wgZG5zUHJlZmV0Y2hpbmdFbmFibGVkKQotewot
ICAgIGlmIChtX2Ruc1ByZWZldGNoaW5nRW5hYmxlZCA9PSBkbnNQcmVmZXRjaGluZ0VuYWJsZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fZG5zUHJlZmV0Y2hpbmdFbmFibGVkID0gZG5zUHJl
ZmV0Y2hpbmdFbmFibGVkOwotICAgIGlmIChtX3BhZ2UpCi0gICAgICAgIG1fcGFnZS0+ZG5zUHJl
ZmV0Y2hpbmdTdGF0ZUNoYW5nZWQoKTsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0U2hvd1RpbGVk
U2Nyb2xsaW5nSW5kaWNhdG9yKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobV9zaG93VGlsZWRT
Y3JvbGxpbmdJbmRpY2F0b3IgPT0gZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAK
LSAgICBtX3Nob3dUaWxlZFNjcm9sbGluZ0luZGljYXRvciA9IGVuYWJsZWQ7Ci19Ci0KLSNpZiBF
TkFCTEUoUkVTT1VSQ0VfVVNBR0UpCi12b2lkIFNldHRpbmdzOjpzZXRSZXNvdXJjZVVzYWdlT3Zl
cmxheVZpc2libGUoYm9vbCB2aXNpYmxlKQotewotICAgIGlmIChtX3Jlc291cmNlVXNhZ2VPdmVy
bGF5VmlzaWJsZSA9PSB2aXNpYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Jlc291cmNl
VXNhZ2VPdmVybGF5VmlzaWJsZSA9IHZpc2libGU7Ci0gICAgaWYgKG1fcGFnZSkKLSAgICAgICAg
bV9wYWdlLT5zZXRSZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGUodmlzaWJsZSk7Ci19Ci0jZW5k
aWYKLQotI2lmIFBMQVRGT1JNKFdJTikKLXZvaWQgU2V0dGluZ3M6OnNldFNob3VsZFVzZUhpZ2hS
ZXNvbHV0aW9uVGltZXJzKGJvb2wgc2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnMpCi17Ci0g
ICAgZ1Nob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzID0gc2hvdWxkVXNlSGlnaFJlc29sdXRp
b25UaW1lcnM7Ci19Ci0jZW5kaWYKLQotdm9pZCBTZXR0aW5nczo6c2V0U3RvcmFnZUJsb2NraW5n
UG9saWN5KFNlY3VyaXR5T3JpZ2luOjpTdG9yYWdlQmxvY2tpbmdQb2xpY3kgZW5hYmxlZCkKLXsK
LSAgICBpZiAobV9zdG9yYWdlQmxvY2tpbmdQb2xpY3kgPT0gZW5hYmxlZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9zdG9yYWdlQmxvY2tpbmdQb2xpY3kgPSBlbmFibGVkOwotICAgIGlmICht
X3BhZ2UpCi0gICAgICAgIG1fcGFnZS0+c3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKCk7Ci19
Ci0KLXZvaWQgU2V0dGluZ3M6OnNldEJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKGJv
b2wgc2hvdWxkRXh0ZW5kKQotewotICAgIGlmIChtX2JhY2tncm91bmRTaG91bGRFeHRlbmRCZXlv
bmRQYWdlID09IHNob3VsZEV4dGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9iYWNrZ3Jv
dW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSA9IHNob3VsZEV4dGVuZDsKLQotICAgIGlmIChtX3Bh
Z2UpCi0gICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT51cGRhdGVFeHRlbmRCYWNr
Z3JvdW5kSWZOZWNlc3NhcnkoKTsKLX0KLQotI2lmIFVTRShBVkZPVU5EQVRJT04pCi12b2lkIFNl
dHRpbmdzOjpzZXRBVkZvdW5kYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAo
Z0FWRm91bmRhdGlvbkVuYWJsZWQgPT0gZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Z0FWRm91bmRhdGlvbkVuYWJsZWQgPSBlbmFibGVkOwotICAgIEhUTUxNZWRpYUVsZW1lbnQ6OnJl
c2V0TWVkaWFFbmdpbmVzKCk7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldEFWRm91bmRhdGlvbk5T
VVJMU2Vzc2lvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAgIGlmIChnQVZGb3VuZGF0aW9u
TlNVUkxTZXNzaW9uRW5hYmxlZCA9PSBlbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBn
QVZGb3VuZGF0aW9uTlNVUkxTZXNzaW9uRW5hYmxlZCA9IGVuYWJsZWQ7Ci19Ci0jZW5kaWYKLQot
I2lmIFBMQVRGT1JNKENPQ09BKQotdm9pZCBTZXR0aW5nczo6c2V0UVRLaXRFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKLXsKLSAgICBpZiAoZ1FUS2l0RW5hYmxlZCA9PSBlbmFibGVkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBnUVRLaXRFbmFibGVkID0gZW5hYmxlZDsKLSAgICBIVE1MTWVkaWFFbGVt
ZW50OjpyZXNldE1lZGlhRW5naW5lcygpOwotfQotI2VuZGlmCi0KLSNpZiBVU0UoR1NUUkVBTUVS
KQotdm9pZCBTZXR0aW5nczo6c2V0R1N0cmVhbWVyRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0g
ICAgaWYgKGdHU3RyZWFtZXJFbmFibGVkID09IGVuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGdHU3RyZWFtZXJFbmFibGVkID0gZW5hYmxlZDsKLSAgICBIVE1MTWVkaWFFbGVtZW50Ojpy
ZXNldE1lZGlhRW5naW5lcygpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KQotYm9vbCBTZXR0aW5nczo6bW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZCgpCi17Ci0gICAgcmV0
dXJuIGdNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRN
b2NrQ2FwdHVyZURldmljZXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBnTW9ja0NhcHR1
cmVEZXZpY2VzRW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VD
ZW50ZXI6OnNldE1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZChlbmFibGVkKTsK
LX0KLQotYm9vbCBTZXR0aW5nczo6bWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9u
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ01lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVj
dGlvbjsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVD
b25uZWN0aW9uKGJvb2wgbWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKQotewot
ICAgIGdNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24gPSBtZWRpYUNhcHR1cmVS
ZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb247Ci19Ci0jZW5kaWYKLQotdm9pZCBTZXR0aW5nczo6c2V0
U2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAg
bV9zY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkID0gZW5hYmxlZDsKLQotICAgIGlm
IChtX3BhZ2UgJiYgbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCkpCi0gICAgICAgIG1fcGFnZS0+
bWFpbkZyYW1lKCkudmlldygpLT5zZXRTY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVk
KGVuYWJsZWQpOwotfQotCi0vLyBJdCdzIHZlcnkgaW1wb3J0YW50IHRoYXQgdGhpcyBzZXR0aW5n
IGRvZXNuJ3QgY2hhbmdlIGluIHRoZSBtaWRkbGUgb2YgYSBkb2N1bWVudCdzIGxpZmV0aW1lLgot
Ly8gVGhlIE1hYyBwb3J0IHVzZXMgdGhpcyBmbGFnIHdoZW4gcmVnaXN0ZXJpbmcgYW5kIGRlcmVn
aXN0ZXJpbmcgcGxhdGZvcm0tZGVwZW5kZW50IHNjcm9sbGJhcgotLy8gb2JqZWN0cy4gVGhlcmVm
b3JlLCBpZiB0aGlzIGNoYW5nZXMgYXQgYW4gdW5leHBlY3RlZCB0aW1lLCBkZXJlZ2lzdHJhdGlv
biBtYXkgbm90IGhhcHBlbgotLy8gY29ycmVjdGx5LCB3aGljaCBtYXkgY2F1c2UgdGhlIHBsYXRm
b3JtIHRvIGZvbGxvdyBkYW5nbGluZyBwb2ludGVycy4KLXZvaWQgU2V0dGluZ3M6OnNldE1vY2tT
Y3JvbGxiYXJzRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgZ01vY2tTY3JvbGxiYXJzRW5hYmxl
ZCA9IGZsYWc7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVwZGF0ZSBzY3JvbGwgYmFycyBp
biBleGlzdGluZyBwYWdlcy4KLX0KLQotYm9vbCBTZXR0aW5nczo6bW9ja1Njcm9sbGJhcnNFbmFi
bGVkKCkKLXsKLSAgICByZXR1cm4gZ01vY2tTY3JvbGxiYXJzRW5hYmxlZDsKLX0KLQotdm9pZCBT
ZXR0aW5nczo6c2V0VXNlc092ZXJsYXlTY3JvbGxiYXJzKGJvb2wgZmxhZykKLXsKLSAgICBnVXNl
c092ZXJsYXlTY3JvbGxiYXJzID0gZmxhZzsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXBk
YXRlIHNjcm9sbCBiYXJzIGluIGV4aXN0aW5nIHBhZ2VzLgotfQotCi1ib29sIFNldHRpbmdzOjp1
c2VzT3ZlcmxheVNjcm9sbGJhcnMoKQotewotICAgIHJldHVybiBnVXNlc092ZXJsYXlTY3JvbGxi
YXJzOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRVc2VzTW9ja1Njcm9sbEFuaW1hdG9yKGJvb2wg
ZmxhZykKLXsKLSAgICBnTW9ja1Njcm9sbEFuaW1hdG9yRW5hYmxlZCA9IGZsYWc7Ci19Ci0KLWJv
b2wgU2V0dGluZ3M6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKQotewotICAgIHJldHVybiBnTW9j
a1Njcm9sbEFuaW1hdG9yRW5hYmxlZDsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0U2hvdWxkUmVz
cGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzKGJvb2wgZmxhZykKLXsKLSAgICBnU2hv
dWxkUmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzID0gZmxhZzsKLX0KLQotYm9v
bCBTZXR0aW5nczo6c2hvdWxkUmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzKCkK
LXsKLSAgICByZXR1cm4gZ1Nob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0cmlidXRlU2V0dGVy
czsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0Vu
YWJsZWQoYm9vbCBmbGFnKQotewotICAgIGlmIChtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxp
bmdFbmFibGVkID09IGZsYWcpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2hpZGRlblBhZ2VET01U
aW1lclRocm90dGxpbmdFbmFibGVkID0gZmxhZzsKLSAgICBpZiAobV9wYWdlKQotICAgICAgICBt
X3BhZ2UtPmhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdTdGF0ZUNoYW5nZWQoKTsKLX0KLQot
dm9pZCBTZXR0aW5nczo6c2V0SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0F1dG9JbmNyZWFz
ZXMoYm9vbCBmbGFnKQotewotICAgIGlmIChtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdB
dXRvSW5jcmVhc2VzID09IGZsYWcpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2hpZGRlblBhZ2VE
T01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2VzID0gZmxhZzsKLSAgICBpZiAobV9wYWdlKQot
ICAgICAgICBtX3BhZ2UtPmhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdTdGF0ZUNoYW5nZWQo
KTsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0SGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNp
b25FbmFibGVkKGJvb2wgZmxhZykKLXsKLSAgICBpZiAobV9oaWRkZW5QYWdlQ1NTQW5pbWF0aW9u
U3VzcGVuc2lvbkVuYWJsZWQgPT0gZmxhZykKLSAgICAgICAgcmV0dXJuOwotICAgIG1faGlkZGVu
UGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkID0gZmxhZzsKLSAgICBpZiAobV9wYWdl
KQotICAgICAgICBtX3BhZ2UtPmhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uU3RhdGVD
aGFuZ2VkKCk7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldEZvbnRGYWxsYmFja1ByZWZlcnNQaWN0
b2dyYXBocyhib29sIHByZWZlclBpY3RvZ3JhcGhzKQotewotICAgIGlmIChtX2ZvbnRGYWxsYmFj
a1ByZWZlcnNQaWN0b2dyYXBocyA9PSBwcmVmZXJQaWN0b2dyYXBocykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9mb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMgPSBwcmVmZXJQaWN0b2dy
YXBoczsKLSAgICBpZiAobV9wYWdlKQotICAgICAgICBtX3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5
bGVJbkFsbEZyYW1lcygpOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRMb3dQb3dlclZpZGVvQXVk
aW9CdWZmZXJTaXplRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgZ0xvd1Bvd2VyVmlkZW9BdWRp
b0J1ZmZlclNpemVFbmFibGVkID0gZmxhZzsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBmbGFnKQotewotICAgIGdSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZEVuYWJsZWQgPSBmbGFnOwotfQotCi0jaWYgUExBVEZPUk0oSU9TKQot
dm9pZCBTZXR0aW5nczo6c2V0QXVkaW9TZXNzaW9uQ2F0ZWdvcnlPdmVycmlkZSh1bnNpZ25lZCBz
ZXNzaW9uQ2F0ZWdvcnkpCi17Ci0gICAgQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuc2V0
Q2F0ZWdvcnlPdmVycmlkZShzdGF0aWNfY2FzdDxBdWRpb1Nlc3Npb246OkNhdGVnb3J5VHlwZT4o
c2Vzc2lvbkNhdGVnb3J5KSk7Ci19Ci0KLXVuc2lnbmVkIFNldHRpbmdzOjphdWRpb1Nlc3Npb25D
YXRlZ29yeU92ZXJyaWRlKCkKLXsKLSAgICByZXR1cm4gQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNz
aW9uKCkuY2F0ZWdvcnlPdmVycmlkZSgpOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXROZXR3b3Jr
RGF0YVVzYWdlVHJhY2tpbmdFbmFibGVkKGJvb2wgdHJhY2tpbmdFbmFibGVkKQotewotICAgIGdO
ZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVkID0gdHJhY2tpbmdFbmFibGVkOwotfQotCi1i
b29sIFNldHRpbmdzOjpuZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVkKCkKLXsKLSAgICBy
ZXR1cm4gZ05ldHdvcmtEYXRhVXNhZ2VUcmFja2luZ0VuYWJsZWQ7Ci19Ci0KLXN0YXRpYyBTdHJp
bmcmIHNoYXJlZE5ldHdvcmtJbnRlcmZhY2VOYW1lR2xvYmFsKCkKLXsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8U3RyaW5nPiBuZXR3b3JrSW50ZXJmYWNlTmFtZTsKLSAgICByZXR1cm4gbmV0
d29ya0ludGVyZmFjZU5hbWU7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldE5ldHdvcmtJbnRlcmZh
Y2VOYW1lKGNvbnN0IFN0cmluZyYgbmV0d29ya0ludGVyZmFjZU5hbWUpCi17Ci0gICAgc2hhcmVk
TmV0d29ya0ludGVyZmFjZU5hbWVHbG9iYWwoKSA9IG5ldHdvcmtJbnRlcmZhY2VOYW1lOwotfQot
Ci1jb25zdCBTdHJpbmcmIFNldHRpbmdzOjpuZXR3b3JrSW50ZXJmYWNlTmFtZSgpCi17Ci0gICAg
cmV0dXJuIHNoYXJlZE5ldHdvcmtJbnRlcmZhY2VOYW1lR2xvYmFsKCk7Ci19Ci0jZW5kaWYKLQot
Ym9vbCBTZXR0aW5nczo6Z2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3coKQotewot
I2lmIFBMQVRGT1JNKE1BQykKLSAgICByZXR1cm4gIU1hY0FwcGxpY2F0aW9uOjppc0lCb29rcygp
OwotI2VsaWYgUExBVEZPUk0oSU9TKQotICAgIHJldHVybiAhSU9TQXBwbGljYXRpb246OmlzSUJv
b2tzKCk7Ci0jZWxzZQotICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi19Ci0KLXZvaWQgU2V0dGlu
Z3M6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlKGJvb2wgYWxsb3dBbnlTU0xDZXJ0aWZpY2F0
ZSkKLXsKLSAgICBnQWxsb3dzQW55U1NMQ2VydGlmaWNhdGUgPSBhbGxvd0FueVNTTENlcnRpZmlj
YXRlOwotfQotCi1ib29sIFNldHRpbmdzOjphbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSgpCi17Ci0g
ICAgcmV0dXJuIGdBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZTsKLX0KLQotI2lmICFQTEFURk9STShD
T0NPQSkKLWNvbnN0IFN0cmluZyYgU2V0dGluZ3M6OmRlZmF1bHRNZWRpYUNvbnRlbnRUeXBlc1Jl
cXVpcmluZ0hhcmR3YXJlU3VwcG9ydCgpCi17Ci0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci19
Ci0jZW5kaWYKLQotdm9pZCBTZXR0aW5nczo6c2V0TWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdI
YXJkd2FyZVN1cHBvcnQoY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZXMpCi17Ci0gICAgbV9tZWRp
YUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydC5zaHJpbmsoMCk7Ci0gICAgZm9y
IChhdXRvIHR5cGUgOiBTdHJpbmdWaWV3KGNvbnRlbnRUeXBlcykuc3BsaXQoJzonKSkKLSAgICAg
ICAgbV9tZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydC5hcHBlbmQoQ29u
dGVudFR5cGUgeyB0eXBlLnRvU3RyaW5nKCkgfSk7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldE1l
ZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KGNvbnN0IFZlY3RvcjxDb250
ZW50VHlwZT4mIGNvbnRlbnRUeXBlcykKLXsKLSAgICBtX21lZGlhQ29udGVudFR5cGVzUmVxdWly
aW5nSGFyZHdhcmVTdXBwb3J0ID0gY29udGVudFR5cGVzOwotfQotCi0KIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgJKHJldmlzaW9uIDIyMzMyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNzcg
KzI2LDExIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ2xpcGJvYXJkQWNjZXNzUG9s
aWN5LmgiCi0jaW5jbHVkZSAiQ29udGVudFR5cGUuaCIKLSNpbmNsdWRlICJFZGl0aW5nQmVoYXZp
b3JUeXBlcy5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgotI2luY2x1ZGUgIlNldHRpbmdzTWFjcm9zLmgiCi0jaW5jbHVkZSAiVGV4dEZsYWdzLmgi
Ci0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRlICJXcml0aW5n
TW9kZS5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvUnVudGltZUZsYWdzLmg+Ci0jaW5jbHVkZSA8dW5p
Y29kZS91c2NyaXB0Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KLQotI2lmIEVOQUJMRShEQVRBX0RFVEVD
VElPTikKLSNpbmNsdWRlICJEYXRhRGV0ZWN0aW9uLmgiCi0jZW5kaWYKKyNpbmNsdWRlICJTZXR0
aW5nc0Jhc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGb250R2VuZXJpY0Zh
bWlsaWVzOwotY2xhc3MgUGFnZTsKLQotZW51bSBFZGl0YWJsZUxpbmtCZWhhdmlvciB7Ci0gICAg
RWRpdGFibGVMaW5rRGVmYXVsdEJlaGF2aW9yLAotICAgIEVkaXRhYmxlTGlua0Fsd2F5c0xpdmUs
Ci0gICAgRWRpdGFibGVMaW5rT25seUxpdmVXaXRoU2hpZnRLZXksCi0gICAgRWRpdGFibGVMaW5r
TGl2ZVdoZW5Ob3RGb2N1c2VkLAotICAgIEVkaXRhYmxlTGlua05ldmVyTGl2ZQotfTsKLQotZW51
bSBUZXh0RGlyZWN0aW9uU3VibWVudUluY2x1c2lvbkJlaGF2aW9yIHsKLSAgICBUZXh0RGlyZWN0
aW9uU3VibWVudU5ldmVySW5jbHVkZWQsCi0gICAgVGV4dERpcmVjdGlvblN1Ym1lbnVBdXRvbWF0
aWNhbGx5SW5jbHVkZWQsCi0gICAgVGV4dERpcmVjdGlvblN1Ym1lbnVBbHdheXNJbmNsdWRlZAot
fTsKLQotZW51bSBEZWJ1Z092ZXJsYXlSZWdpb25GbGFncyB7Ci0gICAgTm9uRmFzdFNjcm9sbGFi
bGVSZWdpb24gPSAxIDw8IDAsCi0gICAgV2hlZWxFdmVudEhhbmRsZXJSZWdpb24gPSAxIDw8IDEs
Ci19OwotCi1lbnVtIGNsYXNzIFVzZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3kgewotICAgIENv
bnRlbnQsCi0gICAgU3lzdGVtCi19OwotCi1lbnVtIFBERkltYWdlQ2FjaGluZ1BvbGljeSB7Ci0g
ICAgUERGSW1hZ2VDYWNoaW5nRW5hYmxlZCwKLSAgICBQREZJbWFnZUNhY2hpbmdCZWxvd01lbW9y
eUxpbWl0LAotICAgIFBERkltYWdlQ2FjaGluZ0Rpc2FibGVkLAotICAgIFBERkltYWdlQ2FjaGlu
Z0NsaXBCb3VuZHNPbmx5LAotI2lmIFBMQVRGT1JNKElPUykKLSAgICBQREZJbWFnZUNhY2hpbmdE
ZWZhdWx0ID0gUERGSW1hZ2VDYWNoaW5nQmVsb3dNZW1vcnlMaW1pdAotI2Vsc2UKLSAgICBQREZJ
bWFnZUNhY2hpbmdEZWZhdWx0ID0gUERGSW1hZ2VDYWNoaW5nRW5hYmxlZAotI2VuZGlmCi19Owot
Ci1lbnVtIEZyYW1lRmxhdHRlbmluZyB7Ci0gICAgRnJhbWVGbGF0dGVuaW5nRGlzYWJsZWQsCi0g
ICAgRnJhbWVGbGF0dGVuaW5nRW5hYmxlZEZvck5vbkZ1bGxTY3JlZW5JRnJhbWVzLAotICAgIEZy
YW1lRmxhdHRlbmluZ0Z1bGx5RW5hYmxlZAotfTsKLQotdHlwZWRlZiB1bnNpZ25lZCBEZWJ1Z092
ZXJsYXlSZWdpb25zOwotCi1jbGFzcyBTZXR0aW5ncyA6IHB1YmxpYyBSZWZDb3VudGVkPFNldHRp
bmdzPiB7CitjbGFzcyBTZXR0aW5ncyA6IHB1YmxpYyBTZXR0aW5nc0Jhc2UgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFNldHRpbmdzKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZjxTZXR0aW5ncz4gY3JlYXRlKFBhZ2UqKTsKQEAgLTEwNCwzOTIg
KzM4LDE2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcGFnZURlc3Ryb3llZCgpIHsgbV9wYWdlID0g
bnVsbHB0cjsgfQogCi0gICAgZW51bSBjbGFzcyBGb250TG9hZFRpbWluZ092ZXJyaWRlIHsgTm9u
ZSwgQmxvY2ssIFN3YXAsIEZhaWx1cmUgfTsKLQotICAgIGVudW0gY2xhc3MgRm9yY2VkQWNjZXNz
aWJpbGl0eVZhbHVlIHsgU3lzdGVtLCBPbiwgT2ZmIH07Ci0gICAgc3RhdGljIGNvbnN0IFNldHRp
bmdzOjpGb3JjZWRBY2Nlc3NpYmlsaXR5VmFsdWUgZGVmYXVsdEZvcmNlZENvbG9yc0FyZUludmVy
dGVkQWNjZXNzaWJpbGl0eVZhbHVlID0gRm9yY2VkQWNjZXNzaWJpbGl0eVZhbHVlOjpTeXN0ZW07
Ci0gICAgc3RhdGljIGNvbnN0IFNldHRpbmdzOjpGb3JjZWRBY2Nlc3NpYmlsaXR5VmFsdWUgZGVm
YXVsdEZvcmNlZERpc3BsYXlJc01vbm9jaHJvbWVBY2Nlc3NpYmlsaXR5VmFsdWUgPSBGb3JjZWRB
Y2Nlc3NpYmlsaXR5VmFsdWU6OlN5c3RlbTsKLSAgICBzdGF0aWMgY29uc3QgU2V0dGluZ3M6OkZv
cmNlZEFjY2Vzc2liaWxpdHlWYWx1ZSBkZWZhdWx0Rm9yY2VkUHJlZmVyc1JlZHVjZWRNb3Rpb25B
Y2Nlc3NpYmlsaXR5VmFsdWUgPSBGb3JjZWRBY2Nlc3NpYmlsaXR5VmFsdWU6OlN5c3RlbTsKLQot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3RhbmRhcmRGb250RmFtaWx5KGNvbnN0IEF0b21p
Y1N0cmluZyYsIFVTY3JpcHRDb2RlID0gVVNDUklQVF9DT01NT04pOwotICAgIFdFQkNPUkVfRVhQ
T1JUIGNvbnN0IEF0b21pY1N0cmluZyYgc3RhbmRhcmRGb250RmFtaWx5KFVTY3JpcHRDb2RlID0g
VVNDUklQVF9DT01NT04pIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaXhl
ZEZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NP
TU1PTik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQXRvbWljU3RyaW5nJiBmaXhlZEZvbnRG
YW1pbHkoVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTikgY29uc3Q7Ci0KLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldFNlcmlmRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmLCBVU2Ny
aXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBBdG9t
aWNTdHJpbmcmIHNlcmlmRm9udEZhbWlseShVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKSBj
b25zdDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2Fuc1NlcmlmRm9udEZhbWlseShj
b25zdCBBdG9taWNTdHJpbmcmLCBVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCBjb25zdCBBdG9taWNTdHJpbmcmIHNhbnNTZXJpZkZvbnRGYW1pbHkoVVNj
cmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTikgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldEN1cnNpdmVGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFVTY3JpcHRDb2Rl
ID0gVVNDUklQVF9DT01NT04pOwotICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEF0b21pY1N0cmlu
ZyYgY3Vyc2l2ZUZvbnRGYW1pbHkoVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTikgY29uc3Q7
Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZhbnRhc3lGb250RmFtaWx5KGNvbnN0IEF0
b21pY1N0cmluZyYsIFVTY3JpcHRDb2RlID0gVVNDUklQVF9DT01NT04pOwotICAgIFdFQkNPUkVf
RVhQT1JUIGNvbnN0IEF0b21pY1N0cmluZyYgZmFudGFzeUZvbnRGYW1pbHkoVVNjcmlwdENvZGUg
PSBVU0NSSVBUX0NPTU1PTikgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFBp
Y3RvZ3JhcGhGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFVTY3JpcHRDb2RlID0gVVND
UklQVF9DT01NT04pOwotICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEF0b21pY1N0cmluZyYgcGlj
dG9ncmFwaEZvbnRGYW1pbHkoVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTikgY29uc3Q7Ci0K
LSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBkZWZhdWx0VGV4dEF1dG9zaXppbmdFbmFi
bGVkKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGZsb2F0IGRlZmF1bHRNaW5pbXVtWm9v
bUZvbnRTaXplKCk7Ci0KLSAgICAvLyBPbmx5IHNldCBieSBMYXlvdXQgVGVzdHMuCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRNZWRpYVR5cGVPdmVycmlkZShjb25zdCBTdHJpbmcmKTsKLSAg
ICBjb25zdCBTdHJpbmcmIG1lZGlhVHlwZU92ZXJyaWRlKCkgY29uc3QgeyByZXR1cm4gbV9tZWRp
YVR5cGVPdmVycmlkZTsgfQotCi0gICAgLy8gVW5saWtlIGFyZUltYWdlc0VuYWJsZWQsIHRoaXMg
b25seSBzdXBwcmVzc2VzIHRoZSBuZXR3b3JrIGxvYWQgb2YKLSAgICAvLyB0aGUgaW1hZ2UgVVJM
LiAgQSBjYWNoZWQgaW1hZ2Ugd2lsbCBzdGlsbCBiZSByZW5kZXJlZCBpZiByZXF1ZXN0ZWQuCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoYm9vbCk7
Ci0gICAgYm9vbCBsb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoKSBjb25zdCB7IHJldHVybiBtX2xv
YWRzSW1hZ2VzQXV0b21hdGljYWxseTsgfQotCi0gICAgLy8gQ2xpZW50cyB0aGF0IGV4ZWN1dGUg
c2NyaXB0IHNob3VsZCBjYWxsIFNjcmlwdENvbnRyb2xsZXI6OmNhbkV4ZWN1dGVTY3JpcHRzKCkK
LSAgICAvLyBpbnN0ZWFkIG9mIHRoaXMgZnVuY3Rpb24uIFNjcmlwdENvbnRyb2xsZXI6OmNhbkV4
ZWN1dGVTY3JpcHRzKCkgY2hlY2tzIHRoZQotICAgIC8vIEhUTUwgc2FuZGJveCwgcGx1Zy1pbiBz
YW5kYm94aW5nLCBhbmQgb3RoZXIgaW1wb3J0YW50IGRldGFpbHMuCi0gICAgYm9vbCBpc1Njcmlw
dEVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2NyaXB0RW5hYmxlZDsgfQotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0U2NyaXB0RW5hYmxlZChib29sKTsKLQogICAgIFNFVFRJTkdTX0dF
VFRFUlNfQU5EX1NFVFRFUlMKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SmF2YUVuYWJs
ZWQoYm9vbCk7Ci0gICAgYm9vbCBpc0phdmFFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0ph
dmFFbmFibGVkOyB9Ci0KLSAgICAvLyBUaGlzIHNldHRpbmdzIGlzIG9ubHkgY29uc3VsdGVkIGlm
IGlzSmF2YUVuYWJsZWQoKSByZXR1cm5zIHRydWU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRKYXZhRW5hYmxlZEZvckxvY2FsRmlsZXMoYm9vbCk7Ci0gICAgYm9vbCBpc0phdmFFbmFibGVk
Rm9yTG9jYWxGaWxlcygpIGNvbnN0IHsgcmV0dXJuIG1faXNKYXZhRW5hYmxlZEZvckxvY2FsRmls
ZXM7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SW1hZ2VzRW5hYmxlZChib29sKTsK
LSAgICBib29sIGFyZUltYWdlc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FyZUltYWdlc0Vu
YWJsZWQ7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UHJlZmVyTUlNRVR5cGVGb3JJ
bWFnZXMoYm9vbCk7Ci0gICAgYm9vbCBwcmVmZXJNSU1FVHlwZUZvckltYWdlcygpIGNvbnN0IHsg
cmV0dXJuIG1fcHJlZmVyTUlNRVR5cGVGb3JJbWFnZXM7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0UGx1Z2luc0VuYWJsZWQoYm9vbCk7Ci0gICAgYm9vbCBhcmVQbHVnaW5zRW5hYmxl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXJlUGx1Z2luc0VuYWJsZWQ7IH0KLQotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0RE5TUHJlZmV0Y2hpbmdFbmFibGVkKGJvb2wpOwotICAgIGJvb2wgZG5z
UHJlZmV0Y2hpbmdFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kbnNQcmVmZXRjaGluZ0VuYWJs
ZWQ7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VXNlclN0eWxlU2hlZXRMb2NhdGlv
bihjb25zdCBVUkwmKTsKLSAgICBjb25zdCBVUkwmIHVzZXJTdHlsZVNoZWV0TG9jYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb247IH0KLQotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0TmVlZHNBZG9iZUZyYW1lUmVsb2FkaW5nUXVpcmsoYm9vbCk7Ci0gICAg
Ym9vbCBuZWVkc0Fjcm9iYXRGcmFtZVJlbG9hZGluZ1F1aXJrKCkgY29uc3QgeyByZXR1cm4gbV9u
ZWVkc0Fkb2JlRnJhbWVSZWxvYWRpbmdRdWlyazsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRNaW5pbXVtRE9NVGltZXJJbnRlcnZhbChTZWNvbmRzKTsgLy8gSW5pdGlhbGl6ZWQgdG8g
RE9NVGltZXI6OmRlZmF1bHRNaW5pbXVtSW50ZXJ2YWwoKS4KLSAgICBTZWNvbmRzIG1pbmltdW1E
T01UaW1lckludGVydmFsKCkgY29uc3QgeyByZXR1cm4gbV9taW5pbXVtRE9NVGltZXJJbnRlcnZh
bDsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRMYXlvdXRJbnRlcnZhbChTZWNvbmRz
KTsKLSAgICBTZWNvbmRzIGxheW91dEludGVydmFsKCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRJ
bnRlcnZhbDsgfQotCi0gICAgYm9vbCBoaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1faGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQ7
IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEhpZGRlblBhZ2VET01UaW1lclRocm90dGxp
bmdFbmFibGVkKGJvb2wpOwotICAgIGJvb2wgaGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0F1
dG9JbmNyZWFzZXMoKSBjb25zdCB7IHJldHVybiBtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxp
bmdBdXRvSW5jcmVhc2VzOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRIaWRkZW5QYWdl
RE9NVGltZXJUaHJvdHRsaW5nQXV0b0luY3JlYXNlcyhib29sKTsKLQotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0VXNlc1BhZ2VDYWNoZShib29sKTsKLSAgICBib29sIHVzZXNQYWdlQ2FjaGUo
KSBjb25zdCB7IHJldHVybiBtX3VzZXNQYWdlQ2FjaGU7IH0KLSAgICAgICAgCi0gICAgdm9pZCBz
ZXRGb250UmVuZGVyaW5nTW9kZShGb250UmVuZGVyaW5nTW9kZSBtb2RlKTsKLSAgICBGb250UmVu
ZGVyaW5nTW9kZSBmb250UmVuZGVyaW5nTW9kZSgpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRTaG93VGlsZWRTY3JvbGxpbmdJbmRpY2F0b3IoYm9vbCk7Ci0gICAgYm9vbCBz
aG93VGlsZWRTY3JvbGxpbmdJbmRpY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX3Nob3dUaWxlZFNj
cm9sbGluZ0luZGljYXRvcjsgfQotCi0jaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQotICAgIGJv
b2wgcmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJj
ZVVzYWdlT3ZlcmxheVZpc2libGU7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFJlc291
cmNlVXNhZ2VPdmVybGF5VmlzaWJsZShib29sKTsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lO
KQotICAgIHN0YXRpYyB2b2lkIHNldFNob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzKGJvb2wp
OwotICAgIHN0YXRpYyBib29sIHNob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzKCkgeyByZXR1
cm4gZ1Nob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzOyB9Ci0jZW5kaWYKLQotICAgIHN0YXRp
YyBib29sIGlzUG9zdExvYWRDUFVVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpOwotICAgIHN0YXRp
YyBib29sIGlzUG9zdEJhY2tncm91bmRpbmdDUFVVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpOwot
ICAgIHN0YXRpYyBib29sIGlzUGVyQWN0aXZpdHlTdGF0ZUNQVVVzYWdlTWVhc3VyZW1lbnRFbmFi
bGVkKCk7Ci0KLSAgICBzdGF0aWMgYm9vbCBpc1Bvc3RMb2FkTWVtb3J5VXNhZ2VNZWFzdXJlbWVu
dEVuYWJsZWQoKTsKLSAgICBzdGF0aWMgYm9vbCBpc1Bvc3RCYWNrZ3JvdW5kaW5nTWVtb3J5VXNh
Z2VNZWFzdXJlbWVudEVuYWJsZWQoKTsKLQotICAgIHN0YXRpYyBib29sIGdsb2JhbENvbnN0UmVk
ZWNsYXJhdGlvblNob3VsZFRocm93KCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEJh
Y2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKGJvb2wpOwotICAgIGJvb2wgYmFja2dyb3Vu
ZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRTaG91
bGRFeHRlbmRCZXlvbmRQYWdlOyB9Ci0KLSNpZiBVU0UoQVZGT1VOREFUSU9OKQotICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldEFWRm91bmRhdGlvbkVuYWJsZWQoYm9vbCBmbGFnKTsK
LSAgICBzdGF0aWMgYm9vbCBpc0FWRm91bmRhdGlvbkVuYWJsZWQoKSB7IHJldHVybiBnQVZGb3Vu
ZGF0aW9uRW5hYmxlZDsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldEFWRm91
bmRhdGlvbk5TVVJMU2Vzc2lvbkVuYWJsZWQoYm9vbCBmbGFnKTsKLSAgICBzdGF0aWMgYm9vbCBp
c0FWRm91bmRhdGlvbk5TVVJMU2Vzc2lvbkVuYWJsZWQoKSB7IHJldHVybiBnQVZGb3VuZGF0aW9u
TlNVUkxTZXNzaW9uRW5hYmxlZDsgfQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRRVEtpdEVuYWJsZWQoYm9vbCBmbGFnKTsK
LSAgICBzdGF0aWMgYm9vbCBpc1FUS2l0RW5hYmxlZCgpIHsgcmV0dXJuIGdRVEtpdEVuYWJsZWQ7
IH0KLSNlbHNlCi0gICAgc3RhdGljIGJvb2wgaXNRVEtpdEVuYWJsZWQoKSB7IHJldHVybiBmYWxz
ZTsgfQotI2VuZGlmCi0KLSNpZiBVU0UoR1NUUkVBTUVSKQotICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyB2b2lkIHNldEdTdHJlYW1lckVuYWJsZWQoYm9vbCBmbGFnKTsKLSAgICBzdGF0aWMgYm9v
bCBpc0dTdHJlYW1lckVuYWJsZWQoKSB7IHJldHVybiBnR1N0cmVhbWVyRW5hYmxlZDsgfQotI2Vu
ZGlmCi0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdE1heGltdW1IVE1MUGFyc2Vy
RE9NVHJlZURlcHRoID0gNTEyOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0TWF4
aW11bVJlbmRlclRyZWVEZXB0aCA9IDUxMjsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2
b2lkIHNldE1vY2tTY3JvbGxiYXJzRW5hYmxlZChib29sIGZsYWcpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBib29sIG1vY2tTY3JvbGxiYXJzRW5hYmxlZCgpOwotCi0gICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIHZvaWQgc2V0VXNlc092ZXJsYXlTY3JvbGxiYXJzKGJvb2wgZmxhZyk7Ci0g
ICAgc3RhdGljIGJvb2wgdXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7Ci0KLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgdm9pZCBzZXRVc2VzTW9ja1Njcm9sbEFuaW1hdG9yKGJvb2wpOwotICAgIHN0
YXRpYyBib29sIHVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKTsKLQotI2lmIEVOQUJMRShUT1VDSF9F
VkVOVFMpCi0gICAgdm9pZCBzZXRUb3VjaEV2ZW50RW11bGF0aW9uRW5hYmxlZChib29sIGVuYWJs
ZWQpIHsgbV90b3VjaEV2ZW50RW11bGF0aW9uRW5hYmxlZCA9IGVuYWJsZWQ7IH0KLSAgICBib29s
IGlzVG91Y2hFdmVudEVtdWxhdGlvbkVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3RvdWNoRXZl
bnRFbXVsYXRpb25FbmFibGVkOyB9Ci0jZW5kaWYKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0U3RvcmFnZUJsb2NraW5nUG9saWN5KFNlY3VyaXR5T3JpZ2luOjpTdG9yYWdlQmxvY2tpbmdQ
b2xpY3kpOwotICAgIFNlY3VyaXR5T3JpZ2luOjpTdG9yYWdlQmxvY2tpbmdQb2xpY3kgc3RvcmFn
ZUJsb2NraW5nUG9saWN5KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlQmxvY2tpbmdQb2xpY3k7
IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dn
aW5nRW5hYmxlZChib29sKTsKLSAgICBib29sIHNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0Vu
YWJsZWQoKSB7IHJldHVybiBtX3Njcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQ7IH0K
LQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFNob3VsZFJlc3BlY3RQcmlvcml0
eUluQ1NTQXR0cmlidXRlU2V0dGVycyhib29sKTsKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRSZXNw
ZWN0UHJpb3JpdHlJbkNTU0F0dHJpYnV0ZVNldHRlcnMoKTsKLQotICAgIHZvaWQgc2V0VGltZVdp
dGhvdXRNb3VzZU1vdmVtZW50QmVmb3JlSGlkaW5nQ29udHJvbHMoU2Vjb25kcyB0aW1lKSB7IG1f
dGltZVdpdGhvdXRNb3VzZU1vdmVtZW50QmVmb3JlSGlkaW5nQ29udHJvbHMgPSB0aW1lOyB9Ci0g
ICAgU2Vjb25kcyB0aW1lV2l0aG91dE1vdXNlTW92ZW1lbnRCZWZvcmVIaWRpbmdDb250cm9scygp
IGNvbnN0IHsgcmV0dXJuIG1fdGltZVdpdGhvdXRNb3VzZU1vdmVtZW50QmVmb3JlSGlkaW5nQ29u
dHJvbHM7IH0KLQotICAgIGJvb2wgaGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFi
bGVkKCkgY29uc3QgeyByZXR1cm4gbV9oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVu
YWJsZWQ7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEhpZGRlblBhZ2VDU1NBbmltYXRp
b25TdXNwZW5zaW9uRW5hYmxlZChib29sKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
Rm9udEZhbGxiYWNrUHJlZmVyc1BpY3RvZ3JhcGhzKGJvb2wpOwotICAgIGJvb2wgZm9udEZhbGxi
YWNrUHJlZmVyc1BpY3RvZ3JhcGhzKCkgY29uc3QgeyByZXR1cm4gbV9mb250RmFsbGJhY2tQcmVm
ZXJzUGljdG9ncmFwaHM7IH0KLQotICAgIHN0YXRpYyBib29sIGxvd1Bvd2VyVmlkZW9BdWRpb0J1
ZmZlclNpemVFbmFibGVkKCkgeyByZXR1cm4gZ0xvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVF
bmFibGVkOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0TG93UG93ZXJWaWRl
b0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQoYm9vbCk7Ci0KLSAgICBzdGF0aWMgYm9vbCByZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpIHsgcmV0dXJuIGdSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RW5hYmxlZEVuYWJsZWQ7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sKTsKLQotI2lmIFBMQVRGT1JNKElPUykKLSAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRBdWRpb1Nlc3Npb25DYXRlZ29yeU92ZXJy
aWRlKHVuc2lnbmVkKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgYXVkaW9TZXNzaW9uQ2F0ZWdvcnlP
dmVycmlkZSgpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0TmV0d29ya0Rh
dGFVc2FnZVRyYWNraW5nRW5hYmxlZChib29sKTsKLSAgICBzdGF0aWMgYm9vbCBuZXR3b3JrRGF0
YVVzYWdlVHJhY2tpbmdFbmFibGVkKCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9p
ZCBzZXROZXR3b3JrSW50ZXJmYWNlTmFtZShjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgY29u
c3QgU3RyaW5nJiBuZXR3b3JrSW50ZXJmYWNlTmFtZSgpOwotCi0jaWYgSEFWRShBVktJVCkKLSAg
ICBzdGF0aWMgdm9pZCBzZXRBVktpdEVuYWJsZWQoYm9vbCBmbGFnKSB7IGdBVktpdEVuYWJsZWQg
PSBmbGFnOyB9Ci0jZW5kaWYKLSAgICBzdGF0aWMgYm9vbCBhdktpdEVuYWJsZWQoKSB7IHJldHVy
biBnQVZLaXRFbmFibGVkOyB9Ci0KLSAgICBzdGF0aWMgdm9pZCBzZXRTaG91bGRPcHRPdXRPZk5l
dHdvcmtTdGF0ZU9ic2VydmF0aW9uKGJvb2wgZmxhZykgeyBnU2hvdWxkT3B0T3V0T2ZOZXR3b3Jr
U3RhdGVPYnNlcnZhdGlvbiA9IGZsYWc7IH0KLSAgICBzdGF0aWMgYm9vbCBzaG91bGRPcHRPdXRP
Zk5ldHdvcmtTdGF0ZU9ic2VydmF0aW9uKCkgeyByZXR1cm4gZ1Nob3VsZE9wdE91dE9mTmV0d29y
a1N0YXRlT2JzZXJ2YXRpb247IH0KLSNlbmRpZgotCi0jaWYgVVNFKEFVRElPX1NFU1NJT04pCi0g
ICAgc3RhdGljIHZvaWQgc2V0U2hvdWxkTWFuYWdlQXVkaW9TZXNzaW9uQ2F0ZWdvcnkoYm9vbCBm
bGFnKSB7IGdNYW5hZ2VBdWRpb1Nlc3Npb24gPSBmbGFnOyB9Ci0gICAgc3RhdGljIGJvb2wgc2hv
dWxkTWFuYWdlQXVkaW9TZXNzaW9uQ2F0ZWdvcnkoKSB7IHJldHVybiBnTWFuYWdlQXVkaW9TZXNz
aW9uOyB9Ci0jZW5kaWYKLQotICAgIHN0YXRpYyB2b2lkIHNldEN1c3RvbVBhc3RlYm9hcmREYXRh
RW5hYmxlZChib29sIGVuYWJsZWQpIHsgZ0N1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCA9IGVu
YWJsZWQ7IH0KLSAgICBzdGF0aWMgYm9vbCBjdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQoKSB7
IHJldHVybiBnQ3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkOyB9Ci0gICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIGJvb2wgZGVmYXVsdEN1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCgpOwotCi0j
aWYgRU5BQkxFKExFR0FDWV9FTkNSWVBURURfTUVESUEpCi0gICAgdm9pZCBzZXRNZWRpYUtleXNT
dG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5KSB7IG1fbWVkaWFLZXlzU3Rv
cmFnZURpcmVjdG9yeSA9IGRpcmVjdG9yeTsgfQotICAgIGNvbnN0IFN0cmluZyYgbWVkaWFLZXlz
U3RvcmFnZURpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFLZXlzU3RvcmFnZURpcmVj
dG9yeTsgfQotI2VuZGlmCi0gICAgCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICB2b2lk
IHNldE1lZGlhRGV2aWNlSWRlbnRpZmllclN0b3JhZ2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBk
aXJlY3RvcnkpIHsgbV9tZWRpYURldmljZUlkZW50aWZpZXJTdG9yYWdlRGlyZWN0b3J5ID0gZGly
ZWN0b3J5OyB9Ci0gICAgY29uc3QgU3RyaW5nJiBtZWRpYURldmljZUlkZW50aWZpZXJTdG9yYWdl
RGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYURldmljZUlkZW50aWZpZXJTdG9yYWdl
RGlyZWN0b3J5OyB9Ci0KLSAgICBzdGF0aWMgYm9vbCBtb2NrQ2FwdHVyZURldmljZXNFbmFibGVk
KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0TW9ja0NhcHR1cmVEZXZpY2Vz
RW5hYmxlZChib29sKTsKLQotICAgIGJvb2wgbWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25u
ZWN0aW9uKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0TWVkaWFD
YXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKGJvb2wpOwotI2VuZGlmCi0KLSNpZiBFTkFC
TEUoQVBQTEVfUEFZKQotICAgIGJvb2wgYXBwbGVQYXlFbmFibGVkKCkgY29uc3QgeyByZXR1cm4g
bV9hcHBsZVBheUVuYWJsZWQ7IH0KLSAgICB2b2lkIHNldEFwcGxlUGF5RW5hYmxlZChib29sIGFw
cGxlUGF5RW5hYmxlZCkgeyBtX2FwcGxlUGF5RW5hYmxlZCA9IGFwcGxlUGF5RW5hYmxlZDsgfQot
Ci0gICAgYm9vbCBhcHBsZVBheUNhcGFiaWxpdHlEaXNjbG9zdXJlQWxsb3dlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fYXBwbGVQYXlDYXBhYmlsaXR5RGlzY2xvc3VyZUFsbG93ZWQ7IH0KLSAgICB2b2lk
IHNldEFwcGxlUGF5Q2FwYWJpbGl0eURpc2Nsb3N1cmVBbGxvd2VkKGJvb2wgYXBwbGVQYXlDYXBh
YmlsaXR5RGlzY2xvc3VyZUFsbG93ZWQpIHsgbV9hcHBsZVBheUNhcGFiaWxpdHlEaXNjbG9zdXJl
QWxsb3dlZCA9IGFwcGxlUGF5Q2FwYWJpbGl0eURpc2Nsb3N1cmVBbGxvd2VkOyB9Ci0jZW5kaWYK
LQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Rm9yY2VQZW5kaW5nV2ViR0xQb2xpY3koYm9v
bCk7Ci0gICAgYm9vbCBpc0ZvcmNlUGVuZGluZ1dlYkdMUG9saWN5KCkgY29uc3QgeyByZXR1cm4g
bV9mb3JjZVBlbmRpbmdXZWJHTFBvbGljeTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgRnJhbWVG
bGF0dGVuaW5nIGVmZmVjdGl2ZUZyYW1lRmxhdHRlbmluZygpOwogCi0gICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIHZvaWQgc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoYm9vbCk7Ci0gICAgc3Rh
dGljIGJvb2wgYWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoKTsKLQotICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBjb25zdCBTdHJpbmcmIGRlZmF1bHRNZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hh
cmR3YXJlU3VwcG9ydCgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWVkaWFDb250ZW50
VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQoY29uc3QgVmVjdG9yPENvbnRlbnRUeXBlPiYp
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdI
YXJkd2FyZVN1cHBvcnQoY29uc3QgU3RyaW5nJik7Ci0gICAgY29uc3QgVmVjdG9yPENvbnRlbnRU
eXBlPiYgbWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQoKSBjb25zdCB7
IHJldHVybiBtX21lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0OyB9Ci0K
IHByaXZhdGU6CiAgICAgZXhwbGljaXQgU2V0dGluZ3MoUGFnZSopOwogCi0gICAgdm9pZCBpbml0
aWFsaXplRGVmYXVsdEZvbnRGYW1pbGllcygpOwotCi0gICAgUGFnZSogbV9wYWdlOwotCi0gICAg
U3RyaW5nIG1fbWVkaWFUeXBlT3ZlcnJpZGU7Ci0gICAgVVJMIG1fdXNlclN0eWxlU2hlZXRMb2Nh
dGlvbjsKLSAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udEdlbmVyaWNGYW1pbGllcz4gbV9m
b250R2VuZXJpY0ZhbWlsaWVzOwotICAgIFNlY3VyaXR5T3JpZ2luOjpTdG9yYWdlQmxvY2tpbmdQ
b2xpY3kgbV9zdG9yYWdlQmxvY2tpbmdQb2xpY3k7Ci0gICAgU2Vjb25kcyBtX2xheW91dEludGVy
dmFsOwotICAgIFNlY29uZHMgbV9taW5pbXVtRE9NVGltZXJJbnRlcnZhbDsKLQogICAgIFNFVFRJ
TkdTX01FTUJFUl9WQVJJQUJMRVMKIAotICAgIGJvb2wgbV9pc0phdmFFbmFibGVkIDogMTsKLSAg
ICBib29sIG1faXNKYXZhRW5hYmxlZEZvckxvY2FsRmlsZXMgOiAxOwotICAgIGJvb2wgbV9sb2Fk
c0ltYWdlc0F1dG9tYXRpY2FsbHkgOiAxOwotICAgIGJvb2wgbV9hcmVJbWFnZXNFbmFibGVkIDog
MTsKLSAgICBib29sIG1fcHJlZmVyTUlNRVR5cGVGb3JJbWFnZXMgOiAxOwotICAgIGJvb2wgbV9h
cmVQbHVnaW5zRW5hYmxlZCA6IDE7Ci0gICAgYm9vbCBtX2lzU2NyaXB0RW5hYmxlZCA6IDE7Ci0g
ICAgYm9vbCBtX25lZWRzQWRvYmVGcmFtZVJlbG9hZGluZ1F1aXJrIDogMTsKLSAgICBib29sIG1f
dXNlc1BhZ2VDYWNoZSA6IDE7Ci0gICAgdW5zaWduZWQgbV9mb250UmVuZGVyaW5nTW9kZSA6IDE7
Ci0gICAgYm9vbCBtX3Nob3dUaWxlZFNjcm9sbGluZ0luZGljYXRvciA6IDE7Ci0gICAgYm9vbCBt
X2JhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlIDogMTsKLSAgICBib29sIG1fZG5zUHJl
ZmV0Y2hpbmdFbmFibGVkIDogMTsKLQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgYm9v
bCBtX3RvdWNoRXZlbnRFbXVsYXRpb25FbmFibGVkIDogMTsKLSNlbmRpZgotICAgIGJvb2wgbV9z
Y3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkIDogMTsKLQotICAgIFNlY29uZHMgbV90
aW1lV2l0aG91dE1vdXNlTW92ZW1lbnRCZWZvcmVIaWRpbmdDb250cm9sczsKLQotICAgIFRpbWVy
IG1fc2V0SW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lcjsKLSAgICB2b2lkIGltYWdlTG9hZGluZ1Nl
dHRpbmdzVGltZXJGaXJlZCgpOwotCi0gICAgYm9vbCBtX2hpZGRlblBhZ2VET01UaW1lclRocm90
dGxpbmdFbmFibGVkIDogMTsKLSAgICBib29sIG1faGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3Bl
bnNpb25FbmFibGVkIDogMTsKLSAgICBib29sIG1fZm9udEZhbGxiYWNrUHJlZmVyc1BpY3RvZ3Jh
cGhzIDogMTsKLQotICAgIGJvb2wgbV9mb3JjZVBlbmRpbmdXZWJHTFBvbGljeSA6IDE7Ci0KLSNp
ZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCi0gICAgYm9vbCBtX3Jlc291cmNlVXNhZ2VPdmVybGF5
VmlzaWJsZSB7IGZhbHNlIH07Ci0jZW5kaWYKLQotICAgIGJvb2wgbV9oaWRkZW5QYWdlRE9NVGlt
ZXJUaHJvdHRsaW5nQXV0b0luY3JlYXNlcyB7IGZhbHNlIH07Ci0KLSNpZiBVU0UoQVZGT1VOREFU
SU9OKQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGdBVkZvdW5kYXRpb25FbmFibGVk
OwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGdBVkZvdW5kYXRpb25OU1VSTFNlc3Np
b25FbmFibGVkOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgYm9vbCBnUVRLaXRFbmFibGVkOwotI2VuZGlmCi0KLSNpZiBVU0UoR1NUUkVB
TUVSKQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGdHU3RyZWFtZXJFbmFibGVkOwot
I2VuZGlmCi0KLSAgICBzdGF0aWMgYm9vbCBnTW9ja1Njcm9sbGJhcnNFbmFibGVkOwotICAgIHN0
YXRpYyBib29sIGdVc2VzT3ZlcmxheVNjcm9sbGJhcnM7Ci0gICAgc3RhdGljIGJvb2wgZ01vY2tT
Y3JvbGxBbmltYXRvckVuYWJsZWQ7Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgc3RhdGljIGJv
b2wgZ1Nob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzOwotI2VuZGlmCi0gICAgc3RhdGljIGJv
b2wgZ1Nob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0cmlidXRlU2V0dGVyczsKLSNpZiBQTEFU
Rk9STShJT1MpCi0gICAgc3RhdGljIGJvb2wgZ05ldHdvcmtEYXRhVXNhZ2VUcmFja2luZ0VuYWJs
ZWQ7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZ0FWS2l0RW5hYmxlZDsKLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBnU2hvdWxkT3B0T3V0T2ZOZXR3b3JrU3RhdGVPYnNl
cnZhdGlvbjsKLSNlbmRpZgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGdNYW5hZ2VB
dWRpb1Nlc3Npb247Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZ0N1c3RvbVBhc3Rl
Ym9hcmREYXRhRW5hYmxlZDsKLQotI2lmIEVOQUJMRShMRUdBQ1lfRU5DUllQVEVEX01FRElBKQot
ICAgIFN0cmluZyBtX21lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rvcnk7Ci0jZW5kaWYKLSAgICAKLSNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgIFN0cmluZyBtX21lZGlhRGV2aWNlSWRlbnRpZmll
clN0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgc3RhdGljIGJvb2wgZ01vY2tDYXB0dXJlRGV2aWNlc0Vu
YWJsZWQ7Ci0gICAgc3RhdGljIGJvb2wgZ01lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVj
dGlvbjsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKEFQUExFX1BBWSkKLSAgICBib29sIG1fYXBwbGVQ
YXlFbmFibGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fYXBwbGVQYXlDYXBhYmlsaXR5RGlzY2xv
c3VyZUFsbG93ZWQgeyB0cnVlIH07Ci0jZW5kaWYKLQotICAgIHN0YXRpYyBib29sIGdMb3dQb3dl
clZpZGVvQXVkaW9CdWZmZXJTaXplRW5hYmxlZDsKLSAgICBzdGF0aWMgYm9vbCBnUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0VuYWJsZWRFbmFibGVkOwotICAgIHN0YXRpYyBib29sIGdBbGxvd3NBbnlT
U0xDZXJ0aWZpY2F0ZTsKLQotICAgIFZlY3RvcjxDb250ZW50VHlwZT4gbV9tZWRpYUNvbnRlbnRU
eXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydDsKIH07CiAKLWlubGluZSBib29sIFNldHRpbmdz
Ojppc1Bvc3RMb2FkQ1BVVXNhZ2VNZWFzdXJlbWVudEVuYWJsZWQoKQotewotI2lmIFBMQVRGT1JN
KENPQ09BKQotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5k
aWYKLX0KLQotaW5saW5lIGJvb2wgU2V0dGluZ3M6OmlzUG9zdEJhY2tncm91bmRpbmdDUFVVc2Fn
ZU1lYXN1cmVtZW50RW5hYmxlZCgpCi17Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHJldHVybiB0
cnVlOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotaW5saW5lIGJvb2wg
U2V0dGluZ3M6OmlzUGVyQWN0aXZpdHlTdGF0ZUNQVVVzYWdlTWVhc3VyZW1lbnRFbmFibGVkKCkK
LXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotICAgIHJldHVy
biBmYWxzZTsKLSNlbmRpZgotfQotCi1pbmxpbmUgYm9vbCBTZXR0aW5nczo6aXNQb3N0TG9hZE1l
bW9yeVVzYWdlTWVhc3VyZW1lbnRFbmFibGVkKCkKLXsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAg
ICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLWlu
bGluZSBib29sIFNldHRpbmdzOjppc1Bvc3RCYWNrZ3JvdW5kaW5nTWVtb3J5VXNhZ2VNZWFzdXJl
bWVudEVuYWJsZWQoKQotewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICByZXR1cm4gdHJ1ZTsKLSNl
bHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5jcHAJKHJldmlzaW9uIDIyMzMy
OCkJKGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHA6MjIzMzI4KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAy
MDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJTZXR0aW5ncy5oIgorCisjaW5jbHVkZSAiQXVkaW9TZXNzaW9uLmgiCisjaW5jbHVkZSAi
QmFja0ZvcndhcmRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIu
aCIKKyNpbmNsdWRlICJDb29raWVTdG9yYWdlLmgiCisjaW5jbHVkZSAiRE9NVGltZXIuaCIKKyNp
bmNsdWRlICJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRm9u
dENhc2NhZGUuaCIKKyNpbmNsdWRlICJGb250R2VuZXJpY0ZhbWlsaWVzLmgiCisjaW5jbHVkZSAi
RnJhbWVUcmVlLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSFRNTE1lZGlh
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCisjaW5jbHVkZSAiTWFpbkZyYW1l
LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VDYWNoZS5oIgorI2luY2x1ZGUg
IlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIgorI2luY2x1ZGUgIlN0b3JhZ2VNYXAuaCIKKyNp
bmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSA8
d3RmL3NwaS9kYXJ3aW4vZHlsZFNQSS5oPgorI2VuZGlmCisKKyNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKSAmJiBVU0UoQVZGT1VOREFUSU9OKQorI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VD
ZW50ZXJNYWMuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyNpbmNsdWRl
ICJNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIHZvaWQgc2V0SW1hZ2VMb2FkaW5nU2V0dGluZ3MoUGFnZSogcGFn
ZSkKK3sKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gJnBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LnRyYXZlcnNlTmV4dCgpKSB7CisgICAgICAgIGlmICghZnJhbWUtPmRvY3VtZW50KCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPmNhY2hlZFJlc291
cmNlTG9hZGVyKCkuc2V0SW1hZ2VzRW5hYmxlZChwYWdlLT5zZXR0aW5ncygpLmFyZUltYWdlc0Vu
YWJsZWQoKSk7CisgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRl
cigpLnNldEF1dG9Mb2FkSW1hZ2VzKHBhZ2UtPnNldHRpbmdzKCkubG9hZHNJbWFnZXNBdXRvbWF0
aWNhbGx5KCkpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgaW52YWxpZGF0ZUFmdGVyR2VuZXJp
Y0ZhbWlseUNoYW5nZShQYWdlKiBwYWdlKQoreworICAgIGludmFsaWRhdGVGb250Q2FzY2FkZUNh
Y2hlKCk7CisgICAgaWYgKHBhZ2UpCisgICAgICAgIHBhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJ
bkFsbEZyYW1lcygpOworfQorCisjaWYgVVNFKEFWRk9VTkRBVElPTikKK2Jvb2wgU2V0dGluZ3M6
OmdBVkZvdW5kYXRpb25FbmFibGVkID0gdHJ1ZTsKK2Jvb2wgU2V0dGluZ3M6OmdBVkZvdW5kYXRp
b25OU1VSTFNlc3Npb25FbmFibGVkID0gdHJ1ZTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09D
T0EpCitib29sIFNldHRpbmdzOjpnUVRLaXRFbmFibGVkID0gZmFsc2U7CisjZW5kaWYKKworI2lm
IFVTRShHU1RSRUFNRVIpCitib29sIFNldHRpbmdzOjpnR1N0cmVhbWVyRW5hYmxlZCA9IHRydWU7
CisjZW5kaWYKKworYm9vbCBTZXR0aW5nczo6Z01vY2tTY3JvbGxiYXJzRW5hYmxlZCA9IGZhbHNl
OworYm9vbCBTZXR0aW5nczo6Z1VzZXNPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOworYm9vbCBT
ZXR0aW5nczo6Z01vY2tTY3JvbGxBbmltYXRvckVuYWJsZWQgPSBmYWxzZTsKKworI2lmIEVOQUJM
RShNRURJQV9TVFJFQU0pCitib29sIFNldHRpbmdzOjpnTW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxl
ZCA9IGZhbHNlOworYm9vbCBTZXR0aW5nczo6Z01lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29u
bmVjdGlvbiA9IHRydWU7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKK2Jvb2wgU2V0dGlu
Z3M6OmdTaG91bGRVc2VIaWdoUmVzb2x1dGlvblRpbWVycyA9IHRydWU7CisjZW5kaWYKKyAgICAK
K2Jvb2wgU2V0dGluZ3M6OmdTaG91bGRSZXNwZWN0UHJpb3JpdHlJbkNTU0F0dHJpYnV0ZVNldHRl
cnMgPSBmYWxzZTsKK2Jvb2wgU2V0dGluZ3M6OmdMb3dQb3dlclZpZGVvQXVkaW9CdWZmZXJTaXpl
RW5hYmxlZCA9IGZhbHNlOworYm9vbCBTZXR0aW5nczo6Z1Jlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkRW5hYmxlZCA9IGZhbHNlOworYm9vbCBTZXR0aW5nczo6Z0FsbG93c0FueVNTTENlcnRp
ZmljYXRlID0gZmFsc2U7CisKKyNpZiBQTEFURk9STShJT1MpCitib29sIFNldHRpbmdzOjpnTmV0
d29ya0RhdGFVc2FnZVRyYWNraW5nRW5hYmxlZCA9IGZhbHNlOworYm9vbCBTZXR0aW5nczo6Z0FW
S2l0RW5hYmxlZCA9IGZhbHNlOworYm9vbCBTZXR0aW5nczo6Z1Nob3VsZE9wdE91dE9mTmV0d29y
a1N0YXRlT2JzZXJ2YXRpb24gPSBmYWxzZTsKKyNlbmRpZgorYm9vbCBTZXR0aW5nczo6Z01hbmFn
ZUF1ZGlvU2Vzc2lvbiA9IGZhbHNlOworYm9vbCBTZXR0aW5nczo6Z0N1c3RvbVBhc3RlYm9hcmRE
YXRhRW5hYmxlZCA9IGZhbHNlOworCisvLyBOT1RFcworLy8gIDEpIEVkaXRpbmdNYWNCZWhhdmlv
ciBjb21wcmlzZXMgVGlnZXIsIExlb3BhcmQsIFNub3dMZW9wYXJkIGFuZCBpT1MgYnVpbGRzLCBh
cyB3ZWxsIGFzIFF0V2ViS2l0IHdoZW4gYnVpbHQgb24gTWFjOworLy8gIDIpIEVkaXRpbmdXaW5k
b3dzQmVoYXZpb3IgY29tcHJpc2VzIFdpbjMyIGJ1aWxkOworLy8gIDMpIEVkaXRpbmdVbml4QmVo
YXZpb3IgY29tcHJpc2VzIGFsbCB1bml4LWJhc2VkIHN5c3RlbXMsIGJ1dCBEYXJ3aW4vTWFjT1Mg
KGFuZCB0aGVuIGFidXNpbmcgdGhlIHRlcm1pbm9sb2d5KTsKKy8vIDk5KSBNYWNFZGl0aW5nQmVo
YXZpb3IgaXMgdXNlZCBhcyBhIGZhbGxiYWNrLgorc3RhdGljIEVkaXRpbmdCZWhhdmlvclR5cGUg
ZWRpdGluZ0JlaGF2aW9yVHlwZUZvclBsYXRmb3JtKCkKK3sKKyAgICByZXR1cm4KKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgRWRpdGluZ0lPU0JlaGF2aW9yCisjZWxpZiBPUyhEQVJXSU4pCisgICAg
RWRpdGluZ01hY0JlaGF2aW9yCisjZWxpZiBPUyhXSU5ET1dTKQorICAgIEVkaXRpbmdXaW5kb3dz
QmVoYXZpb3IKKyNlbGlmIE9TKFVOSVgpCisgICAgRWRpdGluZ1VuaXhCZWhhdmlvcgorI2Vsc2UK
KyAgICAvLyBGYWxsYmFjaworICAgIEVkaXRpbmdNYWNCZWhhdmlvcgorI2VuZGlmCisgICAgOwor
fQorCitib29sIFNldHRpbmdzOjpkZWZhdWx0Q3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKCkK
K3sKKyNpZiBQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQg
Pj0gMTEwMzAwCisgICAgcmV0dXJuIElPU0FwcGxpY2F0aW9uOjppc01vYmlsZVNhZmFyaSgpIHx8
IGR5bGRfZ2V0X3Byb2dyYW1fc2RrX3ZlcnNpb24oKSA+PSBEWUxEX0lPU19WRVJTSU9OXzExXzM7
CisjZWxpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+
PSAxMDEzMDAKKyAgICByZXR1cm4gTWFjQXBwbGljYXRpb246OmlzU2FmYXJpKCkgfHwgZHlsZF9n
ZXRfcHJvZ3JhbV9zZGtfdmVyc2lvbigpID4gRFlMRF9NQUNPU1hfVkVSU0lPTl8xMF8xMzsKKyNl
bGlmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1cm4gTWFjQXBwbGljYXRpb246OmlzU2FmYXJpKCk7
CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCisjaWYgUExBVEZPUk0oQ09D
T0EpCitzdGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0WW91VHViZUZsYXNoUGx1Z2luUmVwbGFjZW1l
bnRFbmFibGVkID0gdHJ1ZTsKKyNlbHNlCitzdGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0WW91VHVi
ZUZsYXNoUGx1Z2luUmVwbGFjZW1lbnRFbmFibGVkID0gZmFsc2U7CisjZW5kaWYKKworI2lmIFBM
QVRGT1JNKElPUykKK3N0YXRpYyBjb25zdCBib29sIGRlZmF1bHRGaXhlZEJhY2tncm91bmRzUGFp
bnRSZWxhdGl2ZVRvRG9jdW1lbnQgPSB0cnVlOworc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCA9IHRydWU7CitzdGF0
aWMgY29uc3QgYm9vbCBkZWZhdWx0QWxsb3dzSW5saW5lTWVkaWFQbGF5YmFjayA9IGZhbHNlOwor
c3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdElubGluZU1lZGlhUGxheWJhY2tSZXF1aXJlc1BsYXlz
SW5saW5lQXR0cmlidXRlID0gdHJ1ZTsKK3N0YXRpYyBjb25zdCBib29sIGRlZmF1bHRWaWRlb1Bs
YXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZSA9IHRydWU7CitzdGF0aWMgY29uc3QgYm9vbCBkZWZh
dWx0QXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUgPSB0cnVlOworc3RhdGljIGNvbnN0
IGJvb2wgZGVmYXVsdE1lZGlhRGF0YUxvYWRzQXV0b21hdGljYWxseSA9IGZhbHNlOworc3RhdGlj
IGNvbnN0IGJvb2wgZGVmYXVsdFNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uID0gdHJ1ZTsK
K3N0YXRpYyBjb25zdCBib29sIGRlZmF1bHRJbWFnZVN1YnNhbXBsaW5nRW5hYmxlZCA9IHRydWU7
CitzdGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0U2Nyb2xsaW5nVHJlZUluY2x1ZGVzRnJhbWVzID0g
dHJ1ZTsKK3N0YXRpYyBjb25zdCBib29sIGRlZmF1bHRNZWRpYUNvbnRyb2xzU2NhbGVXaXRoUGFn
ZVpvb20gPSB0cnVlOworc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdFF1aWNrVGltZVBsdWdpblJl
cGxhY2VtZW50RW5hYmxlZCA9IHRydWU7CisjZWxzZQorc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVs
dEZpeGVkQmFja2dyb3VuZHNQYWludFJlbGF0aXZlVG9Eb2N1bWVudCA9IGZhbHNlOworc3RhdGlj
IGNvbnN0IGJvb2wgZGVmYXVsdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9u
RW5hYmxlZCA9IGZhbHNlOworc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdEFsbG93c0lubGluZU1l
ZGlhUGxheWJhY2sgPSB0cnVlOworc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdElubGluZU1lZGlh
UGxheWJhY2tSZXF1aXJlc1BsYXlzSW5saW5lQXR0cmlidXRlID0gZmFsc2U7CitzdGF0aWMgY29u
c3QgYm9vbCBkZWZhdWx0VmlkZW9QbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUgPSBmYWxzZTsK
K3N0YXRpYyBjb25zdCBib29sIGRlZmF1bHRBdWRpb1BsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVy
ZSA9IGZhbHNlOworc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdE1lZGlhRGF0YUxvYWRzQXV0b21h
dGljYWxseSA9IHRydWU7CitzdGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0U2hvdWxkUmVzcGVjdElt
YWdlT3JpZW50YXRpb24gPSBmYWxzZTsKK3N0YXRpYyBjb25zdCBib29sIGRlZmF1bHRJbWFnZVN1
YnNhbXBsaW5nRW5hYmxlZCA9IGZhbHNlOworc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdFNjcm9s
bGluZ1RyZWVJbmNsdWRlc0ZyYW1lcyA9IGZhbHNlOworc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVs
dE1lZGlhQ29udHJvbHNTY2FsZVdpdGhQYWdlWm9vbSA9IHRydWU7CitzdGF0aWMgY29uc3QgYm9v
bCBkZWZhdWx0UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnRFbmFibGVkID0gZmFsc2U7CisjZW5k
aWYKKworc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdFJlcXVpcmVzVXNlckdlc3R1cmVUb0xvYWRW
aWRlbyA9IHRydWU7CisKK3N0YXRpYyBjb25zdCBib29sIGRlZmF1bHRBbGxvd3NQaWN0dXJlSW5Q
aWN0dXJlTWVkaWFQbGF5YmFjayA9IHRydWU7CisKK3N0YXRpYyBjb25zdCBkb3VibGUgZGVmYXVs
dEluY3JlbWVudGFsUmVuZGVyaW5nU3VwcHJlc3Npb25UaW1lb3V0SW5TZWNvbmRzID0gNTsKKyNp
ZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQorc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdFVu
aWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQgPSB0cnVlOworI2Vsc2UKK3N0YXRpYyBjb25zdCBib29s
IGRlZmF1bHRVbmlmaWVkVGV4dENoZWNrZXJFbmFibGVkID0gZmFsc2U7CisjZW5kaWYKK3N0YXRp
YyBjb25zdCBib29sIGRlZmF1bHRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQgPSB0cnVlOworc3Rh
dGljIGNvbnN0IGJvb2wgZGVmYXVsdFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQgPSBm
YWxzZTsKKworLy8gVGhpcyBhbW91bnQgb2YgdGltZSBtdXN0IGhhdmUgZWxhcHNlZCBiZWZvcmUg
d2Ugd2lsbCBldmVuIGNvbnNpZGVyIHNjaGVkdWxpbmcgYSBsYXlvdXQgd2l0aG91dCBhIGRlbGF5
LgorLy8gRklYTUU6IEZvciBmYXN0ZXIgbWFjaGluZXMgdGhpcyB2YWx1ZSBjYW4gcmVhbGx5IGJl
IGxvd2VyZWQgdG8gMjAwLiAyNTAgaXMgYWRlcXVhdGUsIGJ1dCBhIGxpdHRsZSBoaWdoCisvLyBm
b3IgZHVhbCBHNXMuIDopCitzdGF0aWMgY29uc3QgU2Vjb25kcyBsYXlvdXRTY2hlZHVsZVRocmVz
aG9sZCA9IDI1MF9tczsKKworU2V0dGluZ3M6OlNldHRpbmdzKFBhZ2UqIHBhZ2UpCisgICAgOiBt
X3BhZ2UobnVsbHB0cikKKyAgICAsIG1fbWVkaWFUeXBlT3ZlcnJpZGUoInNjcmVlbiIpCisgICAg
LCBtX2ZvbnRHZW5lcmljRmFtaWxpZXMoc3RkOjptYWtlX3VuaXF1ZTxGb250R2VuZXJpY0ZhbWls
aWVzPigpKQorICAgICwgbV9zdG9yYWdlQmxvY2tpbmdQb2xpY3koU2VjdXJpdHlPcmlnaW46OkFs
bG93QWxsU3RvcmFnZSkKKyAgICAsIG1fbGF5b3V0SW50ZXJ2YWwobGF5b3V0U2NoZWR1bGVUaHJl
c2hvbGQpCisgICAgLCBtX21pbmltdW1ET01UaW1lckludGVydmFsKERPTVRpbWVyOjpkZWZhdWx0
TWluaW11bUludGVydmFsKCkpCisgICAgU0VUVElOR1NfSU5JVElBTElaRVJfTElTVAorICAgICwg
bV9pc0phdmFFbmFibGVkKGZhbHNlKQorICAgICwgbV9pc0phdmFFbmFibGVkRm9yTG9jYWxGaWxl
cyh0cnVlKQorICAgICwgbV9sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoZmFsc2UpCisgICAgLCBt
X2FyZUltYWdlc0VuYWJsZWQodHJ1ZSkKKyAgICAsIG1fcHJlZmVyTUlNRVR5cGVGb3JJbWFnZXMo
ZmFsc2UpCisgICAgLCBtX2FyZVBsdWdpbnNFbmFibGVkKGZhbHNlKQorICAgICwgbV9pc1Njcmlw
dEVuYWJsZWQoZmFsc2UpCisgICAgLCBtX25lZWRzQWRvYmVGcmFtZVJlbG9hZGluZ1F1aXJrKGZh
bHNlKQorICAgICwgbV91c2VzUGFnZUNhY2hlKGZhbHNlKQorICAgICwgbV9mb250UmVuZGVyaW5n
TW9kZSgwKQorICAgICwgbV9zaG93VGlsZWRTY3JvbGxpbmdJbmRpY2F0b3IoZmFsc2UpCisgICAg
LCBtX2JhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKGZhbHNlKQorICAgICwgbV9kbnNQ
cmVmZXRjaGluZ0VuYWJsZWQoZmFsc2UpCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICAs
IG1fdG91Y2hFdmVudEVtdWxhdGlvbkVuYWJsZWQoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fc2Ny
b2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChmYWxzZSkKKyAgICAsIG1fdGltZVdpdGhv
dXRNb3VzZU1vdmVtZW50QmVmb3JlSGlkaW5nQ29udHJvbHMoM19zKQorICAgICwgbV9zZXRJbWFn
ZUxvYWRpbmdTZXR0aW5nc1RpbWVyKCp0aGlzLCAmU2V0dGluZ3M6OmltYWdlTG9hZGluZ1NldHRp
bmdzVGltZXJGaXJlZCkKKyAgICAsIG1faGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJs
ZWQoZmFsc2UpCisgICAgLCBtX2hpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxl
ZChmYWxzZSkKKyAgICAsIG1fZm9udEZhbGxiYWNrUHJlZmVyc1BpY3RvZ3JhcGhzKGZhbHNlKQor
ICAgICwgbV9mb3JjZVBlbmRpbmdXZWJHTFBvbGljeShmYWxzZSkKK3sKKyAgICAvLyBBIEZyYW1l
IG1heSBub3QgaGF2ZSBiZWVuIGNyZWF0ZWQgeWV0LCBzbyB3ZSBpbml0aWFsaXplIHRoZSBBdG9t
aWNTdHJpbmcKKyAgICAvLyBoYXNoIGJlZm9yZSB0cnlpbmcgdG8gdXNlIGl0LgorICAgIEF0b21p
Y1N0cmluZzo6aW5pdCgpOworICAgIGluaXRpYWxpemVEZWZhdWx0Rm9udEZhbWlsaWVzKCk7Cisg
ICAgbV9wYWdlID0gcGFnZTsgLy8gUGFnZSBpcyBub3QgeWV0IGZ1bGx5IGluaXRpYWxpemVkIHdo
ZW4gY29uc3RydWN0aW5nIFNldHRpbmdzLCBzbyBrZWVwaW5nIG1fcGFnZSBudWxsIG92ZXIgaW5p
dGlhbGl6ZURlZmF1bHRGb250RmFtaWxpZXMoKSBjYWxsLgorfQorCitTZXR0aW5nczo6flNldHRp
bmdzKCkKK3sKK30KKworUmVmPFNldHRpbmdzPiBTZXR0aW5nczo6Y3JlYXRlKFBhZ2UqIHBhZ2Up
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0dGluZ3MocGFnZSkpOworfQorCitTRVRU
SU5HU19TRVRURVJfQk9ESUVTCisKKyNpZiAhUExBVEZPUk0oQ09DT0EpCit2b2lkIFNldHRpbmdz
Ojppbml0aWFsaXplRGVmYXVsdEZvbnRGYW1pbGllcygpCit7CisgICAgLy8gT3RoZXIgcGxhdGZv
cm1zIGNhbiBzZXQgdXAgZm9udHMgZnJvbSBhIGNsaWVudCwgYnV0IG9uIE1hYywgd2Ugd2FudCBp
dCBpbiBXZWJDb3JlIHRvIHNoYXJlIGNvZGUgYmV0d2VlbiBXZWJLaXQxIGFuZCBXZWJLaXQyLgor
fQorI2VuZGlmCisKK2NvbnN0IEF0b21pY1N0cmluZyYgU2V0dGluZ3M6OnN0YW5kYXJkRm9udEZh
bWlseShVU2NyaXB0Q29kZSBzY3JpcHQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZm9udEdlbmVy
aWNGYW1pbGllcy0+c3RhbmRhcmRGb250RmFtaWx5KHNjcmlwdCk7Cit9CisKK3ZvaWQgU2V0dGlu
Z3M6OnNldFN0YW5kYXJkRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgVVNj
cmlwdENvZGUgc2NyaXB0KQoreworICAgIGJvb2wgY2hhbmdlcyA9IG1fZm9udEdlbmVyaWNGYW1p
bGllcy0+c2V0U3RhbmRhcmRGb250RmFtaWx5KGZhbWlseSwgc2NyaXB0KTsKKyAgICBpZiAoY2hh
bmdlcykKKyAgICAgICAgaW52YWxpZGF0ZUFmdGVyR2VuZXJpY0ZhbWlseUNoYW5nZShtX3BhZ2Up
OworfQorCitjb25zdCBBdG9taWNTdHJpbmcmIFNldHRpbmdzOjpmaXhlZEZvbnRGYW1pbHkoVVNj
cmlwdENvZGUgc2NyaXB0KSBjb25zdAoreworICAgIHJldHVybiBtX2ZvbnRHZW5lcmljRmFtaWxp
ZXMtPmZpeGVkRm9udEZhbWlseShzY3JpcHQpOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRGaXhl
ZEZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDb2RlIHNjcmlw
dCkKK3sKKyAgICBib29sIGNoYW5nZXMgPSBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNldEZpeGVk
Rm9udEZhbWlseShmYW1pbHksIHNjcmlwdCk7CisgICAgaWYgKGNoYW5nZXMpCisgICAgICAgIGlu
dmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKK30KKworY29uc3QgQXRv
bWljU3RyaW5nJiBTZXR0aW5nczo6c2VyaWZGb250RmFtaWx5KFVTY3JpcHRDb2RlIHNjcmlwdCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zZXJpZkZvbnRGYW1p
bHkoc2NyaXB0KTsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0U2VyaWZGb250RmFtaWx5KGNvbnN0
IEF0b21pY1N0cmluZyYgZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCit7CisgICAgYm9vbCBj
aGFuZ2VzID0gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zZXRTZXJpZkZvbnRGYW1pbHkoZmFtaWx5
LCBzY3JpcHQpOworICAgIGlmIChjaGFuZ2VzKQorICAgICAgICBpbnZhbGlkYXRlQWZ0ZXJHZW5l
cmljRmFtaWx5Q2hhbmdlKG1fcGFnZSk7Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYgU2V0dGlu
Z3M6OnNhbnNTZXJpZkZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAoreworICAg
IHJldHVybiBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNhbnNTZXJpZkZvbnRGYW1pbHkoc2NyaXB0
KTsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0U2Fuc1NlcmlmRm9udEZhbWlseShjb25zdCBBdG9t
aWNTdHJpbmcmIGZhbWlseSwgVVNjcmlwdENvZGUgc2NyaXB0KQoreworICAgIGJvb2wgY2hhbmdl
cyA9IG1fZm9udEdlbmVyaWNGYW1pbGllcy0+c2V0U2Fuc1NlcmlmRm9udEZhbWlseShmYW1pbHks
IHNjcmlwdCk7CisgICAgaWYgKGNoYW5nZXMpCisgICAgICAgIGludmFsaWRhdGVBZnRlckdlbmVy
aWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5n
czo6Y3Vyc2l2ZUZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAoreworICAgIHJl
dHVybiBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPmN1cnNpdmVGb250RmFtaWx5KHNjcmlwdCk7Cit9
CisKK3ZvaWQgU2V0dGluZ3M6OnNldEN1cnNpdmVGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmlu
ZyYgZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCit7CisgICAgYm9vbCBjaGFuZ2VzID0gbV9m
b250R2VuZXJpY0ZhbWlsaWVzLT5zZXRDdXJzaXZlRm9udEZhbWlseShmYW1pbHksIHNjcmlwdCk7
CisgICAgaWYgKGNoYW5nZXMpCisgICAgICAgIGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlD
aGFuZ2UobV9wYWdlKTsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nczo6ZmFudGFz
eUZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAoreworICAgIHJldHVybiBtX2Zv
bnRHZW5lcmljRmFtaWxpZXMtPmZhbnRhc3lGb250RmFtaWx5KHNjcmlwdCk7Cit9CisKK3ZvaWQg
U2V0dGluZ3M6OnNldEZhbnRhc3lGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5
LCBVU2NyaXB0Q29kZSBzY3JpcHQpCit7CisgICAgYm9vbCBjaGFuZ2VzID0gbV9mb250R2VuZXJp
Y0ZhbWlsaWVzLT5zZXRGYW50YXN5Rm9udEZhbWlseShmYW1pbHksIHNjcmlwdCk7CisgICAgaWYg
KGNoYW5nZXMpCisgICAgICAgIGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9w
YWdlKTsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nczo6cGljdG9ncmFwaEZvbnRG
YW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAoreworICAgIHJldHVybiBtX2ZvbnRHZW5l
cmljRmFtaWxpZXMtPnBpY3RvZ3JhcGhGb250RmFtaWx5KHNjcmlwdCk7Cit9CisKK3ZvaWQgU2V0
dGluZ3M6OnNldFBpY3RvZ3JhcGhGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5
LCBVU2NyaXB0Q29kZSBzY3JpcHQpCit7CisgICAgYm9vbCBjaGFuZ2VzID0gbV9mb250R2VuZXJp
Y0ZhbWlsaWVzLT5zZXRQaWN0b2dyYXBoRm9udEZhbWlseShmYW1pbHksIHNjcmlwdCk7CisgICAg
aWYgKGNoYW5nZXMpCisgICAgICAgIGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2Uo
bV9wYWdlKTsKK30KKworZmxvYXQgU2V0dGluZ3M6OmRlZmF1bHRNaW5pbXVtWm9vbUZvbnRTaXpl
KCkKK3sKKyAgICByZXR1cm4gMTU7Cit9CisKKyNpZiAhUExBVEZPUk0oSU9TKQorYm9vbCBTZXR0
aW5nczo6ZGVmYXVsdFRleHRBdXRvc2l6aW5nRW5hYmxlZCgpCit7CisgICAgcmV0dXJuIGZhbHNl
OworfQorI2VuZGlmCisKK3ZvaWQgU2V0dGluZ3M6OnNldE1lZGlhVHlwZU92ZXJyaWRlKGNvbnN0
IFN0cmluZyYgbWVkaWFUeXBlT3ZlcnJpZGUpCit7CisgICAgaWYgKG1fbWVkaWFUeXBlT3ZlcnJp
ZGUgPT0gbWVkaWFUeXBlT3ZlcnJpZGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbWVkaWFU
eXBlT3ZlcnJpZGUgPSBtZWRpYVR5cGVPdmVycmlkZTsKKworICAgIGlmICghbV9wYWdlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX3BhZ2UtPm1haW5GcmFtZSgp
LnZpZXcoKTsKKyAgICBBU1NFUlQodmlldyk7CisKKyAgICB2aWV3LT5zZXRNZWRpYVR5cGUobWVk
aWFUeXBlT3ZlcnJpZGUpOworICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJh
bWVzKCk7Cit9CisKK3ZvaWQgU2V0dGluZ3M6OnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShi
b29sIGxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSkKK3sKKyAgICBtX2xvYWRzSW1hZ2VzQXV0b21h
dGljYWxseSA9IGxvYWRzSW1hZ2VzQXV0b21hdGljYWxseTsKKyAgICAKKyAgICAvLyBDaGFuZ2lu
ZyB0aGlzIHNldHRpbmcgdG8gdHJ1ZSBtaWdodCBpbW1lZGlhdGVseSBzdGFydCBuZXcgbG9hZHMg
Zm9yIGltYWdlcyB0aGF0IGhhZCBwcmV2aW91c2x5IGhhZCBsb2FkaW5nIGRpc2FibGVkLgorICAg
IC8vIElmIHRoaXMgaGFwcGVucyB3aGlsZSBhIFdlYlZpZXcgaXMgYmVpbmcgZGVhbGxvYydlZCwg
YW5kIHdlIGRvbid0IGtub3cgdGhlIFdlYlZpZXcgaXMgYmVpbmcgZGVhbGxvYydlZCwgdGhlc2Ug
bmV3IGxvYWRzCisgICAgLy8gY2FuIGNhdXNlIGNyYXNoZXMgZG93bnN0cmVhbSB3aGVuIHRoZSBX
ZWJWaWV3IG1lbW9yeSBoYXMgYWN0dWFsbHkgYmVlbiBmcmVlJ2QuCisgICAgLy8gT25lIGV4YW1w
bGUgd2hlcmUgdGhpcyBjYW4gaGFwcGVuIGlzIGluIE1hYyBhcHBzIHRoYXQgc3ViY2xhc3MgV2Vi
VmlldyB0aGVuIGRvIHdvcmsgaW4gdGhlaXIgb3ZlcnJpZGRlbiBkZWFsbG9jIG1ldGhvZHMuCisg
ICAgLy8gU3RhcnRpbmcgdGhlc2UgbG9hZHMgc3luY2hyb25vdXNseSBpcyBub3QgaW1wb3J0YW50
LiAgQnkgcHV0dGluZyBpdCBvbiBhIDAtZGVsYXksIHByb3Blcmx5IGNsb3NpbmcgdGhlIFBhZ2Ug
Y2FuY2VscyB0aGVtCisgICAgLy8gYmVmb3JlIHRoZXkgaGF2ZSBhIGNoYW5jZSB0byByZWFsbHkg
c3RhcnQuCisgICAgLy8gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvNjA1NzIgZm9yIG1vcmUgZGlz
Y3Vzc2lvbi4KKyAgICBtX3NldEltYWdlTG9hZGluZ1NldHRpbmdzVGltZXIuc3RhcnRPbmVTaG90
KDBfcyk7Cit9CisKK3ZvaWQgU2V0dGluZ3M6OmltYWdlTG9hZGluZ1NldHRpbmdzVGltZXJGaXJl
ZCgpCit7CisgICAgc2V0SW1hZ2VMb2FkaW5nU2V0dGluZ3MobV9wYWdlKTsKK30KKwordm9pZCBT
ZXR0aW5nczo6c2V0U2NyaXB0RW5hYmxlZChib29sIGlzU2NyaXB0RW5hYmxlZCkKK3sKKyAgICBp
ZiAobV9pc1NjcmlwdEVuYWJsZWQgPT0gaXNTY3JpcHRFbmFibGVkKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2lzU2NyaXB0RW5hYmxlZCA9IGlzU2NyaXB0RW5hYmxlZDsKKworICAgIGlmICgh
bV9wYWdlKQorICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgbV9wYWdl
LT5zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKKyNlbmRpZgorfQorCit2b2lkIFNl
dHRpbmdzOjpzZXRKYXZhRW5hYmxlZChib29sIGlzSmF2YUVuYWJsZWQpCit7CisgICAgbV9pc0ph
dmFFbmFibGVkID0gaXNKYXZhRW5hYmxlZDsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0SmF2YUVu
YWJsZWRGb3JMb2NhbEZpbGVzKGJvb2wgaXNKYXZhRW5hYmxlZEZvckxvY2FsRmlsZXMpCit7Cisg
ICAgbV9pc0phdmFFbmFibGVkRm9yTG9jYWxGaWxlcyA9IGlzSmF2YUVuYWJsZWRGb3JMb2NhbEZp
bGVzOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRJbWFnZXNFbmFibGVkKGJvb2wgYXJlSW1hZ2Vz
RW5hYmxlZCkKK3sKKyAgICBtX2FyZUltYWdlc0VuYWJsZWQgPSBhcmVJbWFnZXNFbmFibGVkOwor
CisgICAgLy8gU2VlIGNvbW1lbnQgaW4gc2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5LgorICAg
IG1fc2V0SW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKK30KKwor
dm9pZCBTZXR0aW5nczo6c2V0UHJlZmVyTUlNRVR5cGVGb3JJbWFnZXMoYm9vbCBwcmVmZXJNSU1F
VHlwZUZvckltYWdlcykKK3sKKyAgICBtX3ByZWZlck1JTUVUeXBlRm9ySW1hZ2VzID0gcHJlZmVy
TUlNRVR5cGVGb3JJbWFnZXM7Cit9CisKK3ZvaWQgU2V0dGluZ3M6OnNldEZvcmNlUGVuZGluZ1dl
YkdMUG9saWN5KGJvb2wgZm9yY2VkKQoreworICAgIG1fZm9yY2VQZW5kaW5nV2ViR0xQb2xpY3kg
PSBmb3JjZWQ7Cit9CisKK0ZyYW1lRmxhdHRlbmluZyBTZXR0aW5nczo6ZWZmZWN0aXZlRnJhbWVG
bGF0dGVuaW5nKCkKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gT24gaU9TIHdoZW4gYXN5
bmMgZnJhbWUgc2Nyb2xsaW5nIGlzIGVuYWJsZWQsIGl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8g
dXNlIGZ1bGwgZnJhbWUgZmxhdHRlbmluZy4KKyAgICAvLyBJbiB0aGF0IGNhc2UsIHdlIGp1c3Qg
Y29uc2lkZXIgdGhhdCBmcmFtZSBmbGF0dGVuaW5nIGlzIGRpc2FibGVkLiBUaGlzIGFsbG93cyBw
ZW9wbGUgdG8gdGVzdAorICAgIC8vIGZyYW1lIHNjcm9sbGluZyBvbiBpT1MgYnkgZW5hYmxpbmcg
IkFzeW5jIEZyYW1lIFNjcm9sbGluZyIgdmlhIHRoZSBTYWZhcmkgbWVudS4KKyAgICBpZiAoYXN5
bmNGcmFtZVNjcm9sbGluZ0VuYWJsZWQoKSAmJiBmcmFtZUZsYXR0ZW5pbmcoKSA9PSBGcmFtZUZs
YXR0ZW5pbmdGdWxseUVuYWJsZWQpCisgICAgICAgIHJldHVybiBGcmFtZUZsYXR0ZW5pbmdEaXNh
YmxlZDsKKyNlbmRpZgorICAgIHJldHVybiBmcmFtZUZsYXR0ZW5pbmcoKTsKK30KKwordm9pZCBT
ZXR0aW5nczo6c2V0UGx1Z2luc0VuYWJsZWQoYm9vbCBhcmVQbHVnaW5zRW5hYmxlZCkKK3sKKyAg
ICBpZiAobV9hcmVQbHVnaW5zRW5hYmxlZCA9PSBhcmVQbHVnaW5zRW5hYmxlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9hcmVQbHVnaW5zRW5hYmxlZCA9IGFyZVBsdWdpbnNFbmFibGVkOwor
ICAgIFBhZ2U6OnJlZnJlc2hQbHVnaW5zKGZhbHNlKTsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0
VXNlclN0eWxlU2hlZXRMb2NhdGlvbihjb25zdCBVUkwmIHVzZXJTdHlsZVNoZWV0TG9jYXRpb24p
Cit7CisgICAgaWYgKG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9PSB1c2VyU3R5bGVTaGVldExv
Y2F0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24g
PSB1c2VyU3R5bGVTaGVldExvY2F0aW9uOworCisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9w
YWdlLT51c2VyU3R5bGVTaGVldExvY2F0aW9uQ2hhbmdlZCgpOworfQorCisvLyBGSVhNRTogVGhp
cyBxdWlyayBpcyBuZWVkZWQgYmVjYXVzZSBvZiBSYWRhciA0Njc0NTM3IGFuZCA1MjExMjcxLiBX
ZSBuZWVkIHRvIHBoYXNlIGl0IG91dCBvbmNlIEFkb2JlCisvLyBjYW4gZml4IHRoZSBidWcgZnJv
bSB0aGVpciBlbmQuCit2b2lkIFNldHRpbmdzOjpzZXROZWVkc0Fkb2JlRnJhbWVSZWxvYWRpbmdR
dWlyayhib29sIHNob3VsZE5vdFJlbG9hZElGcmFtZXNGb3JVbmNoYW5nZWRTUkMpCit7CisgICAg
bV9uZWVkc0Fkb2JlRnJhbWVSZWxvYWRpbmdRdWlyayA9IHNob3VsZE5vdFJlbG9hZElGcmFtZXNG
b3JVbmNoYW5nZWRTUkM7Cit9CisKK3ZvaWQgU2V0dGluZ3M6OnNldE1pbmltdW1ET01UaW1lcklu
dGVydmFsKFNlY29uZHMgaW50ZXJ2YWwpCit7CisgICAgYXV0byBvbGRUaW1lckludGVydmFsID0g
c3RkOjpleGNoYW5nZShtX21pbmltdW1ET01UaW1lckludGVydmFsLCBpbnRlcnZhbCk7CisKKyAg
ICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChGcmFtZSogZnJhbWUg
PSAmbV9wYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2
ZXJzZU5leHQoKSkgeworICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgICAg
ICBmcmFtZS0+ZG9jdW1lbnQoKS0+YWRqdXN0TWluaW11bURPTVRpbWVySW50ZXJ2YWwob2xkVGlt
ZXJJbnRlcnZhbCk7CisgICAgfQorfQorCit2b2lkIFNldHRpbmdzOjpzZXRMYXlvdXRJbnRlcnZh
bChTZWNvbmRzIGxheW91dEludGVydmFsKQoreworICAgIC8vIEZJWE1FOiBJdCBzZWVtcyB3ZWly
ZCB0aGF0IHRoaXMgZnVuY3Rpb24gbWF5IGRpc3JlZ2FyZCB0aGUgc3BlY2lmaWVkIGxheW91dCBp
bnRlcnZhbC4KKyAgICAvLyBXZSBzaG91bGQgZWl0aGVyIGV4cG9zZSBsYXlvdXRTY2hlZHVsZVRo
cmVzaG9sZCBvciBiZXR0ZXIgY29tbXVuaWNhdGUgdGhpcyBpbnZhcmlhbnQuCisgICAgbV9sYXlv
dXRJbnRlcnZhbCA9IHN0ZDo6bWF4KGxheW91dEludGVydmFsLCBsYXlvdXRTY2hlZHVsZVRocmVz
aG9sZCk7Cit9CisKK3ZvaWQgU2V0dGluZ3M6OnNldFVzZXNQYWdlQ2FjaGUoYm9vbCB1c2VzUGFn
ZUNhY2hlKQoreworICAgIGlmIChtX3VzZXNQYWdlQ2FjaGUgPT0gdXNlc1BhZ2VDYWNoZSkKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBtX3VzZXNQYWdlQ2FjaGUgPSB1c2VzUGFnZUNh
Y2hlOworCisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91
c2VzUGFnZUNhY2hlKQorICAgICAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnBydW5lVG9TaXpl
Tm93KDAsIFBydW5pbmdSZWFzb246Ok5vbmUpOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRGb250
UmVuZGVyaW5nTW9kZShGb250UmVuZGVyaW5nTW9kZSBtb2RlKQoreworICAgIGlmIChmb250UmVu
ZGVyaW5nTW9kZSgpID09IG1vZGUpCisgICAgICAgIHJldHVybjsKKyAgICBtX2ZvbnRSZW5kZXJp
bmdNb2RlID0gc3RhdGljX2Nhc3Q8aW50Pihtb2RlKTsKKyAgICBpZiAobV9wYWdlKQorICAgICAg
ICBtX3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOworfQorCitGb250UmVu
ZGVyaW5nTW9kZSBTZXR0aW5nczo6Zm9udFJlbmRlcmluZ01vZGUoKSBjb25zdAoreworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxGb250UmVuZGVyaW5nTW9kZT4obV9mb250UmVuZGVyaW5nTW9kZSk7
Cit9CisKK3ZvaWQgU2V0dGluZ3M6OnNldEROU1ByZWZldGNoaW5nRW5hYmxlZChib29sIGRuc1By
ZWZldGNoaW5nRW5hYmxlZCkKK3sKKyAgICBpZiAobV9kbnNQcmVmZXRjaGluZ0VuYWJsZWQgPT0g
ZG5zUHJlZmV0Y2hpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Ruc1ByZWZl
dGNoaW5nRW5hYmxlZCA9IGRuc1ByZWZldGNoaW5nRW5hYmxlZDsKKyAgICBpZiAobV9wYWdlKQor
ICAgICAgICBtX3BhZ2UtPmRuc1ByZWZldGNoaW5nU3RhdGVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQg
U2V0dGluZ3M6OnNldFNob3dUaWxlZFNjcm9sbGluZ0luZGljYXRvcihib29sIGVuYWJsZWQpCit7
CisgICAgaWYgKG1fc2hvd1RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yID09IGVuYWJsZWQpCisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgbV9zaG93VGlsZWRTY3JvbGxpbmdJbmRpY2F0b3Ig
PSBlbmFibGVkOworfQorCisjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQordm9pZCBTZXR0aW5n
czo6c2V0UmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBp
ZiAobV9yZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGUgPT0gdmlzaWJsZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9yZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGUgPSB2aXNpYmxlOworICAg
IGlmIChtX3BhZ2UpCisgICAgICAgIG1fcGFnZS0+c2V0UmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNp
YmxlKHZpc2libGUpOworfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCit2b2lkIFNldHRp
bmdzOjpzZXRTaG91bGRVc2VIaWdoUmVzb2x1dGlvblRpbWVycyhib29sIHNob3VsZFVzZUhpZ2hS
ZXNvbHV0aW9uVGltZXJzKQoreworICAgIGdTaG91bGRVc2VIaWdoUmVzb2x1dGlvblRpbWVycyA9
IHNob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzOworfQorI2VuZGlmCisKK3ZvaWQgU2V0dGlu
Z3M6OnNldFN0b3JhZ2VCbG9ja2luZ1BvbGljeShTZWN1cml0eU9yaWdpbjo6U3RvcmFnZUJsb2Nr
aW5nUG9saWN5IGVuYWJsZWQpCit7CisgICAgaWYgKG1fc3RvcmFnZUJsb2NraW5nUG9saWN5ID09
IGVuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3RvcmFnZUJsb2NraW5nUG9saWN5
ID0gZW5hYmxlZDsKKyAgICBpZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2UtPnN0b3JhZ2VCbG9j
a2luZ1N0YXRlQ2hhbmdlZCgpOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRCYWNrZ3JvdW5kU2hv
dWxkRXh0ZW5kQmV5b25kUGFnZShib29sIHNob3VsZEV4dGVuZCkKK3sKKyAgICBpZiAobV9iYWNr
Z3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSA9PSBzaG91bGRFeHRlbmQpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UgPSBzaG91bGRF
eHRlbmQ7CisKKyAgICBpZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLnZp
ZXcoKS0+dXBkYXRlRXh0ZW5kQmFja2dyb3VuZElmTmVjZXNzYXJ5KCk7Cit9CisKKyNpZiBVU0Uo
QVZGT1VOREFUSU9OKQordm9pZCBTZXR0aW5nczo6c2V0QVZGb3VuZGF0aW9uRW5hYmxlZChib29s
IGVuYWJsZWQpCit7CisgICAgaWYgKGdBVkZvdW5kYXRpb25FbmFibGVkID09IGVuYWJsZWQpCisg
ICAgICAgIHJldHVybjsKKworICAgIGdBVkZvdW5kYXRpb25FbmFibGVkID0gZW5hYmxlZDsKKyAg
ICBIVE1MTWVkaWFFbGVtZW50OjpyZXNldE1lZGlhRW5naW5lcygpOworfQorCit2b2lkIFNldHRp
bmdzOjpzZXRBVkZvdW5kYXRpb25OU1VSTFNlc3Npb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sK
KyAgICBpZiAoZ0FWRm91bmRhdGlvbk5TVVJMU2Vzc2lvbkVuYWJsZWQgPT0gZW5hYmxlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZ0FWRm91bmRhdGlvbk5TVVJMU2Vzc2lvbkVuYWJsZWQgPSBl
bmFibGVkOworfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShDT0NPQSkKK3ZvaWQgU2V0dGluZ3M6
OnNldFFUS2l0RW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgaWYgKGdRVEtpdEVuYWJsZWQg
PT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ1FUS2l0RW5hYmxlZCA9IGVuYWJs
ZWQ7CisgICAgSFRNTE1lZGlhRWxlbWVudDo6cmVzZXRNZWRpYUVuZ2luZXMoKTsKK30KKyNlbmRp
ZgorCisjaWYgVVNFKEdTVFJFQU1FUikKK3ZvaWQgU2V0dGluZ3M6OnNldEdTdHJlYW1lckVuYWJs
ZWQoYm9vbCBlbmFibGVkKQoreworICAgIGlmIChnR1N0cmVhbWVyRW5hYmxlZCA9PSBlbmFibGVk
KQorICAgICAgICByZXR1cm47CisKKyAgICBnR1N0cmVhbWVyRW5hYmxlZCA9IGVuYWJsZWQ7Cisg
ICAgSFRNTE1lZGlhRWxlbWVudDo6cmVzZXRNZWRpYUVuZ2luZXMoKTsKK30KKyNlbmRpZgorCisj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKK2Jvb2wgU2V0dGluZ3M6Om1vY2tDYXB0dXJlRGV2aWNl
c0VuYWJsZWQoKQoreworICAgIHJldHVybiBnTW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZDsKK30K
Kwordm9pZCBTZXR0aW5nczo6c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZChib29sIGVuYWJs
ZWQpCit7CisgICAgZ01vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQgPSBlbmFibGVkOworICAgIE1v
Y2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzZXRNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNl
bnRlckVuYWJsZWQoZW5hYmxlZCk7Cit9CisKK2Jvb2wgU2V0dGluZ3M6Om1lZGlhQ2FwdHVyZVJl
cXVpcmVzU2VjdXJlQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdNZWRpYUNhcHR1
cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb247Cit9CisKK3ZvaWQgU2V0dGluZ3M6OnNldE1lZGlh
Q2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbihib29sIG1lZGlhQ2FwdHVyZVJlcXVpcmVz
U2VjdXJlQ29ubmVjdGlvbikKK3sKKyAgICBnTWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25u
ZWN0aW9uID0gbWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uOworfQorI2VuZGlm
CisKK3ZvaWQgU2V0dGluZ3M6OnNldFNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQo
Ym9vbCBlbmFibGVkKQoreworICAgIG1fc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxl
ZCA9IGVuYWJsZWQ7CisKKyAgICBpZiAobV9wYWdlICYmIG1fcGFnZS0+bWFpbkZyYW1lKCkudmll
dygpKQorICAgICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+c2V0U2Nyb2xsaW5nUGVy
Zm9ybWFuY2VMb2dnaW5nRW5hYmxlZChlbmFibGVkKTsKK30KKworLy8gSXQncyB2ZXJ5IGltcG9y
dGFudCB0aGF0IHRoaXMgc2V0dGluZyBkb2Vzbid0IGNoYW5nZSBpbiB0aGUgbWlkZGxlIG9mIGEg
ZG9jdW1lbnQncyBsaWZldGltZS4KKy8vIFRoZSBNYWMgcG9ydCB1c2VzIHRoaXMgZmxhZyB3aGVu
IHJlZ2lzdGVyaW5nIGFuZCBkZXJlZ2lzdGVyaW5nIHBsYXRmb3JtLWRlcGVuZGVudCBzY3JvbGxi
YXIKKy8vIG9iamVjdHMuIFRoZXJlZm9yZSwgaWYgdGhpcyBjaGFuZ2VzIGF0IGFuIHVuZXhwZWN0
ZWQgdGltZSwgZGVyZWdpc3RyYXRpb24gbWF5IG5vdCBoYXBwZW4KKy8vIGNvcnJlY3RseSwgd2hp
Y2ggbWF5IGNhdXNlIHRoZSBwbGF0Zm9ybSB0byBmb2xsb3cgZGFuZ2xpbmcgcG9pbnRlcnMuCit2
b2lkIFNldHRpbmdzOjpzZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQoYm9vbCBmbGFnKQoreworICAg
IGdNb2NrU2Nyb2xsYmFyc0VuYWJsZWQgPSBmbGFnOworICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCB1cGRhdGUgc2Nyb2xsIGJhcnMgaW4gZXhpc3RpbmcgcGFnZXMuCit9CisKK2Jvb2wgU2V0dGlu
Z3M6Om1vY2tTY3JvbGxiYXJzRW5hYmxlZCgpCit7CisgICAgcmV0dXJuIGdNb2NrU2Nyb2xsYmFy
c0VuYWJsZWQ7Cit9CisKK3ZvaWQgU2V0dGluZ3M6OnNldFVzZXNPdmVybGF5U2Nyb2xsYmFycyhi
b29sIGZsYWcpCit7CisgICAgZ1VzZXNPdmVybGF5U2Nyb2xsYmFycyA9IGZsYWc7CisgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIHVwZGF0ZSBzY3JvbGwgYmFycyBpbiBleGlzdGluZyBwYWdlcy4K
K30KKworYm9vbCBTZXR0aW5nczo6dXNlc092ZXJsYXlTY3JvbGxiYXJzKCkKK3sKKyAgICByZXR1
cm4gZ1VzZXNPdmVybGF5U2Nyb2xsYmFyczsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0VXNlc01v
Y2tTY3JvbGxBbmltYXRvcihib29sIGZsYWcpCit7CisgICAgZ01vY2tTY3JvbGxBbmltYXRvckVu
YWJsZWQgPSBmbGFnOworfQorCitib29sIFNldHRpbmdzOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9y
KCkKK3sKKyAgICByZXR1cm4gZ01vY2tTY3JvbGxBbmltYXRvckVuYWJsZWQ7Cit9CisKK3ZvaWQg
U2V0dGluZ3M6OnNldFNob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0cmlidXRlU2V0dGVycyhi
b29sIGZsYWcpCit7CisgICAgZ1Nob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0cmlidXRlU2V0
dGVycyA9IGZsYWc7Cit9CisKK2Jvb2wgU2V0dGluZ3M6OnNob3VsZFJlc3BlY3RQcmlvcml0eUlu
Q1NTQXR0cmlidXRlU2V0dGVycygpCit7CisgICAgcmV0dXJuIGdTaG91bGRSZXNwZWN0UHJpb3Jp
dHlJbkNTU0F0dHJpYnV0ZVNldHRlcnM7Cit9CisKK3ZvaWQgU2V0dGluZ3M6OnNldEhpZGRlblBh
Z2VET01UaW1lclRocm90dGxpbmdFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAgICBpZiAobV9oaWRk
ZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZCA9PSBmbGFnKQorICAgICAgICByZXR1cm47
CisgICAgbV9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZCA9IGZsYWc7CisgICAg
aWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5n
U3RhdGVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgU2V0dGluZ3M6OnNldEhpZGRlblBhZ2VET01UaW1l
clRocm90dGxpbmdBdXRvSW5jcmVhc2VzKGJvb2wgZmxhZykKK3sKKyAgICBpZiAobV9oaWRkZW5Q
YWdlRE9NVGltZXJUaHJvdHRsaW5nQXV0b0luY3JlYXNlcyA9PSBmbGFnKQorICAgICAgICByZXR1
cm47CisgICAgbV9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nQXV0b0luY3JlYXNlcyA9IGZs
YWc7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5oaWRkZW5QYWdlRE9NVGltZXJU
aHJvdHRsaW5nU3RhdGVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgU2V0dGluZ3M6OnNldEhpZGRlblBh
Z2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgaWYgKG1f
aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkID09IGZsYWcpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2hpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCA9
IGZsYWc7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5oaWRkZW5QYWdlQ1NTQW5p
bWF0aW9uU3VzcGVuc2lvblN0YXRlQ2hhbmdlZCgpOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRG
b250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMoYm9vbCBwcmVmZXJQaWN0b2dyYXBocykKK3sK
KyAgICBpZiAobV9mb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMgPT0gcHJlZmVyUGljdG9n
cmFwaHMpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZm9udEZhbGxiYWNrUHJlZmVyc1BpY3Rv
Z3JhcGhzID0gcHJlZmVyUGljdG9ncmFwaHM7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9w
YWdlLT5zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKK30KKwordm9pZCBTZXR0aW5n
czo6c2V0TG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQoYm9vbCBmbGFnKQorewor
ICAgIGdMb3dQb3dlclZpZGVvQXVkaW9CdWZmZXJTaXplRW5hYmxlZCA9IGZsYWc7Cit9CisKK3Zv
aWQgU2V0dGluZ3M6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZmxhZykK
K3sKKyAgICBnUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWRFbmFibGVkID0gZmxhZzsKK30K
KworI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgU2V0dGluZ3M6OnNldEF1ZGlvU2Vzc2lvbkNhdGVn
b3J5T3ZlcnJpZGUodW5zaWduZWQgc2Vzc2lvbkNhdGVnb3J5KQoreworICAgIEF1ZGlvU2Vzc2lv
bjo6c2hhcmVkU2Vzc2lvbigpLnNldENhdGVnb3J5T3ZlcnJpZGUoc3RhdGljX2Nhc3Q8QXVkaW9T
ZXNzaW9uOjpDYXRlZ29yeVR5cGU+KHNlc3Npb25DYXRlZ29yeSkpOworfQorCit1bnNpZ25lZCBT
ZXR0aW5nczo6YXVkaW9TZXNzaW9uQ2F0ZWdvcnlPdmVycmlkZSgpCit7CisgICAgcmV0dXJuIEF1
ZGlvU2Vzc2lvbjo6c2hhcmVkU2Vzc2lvbigpLmNhdGVnb3J5T3ZlcnJpZGUoKTsKK30KKwordm9p
ZCBTZXR0aW5nczo6c2V0TmV0d29ya0RhdGFVc2FnZVRyYWNraW5nRW5hYmxlZChib29sIHRyYWNr
aW5nRW5hYmxlZCkKK3sKKyAgICBnTmV0d29ya0RhdGFVc2FnZVRyYWNraW5nRW5hYmxlZCA9IHRy
YWNraW5nRW5hYmxlZDsKK30KKworYm9vbCBTZXR0aW5nczo6bmV0d29ya0RhdGFVc2FnZVRyYWNr
aW5nRW5hYmxlZCgpCit7CisgICAgcmV0dXJuIGdOZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFi
bGVkOworfQorCitzdGF0aWMgU3RyaW5nJiBzaGFyZWROZXR3b3JrSW50ZXJmYWNlTmFtZUdsb2Jh
bCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gbmV0d29ya0ludGVyZmFj
ZU5hbWU7CisgICAgcmV0dXJuIG5ldHdvcmtJbnRlcmZhY2VOYW1lOworfQorCit2b2lkIFNldHRp
bmdzOjpzZXROZXR3b3JrSW50ZXJmYWNlTmFtZShjb25zdCBTdHJpbmcmIG5ldHdvcmtJbnRlcmZh
Y2VOYW1lKQoreworICAgIHNoYXJlZE5ldHdvcmtJbnRlcmZhY2VOYW1lR2xvYmFsKCkgPSBuZXR3
b3JrSW50ZXJmYWNlTmFtZTsKK30KKworY29uc3QgU3RyaW5nJiBTZXR0aW5nczo6bmV0d29ya0lu
dGVyZmFjZU5hbWUoKQoreworICAgIHJldHVybiBzaGFyZWROZXR3b3JrSW50ZXJmYWNlTmFtZUds
b2JhbCgpOworfQorI2VuZGlmCisKK2Jvb2wgU2V0dGluZ3M6Omdsb2JhbENvbnN0UmVkZWNsYXJh
dGlvblNob3VsZFRocm93KCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgcmV0dXJuICFNYWNB
cHBsaWNhdGlvbjo6aXNJQm9va3MoKTsKKyNlbGlmIFBMQVRGT1JNKElPUykKKyAgICByZXR1cm4g
IUlPU0FwcGxpY2F0aW9uOjppc0lCb29rcygpOworI2Vsc2UKKyAgICByZXR1cm4gdHJ1ZTsKKyNl
bmRpZgorfQorCit2b2lkIFNldHRpbmdzOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZShib29s
IGFsbG93QW55U1NMQ2VydGlmaWNhdGUpCit7CisgICAgZ0FsbG93c0FueVNTTENlcnRpZmljYXRl
ID0gYWxsb3dBbnlTU0xDZXJ0aWZpY2F0ZTsKK30KKworYm9vbCBTZXR0aW5nczo6YWxsb3dzQW55
U1NMQ2VydGlmaWNhdGUoKQoreworICAgIHJldHVybiBnQWxsb3dzQW55U1NMQ2VydGlmaWNhdGU7
Cit9CisKKyNpZiAhUExBVEZPUk0oQ09DT0EpCitjb25zdCBTdHJpbmcmIFNldHRpbmdzOjpkZWZh
dWx0TWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQoKQoreworICAgIHJl
dHVybiBlbXB0eVN0cmluZygpOworfQorI2VuZGlmCisKK3ZvaWQgU2V0dGluZ3M6OnNldE1lZGlh
Q29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KGNvbnN0IFN0cmluZyYgY29udGVu
dFR5cGVzKQoreworICAgIG1fbWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBv
cnQuc2hyaW5rKDApOworICAgIGZvciAoYXV0byB0eXBlIDogU3RyaW5nVmlldyhjb250ZW50VHlw
ZXMpLnNwbGl0KCc6JykpCisgICAgICAgIG1fbWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJk
d2FyZVN1cHBvcnQuYXBwZW5kKENvbnRlbnRUeXBlIHsgdHlwZS50b1N0cmluZygpIH0pOworfQor
Cit2b2lkIFNldHRpbmdzOjpzZXRNZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3Vw
cG9ydChjb25zdCBWZWN0b3I8Q29udGVudFR5cGU+JiBjb250ZW50VHlwZXMpCit7CisgICAgbV9t
ZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydCA9IGNvbnRlbnRUeXBlczsK
K30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0
eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuY3BwCShyZXZpc2lvbiAyMjMzMjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
U2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTZXR0aW5nc0Jhc2UuaCIKIAogI2luY2x1ZGUgIkF1ZGlv
U2Vzc2lvbi5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgpAQCAtNDMsNiAr
NDMsNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlQ2FjaGUuaCIKICNpbmNs
dWRlICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgog
I2luY2x1ZGUgIlN0b3JhZ2VNYXAuaCIKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CkBAIC04Myw2OCArODQsNDUgQEAgc3RhdGljIHZvaWQgaW52YWxp
ZGF0ZUFmdGVyR2VuZXJpY0ZhbWlseQogfQogCiAjaWYgVVNFKEFWRk9VTkRBVElPTikKLWJvb2wg
U2V0dGluZ3M6OmdBVkZvdW5kYXRpb25FbmFibGVkID0gdHJ1ZTsKLWJvb2wgU2V0dGluZ3M6OmdB
VkZvdW5kYXRpb25OU1VSTFNlc3Npb25FbmFibGVkID0gdHJ1ZTsKK2Jvb2wgU2V0dGluZ3NCYXNl
OjpnQVZGb3VuZGF0aW9uRW5hYmxlZCA9IHRydWU7Citib29sIFNldHRpbmdzQmFzZTo6Z0FWRm91
bmRhdGlvbk5TVVJMU2Vzc2lvbkVuYWJsZWQgPSB0cnVlOwogI2VuZGlmCiAKICNpZiBQTEFURk9S
TShDT0NPQSkKLWJvb2wgU2V0dGluZ3M6OmdRVEtpdEVuYWJsZWQgPSBmYWxzZTsKK2Jvb2wgU2V0
dGluZ3NCYXNlOjpnUVRLaXRFbmFibGVkID0gZmFsc2U7CiAjZW5kaWYKIAogI2lmIFVTRShHU1RS
RUFNRVIpCi1ib29sIFNldHRpbmdzOjpnR1N0cmVhbWVyRW5hYmxlZCA9IHRydWU7Citib29sIFNl
dHRpbmdzQmFzZTo6Z0dTdHJlYW1lckVuYWJsZWQgPSB0cnVlOwogI2VuZGlmCiAKLWJvb2wgU2V0
dGluZ3M6OmdNb2NrU2Nyb2xsYmFyc0VuYWJsZWQgPSBmYWxzZTsKLWJvb2wgU2V0dGluZ3M6OmdV
c2VzT3ZlcmxheVNjcm9sbGJhcnMgPSBmYWxzZTsKLWJvb2wgU2V0dGluZ3M6OmdNb2NrU2Nyb2xs
QW5pbWF0b3JFbmFibGVkID0gZmFsc2U7Citib29sIFNldHRpbmdzQmFzZTo6Z01vY2tTY3JvbGxi
YXJzRW5hYmxlZCA9IGZhbHNlOworYm9vbCBTZXR0aW5nc0Jhc2U6OmdVc2VzT3ZlcmxheVNjcm9s
bGJhcnMgPSBmYWxzZTsKK2Jvb2wgU2V0dGluZ3NCYXNlOjpnTW9ja1Njcm9sbEFuaW1hdG9yRW5h
YmxlZCA9IGZhbHNlOwogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLWJvb2wgU2V0dGluZ3M6
OmdNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkID0gZmFsc2U7Ci1ib29sIFNldHRpbmdzOjpnTWVk
aWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uID0gdHJ1ZTsKK2Jvb2wgU2V0dGluZ3NC
YXNlOjpnTW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZCA9IGZhbHNlOworYm9vbCBTZXR0aW5nc0Jh
c2U6OmdNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24gPSB0cnVlOwogI2VuZGlm
CiAKICNpZiBQTEFURk9STShXSU4pCi1ib29sIFNldHRpbmdzOjpnU2hvdWxkVXNlSGlnaFJlc29s
dXRpb25UaW1lcnMgPSB0cnVlOworYm9vbCBTZXR0aW5nc0Jhc2U6OmdTaG91bGRVc2VIaWdoUmVz
b2x1dGlvblRpbWVycyA9IHRydWU7CiAjZW5kaWYKICAgICAKLWJvb2wgU2V0dGluZ3M6OmdTaG91
bGRSZXNwZWN0UHJpb3JpdHlJbkNTU0F0dHJpYnV0ZVNldHRlcnMgPSBmYWxzZTsKLWJvb2wgU2V0
dGluZ3M6OmdMb3dQb3dlclZpZGVvQXVkaW9CdWZmZXJTaXplRW5hYmxlZCA9IGZhbHNlOwotYm9v
bCBTZXR0aW5nczo6Z1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkRW5hYmxlZCA9IGZhbHNl
OwotYm9vbCBTZXR0aW5nczo6Z0FsbG93c0FueVNTTENlcnRpZmljYXRlID0gZmFsc2U7Citib29s
IFNldHRpbmdzQmFzZTo6Z1Nob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0cmlidXRlU2V0dGVy
cyA9IGZhbHNlOworYm9vbCBTZXR0aW5nc0Jhc2U6OmdMb3dQb3dlclZpZGVvQXVkaW9CdWZmZXJT
aXplRW5hYmxlZCA9IGZhbHNlOworYm9vbCBTZXR0aW5nc0Jhc2U6OmdSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZEVuYWJsZWQgPSBmYWxzZTsKK2Jvb2wgU2V0dGluZ3NCYXNlOjpnQWxsb3dz
QW55U1NMQ2VydGlmaWNhdGUgPSBmYWxzZTsKIAogI2lmIFBMQVRGT1JNKElPUykKLWJvb2wgU2V0
dGluZ3M6OmdOZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVkID0gZmFsc2U7Ci1ib29sIFNl
dHRpbmdzOjpnQVZLaXRFbmFibGVkID0gZmFsc2U7Ci1ib29sIFNldHRpbmdzOjpnU2hvdWxkT3B0
T3V0T2ZOZXR3b3JrU3RhdGVPYnNlcnZhdGlvbiA9IGZhbHNlOwotI2VuZGlmCi1ib29sIFNldHRp
bmdzOjpnTWFuYWdlQXVkaW9TZXNzaW9uID0gZmFsc2U7Ci1ib29sIFNldHRpbmdzOjpnQ3VzdG9t
UGFzdGVib2FyZERhdGFFbmFibGVkID0gZmFsc2U7Ci0KLS8vIE5PVEVzCi0vLyAgMSkgRWRpdGlu
Z01hY0JlaGF2aW9yIGNvbXByaXNlcyBUaWdlciwgTGVvcGFyZCwgU25vd0xlb3BhcmQgYW5kIGlP
UyBidWlsZHMsIGFzIHdlbGwgYXMgUXRXZWJLaXQgd2hlbiBidWlsdCBvbiBNYWM7Ci0vLyAgMikg
RWRpdGluZ1dpbmRvd3NCZWhhdmlvciBjb21wcmlzZXMgV2luMzIgYnVpbGQ7Ci0vLyAgMykgRWRp
dGluZ1VuaXhCZWhhdmlvciBjb21wcmlzZXMgYWxsIHVuaXgtYmFzZWQgc3lzdGVtcywgYnV0IERh
cndpbi9NYWNPUyAoYW5kIHRoZW4gYWJ1c2luZyB0aGUgdGVybWlub2xvZ3kpOwotLy8gOTkpIE1h
Y0VkaXRpbmdCZWhhdmlvciBpcyB1c2VkIGFzIGEgZmFsbGJhY2suCi1zdGF0aWMgRWRpdGluZ0Jl
aGF2aW9yVHlwZSBlZGl0aW5nQmVoYXZpb3JUeXBlRm9yUGxhdGZvcm0oKQotewotICAgIHJldHVy
bgotI2lmIFBMQVRGT1JNKElPUykKLSAgICBFZGl0aW5nSU9TQmVoYXZpb3IKLSNlbGlmIE9TKERB
UldJTikKLSAgICBFZGl0aW5nTWFjQmVoYXZpb3IKLSNlbGlmIE9TKFdJTkRPV1MpCi0gICAgRWRp
dGluZ1dpbmRvd3NCZWhhdmlvcgotI2VsaWYgT1MoVU5JWCkKLSAgICBFZGl0aW5nVW5peEJlaGF2
aW9yCi0jZWxzZQotICAgIC8vIEZhbGxiYWNrCi0gICAgRWRpdGluZ01hY0JlaGF2aW9yCitib29s
IFNldHRpbmdzQmFzZTo6Z05ldHdvcmtEYXRhVXNhZ2VUcmFja2luZ0VuYWJsZWQgPSBmYWxzZTsK
K2Jvb2wgU2V0dGluZ3NCYXNlOjpnQVZLaXRFbmFibGVkID0gZmFsc2U7Citib29sIFNldHRpbmdz
QmFzZTo6Z1Nob3VsZE9wdE91dE9mTmV0d29ya1N0YXRlT2JzZXJ2YXRpb24gPSBmYWxzZTsKICNl
bmRpZgotICAgIDsKLX0KK2Jvb2wgU2V0dGluZ3NCYXNlOjpnTWFuYWdlQXVkaW9TZXNzaW9uID0g
ZmFsc2U7Citib29sIFNldHRpbmdzQmFzZTo6Z0N1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCA9
IGZhbHNlOwogCi1ib29sIFNldHRpbmdzOjpkZWZhdWx0Q3VzdG9tUGFzdGVib2FyZERhdGFFbmFi
bGVkKCkKK2Jvb2wgU2V0dGluZ3NCYXNlOjpkZWZhdWx0Q3VzdG9tUGFzdGVib2FyZERhdGFFbmFi
bGVkKCkKIHsKICNpZiBQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FM
TE9XRUQgPj0gMTEwMzAwCiAgICAgcmV0dXJuIElPU0FwcGxpY2F0aW9uOjppc01vYmlsZVNhZmFy
aSgpIHx8IGR5bGRfZ2V0X3Byb2dyYW1fc2RrX3ZlcnNpb24oKSA+PSBEWUxEX0lPU19WRVJTSU9O
XzExXzM7CkBAIC0xNTcsNjYgKzEzNSwxOSBAQCBib29sIFNldHRpbmdzOjpkZWZhdWx0Q3VzdG9t
UGFzdGVib2FyZERhCiAjZW5kaWYKIH0KIAotI2lmIFBMQVRGT1JNKENPQ09BKQotc3RhdGljIGNv
bnN0IGJvb2wgZGVmYXVsdFlvdVR1YmVGbGFzaFBsdWdpblJlcGxhY2VtZW50RW5hYmxlZCA9IHRy
dWU7Ci0jZWxzZQotc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdFlvdVR1YmVGbGFzaFBsdWdpblJl
cGxhY2VtZW50RW5hYmxlZCA9IGZhbHNlOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShJT1MpCi1z
dGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0Rml4ZWRCYWNrZ3JvdW5kc1BhaW50UmVsYXRpdmVUb0Rv
Y3VtZW50ID0gdHJ1ZTsKLXN0YXRpYyBjb25zdCBib29sIGRlZmF1bHRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQgPSB0cnVlOwotc3RhdGljIGNvbnN0IGJvb2wg
ZGVmYXVsdEFsbG93c0lubGluZU1lZGlhUGxheWJhY2sgPSBmYWxzZTsKLXN0YXRpYyBjb25zdCBi
b29sIGRlZmF1bHRJbmxpbmVNZWRpYVBsYXliYWNrUmVxdWlyZXNQbGF5c0lubGluZUF0dHJpYnV0
ZSA9IHRydWU7Ci1zdGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0VmlkZW9QbGF5YmFja1JlcXVpcmVz
VXNlckdlc3R1cmUgPSB0cnVlOwotc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdEF1ZGlvUGxheWJh
Y2tSZXF1aXJlc1VzZXJHZXN0dXJlID0gdHJ1ZTsKLXN0YXRpYyBjb25zdCBib29sIGRlZmF1bHRN
ZWRpYURhdGFMb2Fkc0F1dG9tYXRpY2FsbHkgPSBmYWxzZTsKLXN0YXRpYyBjb25zdCBib29sIGRl
ZmF1bHRTaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiA9IHRydWU7Ci1zdGF0aWMgY29uc3Qg
Ym9vbCBkZWZhdWx0SW1hZ2VTdWJzYW1wbGluZ0VuYWJsZWQgPSB0cnVlOwotc3RhdGljIGNvbnN0
IGJvb2wgZGVmYXVsdFNjcm9sbGluZ1RyZWVJbmNsdWRlc0ZyYW1lcyA9IHRydWU7Ci1zdGF0aWMg
Y29uc3QgYm9vbCBkZWZhdWx0TWVkaWFDb250cm9sc1NjYWxlV2l0aFBhZ2Vab29tID0gdHJ1ZTsK
LXN0YXRpYyBjb25zdCBib29sIGRlZmF1bHRRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudEVuYWJs
ZWQgPSB0cnVlOwotI2Vsc2UKLXN0YXRpYyBjb25zdCBib29sIGRlZmF1bHRGaXhlZEJhY2tncm91
bmRzUGFpbnRSZWxhdGl2ZVRvRG9jdW1lbnQgPSBmYWxzZTsKLXN0YXRpYyBjb25zdCBib29sIGRl
ZmF1bHRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQgPSBmYWxz
ZTsKLXN0YXRpYyBjb25zdCBib29sIGRlZmF1bHRBbGxvd3NJbmxpbmVNZWRpYVBsYXliYWNrID0g
dHJ1ZTsKLXN0YXRpYyBjb25zdCBib29sIGRlZmF1bHRJbmxpbmVNZWRpYVBsYXliYWNrUmVxdWly
ZXNQbGF5c0lubGluZUF0dHJpYnV0ZSA9IGZhbHNlOwotc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVs
dFZpZGVvUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlID0gZmFsc2U7Ci1zdGF0aWMgY29uc3Qg
Ym9vbCBkZWZhdWx0QXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUgPSBmYWxzZTsKLXN0
YXRpYyBjb25zdCBib29sIGRlZmF1bHRNZWRpYURhdGFMb2Fkc0F1dG9tYXRpY2FsbHkgPSB0cnVl
Owotc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdFNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9u
ID0gZmFsc2U7Ci1zdGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0SW1hZ2VTdWJzYW1wbGluZ0VuYWJs
ZWQgPSBmYWxzZTsKLXN0YXRpYyBjb25zdCBib29sIGRlZmF1bHRTY3JvbGxpbmdUcmVlSW5jbHVk
ZXNGcmFtZXMgPSBmYWxzZTsKLXN0YXRpYyBjb25zdCBib29sIGRlZmF1bHRNZWRpYUNvbnRyb2xz
U2NhbGVXaXRoUGFnZVpvb20gPSB0cnVlOwotc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdFF1aWNr
VGltZVBsdWdpblJlcGxhY2VtZW50RW5hYmxlZCA9IGZhbHNlOwotI2VuZGlmCi0KLXN0YXRpYyBj
b25zdCBib29sIGRlZmF1bHRSZXF1aXJlc1VzZXJHZXN0dXJlVG9Mb2FkVmlkZW8gPSB0cnVlOwot
Ci1zdGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0QWxsb3dzUGljdHVyZUluUGljdHVyZU1lZGlhUGxh
eWJhY2sgPSB0cnVlOwotCi1zdGF0aWMgY29uc3QgZG91YmxlIGRlZmF1bHRJbmNyZW1lbnRhbFJl
bmRlcmluZ1N1cHByZXNzaW9uVGltZW91dEluU2Vjb25kcyA9IDU7Ci0jaWYgVVNFKFVOSUZJRURf
VEVYVF9DSEVDS0lORykKLXN0YXRpYyBjb25zdCBib29sIGRlZmF1bHRVbmlmaWVkVGV4dENoZWNr
ZXJFbmFibGVkID0gdHJ1ZTsKLSNlbHNlCi1zdGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0VW5pZmll
ZFRleHRDaGVja2VyRW5hYmxlZCA9IGZhbHNlOwotI2VuZGlmCi1zdGF0aWMgY29uc3QgYm9vbCBk
ZWZhdWx0U21hcnRJbnNlcnREZWxldGVFbmFibGVkID0gdHJ1ZTsKLXN0YXRpYyBjb25zdCBib29s
IGRlZmF1bHRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkID0gZmFsc2U7CiAKIC8vIFRo
aXMgYW1vdW50IG9mIHRpbWUgbXVzdCBoYXZlIGVsYXBzZWQgYmVmb3JlIHdlIHdpbGwgZXZlbiBj
b25zaWRlciBzY2hlZHVsaW5nIGEgbGF5b3V0IHdpdGhvdXQgYSBkZWxheS4KIC8vIEZJWE1FOiBG
b3IgZmFzdGVyIG1hY2hpbmVzIHRoaXMgdmFsdWUgY2FuIHJlYWxseSBiZSBsb3dlcmVkIHRvIDIw
MC4gMjUwIGlzIGFkZXF1YXRlLCBidXQgYSBsaXR0bGUgaGlnaAogLy8gZm9yIGR1YWwgRzVzLiA6
KQogc3RhdGljIGNvbnN0IFNlY29uZHMgbGF5b3V0U2NoZWR1bGVUaHJlc2hvbGQgPSAyNTBfbXM7
CiAKLVNldHRpbmdzOjpTZXR0aW5ncyhQYWdlKiBwYWdlKQorU2V0dGluZ3NCYXNlOjpTZXR0aW5n
c0Jhc2UoUGFnZSogcGFnZSkKICAgICA6IG1fcGFnZShudWxscHRyKQogICAgICwgbV9tZWRpYVR5
cGVPdmVycmlkZSgic2NyZWVuIikKICAgICAsIG1fZm9udEdlbmVyaWNGYW1pbGllcyhzdGQ6Om1h
a2VfdW5pcXVlPEZvbnRHZW5lcmljRmFtaWxpZXM+KCkpCiAgICAgLCBtX3N0b3JhZ2VCbG9ja2lu
Z1BvbGljeShTZWN1cml0eU9yaWdpbjo6QWxsb3dBbGxTdG9yYWdlKQogICAgICwgbV9sYXlvdXRJ
bnRlcnZhbChsYXlvdXRTY2hlZHVsZVRocmVzaG9sZCkKICAgICAsIG1fbWluaW11bURPTVRpbWVy
SW50ZXJ2YWwoRE9NVGltZXI6OmRlZmF1bHRNaW5pbXVtSW50ZXJ2YWwoKSkKLSAgICBTRVRUSU5H
U19JTklUSUFMSVpFUl9MSVNUCiAgICAgLCBtX2lzSmF2YUVuYWJsZWQoZmFsc2UpCiAgICAgLCBt
X2lzSmF2YUVuYWJsZWRGb3JMb2NhbEZpbGVzKHRydWUpCiAgICAgLCBtX2xvYWRzSW1hZ2VzQXV0
b21hdGljYWxseShmYWxzZSkKQEAgLTIzNSw3ICsxNjYsNyBAQCBTZXR0aW5nczo6U2V0dGluZ3Mo
UGFnZSogcGFnZSkKICNlbmRpZgogICAgICwgbV9zY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdF
bmFibGVkKGZhbHNlKQogICAgICwgbV90aW1lV2l0aG91dE1vdXNlTW92ZW1lbnRCZWZvcmVIaWRp
bmdDb250cm9scygzX3MpCi0gICAgLCBtX3NldEltYWdlTG9hZGluZ1NldHRpbmdzVGltZXIoKnRo
aXMsICZTZXR0aW5nczo6aW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lckZpcmVkKQorICAgICwgbV9z
ZXRJbWFnZUxvYWRpbmdTZXR0aW5nc1RpbWVyKCp0aGlzLCAmU2V0dGluZ3NCYXNlOjppbWFnZUxv
YWRpbmdTZXR0aW5nc1RpbWVyRmlyZWQpCiAgICAgLCBtX2hpZGRlblBhZ2VET01UaW1lclRocm90
dGxpbmdFbmFibGVkKGZhbHNlKQogICAgICwgbV9oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVu
c2lvbkVuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2ZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXBo
cyhmYWxzZSkKQEAgLTI0OCwxMjEgKzE3OSwxMTQgQEAgU2V0dGluZ3M6OlNldHRpbmdzKFBhZ2Uq
IHBhZ2UpCiAgICAgbV9wYWdlID0gcGFnZTsgLy8gUGFnZSBpcyBub3QgeWV0IGZ1bGx5IGluaXRp
YWxpemVkIHdoZW4gY29uc3RydWN0aW5nIFNldHRpbmdzLCBzbyBrZWVwaW5nIG1fcGFnZSBudWxs
IG92ZXIgaW5pdGlhbGl6ZURlZmF1bHRGb250RmFtaWxpZXMoKSBjYWxsLgogfQogCi1TZXR0aW5n
czo6flNldHRpbmdzKCkKLXsKLX0KLQotUmVmPFNldHRpbmdzPiBTZXR0aW5nczo6Y3JlYXRlKFBh
Z2UqIHBhZ2UpCitTZXR0aW5nc0Jhc2U6On5TZXR0aW5nc0Jhc2UoKQogewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFNldHRpbmdzKHBhZ2UpKTsKIH0KIAotU0VUVElOR1NfU0VUVEVSX0JPRElF
UwotCiAjaWYgIVBMQVRGT1JNKENPQ09BKQotdm9pZCBTZXR0aW5nczo6aW5pdGlhbGl6ZURlZmF1
bHRGb250RmFtaWxpZXMoKQordm9pZCBTZXR0aW5nc0Jhc2U6OmluaXRpYWxpemVEZWZhdWx0Rm9u
dEZhbWlsaWVzKCkKIHsKICAgICAvLyBPdGhlciBwbGF0Zm9ybXMgY2FuIHNldCB1cCBmb250cyBm
cm9tIGEgY2xpZW50LCBidXQgb24gTWFjLCB3ZSB3YW50IGl0IGluIFdlYkNvcmUgdG8gc2hhcmUg
Y29kZSBiZXR3ZWVuIFdlYktpdDEgYW5kIFdlYktpdDIuCiB9CiAjZW5kaWYKIAotY29uc3QgQXRv
bWljU3RyaW5nJiBTZXR0aW5nczo6c3RhbmRhcmRGb250RmFtaWx5KFVTY3JpcHRDb2RlIHNjcmlw
dCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgU2V0dGluZ3NCYXNlOjpzdGFuZGFyZEZvbnRG
YW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAogewogICAgIHJldHVybiBtX2ZvbnRHZW5l
cmljRmFtaWxpZXMtPnN0YW5kYXJkRm9udEZhbWlseShzY3JpcHQpOwogfQogCi12b2lkIFNldHRp
bmdzOjpzZXRTdGFuZGFyZEZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVT
Y3JpcHRDb2RlIHNjcmlwdCkKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRTdGFuZGFyZEZvbnRGYW1p
bHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDb2RlIHNjcmlwdCkKIHsKICAg
ICBib29sIGNoYW5nZXMgPSBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNldFN0YW5kYXJkRm9udEZh
bWlseShmYW1pbHksIHNjcmlwdCk7CiAgICAgaWYgKGNoYW5nZXMpCiAgICAgICAgIGludmFsaWRh
dGVBZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKIH0KIAotY29uc3QgQXRvbWljU3Ry
aW5nJiBTZXR0aW5nczo6Zml4ZWRGb250RmFtaWx5KFVTY3JpcHRDb2RlIHNjcmlwdCkgY29uc3QK
K2NvbnN0IEF0b21pY1N0cmluZyYgU2V0dGluZ3NCYXNlOjpmaXhlZEZvbnRGYW1pbHkoVVNjcmlw
dENvZGUgc2NyaXB0KSBjb25zdAogewogICAgIHJldHVybiBtX2ZvbnRHZW5lcmljRmFtaWxpZXMt
PmZpeGVkRm9udEZhbWlseShzY3JpcHQpOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRGaXhlZEZv
bnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDb2RlIHNjcmlwdCkK
K3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRGaXhlZEZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5n
JiBmYW1pbHksIFVTY3JpcHRDb2RlIHNjcmlwdCkKIHsKICAgICBib29sIGNoYW5nZXMgPSBtX2Zv
bnRHZW5lcmljRmFtaWxpZXMtPnNldEZpeGVkRm9udEZhbWlseShmYW1pbHksIHNjcmlwdCk7CiAg
ICAgaWYgKGNoYW5nZXMpCiAgICAgICAgIGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFu
Z2UobV9wYWdlKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nczo6c2VyaWZGb250
RmFtaWx5KFVTY3JpcHRDb2RlIHNjcmlwdCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgU2V0
dGluZ3NCYXNlOjpzZXJpZkZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAogewog
ICAgIHJldHVybiBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNlcmlmRm9udEZhbWlseShzY3JpcHQp
OwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRTZXJpZkZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3Ry
aW5nJiBmYW1pbHksIFVTY3JpcHRDb2RlIHNjcmlwdCkKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRT
ZXJpZkZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDb2RlIHNj
cmlwdCkKIHsKICAgICBib29sIGNoYW5nZXMgPSBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNldFNl
cmlmRm9udEZhbWlseShmYW1pbHksIHNjcmlwdCk7CiAgICAgaWYgKGNoYW5nZXMpCiAgICAgICAg
IGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKIH0KIAotY29uc3Qg
QXRvbWljU3RyaW5nJiBTZXR0aW5nczo6c2Fuc1NlcmlmRm9udEZhbWlseShVU2NyaXB0Q29kZSBz
Y3JpcHQpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIFNldHRpbmdzQmFzZTo6c2Fuc1Nlcmlm
Rm9udEZhbWlseShVU2NyaXB0Q29kZSBzY3JpcHQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZm9u
dEdlbmVyaWNGYW1pbGllcy0+c2Fuc1NlcmlmRm9udEZhbWlseShzY3JpcHQpOwogfQogCi12b2lk
IFNldHRpbmdzOjpzZXRTYW5zU2VyaWZGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0U2Fuc1Nlcmlm
Rm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgVVNjcmlwdENvZGUgc2NyaXB0
KQogewogICAgIGJvb2wgY2hhbmdlcyA9IG1fZm9udEdlbmVyaWNGYW1pbGllcy0+c2V0U2Fuc1Nl
cmlmRm9udEZhbWlseShmYW1pbHksIHNjcmlwdCk7CiAgICAgaWYgKGNoYW5nZXMpCiAgICAgICAg
IGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKIH0KIAotY29uc3Qg
QXRvbWljU3RyaW5nJiBTZXR0aW5nczo6Y3Vyc2l2ZUZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2Ny
aXB0KSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nc0Jhc2U6OmN1cnNpdmVGb250
RmFtaWx5KFVTY3JpcHRDb2RlIHNjcmlwdCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9mb250R2Vu
ZXJpY0ZhbWlsaWVzLT5jdXJzaXZlRm9udEZhbWlseShzY3JpcHQpOwogfQogCi12b2lkIFNldHRp
bmdzOjpzZXRDdXJzaXZlRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgVVNj
cmlwdENvZGUgc2NyaXB0KQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldEN1cnNpdmVGb250RmFtaWx5
KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCiB7CiAgICAg
Ym9vbCBjaGFuZ2VzID0gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zZXRDdXJzaXZlRm9udEZhbWls
eShmYW1pbHksIHNjcmlwdCk7CiAgICAgaWYgKGNoYW5nZXMpCiAgICAgICAgIGludmFsaWRhdGVB
ZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5n
JiBTZXR0aW5nczo6ZmFudGFzeUZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAor
Y29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nc0Jhc2U6OmZhbnRhc3lGb250RmFtaWx5KFVTY3Jp
cHRDb2RlIHNjcmlwdCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9mb250R2VuZXJpY0ZhbWlsaWVz
LT5mYW50YXN5Rm9udEZhbWlseShzY3JpcHQpOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRGYW50
YXN5Rm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgVVNjcmlwdENvZGUgc2Ny
aXB0KQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldEZhbnRhc3lGb250RmFtaWx5KGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCiB7CiAgICAgYm9vbCBjaGFuZ2Vz
ID0gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zZXRGYW50YXN5Rm9udEZhbWlseShmYW1pbHksIHNj
cmlwdCk7CiAgICAgaWYgKGNoYW5nZXMpCiAgICAgICAgIGludmFsaWRhdGVBZnRlckdlbmVyaWNG
YW1pbHlDaGFuZ2UobV9wYWdlKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nczo6
cGljdG9ncmFwaEZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAorY29uc3QgQXRv
bWljU3RyaW5nJiBTZXR0aW5nc0Jhc2U6OnBpY3RvZ3JhcGhGb250RmFtaWx5KFVTY3JpcHRDb2Rl
IHNjcmlwdCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5waWN0
b2dyYXBoRm9udEZhbWlseShzY3JpcHQpOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRQaWN0b2dy
YXBoRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgVVNjcmlwdENvZGUgc2Ny
aXB0KQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldFBpY3RvZ3JhcGhGb250RmFtaWx5KGNvbnN0IEF0
b21pY1N0cmluZyYgZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCiB7CiAgICAgYm9vbCBjaGFu
Z2VzID0gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zZXRQaWN0b2dyYXBoRm9udEZhbWlseShmYW1p
bHksIHNjcmlwdCk7CiAgICAgaWYgKGNoYW5nZXMpCiAgICAgICAgIGludmFsaWRhdGVBZnRlckdl
bmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKIH0KIAotZmxvYXQgU2V0dGluZ3M6OmRlZmF1bHRN
aW5pbXVtWm9vbUZvbnRTaXplKCkKK2Zsb2F0IFNldHRpbmdzQmFzZTo6ZGVmYXVsdE1pbmltdW1a
b29tRm9udFNpemUoKQogewogICAgIHJldHVybiAxNTsKIH0KIAogI2lmICFQTEFURk9STShJT1Mp
Ci1ib29sIFNldHRpbmdzOjpkZWZhdWx0VGV4dEF1dG9zaXppbmdFbmFibGVkKCkKK2Jvb2wgU2V0
dGluZ3NCYXNlOjpkZWZhdWx0VGV4dEF1dG9zaXppbmdFbmFibGVkKCkKIHsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAjZW5kaWYKIAotdm9pZCBTZXR0aW5nczo6c2V0TWVkaWFUeXBlT3ZlcnJpZGUo
Y29uc3QgU3RyaW5nJiBtZWRpYVR5cGVPdmVycmlkZSkKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRN
ZWRpYVR5cGVPdmVycmlkZShjb25zdCBTdHJpbmcmIG1lZGlhVHlwZU92ZXJyaWRlKQogewogICAg
IGlmIChtX21lZGlhVHlwZU92ZXJyaWRlID09IG1lZGlhVHlwZU92ZXJyaWRlKQogICAgICAgICBy
ZXR1cm47CkBAIC0zNzksNyArMzAzLDcgQEAgdm9pZCBTZXR0aW5nczo6c2V0TWVkaWFUeXBlT3Zl
cnJpZGUoY29ucwogICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7
CiB9CiAKLXZvaWQgU2V0dGluZ3M6OnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShib29sIGxv
YWRzSW1hZ2VzQXV0b21hdGljYWxseSkKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRMb2Fkc0ltYWdl
c0F1dG9tYXRpY2FsbHkoYm9vbCBsb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkpCiB7CiAgICAgbV9s
b2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkgPSBsb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHk7CiAgICAg
CkBAIC0zOTMsMTIgKzMxNywxMiBAQCB2b2lkIFNldHRpbmdzOjpzZXRMb2Fkc0ltYWdlc0F1dG9t
YXRpY2FsCiAgICAgbV9zZXRJbWFnZUxvYWRpbmdTZXR0aW5nc1RpbWVyLnN0YXJ0T25lU2hvdCgw
X3MpOwogfQogCi12b2lkIFNldHRpbmdzOjppbWFnZUxvYWRpbmdTZXR0aW5nc1RpbWVyRmlyZWQo
KQordm9pZCBTZXR0aW5nc0Jhc2U6OmltYWdlTG9hZGluZ1NldHRpbmdzVGltZXJGaXJlZCgpCiB7
CiAgICAgc2V0SW1hZ2VMb2FkaW5nU2V0dGluZ3MobV9wYWdlKTsKIH0KIAotdm9pZCBTZXR0aW5n
czo6c2V0U2NyaXB0RW5hYmxlZChib29sIGlzU2NyaXB0RW5hYmxlZCkKK3ZvaWQgU2V0dGluZ3NC
YXNlOjpzZXRTY3JpcHRFbmFibGVkKGJvb2wgaXNTY3JpcHRFbmFibGVkKQogewogICAgIGlmICht
X2lzU2NyaXB0RW5hYmxlZCA9PSBpc1NjcmlwdEVuYWJsZWQpCiAgICAgICAgIHJldHVybjsKQEAg
LTQxMywxNyArMzM3LDE3IEBAIHZvaWQgU2V0dGluZ3M6OnNldFNjcmlwdEVuYWJsZWQoYm9vbCBp
c1MKICNlbmRpZgogfQogCi12b2lkIFNldHRpbmdzOjpzZXRKYXZhRW5hYmxlZChib29sIGlzSmF2
YUVuYWJsZWQpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0SmF2YUVuYWJsZWQoYm9vbCBpc0phdmFF
bmFibGVkKQogewogICAgIG1faXNKYXZhRW5hYmxlZCA9IGlzSmF2YUVuYWJsZWQ7CiB9CiAKLXZv
aWQgU2V0dGluZ3M6OnNldEphdmFFbmFibGVkRm9yTG9jYWxGaWxlcyhib29sIGlzSmF2YUVuYWJs
ZWRGb3JMb2NhbEZpbGVzKQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldEphdmFFbmFibGVkRm9yTG9j
YWxGaWxlcyhib29sIGlzSmF2YUVuYWJsZWRGb3JMb2NhbEZpbGVzKQogewogICAgIG1faXNKYXZh
RW5hYmxlZEZvckxvY2FsRmlsZXMgPSBpc0phdmFFbmFibGVkRm9yTG9jYWxGaWxlczsKIH0KIAot
dm9pZCBTZXR0aW5nczo6c2V0SW1hZ2VzRW5hYmxlZChib29sIGFyZUltYWdlc0VuYWJsZWQpCit2
b2lkIFNldHRpbmdzQmFzZTo6c2V0SW1hZ2VzRW5hYmxlZChib29sIGFyZUltYWdlc0VuYWJsZWQp
CiB7CiAgICAgbV9hcmVJbWFnZXNFbmFibGVkID0gYXJlSW1hZ2VzRW5hYmxlZDsKIApAQCAtNDMx
LDI5ICszNTUsMTcgQEAgdm9pZCBTZXR0aW5nczo6c2V0SW1hZ2VzRW5hYmxlZChib29sIGFyZQog
ICAgIG1fc2V0SW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKIH0K
IAotdm9pZCBTZXR0aW5nczo6c2V0UHJlZmVyTUlNRVR5cGVGb3JJbWFnZXMoYm9vbCBwcmVmZXJN
SU1FVHlwZUZvckltYWdlcykKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRQcmVmZXJNSU1FVHlwZUZv
ckltYWdlcyhib29sIHByZWZlck1JTUVUeXBlRm9ySW1hZ2VzKQogewogICAgIG1fcHJlZmVyTUlN
RVR5cGVGb3JJbWFnZXMgPSBwcmVmZXJNSU1FVHlwZUZvckltYWdlczsKIH0KIAotdm9pZCBTZXR0
aW5nczo6c2V0Rm9yY2VQZW5kaW5nV2ViR0xQb2xpY3koYm9vbCBmb3JjZWQpCit2b2lkIFNldHRp
bmdzQmFzZTo6c2V0Rm9yY2VQZW5kaW5nV2ViR0xQb2xpY3koYm9vbCBmb3JjZWQpCiB7CiAgICAg
bV9mb3JjZVBlbmRpbmdXZWJHTFBvbGljeSA9IGZvcmNlZDsKIH0KIAotRnJhbWVGbGF0dGVuaW5n
IFNldHRpbmdzOjplZmZlY3RpdmVGcmFtZUZsYXR0ZW5pbmcoKQotewotI2lmIFBMQVRGT1JNKElP
UykKLSAgICAvLyBPbiBpT1Mgd2hlbiBhc3luYyBmcmFtZSBzY3JvbGxpbmcgaXMgZW5hYmxlZCwg
aXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byB1c2UgZnVsbCBmcmFtZSBmbGF0dGVuaW5nLgotICAg
IC8vIEluIHRoYXQgY2FzZSwgd2UganVzdCBjb25zaWRlciB0aGF0IGZyYW1lIGZsYXR0ZW5pbmcg
aXMgZGlzYWJsZWQuIFRoaXMgYWxsb3dzIHBlb3BsZSB0byB0ZXN0Ci0gICAgLy8gZnJhbWUgc2Ny
b2xsaW5nIG9uIGlPUyBieSBlbmFibGluZyAiQXN5bmMgRnJhbWUgU2Nyb2xsaW5nIiB2aWEgdGhl
IFNhZmFyaSBtZW51LgotICAgIGlmIChhc3luY0ZyYW1lU2Nyb2xsaW5nRW5hYmxlZCgpICYmIGZy
YW1lRmxhdHRlbmluZygpID09IEZyYW1lRmxhdHRlbmluZ0Z1bGx5RW5hYmxlZCkKLSAgICAgICAg
cmV0dXJuIEZyYW1lRmxhdHRlbmluZ0Rpc2FibGVkOwotI2VuZGlmCi0gICAgcmV0dXJuIGZyYW1l
RmxhdHRlbmluZygpOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRQbHVnaW5zRW5hYmxlZChib29s
IGFyZVBsdWdpbnNFbmFibGVkKQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldFBsdWdpbnNFbmFibGVk
KGJvb2wgYXJlUGx1Z2luc0VuYWJsZWQpCiB7CiAgICAgaWYgKG1fYXJlUGx1Z2luc0VuYWJsZWQg
PT0gYXJlUGx1Z2luc0VuYWJsZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTQ2Miw3ICszNzQsNyBA
QCB2b2lkIFNldHRpbmdzOjpzZXRQbHVnaW5zRW5hYmxlZChib29sIGFyCiAgICAgUGFnZTo6cmVm
cmVzaFBsdWdpbnMoZmFsc2UpOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRVc2VyU3R5bGVTaGVl
dExvY2F0aW9uKGNvbnN0IFVSTCYgdXNlclN0eWxlU2hlZXRMb2NhdGlvbikKK3ZvaWQgU2V0dGlu
Z3NCYXNlOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGNvbnN0IFVSTCYgdXNlclN0eWxlU2hl
ZXRMb2NhdGlvbikKIHsKICAgICBpZiAobV91c2VyU3R5bGVTaGVldExvY2F0aW9uID09IHVzZXJT
dHlsZVNoZWV0TG9jYXRpb24pCiAgICAgICAgIHJldHVybjsKQEAgLTQ3NSwxMiArMzg3LDEyIEBA
IHZvaWQgU2V0dGluZ3M6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24KIAogLy8gRklYTUU6IFRo
aXMgcXVpcmsgaXMgbmVlZGVkIGJlY2F1c2Ugb2YgUmFkYXIgNDY3NDUzNyBhbmQgNTIxMTI3MS4g
V2UgbmVlZCB0byBwaGFzZSBpdCBvdXQgb25jZSBBZG9iZQogLy8gY2FuIGZpeCB0aGUgYnVnIGZy
b20gdGhlaXIgZW5kLgotdm9pZCBTZXR0aW5nczo6c2V0TmVlZHNBZG9iZUZyYW1lUmVsb2FkaW5n
UXVpcmsoYm9vbCBzaG91bGROb3RSZWxvYWRJRnJhbWVzRm9yVW5jaGFuZ2VkU1JDKQordm9pZCBT
ZXR0aW5nc0Jhc2U6OnNldE5lZWRzQWRvYmVGcmFtZVJlbG9hZGluZ1F1aXJrKGJvb2wgc2hvdWxk
Tm90UmVsb2FkSUZyYW1lc0ZvclVuY2hhbmdlZFNSQykKIHsKICAgICBtX25lZWRzQWRvYmVGcmFt
ZVJlbG9hZGluZ1F1aXJrID0gc2hvdWxkTm90UmVsb2FkSUZyYW1lc0ZvclVuY2hhbmdlZFNSQzsK
IH0KIAotdm9pZCBTZXR0aW5nczo6c2V0TWluaW11bURPTVRpbWVySW50ZXJ2YWwoU2Vjb25kcyBp
bnRlcnZhbCkKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRNaW5pbXVtRE9NVGltZXJJbnRlcnZhbChT
ZWNvbmRzIGludGVydmFsKQogewogICAgIGF1dG8gb2xkVGltZXJJbnRlcnZhbCA9IHN0ZDo6ZXhj
aGFuZ2UobV9taW5pbXVtRE9NVGltZXJJbnRlcnZhbCwgaW50ZXJ2YWwpOwogCkBAIC00OTMsMTQg
KzQwNSwxNCBAQCB2b2lkIFNldHRpbmdzOjpzZXRNaW5pbXVtRE9NVGltZXJJbnRlcnZhCiAgICAg
fQogfQogCi12b2lkIFNldHRpbmdzOjpzZXRMYXlvdXRJbnRlcnZhbChTZWNvbmRzIGxheW91dElu
dGVydmFsKQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldExheW91dEludGVydmFsKFNlY29uZHMgbGF5
b3V0SW50ZXJ2YWwpCiB7CiAgICAgLy8gRklYTUU6IEl0IHNlZW1zIHdlaXJkIHRoYXQgdGhpcyBm
dW5jdGlvbiBtYXkgZGlzcmVnYXJkIHRoZSBzcGVjaWZpZWQgbGF5b3V0IGludGVydmFsLgogICAg
IC8vIFdlIHNob3VsZCBlaXRoZXIgZXhwb3NlIGxheW91dFNjaGVkdWxlVGhyZXNob2xkIG9yIGJl
dHRlciBjb21tdW5pY2F0ZSB0aGlzIGludmFyaWFudC4KICAgICBtX2xheW91dEludGVydmFsID0g
c3RkOjptYXgobGF5b3V0SW50ZXJ2YWwsIGxheW91dFNjaGVkdWxlVGhyZXNob2xkKTsKIH0KIAot
dm9pZCBTZXR0aW5nczo6c2V0VXNlc1BhZ2VDYWNoZShib29sIHVzZXNQYWdlQ2FjaGUpCit2b2lk
IFNldHRpbmdzQmFzZTo6c2V0VXNlc1BhZ2VDYWNoZShib29sIHVzZXNQYWdlQ2FjaGUpCiB7CiAg
ICAgaWYgKG1fdXNlc1BhZ2VDYWNoZSA9PSB1c2VzUGFnZUNhY2hlKQogICAgICAgICByZXR1cm47
CkBAIC01MTQsNyArNDI2LDcgQEAgdm9pZCBTZXR0aW5nczo6c2V0VXNlc1BhZ2VDYWNoZShib29s
IHVzZQogICAgICAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnBydW5lVG9TaXplTm93KDAsIFBy
dW5pbmdSZWFzb246Ok5vbmUpOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRGb250UmVuZGVyaW5n
TW9kZShGb250UmVuZGVyaW5nTW9kZSBtb2RlKQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldEZvbnRS
ZW5kZXJpbmdNb2RlKEZvbnRSZW5kZXJpbmdNb2RlIG1vZGUpCiB7CiAgICAgaWYgKGZvbnRSZW5k
ZXJpbmdNb2RlKCkgPT0gbW9kZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTIzLDEyICs0MzUsMTIg
QEAgdm9pZCBTZXR0aW5nczo6c2V0Rm9udFJlbmRlcmluZ01vZGUoRm9udAogICAgICAgICBtX3Bh
Z2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOwogfQogCi1Gb250UmVuZGVyaW5n
TW9kZSBTZXR0aW5nczo6Zm9udFJlbmRlcmluZ01vZGUoKSBjb25zdAorRm9udFJlbmRlcmluZ01v
ZGUgU2V0dGluZ3NCYXNlOjpmb250UmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEZvbnRSZW5kZXJpbmdNb2RlPihtX2ZvbnRSZW5kZXJpbmdNb2RlKTsKIH0K
IAotdm9pZCBTZXR0aW5nczo6c2V0RE5TUHJlZmV0Y2hpbmdFbmFibGVkKGJvb2wgZG5zUHJlZmV0
Y2hpbmdFbmFibGVkKQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldEROU1ByZWZldGNoaW5nRW5hYmxl
ZChib29sIGRuc1ByZWZldGNoaW5nRW5hYmxlZCkKIHsKICAgICBpZiAobV9kbnNQcmVmZXRjaGlu
Z0VuYWJsZWQgPT0gZG5zUHJlZmV0Y2hpbmdFbmFibGVkKQogICAgICAgICByZXR1cm47CkBAIC01
MzgsNyArNDUwLDcgQEAgdm9pZCBTZXR0aW5nczo6c2V0RE5TUHJlZmV0Y2hpbmdFbmFibGVkKAog
ICAgICAgICBtX3BhZ2UtPmRuc1ByZWZldGNoaW5nU3RhdGVDaGFuZ2VkKCk7CiB9CiAKLXZvaWQg
U2V0dGluZ3M6OnNldFNob3dUaWxlZFNjcm9sbGluZ0luZGljYXRvcihib29sIGVuYWJsZWQpCit2
b2lkIFNldHRpbmdzQmFzZTo6c2V0U2hvd1RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yKGJvb2wgZW5h
YmxlZCkKIHsKICAgICBpZiAobV9zaG93VGlsZWRTY3JvbGxpbmdJbmRpY2F0b3IgPT0gZW5hYmxl
ZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNTQ3LDcgKzQ1OSw3IEBAIHZvaWQgU2V0dGluZ3M6OnNl
dFNob3dUaWxlZFNjcm9sbGluZ0luZGkKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkK
LXZvaWQgU2V0dGluZ3M6OnNldFJlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZShib29sIHZpc2li
bGUpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0UmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlKGJv
b2wgdmlzaWJsZSkKIHsKICAgICBpZiAobV9yZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGUgPT0g
dmlzaWJsZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTU5LDEzICs0NzEsMTMgQEAgdm9pZCBTZXR0
aW5nczo6c2V0UmVzb3VyY2VVc2FnZU92ZXJsYXlWaQogI2VuZGlmCiAKICNpZiBQTEFURk9STShX
SU4pCi12b2lkIFNldHRpbmdzOjpzZXRTaG91bGRVc2VIaWdoUmVzb2x1dGlvblRpbWVycyhib29s
IHNob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzKQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldFNo
b3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzKGJvb2wgc2hvdWxkVXNlSGlnaFJlc29sdXRpb25U
aW1lcnMpCiB7CiAgICAgZ1Nob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzID0gc2hvdWxkVXNl
SGlnaFJlc29sdXRpb25UaW1lcnM7CiB9CiAjZW5kaWYKIAotdm9pZCBTZXR0aW5nczo6c2V0U3Rv
cmFnZUJsb2NraW5nUG9saWN5KFNlY3VyaXR5T3JpZ2luOjpTdG9yYWdlQmxvY2tpbmdQb2xpY3kg
ZW5hYmxlZCkKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRTdG9yYWdlQmxvY2tpbmdQb2xpY3koU2Vj
dXJpdHlPcmlnaW46OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSBlbmFibGVkKQogewogICAgIGlmICht
X3N0b3JhZ2VCbG9ja2luZ1BvbGljeSA9PSBlbmFibGVkKQogICAgICAgICByZXR1cm47CkBAIC01
NzUsNyArNDg3LDcgQEAgdm9pZCBTZXR0aW5nczo6c2V0U3RvcmFnZUJsb2NraW5nUG9saWN5KAog
ICAgICAgICBtX3BhZ2UtPnN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZCgpOwogfQogCi12b2lk
IFNldHRpbmdzOjpzZXRCYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZShib29sIHNob3Vs
ZEV4dGVuZCkKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRCYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5
b25kUGFnZShib29sIHNob3VsZEV4dGVuZCkKIHsKICAgICBpZiAobV9iYWNrZ3JvdW5kU2hvdWxk
RXh0ZW5kQmV5b25kUGFnZSA9PSBzaG91bGRFeHRlbmQpCiAgICAgICAgIHJldHVybjsKQEAgLTU4
Nyw3ICs0OTksNyBAQCB2b2lkIFNldHRpbmdzOjpzZXRCYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kCiB9
CiAKICNpZiBVU0UoQVZGT1VOREFUSU9OKQotdm9pZCBTZXR0aW5nczo6c2V0QVZGb3VuZGF0aW9u
RW5hYmxlZChib29sIGVuYWJsZWQpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0QVZGb3VuZGF0aW9u
RW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgaWYgKGdBVkZvdW5kYXRpb25FbmFibGVkID09
IGVuYWJsZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTU5Niw3ICs1MDgsNyBAQCB2b2lkIFNldHRp
bmdzOjpzZXRBVkZvdW5kYXRpb25FbmFibGVkKGJvCiAgICAgSFRNTE1lZGlhRWxlbWVudDo6cmVz
ZXRNZWRpYUVuZ2luZXMoKTsKIH0KIAotdm9pZCBTZXR0aW5nczo6c2V0QVZGb3VuZGF0aW9uTlNV
UkxTZXNzaW9uRW5hYmxlZChib29sIGVuYWJsZWQpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0QVZG
b3VuZGF0aW9uTlNVUkxTZXNzaW9uRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgaWYgKGdB
VkZvdW5kYXRpb25OU1VSTFNlc3Npb25FbmFibGVkID09IGVuYWJsZWQpCiAgICAgICAgIHJldHVy
bjsKQEAgLTYwNiw3ICs1MTgsNyBAQCB2b2lkIFNldHRpbmdzOjpzZXRBVkZvdW5kYXRpb25OU1VS
TFNlc3NpCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENPQ09BKQotdm9pZCBTZXR0aW5nczo6c2V0
UVRLaXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRRVEtpdEVu
YWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIGlmIChnUVRLaXRFbmFibGVkID09IGVuYWJsZWQp
CiAgICAgICAgIHJldHVybjsKQEAgLTYxNyw3ICs1MjksNyBAQCB2b2lkIFNldHRpbmdzOjpzZXRR
VEtpdEVuYWJsZWQoYm9vbCBlbmFiCiAjZW5kaWYKIAogI2lmIFVTRShHU1RSRUFNRVIpCi12b2lk
IFNldHRpbmdzOjpzZXRHU3RyZWFtZXJFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3ZvaWQgU2V0dGlu
Z3NCYXNlOjpzZXRHU3RyZWFtZXJFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBpZiAoZ0dT
dHJlYW1lckVuYWJsZWQgPT0gZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNjI4LDI5ICs1
NDAsMjkgQEAgdm9pZCBTZXR0aW5nczo6c2V0R1N0cmVhbWVyRW5hYmxlZChib29sIAogI2VuZGlm
CiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotYm9vbCBTZXR0aW5nczo6bW9ja0NhcHR1cmVE
ZXZpY2VzRW5hYmxlZCgpCitib29sIFNldHRpbmdzQmFzZTo6bW9ja0NhcHR1cmVEZXZpY2VzRW5h
YmxlZCgpCiB7CiAgICAgcmV0dXJuIGdNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkOwogfQogCi12
b2lkIFNldHRpbmdzOjpzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkKGJvb2wgZW5hYmxlZCkK
K3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkKGJvb2wgZW5h
YmxlZCkKIHsKICAgICBnTW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZCA9IGVuYWJsZWQ7CiAgICAg
TW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNldE1vY2tSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyRW5hYmxlZChlbmFibGVkKTsKIH0KIAotYm9vbCBTZXR0aW5nczo6bWVkaWFDYXB0dXJl
UmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKCkgY29uc3QKK2Jvb2wgU2V0dGluZ3NCYXNlOjptZWRp
YUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oKSBjb25zdAogewogICAgIHJldHVybiBn
TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uOwogfQogCi12b2lkIFNldHRpbmdz
OjpzZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oYm9vbCBtZWRpYUNhcHR1
cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24pCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0TWVkaWFD
YXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKGJvb2wgbWVkaWFDYXB0dXJlUmVxdWlyZXNT
ZWN1cmVDb25uZWN0aW9uKQogewogICAgIGdNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5l
Y3Rpb24gPSBtZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb247CiB9CiAjZW5kaWYK
IAotdm9pZCBTZXR0aW5nczo6c2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChi
b29sIGVuYWJsZWQpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VM
b2dnaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgbV9zY3JvbGxpbmdQZXJmb3JtYW5j
ZUxvZ2dpbmdFbmFibGVkID0gZW5hYmxlZDsKIApAQCAtNjYyLDQ5ICs1NzQsNDkgQEAgdm9pZCBT
ZXR0aW5nczo6c2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VMbwogLy8gVGhlIE1hYyBwb3J0IHVzZXMg
dGhpcyBmbGFnIHdoZW4gcmVnaXN0ZXJpbmcgYW5kIGRlcmVnaXN0ZXJpbmcgcGxhdGZvcm0tZGVw
ZW5kZW50IHNjcm9sbGJhcgogLy8gb2JqZWN0cy4gVGhlcmVmb3JlLCBpZiB0aGlzIGNoYW5nZXMg
YXQgYW4gdW5leHBlY3RlZCB0aW1lLCBkZXJlZ2lzdHJhdGlvbiBtYXkgbm90IGhhcHBlbgogLy8g
Y29ycmVjdGx5LCB3aGljaCBtYXkgY2F1c2UgdGhlIHBsYXRmb3JtIHRvIGZvbGxvdyBkYW5nbGlu
ZyBwb2ludGVycy4KLXZvaWQgU2V0dGluZ3M6OnNldE1vY2tTY3JvbGxiYXJzRW5hYmxlZChib29s
IGZsYWcpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKGJvb2wg
ZmxhZykKIHsKICAgICBnTW9ja1Njcm9sbGJhcnNFbmFibGVkID0gZmxhZzsKICAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgdXBkYXRlIHNjcm9sbCBiYXJzIGluIGV4aXN0aW5nIHBhZ2VzLgogfQog
Ci1ib29sIFNldHRpbmdzOjptb2NrU2Nyb2xsYmFyc0VuYWJsZWQoKQorYm9vbCBTZXR0aW5nc0Jh
c2U6Om1vY2tTY3JvbGxiYXJzRW5hYmxlZCgpCiB7CiAgICAgcmV0dXJuIGdNb2NrU2Nyb2xsYmFy
c0VuYWJsZWQ7CiB9CiAKLXZvaWQgU2V0dGluZ3M6OnNldFVzZXNPdmVybGF5U2Nyb2xsYmFycyhi
b29sIGZsYWcpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0VXNlc092ZXJsYXlTY3JvbGxiYXJzKGJv
b2wgZmxhZykKIHsKICAgICBnVXNlc092ZXJsYXlTY3JvbGxiYXJzID0gZmxhZzsKICAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgdXBkYXRlIHNjcm9sbCBiYXJzIGluIGV4aXN0aW5nIHBhZ2VzLgog
fQogCi1ib29sIFNldHRpbmdzOjp1c2VzT3ZlcmxheVNjcm9sbGJhcnMoKQorYm9vbCBTZXR0aW5n
c0Jhc2U6OnVzZXNPdmVybGF5U2Nyb2xsYmFycygpCiB7CiAgICAgcmV0dXJuIGdVc2VzT3Zlcmxh
eVNjcm9sbGJhcnM7CiB9CiAKLXZvaWQgU2V0dGluZ3M6OnNldFVzZXNNb2NrU2Nyb2xsQW5pbWF0
b3IoYm9vbCBmbGFnKQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldFVzZXNNb2NrU2Nyb2xsQW5pbWF0
b3IoYm9vbCBmbGFnKQogewogICAgIGdNb2NrU2Nyb2xsQW5pbWF0b3JFbmFibGVkID0gZmxhZzsK
IH0KIAotYm9vbCBTZXR0aW5nczo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpCitib29sIFNldHRp
bmdzQmFzZTo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpCiB7CiAgICAgcmV0dXJuIGdNb2NrU2Ny
b2xsQW5pbWF0b3JFbmFibGVkOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRTaG91bGRSZXNwZWN0
UHJpb3JpdHlJbkNTU0F0dHJpYnV0ZVNldHRlcnMoYm9vbCBmbGFnKQordm9pZCBTZXR0aW5nc0Jh
c2U6OnNldFNob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0cmlidXRlU2V0dGVycyhib29sIGZs
YWcpCiB7CiAgICAgZ1Nob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0cmlidXRlU2V0dGVycyA9
IGZsYWc7CiB9CiAKLWJvb2wgU2V0dGluZ3M6OnNob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0
cmlidXRlU2V0dGVycygpCitib29sIFNldHRpbmdzQmFzZTo6c2hvdWxkUmVzcGVjdFByaW9yaXR5
SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzKCkKIHsKICAgICByZXR1cm4gZ1Nob3VsZFJlc3BlY3RQcmlv
cml0eUluQ1NTQXR0cmlidXRlU2V0dGVyczsKIH0KIAotdm9pZCBTZXR0aW5nczo6c2V0SGlkZGVu
UGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQoYm9vbCBmbGFnKQordm9pZCBTZXR0aW5nc0Jh
c2U6OnNldEhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVkKGJvb2wgZmxhZykKIHsK
ICAgICBpZiAobV9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZCA9PSBmbGFnKQog
ICAgICAgICByZXR1cm47CkBAIC03MTMsNyArNjI1LDcgQEAgdm9pZCBTZXR0aW5nczo6c2V0SGlk
ZGVuUGFnZURPTVRpbWVyVGhybwogICAgICAgICBtX3BhZ2UtPmhpZGRlblBhZ2VET01UaW1lclRo
cm90dGxpbmdTdGF0ZUNoYW5nZWQoKTsKIH0KIAotdm9pZCBTZXR0aW5nczo6c2V0SGlkZGVuUGFn
ZURPTVRpbWVyVGhyb3R0bGluZ0F1dG9JbmNyZWFzZXMoYm9vbCBmbGFnKQordm9pZCBTZXR0aW5n
c0Jhc2U6OnNldEhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2VzKGJvb2wg
ZmxhZykKIHsKICAgICBpZiAobV9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nQXV0b0luY3Jl
YXNlcyA9PSBmbGFnKQogICAgICAgICByZXR1cm47CkBAIC03MjIsNyArNjM0LDcgQEAgdm9pZCBT
ZXR0aW5nczo6c2V0SGlkZGVuUGFnZURPTVRpbWVyVGhybwogICAgICAgICBtX3BhZ2UtPmhpZGRl
blBhZ2VET01UaW1lclRocm90dGxpbmdTdGF0ZUNoYW5nZWQoKTsKIH0KIAotdm9pZCBTZXR0aW5n
czo6c2V0SGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKGJvb2wgZmxhZykK
K3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRIaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVu
YWJsZWQoYm9vbCBmbGFnKQogewogICAgIGlmIChtX2hpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNw
ZW5zaW9uRW5hYmxlZCA9PSBmbGFnKQogICAgICAgICByZXR1cm47CkBAIC03MzEsNyArNjQzLDcg
QEAgdm9pZCBTZXR0aW5nczo6c2V0SGlkZGVuUGFnZUNTU0FuaW1hdGlvbgogICAgICAgICBtX3Bh
Z2UtPmhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uU3RhdGVDaGFuZ2VkKCk7CiB9CiAK
LXZvaWQgU2V0dGluZ3M6OnNldEZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXBocyhib29sIHBy
ZWZlclBpY3RvZ3JhcGhzKQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldEZvbnRGYWxsYmFja1ByZWZl
cnNQaWN0b2dyYXBocyhib29sIHByZWZlclBpY3RvZ3JhcGhzKQogewogICAgIGlmIChtX2ZvbnRG
YWxsYmFja1ByZWZlcnNQaWN0b2dyYXBocyA9PSBwcmVmZXJQaWN0b2dyYXBocykKICAgICAgICAg
cmV0dXJuOwpAQCAtNzQxLDMzICs2NTMsMzMgQEAgdm9pZCBTZXR0aW5nczo6c2V0Rm9udEZhbGxi
YWNrUHJlZmVyc1BpYwogICAgICAgICBtX3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZy
YW1lcygpOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRMb3dQb3dlclZpZGVvQXVkaW9CdWZmZXJT
aXplRW5hYmxlZChib29sIGZsYWcpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0TG93UG93ZXJWaWRl
b0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQoYm9vbCBmbGFnKQogewogICAgIGdMb3dQb3dlclZpZGVv
QXVkaW9CdWZmZXJTaXplRW5hYmxlZCA9IGZsYWc7CiB9CiAKLXZvaWQgU2V0dGluZ3M6OnNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZmxhZykKK3ZvaWQgU2V0dGluZ3NCYXNl
OjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sIGZsYWcpCiB7CiAgICAgZ1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkRW5hYmxlZCA9IGZsYWc7CiB9CiAKICNpZiBQTEFU
Rk9STShJT1MpCi12b2lkIFNldHRpbmdzOjpzZXRBdWRpb1Nlc3Npb25DYXRlZ29yeU92ZXJyaWRl
KHVuc2lnbmVkIHNlc3Npb25DYXRlZ29yeSkKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRBdWRpb1Nl
c3Npb25DYXRlZ29yeU92ZXJyaWRlKHVuc2lnbmVkIHNlc3Npb25DYXRlZ29yeSkKIHsKICAgICBB
dWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24oKS5zZXRDYXRlZ29yeU92ZXJyaWRlKHN0YXRpY19j
YXN0PEF1ZGlvU2Vzc2lvbjo6Q2F0ZWdvcnlUeXBlPihzZXNzaW9uQ2F0ZWdvcnkpKTsKIH0KIAot
dW5zaWduZWQgU2V0dGluZ3M6OmF1ZGlvU2Vzc2lvbkNhdGVnb3J5T3ZlcnJpZGUoKQordW5zaWdu
ZWQgU2V0dGluZ3NCYXNlOjphdWRpb1Nlc3Npb25DYXRlZ29yeU92ZXJyaWRlKCkKIHsKICAgICBy
ZXR1cm4gQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuY2F0ZWdvcnlPdmVycmlkZSgpOwog
fQogCi12b2lkIFNldHRpbmdzOjpzZXROZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVkKGJv
b2wgdHJhY2tpbmdFbmFibGVkKQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldE5ldHdvcmtEYXRhVXNh
Z2VUcmFja2luZ0VuYWJsZWQoYm9vbCB0cmFja2luZ0VuYWJsZWQpCiB7CiAgICAgZ05ldHdvcmtE
YXRhVXNhZ2VUcmFja2luZ0VuYWJsZWQgPSB0cmFja2luZ0VuYWJsZWQ7CiB9CiAKLWJvb2wgU2V0
dGluZ3M6Om5ldHdvcmtEYXRhVXNhZ2VUcmFja2luZ0VuYWJsZWQoKQorYm9vbCBTZXR0aW5nc0Jh
c2U6Om5ldHdvcmtEYXRhVXNhZ2VUcmFja2luZ0VuYWJsZWQoKQogewogICAgIHJldHVybiBnTmV0
d29ya0RhdGFVc2FnZVRyYWNraW5nRW5hYmxlZDsKIH0KQEAgLTc3OCwxOCArNjkwLDE4IEBAIHN0
YXRpYyBTdHJpbmcmIHNoYXJlZE5ldHdvcmtJbnRlcmZhY2VOYW0KICAgICByZXR1cm4gbmV0d29y
a0ludGVyZmFjZU5hbWU7CiB9CiAKLXZvaWQgU2V0dGluZ3M6OnNldE5ldHdvcmtJbnRlcmZhY2VO
YW1lKGNvbnN0IFN0cmluZyYgbmV0d29ya0ludGVyZmFjZU5hbWUpCit2b2lkIFNldHRpbmdzQmFz
ZTo6c2V0TmV0d29ya0ludGVyZmFjZU5hbWUoY29uc3QgU3RyaW5nJiBuZXR3b3JrSW50ZXJmYWNl
TmFtZSkKIHsKICAgICBzaGFyZWROZXR3b3JrSW50ZXJmYWNlTmFtZUdsb2JhbCgpID0gbmV0d29y
a0ludGVyZmFjZU5hbWU7CiB9CiAKLWNvbnN0IFN0cmluZyYgU2V0dGluZ3M6Om5ldHdvcmtJbnRl
cmZhY2VOYW1lKCkKK2NvbnN0IFN0cmluZyYgU2V0dGluZ3NCYXNlOjpuZXR3b3JrSW50ZXJmYWNl
TmFtZSgpCiB7CiAgICAgcmV0dXJuIHNoYXJlZE5ldHdvcmtJbnRlcmZhY2VOYW1lR2xvYmFsKCk7
CiB9CiAjZW5kaWYKIAotYm9vbCBTZXR0aW5nczo6Z2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hv
dWxkVGhyb3coKQorYm9vbCBTZXR0aW5nc0Jhc2U6Omdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNo
b3VsZFRocm93KCkKIHsKICNpZiBQTEFURk9STShNQUMpCiAgICAgcmV0dXJuICFNYWNBcHBsaWNh
dGlvbjo6aXNJQm9va3MoKTsKQEAgLTgwMCwzNCArNzEyLDMzIEBAIGJvb2wgU2V0dGluZ3M6Omds
b2JhbENvbnN0UmVkZWNsYXJhdGlvblMKICNlbmRpZgogfQogCi12b2lkIFNldHRpbmdzOjpzZXRB
bGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZShib29sIGFsbG93QW55U1NMQ2VydGlmaWNhdGUpCit2b2lk
IFNldHRpbmdzQmFzZTo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoYm9vbCBhbGxvd0FueVNT
TENlcnRpZmljYXRlKQogewogICAgIGdBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSA9IGFsbG93QW55
U1NMQ2VydGlmaWNhdGU7CiB9CiAKLWJvb2wgU2V0dGluZ3M6OmFsbG93c0FueVNTTENlcnRpZmlj
YXRlKCkKK2Jvb2wgU2V0dGluZ3NCYXNlOjphbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSgpCiB7CiAg
ICAgcmV0dXJuIGdBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZTsKIH0KIAogI2lmICFQTEFURk9STShD
T0NPQSkKLWNvbnN0IFN0cmluZyYgU2V0dGluZ3M6OmRlZmF1bHRNZWRpYUNvbnRlbnRUeXBlc1Jl
cXVpcmluZ0hhcmR3YXJlU3VwcG9ydCgpCitjb25zdCBTdHJpbmcmIFNldHRpbmdzQmFzZTo6ZGVm
YXVsdE1lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KCkKIHsKICAgICBy
ZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KICNlbmRpZgogCi12b2lkIFNldHRpbmdzOjpzZXRNZWRp
YUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydChjb25zdCBTdHJpbmcmIGNvbnRl
bnRUeXBlcykKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRNZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmlu
Z0hhcmR3YXJlU3VwcG9ydChjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlcykKIHsKICAgICBtX21l
ZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0LnNocmluaygwKTsKICAgICBm
b3IgKGF1dG8gdHlwZSA6IFN0cmluZ1ZpZXcoY29udGVudFR5cGVzKS5zcGxpdCgnOicpKQogICAg
ICAgICBtX21lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0LmFwcGVuZChD
b250ZW50VHlwZSB7IHR5cGUudG9TdHJpbmcoKSB9KTsKIH0KIAotdm9pZCBTZXR0aW5nczo6c2V0
TWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQoY29uc3QgVmVjdG9yPENv
bnRlbnRUeXBlPiYgY29udGVudFR5cGVzKQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldE1lZGlhQ29u
dGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KGNvbnN0IFZlY3RvcjxDb250ZW50VHlw
ZT4mIGNvbnRlbnRUeXBlcykKIHsKICAgICBtX21lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFy
ZHdhcmVTdXBwb3J0ID0gY29udGVudFR5cGVzOwogfQogCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuaAkocmV2aXNpb24gMjIzMzI4KQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmg6MjIzMzI4KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICAgICAgICAgICAoQykgMjAwNiBHcmFoYW0gRGVubmlzIChncmFoYW0uZGVu
bmlzQGdtYWlsLmNvbSkKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2xpcGJvYXJkQWNjZXNzUG9saWN5LmgiCisj
aW5jbHVkZSAiQ29udGVudFR5cGUuaCIKKyNpbmNsdWRlICJFZGl0aW5nQmVoYXZpb3JUeXBlcy5o
IgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2lu
Y2x1ZGUgIlNldHRpbmdzTWFjcm9zLmgiCisjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCisjaW5jbHVk
ZSAiVGltZXIuaCIKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlICJXcml0aW5nTW9kZS5oIgor
I2luY2x1ZGUgPHJ1bnRpbWUvUnVudGltZUZsYWdzLmg+CisjaW5jbHVkZSA8dW5pY29kZS91c2Ny
aXB0Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KKworI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKyNp
bmNsdWRlICJEYXRhRGV0ZWN0aW9uLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBGb250R2VuZXJpY0ZhbWlsaWVzOworY2xhc3MgUGFnZTsKKworZW51bSBFZGl0YWJs
ZUxpbmtCZWhhdmlvciB7CisgICAgRWRpdGFibGVMaW5rRGVmYXVsdEJlaGF2aW9yLAorICAgIEVk
aXRhYmxlTGlua0Fsd2F5c0xpdmUsCisgICAgRWRpdGFibGVMaW5rT25seUxpdmVXaXRoU2hpZnRL
ZXksCisgICAgRWRpdGFibGVMaW5rTGl2ZVdoZW5Ob3RGb2N1c2VkLAorICAgIEVkaXRhYmxlTGlu
a05ldmVyTGl2ZQorfTsKKworZW51bSBUZXh0RGlyZWN0aW9uU3VibWVudUluY2x1c2lvbkJlaGF2
aW9yIHsKKyAgICBUZXh0RGlyZWN0aW9uU3VibWVudU5ldmVySW5jbHVkZWQsCisgICAgVGV4dERp
cmVjdGlvblN1Ym1lbnVBdXRvbWF0aWNhbGx5SW5jbHVkZWQsCisgICAgVGV4dERpcmVjdGlvblN1
Ym1lbnVBbHdheXNJbmNsdWRlZAorfTsKKworZW51bSBEZWJ1Z092ZXJsYXlSZWdpb25GbGFncyB7
CisgICAgTm9uRmFzdFNjcm9sbGFibGVSZWdpb24gPSAxIDw8IDAsCisgICAgV2hlZWxFdmVudEhh
bmRsZXJSZWdpb24gPSAxIDw8IDEsCit9OworCitlbnVtIGNsYXNzIFVzZXJJbnRlcmZhY2VEaXJl
Y3Rpb25Qb2xpY3kgeworICAgIENvbnRlbnQsCisgICAgU3lzdGVtCit9OworCitlbnVtIFBERklt
YWdlQ2FjaGluZ1BvbGljeSB7CisgICAgUERGSW1hZ2VDYWNoaW5nRW5hYmxlZCwKKyAgICBQREZJ
bWFnZUNhY2hpbmdCZWxvd01lbW9yeUxpbWl0LAorICAgIFBERkltYWdlQ2FjaGluZ0Rpc2FibGVk
LAorICAgIFBERkltYWdlQ2FjaGluZ0NsaXBCb3VuZHNPbmx5LAorI2lmIFBMQVRGT1JNKElPUykK
KyAgICBQREZJbWFnZUNhY2hpbmdEZWZhdWx0ID0gUERGSW1hZ2VDYWNoaW5nQmVsb3dNZW1vcnlM
aW1pdAorI2Vsc2UKKyAgICBQREZJbWFnZUNhY2hpbmdEZWZhdWx0ID0gUERGSW1hZ2VDYWNoaW5n
RW5hYmxlZAorI2VuZGlmCit9OworCitlbnVtIEZyYW1lRmxhdHRlbmluZyB7CisgICAgRnJhbWVG
bGF0dGVuaW5nRGlzYWJsZWQsCisgICAgRnJhbWVGbGF0dGVuaW5nRW5hYmxlZEZvck5vbkZ1bGxT
Y3JlZW5JRnJhbWVzLAorICAgIEZyYW1lRmxhdHRlbmluZ0Z1bGx5RW5hYmxlZAorfTsKKwordHlw
ZWRlZiB1bnNpZ25lZCBEZWJ1Z092ZXJsYXlSZWdpb25zOworCitjbGFzcyBTZXR0aW5ncyA6IHB1
YmxpYyBSZWZDb3VudGVkPFNldHRpbmdzPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2V0
dGluZ3MpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PFNldHRpbmdzPiBjcmVhdGUoUGFnZSopOworICAgIH5TZXR0aW5ncygpOworCisgICAgdm9pZCBw
YWdlRGVzdHJveWVkKCkgeyBtX3BhZ2UgPSBudWxscHRyOyB9CisKKyAgICBlbnVtIGNsYXNzIEZv
bnRMb2FkVGltaW5nT3ZlcnJpZGUgeyBOb25lLCBCbG9jaywgU3dhcCwgRmFpbHVyZSB9OworCisg
ICAgZW51bSBjbGFzcyBGb3JjZWRBY2Nlc3NpYmlsaXR5VmFsdWUgeyBTeXN0ZW0sIE9uLCBPZmYg
fTsKKyAgICBzdGF0aWMgY29uc3QgU2V0dGluZ3M6OkZvcmNlZEFjY2Vzc2liaWxpdHlWYWx1ZSBk
ZWZhdWx0Rm9yY2VkQ29sb3JzQXJlSW52ZXJ0ZWRBY2Nlc3NpYmlsaXR5VmFsdWUgPSBGb3JjZWRB
Y2Nlc3NpYmlsaXR5VmFsdWU6OlN5c3RlbTsKKyAgICBzdGF0aWMgY29uc3QgU2V0dGluZ3M6OkZv
cmNlZEFjY2Vzc2liaWxpdHlWYWx1ZSBkZWZhdWx0Rm9yY2VkRGlzcGxheUlzTW9ub2Nocm9tZUFj
Y2Vzc2liaWxpdHlWYWx1ZSA9IEZvcmNlZEFjY2Vzc2liaWxpdHlWYWx1ZTo6U3lzdGVtOworICAg
IHN0YXRpYyBjb25zdCBTZXR0aW5nczo6Rm9yY2VkQWNjZXNzaWJpbGl0eVZhbHVlIGRlZmF1bHRG
b3JjZWRQcmVmZXJzUmVkdWNlZE1vdGlvbkFjY2Vzc2liaWxpdHlWYWx1ZSA9IEZvcmNlZEFjY2Vz
c2liaWxpdHlWYWx1ZTo6U3lzdGVtOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdGFu
ZGFyZEZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVVNjcmlwdENvZGUgPSBVU0NSSVBU
X0NPTU1PTik7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQXRvbWljU3RyaW5nJiBzdGFuZGFy
ZEZvbnRGYW1pbHkoVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTikgY29uc3Q7CisKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpeGVkRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcm
LCBVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25z
dCBBdG9taWNTdHJpbmcmIGZpeGVkRm9udEZhbWlseShVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09N
TU9OKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2VyaWZGb250RmFtaWx5
KGNvbnN0IEF0b21pY1N0cmluZyYsIFVTY3JpcHRDb2RlID0gVVNDUklQVF9DT01NT04pOworICAg
IFdFQkNPUkVfRVhQT1JUIGNvbnN0IEF0b21pY1N0cmluZyYgc2VyaWZGb250RmFtaWx5KFVTY3Jp
cHRDb2RlID0gVVNDUklQVF9DT01NT04pIGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRTYW5zU2VyaWZGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFVTY3JpcHRDb2Rl
ID0gVVNDUklQVF9DT01NT04pOworICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEF0b21pY1N0cmlu
ZyYgc2Fuc1NlcmlmRm9udEZhbWlseShVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKSBjb25z
dDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q3Vyc2l2ZUZvbnRGYW1pbHkoY29uc3Qg
QXRvbWljU3RyaW5nJiwgVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTik7CisgICAgV0VCQ09S
RV9FWFBPUlQgY29uc3QgQXRvbWljU3RyaW5nJiBjdXJzaXZlRm9udEZhbWlseShVU2NyaXB0Q29k
ZSA9IFVTQ1JJUFRfQ09NTU9OKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
RmFudGFzeUZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVVNjcmlwdENvZGUgPSBVU0NS
SVBUX0NPTU1PTik7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQXRvbWljU3RyaW5nJiBmYW50
YXN5Rm9udEZhbWlseShVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKSBjb25zdDsKKworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UGljdG9ncmFwaEZvbnRGYW1pbHkoY29uc3QgQXRvbWlj
U3RyaW5nJiwgVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTik7CisgICAgV0VCQ09SRV9FWFBP
UlQgY29uc3QgQXRvbWljU3RyaW5nJiBwaWN0b2dyYXBoRm9udEZhbWlseShVU2NyaXB0Q29kZSA9
IFVTQ1JJUFRfQ09NTU9OKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29s
IGRlZmF1bHRUZXh0QXV0b3NpemluZ0VuYWJsZWQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgZmxvYXQgZGVmYXVsdE1pbmltdW1ab29tRm9udFNpemUoKTsKKworICAgIC8vIE9ubHkgc2V0
IGJ5IExheW91dCBUZXN0cy4KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1lZGlhVHlwZU92
ZXJyaWRlKGNvbnN0IFN0cmluZyYpOworICAgIGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlT3ZlcnJp
ZGUoKSBjb25zdCB7IHJldHVybiBtX21lZGlhVHlwZU92ZXJyaWRlOyB9CisKKyAgICAvLyBVbmxp
a2UgYXJlSW1hZ2VzRW5hYmxlZCwgdGhpcyBvbmx5IHN1cHByZXNzZXMgdGhlIG5ldHdvcmsgbG9h
ZCBvZgorICAgIC8vIHRoZSBpbWFnZSBVUkwuICBBIGNhY2hlZCBpbWFnZSB3aWxsIHN0aWxsIGJl
IHJlbmRlcmVkIGlmIHJlcXVlc3RlZC4KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExvYWRz
SW1hZ2VzQXV0b21hdGljYWxseShib29sKTsKKyAgICBib29sIGxvYWRzSW1hZ2VzQXV0b21hdGlj
YWxseSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5OyB9CisKKyAg
ICAvLyBDbGllbnRzIHRoYXQgZXhlY3V0ZSBzY3JpcHQgc2hvdWxkIGNhbGwgU2NyaXB0Q29udHJv
bGxlcjo6Y2FuRXhlY3V0ZVNjcmlwdHMoKQorICAgIC8vIGluc3RlYWQgb2YgdGhpcyBmdW5jdGlv
bi4gU2NyaXB0Q29udHJvbGxlcjo6Y2FuRXhlY3V0ZVNjcmlwdHMoKSBjaGVja3MgdGhlCisgICAg
Ly8gSFRNTCBzYW5kYm94LCBwbHVnLWluIHNhbmRib3hpbmcsIGFuZCBvdGhlciBpbXBvcnRhbnQg
ZGV0YWlscy4KKyAgICBib29sIGlzU2NyaXB0RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNT
Y3JpcHRFbmFibGVkOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTY3JpcHRFbmFibGVk
KGJvb2wpOworCisgICAgU0VUVElOR1NfR0VUVEVSU19BTkRfU0VUVEVSUworCisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRKYXZhRW5hYmxlZChib29sKTsKKyAgICBib29sIGlzSmF2YUVuYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzSmF2YUVuYWJsZWQ7IH0KKworICAgIC8vIFRoaXMgc2V0
dGluZ3MgaXMgb25seSBjb25zdWx0ZWQgaWYgaXNKYXZhRW5hYmxlZCgpIHJldHVybnMgdHJ1ZTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEphdmFFbmFibGVkRm9yTG9jYWxGaWxlcyhib29s
KTsKKyAgICBib29sIGlzSmF2YUVuYWJsZWRGb3JMb2NhbEZpbGVzKCkgY29uc3QgeyByZXR1cm4g
bV9pc0phdmFFbmFibGVkRm9yTG9jYWxGaWxlczsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRJbWFnZXNFbmFibGVkKGJvb2wpOworICAgIGJvb2wgYXJlSW1hZ2VzRW5hYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fYXJlSW1hZ2VzRW5hYmxlZDsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRQcmVmZXJNSU1FVHlwZUZvckltYWdlcyhib29sKTsKKyAgICBib29sIHByZWZlck1J
TUVUeXBlRm9ySW1hZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVmZXJNSU1FVHlwZUZvckltYWdl
czsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRQbHVnaW5zRW5hYmxlZChib29sKTsK
KyAgICBib29sIGFyZVBsdWdpbnNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hcmVQbHVnaW5z
RW5hYmxlZDsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRETlNQcmVmZXRjaGluZ0Vu
YWJsZWQoYm9vbCk7CisgICAgYm9vbCBkbnNQcmVmZXRjaGluZ0VuYWJsZWQoKSBjb25zdCB7IHJl
dHVybiBtX2Ruc1ByZWZldGNoaW5nRW5hYmxlZDsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGNvbnN0IFVSTCYpOworICAgIGNvbnN0IFVSTCYg
dXNlclN0eWxlU2hlZXRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdXNlclN0eWxlU2hlZXRM
b2NhdGlvbjsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXROZWVkc0Fkb2JlRnJhbWVS
ZWxvYWRpbmdRdWlyayhib29sKTsKKyAgICBib29sIG5lZWRzQWNyb2JhdEZyYW1lUmVsb2FkaW5n
UXVpcmsoKSBjb25zdCB7IHJldHVybiBtX25lZWRzQWRvYmVGcmFtZVJlbG9hZGluZ1F1aXJrOyB9
CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1pbmltdW1ET01UaW1lckludGVydmFsKFNl
Y29uZHMpOyAvLyBJbml0aWFsaXplZCB0byBET01UaW1lcjo6ZGVmYXVsdE1pbmltdW1JbnRlcnZh
bCgpLgorICAgIFNlY29uZHMgbWluaW11bURPTVRpbWVySW50ZXJ2YWwoKSBjb25zdCB7IHJldHVy
biBtX21pbmltdW1ET01UaW1lckludGVydmFsOyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldExheW91dEludGVydmFsKFNlY29uZHMpOworICAgIFNlY29uZHMgbGF5b3V0SW50ZXJ2YWwo
KSBjb25zdCB7IHJldHVybiBtX2xheW91dEludGVydmFsOyB9CisKKyAgICBib29sIGhpZGRlblBh
Z2VET01UaW1lclRocm90dGxpbmdFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9oaWRkZW5QYWdl
RE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZDsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQoYm9vbCk7CisgICAgYm9vbCBoaWRk
ZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nQXV0b0luY3JlYXNlcygpIGNvbnN0IHsgcmV0dXJuIG1f
aGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0F1dG9JbmNyZWFzZXM7IH0KKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldEhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2Vz
KGJvb2wpOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRVc2VzUGFnZUNhY2hlKGJvb2wp
OworICAgIGJvb2wgdXNlc1BhZ2VDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc1BhZ2VDYWNo
ZTsgfQorICAgICAgICAKKyAgICB2b2lkIHNldEZvbnRSZW5kZXJpbmdNb2RlKEZvbnRSZW5kZXJp
bmdNb2RlIG1vZGUpOworICAgIEZvbnRSZW5kZXJpbmdNb2RlIGZvbnRSZW5kZXJpbmdNb2RlKCkg
Y29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNob3dUaWxlZFNjcm9sbGluZ0lu
ZGljYXRvcihib29sKTsKKyAgICBib29sIHNob3dUaWxlZFNjcm9sbGluZ0luZGljYXRvcigpIGNv
bnN0IHsgcmV0dXJuIG1fc2hvd1RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yOyB9CisKKyNpZiBFTkFC
TEUoUkVTT1VSQ0VfVVNBR0UpCisgICAgYm9vbCByZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGUo
KSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZTsgfQorICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0UmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlKGJvb2wpOwor
I2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisgICAgc3RhdGljIHZvaWQgc2V0U2hvdWxkVXNl
SGlnaFJlc29sdXRpb25UaW1lcnMoYm9vbCk7CisgICAgc3RhdGljIGJvb2wgc2hvdWxkVXNlSGln
aFJlc29sdXRpb25UaW1lcnMoKSB7IHJldHVybiBnU2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1l
cnM7IH0KKyNlbmRpZgorCisgICAgc3RhdGljIGJvb2wgaXNQb3N0TG9hZENQVVVzYWdlTWVhc3Vy
ZW1lbnRFbmFibGVkKCk7CisgICAgc3RhdGljIGJvb2wgaXNQb3N0QmFja2dyb3VuZGluZ0NQVVVz
YWdlTWVhc3VyZW1lbnRFbmFibGVkKCk7CisgICAgc3RhdGljIGJvb2wgaXNQZXJBY3Rpdml0eVN0
YXRlQ1BVVXNhZ2VNZWFzdXJlbWVudEVuYWJsZWQoKTsKKworICAgIHN0YXRpYyBib29sIGlzUG9z
dExvYWRNZW1vcnlVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpOworICAgIHN0YXRpYyBib29sIGlz
UG9zdEJhY2tncm91bmRpbmdNZW1vcnlVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpOworCisgICAg
c3RhdGljIGJvb2wgZ2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3coKTsKKworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0QmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2Uo
Ym9vbCk7CisgICAgYm9vbCBiYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2U7IH0KKworI2lmIFVT
RShBVkZPVU5EQVRJT04pCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0QVZGb3Vu
ZGF0aW9uRW5hYmxlZChib29sIGZsYWcpOworICAgIHN0YXRpYyBib29sIGlzQVZGb3VuZGF0aW9u
RW5hYmxlZCgpIHsgcmV0dXJuIGdBVkZvdW5kYXRpb25FbmFibGVkOyB9CisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIHZvaWQgc2V0QVZGb3VuZGF0aW9uTlNVUkxTZXNzaW9uRW5hYmxlZChib29s
IGZsYWcpOworICAgIHN0YXRpYyBib29sIGlzQVZGb3VuZGF0aW9uTlNVUkxTZXNzaW9uRW5hYmxl
ZCgpIHsgcmV0dXJuIGdBVkZvdW5kYXRpb25OU1VSTFNlc3Npb25FbmFibGVkOyB9CisjZW5kaWYK
KworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNl
dFFUS2l0RW5hYmxlZChib29sIGZsYWcpOworICAgIHN0YXRpYyBib29sIGlzUVRLaXRFbmFibGVk
KCkgeyByZXR1cm4gZ1FUS2l0RW5hYmxlZDsgfQorI2Vsc2UKKyAgICBzdGF0aWMgYm9vbCBpc1FU
S2l0RW5hYmxlZCgpIHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKKworI2lmIFVTRShHU1RSRUFN
RVIpCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0R1N0cmVhbWVyRW5hYmxlZChi
b29sIGZsYWcpOworICAgIHN0YXRpYyBib29sIGlzR1N0cmVhbWVyRW5hYmxlZCgpIHsgcmV0dXJu
IGdHU3RyZWFtZXJFbmFibGVkOyB9CisjZW5kaWYKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBkZWZhdWx0TWF4aW11bUhUTUxQYXJzZXJET01UcmVlRGVwdGggPSA1MTI7CisgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRNYXhpbXVtUmVuZGVyVHJlZURlcHRoID0gNTEyOworCisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKGJv
b2wgZmxhZyk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgbW9ja1Njcm9sbGJhcnNF
bmFibGVkKCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRVc2VzT3Zlcmxh
eVNjcm9sbGJhcnMoYm9vbCBmbGFnKTsKKyAgICBzdGF0aWMgYm9vbCB1c2VzT3ZlcmxheVNjcm9s
bGJhcnMoKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFVzZXNNb2NrU2Ny
b2xsQW5pbWF0b3IoYm9vbCk7CisgICAgc3RhdGljIGJvb2wgdXNlc01vY2tTY3JvbGxBbmltYXRv
cigpOworCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICB2b2lkIHNldFRvdWNoRXZlbnRF
bXVsYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX3RvdWNoRXZlbnRFbXVsYXRpb25FbmFi
bGVkID0gZW5hYmxlZDsgfQorICAgIGJvb2wgaXNUb3VjaEV2ZW50RW11bGF0aW9uRW5hYmxlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fdG91Y2hFdmVudEVtdWxhdGlvbkVuYWJsZWQ7IH0KKyNlbmRpZgor
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdG9yYWdlQmxvY2tpbmdQb2xpY3koU2VjdXJp
dHlPcmlnaW46OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSk7CisgICAgU2VjdXJpdHlPcmlnaW46OlN0
b3JhZ2VCbG9ja2luZ1BvbGljeSBzdG9yYWdlQmxvY2tpbmdQb2xpY3koKSBjb25zdCB7IHJldHVy
biBtX3N0b3JhZ2VCbG9ja2luZ1BvbGljeTsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRTY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKGJvb2wpOworICAgIGJvb2wgc2Ny
b2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCgpIHsgcmV0dXJuIG1fc2Nyb2xsaW5nUGVy
Zm9ybWFuY2VMb2dnaW5nRW5hYmxlZDsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZv
aWQgc2V0U2hvdWxkUmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzKGJvb2wpOwor
ICAgIHN0YXRpYyBib29sIHNob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0cmlidXRlU2V0dGVy
cygpOworCisgICAgdm9pZCBzZXRUaW1lV2l0aG91dE1vdXNlTW92ZW1lbnRCZWZvcmVIaWRpbmdD
b250cm9scyhTZWNvbmRzIHRpbWUpIHsgbV90aW1lV2l0aG91dE1vdXNlTW92ZW1lbnRCZWZvcmVI
aWRpbmdDb250cm9scyA9IHRpbWU7IH0KKyAgICBTZWNvbmRzIHRpbWVXaXRob3V0TW91c2VNb3Zl
bWVudEJlZm9yZUhpZGluZ0NvbnRyb2xzKCkgY29uc3QgeyByZXR1cm4gbV90aW1lV2l0aG91dE1v
dXNlTW92ZW1lbnRCZWZvcmVIaWRpbmdDb250cm9sczsgfQorCisgICAgYm9vbCBoaWRkZW5QYWdl
Q1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2hpZGRlblBh
Z2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZDsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2V0SGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKGJvb2wpOworCisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMo
Ym9vbCk7CisgICAgYm9vbCBmb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMoKSBjb25zdCB7
IHJldHVybiBtX2ZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXBoczsgfQorCisgICAgc3RhdGlj
IGJvb2wgbG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQoKSB7IHJldHVybiBnTG93
UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQ7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgdm9pZCBzZXRMb3dQb3dlclZpZGVvQXVkaW9CdWZmZXJTaXplRW5hYmxlZChib29sKTsK
KworICAgIHN0YXRpYyBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgeyByZXR1
cm4gZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkRW5hYmxlZDsgfQorICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wp
OworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNl
dEF1ZGlvU2Vzc2lvbkNhdGVnb3J5T3ZlcnJpZGUodW5zaWduZWQpOworICAgIHN0YXRpYyB1bnNp
Z25lZCBhdWRpb1Nlc3Npb25DYXRlZ29yeU92ZXJyaWRlKCk7CisKKyAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgdm9pZCBzZXROZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVkKGJvb2wpOwor
ICAgIHN0YXRpYyBib29sIG5ldHdvcmtEYXRhVXNhZ2VUcmFja2luZ0VuYWJsZWQoKTsKKworICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldE5ldHdvcmtJbnRlcmZhY2VOYW1lKGNvbnN0
IFN0cmluZyYpOworICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIG5ldHdvcmtJbnRlcmZhY2VOYW1l
KCk7CisKKyNpZiBIQVZFKEFWS0lUKQorICAgIHN0YXRpYyB2b2lkIHNldEFWS2l0RW5hYmxlZChi
b29sIGZsYWcpIHsgZ0FWS2l0RW5hYmxlZCA9IGZsYWc7IH0KKyNlbmRpZgorICAgIHN0YXRpYyBi
b29sIGF2S2l0RW5hYmxlZCgpIHsgcmV0dXJuIGdBVktpdEVuYWJsZWQ7IH0KKworICAgIHN0YXRp
YyB2b2lkIHNldFNob3VsZE9wdE91dE9mTmV0d29ya1N0YXRlT2JzZXJ2YXRpb24oYm9vbCBmbGFn
KSB7IGdTaG91bGRPcHRPdXRPZk5ldHdvcmtTdGF0ZU9ic2VydmF0aW9uID0gZmxhZzsgfQorICAg
IHN0YXRpYyBib29sIHNob3VsZE9wdE91dE9mTmV0d29ya1N0YXRlT2JzZXJ2YXRpb24oKSB7IHJl
dHVybiBnU2hvdWxkT3B0T3V0T2ZOZXR3b3JrU3RhdGVPYnNlcnZhdGlvbjsgfQorI2VuZGlmCisK
KyNpZiBVU0UoQVVESU9fU0VTU0lPTikKKyAgICBzdGF0aWMgdm9pZCBzZXRTaG91bGRNYW5hZ2VB
dWRpb1Nlc3Npb25DYXRlZ29yeShib29sIGZsYWcpIHsgZ01hbmFnZUF1ZGlvU2Vzc2lvbiA9IGZs
YWc7IH0KKyAgICBzdGF0aWMgYm9vbCBzaG91bGRNYW5hZ2VBdWRpb1Nlc3Npb25DYXRlZ29yeSgp
IHsgcmV0dXJuIGdNYW5hZ2VBdWRpb1Nlc3Npb247IH0KKyNlbmRpZgorCisgICAgc3RhdGljIHZv
aWQgc2V0Q3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBnQ3VzdG9t
UGFzdGVib2FyZERhdGFFbmFibGVkID0gZW5hYmxlZDsgfQorICAgIHN0YXRpYyBib29sIGN1c3Rv
bVBhc3RlYm9hcmREYXRhRW5hYmxlZCgpIHsgcmV0dXJuIGdDdXN0b21QYXN0ZWJvYXJkRGF0YUVu
YWJsZWQ7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBkZWZhdWx0Q3VzdG9tUGFz
dGVib2FyZERhdGFFbmFibGVkKCk7CisKKyNpZiBFTkFCTEUoTEVHQUNZX0VOQ1JZUFRFRF9NRURJ
QSkKKyAgICB2b2lkIHNldE1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBk
aXJlY3RvcnkpIHsgbV9tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5ID0gZGlyZWN0b3J5OyB9Cisg
ICAgY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KCkgY29uc3QgeyByZXR1
cm4gbV9tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5OyB9CisjZW5kaWYKKyAgICAKKyNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKQorICAgIHZvaWQgc2V0TWVkaWFEZXZpY2VJZGVudGlmaWVyU3RvcmFn
ZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSkgeyBtX21lZGlhRGV2aWNlSWRlbnRp
ZmllclN0b3JhZ2VEaXJlY3RvcnkgPSBkaXJlY3Rvcnk7IH0KKyAgICBjb25zdCBTdHJpbmcmIG1l
ZGlhRGV2aWNlSWRlbnRpZmllclN0b3JhZ2VEaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBtX21l
ZGlhRGV2aWNlSWRlbnRpZmllclN0b3JhZ2VEaXJlY3Rvcnk7IH0KKworICAgIHN0YXRpYyBib29s
IG1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
dm9pZCBzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkKGJvb2wpOworCisgICAgYm9vbCBtZWRp
YUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgdm9pZCBzZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24o
Ym9vbCk7CisjZW5kaWYKKworI2lmIEVOQUJMRShBUFBMRV9QQVkpCisgICAgYm9vbCBhcHBsZVBh
eUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FwcGxlUGF5RW5hYmxlZDsgfQorICAgIHZvaWQg
c2V0QXBwbGVQYXlFbmFibGVkKGJvb2wgYXBwbGVQYXlFbmFibGVkKSB7IG1fYXBwbGVQYXlFbmFi
bGVkID0gYXBwbGVQYXlFbmFibGVkOyB9CisKKyAgICBib29sIGFwcGxlUGF5Q2FwYWJpbGl0eURp
c2Nsb3N1cmVBbGxvd2VkKCkgY29uc3QgeyByZXR1cm4gbV9hcHBsZVBheUNhcGFiaWxpdHlEaXNj
bG9zdXJlQWxsb3dlZDsgfQorICAgIHZvaWQgc2V0QXBwbGVQYXlDYXBhYmlsaXR5RGlzY2xvc3Vy
ZUFsbG93ZWQoYm9vbCBhcHBsZVBheUNhcGFiaWxpdHlEaXNjbG9zdXJlQWxsb3dlZCkgeyBtX2Fw
cGxlUGF5Q2FwYWJpbGl0eURpc2Nsb3N1cmVBbGxvd2VkID0gYXBwbGVQYXlDYXBhYmlsaXR5RGlz
Y2xvc3VyZUFsbG93ZWQ7IH0KKyNlbmRpZgorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRG
b3JjZVBlbmRpbmdXZWJHTFBvbGljeShib29sKTsKKyAgICBib29sIGlzRm9yY2VQZW5kaW5nV2Vi
R0xQb2xpY3koKSBjb25zdCB7IHJldHVybiBtX2ZvcmNlUGVuZGluZ1dlYkdMUG9saWN5OyB9CisK
KyAgICBXRUJDT1JFX0VYUE9SVCBGcmFtZUZsYXR0ZW5pbmcgZWZmZWN0aXZlRnJhbWVGbGF0dGVu
aW5nKCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRBbGxvd3NBbnlTU0xD
ZXJ0aWZpY2F0ZShib29sKTsKKyAgICBzdGF0aWMgYm9vbCBhbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZSgpOworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGNvbnN0IFN0cmluZyYgZGVmYXVsdE1l
ZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRNZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydChj
b25zdCBWZWN0b3I8Q29udGVudFR5cGU+Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRN
ZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydChjb25zdCBTdHJpbmcmKTsK
KyAgICBjb25zdCBWZWN0b3I8Q29udGVudFR5cGU+JiBtZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmlu
Z0hhcmR3YXJlU3VwcG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFDb250ZW50VHlwZXNSZXF1
aXJpbmdIYXJkd2FyZVN1cHBvcnQ7IH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBTZXR0aW5n
cyhQYWdlKik7CisKKyAgICB2b2lkIGluaXRpYWxpemVEZWZhdWx0Rm9udEZhbWlsaWVzKCk7CisK
KyAgICBQYWdlKiBtX3BhZ2U7CisKKyAgICBTdHJpbmcgbV9tZWRpYVR5cGVPdmVycmlkZTsKKyAg
ICBVUkwgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uOworICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0
cjxGb250R2VuZXJpY0ZhbWlsaWVzPiBtX2ZvbnRHZW5lcmljRmFtaWxpZXM7CisgICAgU2VjdXJp
dHlPcmlnaW46OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSBtX3N0b3JhZ2VCbG9ja2luZ1BvbGljeTsK
KyAgICBTZWNvbmRzIG1fbGF5b3V0SW50ZXJ2YWw7CisgICAgU2Vjb25kcyBtX21pbmltdW1ET01U
aW1lckludGVydmFsOworCisgICAgU0VUVElOR1NfTUVNQkVSX1ZBUklBQkxFUworCisgICAgYm9v
bCBtX2lzSmF2YUVuYWJsZWQgOiAxOworICAgIGJvb2wgbV9pc0phdmFFbmFibGVkRm9yTG9jYWxG
aWxlcyA6IDE7CisgICAgYm9vbCBtX2xvYWRzSW1hZ2VzQXV0b21hdGljYWxseSA6IDE7CisgICAg
Ym9vbCBtX2FyZUltYWdlc0VuYWJsZWQgOiAxOworICAgIGJvb2wgbV9wcmVmZXJNSU1FVHlwZUZv
ckltYWdlcyA6IDE7CisgICAgYm9vbCBtX2FyZVBsdWdpbnNFbmFibGVkIDogMTsKKyAgICBib29s
IG1faXNTY3JpcHRFbmFibGVkIDogMTsKKyAgICBib29sIG1fbmVlZHNBZG9iZUZyYW1lUmVsb2Fk
aW5nUXVpcmsgOiAxOworICAgIGJvb2wgbV91c2VzUGFnZUNhY2hlIDogMTsKKyAgICB1bnNpZ25l
ZCBtX2ZvbnRSZW5kZXJpbmdNb2RlIDogMTsKKyAgICBib29sIG1fc2hvd1RpbGVkU2Nyb2xsaW5n
SW5kaWNhdG9yIDogMTsKKyAgICBib29sIG1fYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBh
Z2UgOiAxOworICAgIGJvb2wgbV9kbnNQcmVmZXRjaGluZ0VuYWJsZWQgOiAxOworCisjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKKyAgICBib29sIG1fdG91Y2hFdmVudEVtdWxhdGlvbkVuYWJsZWQg
OiAxOworI2VuZGlmCisgICAgYm9vbCBtX3Njcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJs
ZWQgOiAxOworCisgICAgU2Vjb25kcyBtX3RpbWVXaXRob3V0TW91c2VNb3ZlbWVudEJlZm9yZUhp
ZGluZ0NvbnRyb2xzOworCisgICAgVGltZXIgbV9zZXRJbWFnZUxvYWRpbmdTZXR0aW5nc1RpbWVy
OworICAgIHZvaWQgaW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lckZpcmVkKCk7CisKKyAgICBib29s
IG1faGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQgOiAxOworICAgIGJvb2wgbV9o
aWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQgOiAxOworICAgIGJvb2wgbV9m
b250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMgOiAxOworCisgICAgYm9vbCBtX2ZvcmNlUGVu
ZGluZ1dlYkdMUG9saWN5IDogMTsKKworI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKKyAgICBi
b29sIG1fcmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlIHsgZmFsc2UgfTsKKyNlbmRpZgorCisg
ICAgYm9vbCBtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2VzIHsgZmFs
c2UgfTsKKworI2lmIFVTRShBVkZPVU5EQVRJT04pCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IGJvb2wgZ0FWRm91bmRhdGlvbkVuYWJsZWQ7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJv
b2wgZ0FWRm91bmRhdGlvbk5TVVJMU2Vzc2lvbkVuYWJsZWQ7CisjZW5kaWYKKworI2lmIFBMQVRG
T1JNKENPQ09BKQorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGdRVEtpdEVuYWJsZWQ7
CisjZW5kaWYKKworI2lmIFVTRShHU1RSRUFNRVIpCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IGJvb2wgZ0dTdHJlYW1lckVuYWJsZWQ7CisjZW5kaWYKKworICAgIHN0YXRpYyBib29sIGdNb2Nr
U2Nyb2xsYmFyc0VuYWJsZWQ7CisgICAgc3RhdGljIGJvb2wgZ1VzZXNPdmVybGF5U2Nyb2xsYmFy
czsKKyAgICBzdGF0aWMgYm9vbCBnTW9ja1Njcm9sbEFuaW1hdG9yRW5hYmxlZDsKKworI2lmIFBM
QVRGT1JNKFdJTikKKyAgICBzdGF0aWMgYm9vbCBnU2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1l
cnM7CisjZW5kaWYKKyAgICBzdGF0aWMgYm9vbCBnU2hvdWxkUmVzcGVjdFByaW9yaXR5SW5DU1NB
dHRyaWJ1dGVTZXR0ZXJzOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBzdGF0aWMgYm9vbCBnTmV0
d29ya0RhdGFVc2FnZVRyYWNraW5nRW5hYmxlZDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
Ym9vbCBnQVZLaXRFbmFibGVkOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGdTaG91
bGRPcHRPdXRPZk5ldHdvcmtTdGF0ZU9ic2VydmF0aW9uOworI2VuZGlmCisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIGJvb2wgZ01hbmFnZUF1ZGlvU2Vzc2lvbjsKKyAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgYm9vbCBnQ3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkOworCisjaWYgRU5BQkxF
KExFR0FDWV9FTkNSWVBURURfTUVESUEpCisgICAgU3RyaW5nIG1fbWVkaWFLZXlzU3RvcmFnZURp
cmVjdG9yeTsKKyNlbmRpZgorICAgIAorI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgU3Ry
aW5nIG1fbWVkaWFEZXZpY2VJZGVudGlmaWVyU3RvcmFnZURpcmVjdG9yeTsKKyAgICBzdGF0aWMg
Ym9vbCBnTW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZDsKKyAgICBzdGF0aWMgYm9vbCBnTWVkaWFD
YXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uOworI2VuZGlmCisKKyNpZiBFTkFCTEUoQVBQ
TEVfUEFZKQorICAgIGJvb2wgbV9hcHBsZVBheUVuYWJsZWQgeyBmYWxzZSB9OworICAgIGJvb2wg
bV9hcHBsZVBheUNhcGFiaWxpdHlEaXNjbG9zdXJlQWxsb3dlZCB7IHRydWUgfTsKKyNlbmRpZgor
CisgICAgc3RhdGljIGJvb2wgZ0xvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkOwor
ICAgIHN0YXRpYyBib29sIGdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZEVuYWJsZWQ7Cisg
ICAgc3RhdGljIGJvb2wgZ0FsbG93c0FueVNTTENlcnRpZmljYXRlOworCisgICAgVmVjdG9yPENv
bnRlbnRUeXBlPiBtX21lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0Owor
fTsKKworaW5saW5lIGJvb2wgU2V0dGluZ3M6OmlzUG9zdExvYWRDUFVVc2FnZU1lYXN1cmVtZW50
RW5hYmxlZCgpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcmV0dXJuIHRydWU7CisjZWxz
ZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitpbmxpbmUgYm9vbCBTZXR0aW5nczo6
aXNQb3N0QmFja2dyb3VuZGluZ0NQVVVzYWdlTWVhc3VyZW1lbnRFbmFibGVkKCkKK3sKKyNpZiBQ
TEFURk9STShNQUMpCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsK
KyNlbmRpZgorfQorCitpbmxpbmUgYm9vbCBTZXR0aW5nczo6aXNQZXJBY3Rpdml0eVN0YXRlQ1BV
VXNhZ2VNZWFzdXJlbWVudEVuYWJsZWQoKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1
cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK2lubGluZSBi
b29sIFNldHRpbmdzOjppc1Bvc3RMb2FkTWVtb3J5VXNhZ2VNZWFzdXJlbWVudEVuYWJsZWQoKQor
eworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICByZXR1
cm4gZmFsc2U7CisjZW5kaWYKK30KKworaW5saW5lIGJvb2wgU2V0dGluZ3M6OmlzUG9zdEJhY2tn
cm91bmRpbmdNZW1vcnlVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpCit7CisjaWYgUExBVEZPUk0o
TUFDKQorICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNl
L1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUK
IyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuaAkocmV2aXNpb24gMjIzMzI4KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsMjAg
Kzk2LDE3IEBAIGVudW0gRnJhbWVGbGF0dGVuaW5nIHsKIAogdHlwZWRlZiB1bnNpZ25lZCBEZWJ1
Z092ZXJsYXlSZWdpb25zOwogCi1jbGFzcyBTZXR0aW5ncyA6IHB1YmxpYyBSZWZDb3VudGVkPFNl
dHRpbmdzPiB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2V0dGluZ3MpOyBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK2NsYXNzIFNldHRpbmdzQmFzZSA6IHB1YmxpYyBSZWZDb3VudGVkPFNl
dHRpbmdzQmFzZT4geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNldHRpbmdzQmFzZSk7IFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0dGluZ3M+
IGNyZWF0ZShQYWdlKik7Ci0gICAgflNldHRpbmdzKCk7Ci0KLSAgICB2b2lkIHBhZ2VEZXN0cm95
ZWQoKSB7IG1fcGFnZSA9IG51bGxwdHI7IH0KKyAgICB+U2V0dGluZ3NCYXNlKCk7CiAKICAgICBl
bnVtIGNsYXNzIEZvbnRMb2FkVGltaW5nT3ZlcnJpZGUgeyBOb25lLCBCbG9jaywgU3dhcCwgRmFp
bHVyZSB9OwogCiAgICAgZW51bSBjbGFzcyBGb3JjZWRBY2Nlc3NpYmlsaXR5VmFsdWUgeyBTeXN0
ZW0sIE9uLCBPZmYgfTsKLSAgICBzdGF0aWMgY29uc3QgU2V0dGluZ3M6OkZvcmNlZEFjY2Vzc2li
aWxpdHlWYWx1ZSBkZWZhdWx0Rm9yY2VkQ29sb3JzQXJlSW52ZXJ0ZWRBY2Nlc3NpYmlsaXR5VmFs
dWUgPSBGb3JjZWRBY2Nlc3NpYmlsaXR5VmFsdWU6OlN5c3RlbTsKLSAgICBzdGF0aWMgY29uc3Qg
U2V0dGluZ3M6OkZvcmNlZEFjY2Vzc2liaWxpdHlWYWx1ZSBkZWZhdWx0Rm9yY2VkRGlzcGxheUlz
TW9ub2Nocm9tZUFjY2Vzc2liaWxpdHlWYWx1ZSA9IEZvcmNlZEFjY2Vzc2liaWxpdHlWYWx1ZTo6
U3lzdGVtOwotICAgIHN0YXRpYyBjb25zdCBTZXR0aW5nczo6Rm9yY2VkQWNjZXNzaWJpbGl0eVZh
bHVlIGRlZmF1bHRGb3JjZWRQcmVmZXJzUmVkdWNlZE1vdGlvbkFjY2Vzc2liaWxpdHlWYWx1ZSA9
IEZvcmNlZEFjY2Vzc2liaWxpdHlWYWx1ZTo6U3lzdGVtOworICAgIHN0YXRpYyBjb25zdCBTZXR0
aW5nc0Jhc2U6OkZvcmNlZEFjY2Vzc2liaWxpdHlWYWx1ZSBkZWZhdWx0Rm9yY2VkQ29sb3JzQXJl
SW52ZXJ0ZWRBY2Nlc3NpYmlsaXR5VmFsdWUgPSBGb3JjZWRBY2Nlc3NpYmlsaXR5VmFsdWU6OlN5
c3RlbTsKKyAgICBzdGF0aWMgY29uc3QgU2V0dGluZ3NCYXNlOjpGb3JjZWRBY2Nlc3NpYmlsaXR5
VmFsdWUgZGVmYXVsdEZvcmNlZERpc3BsYXlJc01vbm9jaHJvbWVBY2Nlc3NpYmlsaXR5VmFsdWUg
PSBGb3JjZWRBY2Nlc3NpYmlsaXR5VmFsdWU6OlN5c3RlbTsKKyAgICBzdGF0aWMgY29uc3QgU2V0
dGluZ3NCYXNlOjpGb3JjZWRBY2Nlc3NpYmlsaXR5VmFsdWUgZGVmYXVsdEZvcmNlZFByZWZlcnNS
ZWR1Y2VkTW90aW9uQWNjZXNzaWJpbGl0eVZhbHVlID0gRm9yY2VkQWNjZXNzaWJpbGl0eVZhbHVl
OjpTeXN0ZW07CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0YW5kYXJkRm9udEZhbWls
eShjb25zdCBBdG9taWNTdHJpbmcmLCBVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKTsKICAg
ICBXRUJDT1JFX0VYUE9SVCBjb25zdCBBdG9taWNTdHJpbmcmIHN0YW5kYXJkRm9udEZhbWlseShV
U2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKSBjb25zdDsKQEAgLTE1MCw3ICsxNDcsNiBAQCBw
dWJsaWM6CiAgICAgYm9vbCBpc1NjcmlwdEVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2Ny
aXB0RW5hYmxlZDsgfQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2NyaXB0RW5hYmxlZChi
b29sKTsKIAotICAgIFNFVFRJTkdTX0dFVFRFUlNfQU5EX1NFVFRFUlMKIAogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0SmF2YUVuYWJsZWQoYm9vbCk7CiAgICAgYm9vbCBpc0phdmFFbmFibGVk
KCkgY29uc3QgeyByZXR1cm4gbV9pc0phdmFFbmFibGVkOyB9CkBAIC0zMzQsOCArMzMwLDYgQEAg
cHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Rm9yY2VQZW5kaW5nV2ViR0xQb2xp
Y3koYm9vbCk7CiAgICAgYm9vbCBpc0ZvcmNlUGVuZGluZ1dlYkdMUG9saWN5KCkgY29uc3QgeyBy
ZXR1cm4gbV9mb3JjZVBlbmRpbmdXZWJHTFBvbGljeTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQg
RnJhbWVGbGF0dGVuaW5nIGVmZmVjdGl2ZUZyYW1lRmxhdHRlbmluZygpOwotCiAgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoYm9vbCk7CiAg
ICAgc3RhdGljIGJvb2wgYWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoKTsKIApAQCAtMzQ0LDggKzMz
OCw4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1lZGlhQ29udGVudFR5
cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KGNvbnN0IFN0cmluZyYpOwogICAgIGNvbnN0IFZl
Y3RvcjxDb250ZW50VHlwZT4mIG1lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBw
b3J0KCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJl
U3VwcG9ydDsgfQogCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IFNldHRpbmdzKFBhZ2UqKTsKK3By
b3RlY3RlZDoKKyAgICBleHBsaWNpdCBTZXR0aW5nc0Jhc2UoUGFnZSopOwogCiAgICAgdm9pZCBp
bml0aWFsaXplRGVmYXVsdEZvbnRGYW1pbGllcygpOwogCkBAIC0zNTgsOCArMzUyLDYgQEAgcHJp
dmF0ZToKICAgICBTZWNvbmRzIG1fbGF5b3V0SW50ZXJ2YWw7CiAgICAgU2Vjb25kcyBtX21pbmlt
dW1ET01UaW1lckludGVydmFsOwogCi0gICAgU0VUVElOR1NfTUVNQkVSX1ZBUklBQkxFUwotCiAg
ICAgYm9vbCBtX2lzSmF2YUVuYWJsZWQgOiAxOwogICAgIGJvb2wgbV9pc0phdmFFbmFibGVkRm9y
TG9jYWxGaWxlcyA6IDE7CiAgICAgYm9vbCBtX2xvYWRzSW1hZ2VzQXV0b21hdGljYWxseSA6IDE7
CkBAIC00NDcsNyArNDM5LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8Q29udGVudFR5cGU+IG1f
bWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQ7CiB9OwogCi1pbmxpbmUg
Ym9vbCBTZXR0aW5nczo6aXNQb3N0TG9hZENQVVVzYWdlTWVhc3VyZW1lbnRFbmFibGVkKCkKK2lu
bGluZSBib29sIFNldHRpbmdzQmFzZTo6aXNQb3N0TG9hZENQVVVzYWdlTWVhc3VyZW1lbnRFbmFi
bGVkKCkKIHsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ1Niw3
ICs0NDgsNyBAQCBpbmxpbmUgYm9vbCBTZXR0aW5nczo6aXNQb3N0TG9hZENQVVVzYWdlCiAjZW5k
aWYKIH0KIAotaW5saW5lIGJvb2wgU2V0dGluZ3M6OmlzUG9zdEJhY2tncm91bmRpbmdDUFVVc2Fn
ZU1lYXN1cmVtZW50RW5hYmxlZCgpCitpbmxpbmUgYm9vbCBTZXR0aW5nc0Jhc2U6OmlzUG9zdEJh
Y2tncm91bmRpbmdDUFVVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpCiB7CiAjaWYgUExBVEZPUk0o
TUFDKQogICAgIHJldHVybiB0cnVlOwpAQCAtNDY1LDcgKzQ1Nyw3IEBAIGlubGluZSBib29sIFNl
dHRpbmdzOjppc1Bvc3RCYWNrZ3JvdW5kaW4KICNlbmRpZgogfQogCi1pbmxpbmUgYm9vbCBTZXR0
aW5nczo6aXNQZXJBY3Rpdml0eVN0YXRlQ1BVVXNhZ2VNZWFzdXJlbWVudEVuYWJsZWQoKQoraW5s
aW5lIGJvb2wgU2V0dGluZ3NCYXNlOjppc1BlckFjdGl2aXR5U3RhdGVDUFVVc2FnZU1lYXN1cmVt
ZW50RW5hYmxlZCgpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHJldHVybiB0cnVlOwpAQCAt
NDc0LDcgKzQ2Niw3IEBAIGlubGluZSBib29sIFNldHRpbmdzOjppc1BlckFjdGl2aXR5U3RhdGUK
ICNlbmRpZgogfQogCi1pbmxpbmUgYm9vbCBTZXR0aW5nczo6aXNQb3N0TG9hZE1lbW9yeVVzYWdl
TWVhc3VyZW1lbnRFbmFibGVkKCkKK2lubGluZSBib29sIFNldHRpbmdzQmFzZTo6aXNQb3N0TG9h
ZE1lbW9yeVVzYWdlTWVhc3VyZW1lbnRFbmFibGVkKCkKIHsKICNpZiBQTEFURk9STShDT0NPQSkK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ4Myw3ICs0NzUsNyBAQCBpbmxpbmUgYm9vbCBTZXR0aW5n
czo6aXNQb3N0TG9hZE1lbW9yeVVzCiAjZW5kaWYKIH0KIAotaW5saW5lIGJvb2wgU2V0dGluZ3M6
OmlzUG9zdEJhY2tncm91bmRpbmdNZW1vcnlVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpCitpbmxp
bmUgYm9vbCBTZXR0aW5nc0Jhc2U6OmlzUG9zdEJhY2tncm91bmRpbmdNZW1vcnlVc2FnZU1lYXN1
cmVtZW50RW5hYmxlZCgpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHJldHVybiB0cnVlOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9TZXR0aW5nc0Jhc2VDb2NvYS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1NldHRpbmdzQmFzZUNvY29hLm1t
CShyZXZpc2lvbiAyMjMzMjgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvU2V0dGlu
Z3NDb2NvYS5tbToyMjMzMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1NldHRpbmdz
QmFzZUNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisKKyNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJE
ZXZpY2UuaCIKKyNpbmNsdWRlIDxwYWwvc3BpL2lvcy9VSUtpdFNQSS5oPgorI2luY2x1ZGUgPHd0
Zi9Tb2Z0TGlua2luZy5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCitTT0ZUX0xJTktf
RlJBTUVXT1JLKFVJS2l0KQorU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSUFwcGxpY2F0aW9uKQor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBjb25zdCBjaGFy
KiBzYW5zU2VyaWZUcmFkaXRpb25hbEhhbkZvbnRGYW1pbHkoKQoreworICAgIHJldHVybiAiUGlu
Z0ZhbmcgVEMiOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIHNhbnNTZXJpZlNpbXBs
aWZpZWRIYW5Gb250RmFtaWx5KCkKK3sKKyAgICByZXR1cm4gIlBpbmdGYW5nIFNDIjsKK30KKwor
I2lmIFBMQVRGT1JNKE1BQykKKworc3RhdGljIGJvb2wgb3Nha2FNb25vSXNJbnN0YWxsZWQoKQor
eworICAgIGludCBvbmUgPSAxOworICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4geWVzID0gYWRv
cHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBl
LCAmb25lKSk7CisgICAgQ0ZUeXBlUmVmIGtleXNbXSA9IHsga0NURm9udEVuYWJsZWRBdHRyaWJ1
dGUsIGtDVEZvbnROYW1lQXR0cmlidXRlIH07CisgICAgQ0ZUeXBlUmVmIHZhbHVlc1tdID0geyB5
ZXMuZ2V0KCksIENGU1RSKCJPc2FrYS1Nb25vIikgfTsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9u
YXJ5UmVmPiBhdHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKHZhbHVlcyksICZrQ0ZU
eXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFj
a3MpKTsKKyAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZGVzY3JpcHRvciA9IGFk
b3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMuZ2V0
KCkpKTsKKyAgICBSZXRhaW5QdHI8Q0ZTZXRSZWY+IG1hbmRhdG9yeUF0dHJpYnV0ZXMgPSBhZG9w
dENGKENGU2V0Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtleXMsIFdURl9BUlJBWV9MRU5H
VEgoa2V5cyksICZrQ0ZUeXBlU2V0Q2FsbEJhY2tzKSk7CisgICAgcmV0dXJuIGFkb3B0Q0YoQ1RG
b250RGVzY3JpcHRvckNyZWF0ZU1hdGNoaW5nRm9udERlc2NyaXB0b3IoZGVzY3JpcHRvci5nZXQo
KSwgbWFuZGF0b3J5QXR0cmlidXRlcy5nZXQoKSkpOworfQorCit2b2lkIFNldHRpbmdzOjppbml0
aWFsaXplRGVmYXVsdEZvbnRGYW1pbGllcygpCit7CisgICAgc2V0U3RhbmRhcmRGb250RmFtaWx5
KCJTb25ndGkgVEMiLCBVU0NSSVBUX1RSQURJVElPTkFMX0hBTik7CisgICAgc2V0U2VyaWZGb250
RmFtaWx5KCJTb25ndGkgVEMiLCBVU0NSSVBUX1RSQURJVElPTkFMX0hBTik7CisgICAgc2V0Rml4
ZWRGb250RmFtaWx5KHNhbnNTZXJpZlRyYWRpdGlvbmFsSGFuRm9udEZhbWlseSgpLCBVU0NSSVBU
X1RSQURJVElPTkFMX0hBTik7CisgICAgc2V0U2Fuc1NlcmlmRm9udEZhbWlseShzYW5zU2VyaWZU
cmFkaXRpb25hbEhhbkZvbnRGYW1pbHkoKSwgVVNDUklQVF9UUkFESVRJT05BTF9IQU4pOworICAg
IHNldEN1cnNpdmVGb250RmFtaWx5KCJLYWl0aSBUQyIsIFVTQ1JJUFRfVFJBRElUSU9OQUxfSEFO
KTsKKworICAgIHNldFN0YW5kYXJkRm9udEZhbWlseSgiU29uZ3RpIFNDIiwgVVNDUklQVF9TSU1Q
TElGSUVEX0hBTik7CisgICAgc2V0U2VyaWZGb250RmFtaWx5KCJTb25ndGkgU0MiLCBVU0NSSVBU
X1NJTVBMSUZJRURfSEFOKTsKKyAgICBzZXRGaXhlZEZvbnRGYW1pbHkoc2Fuc1NlcmlmU2ltcGxp
ZmllZEhhbkZvbnRGYW1pbHkoKSwgVVNDUklQVF9TSU1QTElGSUVEX0hBTik7CisgICAgc2V0U2Fu
c1NlcmlmRm9udEZhbWlseShzYW5zU2VyaWZTaW1wbGlmaWVkSGFuRm9udEZhbWlseSgpLCBVU0NS
SVBUX1NJTVBMSUZJRURfSEFOKTsKKyAgICBzZXRDdXJzaXZlRm9udEZhbWlseSgiS2FpdGkgU0Mi
LCBVU0NSSVBUX1NJTVBMSUZJRURfSEFOKTsKKworICAgIHNldFN0YW5kYXJkRm9udEZhbWlseSgi
SGlyYWdpbm8gTWluY2hvIFByb04iLCBVU0NSSVBUX0tBVEFLQU5BX09SX0hJUkFHQU5BKTsKKyAg
ICBzZXRGaXhlZEZvbnRGYW1pbHkob3Nha2FNb25vSXNJbnN0YWxsZWQoKSA/ICJPc2FrYS1Nb25v
IiA6ICJIaXJhZ2lubyBTYW5zIiwgVVNDUklQVF9LQVRBS0FOQV9PUl9ISVJBR0FOQSk7CisgICAg
c2V0U2VyaWZGb250RmFtaWx5KCJIaXJhZ2lubyBNaW5jaG8gUHJvTiIsIFVTQ1JJUFRfS0FUQUtB
TkFfT1JfSElSQUdBTkEpOworICAgIHNldFNhbnNTZXJpZkZvbnRGYW1pbHkoIkhpcmFnaW5vIEth
a3UgR290aGljIFByb04iLCBVU0NSSVBUX0tBVEFLQU5BX09SX0hJUkFHQU5BKTsKKworICAgIHNl
dFN0YW5kYXJkRm9udEZhbWlseSgiQXBwbGVNeXVuZ2pvIiwgVVNDUklQVF9IQU5HVUwpOworICAg
IHNldFNlcmlmRm9udEZhbWlseSgiQXBwbGVNeXVuZ2pvIiwgVVNDUklQVF9IQU5HVUwpOworICAg
IHNldEZpeGVkRm9udEZhbWlseSgiQXBwbGUgU0QgR290aGljIE5lbyIsIFVTQ1JJUFRfSEFOR1VM
KTsKKyAgICBzZXRTYW5zU2VyaWZGb250RmFtaWx5KCJBcHBsZSBTRCBHb3RoaWMgTmVvIiwgVVND
UklQVF9IQU5HVUwpOworCisgICAgc2V0U3RhbmRhcmRGb250RmFtaWx5KCJUaW1lcyIsIFVTQ1JJ
UFRfQ09NTU9OKTsKKyAgICBzZXRGaXhlZEZvbnRGYW1pbHkoIkNvdXJpZXIiLCBVU0NSSVBUX0NP
TU1PTik7CisgICAgc2V0U2VyaWZGb250RmFtaWx5KCJUaW1lcyIsIFVTQ1JJUFRfQ09NTU9OKTsK
KyAgICBzZXRTYW5zU2VyaWZGb250RmFtaWx5KCJIZWx2ZXRpY2EiLCBVU0NSSVBUX0NPTU1PTik7
Cit9CisKKyNlbHNlCisKK3ZvaWQgU2V0dGluZ3M6OmluaXRpYWxpemVEZWZhdWx0Rm9udEZhbWls
aWVzKCkKK3sKKyAgICAvLyBUaGVyZSBpcyBubyBzZXJpZiBDaGluZXNlIGZvbnQgaW4gZGVmYXVs
dCBpT1MgaW5zdGFsbGF0aW9uLgorICAgIHNldFN0YW5kYXJkRm9udEZhbWlseShzYW5zU2VyaWZU
cmFkaXRpb25hbEhhbkZvbnRGYW1pbHkoKSwgVVNDUklQVF9UUkFESVRJT05BTF9IQU4pOworICAg
IHNldFNlcmlmRm9udEZhbWlseShzYW5zU2VyaWZUcmFkaXRpb25hbEhhbkZvbnRGYW1pbHkoKSwg
VVNDUklQVF9UUkFESVRJT05BTF9IQU4pOworICAgIHNldEZpeGVkRm9udEZhbWlseShzYW5zU2Vy
aWZUcmFkaXRpb25hbEhhbkZvbnRGYW1pbHkoKSwgVVNDUklQVF9UUkFESVRJT05BTF9IQU4pOwor
ICAgIHNldFNhbnNTZXJpZkZvbnRGYW1pbHkoc2Fuc1NlcmlmVHJhZGl0aW9uYWxIYW5Gb250RmFt
aWx5KCksIFVTQ1JJUFRfVFJBRElUSU9OQUxfSEFOKTsKKworICAgIC8vIFRoZXJlIGlzIG5vIHNl
cmlmIENoaW5lc2UgZm9udCBpbiBkZWZhdWx0IGlPUyBpbnN0YWxsYXRpb24uCisgICAgc2V0U3Rh
bmRhcmRGb250RmFtaWx5KHNhbnNTZXJpZlNpbXBsaWZpZWRIYW5Gb250RmFtaWx5KCksIFVTQ1JJ
UFRfU0lNUExJRklFRF9IQU4pOworICAgIHNldFNlcmlmRm9udEZhbWlseShzYW5zU2VyaWZTaW1w
bGlmaWVkSGFuRm9udEZhbWlseSgpLCBVU0NSSVBUX1NJTVBMSUZJRURfSEFOKTsKKyAgICBzZXRG
aXhlZEZvbnRGYW1pbHkoc2Fuc1NlcmlmU2ltcGxpZmllZEhhbkZvbnRGYW1pbHkoKSwgVVNDUklQ
VF9TSU1QTElGSUVEX0hBTik7CisgICAgc2V0U2Fuc1NlcmlmRm9udEZhbWlseShzYW5zU2VyaWZT
aW1wbGlmaWVkSGFuRm9udEZhbWlseSgpLCBVU0NSSVBUX1NJTVBMSUZJRURfSEFOKTsKKworICAg
IHNldFN0YW5kYXJkRm9udEZhbWlseSgiSGlyYWdpbm8gTWluY2hvIFByb04iLCBVU0NSSVBUX0tB
VEFLQU5BX09SX0hJUkFHQU5BKTsKKyAgICBzZXRGaXhlZEZvbnRGYW1pbHkoIkhpcmFnaW5vIEth
a3UgR290aGljIFByb04iLCBVU0NSSVBUX0tBVEFLQU5BX09SX0hJUkFHQU5BKTsKKyAgICBzZXRT
ZXJpZkZvbnRGYW1pbHkoIkhpcmFnaW5vIE1pbmNobyBQcm9OIiwgVVNDUklQVF9LQVRBS0FOQV9P
Ul9ISVJBR0FOQSk7CisgICAgc2V0U2Fuc1NlcmlmRm9udEZhbWlseSgiSGlyYWdpbm8gS2FrdSBH
b3RoaWMgUHJvTiIsIFVTQ1JJUFRfS0FUQUtBTkFfT1JfSElSQUdBTkEpOworCisgICAgLy8gVGhl
cmUgaXMgbm8gc2VyaWYgS29yZWFuIGZvbnQgaW4gZGVmYXVsdCBpT1MgaW5zdGFsbGF0aW9uLgor
ICAgIHNldFN0YW5kYXJkRm9udEZhbWlseSgiQXBwbGUgU0QgR290aGljIE5lbyIsIFVTQ1JJUFRf
SEFOR1VMKTsKKyAgICBzZXRTZXJpZkZvbnRGYW1pbHkoIkFwcGxlIFNEIEdvdGhpYyBOZW8iLCBV
U0NSSVBUX0hBTkdVTCk7CisgICAgc2V0Rml4ZWRGb250RmFtaWx5KCJBcHBsZSBTRCBHb3RoaWMg
TmVvIiwgVVNDUklQVF9IQU5HVUwpOworICAgIHNldFNhbnNTZXJpZkZvbnRGYW1pbHkoIkFwcGxl
IFNEIEdvdGhpYyBOZW8iLCBVU0NSSVBUX0hBTkdVTCk7CisKKyAgICBzZXRTdGFuZGFyZEZvbnRG
YW1pbHkoIlRpbWVzIiwgVVNDUklQVF9DT01NT04pOworICAgIHNldEZpeGVkRm9udEZhbWlseSgi
Q291cmllciIsIFVTQ1JJUFRfQ09NTU9OKTsKKyAgICBzZXRTZXJpZkZvbnRGYW1pbHkoIlRpbWVz
IiwgVVNDUklQVF9DT01NT04pOworICAgIHNldFNhbnNTZXJpZkZvbnRGYW1pbHkoIkhlbHZldGlj
YSIsIFVTQ1JJUFRfQ09NTU9OKTsKK30KKworYm9vbCBTZXR0aW5nczo6ZGVmYXVsdFRleHRBdXRv
c2l6aW5nRW5hYmxlZCgpCit7CisgICAgcmV0dXJuICFkZXZpY2VIYXNJUGFkQ2FwYWJpbGl0eSgp
IHx8IFtbZ2V0VUlBcHBsaWNhdGlvbkNsYXNzKCkgc2hhcmVkQXBwbGljYXRpb25dIF9pc0NsYXNz
aWNdOworfQorCisjZW5kaWYKKworY29uc3QgU3RyaW5nJiBTZXR0aW5nczo6ZGVmYXVsdE1lZGlh
Q29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KCkKK3sKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8U3RyaW5nPiBkZWZhdWx0TWVkaWFDb250ZW50VHlwZXMgeyAidmlkZW8vbXA0
O2NvZGVjcz1odmMxOnZpZGVvL21wNDtjb2RlY3M9aGV2MSIgfTsKKyAgICByZXR1cm4gZGVmYXVs
dE1lZGlhQ29udGVudFR5cGVzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1NldHRpbmdzQ29jb2EubW0K
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCitMRgpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29h
L1NldHRpbmdzQmFzZUNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
Y29jb2EvU2V0dGluZ3NCYXNlQ29jb2EubW0JKHJldmlzaW9uIDIyMzMyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvY29jb2EvU2V0dGluZ3NCYXNlQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2V0
dGluZ3MuaCIKKyNpbmNsdWRlICJTZXR0aW5nc0Jhc2UuaCIKIAogI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgogCkBAIC02NSw3ICs2NSw3IEBAIHN0YXRpYyBib29sIG9zYWthTW9ub0lz
SW5zdGFsbGVkKCkKICAgICByZXR1cm4gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlTWF0
Y2hpbmdGb250RGVzY3JpcHRvcihkZXNjcmlwdG9yLmdldCgpLCBtYW5kYXRvcnlBdHRyaWJ1dGVz
LmdldCgpKSk7CiB9CiAKLXZvaWQgU2V0dGluZ3M6OmluaXRpYWxpemVEZWZhdWx0Rm9udEZhbWls
aWVzKCkKK3ZvaWQgU2V0dGluZ3NCYXNlOjppbml0aWFsaXplRGVmYXVsdEZvbnRGYW1pbGllcygp
CiB7CiAgICAgc2V0U3RhbmRhcmRGb250RmFtaWx5KCJTb25ndGkgVEMiLCBVU0NSSVBUX1RSQURJ
VElPTkFMX0hBTik7CiAgICAgc2V0U2VyaWZGb250RmFtaWx5KCJTb25ndGkgVEMiLCBVU0NSSVBU
X1RSQURJVElPTkFMX0hBTik7CkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgU2V0dGluZ3M6OmluaXRp
YWxpemVEZWZhdWx0Rm9udEZhbWkKIAogI2Vsc2UKIAotdm9pZCBTZXR0aW5nczo6aW5pdGlhbGl6
ZURlZmF1bHRGb250RmFtaWxpZXMoKQordm9pZCBTZXR0aW5nc0Jhc2U6OmluaXRpYWxpemVEZWZh
dWx0Rm9udEZhbWlsaWVzKCkKIHsKICAgICAvLyBUaGVyZSBpcyBubyBzZXJpZiBDaGluZXNlIGZv
bnQgaW4gZGVmYXVsdCBpT1MgaW5zdGFsbGF0aW9uLgogICAgIHNldFN0YW5kYXJkRm9udEZhbWls
eShzYW5zU2VyaWZUcmFkaXRpb25hbEhhbkZvbnRGYW1pbHkoKSwgVVNDUklQVF9UUkFESVRJT05B
TF9IQU4pOwpAQCAtMTI4LDE0ICsxMjgsMTQgQEAgdm9pZCBTZXR0aW5nczo6aW5pdGlhbGl6ZURl
ZmF1bHRGb250RmFtaQogICAgIHNldFNhbnNTZXJpZkZvbnRGYW1pbHkoIkhlbHZldGljYSIsIFVT
Q1JJUFRfQ09NTU9OKTsKIH0KIAotYm9vbCBTZXR0aW5nczo6ZGVmYXVsdFRleHRBdXRvc2l6aW5n
RW5hYmxlZCgpCitib29sIFNldHRpbmdzQmFzZTo6ZGVmYXVsdFRleHRBdXRvc2l6aW5nRW5hYmxl
ZCgpCiB7CiAgICAgcmV0dXJuICFkZXZpY2VIYXNJUGFkQ2FwYWJpbGl0eSgpIHx8IFtbZ2V0VUlB
cHBsaWNhdGlvbkNsYXNzKCkgc2hhcmVkQXBwbGljYXRpb25dIF9pc0NsYXNzaWNdOwogfQogCiAj
ZW5kaWYKIAotY29uc3QgU3RyaW5nJiBTZXR0aW5nczo6ZGVmYXVsdE1lZGlhQ29udGVudFR5cGVz
UmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KCkKK2NvbnN0IFN0cmluZyYgU2V0dGluZ3NCYXNlOjpk
ZWZhdWx0TWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQoKQogewogICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGRlZmF1bHRNZWRpYUNvbnRlbnRUeXBlcyB7
ICJ2aWRlby9tcDQ7Y29kZWNzPWh2YzE6dmlkZW8vbXA0O2NvZGVjcz1oZXYxIiB9OwogICAgIHJl
dHVybiBkZWZhdWx0TWVkaWFDb250ZW50VHlwZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L2NvY29hL1NldHRpbmdzQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9jb2NvYS9TZXR0aW5nc0NvY29hLm1tCShyZXZpc2lvbiAyMjMzMjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL2NvY29hL1NldHRpbmdzQ29jb2EubW0JKG5vbmV4aXN0ZW50KQpAQCAtMSwxNDQg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTZXR0
aW5ncy5oIgotCi0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0KLSNpZiBQTEFURk9S
TShJT1MpCi0jaW5jbHVkZSAiRGV2aWNlLmgiCi0jaW5jbHVkZSA8cGFsL3NwaS9pb3MvVUlLaXRT
UEkuaD4KLSNpbmNsdWRlIDx3dGYvU29mdExpbmtpbmcuaD4KLSNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oSU9TKQotU09GVF9MSU5LX0ZSQU1FV09SSyhVSUtpdCkKLVNPRlRfTElOS19DTEFTUyhVSUtp
dCwgVUlBcHBsaWNhdGlvbikKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRp
YyBpbmxpbmUgY29uc3QgY2hhciogc2Fuc1NlcmlmVHJhZGl0aW9uYWxIYW5Gb250RmFtaWx5KCkK
LXsKLSAgICByZXR1cm4gIlBpbmdGYW5nIFRDIjsKLX0KLQotc3RhdGljIGlubGluZSBjb25zdCBj
aGFyKiBzYW5zU2VyaWZTaW1wbGlmaWVkSGFuRm9udEZhbWlseSgpCi17Ci0gICAgcmV0dXJuICJQ
aW5nRmFuZyBTQyI7Ci19Ci0KLSNpZiBQTEFURk9STShNQUMpCi0KLXN0YXRpYyBib29sIG9zYWth
TW9ub0lzSW5zdGFsbGVkKCkKLXsKLSAgICBpbnQgb25lID0gMTsKLSAgICBSZXRhaW5QdHI8Q0ZO
dW1iZXJSZWY+IHllcyA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwga0NGTnVtYmVySW50VHlwZSwgJm9uZSkpOwotICAgIENGVHlwZVJlZiBrZXlzW10gPSB7IGtD
VEZvbnRFbmFibGVkQXR0cmlidXRlLCBrQ1RGb250TmFtZUF0dHJpYnV0ZSB9OwotICAgIENGVHlw
ZVJlZiB2YWx1ZXNbXSA9IHsgeWVzLmdldCgpLCBDRlNUUigiT3Nha2EtTW9ubyIpIH07Ci0gICAg
UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9u
YXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtleXMsIHZhbHVlcywgV1RGX0FSUkFZX0xF
TkdUSCh2YWx1ZXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGlj
dGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JS
ZWY+IGRlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoQXR0cmli
dXRlcyhhdHRyaWJ1dGVzLmdldCgpKSk7Ci0gICAgUmV0YWluUHRyPENGU2V0UmVmPiBtYW5kYXRv
cnlBdHRyaWJ1dGVzID0gYWRvcHRDRihDRlNldENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBr
ZXlzLCBXVEZfQVJSQVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZVNldENhbGxCYWNrcykpOwotICAg
IHJldHVybiBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVNYXRjaGluZ0ZvbnREZXNjcmlw
dG9yKGRlc2NyaXB0b3IuZ2V0KCksIG1hbmRhdG9yeUF0dHJpYnV0ZXMuZ2V0KCkpKTsKLX0KLQot
dm9pZCBTZXR0aW5nczo6aW5pdGlhbGl6ZURlZmF1bHRGb250RmFtaWxpZXMoKQotewotICAgIHNl
dFN0YW5kYXJkRm9udEZhbWlseSgiU29uZ3RpIFRDIiwgVVNDUklQVF9UUkFESVRJT05BTF9IQU4p
OwotICAgIHNldFNlcmlmRm9udEZhbWlseSgiU29uZ3RpIFRDIiwgVVNDUklQVF9UUkFESVRJT05B
TF9IQU4pOwotICAgIHNldEZpeGVkRm9udEZhbWlseShzYW5zU2VyaWZUcmFkaXRpb25hbEhhbkZv
bnRGYW1pbHkoKSwgVVNDUklQVF9UUkFESVRJT05BTF9IQU4pOwotICAgIHNldFNhbnNTZXJpZkZv
bnRGYW1pbHkoc2Fuc1NlcmlmVHJhZGl0aW9uYWxIYW5Gb250RmFtaWx5KCksIFVTQ1JJUFRfVFJB
RElUSU9OQUxfSEFOKTsKLSAgICBzZXRDdXJzaXZlRm9udEZhbWlseSgiS2FpdGkgVEMiLCBVU0NS
SVBUX1RSQURJVElPTkFMX0hBTik7Ci0KLSAgICBzZXRTdGFuZGFyZEZvbnRGYW1pbHkoIlNvbmd0
aSBTQyIsIFVTQ1JJUFRfU0lNUExJRklFRF9IQU4pOwotICAgIHNldFNlcmlmRm9udEZhbWlseSgi
U29uZ3RpIFNDIiwgVVNDUklQVF9TSU1QTElGSUVEX0hBTik7Ci0gICAgc2V0Rml4ZWRGb250RmFt
aWx5KHNhbnNTZXJpZlNpbXBsaWZpZWRIYW5Gb250RmFtaWx5KCksIFVTQ1JJUFRfU0lNUExJRklF
RF9IQU4pOwotICAgIHNldFNhbnNTZXJpZkZvbnRGYW1pbHkoc2Fuc1NlcmlmU2ltcGxpZmllZEhh
bkZvbnRGYW1pbHkoKSwgVVNDUklQVF9TSU1QTElGSUVEX0hBTik7Ci0gICAgc2V0Q3Vyc2l2ZUZv
bnRGYW1pbHkoIkthaXRpIFNDIiwgVVNDUklQVF9TSU1QTElGSUVEX0hBTik7Ci0KLSAgICBzZXRT
dGFuZGFyZEZvbnRGYW1pbHkoIkhpcmFnaW5vIE1pbmNobyBQcm9OIiwgVVNDUklQVF9LQVRBS0FO
QV9PUl9ISVJBR0FOQSk7Ci0gICAgc2V0Rml4ZWRGb250RmFtaWx5KG9zYWthTW9ub0lzSW5zdGFs
bGVkKCkgPyAiT3Nha2EtTW9ubyIgOiAiSGlyYWdpbm8gU2FucyIsIFVTQ1JJUFRfS0FUQUtBTkFf
T1JfSElSQUdBTkEpOwotICAgIHNldFNlcmlmRm9udEZhbWlseSgiSGlyYWdpbm8gTWluY2hvIFBy
b04iLCBVU0NSSVBUX0tBVEFLQU5BX09SX0hJUkFHQU5BKTsKLSAgICBzZXRTYW5zU2VyaWZGb250
RmFtaWx5KCJIaXJhZ2lubyBLYWt1IEdvdGhpYyBQcm9OIiwgVVNDUklQVF9LQVRBS0FOQV9PUl9I
SVJBR0FOQSk7Ci0KLSAgICBzZXRTdGFuZGFyZEZvbnRGYW1pbHkoIkFwcGxlTXl1bmdqbyIsIFVT
Q1JJUFRfSEFOR1VMKTsKLSAgICBzZXRTZXJpZkZvbnRGYW1pbHkoIkFwcGxlTXl1bmdqbyIsIFVT
Q1JJUFRfSEFOR1VMKTsKLSAgICBzZXRGaXhlZEZvbnRGYW1pbHkoIkFwcGxlIFNEIEdvdGhpYyBO
ZW8iLCBVU0NSSVBUX0hBTkdVTCk7Ci0gICAgc2V0U2Fuc1NlcmlmRm9udEZhbWlseSgiQXBwbGUg
U0QgR290aGljIE5lbyIsIFVTQ1JJUFRfSEFOR1VMKTsKLQotICAgIHNldFN0YW5kYXJkRm9udEZh
bWlseSgiVGltZXMiLCBVU0NSSVBUX0NPTU1PTik7Ci0gICAgc2V0Rml4ZWRGb250RmFtaWx5KCJD
b3VyaWVyIiwgVVNDUklQVF9DT01NT04pOwotICAgIHNldFNlcmlmRm9udEZhbWlseSgiVGltZXMi
LCBVU0NSSVBUX0NPTU1PTik7Ci0gICAgc2V0U2Fuc1NlcmlmRm9udEZhbWlseSgiSGVsdmV0aWNh
IiwgVVNDUklQVF9DT01NT04pOwotfQotCi0jZWxzZQotCi12b2lkIFNldHRpbmdzOjppbml0aWFs
aXplRGVmYXVsdEZvbnRGYW1pbGllcygpCi17Ci0gICAgLy8gVGhlcmUgaXMgbm8gc2VyaWYgQ2hp
bmVzZSBmb250IGluIGRlZmF1bHQgaU9TIGluc3RhbGxhdGlvbi4KLSAgICBzZXRTdGFuZGFyZEZv
bnRGYW1pbHkoc2Fuc1NlcmlmVHJhZGl0aW9uYWxIYW5Gb250RmFtaWx5KCksIFVTQ1JJUFRfVFJB
RElUSU9OQUxfSEFOKTsKLSAgICBzZXRTZXJpZkZvbnRGYW1pbHkoc2Fuc1NlcmlmVHJhZGl0aW9u
YWxIYW5Gb250RmFtaWx5KCksIFVTQ1JJUFRfVFJBRElUSU9OQUxfSEFOKTsKLSAgICBzZXRGaXhl
ZEZvbnRGYW1pbHkoc2Fuc1NlcmlmVHJhZGl0aW9uYWxIYW5Gb250RmFtaWx5KCksIFVTQ1JJUFRf
VFJBRElUSU9OQUxfSEFOKTsKLSAgICBzZXRTYW5zU2VyaWZGb250RmFtaWx5KHNhbnNTZXJpZlRy
YWRpdGlvbmFsSGFuRm9udEZhbWlseSgpLCBVU0NSSVBUX1RSQURJVElPTkFMX0hBTik7Ci0KLSAg
ICAvLyBUaGVyZSBpcyBubyBzZXJpZiBDaGluZXNlIGZvbnQgaW4gZGVmYXVsdCBpT1MgaW5zdGFs
bGF0aW9uLgotICAgIHNldFN0YW5kYXJkRm9udEZhbWlseShzYW5zU2VyaWZTaW1wbGlmaWVkSGFu
Rm9udEZhbWlseSgpLCBVU0NSSVBUX1NJTVBMSUZJRURfSEFOKTsKLSAgICBzZXRTZXJpZkZvbnRG
YW1pbHkoc2Fuc1NlcmlmU2ltcGxpZmllZEhhbkZvbnRGYW1pbHkoKSwgVVNDUklQVF9TSU1QTElG
SUVEX0hBTik7Ci0gICAgc2V0Rml4ZWRGb250RmFtaWx5KHNhbnNTZXJpZlNpbXBsaWZpZWRIYW5G
b250RmFtaWx5KCksIFVTQ1JJUFRfU0lNUExJRklFRF9IQU4pOwotICAgIHNldFNhbnNTZXJpZkZv
bnRGYW1pbHkoc2Fuc1NlcmlmU2ltcGxpZmllZEhhbkZvbnRGYW1pbHkoKSwgVVNDUklQVF9TSU1Q
TElGSUVEX0hBTik7Ci0KLSAgICBzZXRTdGFuZGFyZEZvbnRGYW1pbHkoIkhpcmFnaW5vIE1pbmNo
byBQcm9OIiwgVVNDUklQVF9LQVRBS0FOQV9PUl9ISVJBR0FOQSk7Ci0gICAgc2V0Rml4ZWRGb250
RmFtaWx5KCJIaXJhZ2lubyBLYWt1IEdvdGhpYyBQcm9OIiwgVVNDUklQVF9LQVRBS0FOQV9PUl9I
SVJBR0FOQSk7Ci0gICAgc2V0U2VyaWZGb250RmFtaWx5KCJIaXJhZ2lubyBNaW5jaG8gUHJvTiIs
IFVTQ1JJUFRfS0FUQUtBTkFfT1JfSElSQUdBTkEpOwotICAgIHNldFNhbnNTZXJpZkZvbnRGYW1p
bHkoIkhpcmFnaW5vIEtha3UgR290aGljIFByb04iLCBVU0NSSVBUX0tBVEFLQU5BX09SX0hJUkFH
QU5BKTsKLQotICAgIC8vIFRoZXJlIGlzIG5vIHNlcmlmIEtvcmVhbiBmb250IGluIGRlZmF1bHQg
aU9TIGluc3RhbGxhdGlvbi4KLSAgICBzZXRTdGFuZGFyZEZvbnRGYW1pbHkoIkFwcGxlIFNEIEdv
dGhpYyBOZW8iLCBVU0NSSVBUX0hBTkdVTCk7Ci0gICAgc2V0U2VyaWZGb250RmFtaWx5KCJBcHBs
ZSBTRCBHb3RoaWMgTmVvIiwgVVNDUklQVF9IQU5HVUwpOwotICAgIHNldEZpeGVkRm9udEZhbWls
eSgiQXBwbGUgU0QgR290aGljIE5lbyIsIFVTQ1JJUFRfSEFOR1VMKTsKLSAgICBzZXRTYW5zU2Vy
aWZGb250RmFtaWx5KCJBcHBsZSBTRCBHb3RoaWMgTmVvIiwgVVNDUklQVF9IQU5HVUwpOwotCi0g
ICAgc2V0U3RhbmRhcmRGb250RmFtaWx5KCJUaW1lcyIsIFVTQ1JJUFRfQ09NTU9OKTsKLSAgICBz
ZXRGaXhlZEZvbnRGYW1pbHkoIkNvdXJpZXIiLCBVU0NSSVBUX0NPTU1PTik7Ci0gICAgc2V0U2Vy
aWZGb250RmFtaWx5KCJUaW1lcyIsIFVTQ1JJUFRfQ09NTU9OKTsKLSAgICBzZXRTYW5zU2VyaWZG
b250RmFtaWx5KCJIZWx2ZXRpY2EiLCBVU0NSSVBUX0NPTU1PTik7Ci19Ci0KLWJvb2wgU2V0dGlu
Z3M6OmRlZmF1bHRUZXh0QXV0b3NpemluZ0VuYWJsZWQoKQotewotICAgIHJldHVybiAhZGV2aWNl
SGFzSVBhZENhcGFiaWxpdHkoKSB8fCBbW2dldFVJQXBwbGljYXRpb25DbGFzcygpIHNoYXJlZEFw
cGxpY2F0aW9uXSBfaXNDbGFzc2ljXTsKLX0KLQotI2VuZGlmCi0KLWNvbnN0IFN0cmluZyYgU2V0
dGluZ3M6OmRlZmF1bHRNZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydCgp
Ci17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gZGVmYXVsdE1lZGlhQ29udGVu
dFR5cGVzIHsgInZpZGVvL21wNDtjb2RlY3M9aHZjMTp2aWRlby9tcDQ7Y29kZWNzPWhldjEiIH07
Ci0gICAgcmV0dXJuIGRlZmF1bHRNZWRpYUNvbnRlbnRUeXBlczsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGFnZS9jb2Nv
YS9TZXR0aW5nc0NvY29hLm1tCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAt
MSArMCwwICMjCi1MRgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323855</attachid>
            <date>2017-10-15 19:13:42 -0700</date>
            <delta_ts>2017-10-15 19:59:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-178321-20171015191341.patch</filename>
            <type>text/plain</type>
            <size>152476</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMzMyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDE3LTEwLTE1ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1NldHRpbmdzXSBTcGxpdCBub24tbWFj
cm8gZ2VuZXJhdGVkIHBhcnRzIG9mIFNldHRpbmdzIGludG8gU2V0dGluZ3NCYXNlIGJhc2UgY2xh
c3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODMy
MQorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFdvcmtpbmcg
dG93YXJkcyBnZXR0aW5nIGdlbmVyYXRlZCBTZXR0aW5ncyB3b3JraW5nIGFnYWluLCBidXQgaW4g
c21hbGxlciBwYXRjaGVzLCBzcGxpdAorICAgICAgICBub24tZ2VuZXJhdGVkIHBhcnQgb2ZmIGlu
dG8gU2V0dGluZ3NCYXNlIGFzIGEgZmlyc3Qgc3RlcC4KKyAgICAgICAgCisgICAgICAgIE9uZSBm
dW5jdGlvbiwgZWZmZWN0aXZlRnJhbWVGbGF0dGVuaW5nKCksIG5lZWRzIHRvIHJlbWFpbiBpbiBT
ZXR0aW5ncyBmb3Igbm93LCBhcyBpdCBkaXJlY3RseQorICAgICAgICByZWZlcmVuY2VzIGEgbWFj
cm8gZ2VuZXJhdGVkIGZ1bmN0aW9uLCBmcmFtZUZsYXR0ZW5pbmcoKS4KKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBwYWdlL1BhZ2UuaDoKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoK
KyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAgICogcGFnZS9TZXR0aW5nc0Jhc2Uu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oLgorICAgICAgICAq
IHBhZ2UvY29jb2EvU2V0dGluZ3NCYXNlQ29jb2EubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvY29jb2EvU2V0dGluZ3NDb2NvYS5tbS4KKyAgICAgICAgKiBwYWdlL2NvY29hL1Nl
dHRpbmdzQ29jb2EubW06IFJlbW92ZWQuCisKIDIwMTctMTAtMTQgIEFudG9pbmUgUXVpbnQgIDxn
cmFvdXRzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgYWxsIFdlYiBBbmltYXRpb25zIGNv
ZGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMjMzMjgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjI0Niw2ICsyMjQ2LDcg
QEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBhZ2UvU2VjdXJpdHlPcmlnaW5EYXRhLmNwcAog
ICAgIHBhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwCiAgICAgcGFnZS9TZXR0aW5ncy5jcHAKKyAgICBw
YWdlL1NldHRpbmdzQmFzZS5jcHAKICAgICBwYWdlL1NvY2tldFByb3ZpZGVyLmNwcAogICAgIHBh
Z2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCiAgICAgcGFnZS9TdXNwZW5kYWJsZVRpbWVyLmNwcApJ
bmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjIzMzI4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMzMxLDkgKzMzMzEsMTEgQEAK
IAkJN0NDMkRFMDMxRUNBMDRBNTAwMjdCNzc0IC8qIE5vdGlmaWNhdGlvbkRpcmVjdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NDMkRFMDIxRUNB
MDRBNTAwMjdCNzc0IC8qIE5vdGlmaWNhdGlvbkRpcmVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDQzU2NEI4MThCQUJFQTYwMDFCOTY1
MiAvKiBUZWxlcGhvbmVOdW1iZXJEZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0NDNTY0QjYxOEJBQkVBNjAwMUI5NjUyIC8qIFRlbGVwaG9u
ZU51bWJlckRldGVjdG9yLmggKi87IH07CiAJCTdDQzU2NEJBMThCQUM3MjAwMDFCOTY1MiAvKiBU
ZWxlcGhvbmVOdW1iZXJEZXRlY3RvckNvY29hLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQzU2NEI5MThCQUM3MjAwMDFCOTY1MiAvKiBUZWxlcGhv
bmVOdW1iZXJEZXRlY3RvckNvY29hLmNwcCAqLzsgfTsKKwkJN0NDNjYwQTIxRjkzQ0I5MDAwRDUw
MEU5IC8qIFNldHRpbmdzQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3Q0M2NjA5QjFGOTMwNTc5MDBENTAwRTkgLyogU2V0dGluZ3NCYXNlLmNw
cCAqLzsgfTsKIAkJN0NDNjk5NDAxOTFFQzVGNTAwQUYyMjcwIC8qIEpTV2ViS2l0TmFtZXNwYWNl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQzY5
OTNFMTkxRUM1RjUwMEFGMjI3MCAvKiBKU1dlYktpdE5hbWVzcGFjZS5jcHAgKi87IH07CiAJCTdD
QzY5OTQxMTkxRUM1RjUwMEFGMjI3MCAvKiBKU1dlYktpdE5hbWVzcGFjZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NDNjk5M0YxOTFFQzVGNTAwQUYy
MjcwIC8qIEpTV2ViS2l0TmFtZXNwYWNlLmggKi87IH07CiAJCTdDQzdFM0Q3MTcyMDhDMEYwMDND
NTI3NyAvKiBJRE5TY3JpcHRXaGl0ZUxpc3QudHh0IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0M3RTNENjE3MjA4QzBGMDAzQzUyNzcgLyogSUROU2Ny
aXB0V2hpdGVMaXN0LnR4dCAqLzsgfTsKKwkJN0NDOTcyMkUxRjkzRTMzNjAwMDRENENGIC8qIFNl
dHRpbmdzQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0NDNjYwOTkxRjkzMDU3ODAwRDUwMEU5IC8qIFNldHRpbmdzQmFzZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDQ0VCRkMwMUREOEY2QUIw
MDJDNDBCOCAvKiBTVkdMZW5ndGhWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0NFNThENTMxREQ3QjA5MzAwMTI4NTUyIC8qIFNWR0xlbmd0aFZh
bHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
N0NEMEJBMDQxQjhGNzlDOTAwNUNFQkJFIC8qIEFjdGl2ZURPTUNhbGxiYWNrTWljcm90YXNrLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRDBCQTAy
MUI4Rjc5QzkwMDVDRUJCRSAvKiBBY3RpdmVET01DYWxsYmFja01pY3JvdGFzay5jcHAgKi87IH07
CiAJCTdDRDBCQTA1MUI4Rjc5QzkwMDVDRUJCRSAvKiBBY3RpdmVET01DYWxsYmFja01pY3JvdGFz
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NEMEJB
MDMxQjhGNzlDOTAwNUNFQkJFIC8qIEFjdGl2ZURPTUNhbGxiYWNrTWljcm90YXNrLmggKi87IH07
CkBAIC00NDE5LDcgKzQ0MjEsNyBAQAogCQlBMTdDODEyMzBGMkE1Q0Y3MDA1REFBRUIgLyogSFRN
TEVsZW1lbnRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBMTdDODEyMTBGMkE1Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5Lmgg
Ki87IH07CiAJCUExN0QyNzVFMUVBQzU3OTgwMEJGMDFFNyAvKiBNZWRpYVNlbGVjdGlvbk9wdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE3RDI3
NUQxRUFDNTc5ODAwQkYwMUU3IC8qIE1lZGlhU2VsZWN0aW9uT3B0aW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTE3RkVFNjQxRjg4OTMyMjAw
MjFFODExIC8qIFBheW1lbnRTZXNzaW9uQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTE3RkVFNjMxRjg4OTMyMjAwMjFFODExIC8qIFBheW1lbnRT
ZXNzaW9uQmFzZS5oICovOyB9OwotCQlBMTgyRDVCNzFCRTcyMjY3MDA4N0E3Q0MgLyogU2V0dGlu
Z3NDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEExODJENUI2MUJFNzIyNjIwMDg3QTdDQyAvKiBTZXR0aW5nc0NvY29hLm1tICovOyB9OworCQlB
MTgyRDVCNzFCRTcyMjY3MDA4N0E3Q0MgLyogU2V0dGluZ3NCYXNlQ29jb2EubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTgyRDVCNjFCRTcyMjYyMDA4
N0E3Q0MgLyogU2V0dGluZ3NCYXNlQ29jb2EubW0gKi87IH07CiAJCUExODVCNDI5MUU4MjExQTEw
MERDOTExOCAvKiBQcmV2aWV3TG9hZGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTE4NUI0MjcxRTgyMTFBMTAwREM5MTE4IC8qIFByZXZpZXdMb2Fk
ZXIubW0gKi87IH07CiAJCUExODVCNDJBMUU4MjExQTEwMERDOTExOCAvKiBQcmV2aWV3TG9hZGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTg1QjQy
ODFFODIxMUExMDBEQzkxMTggLyogUHJldmlld0xvYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUExODg5MEFFMUFBMTNGMjUwMDI2QzMwMSAv
KiBQYXJlbnRhbENvbnRyb2xzQ29udGVudEZpbHRlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExODg5MEFDMUFBMTNGMjUwMDI2QzMwMSAvKiBQYXJl
bnRhbENvbnRyb2xzQ29udGVudEZpbHRlci5tbSAqLzsgfTsKQEAgLTExNTkwLDYgKzExNTkyLDgg
QEAKIAkJN0NDMkRFMDIxRUNBMDRBNTAwMjdCNzc0IC8qIE5vdGlmaWNhdGlvbkRpcmVjdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBOb3RpZmljYXRpb25EaXJlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0NDNTY0QjYxOEJBQkVBNjAwMUI5NjUyIC8qIFRlbGVwaG9uZU51bWJl
ckRldGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbGVwaG9uZU51
bWJlckRldGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQzU2NEI5MThC
QUM3MjAwMDFCOTY1MiAvKiBUZWxlcGhvbmVOdW1iZXJEZXRlY3RvckNvY29hLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlbGVwaG9uZU51bWJlckRldGVjdG9yQ29j
b2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0M2NjA5OTFGOTMwNTc4MDBE
NTAwRTkgLyogU2V0dGluZ3NCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNldHRpbmdzQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0M2NjA5QjFG
OTMwNTc5MDBENTAwRTkgLyogU2V0dGluZ3NCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNldHRpbmdzQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdDQzY5OTNFMTkxRUM1RjUwMEFGMjI3MCAvKiBKU1dlYktpdE5hbWVzcGFjZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYktpdE5hbWVzcGFjZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQzY5OTNGMTkxRUM1RjUwMEFGMjI3
MCAvKiBKU1dlYktpdE5hbWVzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1dlYktpdE5hbWVzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0M3
RTNENjE3MjA4QzBGMDAzQzUyNzcgLyogSUROU2NyaXB0V2hpdGVMaXN0LnR4dCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBJRE5TY3JpcHRXaGl0ZUxpc3QudHh0OyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTI4NzksNyArMTI4ODMsNyBAQAogCQlBMTdDODEyMTBGMkE1Q0Y3MDA1REFB
RUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEhUTUxFbGVtZW50RmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
MTdEMjc1RDFFQUM1Nzk4MDBCRjAxRTcgLyogTWVkaWFTZWxlY3Rpb25PcHRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWVkaWFTZWxlY3Rpb25PcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTE3RkVFNjMxRjg4OTMyMjAwMjFFODExIC8qIFBheW1lbnRTZXNzaW9uQmFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQYXltZW50U2Vzc2lvbkJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQTE4MkQ1QjYxQkU3MjI2MjAwODdBN0NDIC8qIFNldHRpbmdzQ29jb2EubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTZXR0aW5nc0NvY29hLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMTgyRDVCNjFCRTcyMjYyMDA4N0E3Q0MgLyog
U2V0dGluZ3NCYXNlQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBTZXR0aW5nc0Jhc2VDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTE4NUI0MjcxRTgyMTFBMTAwREM5MTE4IC8qIFByZXZpZXdMb2FkZXIubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQcmV2aWV3TG9hZGVyLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBMTg1QjQyODFFODIxMUExMDBEQzkxMTggLyogUHJldmlld0xv
YWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmV2aWV3TG9hZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExODg5MEFDMUFBMTNGMjUwMDI2QzMwMSAv
KiBQYXJlbnRhbENvbnRyb2xzQ29udGVudEZpbHRlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFBhcmVudGFsQ29udHJvbHNDb250ZW50RmlsdGVyLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkwNTUsMTAgKzE5MDU5LDEwIEBACiAJCTUxN0M4
NzA3MUY4RThGRjIwMEVCODA3NiAvKiBjb250ZXh0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk1MTdDODcwODFGOEVCOUJGMDBFQjgwNzYgLyogU1dDb250
ZXh0TWFuYWdlci5jcHAgKi8sCi0JCQkJNTE3Qzg3MDkxRjhFQjlDMDAwRUI4MDc2IC8qIFNXQ29u
dGV4dE1hbmFnZXIuaCAqLywKIAkJCQk1MTdDODcxMTFGOEVFNzJGMDBFQjgwNzYgLyogU2Vydmlj
ZVdvcmtlclRocmVhZC5jcHAgKi8sCiAJCQkJNTE3Qzg3MTAxRjhFRTcyRTAwRUI4MDc2IC8qIFNl
cnZpY2VXb3JrZXJUaHJlYWQuaCAqLywKKwkJCQk1MTdDODcwODFGOEVCOUJGMDBFQjgwNzYgLyog
U1dDb250ZXh0TWFuYWdlci5jcHAgKi8sCisJCQkJNTE3Qzg3MDkxRjhFQjlDMDAwRUI4MDc2IC8q
IFNXQ29udGV4dE1hbmFnZXIuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gY29udGV4dDsKIAkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xOTMwNyw3ICsxOTMxMSw3IEBACiAJCQkJQUQ1QTBD
MjIxREVDQTM3RTAwNzA3MDU0IC8qIFBlcmZvcm1hbmNlTG9nZ2luZ0NvY29hLm1tICovLAogCQkJ
CUFERkUyQjU0MUJENUY0MTIwMERBQjQ1NyAvKiBSZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29hLm1t
ICovLAogCQkJCUE1MDcxRTg4MUM1NkQ0RkEwMDk5NTFCRSAvKiBSZXNvdXJjZVVzYWdlVGhyZWFk
Q29jb2EubW0gKi8sCi0JCQkJQTE4MkQ1QjYxQkU3MjI2MjAwODdBN0NDIC8qIFNldHRpbmdzQ29j
b2EubW0gKi8sCisJCQkJQTE4MkQ1QjYxQkU3MjI2MjAwODdBN0NDIC8qIFNldHRpbmdzQmFzZUNv
Y29hLm1tICovLAogCQkJCTI2MjU1RjAxMTg4NzhFMTEwMDA2RTFGRCAvKiBVc2VyQWdlbnQuaCAq
LywKIAkJCQk1RDU5NzVCNjE5NjM2MzdCMDBEMDA4NzggLyogVXNlckFnZW50Lm1tICovLAogCQkJ
KTsKQEAgLTE5ODc4LDYgKzE5ODgyLDggQEAKIAkJCQkxNEM5QTVFOTBCM0QxMDVGMDA1QTAyMzIg
LyogU2V0dGluZ3MuY3BwICovLAogCQkJCUY1ODc4NjNBMDJERTNBMTQwMUVBNDEyMiAvKiBTZXR0
aW5ncy5oICovLAogCQkJCUJDNTlERUY4MTY5REVEQzMwMDE2QUMzNCAvKiBTZXR0aW5ncy5pbiAq
LywKKwkJCQk3Q0M2NjA5QjFGOTMwNTc5MDBENTAwRTkgLyogU2V0dGluZ3NCYXNlLmNwcCAqLywK
KwkJCQk3Q0M2NjA5OTFGOTMwNTc4MDBENTAwRTkgLyogU2V0dGluZ3NCYXNlLmggKi8sCiAJCQkJ
NUM2ODhBQTIxRDM4MTI2RjAwMEI1NEZBIC8qIFNvY2tldFByb3ZpZGVyLmNwcCAqLywKIAkJCQk1
QzdDODhENzFEMEYxRjJCMDA5RDJGNkQgLyogU29ja2V0UHJvdmlkZXIuaCAqLywKIAkJCQk2MjZD
REUwQzExNDA0MjRDMDAxRTVBNjggLyogU3BhdGlhbE5hdmlnYXRpb24uY3BwICovLApAQCAtMjg1
NTIsNyArMjg1NTgsNiBAQAogCQkJCTdDODEzOUFBMUVENjYwNEIwMENFMjZFOCAvKiBKU0RPTUNh
c3RlZFRoaXNFcnJvckJlaGF2aW9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTNDMkMzNDFCQzI5
QThGMDA3NTIwNEMgLyogSlNET01Db25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMw
ODQxMzQxQ0REQjE1NTAwQjA5NThDIC8qIEpTRE9NQ29udmVydC5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNTE3Qzg3MEIxRjhFQkIyNTAwRUI4MDc2IC8qIFNXQ29udGV4dE1hbmFnZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTdDOEUzNEFEMUU0QTMzQUYwMDU0Q0UyMyAvKiBKU0RPTUNvbnZlcnRBbnku
aCBpbiBIZWFkZXJzICovLAogCQkJCTdDOEUzNEFFMUU0QTMzQUYwMDU0Q0UyMyAvKiBKU0RPTUNv
bnZlcnRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzhFMzRBRjFFNEEzM0FGMDA1NENFMjMg
LyogSlNET01Db252ZXJ0Qm9vbGVhbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDEwNywxMCArMzAx
MTIsMTIgQEAKIAkJCQk1MTdBNTM0RjFGNTRBOEJBMDBEQ0RDMEEgLyogU2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxN0E1MzI5MUY0QjkwQjkwMERD
REMwQSAvKiBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MUYxNzU2OTFGM0VCQzgzMDBDNzQ5NTAgLyogU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbk9w
dGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxQkNDRTMwMUY4RjE3OUUwMDZCQTBFRCAvKiBT
ZXJ2aWNlV29ya2VyVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUYxNzU2QzFGM0VCQzgz
MDBDNzQ5NTAgLyogU2VydmljZVdvcmtlclVwZGF0ZVZpYUNhY2hlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5MzMwOUUxMDA5OUU2NDkyMDA1NkU1ODEgLyogU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUI4REJEQjRDMTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxl
Y3Rpb25Db21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTk0RjA4MjQ1RTU5MDAxRTlB
QkMgLyogU2V0dGluZ3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDQzk3MjJFMUY5M0UzMzYwMDA0
RDRDRiAvKiBTZXR0aW5nc0Jhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzRUY3NjZCMTY1MzBB
NjEwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzREQ0
NTAxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
NUVCOEM0MEU4MjAzMUIwMEIyNTk2NSAvKiBTaGFkb3dEYXRhLmggaW4gSGVhZGVycyAqLywKQEAg
LTMwMzM3LDcgKzMwMzQ0LDYgQEAKIAkJCQlCMjIyNzlDNTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5Qzgw
RDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFQmxlbmRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMjIyNzlDQjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAotCQkJCTUxQkNDRTMwMUY4RjE3OUUwMDZCQTBFRCAvKiBTZXJ2aWNlV29y
a2VyVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzlDRTBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIy
MjI3OUQxMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE5MjEzMjc1MTFDMEU2QkIwMDQ1NjIzOCAvKiBTVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDUyNyw2ICszMDUzMyw3IEBACiAJCQkJ
QjIyMjdBRjYwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1pvb21BbmRQYW4uaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyRTRFQzk4MEQwMEMyMkIwMDQzMjY0MyAvKiBTVkdab29tRXZlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxN0E1MzFEMUY0QjUzQjEwMERDREMwQSAvKiBTV0NsaWVudENvbm5lY3Rp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCTUxN0M4NzBCMUY4RUJCMjUwMEVCODA3NiAvKiBTV0Nv
bnRleHRNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTdBNTJGMDFGNDc1MzVCMDBEQ0RD
MEEgLyogU1dTZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRjY0NTk3MUY0QTY4NkYwMEI1
NERFRCAvKiBTV1NlcnZlclJlZ2lzdHJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3QTUz
NDYxRjUwQzE3RjAwRENEQzBBIC8qIFNXU2VydmVyV29ya2VyLmggaW4gSGVhZGVycyAqLywKQEAg
LTMxNTEyLDcgKzMxNTE5LDYgQEAKIAkJCQk0MUQxMjlDRjFGM0QwRUZFMDBEMTVFNDcgLyogQ2Fj
aGVTdG9yYWdlQ29ubmVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDNBRjhFNjFBQzVC
N0U4MDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5
QUUyRDk2MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCTUxN0M4NzE4MUY4RkQ0RDkwMEVCODA3NiAvKiBTZXJ2aWNlV29ya2VyQ29udGV4
dERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTUyMDc2MDQxRjI2NzVGRTAwN0QyQUFCIC8q
IENhbGxUcmFjZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE1Q0RBRjQxRTZCOEY4NzAwNEYx
MUVFIC8qIENhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTQ5NDg0RkMxMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNHcmFkaWVudC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTMyMTUzLDcgKzMyMTU5LDYgQEAKIAkJCQk5NkFCQTQyMzE0QkNCODBFMDBE
NTYyMDQgLyogR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjJFRDk3NzEwQjFGNTVDRTAwMjU3RDBGIC8qIEdyYXBoaWNzQ29udGV4dENHLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUIyNzdCNDA0MEIyMkYzN0MwMDA0QkVDNiAvKiBHcmFwaGljc0Nv
bnRleHRDb2NvYS5tbSBpbiBTb3VyY2VzICovLAotCQkJCTUxQkNDRTJGMUY4RjE3OTUwMDZCQTBF
RCAvKiBTZXJ2aWNlV29ya2VyVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTgwQjBD
MEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTQ5OUIzRUQ2MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZBMjRENzkxNjJERjkxOTAwQTNGNEMwIC8qIEdyYXBoaWNzTGF5ZXJVcGRh
dGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzM0NTgsNyArMzM0NjMsNiBAQAogCQkJCUM5NkY1
RUM2MUI1ODcyMjYwMDkxRUE5RCAvKiBNZWRpYVNlc3Npb25JbnRlcnJ1cHRpb25Qcm92aWRlck1h
Yy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUM5MEY2NTU1MUIyMjUzQjEwMDIxNjNBMSAvKiBNZWRp
YVNlc3Npb25NYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNENjY5RDY4MUQyMzM2NEIw
MDREMTg2NiAvKiBNZWRpYVNlc3Npb25NYW5hZ2VyQ29jb2EuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJNTE3Qzg3MEExRjhFQkIyNTAwRUI4MDc2IC8qIFNXQ29udGV4dE1hbmFnZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMDc2MzhBOUExODg0NDg3MjAwRTE1QTFCIC8qIE1lZGlhU2Vzc2lvbk1h
bmFnZXJJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQkwN0VEQzNFRTFBQUNCNzVEMDA5ODNFQjUg
LyogTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEM0E0OTVF
MTdBOUQwMUIwMDI3NEU0MiAvKiBNZWRpYVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTM0
MDE1LDYgKzM0MDE5LDcgQEAKIAkJCQkyRDkzQUVFNDE5REY1NjQxMDAyQTg2QzMgLyogU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxRjE3NTVDMUYzRUJD
ODMwMEM3NDk1MCAvKiBTZXJ2aWNlV29ya2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjE3
NTVFMUYzRUJDODMwMEM3NDk1MCAvKiBTZXJ2aWNlV29ya2VyQ29udGFpbmVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTUxN0M4NzE4MUY4RkQ0RDkwMEVCODA3NiAvKiBTZXJ2aWNlV29ya2VyQ29u
dGV4dERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMTc1NjAxRjNFQkM4MzAwQzc0OTUw
IC8qIFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYx
NzU2MjFGM0VCQzgzMDBDNzQ5NTAgLyogU2VydmljZVdvcmtlckpvYi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1MTdBNTMyNTFGNEI5MDU1MDBEQ0RDMEEgLyogU2VydmljZVdvcmtlckpvYkRhdGEu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zNDAyMywxMCArMzQwMjgsMTIgQEAKIAkJCQk1MTdBNTM0
RTFGNTRBOEJBMDBEQ0RDMEEgLyogU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTE3QTUzMjgxRjRCOTBCOTAwRENEQzBBIC8qIFNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25LZXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGNjQ1QTIxRjRCRjUz
QzAwQjU0REVEIC8qIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25PcHRpb25zLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTUxQkNDRTJGMUY4RjE3OTUwMDZCQTBFRCAvKiBTZXJ2aWNlV29ya2VyVGhy
ZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTBGMDk5RTY0OTIwMDU2RTU4MSAvKiBT
ZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCOERCREI0QjEz
MEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNEM5QTVFQTBCM0QxMDVGMDA1QTAyMzIgLyogU2V0dGluZ3MuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQTE4MkQ1QjcxQkU3MjI2NzAwODdBN0NDIC8qIFNldHRpbmdzQ29jb2EubW0gaW4g
U291cmNlcyAqLywKKwkJCQk3Q0M2NjBBMjFGOTNDQjkwMDBENTAwRTkgLyogU2V0dGluZ3NCYXNl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUExODJENUI3MUJFNzIyNjcwMDg3QTdDQyAvKiBTZXR0
aW5nc0Jhc2VDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGM0RENDRGMTJGNUVBMUIwMDBE
OTE5MCAvKiBTaGFkb3dCbHVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNUVCOEMzMEU4MjAz
MUIwMEIyNTk2NSAvKiBTaGFkb3dEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE2RDE2OTYy
MTM0NkI0OUIwMDBFQjc3MCAvKiBTaGFkb3dSb290LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzQz
MjcsNiArMzQzMzQsNyBAQAogCQkJCUIyMjI3QUY1MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdab29t
QW5kUGFuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRTRFQzk3MEQwMEMyMkIwMDQzMjY0MyAv
KiBTVkdab29tRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3QTUzMUMxRjRCNTNCMTAw
RENEQzBBIC8qIFNXQ2xpZW50Q29ubmVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTdD
ODcwQTFGOEVCQjI1MDBFQjgwNzYgLyogU1dDb250ZXh0TWFuYWdlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1MTdBNTJGMTFGNDc1NEU3MDBEQ0RDMEEgLyogU1dTZXJ2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTFGNjQ1OTYxRjRBNjg2RjAwQjU0REVEIC8qIFNXU2VydmVyUmVnaXN0cmF0
aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxN0E1MzQ1MUY1MEMxN0YwMERDREMwQSAvKiBT
V1NlcnZlcldvcmtlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCShyZXZp
c2lvbiAyMjMzMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIGVudW0gY2xhc3MgRGlkV3JhcCA6IGJvb2w7CiBjbGFzcyBQ
YWdlIDogcHVibGljIFN1cHBsZW1lbnRhYmxlPFBhZ2U+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShQYWdlKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBmcmllbmQgY2xh
c3MgU2V0dGluZ3M7CisgICAgZnJpZW5kIGNsYXNzIFNldHRpbmdzQmFzZTsKIAogcHVibGljOgog
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHVwZGF0ZVN0eWxlRm9yQWxsUGFnZXNBZnRl
ckdsb2JhbENoYW5nZUluRW52aXJvbm1lbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
Y3BwCShyZXZpc2lvbiAyMjMzMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDEsODYgKzQxLDEzIEBACiAjaW5jbHVkZSAiSGlzdG9yeUl0
ZW0uaCIKICNpbmNsdWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVk
ZSAiUGFnZUNhY2hlLmgiCi0jaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCiAj
aW5jbHVkZSAiU3RvcmFnZU1hcC5oIgogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKLSNpZiBQ
TEFURk9STShDT0NPQSkKLSNpbmNsdWRlIDx3dGYvc3BpL2Rhcndpbi9keWxkU1BJLmg+Ci0jZW5k
aWYKLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCi0jaW5j
bHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5oIgotI2VuZGlmCi0KLSNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKQotI2luY2x1ZGUgIk1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
LmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgdm9pZCBzZXRJbWFn
ZUxvYWRpbmdTZXR0aW5ncyhQYWdlKiBwYWdlKQotewotICAgIGlmICghcGFnZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmcGFnZS0+bWFpbkZyYW1lKCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYg
KCFmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmcmFt
ZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5zZXRJbWFnZXNFbmFibGVkKHBh
Z2UtPnNldHRpbmdzKCkuYXJlSW1hZ2VzRW5hYmxlZCgpKTsKLSAgICAgICAgZnJhbWUtPmRvY3Vt
ZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCkuc2V0QXV0b0xvYWRJbWFnZXMocGFnZS0+c2V0
dGluZ3MoKS5sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoKSk7Ci0gICAgfQotfQotCi1zdGF0aWMg
dm9pZCBpbnZhbGlkYXRlQWZ0ZXJHZW5lcmljRmFtaWx5Q2hhbmdlKFBhZ2UqIHBhZ2UpCi17Ci0g
ICAgaW52YWxpZGF0ZUZvbnRDYXNjYWRlQ2FjaGUoKTsKLSAgICBpZiAocGFnZSkKLSAgICAgICAg
cGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7Ci19Ci0KLSNpZiBVU0UoQVZG
T1VOREFUSU9OKQotYm9vbCBTZXR0aW5nczo6Z0FWRm91bmRhdGlvbkVuYWJsZWQgPSB0cnVlOwot
Ym9vbCBTZXR0aW5nczo6Z0FWRm91bmRhdGlvbk5TVVJMU2Vzc2lvbkVuYWJsZWQgPSB0cnVlOwot
I2VuZGlmCi0KLSNpZiBQTEFURk9STShDT0NPQSkKLWJvb2wgU2V0dGluZ3M6OmdRVEtpdEVuYWJs
ZWQgPSBmYWxzZTsKLSNlbmRpZgotCi0jaWYgVVNFKEdTVFJFQU1FUikKLWJvb2wgU2V0dGluZ3M6
OmdHU3RyZWFtZXJFbmFibGVkID0gdHJ1ZTsKLSNlbmRpZgotCi1ib29sIFNldHRpbmdzOjpnTW9j
a1Njcm9sbGJhcnNFbmFibGVkID0gZmFsc2U7Ci1ib29sIFNldHRpbmdzOjpnVXNlc092ZXJsYXlT
Y3JvbGxiYXJzID0gZmFsc2U7Ci1ib29sIFNldHRpbmdzOjpnTW9ja1Njcm9sbEFuaW1hdG9yRW5h
YmxlZCA9IGZhbHNlOwotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLWJvb2wgU2V0dGluZ3M6
OmdNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkID0gZmFsc2U7Ci1ib29sIFNldHRpbmdzOjpnTWVk
aWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uID0gdHJ1ZTsKLSNlbmRpZgotCi0jaWYg
UExBVEZPUk0oV0lOKQotYm9vbCBTZXR0aW5nczo6Z1Nob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGlt
ZXJzID0gdHJ1ZTsKLSNlbmRpZgotICAgIAotYm9vbCBTZXR0aW5nczo6Z1Nob3VsZFJlc3BlY3RQ
cmlvcml0eUluQ1NTQXR0cmlidXRlU2V0dGVycyA9IGZhbHNlOwotYm9vbCBTZXR0aW5nczo6Z0xv
d1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkID0gZmFsc2U7Ci1ib29sIFNldHRpbmdz
OjpnUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWRFbmFibGVkID0gZmFsc2U7Ci1ib29sIFNl
dHRpbmdzOjpnQWxsb3dzQW55U1NMQ2VydGlmaWNhdGUgPSBmYWxzZTsKLQotI2lmIFBMQVRGT1JN
KElPUykKLWJvb2wgU2V0dGluZ3M6OmdOZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVkID0g
ZmFsc2U7Ci1ib29sIFNldHRpbmdzOjpnQVZLaXRFbmFibGVkID0gZmFsc2U7Ci1ib29sIFNldHRp
bmdzOjpnU2hvdWxkT3B0T3V0T2ZOZXR3b3JrU3RhdGVPYnNlcnZhdGlvbiA9IGZhbHNlOwotI2Vu
ZGlmCi1ib29sIFNldHRpbmdzOjpnTWFuYWdlQXVkaW9TZXNzaW9uID0gZmFsc2U7Ci1ib29sIFNl
dHRpbmdzOjpnQ3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkID0gZmFsc2U7Ci0KIC8vIE5PVEVz
CiAvLyAgMSkgRWRpdGluZ01hY0JlaGF2aW9yIGNvbXByaXNlcyBUaWdlciwgTGVvcGFyZCwgU25v
d0xlb3BhcmQgYW5kIGlPUyBidWlsZHMsIGFzIHdlbGwgYXMgUXRXZWJLaXQgd2hlbiBidWlsdCBv
biBNYWM7CiAvLyAgMikgRWRpdGluZ1dpbmRvd3NCZWhhdmlvciBjb21wcmlzZXMgV2luMzIgYnVp
bGQ7CkBAIC0xNDQsMTkgKzcxLDYgQEAgc3RhdGljIEVkaXRpbmdCZWhhdmlvclR5cGUgZWRpdGlu
Z0JlaGF2aQogICAgIDsKIH0KIAotYm9vbCBTZXR0aW5nczo6ZGVmYXVsdEN1c3RvbVBhc3RlYm9h
cmREYXRhRW5hYmxlZCgpCi17Ci0jaWYgUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJT
SU9OX01BWF9BTExPV0VEID49IDExMDMwMAotICAgIHJldHVybiBJT1NBcHBsaWNhdGlvbjo6aXNN
b2JpbGVTYWZhcmkoKSB8fCBkeWxkX2dldF9wcm9ncmFtX3Nka192ZXJzaW9uKCkgPj0gRFlMRF9J
T1NfVkVSU0lPTl8xMV8zOwotI2VsaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJ
T05fTUFYX0FMTE9XRUQgPj0gMTAxMzAwCi0gICAgcmV0dXJuIE1hY0FwcGxpY2F0aW9uOjppc1Nh
ZmFyaSgpIHx8IGR5bGRfZ2V0X3Byb2dyYW1fc2RrX3ZlcnNpb24oKSA+IERZTERfTUFDT1NYX1ZF
UlNJT05fMTBfMTM7Ci0jZWxpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIE1hY0FwcGxpY2F0
aW9uOjppc1NhZmFyaSgpOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQog
I2lmIFBMQVRGT1JNKENPQ09BKQogc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdFlvdVR1YmVGbGFz
aFBsdWdpblJlcGxhY2VtZW50RW5hYmxlZCA9IHRydWU7CiAjZWxzZQpAQCAtMTkyLDcgKzEwNiw2
IEBAIHN0YXRpYyBjb25zdCBib29sIGRlZmF1bHRRdWlja1RpbWVQbHVnaW4KICNlbmRpZgogCiBz
dGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0UmVxdWlyZXNVc2VyR2VzdHVyZVRvTG9hZFZpZGVvID0g
dHJ1ZTsKLQogc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdEFsbG93c1BpY3R1cmVJblBpY3R1cmVN
ZWRpYVBsYXliYWNrID0gdHJ1ZTsKIAogc3RhdGljIGNvbnN0IGRvdWJsZSBkZWZhdWx0SW5jcmVt
ZW50YWxSZW5kZXJpbmdTdXBwcmVzc2lvblRpbWVvdXRJblNlY29uZHMgPSA1OwpAQCAtMjA0LDI0
MiArMTE3LDIyIEBAIHN0YXRpYyBjb25zdCBib29sIGRlZmF1bHRVbmlmaWVkVGV4dENoZWMKIHN0
YXRpYyBjb25zdCBib29sIGRlZmF1bHRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQgPSB0cnVlOwog
c3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQg
PSBmYWxzZTsKIAotLy8gVGhpcyBhbW91bnQgb2YgdGltZSBtdXN0IGhhdmUgZWxhcHNlZCBiZWZv
cmUgd2Ugd2lsbCBldmVuIGNvbnNpZGVyIHNjaGVkdWxpbmcgYSBsYXlvdXQgd2l0aG91dCBhIGRl
bGF5LgotLy8gRklYTUU6IEZvciBmYXN0ZXIgbWFjaGluZXMgdGhpcyB2YWx1ZSBjYW4gcmVhbGx5
IGJlIGxvd2VyZWQgdG8gMjAwLiAyNTAgaXMgYWRlcXVhdGUsIGJ1dCBhIGxpdHRsZSBoaWdoCi0v
LyBmb3IgZHVhbCBHNXMuIDopCi1zdGF0aWMgY29uc3QgU2Vjb25kcyBsYXlvdXRTY2hlZHVsZVRo
cmVzaG9sZCA9IDI1MF9tczsKLQotU2V0dGluZ3M6OlNldHRpbmdzKFBhZ2UqIHBhZ2UpCi0gICAg
OiBtX3BhZ2UobnVsbHB0cikKLSAgICAsIG1fbWVkaWFUeXBlT3ZlcnJpZGUoInNjcmVlbiIpCi0g
ICAgLCBtX2ZvbnRHZW5lcmljRmFtaWxpZXMoc3RkOjptYWtlX3VuaXF1ZTxGb250R2VuZXJpY0Zh
bWlsaWVzPigpKQotICAgICwgbV9zdG9yYWdlQmxvY2tpbmdQb2xpY3koU2VjdXJpdHlPcmlnaW46
OkFsbG93QWxsU3RvcmFnZSkKLSAgICAsIG1fbGF5b3V0SW50ZXJ2YWwobGF5b3V0U2NoZWR1bGVU
aHJlc2hvbGQpCi0gICAgLCBtX21pbmltdW1ET01UaW1lckludGVydmFsKERPTVRpbWVyOjpkZWZh
dWx0TWluaW11bUludGVydmFsKCkpCi0gICAgU0VUVElOR1NfSU5JVElBTElaRVJfTElTVAotICAg
ICwgbV9pc0phdmFFbmFibGVkKGZhbHNlKQotICAgICwgbV9pc0phdmFFbmFibGVkRm9yTG9jYWxG
aWxlcyh0cnVlKQotICAgICwgbV9sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoZmFsc2UpCi0gICAg
LCBtX2FyZUltYWdlc0VuYWJsZWQodHJ1ZSkKLSAgICAsIG1fcHJlZmVyTUlNRVR5cGVGb3JJbWFn
ZXMoZmFsc2UpCi0gICAgLCBtX2FyZVBsdWdpbnNFbmFibGVkKGZhbHNlKQotICAgICwgbV9pc1Nj
cmlwdEVuYWJsZWQoZmFsc2UpCi0gICAgLCBtX25lZWRzQWRvYmVGcmFtZVJlbG9hZGluZ1F1aXJr
KGZhbHNlKQotICAgICwgbV91c2VzUGFnZUNhY2hlKGZhbHNlKQotICAgICwgbV9mb250UmVuZGVy
aW5nTW9kZSgwKQotICAgICwgbV9zaG93VGlsZWRTY3JvbGxpbmdJbmRpY2F0b3IoZmFsc2UpCi0g
ICAgLCBtX2JhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKGZhbHNlKQotICAgICwgbV9k
bnNQcmVmZXRjaGluZ0VuYWJsZWQoZmFsc2UpCi0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAg
ICAsIG1fdG91Y2hFdmVudEVtdWxhdGlvbkVuYWJsZWQoZmFsc2UpCi0jZW5kaWYKLSAgICAsIG1f
c2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChmYWxzZSkKLSAgICAsIG1fdGltZVdp
dGhvdXRNb3VzZU1vdmVtZW50QmVmb3JlSGlkaW5nQ29udHJvbHMoM19zKQotICAgICwgbV9zZXRJ
bWFnZUxvYWRpbmdTZXR0aW5nc1RpbWVyKCp0aGlzLCAmU2V0dGluZ3M6OmltYWdlTG9hZGluZ1Nl
dHRpbmdzVGltZXJGaXJlZCkKLSAgICAsIG1faGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0Vu
YWJsZWQoZmFsc2UpCi0gICAgLCBtX2hpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5h
YmxlZChmYWxzZSkKLSAgICAsIG1fZm9udEZhbGxiYWNrUHJlZmVyc1BpY3RvZ3JhcGhzKGZhbHNl
KQotICAgICwgbV9mb3JjZVBlbmRpbmdXZWJHTFBvbGljeShmYWxzZSkKLXsKLSAgICAvLyBBIEZy
YW1lIG1heSBub3QgaGF2ZSBiZWVuIGNyZWF0ZWQgeWV0LCBzbyB3ZSBpbml0aWFsaXplIHRoZSBB
dG9taWNTdHJpbmcKLSAgICAvLyBoYXNoIGJlZm9yZSB0cnlpbmcgdG8gdXNlIGl0LgotICAgIEF0
b21pY1N0cmluZzo6aW5pdCgpOwotICAgIGluaXRpYWxpemVEZWZhdWx0Rm9udEZhbWlsaWVzKCk7
Ci0gICAgbV9wYWdlID0gcGFnZTsgLy8gUGFnZSBpcyBub3QgeWV0IGZ1bGx5IGluaXRpYWxpemVk
IHdoZW4gY29uc3RydWN0aW5nIFNldHRpbmdzLCBzbyBrZWVwaW5nIG1fcGFnZSBudWxsIG92ZXIg
aW5pdGlhbGl6ZURlZmF1bHRGb250RmFtaWxpZXMoKSBjYWxsLgotfQotCi1TZXR0aW5nczo6flNl
dHRpbmdzKCkKLXsKLX0KLQogUmVmPFNldHRpbmdzPiBTZXR0aW5nczo6Y3JlYXRlKFBhZ2UqIHBh
Z2UpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0dGluZ3MocGFnZSkpOwogfQogCi1T
RVRUSU5HU19TRVRURVJfQk9ESUVTCi0KLSNpZiAhUExBVEZPUk0oQ09DT0EpCi12b2lkIFNldHRp
bmdzOjppbml0aWFsaXplRGVmYXVsdEZvbnRGYW1pbGllcygpCi17Ci0gICAgLy8gT3RoZXIgcGxh
dGZvcm1zIGNhbiBzZXQgdXAgZm9udHMgZnJvbSBhIGNsaWVudCwgYnV0IG9uIE1hYywgd2Ugd2Fu
dCBpdCBpbiBXZWJDb3JlIHRvIHNoYXJlIGNvZGUgYmV0d2VlbiBXZWJLaXQxIGFuZCBXZWJLaXQy
LgotfQotI2VuZGlmCi0KLWNvbnN0IEF0b21pY1N0cmluZyYgU2V0dGluZ3M6OnN0YW5kYXJkRm9u
dEZhbWlseShVU2NyaXB0Q29kZSBzY3JpcHQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZm9udEdl
bmVyaWNGYW1pbGllcy0+c3RhbmRhcmRGb250RmFtaWx5KHNjcmlwdCk7Ci19Ci0KLXZvaWQgU2V0
dGluZ3M6OnNldFN0YW5kYXJkRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwg
VVNjcmlwdENvZGUgc2NyaXB0KQotewotICAgIGJvb2wgY2hhbmdlcyA9IG1fZm9udEdlbmVyaWNG
YW1pbGllcy0+c2V0U3RhbmRhcmRGb250RmFtaWx5KGZhbWlseSwgc2NyaXB0KTsKLSAgICBpZiAo
Y2hhbmdlcykKLSAgICAgICAgaW52YWxpZGF0ZUFmdGVyR2VuZXJpY0ZhbWlseUNoYW5nZShtX3Bh
Z2UpOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIFNldHRpbmdzOjpmaXhlZEZvbnRGYW1pbHko
VVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAotewotICAgIHJldHVybiBtX2ZvbnRHZW5lcmljRmFt
aWxpZXMtPmZpeGVkRm9udEZhbWlseShzY3JpcHQpOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRG
aXhlZEZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDb2RlIHNj
cmlwdCkKLXsKLSAgICBib29sIGNoYW5nZXMgPSBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNldEZp
eGVkRm9udEZhbWlseShmYW1pbHksIHNjcmlwdCk7Ci0gICAgaWYgKGNoYW5nZXMpCi0gICAgICAg
IGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKLX0KLQotY29uc3Qg
QXRvbWljU3RyaW5nJiBTZXR0aW5nczo6c2VyaWZGb250RmFtaWx5KFVTY3JpcHRDb2RlIHNjcmlw
dCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zZXJpZkZvbnRG
YW1pbHkoc2NyaXB0KTsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0U2VyaWZGb250RmFtaWx5KGNv
bnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCi17Ci0gICAgYm9v
bCBjaGFuZ2VzID0gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zZXRTZXJpZkZvbnRGYW1pbHkoZmFt
aWx5LCBzY3JpcHQpOwotICAgIGlmIChjaGFuZ2VzKQotICAgICAgICBpbnZhbGlkYXRlQWZ0ZXJH
ZW5lcmljRmFtaWx5Q2hhbmdlKG1fcGFnZSk7Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgU2V0
dGluZ3M6OnNhbnNTZXJpZkZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAotewot
ICAgIHJldHVybiBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNhbnNTZXJpZkZvbnRGYW1pbHkoc2Ny
aXB0KTsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0U2Fuc1NlcmlmRm9udEZhbWlseShjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseSwgVVNjcmlwdENvZGUgc2NyaXB0KQotewotICAgIGJvb2wgY2hh
bmdlcyA9IG1fZm9udEdlbmVyaWNGYW1pbGllcy0+c2V0U2Fuc1NlcmlmRm9udEZhbWlseShmYW1p
bHksIHNjcmlwdCk7Ci0gICAgaWYgKGNoYW5nZXMpCi0gICAgICAgIGludmFsaWRhdGVBZnRlckdl
bmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0
aW5nczo6Y3Vyc2l2ZUZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAotewotICAg
IHJldHVybiBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPmN1cnNpdmVGb250RmFtaWx5KHNjcmlwdCk7
Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldEN1cnNpdmVGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCi17Ci0gICAgYm9vbCBjaGFuZ2VzID0g
bV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zZXRDdXJzaXZlRm9udEZhbWlseShmYW1pbHksIHNjcmlw
dCk7Ci0gICAgaWYgKGNoYW5nZXMpCi0gICAgICAgIGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1p
bHlDaGFuZ2UobV9wYWdlKTsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nczo6ZmFu
dGFzeUZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAotewotICAgIHJldHVybiBt
X2ZvbnRHZW5lcmljRmFtaWxpZXMtPmZhbnRhc3lGb250RmFtaWx5KHNjcmlwdCk7Ci19Ci0KLXZv
aWQgU2V0dGluZ3M6OnNldEZhbnRhc3lGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCi17Ci0gICAgYm9vbCBjaGFuZ2VzID0gbV9mb250R2Vu
ZXJpY0ZhbWlsaWVzLT5zZXRGYW50YXN5Rm9udEZhbWlseShmYW1pbHksIHNjcmlwdCk7Ci0gICAg
aWYgKGNoYW5nZXMpCi0gICAgICAgIGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2Uo
bV9wYWdlKTsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nczo6cGljdG9ncmFwaEZv
bnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAotewotICAgIHJldHVybiBtX2ZvbnRH
ZW5lcmljRmFtaWxpZXMtPnBpY3RvZ3JhcGhGb250RmFtaWx5KHNjcmlwdCk7Ci19Ci0KLXZvaWQg
U2V0dGluZ3M6OnNldFBpY3RvZ3JhcGhGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCi17Ci0gICAgYm9vbCBjaGFuZ2VzID0gbV9mb250R2Vu
ZXJpY0ZhbWlsaWVzLT5zZXRQaWN0b2dyYXBoRm9udEZhbWlseShmYW1pbHksIHNjcmlwdCk7Ci0g
ICAgaWYgKGNoYW5nZXMpCi0gICAgICAgIGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFu
Z2UobV9wYWdlKTsKLX0KLQotZmxvYXQgU2V0dGluZ3M6OmRlZmF1bHRNaW5pbXVtWm9vbUZvbnRT
aXplKCkKLXsKLSAgICByZXR1cm4gMTU7Ci19Ci0KLSNpZiAhUExBVEZPUk0oSU9TKQotYm9vbCBT
ZXR0aW5nczo6ZGVmYXVsdFRleHRBdXRvc2l6aW5nRW5hYmxlZCgpCi17Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotI2VuZGlmCi0KLXZvaWQgU2V0dGluZ3M6OnNldE1lZGlhVHlwZU92ZXJyaWRlKGNv
bnN0IFN0cmluZyYgbWVkaWFUeXBlT3ZlcnJpZGUpCi17Ci0gICAgaWYgKG1fbWVkaWFUeXBlT3Zl
cnJpZGUgPT0gbWVkaWFUeXBlT3ZlcnJpZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbWVk
aWFUeXBlT3ZlcnJpZGUgPSBtZWRpYVR5cGVPdmVycmlkZTsKLQotICAgIGlmICghbV9wYWdlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX3BhZ2UtPm1haW5GcmFt
ZSgpLnZpZXcoKTsKLSAgICBBU1NFUlQodmlldyk7Ci0KLSAgICB2aWV3LT5zZXRNZWRpYVR5cGUo
bWVkaWFUeXBlT3ZlcnJpZGUpOwotICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxs
RnJhbWVzKCk7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxs
eShib29sIGxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSkKLXsKLSAgICBtX2xvYWRzSW1hZ2VzQXV0
b21hdGljYWxseSA9IGxvYWRzSW1hZ2VzQXV0b21hdGljYWxseTsKLSAgICAKLSAgICAvLyBDaGFu
Z2luZyB0aGlzIHNldHRpbmcgdG8gdHJ1ZSBtaWdodCBpbW1lZGlhdGVseSBzdGFydCBuZXcgbG9h
ZHMgZm9yIGltYWdlcyB0aGF0IGhhZCBwcmV2aW91c2x5IGhhZCBsb2FkaW5nIGRpc2FibGVkLgot
ICAgIC8vIElmIHRoaXMgaGFwcGVucyB3aGlsZSBhIFdlYlZpZXcgaXMgYmVpbmcgZGVhbGxvYydl
ZCwgYW5kIHdlIGRvbid0IGtub3cgdGhlIFdlYlZpZXcgaXMgYmVpbmcgZGVhbGxvYydlZCwgdGhl
c2UgbmV3IGxvYWRzCi0gICAgLy8gY2FuIGNhdXNlIGNyYXNoZXMgZG93bnN0cmVhbSB3aGVuIHRo
ZSBXZWJWaWV3IG1lbW9yeSBoYXMgYWN0dWFsbHkgYmVlbiBmcmVlJ2QuCi0gICAgLy8gT25lIGV4
YW1wbGUgd2hlcmUgdGhpcyBjYW4gaGFwcGVuIGlzIGluIE1hYyBhcHBzIHRoYXQgc3ViY2xhc3Mg
V2ViVmlldyB0aGVuIGRvIHdvcmsgaW4gdGhlaXIgb3ZlcnJpZGRlbiBkZWFsbG9jIG1ldGhvZHMu
Ci0gICAgLy8gU3RhcnRpbmcgdGhlc2UgbG9hZHMgc3luY2hyb25vdXNseSBpcyBub3QgaW1wb3J0
YW50LiAgQnkgcHV0dGluZyBpdCBvbiBhIDAtZGVsYXksIHByb3Blcmx5IGNsb3NpbmcgdGhlIFBh
Z2UgY2FuY2VscyB0aGVtCi0gICAgLy8gYmVmb3JlIHRoZXkgaGF2ZSBhIGNoYW5jZSB0byByZWFs
bHkgc3RhcnQuCi0gICAgLy8gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvNjA1NzIgZm9yIG1vcmUg
ZGlzY3Vzc2lvbi4KLSAgICBtX3NldEltYWdlTG9hZGluZ1NldHRpbmdzVGltZXIuc3RhcnRPbmVT
aG90KDBfcyk7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OmltYWdlTG9hZGluZ1NldHRpbmdzVGltZXJG
aXJlZCgpCi17Ci0gICAgc2V0SW1hZ2VMb2FkaW5nU2V0dGluZ3MobV9wYWdlKTsKLX0KLQotdm9p
ZCBTZXR0aW5nczo6c2V0U2NyaXB0RW5hYmxlZChib29sIGlzU2NyaXB0RW5hYmxlZCkKLXsKLSAg
ICBpZiAobV9pc1NjcmlwdEVuYWJsZWQgPT0gaXNTY3JpcHRFbmFibGVkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2lzU2NyaXB0RW5hYmxlZCA9IGlzU2NyaXB0RW5hYmxlZDsKLQotICAgIGlm
ICghbV9wYWdlKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgbV9w
YWdlLT5zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKLSNlbmRpZgotfQotCi12b2lk
IFNldHRpbmdzOjpzZXRKYXZhRW5hYmxlZChib29sIGlzSmF2YUVuYWJsZWQpCi17Ci0gICAgbV9p
c0phdmFFbmFibGVkID0gaXNKYXZhRW5hYmxlZDsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0SmF2
YUVuYWJsZWRGb3JMb2NhbEZpbGVzKGJvb2wgaXNKYXZhRW5hYmxlZEZvckxvY2FsRmlsZXMpCi17
Ci0gICAgbV9pc0phdmFFbmFibGVkRm9yTG9jYWxGaWxlcyA9IGlzSmF2YUVuYWJsZWRGb3JMb2Nh
bEZpbGVzOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRJbWFnZXNFbmFibGVkKGJvb2wgYXJlSW1h
Z2VzRW5hYmxlZCkKK1NldHRpbmdzOjpTZXR0aW5ncyhQYWdlKiBwYWdlKQorICAgIDogU2V0dGlu
Z3NCYXNlKHBhZ2UpCisgICAgU0VUVElOR1NfSU5JVElBTElaRVJfTElTVAogewotICAgIG1fYXJl
SW1hZ2VzRW5hYmxlZCA9IGFyZUltYWdlc0VuYWJsZWQ7Ci0KLSAgICAvLyBTZWUgY29tbWVudCBp
biBzZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkuCi0gICAgbV9zZXRJbWFnZUxvYWRpbmdTZXR0
aW5nc1RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRQcmVm
ZXJNSU1FVHlwZUZvckltYWdlcyhib29sIHByZWZlck1JTUVUeXBlRm9ySW1hZ2VzKQorU2V0dGlu
Z3M6On5TZXR0aW5ncygpCiB7Ci0gICAgbV9wcmVmZXJNSU1FVHlwZUZvckltYWdlcyA9IHByZWZl
ck1JTUVUeXBlRm9ySW1hZ2VzOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRGb3JjZVBlbmRpbmdX
ZWJHTFBvbGljeShib29sIGZvcmNlZCkKLXsKLSAgICBtX2ZvcmNlUGVuZGluZ1dlYkdMUG9saWN5
ID0gZm9yY2VkOwotfQorU0VUVElOR1NfU0VUVEVSX0JPRElFUwogCiBGcmFtZUZsYXR0ZW5pbmcg
U2V0dGluZ3M6OmVmZmVjdGl2ZUZyYW1lRmxhdHRlbmluZygpCiB7CkBAIC00NTMsMzgxICsxNDYs
NCBAQCBGcmFtZUZsYXR0ZW5pbmcgU2V0dGluZ3M6OmVmZmVjdGl2ZUZyYW1lCiAgICAgcmV0dXJu
IGZyYW1lRmxhdHRlbmluZygpOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRQbHVnaW5zRW5hYmxl
ZChib29sIGFyZVBsdWdpbnNFbmFibGVkKQotewotICAgIGlmIChtX2FyZVBsdWdpbnNFbmFibGVk
ID09IGFyZVBsdWdpbnNFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2FyZVBsdWdp
bnNFbmFibGVkID0gYXJlUGx1Z2luc0VuYWJsZWQ7Ci0gICAgUGFnZTo6cmVmcmVzaFBsdWdpbnMo
ZmFsc2UpOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGNv
bnN0IFVSTCYgdXNlclN0eWxlU2hlZXRMb2NhdGlvbikKLXsKLSAgICBpZiAobV91c2VyU3R5bGVT
aGVldExvY2F0aW9uID09IHVzZXJTdHlsZVNoZWV0TG9jYXRpb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IHVzZXJTdHlsZVNoZWV0TG9jYXRpb247
Ci0KLSAgICBpZiAobV9wYWdlKQotICAgICAgICBtX3BhZ2UtPnVzZXJTdHlsZVNoZWV0TG9jYXRp
b25DaGFuZ2VkKCk7Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIHF1aXJrIGlzIG5lZWRlZCBiZWNhdXNl
IG9mIFJhZGFyIDQ2NzQ1MzcgYW5kIDUyMTEyNzEuIFdlIG5lZWQgdG8gcGhhc2UgaXQgb3V0IG9u
Y2UgQWRvYmUKLS8vIGNhbiBmaXggdGhlIGJ1ZyBmcm9tIHRoZWlyIGVuZC4KLXZvaWQgU2V0dGlu
Z3M6OnNldE5lZWRzQWRvYmVGcmFtZVJlbG9hZGluZ1F1aXJrKGJvb2wgc2hvdWxkTm90UmVsb2Fk
SUZyYW1lc0ZvclVuY2hhbmdlZFNSQykKLXsKLSAgICBtX25lZWRzQWRvYmVGcmFtZVJlbG9hZGlu
Z1F1aXJrID0gc2hvdWxkTm90UmVsb2FkSUZyYW1lc0ZvclVuY2hhbmdlZFNSQzsKLX0KLQotdm9p
ZCBTZXR0aW5nczo6c2V0TWluaW11bURPTVRpbWVySW50ZXJ2YWwoU2Vjb25kcyBpbnRlcnZhbCkK
LXsKLSAgICBhdXRvIG9sZFRpbWVySW50ZXJ2YWwgPSBzdGQ6OmV4Y2hhbmdlKG1fbWluaW11bURP
TVRpbWVySW50ZXJ2YWwsIGludGVydmFsKTsKLQotICAgIGlmICghbV9wYWdlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX3BhZ2UtPm1haW5GcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlm
IChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5hZGp1
c3RNaW5pbXVtRE9NVGltZXJJbnRlcnZhbChvbGRUaW1lckludGVydmFsKTsKLSAgICB9Ci19Ci0K
LXZvaWQgU2V0dGluZ3M6OnNldExheW91dEludGVydmFsKFNlY29uZHMgbGF5b3V0SW50ZXJ2YWwp
Ci17Ci0gICAgLy8gRklYTUU6IEl0IHNlZW1zIHdlaXJkIHRoYXQgdGhpcyBmdW5jdGlvbiBtYXkg
ZGlzcmVnYXJkIHRoZSBzcGVjaWZpZWQgbGF5b3V0IGludGVydmFsLgotICAgIC8vIFdlIHNob3Vs
ZCBlaXRoZXIgZXhwb3NlIGxheW91dFNjaGVkdWxlVGhyZXNob2xkIG9yIGJldHRlciBjb21tdW5p
Y2F0ZSB0aGlzIGludmFyaWFudC4KLSAgICBtX2xheW91dEludGVydmFsID0gc3RkOjptYXgobGF5
b3V0SW50ZXJ2YWwsIGxheW91dFNjaGVkdWxlVGhyZXNob2xkKTsKLX0KLQotdm9pZCBTZXR0aW5n
czo6c2V0VXNlc1BhZ2VDYWNoZShib29sIHVzZXNQYWdlQ2FjaGUpCi17Ci0gICAgaWYgKG1fdXNl
c1BhZ2VDYWNoZSA9PSB1c2VzUGFnZUNhY2hlKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAot
ICAgIG1fdXNlc1BhZ2VDYWNoZSA9IHVzZXNQYWdlQ2FjaGU7Ci0KLSAgICBpZiAoIW1fcGFnZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3VzZXNQYWdlQ2FjaGUpCi0gICAgICAgIFBh
Z2VDYWNoZTo6c2luZ2xldG9uKCkucHJ1bmVUb1NpemVOb3coMCwgUHJ1bmluZ1JlYXNvbjo6Tm9u
ZSk7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldEZvbnRSZW5kZXJpbmdNb2RlKEZvbnRSZW5kZXJp
bmdNb2RlIG1vZGUpCi17Ci0gICAgaWYgKGZvbnRSZW5kZXJpbmdNb2RlKCkgPT0gbW9kZSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIG1fZm9udFJlbmRlcmluZ01vZGUgPSBzdGF0aWNfY2FzdDxpbnQ+
KG1vZGUpOwotICAgIGlmIChtX3BhZ2UpCi0gICAgICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNT
dHlsZUluQWxsRnJhbWVzKCk7Ci19Ci0KLUZvbnRSZW5kZXJpbmdNb2RlIFNldHRpbmdzOjpmb250
UmVuZGVyaW5nTW9kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRSZW5k
ZXJpbmdNb2RlPihtX2ZvbnRSZW5kZXJpbmdNb2RlKTsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0
RE5TUHJlZmV0Y2hpbmdFbmFibGVkKGJvb2wgZG5zUHJlZmV0Y2hpbmdFbmFibGVkKQotewotICAg
IGlmIChtX2Ruc1ByZWZldGNoaW5nRW5hYmxlZCA9PSBkbnNQcmVmZXRjaGluZ0VuYWJsZWQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fZG5zUHJlZmV0Y2hpbmdFbmFibGVkID0gZG5zUHJlZmV0
Y2hpbmdFbmFibGVkOwotICAgIGlmIChtX3BhZ2UpCi0gICAgICAgIG1fcGFnZS0+ZG5zUHJlZmV0
Y2hpbmdTdGF0ZUNoYW5nZWQoKTsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0U2hvd1RpbGVkU2Ny
b2xsaW5nSW5kaWNhdG9yKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobV9zaG93VGlsZWRTY3Jv
bGxpbmdJbmRpY2F0b3IgPT0gZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAg
ICBtX3Nob3dUaWxlZFNjcm9sbGluZ0luZGljYXRvciA9IGVuYWJsZWQ7Ci19Ci0KLSNpZiBFTkFC
TEUoUkVTT1VSQ0VfVVNBR0UpCi12b2lkIFNldHRpbmdzOjpzZXRSZXNvdXJjZVVzYWdlT3Zlcmxh
eVZpc2libGUoYm9vbCB2aXNpYmxlKQotewotICAgIGlmIChtX3Jlc291cmNlVXNhZ2VPdmVybGF5
VmlzaWJsZSA9PSB2aXNpYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Jlc291cmNlVXNh
Z2VPdmVybGF5VmlzaWJsZSA9IHZpc2libGU7Ci0gICAgaWYgKG1fcGFnZSkKLSAgICAgICAgbV9w
YWdlLT5zZXRSZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGUodmlzaWJsZSk7Ci19Ci0jZW5kaWYK
LQotI2lmIFBMQVRGT1JNKFdJTikKLXZvaWQgU2V0dGluZ3M6OnNldFNob3VsZFVzZUhpZ2hSZXNv
bHV0aW9uVGltZXJzKGJvb2wgc2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnMpCi17Ci0gICAg
Z1Nob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzID0gc2hvdWxkVXNlSGlnaFJlc29sdXRpb25U
aW1lcnM7Ci19Ci0jZW5kaWYKLQotdm9pZCBTZXR0aW5nczo6c2V0U3RvcmFnZUJsb2NraW5nUG9s
aWN5KFNlY3VyaXR5T3JpZ2luOjpTdG9yYWdlQmxvY2tpbmdQb2xpY3kgZW5hYmxlZCkKLXsKLSAg
ICBpZiAobV9zdG9yYWdlQmxvY2tpbmdQb2xpY3kgPT0gZW5hYmxlZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9zdG9yYWdlQmxvY2tpbmdQb2xpY3kgPSBlbmFibGVkOwotICAgIGlmIChtX3Bh
Z2UpCi0gICAgICAgIG1fcGFnZS0+c3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKCk7Ci19Ci0K
LXZvaWQgU2V0dGluZ3M6OnNldEJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKGJvb2wg
c2hvdWxkRXh0ZW5kKQotewotICAgIGlmIChtX2JhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQ
YWdlID09IHNob3VsZEV4dGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9iYWNrZ3JvdW5k
U2hvdWxkRXh0ZW5kQmV5b25kUGFnZSA9IHNob3VsZEV4dGVuZDsKLQotICAgIGlmIChtX3BhZ2Up
Ci0gICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT51cGRhdGVFeHRlbmRCYWNrZ3Jv
dW5kSWZOZWNlc3NhcnkoKTsKLX0KLQotI2lmIFVTRShBVkZPVU5EQVRJT04pCi12b2lkIFNldHRp
bmdzOjpzZXRBVkZvdW5kYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAoZ0FW
Rm91bmRhdGlvbkVuYWJsZWQgPT0gZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ0FW
Rm91bmRhdGlvbkVuYWJsZWQgPSBlbmFibGVkOwotICAgIEhUTUxNZWRpYUVsZW1lbnQ6OnJlc2V0
TWVkaWFFbmdpbmVzKCk7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldEFWRm91bmRhdGlvbk5TVVJM
U2Vzc2lvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAgIGlmIChnQVZGb3VuZGF0aW9uTlNV
UkxTZXNzaW9uRW5hYmxlZCA9PSBlbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnQVZG
b3VuZGF0aW9uTlNVUkxTZXNzaW9uRW5hYmxlZCA9IGVuYWJsZWQ7Ci19Ci0jZW5kaWYKLQotI2lm
IFBMQVRGT1JNKENPQ09BKQotdm9pZCBTZXR0aW5nczo6c2V0UVRLaXRFbmFibGVkKGJvb2wgZW5h
YmxlZCkKLXsKLSAgICBpZiAoZ1FUS2l0RW5hYmxlZCA9PSBlbmFibGVkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBnUVRLaXRFbmFibGVkID0gZW5hYmxlZDsKLSAgICBIVE1MTWVkaWFFbGVtZW50
OjpyZXNldE1lZGlhRW5naW5lcygpOwotfQotI2VuZGlmCi0KLSNpZiBVU0UoR1NUUkVBTUVSKQot
dm9pZCBTZXR0aW5nczo6c2V0R1N0cmVhbWVyRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAg
aWYgKGdHU3RyZWFtZXJFbmFibGVkID09IGVuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGdHU3RyZWFtZXJFbmFibGVkID0gZW5hYmxlZDsKLSAgICBIVE1MTWVkaWFFbGVtZW50OjpyZXNl
dE1lZGlhRW5naW5lcygpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQot
Ym9vbCBTZXR0aW5nczo6bW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZCgpCi17Ci0gICAgcmV0dXJu
IGdNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRNb2Nr
Q2FwdHVyZURldmljZXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBnTW9ja0NhcHR1cmVE
ZXZpY2VzRW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXI6OnNldE1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZChlbmFibGVkKTsKLX0K
LQotYm9vbCBTZXR0aW5nczo6bWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZ01lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlv
bjsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25u
ZWN0aW9uKGJvb2wgbWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKQotewotICAg
IGdNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24gPSBtZWRpYUNhcHR1cmVSZXF1
aXJlc1NlY3VyZUNvbm5lY3Rpb247Ci19Ci0jZW5kaWYKLQotdm9pZCBTZXR0aW5nczo6c2V0U2Ny
b2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgbV9z
Y3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkID0gZW5hYmxlZDsKLQotICAgIGlmICht
X3BhZ2UgJiYgbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCkpCi0gICAgICAgIG1fcGFnZS0+bWFp
bkZyYW1lKCkudmlldygpLT5zZXRTY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKGVu
YWJsZWQpOwotfQotCi0vLyBJdCdzIHZlcnkgaW1wb3J0YW50IHRoYXQgdGhpcyBzZXR0aW5nIGRv
ZXNuJ3QgY2hhbmdlIGluIHRoZSBtaWRkbGUgb2YgYSBkb2N1bWVudCdzIGxpZmV0aW1lLgotLy8g
VGhlIE1hYyBwb3J0IHVzZXMgdGhpcyBmbGFnIHdoZW4gcmVnaXN0ZXJpbmcgYW5kIGRlcmVnaXN0
ZXJpbmcgcGxhdGZvcm0tZGVwZW5kZW50IHNjcm9sbGJhcgotLy8gb2JqZWN0cy4gVGhlcmVmb3Jl
LCBpZiB0aGlzIGNoYW5nZXMgYXQgYW4gdW5leHBlY3RlZCB0aW1lLCBkZXJlZ2lzdHJhdGlvbiBt
YXkgbm90IGhhcHBlbgotLy8gY29ycmVjdGx5LCB3aGljaCBtYXkgY2F1c2UgdGhlIHBsYXRmb3Jt
IHRvIGZvbGxvdyBkYW5nbGluZyBwb2ludGVycy4KLXZvaWQgU2V0dGluZ3M6OnNldE1vY2tTY3Jv
bGxiYXJzRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgZ01vY2tTY3JvbGxiYXJzRW5hYmxlZCA9
IGZsYWc7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVwZGF0ZSBzY3JvbGwgYmFycyBpbiBl
eGlzdGluZyBwYWdlcy4KLX0KLQotYm9vbCBTZXR0aW5nczo6bW9ja1Njcm9sbGJhcnNFbmFibGVk
KCkKLXsKLSAgICByZXR1cm4gZ01vY2tTY3JvbGxiYXJzRW5hYmxlZDsKLX0KLQotdm9pZCBTZXR0
aW5nczo6c2V0VXNlc092ZXJsYXlTY3JvbGxiYXJzKGJvb2wgZmxhZykKLXsKLSAgICBnVXNlc092
ZXJsYXlTY3JvbGxiYXJzID0gZmxhZzsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXBkYXRl
IHNjcm9sbCBiYXJzIGluIGV4aXN0aW5nIHBhZ2VzLgotfQotCi1ib29sIFNldHRpbmdzOjp1c2Vz
T3ZlcmxheVNjcm9sbGJhcnMoKQotewotICAgIHJldHVybiBnVXNlc092ZXJsYXlTY3JvbGxiYXJz
OwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRVc2VzTW9ja1Njcm9sbEFuaW1hdG9yKGJvb2wgZmxh
ZykKLXsKLSAgICBnTW9ja1Njcm9sbEFuaW1hdG9yRW5hYmxlZCA9IGZsYWc7Ci19Ci0KLWJvb2wg
U2V0dGluZ3M6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKQotewotICAgIHJldHVybiBnTW9ja1Nj
cm9sbEFuaW1hdG9yRW5hYmxlZDsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0U2hvdWxkUmVzcGVj
dFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzKGJvb2wgZmxhZykKLXsKLSAgICBnU2hvdWxk
UmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzID0gZmxhZzsKLX0KLQotYm9vbCBT
ZXR0aW5nczo6c2hvdWxkUmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzKCkKLXsK
LSAgICByZXR1cm4gZ1Nob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0cmlidXRlU2V0dGVyczsK
LX0KLQotdm9pZCBTZXR0aW5nczo6c2V0SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJs
ZWQoYm9vbCBmbGFnKQotewotICAgIGlmIChtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdF
bmFibGVkID09IGZsYWcpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2hpZGRlblBhZ2VET01UaW1l
clRocm90dGxpbmdFbmFibGVkID0gZmxhZzsKLSAgICBpZiAobV9wYWdlKQotICAgICAgICBtX3Bh
Z2UtPmhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdTdGF0ZUNoYW5nZWQoKTsKLX0KLQotdm9p
ZCBTZXR0aW5nczo6c2V0SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0F1dG9JbmNyZWFzZXMo
Ym9vbCBmbGFnKQotewotICAgIGlmIChtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRv
SW5jcmVhc2VzID09IGZsYWcpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2hpZGRlblBhZ2VET01U
aW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2VzID0gZmxhZzsKLSAgICBpZiAobV9wYWdlKQotICAg
ICAgICBtX3BhZ2UtPmhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdTdGF0ZUNoYW5nZWQoKTsK
LX0KLQotdm9pZCBTZXR0aW5nczo6c2V0SGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25F
bmFibGVkKGJvb2wgZmxhZykKLXsKLSAgICBpZiAobV9oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3Vz
cGVuc2lvbkVuYWJsZWQgPT0gZmxhZykKLSAgICAgICAgcmV0dXJuOwotICAgIG1faGlkZGVuUGFn
ZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkID0gZmxhZzsKLSAgICBpZiAobV9wYWdlKQot
ICAgICAgICBtX3BhZ2UtPmhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uU3RhdGVDaGFu
Z2VkKCk7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldEZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dy
YXBocyhib29sIHByZWZlclBpY3RvZ3JhcGhzKQotewotICAgIGlmIChtX2ZvbnRGYWxsYmFja1By
ZWZlcnNQaWN0b2dyYXBocyA9PSBwcmVmZXJQaWN0b2dyYXBocykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9mb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMgPSBwcmVmZXJQaWN0b2dyYXBo
czsKLSAgICBpZiAobV9wYWdlKQotICAgICAgICBtX3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJ
bkFsbEZyYW1lcygpOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRMb3dQb3dlclZpZGVvQXVkaW9C
dWZmZXJTaXplRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgZ0xvd1Bvd2VyVmlkZW9BdWRpb0J1
ZmZlclNpemVFbmFibGVkID0gZmxhZzsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBmbGFnKQotewotICAgIGdSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZEVuYWJsZWQgPSBmbGFnOwotfQotCi0jaWYgUExBVEZPUk0oSU9TKQotdm9p
ZCBTZXR0aW5nczo6c2V0QXVkaW9TZXNzaW9uQ2F0ZWdvcnlPdmVycmlkZSh1bnNpZ25lZCBzZXNz
aW9uQ2F0ZWdvcnkpCi17Ci0gICAgQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuc2V0Q2F0
ZWdvcnlPdmVycmlkZShzdGF0aWNfY2FzdDxBdWRpb1Nlc3Npb246OkNhdGVnb3J5VHlwZT4oc2Vz
c2lvbkNhdGVnb3J5KSk7Ci19Ci0KLXVuc2lnbmVkIFNldHRpbmdzOjphdWRpb1Nlc3Npb25DYXRl
Z29yeU92ZXJyaWRlKCkKLXsKLSAgICByZXR1cm4gQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9u
KCkuY2F0ZWdvcnlPdmVycmlkZSgpOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXROZXR3b3JrRGF0
YVVzYWdlVHJhY2tpbmdFbmFibGVkKGJvb2wgdHJhY2tpbmdFbmFibGVkKQotewotICAgIGdOZXR3
b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVkID0gdHJhY2tpbmdFbmFibGVkOwotfQotCi1ib29s
IFNldHRpbmdzOjpuZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVkKCkKLXsKLSAgICByZXR1
cm4gZ05ldHdvcmtEYXRhVXNhZ2VUcmFja2luZ0VuYWJsZWQ7Ci19Ci0KLXN0YXRpYyBTdHJpbmcm
IHNoYXJlZE5ldHdvcmtJbnRlcmZhY2VOYW1lR2xvYmFsKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8U3RyaW5nPiBuZXR3b3JrSW50ZXJmYWNlTmFtZTsKLSAgICByZXR1cm4gbmV0d29y
a0ludGVyZmFjZU5hbWU7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldE5ldHdvcmtJbnRlcmZhY2VO
YW1lKGNvbnN0IFN0cmluZyYgbmV0d29ya0ludGVyZmFjZU5hbWUpCi17Ci0gICAgc2hhcmVkTmV0
d29ya0ludGVyZmFjZU5hbWVHbG9iYWwoKSA9IG5ldHdvcmtJbnRlcmZhY2VOYW1lOwotfQotCi1j
b25zdCBTdHJpbmcmIFNldHRpbmdzOjpuZXR3b3JrSW50ZXJmYWNlTmFtZSgpCi17Ci0gICAgcmV0
dXJuIHNoYXJlZE5ldHdvcmtJbnRlcmZhY2VOYW1lR2xvYmFsKCk7Ci19Ci0jZW5kaWYKLQotYm9v
bCBTZXR0aW5nczo6Z2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3coKQotewotI2lm
IFBMQVRGT1JNKE1BQykKLSAgICByZXR1cm4gIU1hY0FwcGxpY2F0aW9uOjppc0lCb29rcygpOwot
I2VsaWYgUExBVEZPUk0oSU9TKQotICAgIHJldHVybiAhSU9TQXBwbGljYXRpb246OmlzSUJvb2tz
KCk7Ci0jZWxzZQotICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi19Ci0KLXZvaWQgU2V0dGluZ3M6
OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlKGJvb2wgYWxsb3dBbnlTU0xDZXJ0aWZpY2F0ZSkK
LXsKLSAgICBnQWxsb3dzQW55U1NMQ2VydGlmaWNhdGUgPSBhbGxvd0FueVNTTENlcnRpZmljYXRl
OwotfQotCi1ib29sIFNldHRpbmdzOjphbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSgpCi17Ci0gICAg
cmV0dXJuIGdBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZTsKLX0KLQotI2lmICFQTEFURk9STShDT0NP
QSkKLWNvbnN0IFN0cmluZyYgU2V0dGluZ3M6OmRlZmF1bHRNZWRpYUNvbnRlbnRUeXBlc1JlcXVp
cmluZ0hhcmR3YXJlU3VwcG9ydCgpCi17Ci0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci19Ci0j
ZW5kaWYKLQotdm9pZCBTZXR0aW5nczo6c2V0TWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJk
d2FyZVN1cHBvcnQoY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZXMpCi17Ci0gICAgbV9tZWRpYUNv
bnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydC5zaHJpbmsoMCk7Ci0gICAgZm9yIChh
dXRvIHR5cGUgOiBTdHJpbmdWaWV3KGNvbnRlbnRUeXBlcykuc3BsaXQoJzonKSkKLSAgICAgICAg
bV9tZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydC5hcHBlbmQoQ29udGVu
dFR5cGUgeyB0eXBlLnRvU3RyaW5nKCkgfSk7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldE1lZGlh
Q29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KGNvbnN0IFZlY3RvcjxDb250ZW50
VHlwZT4mIGNvbnRlbnRUeXBlcykKLXsKLSAgICBtX21lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5n
SGFyZHdhcmVTdXBwb3J0ID0gY29udGVudFR5cGVzOwotfQotCi0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgJKHJldmlzaW9uIDIyMzMyOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNzcgKzI2
LDExIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ2xpcGJvYXJkQWNjZXNzUG9saWN5
LmgiCi0jaW5jbHVkZSAiQ29udGVudFR5cGUuaCIKLSNpbmNsdWRlICJFZGl0aW5nQmVoYXZpb3JU
eXBlcy5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5o
IgotI2luY2x1ZGUgIlNldHRpbmdzTWFjcm9zLmgiCi0jaW5jbHVkZSAiVGV4dEZsYWdzLmgiCi0j
aW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRlICJXcml0aW5nTW9k
ZS5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvUnVudGltZUZsYWdzLmg+Ci0jaW5jbHVkZSA8dW5pY29k
ZS91c2NyaXB0Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KLQotI2lmIEVOQUJMRShEQVRBX0RFVEVDVElP
TikKLSNpbmNsdWRlICJEYXRhRGV0ZWN0aW9uLmgiCi0jZW5kaWYKKyNpbmNsdWRlICJTZXR0aW5n
c0Jhc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGb250R2VuZXJpY0ZhbWls
aWVzOwotY2xhc3MgUGFnZTsKLQotZW51bSBFZGl0YWJsZUxpbmtCZWhhdmlvciB7Ci0gICAgRWRp
dGFibGVMaW5rRGVmYXVsdEJlaGF2aW9yLAotICAgIEVkaXRhYmxlTGlua0Fsd2F5c0xpdmUsCi0g
ICAgRWRpdGFibGVMaW5rT25seUxpdmVXaXRoU2hpZnRLZXksCi0gICAgRWRpdGFibGVMaW5rTGl2
ZVdoZW5Ob3RGb2N1c2VkLAotICAgIEVkaXRhYmxlTGlua05ldmVyTGl2ZQotfTsKLQotZW51bSBU
ZXh0RGlyZWN0aW9uU3VibWVudUluY2x1c2lvbkJlaGF2aW9yIHsKLSAgICBUZXh0RGlyZWN0aW9u
U3VibWVudU5ldmVySW5jbHVkZWQsCi0gICAgVGV4dERpcmVjdGlvblN1Ym1lbnVBdXRvbWF0aWNh
bGx5SW5jbHVkZWQsCi0gICAgVGV4dERpcmVjdGlvblN1Ym1lbnVBbHdheXNJbmNsdWRlZAotfTsK
LQotZW51bSBEZWJ1Z092ZXJsYXlSZWdpb25GbGFncyB7Ci0gICAgTm9uRmFzdFNjcm9sbGFibGVS
ZWdpb24gPSAxIDw8IDAsCi0gICAgV2hlZWxFdmVudEhhbmRsZXJSZWdpb24gPSAxIDw8IDEsCi19
OwotCi1lbnVtIGNsYXNzIFVzZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3kgewotICAgIENvbnRl
bnQsCi0gICAgU3lzdGVtCi19OwotCi1lbnVtIFBERkltYWdlQ2FjaGluZ1BvbGljeSB7Ci0gICAg
UERGSW1hZ2VDYWNoaW5nRW5hYmxlZCwKLSAgICBQREZJbWFnZUNhY2hpbmdCZWxvd01lbW9yeUxp
bWl0LAotICAgIFBERkltYWdlQ2FjaGluZ0Rpc2FibGVkLAotICAgIFBERkltYWdlQ2FjaGluZ0Ns
aXBCb3VuZHNPbmx5LAotI2lmIFBMQVRGT1JNKElPUykKLSAgICBQREZJbWFnZUNhY2hpbmdEZWZh
dWx0ID0gUERGSW1hZ2VDYWNoaW5nQmVsb3dNZW1vcnlMaW1pdAotI2Vsc2UKLSAgICBQREZJbWFn
ZUNhY2hpbmdEZWZhdWx0ID0gUERGSW1hZ2VDYWNoaW5nRW5hYmxlZAotI2VuZGlmCi19OwotCi1l
bnVtIEZyYW1lRmxhdHRlbmluZyB7Ci0gICAgRnJhbWVGbGF0dGVuaW5nRGlzYWJsZWQsCi0gICAg
RnJhbWVGbGF0dGVuaW5nRW5hYmxlZEZvck5vbkZ1bGxTY3JlZW5JRnJhbWVzLAotICAgIEZyYW1l
RmxhdHRlbmluZ0Z1bGx5RW5hYmxlZAotfTsKLQotdHlwZWRlZiB1bnNpZ25lZCBEZWJ1Z092ZXJs
YXlSZWdpb25zOwotCi1jbGFzcyBTZXR0aW5ncyA6IHB1YmxpYyBSZWZDb3VudGVkPFNldHRpbmdz
PiB7CitjbGFzcyBTZXR0aW5ncyA6IHB1YmxpYyBTZXR0aW5nc0Jhc2UsIHB1YmxpYyBSZWZDb3Vu
dGVkPFNldHRpbmdzPiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2V0dGluZ3MpOyBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFNldHRpbmdzPiBj
cmVhdGUoUGFnZSopOwpAQCAtMTA0LDM5MiArMzgsMTYgQEAgcHVibGljOgogCiAgICAgdm9pZCBw
YWdlRGVzdHJveWVkKCkgeyBtX3BhZ2UgPSBudWxscHRyOyB9CiAKLSAgICBlbnVtIGNsYXNzIEZv
bnRMb2FkVGltaW5nT3ZlcnJpZGUgeyBOb25lLCBCbG9jaywgU3dhcCwgRmFpbHVyZSB9OwotCi0g
ICAgZW51bSBjbGFzcyBGb3JjZWRBY2Nlc3NpYmlsaXR5VmFsdWUgeyBTeXN0ZW0sIE9uLCBPZmYg
fTsKLSAgICBzdGF0aWMgY29uc3QgU2V0dGluZ3M6OkZvcmNlZEFjY2Vzc2liaWxpdHlWYWx1ZSBk
ZWZhdWx0Rm9yY2VkQ29sb3JzQXJlSW52ZXJ0ZWRBY2Nlc3NpYmlsaXR5VmFsdWUgPSBGb3JjZWRB
Y2Nlc3NpYmlsaXR5VmFsdWU6OlN5c3RlbTsKLSAgICBzdGF0aWMgY29uc3QgU2V0dGluZ3M6OkZv
cmNlZEFjY2Vzc2liaWxpdHlWYWx1ZSBkZWZhdWx0Rm9yY2VkRGlzcGxheUlzTW9ub2Nocm9tZUFj
Y2Vzc2liaWxpdHlWYWx1ZSA9IEZvcmNlZEFjY2Vzc2liaWxpdHlWYWx1ZTo6U3lzdGVtOwotICAg
IHN0YXRpYyBjb25zdCBTZXR0aW5nczo6Rm9yY2VkQWNjZXNzaWJpbGl0eVZhbHVlIGRlZmF1bHRG
b3JjZWRQcmVmZXJzUmVkdWNlZE1vdGlvbkFjY2Vzc2liaWxpdHlWYWx1ZSA9IEZvcmNlZEFjY2Vz
c2liaWxpdHlWYWx1ZTo6U3lzdGVtOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdGFu
ZGFyZEZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVVNjcmlwdENvZGUgPSBVU0NSSVBU
X0NPTU1PTik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQXRvbWljU3RyaW5nJiBzdGFuZGFy
ZEZvbnRGYW1pbHkoVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTikgY29uc3Q7Ci0KLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpeGVkRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcm
LCBVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBjb25z
dCBBdG9taWNTdHJpbmcmIGZpeGVkRm9udEZhbWlseShVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09N
TU9OKSBjb25zdDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2VyaWZGb250RmFtaWx5
KGNvbnN0IEF0b21pY1N0cmluZyYsIFVTY3JpcHRDb2RlID0gVVNDUklQVF9DT01NT04pOwotICAg
IFdFQkNPUkVfRVhQT1JUIGNvbnN0IEF0b21pY1N0cmluZyYgc2VyaWZGb250RmFtaWx5KFVTY3Jp
cHRDb2RlID0gVVNDUklQVF9DT01NT04pIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRTYW5zU2VyaWZGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFVTY3JpcHRDb2Rl
ID0gVVNDUklQVF9DT01NT04pOwotICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEF0b21pY1N0cmlu
ZyYgc2Fuc1NlcmlmRm9udEZhbWlseShVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKSBjb25z
dDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q3Vyc2l2ZUZvbnRGYW1pbHkoY29uc3Qg
QXRvbWljU3RyaW5nJiwgVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTik7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgY29uc3QgQXRvbWljU3RyaW5nJiBjdXJzaXZlRm9udEZhbWlseShVU2NyaXB0Q29k
ZSA9IFVTQ1JJUFRfQ09NTU9OKSBjb25zdDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
RmFudGFzeUZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVVNjcmlwdENvZGUgPSBVU0NS
SVBUX0NPTU1PTik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQXRvbWljU3RyaW5nJiBmYW50
YXN5Rm9udEZhbWlseShVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKSBjb25zdDsKLQotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UGljdG9ncmFwaEZvbnRGYW1pbHkoY29uc3QgQXRvbWlj
U3RyaW5nJiwgVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTik7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgY29uc3QgQXRvbWljU3RyaW5nJiBwaWN0b2dyYXBoRm9udEZhbWlseShVU2NyaXB0Q29kZSA9
IFVTQ1JJUFRfQ09NTU9OKSBjb25zdDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29s
IGRlZmF1bHRUZXh0QXV0b3NpemluZ0VuYWJsZWQoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgZmxvYXQgZGVmYXVsdE1pbmltdW1ab29tRm9udFNpemUoKTsKLQotICAgIC8vIE9ubHkgc2V0
IGJ5IExheW91dCBUZXN0cy4KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1lZGlhVHlwZU92
ZXJyaWRlKGNvbnN0IFN0cmluZyYpOwotICAgIGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlT3ZlcnJp
ZGUoKSBjb25zdCB7IHJldHVybiBtX21lZGlhVHlwZU92ZXJyaWRlOyB9Ci0KLSAgICAvLyBVbmxp
a2UgYXJlSW1hZ2VzRW5hYmxlZCwgdGhpcyBvbmx5IHN1cHByZXNzZXMgdGhlIG5ldHdvcmsgbG9h
ZCBvZgotICAgIC8vIHRoZSBpbWFnZSBVUkwuICBBIGNhY2hlZCBpbWFnZSB3aWxsIHN0aWxsIGJl
IHJlbmRlcmVkIGlmIHJlcXVlc3RlZC4KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExvYWRz
SW1hZ2VzQXV0b21hdGljYWxseShib29sKTsKLSAgICBib29sIGxvYWRzSW1hZ2VzQXV0b21hdGlj
YWxseSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5OyB9Ci0KLSAg
ICAvLyBDbGllbnRzIHRoYXQgZXhlY3V0ZSBzY3JpcHQgc2hvdWxkIGNhbGwgU2NyaXB0Q29udHJv
bGxlcjo6Y2FuRXhlY3V0ZVNjcmlwdHMoKQotICAgIC8vIGluc3RlYWQgb2YgdGhpcyBmdW5jdGlv
bi4gU2NyaXB0Q29udHJvbGxlcjo6Y2FuRXhlY3V0ZVNjcmlwdHMoKSBjaGVja3MgdGhlCi0gICAg
Ly8gSFRNTCBzYW5kYm94LCBwbHVnLWluIHNhbmRib3hpbmcsIGFuZCBvdGhlciBpbXBvcnRhbnQg
ZGV0YWlscy4KLSAgICBib29sIGlzU2NyaXB0RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNT
Y3JpcHRFbmFibGVkOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTY3JpcHRFbmFibGVk
KGJvb2wpOwotCiAgICAgU0VUVElOR1NfR0VUVEVSU19BTkRfU0VUVEVSUwogCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRKYXZhRW5hYmxlZChib29sKTsKLSAgICBib29sIGlzSmF2YUVuYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzSmF2YUVuYWJsZWQ7IH0KLQotICAgIC8vIFRoaXMgc2V0
dGluZ3MgaXMgb25seSBjb25zdWx0ZWQgaWYgaXNKYXZhRW5hYmxlZCgpIHJldHVybnMgdHJ1ZTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEphdmFFbmFibGVkRm9yTG9jYWxGaWxlcyhib29s
KTsKLSAgICBib29sIGlzSmF2YUVuYWJsZWRGb3JMb2NhbEZpbGVzKCkgY29uc3QgeyByZXR1cm4g
bV9pc0phdmFFbmFibGVkRm9yTG9jYWxGaWxlczsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRJbWFnZXNFbmFibGVkKGJvb2wpOwotICAgIGJvb2wgYXJlSW1hZ2VzRW5hYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fYXJlSW1hZ2VzRW5hYmxlZDsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRQcmVmZXJNSU1FVHlwZUZvckltYWdlcyhib29sKTsKLSAgICBib29sIHByZWZlck1J
TUVUeXBlRm9ySW1hZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVmZXJNSU1FVHlwZUZvckltYWdl
czsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRQbHVnaW5zRW5hYmxlZChib29sKTsK
LSAgICBib29sIGFyZVBsdWdpbnNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hcmVQbHVnaW5z
RW5hYmxlZDsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRETlNQcmVmZXRjaGluZ0Vu
YWJsZWQoYm9vbCk7Ci0gICAgYm9vbCBkbnNQcmVmZXRjaGluZ0VuYWJsZWQoKSBjb25zdCB7IHJl
dHVybiBtX2Ruc1ByZWZldGNoaW5nRW5hYmxlZDsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGNvbnN0IFVSTCYpOwotICAgIGNvbnN0IFVSTCYg
dXNlclN0eWxlU2hlZXRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdXNlclN0eWxlU2hlZXRM
b2NhdGlvbjsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXROZWVkc0Fkb2JlRnJhbWVS
ZWxvYWRpbmdRdWlyayhib29sKTsKLSAgICBib29sIG5lZWRzQWNyb2JhdEZyYW1lUmVsb2FkaW5n
UXVpcmsoKSBjb25zdCB7IHJldHVybiBtX25lZWRzQWRvYmVGcmFtZVJlbG9hZGluZ1F1aXJrOyB9
Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1pbmltdW1ET01UaW1lckludGVydmFsKFNl
Y29uZHMpOyAvLyBJbml0aWFsaXplZCB0byBET01UaW1lcjo6ZGVmYXVsdE1pbmltdW1JbnRlcnZh
bCgpLgotICAgIFNlY29uZHMgbWluaW11bURPTVRpbWVySW50ZXJ2YWwoKSBjb25zdCB7IHJldHVy
biBtX21pbmltdW1ET01UaW1lckludGVydmFsOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldExheW91dEludGVydmFsKFNlY29uZHMpOwotICAgIFNlY29uZHMgbGF5b3V0SW50ZXJ2YWwo
KSBjb25zdCB7IHJldHVybiBtX2xheW91dEludGVydmFsOyB9Ci0KLSAgICBib29sIGhpZGRlblBh
Z2VET01UaW1lclRocm90dGxpbmdFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9oaWRkZW5QYWdl
RE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZDsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQoYm9vbCk7Ci0gICAgYm9vbCBoaWRk
ZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nQXV0b0luY3JlYXNlcygpIGNvbnN0IHsgcmV0dXJuIG1f
aGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0F1dG9JbmNyZWFzZXM7IH0KLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldEhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2Vz
KGJvb2wpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRVc2VzUGFnZUNhY2hlKGJvb2wp
OwotICAgIGJvb2wgdXNlc1BhZ2VDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc1BhZ2VDYWNo
ZTsgfQotICAgICAgICAKLSAgICB2b2lkIHNldEZvbnRSZW5kZXJpbmdNb2RlKEZvbnRSZW5kZXJp
bmdNb2RlIG1vZGUpOwotICAgIEZvbnRSZW5kZXJpbmdNb2RlIGZvbnRSZW5kZXJpbmdNb2RlKCkg
Y29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNob3dUaWxlZFNjcm9sbGluZ0lu
ZGljYXRvcihib29sKTsKLSAgICBib29sIHNob3dUaWxlZFNjcm9sbGluZ0luZGljYXRvcigpIGNv
bnN0IHsgcmV0dXJuIG1fc2hvd1RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yOyB9Ci0KLSNpZiBFTkFC
TEUoUkVTT1VSQ0VfVVNBR0UpCi0gICAgYm9vbCByZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGUo
KSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZTsgfQotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0UmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlKGJvb2wpOwot
I2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgc3RhdGljIHZvaWQgc2V0U2hvdWxkVXNl
SGlnaFJlc29sdXRpb25UaW1lcnMoYm9vbCk7Ci0gICAgc3RhdGljIGJvb2wgc2hvdWxkVXNlSGln
aFJlc29sdXRpb25UaW1lcnMoKSB7IHJldHVybiBnU2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1l
cnM7IH0KLSNlbmRpZgotCi0gICAgc3RhdGljIGJvb2wgaXNQb3N0TG9hZENQVVVzYWdlTWVhc3Vy
ZW1lbnRFbmFibGVkKCk7Ci0gICAgc3RhdGljIGJvb2wgaXNQb3N0QmFja2dyb3VuZGluZ0NQVVVz
YWdlTWVhc3VyZW1lbnRFbmFibGVkKCk7Ci0gICAgc3RhdGljIGJvb2wgaXNQZXJBY3Rpdml0eVN0
YXRlQ1BVVXNhZ2VNZWFzdXJlbWVudEVuYWJsZWQoKTsKLQotICAgIHN0YXRpYyBib29sIGlzUG9z
dExvYWRNZW1vcnlVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpOwotICAgIHN0YXRpYyBib29sIGlz
UG9zdEJhY2tncm91bmRpbmdNZW1vcnlVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpOwotCi0gICAg
c3RhdGljIGJvb2wgZ2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3coKTsKLQotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0QmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2Uo
Ym9vbCk7Ci0gICAgYm9vbCBiYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2U7IH0KLQotI2lmIFVT
RShBVkZPVU5EQVRJT04pCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0QVZGb3Vu
ZGF0aW9uRW5hYmxlZChib29sIGZsYWcpOwotICAgIHN0YXRpYyBib29sIGlzQVZGb3VuZGF0aW9u
RW5hYmxlZCgpIHsgcmV0dXJuIGdBVkZvdW5kYXRpb25FbmFibGVkOyB9Ci0gICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIHZvaWQgc2V0QVZGb3VuZGF0aW9uTlNVUkxTZXNzaW9uRW5hYmxlZChib29s
IGZsYWcpOwotICAgIHN0YXRpYyBib29sIGlzQVZGb3VuZGF0aW9uTlNVUkxTZXNzaW9uRW5hYmxl
ZCgpIHsgcmV0dXJuIGdBVkZvdW5kYXRpb25OU1VSTFNlc3Npb25FbmFibGVkOyB9Ci0jZW5kaWYK
LQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNl
dFFUS2l0RW5hYmxlZChib29sIGZsYWcpOwotICAgIHN0YXRpYyBib29sIGlzUVRLaXRFbmFibGVk
KCkgeyByZXR1cm4gZ1FUS2l0RW5hYmxlZDsgfQotI2Vsc2UKLSAgICBzdGF0aWMgYm9vbCBpc1FU
S2l0RW5hYmxlZCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0jZW5kaWYKLQotI2lmIFVTRShHU1RSRUFN
RVIpCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0R1N0cmVhbWVyRW5hYmxlZChi
b29sIGZsYWcpOwotICAgIHN0YXRpYyBib29sIGlzR1N0cmVhbWVyRW5hYmxlZCgpIHsgcmV0dXJu
IGdHU3RyZWFtZXJFbmFibGVkOyB9Ci0jZW5kaWYKLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBkZWZhdWx0TWF4aW11bUhUTUxQYXJzZXJET01UcmVlRGVwdGggPSA1MTI7Ci0gICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRNYXhpbXVtUmVuZGVyVHJlZURlcHRoID0gNTEyOwotCi0g
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKGJv
b2wgZmxhZyk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgbW9ja1Njcm9sbGJhcnNF
bmFibGVkKCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRVc2VzT3Zlcmxh
eVNjcm9sbGJhcnMoYm9vbCBmbGFnKTsKLSAgICBzdGF0aWMgYm9vbCB1c2VzT3ZlcmxheVNjcm9s
bGJhcnMoKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFVzZXNNb2NrU2Ny
b2xsQW5pbWF0b3IoYm9vbCk7Ci0gICAgc3RhdGljIGJvb2wgdXNlc01vY2tTY3JvbGxBbmltYXRv
cigpOwotCi0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICB2b2lkIHNldFRvdWNoRXZlbnRF
bXVsYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX3RvdWNoRXZlbnRFbXVsYXRpb25FbmFi
bGVkID0gZW5hYmxlZDsgfQotICAgIGJvb2wgaXNUb3VjaEV2ZW50RW11bGF0aW9uRW5hYmxlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fdG91Y2hFdmVudEVtdWxhdGlvbkVuYWJsZWQ7IH0KLSNlbmRpZgot
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdG9yYWdlQmxvY2tpbmdQb2xpY3koU2VjdXJp
dHlPcmlnaW46OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSk7Ci0gICAgU2VjdXJpdHlPcmlnaW46OlN0
b3JhZ2VCbG9ja2luZ1BvbGljeSBzdG9yYWdlQmxvY2tpbmdQb2xpY3koKSBjb25zdCB7IHJldHVy
biBtX3N0b3JhZ2VCbG9ja2luZ1BvbGljeTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRTY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKGJvb2wpOwotICAgIGJvb2wgc2Ny
b2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCgpIHsgcmV0dXJuIG1fc2Nyb2xsaW5nUGVy
Zm9ybWFuY2VMb2dnaW5nRW5hYmxlZDsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZv
aWQgc2V0U2hvdWxkUmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzKGJvb2wpOwot
ICAgIHN0YXRpYyBib29sIHNob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0cmlidXRlU2V0dGVy
cygpOwotCi0gICAgdm9pZCBzZXRUaW1lV2l0aG91dE1vdXNlTW92ZW1lbnRCZWZvcmVIaWRpbmdD
b250cm9scyhTZWNvbmRzIHRpbWUpIHsgbV90aW1lV2l0aG91dE1vdXNlTW92ZW1lbnRCZWZvcmVI
aWRpbmdDb250cm9scyA9IHRpbWU7IH0KLSAgICBTZWNvbmRzIHRpbWVXaXRob3V0TW91c2VNb3Zl
bWVudEJlZm9yZUhpZGluZ0NvbnRyb2xzKCkgY29uc3QgeyByZXR1cm4gbV90aW1lV2l0aG91dE1v
dXNlTW92ZW1lbnRCZWZvcmVIaWRpbmdDb250cm9sczsgfQotCi0gICAgYm9vbCBoaWRkZW5QYWdl
Q1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2hpZGRlblBh
Z2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZDsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2V0SGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKGJvb2wpOwotCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMo
Ym9vbCk7Ci0gICAgYm9vbCBmb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMoKSBjb25zdCB7
IHJldHVybiBtX2ZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXBoczsgfQotCi0gICAgc3RhdGlj
IGJvb2wgbG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQoKSB7IHJldHVybiBnTG93
UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQ7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgdm9pZCBzZXRMb3dQb3dlclZpZGVvQXVkaW9CdWZmZXJTaXplRW5hYmxlZChib29sKTsK
LQotICAgIHN0YXRpYyBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgeyByZXR1
cm4gZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkRW5hYmxlZDsgfQotICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wp
OwotCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNl
dEF1ZGlvU2Vzc2lvbkNhdGVnb3J5T3ZlcnJpZGUodW5zaWduZWQpOwotICAgIHN0YXRpYyB1bnNp
Z25lZCBhdWRpb1Nlc3Npb25DYXRlZ29yeU92ZXJyaWRlKCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgdm9pZCBzZXROZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVkKGJvb2wpOwot
ICAgIHN0YXRpYyBib29sIG5ldHdvcmtEYXRhVXNhZ2VUcmFja2luZ0VuYWJsZWQoKTsKLQotICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldE5ldHdvcmtJbnRlcmZhY2VOYW1lKGNvbnN0
IFN0cmluZyYpOwotICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIG5ldHdvcmtJbnRlcmZhY2VOYW1l
KCk7Ci0KLSNpZiBIQVZFKEFWS0lUKQotICAgIHN0YXRpYyB2b2lkIHNldEFWS2l0RW5hYmxlZChi
b29sIGZsYWcpIHsgZ0FWS2l0RW5hYmxlZCA9IGZsYWc7IH0KLSNlbmRpZgotICAgIHN0YXRpYyBi
b29sIGF2S2l0RW5hYmxlZCgpIHsgcmV0dXJuIGdBVktpdEVuYWJsZWQ7IH0KLQotICAgIHN0YXRp
YyB2b2lkIHNldFNob3VsZE9wdE91dE9mTmV0d29ya1N0YXRlT2JzZXJ2YXRpb24oYm9vbCBmbGFn
KSB7IGdTaG91bGRPcHRPdXRPZk5ldHdvcmtTdGF0ZU9ic2VydmF0aW9uID0gZmxhZzsgfQotICAg
IHN0YXRpYyBib29sIHNob3VsZE9wdE91dE9mTmV0d29ya1N0YXRlT2JzZXJ2YXRpb24oKSB7IHJl
dHVybiBnU2hvdWxkT3B0T3V0T2ZOZXR3b3JrU3RhdGVPYnNlcnZhdGlvbjsgfQotI2VuZGlmCi0K
LSNpZiBVU0UoQVVESU9fU0VTU0lPTikKLSAgICBzdGF0aWMgdm9pZCBzZXRTaG91bGRNYW5hZ2VB
dWRpb1Nlc3Npb25DYXRlZ29yeShib29sIGZsYWcpIHsgZ01hbmFnZUF1ZGlvU2Vzc2lvbiA9IGZs
YWc7IH0KLSAgICBzdGF0aWMgYm9vbCBzaG91bGRNYW5hZ2VBdWRpb1Nlc3Npb25DYXRlZ29yeSgp
IHsgcmV0dXJuIGdNYW5hZ2VBdWRpb1Nlc3Npb247IH0KLSNlbmRpZgotCi0gICAgc3RhdGljIHZv
aWQgc2V0Q3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBnQ3VzdG9t
UGFzdGVib2FyZERhdGFFbmFibGVkID0gZW5hYmxlZDsgfQotICAgIHN0YXRpYyBib29sIGN1c3Rv
bVBhc3RlYm9hcmREYXRhRW5hYmxlZCgpIHsgcmV0dXJuIGdDdXN0b21QYXN0ZWJvYXJkRGF0YUVu
YWJsZWQ7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBkZWZhdWx0Q3VzdG9tUGFz
dGVib2FyZERhdGFFbmFibGVkKCk7Ci0KLSNpZiBFTkFCTEUoTEVHQUNZX0VOQ1JZUFRFRF9NRURJ
QSkKLSAgICB2b2lkIHNldE1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBk
aXJlY3RvcnkpIHsgbV9tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5ID0gZGlyZWN0b3J5OyB9Ci0g
ICAgY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KCkgY29uc3QgeyByZXR1
cm4gbV9tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5OyB9Ci0jZW5kaWYKLSAgICAKLSNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKQotICAgIHZvaWQgc2V0TWVkaWFEZXZpY2VJZGVudGlmaWVyU3RvcmFn
ZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSkgeyBtX21lZGlhRGV2aWNlSWRlbnRp
ZmllclN0b3JhZ2VEaXJlY3RvcnkgPSBkaXJlY3Rvcnk7IH0KLSAgICBjb25zdCBTdHJpbmcmIG1l
ZGlhRGV2aWNlSWRlbnRpZmllclN0b3JhZ2VEaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBtX21l
ZGlhRGV2aWNlSWRlbnRpZmllclN0b3JhZ2VEaXJlY3Rvcnk7IH0KLQotICAgIHN0YXRpYyBib29s
IG1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
dm9pZCBzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkKGJvb2wpOwotCi0gICAgYm9vbCBtZWRp
YUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oKSBjb25zdDsKLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgdm9pZCBzZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24o
Ym9vbCk7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShBUFBMRV9QQVkpCi0gICAgYm9vbCBhcHBsZVBh
eUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FwcGxlUGF5RW5hYmxlZDsgfQotICAgIHZvaWQg
c2V0QXBwbGVQYXlFbmFibGVkKGJvb2wgYXBwbGVQYXlFbmFibGVkKSB7IG1fYXBwbGVQYXlFbmFi
bGVkID0gYXBwbGVQYXlFbmFibGVkOyB9Ci0KLSAgICBib29sIGFwcGxlUGF5Q2FwYWJpbGl0eURp
c2Nsb3N1cmVBbGxvd2VkKCkgY29uc3QgeyByZXR1cm4gbV9hcHBsZVBheUNhcGFiaWxpdHlEaXNj
bG9zdXJlQWxsb3dlZDsgfQotICAgIHZvaWQgc2V0QXBwbGVQYXlDYXBhYmlsaXR5RGlzY2xvc3Vy
ZUFsbG93ZWQoYm9vbCBhcHBsZVBheUNhcGFiaWxpdHlEaXNjbG9zdXJlQWxsb3dlZCkgeyBtX2Fw
cGxlUGF5Q2FwYWJpbGl0eURpc2Nsb3N1cmVBbGxvd2VkID0gYXBwbGVQYXlDYXBhYmlsaXR5RGlz
Y2xvc3VyZUFsbG93ZWQ7IH0KLSNlbmRpZgotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRG
b3JjZVBlbmRpbmdXZWJHTFBvbGljeShib29sKTsKLSAgICBib29sIGlzRm9yY2VQZW5kaW5nV2Vi
R0xQb2xpY3koKSBjb25zdCB7IHJldHVybiBtX2ZvcmNlUGVuZGluZ1dlYkdMUG9saWN5OyB9CiAK
ICAgICBXRUJDT1JFX0VYUE9SVCBGcmFtZUZsYXR0ZW5pbmcgZWZmZWN0aXZlRnJhbWVGbGF0dGVu
aW5nKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRBbGxvd3NBbnlTU0xD
ZXJ0aWZpY2F0ZShib29sKTsKLSAgICBzdGF0aWMgYm9vbCBhbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZSgpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGNvbnN0IFN0cmluZyYgZGVmYXVsdE1l
ZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KCk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRNZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydChj
b25zdCBWZWN0b3I8Q29udGVudFR5cGU+Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRN
ZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydChjb25zdCBTdHJpbmcmKTsK
LSAgICBjb25zdCBWZWN0b3I8Q29udGVudFR5cGU+JiBtZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmlu
Z0hhcmR3YXJlU3VwcG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFDb250ZW50VHlwZXNSZXF1
aXJpbmdIYXJkd2FyZVN1cHBvcnQ7IH0KLQogcHJpdmF0ZToKICAgICBleHBsaWNpdCBTZXR0aW5n
cyhQYWdlKik7CiAKLSAgICB2b2lkIGluaXRpYWxpemVEZWZhdWx0Rm9udEZhbWlsaWVzKCk7Ci0K
LSAgICBQYWdlKiBtX3BhZ2U7Ci0KLSAgICBTdHJpbmcgbV9tZWRpYVR5cGVPdmVycmlkZTsKLSAg
ICBVUkwgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uOwotICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0
cjxGb250R2VuZXJpY0ZhbWlsaWVzPiBtX2ZvbnRHZW5lcmljRmFtaWxpZXM7Ci0gICAgU2VjdXJp
dHlPcmlnaW46OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSBtX3N0b3JhZ2VCbG9ja2luZ1BvbGljeTsK
LSAgICBTZWNvbmRzIG1fbGF5b3V0SW50ZXJ2YWw7Ci0gICAgU2Vjb25kcyBtX21pbmltdW1ET01U
aW1lckludGVydmFsOwotCiAgICAgU0VUVElOR1NfTUVNQkVSX1ZBUklBQkxFUwogCi0gICAgYm9v
bCBtX2lzSmF2YUVuYWJsZWQgOiAxOwotICAgIGJvb2wgbV9pc0phdmFFbmFibGVkRm9yTG9jYWxG
aWxlcyA6IDE7Ci0gICAgYm9vbCBtX2xvYWRzSW1hZ2VzQXV0b21hdGljYWxseSA6IDE7Ci0gICAg
Ym9vbCBtX2FyZUltYWdlc0VuYWJsZWQgOiAxOwotICAgIGJvb2wgbV9wcmVmZXJNSU1FVHlwZUZv
ckltYWdlcyA6IDE7Ci0gICAgYm9vbCBtX2FyZVBsdWdpbnNFbmFibGVkIDogMTsKLSAgICBib29s
IG1faXNTY3JpcHRFbmFibGVkIDogMTsKLSAgICBib29sIG1fbmVlZHNBZG9iZUZyYW1lUmVsb2Fk
aW5nUXVpcmsgOiAxOwotICAgIGJvb2wgbV91c2VzUGFnZUNhY2hlIDogMTsKLSAgICB1bnNpZ25l
ZCBtX2ZvbnRSZW5kZXJpbmdNb2RlIDogMTsKLSAgICBib29sIG1fc2hvd1RpbGVkU2Nyb2xsaW5n
SW5kaWNhdG9yIDogMTsKLSAgICBib29sIG1fYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBh
Z2UgOiAxOwotICAgIGJvb2wgbV9kbnNQcmVmZXRjaGluZ0VuYWJsZWQgOiAxOwotCi0jaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKLSAgICBib29sIG1fdG91Y2hFdmVudEVtdWxhdGlvbkVuYWJsZWQg
OiAxOwotI2VuZGlmCi0gICAgYm9vbCBtX3Njcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJs
ZWQgOiAxOwotCi0gICAgU2Vjb25kcyBtX3RpbWVXaXRob3V0TW91c2VNb3ZlbWVudEJlZm9yZUhp
ZGluZ0NvbnRyb2xzOwotCi0gICAgVGltZXIgbV9zZXRJbWFnZUxvYWRpbmdTZXR0aW5nc1RpbWVy
OwotICAgIHZvaWQgaW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lckZpcmVkKCk7Ci0KLSAgICBib29s
IG1faGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQgOiAxOwotICAgIGJvb2wgbV9o
aWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQgOiAxOwotICAgIGJvb2wgbV9m
b250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMgOiAxOwotCi0gICAgYm9vbCBtX2ZvcmNlUGVu
ZGluZ1dlYkdMUG9saWN5IDogMTsKLQotI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKLSAgICBi
b29sIG1fcmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlIHsgZmFsc2UgfTsKLSNlbmRpZgotCi0g
ICAgYm9vbCBtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2VzIHsgZmFs
c2UgfTsKLQotI2lmIFVTRShBVkZPVU5EQVRJT04pCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IGJvb2wgZ0FWRm91bmRhdGlvbkVuYWJsZWQ7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJv
b2wgZ0FWRm91bmRhdGlvbk5TVVJMU2Vzc2lvbkVuYWJsZWQ7Ci0jZW5kaWYKLQotI2lmIFBMQVRG
T1JNKENPQ09BKQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGdRVEtpdEVuYWJsZWQ7
Ci0jZW5kaWYKLQotI2lmIFVTRShHU1RSRUFNRVIpCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IGJvb2wgZ0dTdHJlYW1lckVuYWJsZWQ7Ci0jZW5kaWYKLQotICAgIHN0YXRpYyBib29sIGdNb2Nr
U2Nyb2xsYmFyc0VuYWJsZWQ7Ci0gICAgc3RhdGljIGJvb2wgZ1VzZXNPdmVybGF5U2Nyb2xsYmFy
czsKLSAgICBzdGF0aWMgYm9vbCBnTW9ja1Njcm9sbEFuaW1hdG9yRW5hYmxlZDsKLQotI2lmIFBM
QVRGT1JNKFdJTikKLSAgICBzdGF0aWMgYm9vbCBnU2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1l
cnM7Ci0jZW5kaWYKLSAgICBzdGF0aWMgYm9vbCBnU2hvdWxkUmVzcGVjdFByaW9yaXR5SW5DU1NB
dHRyaWJ1dGVTZXR0ZXJzOwotI2lmIFBMQVRGT1JNKElPUykKLSAgICBzdGF0aWMgYm9vbCBnTmV0
d29ya0RhdGFVc2FnZVRyYWNraW5nRW5hYmxlZDsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
Ym9vbCBnQVZLaXRFbmFibGVkOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGdTaG91
bGRPcHRPdXRPZk5ldHdvcmtTdGF0ZU9ic2VydmF0aW9uOwotI2VuZGlmCi0gICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIGJvb2wgZ01hbmFnZUF1ZGlvU2Vzc2lvbjsKLSAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgYm9vbCBnQ3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkOwotCi0jaWYgRU5BQkxF
KExFR0FDWV9FTkNSWVBURURfTUVESUEpCi0gICAgU3RyaW5nIG1fbWVkaWFLZXlzU3RvcmFnZURp
cmVjdG9yeTsKLSNlbmRpZgotICAgIAotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgU3Ry
aW5nIG1fbWVkaWFEZXZpY2VJZGVudGlmaWVyU3RvcmFnZURpcmVjdG9yeTsKLSAgICBzdGF0aWMg
Ym9vbCBnTW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZDsKLSAgICBzdGF0aWMgYm9vbCBnTWVkaWFD
YXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQVBQ
TEVfUEFZKQotICAgIGJvb2wgbV9hcHBsZVBheUVuYWJsZWQgeyBmYWxzZSB9OwotICAgIGJvb2wg
bV9hcHBsZVBheUNhcGFiaWxpdHlEaXNjbG9zdXJlQWxsb3dlZCB7IHRydWUgfTsKLSNlbmRpZgot
Ci0gICAgc3RhdGljIGJvb2wgZ0xvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkOwot
ICAgIHN0YXRpYyBib29sIGdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZEVuYWJsZWQ7Ci0g
ICAgc3RhdGljIGJvb2wgZ0FsbG93c0FueVNTTENlcnRpZmljYXRlOwotCi0gICAgVmVjdG9yPENv
bnRlbnRUeXBlPiBtX21lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0Owog
fTsKIAotaW5saW5lIGJvb2wgU2V0dGluZ3M6OmlzUG9zdExvYWRDUFVVc2FnZU1lYXN1cmVtZW50
RW5hYmxlZCgpCi17Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgcmV0dXJuIHRydWU7Ci0jZWxz
ZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi1pbmxpbmUgYm9vbCBTZXR0aW5nczo6
aXNQb3N0QmFja2dyb3VuZGluZ0NQVVVzYWdlTWVhc3VyZW1lbnRFbmFibGVkKCkKLXsKLSNpZiBQ
TEFURk9STShNQUMpCi0gICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsK
LSNlbmRpZgotfQotCi1pbmxpbmUgYm9vbCBTZXR0aW5nczo6aXNQZXJBY3Rpdml0eVN0YXRlQ1BV
VXNhZ2VNZWFzdXJlbWVudEVuYWJsZWQoKQotewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICByZXR1
cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLWlubGluZSBi
b29sIFNldHRpbmdzOjppc1Bvc3RMb2FkTWVtb3J5VXNhZ2VNZWFzdXJlbWVudEVuYWJsZWQoKQot
ewotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICByZXR1
cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotaW5saW5lIGJvb2wgU2V0dGluZ3M6OmlzUG9zdEJhY2tn
cm91bmRpbmdNZW1vcnlVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpCi17Ci0jaWYgUExBVEZPUk0o
TUFDKQotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYK
LX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9T
ZXR0aW5nc0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGlu
Z3NCYXNlLmNwcAkocmV2aXNpb24gMjIzMzI4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL1Nl
dHRpbmdzLmNwcDoyMjMzMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisKKyNpbmNsdWRlICJB
dWRpb1Nlc3Npb24uaCIKKyNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCIKKyNpbmNs
dWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIkNvb2tpZVN0b3JhZ2UuaCIK
KyNpbmNsdWRlICJET01UaW1lci5oIgorI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorI2luY2x1ZGUgIkZvbnRHZW5l
cmljRmFtaWxpZXMuaCIKKyNpbmNsdWRlICJGcmFtZVRyZWUuaCIKKyNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCisjaW5jbHVkZSAiSGlzdG9yeUl0
ZW0uaCIKKyNpbmNsdWRlICJNYWluRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVk
ZSAiUGFnZUNhY2hlLmgiCisjaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCisj
aW5jbHVkZSAiU3RvcmFnZU1hcC5oIgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKKyNpZiBQ
TEFURk9STShDT0NPQSkKKyNpbmNsdWRlIDx3dGYvc3BpL2Rhcndpbi9keWxkU1BJLmg+CisjZW5k
aWYKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCisjaW5j
bHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5oIgorI2VuZGlmCisKKyNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKQorI2luY2x1ZGUgIk1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgdm9pZCBzZXRJbWFn
ZUxvYWRpbmdTZXR0aW5ncyhQYWdlKiBwYWdlKQoreworICAgIGlmICghcGFnZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmcGFnZS0+bWFpbkZyYW1lKCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgaWYg
KCFmcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmcmFt
ZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5zZXRJbWFnZXNFbmFibGVkKHBh
Z2UtPnNldHRpbmdzKCkuYXJlSW1hZ2VzRW5hYmxlZCgpKTsKKyAgICAgICAgZnJhbWUtPmRvY3Vt
ZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCkuc2V0QXV0b0xvYWRJbWFnZXMocGFnZS0+c2V0
dGluZ3MoKS5sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoKSk7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCBpbnZhbGlkYXRlQWZ0ZXJHZW5lcmljRmFtaWx5Q2hhbmdlKFBhZ2UqIHBhZ2UpCit7Cisg
ICAgaW52YWxpZGF0ZUZvbnRDYXNjYWRlQ2FjaGUoKTsKKyAgICBpZiAocGFnZSkKKyAgICAgICAg
cGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7Cit9CisKKyNpZiBVU0UoQVZG
T1VOREFUSU9OKQorYm9vbCBTZXR0aW5nczo6Z0FWRm91bmRhdGlvbkVuYWJsZWQgPSB0cnVlOwor
Ym9vbCBTZXR0aW5nczo6Z0FWRm91bmRhdGlvbk5TVVJMU2Vzc2lvbkVuYWJsZWQgPSB0cnVlOwor
I2VuZGlmCisKKyNpZiBQTEFURk9STShDT0NPQSkKK2Jvb2wgU2V0dGluZ3M6OmdRVEtpdEVuYWJs
ZWQgPSBmYWxzZTsKKyNlbmRpZgorCisjaWYgVVNFKEdTVFJFQU1FUikKK2Jvb2wgU2V0dGluZ3M6
OmdHU3RyZWFtZXJFbmFibGVkID0gdHJ1ZTsKKyNlbmRpZgorCitib29sIFNldHRpbmdzOjpnTW9j
a1Njcm9sbGJhcnNFbmFibGVkID0gZmFsc2U7Citib29sIFNldHRpbmdzOjpnVXNlc092ZXJsYXlT
Y3JvbGxiYXJzID0gZmFsc2U7Citib29sIFNldHRpbmdzOjpnTW9ja1Njcm9sbEFuaW1hdG9yRW5h
YmxlZCA9IGZhbHNlOworCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKK2Jvb2wgU2V0dGluZ3M6
OmdNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkID0gZmFsc2U7Citib29sIFNldHRpbmdzOjpnTWVk
aWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uID0gdHJ1ZTsKKyNlbmRpZgorCisjaWYg
UExBVEZPUk0oV0lOKQorYm9vbCBTZXR0aW5nczo6Z1Nob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGlt
ZXJzID0gdHJ1ZTsKKyNlbmRpZgorICAgIAorYm9vbCBTZXR0aW5nczo6Z1Nob3VsZFJlc3BlY3RQ
cmlvcml0eUluQ1NTQXR0cmlidXRlU2V0dGVycyA9IGZhbHNlOworYm9vbCBTZXR0aW5nczo6Z0xv
d1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkID0gZmFsc2U7Citib29sIFNldHRpbmdz
OjpnUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWRFbmFibGVkID0gZmFsc2U7Citib29sIFNl
dHRpbmdzOjpnQWxsb3dzQW55U1NMQ2VydGlmaWNhdGUgPSBmYWxzZTsKKworI2lmIFBMQVRGT1JN
KElPUykKK2Jvb2wgU2V0dGluZ3M6OmdOZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVkID0g
ZmFsc2U7Citib29sIFNldHRpbmdzOjpnQVZLaXRFbmFibGVkID0gZmFsc2U7Citib29sIFNldHRp
bmdzOjpnU2hvdWxkT3B0T3V0T2ZOZXR3b3JrU3RhdGVPYnNlcnZhdGlvbiA9IGZhbHNlOworI2Vu
ZGlmCitib29sIFNldHRpbmdzOjpnTWFuYWdlQXVkaW9TZXNzaW9uID0gZmFsc2U7Citib29sIFNl
dHRpbmdzOjpnQ3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkID0gZmFsc2U7CisKKy8vIE5PVEVz
CisvLyAgMSkgRWRpdGluZ01hY0JlaGF2aW9yIGNvbXByaXNlcyBUaWdlciwgTGVvcGFyZCwgU25v
d0xlb3BhcmQgYW5kIGlPUyBidWlsZHMsIGFzIHdlbGwgYXMgUXRXZWJLaXQgd2hlbiBidWlsdCBv
biBNYWM7CisvLyAgMikgRWRpdGluZ1dpbmRvd3NCZWhhdmlvciBjb21wcmlzZXMgV2luMzIgYnVp
bGQ7CisvLyAgMykgRWRpdGluZ1VuaXhCZWhhdmlvciBjb21wcmlzZXMgYWxsIHVuaXgtYmFzZWQg
c3lzdGVtcywgYnV0IERhcndpbi9NYWNPUyAoYW5kIHRoZW4gYWJ1c2luZyB0aGUgdGVybWlub2xv
Z3kpOworLy8gOTkpIE1hY0VkaXRpbmdCZWhhdmlvciBpcyB1c2VkIGFzIGEgZmFsbGJhY2suCitz
dGF0aWMgRWRpdGluZ0JlaGF2aW9yVHlwZSBlZGl0aW5nQmVoYXZpb3JUeXBlRm9yUGxhdGZvcm0o
KQoreworICAgIHJldHVybgorI2lmIFBMQVRGT1JNKElPUykKKyAgICBFZGl0aW5nSU9TQmVoYXZp
b3IKKyNlbGlmIE9TKERBUldJTikKKyAgICBFZGl0aW5nTWFjQmVoYXZpb3IKKyNlbGlmIE9TKFdJ
TkRPV1MpCisgICAgRWRpdGluZ1dpbmRvd3NCZWhhdmlvcgorI2VsaWYgT1MoVU5JWCkKKyAgICBF
ZGl0aW5nVW5peEJlaGF2aW9yCisjZWxzZQorICAgIC8vIEZhbGxiYWNrCisgICAgRWRpdGluZ01h
Y0JlaGF2aW9yCisjZW5kaWYKKyAgICA7Cit9CisKK2Jvb2wgU2V0dGluZ3M6OmRlZmF1bHRDdXN0
b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQoKQoreworI2lmIFBMQVRGT1JNKElPUykgJiYgX19JUEhP
TkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMTAzMDAKKyAgICByZXR1cm4gSU9TQXBwbGlj
YXRpb246OmlzTW9iaWxlU2FmYXJpKCkgfHwgZHlsZF9nZXRfcHJvZ3JhbV9zZGtfdmVyc2lvbigp
ID49IERZTERfSU9TX1ZFUlNJT05fMTFfMzsKKyNlbGlmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNf
T1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwMTMwMAorICAgIHJldHVybiBNYWNBcHBsaWNh
dGlvbjo6aXNTYWZhcmkoKSB8fCBkeWxkX2dldF9wcm9ncmFtX3Nka192ZXJzaW9uKCkgPiBEWUxE
X01BQ09TWF9WRVJTSU9OXzEwXzEzOworI2VsaWYgUExBVEZPUk0oTUFDKQorICAgIHJldHVybiBN
YWNBcHBsaWNhdGlvbjo6aXNTYWZhcmkoKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCit9CisKKyNpZiBQTEFURk9STShDT0NPQSkKK3N0YXRpYyBjb25zdCBib29sIGRlZmF1bHRZ
b3VUdWJlRmxhc2hQbHVnaW5SZXBsYWNlbWVudEVuYWJsZWQgPSB0cnVlOworI2Vsc2UKK3N0YXRp
YyBjb25zdCBib29sIGRlZmF1bHRZb3VUdWJlRmxhc2hQbHVnaW5SZXBsYWNlbWVudEVuYWJsZWQg
PSBmYWxzZTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQorc3RhdGljIGNvbnN0IGJvb2wg
ZGVmYXVsdEZpeGVkQmFja2dyb3VuZHNQYWludFJlbGF0aXZlVG9Eb2N1bWVudCA9IHRydWU7Citz
dGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9z
aXRpb25FbmFibGVkID0gdHJ1ZTsKK3N0YXRpYyBjb25zdCBib29sIGRlZmF1bHRBbGxvd3NJbmxp
bmVNZWRpYVBsYXliYWNrID0gZmFsc2U7CitzdGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0SW5saW5l
TWVkaWFQbGF5YmFja1JlcXVpcmVzUGxheXNJbmxpbmVBdHRyaWJ1dGUgPSB0cnVlOworc3RhdGlj
IGNvbnN0IGJvb2wgZGVmYXVsdFZpZGVvUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlID0gdHJ1
ZTsKK3N0YXRpYyBjb25zdCBib29sIGRlZmF1bHRBdWRpb1BsYXliYWNrUmVxdWlyZXNVc2VyR2Vz
dHVyZSA9IHRydWU7CitzdGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0TWVkaWFEYXRhTG9hZHNBdXRv
bWF0aWNhbGx5ID0gZmFsc2U7CitzdGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0U2hvdWxkUmVzcGVj
dEltYWdlT3JpZW50YXRpb24gPSB0cnVlOworc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdEltYWdl
U3Vic2FtcGxpbmdFbmFibGVkID0gdHJ1ZTsKK3N0YXRpYyBjb25zdCBib29sIGRlZmF1bHRTY3Jv
bGxpbmdUcmVlSW5jbHVkZXNGcmFtZXMgPSB0cnVlOworc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVs
dE1lZGlhQ29udHJvbHNTY2FsZVdpdGhQYWdlWm9vbSA9IHRydWU7CitzdGF0aWMgY29uc3QgYm9v
bCBkZWZhdWx0UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnRFbmFibGVkID0gdHJ1ZTsKKyNlbHNl
CitzdGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0Rml4ZWRCYWNrZ3JvdW5kc1BhaW50UmVsYXRpdmVU
b0RvY3VtZW50ID0gZmFsc2U7CitzdGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkID0gZmFsc2U7CitzdGF0aWMgY29uc3Qg
Ym9vbCBkZWZhdWx0QWxsb3dzSW5saW5lTWVkaWFQbGF5YmFjayA9IHRydWU7CitzdGF0aWMgY29u
c3QgYm9vbCBkZWZhdWx0SW5saW5lTWVkaWFQbGF5YmFja1JlcXVpcmVzUGxheXNJbmxpbmVBdHRy
aWJ1dGUgPSBmYWxzZTsKK3N0YXRpYyBjb25zdCBib29sIGRlZmF1bHRWaWRlb1BsYXliYWNrUmVx
dWlyZXNVc2VyR2VzdHVyZSA9IGZhbHNlOworc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdEF1ZGlv
UGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlID0gZmFsc2U7CitzdGF0aWMgY29uc3QgYm9vbCBk
ZWZhdWx0TWVkaWFEYXRhTG9hZHNBdXRvbWF0aWNhbGx5ID0gdHJ1ZTsKK3N0YXRpYyBjb25zdCBi
b29sIGRlZmF1bHRTaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiA9IGZhbHNlOworc3RhdGlj
IGNvbnN0IGJvb2wgZGVmYXVsdEltYWdlU3Vic2FtcGxpbmdFbmFibGVkID0gZmFsc2U7CitzdGF0
aWMgY29uc3QgYm9vbCBkZWZhdWx0U2Nyb2xsaW5nVHJlZUluY2x1ZGVzRnJhbWVzID0gZmFsc2U7
CitzdGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0TWVkaWFDb250cm9sc1NjYWxlV2l0aFBhZ2Vab29t
ID0gdHJ1ZTsKK3N0YXRpYyBjb25zdCBib29sIGRlZmF1bHRRdWlja1RpbWVQbHVnaW5SZXBsYWNl
bWVudEVuYWJsZWQgPSBmYWxzZTsKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0
UmVxdWlyZXNVc2VyR2VzdHVyZVRvTG9hZFZpZGVvID0gdHJ1ZTsKKworc3RhdGljIGNvbnN0IGJv
b2wgZGVmYXVsdEFsbG93c1BpY3R1cmVJblBpY3R1cmVNZWRpYVBsYXliYWNrID0gdHJ1ZTsKKwor
c3RhdGljIGNvbnN0IGRvdWJsZSBkZWZhdWx0SW5jcmVtZW50YWxSZW5kZXJpbmdTdXBwcmVzc2lv
blRpbWVvdXRJblNlY29uZHMgPSA1OworI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCitz
dGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0VW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCA9IHRydWU7
CisjZWxzZQorc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdFVuaWZpZWRUZXh0Q2hlY2tlckVuYWJs
ZWQgPSBmYWxzZTsKKyNlbmRpZgorc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdFNtYXJ0SW5zZXJ0
RGVsZXRlRW5hYmxlZCA9IHRydWU7CitzdGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0U2VsZWN0VHJh
aWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCA9IGZhbHNlOworCisvLyBUaGlzIGFtb3VudCBvZiB0aW1l
IG11c3QgaGF2ZSBlbGFwc2VkIGJlZm9yZSB3ZSB3aWxsIGV2ZW4gY29uc2lkZXIgc2NoZWR1bGlu
ZyBhIGxheW91dCB3aXRob3V0IGEgZGVsYXkuCisvLyBGSVhNRTogRm9yIGZhc3RlciBtYWNoaW5l
cyB0aGlzIHZhbHVlIGNhbiByZWFsbHkgYmUgbG93ZXJlZCB0byAyMDAuIDI1MCBpcyBhZGVxdWF0
ZSwgYnV0IGEgbGl0dGxlIGhpZ2gKKy8vIGZvciBkdWFsIEc1cy4gOikKK3N0YXRpYyBjb25zdCBT
ZWNvbmRzIGxheW91dFNjaGVkdWxlVGhyZXNob2xkID0gMjUwX21zOworCitTZXR0aW5nczo6U2V0
dGluZ3MoUGFnZSogcGFnZSkKKyAgICA6IG1fcGFnZShudWxscHRyKQorICAgICwgbV9tZWRpYVR5
cGVPdmVycmlkZSgic2NyZWVuIikKKyAgICAsIG1fZm9udEdlbmVyaWNGYW1pbGllcyhzdGQ6Om1h
a2VfdW5pcXVlPEZvbnRHZW5lcmljRmFtaWxpZXM+KCkpCisgICAgLCBtX3N0b3JhZ2VCbG9ja2lu
Z1BvbGljeShTZWN1cml0eU9yaWdpbjo6QWxsb3dBbGxTdG9yYWdlKQorICAgICwgbV9sYXlvdXRJ
bnRlcnZhbChsYXlvdXRTY2hlZHVsZVRocmVzaG9sZCkKKyAgICAsIG1fbWluaW11bURPTVRpbWVy
SW50ZXJ2YWwoRE9NVGltZXI6OmRlZmF1bHRNaW5pbXVtSW50ZXJ2YWwoKSkKKyAgICBTRVRUSU5H
U19JTklUSUFMSVpFUl9MSVNUCisgICAgLCBtX2lzSmF2YUVuYWJsZWQoZmFsc2UpCisgICAgLCBt
X2lzSmF2YUVuYWJsZWRGb3JMb2NhbEZpbGVzKHRydWUpCisgICAgLCBtX2xvYWRzSW1hZ2VzQXV0
b21hdGljYWxseShmYWxzZSkKKyAgICAsIG1fYXJlSW1hZ2VzRW5hYmxlZCh0cnVlKQorICAgICwg
bV9wcmVmZXJNSU1FVHlwZUZvckltYWdlcyhmYWxzZSkKKyAgICAsIG1fYXJlUGx1Z2luc0VuYWJs
ZWQoZmFsc2UpCisgICAgLCBtX2lzU2NyaXB0RW5hYmxlZChmYWxzZSkKKyAgICAsIG1fbmVlZHNB
ZG9iZUZyYW1lUmVsb2FkaW5nUXVpcmsoZmFsc2UpCisgICAgLCBtX3VzZXNQYWdlQ2FjaGUoZmFs
c2UpCisgICAgLCBtX2ZvbnRSZW5kZXJpbmdNb2RlKDApCisgICAgLCBtX3Nob3dUaWxlZFNjcm9s
bGluZ0luZGljYXRvcihmYWxzZSkKKyAgICAsIG1fYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9u
ZFBhZ2UoZmFsc2UpCisgICAgLCBtX2Ruc1ByZWZldGNoaW5nRW5hYmxlZChmYWxzZSkKKyNpZiBF
TkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgICwgbV90b3VjaEV2ZW50RW11bGF0aW9uRW5hYmxlZChm
YWxzZSkKKyNlbmRpZgorICAgICwgbV9zY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVk
KGZhbHNlKQorICAgICwgbV90aW1lV2l0aG91dE1vdXNlTW92ZW1lbnRCZWZvcmVIaWRpbmdDb250
cm9scygzX3MpCisgICAgLCBtX3NldEltYWdlTG9hZGluZ1NldHRpbmdzVGltZXIoKnRoaXMsICZT
ZXR0aW5nczo6aW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lckZpcmVkKQorICAgICwgbV9oaWRkZW5Q
YWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZChmYWxzZSkKKyAgICAsIG1faGlkZGVuUGFnZUNT
U0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKGZhbHNlKQorICAgICwgbV9mb250RmFsbGJhY2tQ
cmVmZXJzUGljdG9ncmFwaHMoZmFsc2UpCisgICAgLCBtX2ZvcmNlUGVuZGluZ1dlYkdMUG9saWN5
KGZhbHNlKQoreworICAgIC8vIEEgRnJhbWUgbWF5IG5vdCBoYXZlIGJlZW4gY3JlYXRlZCB5ZXQs
IHNvIHdlIGluaXRpYWxpemUgdGhlIEF0b21pY1N0cmluZworICAgIC8vIGhhc2ggYmVmb3JlIHRy
eWluZyB0byB1c2UgaXQuCisgICAgQXRvbWljU3RyaW5nOjppbml0KCk7CisgICAgaW5pdGlhbGl6
ZURlZmF1bHRGb250RmFtaWxpZXMoKTsKKyAgICBtX3BhZ2UgPSBwYWdlOyAvLyBQYWdlIGlzIG5v
dCB5ZXQgZnVsbHkgaW5pdGlhbGl6ZWQgd2hlbiBjb25zdHJ1Y3RpbmcgU2V0dGluZ3MsIHNvIGtl
ZXBpbmcgbV9wYWdlIG51bGwgb3ZlciBpbml0aWFsaXplRGVmYXVsdEZvbnRGYW1pbGllcygpIGNh
bGwuCit9CisKK1NldHRpbmdzOjp+U2V0dGluZ3MoKQoreworfQorCitSZWY8U2V0dGluZ3M+IFNl
dHRpbmdzOjpjcmVhdGUoUGFnZSogcGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
ZXR0aW5ncyhwYWdlKSk7Cit9CisKK1NFVFRJTkdTX1NFVFRFUl9CT0RJRVMKKworI2lmICFQTEFU
Rk9STShDT0NPQSkKK3ZvaWQgU2V0dGluZ3M6OmluaXRpYWxpemVEZWZhdWx0Rm9udEZhbWlsaWVz
KCkKK3sKKyAgICAvLyBPdGhlciBwbGF0Zm9ybXMgY2FuIHNldCB1cCBmb250cyBmcm9tIGEgY2xp
ZW50LCBidXQgb24gTWFjLCB3ZSB3YW50IGl0IGluIFdlYkNvcmUgdG8gc2hhcmUgY29kZSBiZXR3
ZWVuIFdlYktpdDEgYW5kIFdlYktpdDIuCit9CisjZW5kaWYKKworY29uc3QgQXRvbWljU3RyaW5n
JiBTZXR0aW5nczo6c3RhbmRhcmRGb250RmFtaWx5KFVTY3JpcHRDb2RlIHNjcmlwdCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zdGFuZGFyZEZvbnRGYW1pbHko
c2NyaXB0KTsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0U3RhbmRhcmRGb250RmFtaWx5KGNvbnN0
IEF0b21pY1N0cmluZyYgZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCit7CisgICAgYm9vbCBj
aGFuZ2VzID0gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zZXRTdGFuZGFyZEZvbnRGYW1pbHkoZmFt
aWx5LCBzY3JpcHQpOworICAgIGlmIChjaGFuZ2VzKQorICAgICAgICBpbnZhbGlkYXRlQWZ0ZXJH
ZW5lcmljRmFtaWx5Q2hhbmdlKG1fcGFnZSk7Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYgU2V0
dGluZ3M6OmZpeGVkRm9udEZhbWlseShVU2NyaXB0Q29kZSBzY3JpcHQpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fZm9udEdlbmVyaWNGYW1pbGllcy0+Zml4ZWRGb250RmFtaWx5KHNjcmlwdCk7Cit9
CisKK3ZvaWQgU2V0dGluZ3M6OnNldEZpeGVkRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcm
IGZhbWlseSwgVVNjcmlwdENvZGUgc2NyaXB0KQoreworICAgIGJvb2wgY2hhbmdlcyA9IG1fZm9u
dEdlbmVyaWNGYW1pbGllcy0+c2V0Rml4ZWRGb250RmFtaWx5KGZhbWlseSwgc2NyaXB0KTsKKyAg
ICBpZiAoY2hhbmdlcykKKyAgICAgICAgaW52YWxpZGF0ZUFmdGVyR2VuZXJpY0ZhbWlseUNoYW5n
ZShtX3BhZ2UpOworfQorCitjb25zdCBBdG9taWNTdHJpbmcmIFNldHRpbmdzOjpzZXJpZkZvbnRG
YW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAoreworICAgIHJldHVybiBtX2ZvbnRHZW5l
cmljRmFtaWxpZXMtPnNlcmlmRm9udEZhbWlseShzY3JpcHQpOworfQorCit2b2lkIFNldHRpbmdz
OjpzZXRTZXJpZkZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRD
b2RlIHNjcmlwdCkKK3sKKyAgICBib29sIGNoYW5nZXMgPSBtX2ZvbnRHZW5lcmljRmFtaWxpZXMt
PnNldFNlcmlmRm9udEZhbWlseShmYW1pbHksIHNjcmlwdCk7CisgICAgaWYgKGNoYW5nZXMpCisg
ICAgICAgIGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKK30KKwor
Y29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nczo6c2Fuc1NlcmlmRm9udEZhbWlseShVU2NyaXB0
Q29kZSBzY3JpcHQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZm9udEdlbmVyaWNGYW1pbGllcy0+
c2Fuc1NlcmlmRm9udEZhbWlseShzY3JpcHQpOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRTYW5z
U2VyaWZGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBVU2NyaXB0Q29kZSBz
Y3JpcHQpCit7CisgICAgYm9vbCBjaGFuZ2VzID0gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zZXRT
YW5zU2VyaWZGb250RmFtaWx5KGZhbWlseSwgc2NyaXB0KTsKKyAgICBpZiAoY2hhbmdlcykKKyAg
ICAgICAgaW52YWxpZGF0ZUFmdGVyR2VuZXJpY0ZhbWlseUNoYW5nZShtX3BhZ2UpOworfQorCitj
b25zdCBBdG9taWNTdHJpbmcmIFNldHRpbmdzOjpjdXJzaXZlRm9udEZhbWlseShVU2NyaXB0Q29k
ZSBzY3JpcHQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZm9udEdlbmVyaWNGYW1pbGllcy0+Y3Vy
c2l2ZUZvbnRGYW1pbHkoc2NyaXB0KTsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0Q3Vyc2l2ZUZv
bnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDb2RlIHNjcmlwdCkK
K3sKKyAgICBib29sIGNoYW5nZXMgPSBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNldEN1cnNpdmVG
b250RmFtaWx5KGZhbWlseSwgc2NyaXB0KTsKKyAgICBpZiAoY2hhbmdlcykKKyAgICAgICAgaW52
YWxpZGF0ZUFmdGVyR2VuZXJpY0ZhbWlseUNoYW5nZShtX3BhZ2UpOworfQorCitjb25zdCBBdG9t
aWNTdHJpbmcmIFNldHRpbmdzOjpmYW50YXN5Rm9udEZhbWlseShVU2NyaXB0Q29kZSBzY3JpcHQp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZm9udEdlbmVyaWNGYW1pbGllcy0+ZmFudGFzeUZvbnRG
YW1pbHkoc2NyaXB0KTsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0RmFudGFzeUZvbnRGYW1pbHko
Y29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDb2RlIHNjcmlwdCkKK3sKKyAgICBi
b29sIGNoYW5nZXMgPSBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNldEZhbnRhc3lGb250RmFtaWx5
KGZhbWlseSwgc2NyaXB0KTsKKyAgICBpZiAoY2hhbmdlcykKKyAgICAgICAgaW52YWxpZGF0ZUFm
dGVyR2VuZXJpY0ZhbWlseUNoYW5nZShtX3BhZ2UpOworfQorCitjb25zdCBBdG9taWNTdHJpbmcm
IFNldHRpbmdzOjpwaWN0b2dyYXBoRm9udEZhbWlseShVU2NyaXB0Q29kZSBzY3JpcHQpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fZm9udEdlbmVyaWNGYW1pbGllcy0+cGljdG9ncmFwaEZvbnRGYW1p
bHkoc2NyaXB0KTsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0UGljdG9ncmFwaEZvbnRGYW1pbHko
Y29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDb2RlIHNjcmlwdCkKK3sKKyAgICBi
b29sIGNoYW5nZXMgPSBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNldFBpY3RvZ3JhcGhGb250RmFt
aWx5KGZhbWlseSwgc2NyaXB0KTsKKyAgICBpZiAoY2hhbmdlcykKKyAgICAgICAgaW52YWxpZGF0
ZUFmdGVyR2VuZXJpY0ZhbWlseUNoYW5nZShtX3BhZ2UpOworfQorCitmbG9hdCBTZXR0aW5nczo6
ZGVmYXVsdE1pbmltdW1ab29tRm9udFNpemUoKQoreworICAgIHJldHVybiAxNTsKK30KKworI2lm
ICFQTEFURk9STShJT1MpCitib29sIFNldHRpbmdzOjpkZWZhdWx0VGV4dEF1dG9zaXppbmdFbmFi
bGVkKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwordm9pZCBTZXR0aW5nczo6
c2V0TWVkaWFUeXBlT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBtZWRpYVR5cGVPdmVycmlkZSkKK3sK
KyAgICBpZiAobV9tZWRpYVR5cGVPdmVycmlkZSA9PSBtZWRpYVR5cGVPdmVycmlkZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9tZWRpYVR5cGVPdmVycmlkZSA9IG1lZGlhVHlwZU92ZXJyaWRl
OworCisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lVmlldyog
dmlldyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpOworICAgIEFTU0VSVCh2aWV3KTsKKwor
ICAgIHZpZXctPnNldE1lZGlhVHlwZShtZWRpYVR5cGVPdmVycmlkZSk7CisgICAgbV9wYWdlLT5z
ZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0
TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KGJvb2wgbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KQor
eworICAgIG1fbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5ID0gbG9hZHNJbWFnZXNBdXRvbWF0aWNh
bGx5OworICAgIAorICAgIC8vIENoYW5naW5nIHRoaXMgc2V0dGluZyB0byB0cnVlIG1pZ2h0IGlt
bWVkaWF0ZWx5IHN0YXJ0IG5ldyBsb2FkcyBmb3IgaW1hZ2VzIHRoYXQgaGFkIHByZXZpb3VzbHkg
aGFkIGxvYWRpbmcgZGlzYWJsZWQuCisgICAgLy8gSWYgdGhpcyBoYXBwZW5zIHdoaWxlIGEgV2Vi
VmlldyBpcyBiZWluZyBkZWFsbG9jJ2VkLCBhbmQgd2UgZG9uJ3Qga25vdyB0aGUgV2ViVmlldyBp
cyBiZWluZyBkZWFsbG9jJ2VkLCB0aGVzZSBuZXcgbG9hZHMKKyAgICAvLyBjYW4gY2F1c2UgY3Jh
c2hlcyBkb3duc3RyZWFtIHdoZW4gdGhlIFdlYlZpZXcgbWVtb3J5IGhhcyBhY3R1YWxseSBiZWVu
IGZyZWUnZC4KKyAgICAvLyBPbmUgZXhhbXBsZSB3aGVyZSB0aGlzIGNhbiBoYXBwZW4gaXMgaW4g
TWFjIGFwcHMgdGhhdCBzdWJjbGFzcyBXZWJWaWV3IHRoZW4gZG8gd29yayBpbiB0aGVpciBvdmVy
cmlkZGVuIGRlYWxsb2MgbWV0aG9kcy4KKyAgICAvLyBTdGFydGluZyB0aGVzZSBsb2FkcyBzeW5j
aHJvbm91c2x5IGlzIG5vdCBpbXBvcnRhbnQuICBCeSBwdXR0aW5nIGl0IG9uIGEgMC1kZWxheSwg
cHJvcGVybHkgY2xvc2luZyB0aGUgUGFnZSBjYW5jZWxzIHRoZW0KKyAgICAvLyBiZWZvcmUgdGhl
eSBoYXZlIGEgY2hhbmNlIHRvIHJlYWxseSBzdGFydC4KKyAgICAvLyBTZWUgaHR0cDovL3dlYmtp
dC5vcmcvYi82MDU3MiBmb3IgbW9yZSBkaXNjdXNzaW9uLgorICAgIG1fc2V0SW1hZ2VMb2FkaW5n
U2V0dGluZ3NUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKK30KKwordm9pZCBTZXR0aW5nczo6aW1h
Z2VMb2FkaW5nU2V0dGluZ3NUaW1lckZpcmVkKCkKK3sKKyAgICBzZXRJbWFnZUxvYWRpbmdTZXR0
aW5ncyhtX3BhZ2UpOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRTY3JpcHRFbmFibGVkKGJvb2wg
aXNTY3JpcHRFbmFibGVkKQoreworICAgIGlmIChtX2lzU2NyaXB0RW5hYmxlZCA9PSBpc1Njcmlw
dEVuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNTY3JpcHRFbmFibGVkID0gaXNT
Y3JpcHRFbmFibGVkOworCisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworI2lm
IFBMQVRGT1JNKElPUykKKyAgICBtX3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1l
cygpOworI2VuZGlmCit9CisKK3ZvaWQgU2V0dGluZ3M6OnNldEphdmFFbmFibGVkKGJvb2wgaXNK
YXZhRW5hYmxlZCkKK3sKKyAgICBtX2lzSmF2YUVuYWJsZWQgPSBpc0phdmFFbmFibGVkOworfQor
Cit2b2lkIFNldHRpbmdzOjpzZXRKYXZhRW5hYmxlZEZvckxvY2FsRmlsZXMoYm9vbCBpc0phdmFF
bmFibGVkRm9yTG9jYWxGaWxlcykKK3sKKyAgICBtX2lzSmF2YUVuYWJsZWRGb3JMb2NhbEZpbGVz
ID0gaXNKYXZhRW5hYmxlZEZvckxvY2FsRmlsZXM7Cit9CisKK3ZvaWQgU2V0dGluZ3M6OnNldElt
YWdlc0VuYWJsZWQoYm9vbCBhcmVJbWFnZXNFbmFibGVkKQoreworICAgIG1fYXJlSW1hZ2VzRW5h
YmxlZCA9IGFyZUltYWdlc0VuYWJsZWQ7CisKKyAgICAvLyBTZWUgY29tbWVudCBpbiBzZXRMb2Fk
c0ltYWdlc0F1dG9tYXRpY2FsbHkuCisgICAgbV9zZXRJbWFnZUxvYWRpbmdTZXR0aW5nc1RpbWVy
LnN0YXJ0T25lU2hvdCgwX3MpOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRQcmVmZXJNSU1FVHlw
ZUZvckltYWdlcyhib29sIHByZWZlck1JTUVUeXBlRm9ySW1hZ2VzKQoreworICAgIG1fcHJlZmVy
TUlNRVR5cGVGb3JJbWFnZXMgPSBwcmVmZXJNSU1FVHlwZUZvckltYWdlczsKK30KKwordm9pZCBT
ZXR0aW5nczo6c2V0Rm9yY2VQZW5kaW5nV2ViR0xQb2xpY3koYm9vbCBmb3JjZWQpCit7CisgICAg
bV9mb3JjZVBlbmRpbmdXZWJHTFBvbGljeSA9IGZvcmNlZDsKK30KKworRnJhbWVGbGF0dGVuaW5n
IFNldHRpbmdzOjplZmZlY3RpdmVGcmFtZUZsYXR0ZW5pbmcoKQoreworI2lmIFBMQVRGT1JNKElP
UykKKyAgICAvLyBPbiBpT1Mgd2hlbiBhc3luYyBmcmFtZSBzY3JvbGxpbmcgaXMgZW5hYmxlZCwg
aXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byB1c2UgZnVsbCBmcmFtZSBmbGF0dGVuaW5nLgorICAg
IC8vIEluIHRoYXQgY2FzZSwgd2UganVzdCBjb25zaWRlciB0aGF0IGZyYW1lIGZsYXR0ZW5pbmcg
aXMgZGlzYWJsZWQuIFRoaXMgYWxsb3dzIHBlb3BsZSB0byB0ZXN0CisgICAgLy8gZnJhbWUgc2Ny
b2xsaW5nIG9uIGlPUyBieSBlbmFibGluZyAiQXN5bmMgRnJhbWUgU2Nyb2xsaW5nIiB2aWEgdGhl
IFNhZmFyaSBtZW51LgorICAgIGlmIChhc3luY0ZyYW1lU2Nyb2xsaW5nRW5hYmxlZCgpICYmIGZy
YW1lRmxhdHRlbmluZygpID09IEZyYW1lRmxhdHRlbmluZ0Z1bGx5RW5hYmxlZCkKKyAgICAgICAg
cmV0dXJuIEZyYW1lRmxhdHRlbmluZ0Rpc2FibGVkOworI2VuZGlmCisgICAgcmV0dXJuIGZyYW1l
RmxhdHRlbmluZygpOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRQbHVnaW5zRW5hYmxlZChib29s
IGFyZVBsdWdpbnNFbmFibGVkKQoreworICAgIGlmIChtX2FyZVBsdWdpbnNFbmFibGVkID09IGFy
ZVBsdWdpbnNFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2FyZVBsdWdpbnNFbmFi
bGVkID0gYXJlUGx1Z2luc0VuYWJsZWQ7CisgICAgUGFnZTo6cmVmcmVzaFBsdWdpbnMoZmFsc2Up
OworfQorCit2b2lkIFNldHRpbmdzOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGNvbnN0IFVS
TCYgdXNlclN0eWxlU2hlZXRMb2NhdGlvbikKK3sKKyAgICBpZiAobV91c2VyU3R5bGVTaGVldExv
Y2F0aW9uID09IHVzZXJTdHlsZVNoZWV0TG9jYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAg
IG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IHVzZXJTdHlsZVNoZWV0TG9jYXRpb247CisKKyAg
ICBpZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2UtPnVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFu
Z2VkKCk7Cit9CisKKy8vIEZJWE1FOiBUaGlzIHF1aXJrIGlzIG5lZWRlZCBiZWNhdXNlIG9mIFJh
ZGFyIDQ2NzQ1MzcgYW5kIDUyMTEyNzEuIFdlIG5lZWQgdG8gcGhhc2UgaXQgb3V0IG9uY2UgQWRv
YmUKKy8vIGNhbiBmaXggdGhlIGJ1ZyBmcm9tIHRoZWlyIGVuZC4KK3ZvaWQgU2V0dGluZ3M6OnNl
dE5lZWRzQWRvYmVGcmFtZVJlbG9hZGluZ1F1aXJrKGJvb2wgc2hvdWxkTm90UmVsb2FkSUZyYW1l
c0ZvclVuY2hhbmdlZFNSQykKK3sKKyAgICBtX25lZWRzQWRvYmVGcmFtZVJlbG9hZGluZ1F1aXJr
ID0gc2hvdWxkTm90UmVsb2FkSUZyYW1lc0ZvclVuY2hhbmdlZFNSQzsKK30KKwordm9pZCBTZXR0
aW5nczo6c2V0TWluaW11bURPTVRpbWVySW50ZXJ2YWwoU2Vjb25kcyBpbnRlcnZhbCkKK3sKKyAg
ICBhdXRvIG9sZFRpbWVySW50ZXJ2YWwgPSBzdGQ6OmV4Y2hhbmdlKG1fbWluaW11bURPTVRpbWVy
SW50ZXJ2YWwsIGludGVydmFsKTsKKworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47
CisKKyAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX3BhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CisgICAgICAgIGlmIChmcmFt
ZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5hZGp1c3RNaW5p
bXVtRE9NVGltZXJJbnRlcnZhbChvbGRUaW1lckludGVydmFsKTsKKyAgICB9Cit9CisKK3ZvaWQg
U2V0dGluZ3M6OnNldExheW91dEludGVydmFsKFNlY29uZHMgbGF5b3V0SW50ZXJ2YWwpCit7Cisg
ICAgLy8gRklYTUU6IEl0IHNlZW1zIHdlaXJkIHRoYXQgdGhpcyBmdW5jdGlvbiBtYXkgZGlzcmVn
YXJkIHRoZSBzcGVjaWZpZWQgbGF5b3V0IGludGVydmFsLgorICAgIC8vIFdlIHNob3VsZCBlaXRo
ZXIgZXhwb3NlIGxheW91dFNjaGVkdWxlVGhyZXNob2xkIG9yIGJldHRlciBjb21tdW5pY2F0ZSB0
aGlzIGludmFyaWFudC4KKyAgICBtX2xheW91dEludGVydmFsID0gc3RkOjptYXgobGF5b3V0SW50
ZXJ2YWwsIGxheW91dFNjaGVkdWxlVGhyZXNob2xkKTsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0
VXNlc1BhZ2VDYWNoZShib29sIHVzZXNQYWdlQ2FjaGUpCit7CisgICAgaWYgKG1fdXNlc1BhZ2VD
YWNoZSA9PSB1c2VzUGFnZUNhY2hlKQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIG1f
dXNlc1BhZ2VDYWNoZSA9IHVzZXNQYWdlQ2FjaGU7CisKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFtX3VzZXNQYWdlQ2FjaGUpCisgICAgICAgIFBhZ2VDYWNo
ZTo6c2luZ2xldG9uKCkucHJ1bmVUb1NpemVOb3coMCwgUHJ1bmluZ1JlYXNvbjo6Tm9uZSk7Cit9
CisKK3ZvaWQgU2V0dGluZ3M6OnNldEZvbnRSZW5kZXJpbmdNb2RlKEZvbnRSZW5kZXJpbmdNb2Rl
IG1vZGUpCit7CisgICAgaWYgKGZvbnRSZW5kZXJpbmdNb2RlKCkgPT0gbW9kZSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fZm9udFJlbmRlcmluZ01vZGUgPSBzdGF0aWNfY2FzdDxpbnQ+KG1vZGUp
OworICAgIGlmIChtX3BhZ2UpCisgICAgICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUlu
QWxsRnJhbWVzKCk7Cit9CisKK0ZvbnRSZW5kZXJpbmdNb2RlIFNldHRpbmdzOjpmb250UmVuZGVy
aW5nTW9kZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRSZW5kZXJpbmdN
b2RlPihtX2ZvbnRSZW5kZXJpbmdNb2RlKTsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0RE5TUHJl
ZmV0Y2hpbmdFbmFibGVkKGJvb2wgZG5zUHJlZmV0Y2hpbmdFbmFibGVkKQoreworICAgIGlmICht
X2Ruc1ByZWZldGNoaW5nRW5hYmxlZCA9PSBkbnNQcmVmZXRjaGluZ0VuYWJsZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fZG5zUHJlZmV0Y2hpbmdFbmFibGVkID0gZG5zUHJlZmV0Y2hpbmdF
bmFibGVkOworICAgIGlmIChtX3BhZ2UpCisgICAgICAgIG1fcGFnZS0+ZG5zUHJlZmV0Y2hpbmdT
dGF0ZUNoYW5nZWQoKTsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0U2hvd1RpbGVkU2Nyb2xsaW5n
SW5kaWNhdG9yKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAobV9zaG93VGlsZWRTY3JvbGxpbmdJ
bmRpY2F0b3IgPT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBtX3No
b3dUaWxlZFNjcm9sbGluZ0luZGljYXRvciA9IGVuYWJsZWQ7Cit9CisKKyNpZiBFTkFCTEUoUkVT
T1VSQ0VfVVNBR0UpCit2b2lkIFNldHRpbmdzOjpzZXRSZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2li
bGUoYm9vbCB2aXNpYmxlKQoreworICAgIGlmIChtX3Jlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJs
ZSA9PSB2aXNpYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jlc291cmNlVXNhZ2VPdmVy
bGF5VmlzaWJsZSA9IHZpc2libGU7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5z
ZXRSZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGUodmlzaWJsZSk7Cit9CisjZW5kaWYKKworI2lm
IFBMQVRGT1JNKFdJTikKK3ZvaWQgU2V0dGluZ3M6OnNldFNob3VsZFVzZUhpZ2hSZXNvbHV0aW9u
VGltZXJzKGJvb2wgc2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnMpCit7CisgICAgZ1Nob3Vs
ZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzID0gc2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnM7
Cit9CisjZW5kaWYKKwordm9pZCBTZXR0aW5nczo6c2V0U3RvcmFnZUJsb2NraW5nUG9saWN5KFNl
Y3VyaXR5T3JpZ2luOjpTdG9yYWdlQmxvY2tpbmdQb2xpY3kgZW5hYmxlZCkKK3sKKyAgICBpZiAo
bV9zdG9yYWdlQmxvY2tpbmdQb2xpY3kgPT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9zdG9yYWdlQmxvY2tpbmdQb2xpY3kgPSBlbmFibGVkOworICAgIGlmIChtX3BhZ2UpCisg
ICAgICAgIG1fcGFnZS0+c3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQg
U2V0dGluZ3M6OnNldEJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKGJvb2wgc2hvdWxk
RXh0ZW5kKQoreworICAgIGlmIChtX2JhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlID09
IHNob3VsZEV4dGVuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9iYWNrZ3JvdW5kU2hvdWxk
RXh0ZW5kQmV5b25kUGFnZSA9IHNob3VsZEV4dGVuZDsKKworICAgIGlmIChtX3BhZ2UpCisgICAg
ICAgIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT51cGRhdGVFeHRlbmRCYWNrZ3JvdW5kSWZO
ZWNlc3NhcnkoKTsKK30KKworI2lmIFVTRShBVkZPVU5EQVRJT04pCit2b2lkIFNldHRpbmdzOjpz
ZXRBVkZvdW5kYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAoZ0FWRm91bmRh
dGlvbkVuYWJsZWQgPT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ0FWRm91bmRh
dGlvbkVuYWJsZWQgPSBlbmFibGVkOworICAgIEhUTUxNZWRpYUVsZW1lbnQ6OnJlc2V0TWVkaWFF
bmdpbmVzKCk7Cit9CisKK3ZvaWQgU2V0dGluZ3M6OnNldEFWRm91bmRhdGlvbk5TVVJMU2Vzc2lv
bkVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIGlmIChnQVZGb3VuZGF0aW9uTlNVUkxTZXNz
aW9uRW5hYmxlZCA9PSBlbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBnQVZGb3VuZGF0
aW9uTlNVUkxTZXNzaW9uRW5hYmxlZCA9IGVuYWJsZWQ7Cit9CisjZW5kaWYKKworI2lmIFBMQVRG
T1JNKENPQ09BKQordm9pZCBTZXR0aW5nczo6c2V0UVRLaXRFbmFibGVkKGJvb2wgZW5hYmxlZCkK
K3sKKyAgICBpZiAoZ1FUS2l0RW5hYmxlZCA9PSBlbmFibGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBnUVRLaXRFbmFibGVkID0gZW5hYmxlZDsKKyAgICBIVE1MTWVkaWFFbGVtZW50OjpyZXNl
dE1lZGlhRW5naW5lcygpOworfQorI2VuZGlmCisKKyNpZiBVU0UoR1NUUkVBTUVSKQordm9pZCBT
ZXR0aW5nczo6c2V0R1N0cmVhbWVyRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgaWYgKGdH
U3RyZWFtZXJFbmFibGVkID09IGVuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGdHU3Ry
ZWFtZXJFbmFibGVkID0gZW5hYmxlZDsKKyAgICBIVE1MTWVkaWFFbGVtZW50OjpyZXNldE1lZGlh
RW5naW5lcygpOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorYm9vbCBT
ZXR0aW5nczo6bW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZCgpCit7CisgICAgcmV0dXJuIGdNb2Nr
Q2FwdHVyZURldmljZXNFbmFibGVkOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRNb2NrQ2FwdHVy
ZURldmljZXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBnTW9ja0NhcHR1cmVEZXZpY2Vz
RW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNl
dE1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZChlbmFibGVkKTsKK30KKworYm9v
bCBTZXR0aW5nczo6bWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gZ01lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbjsKK30K
Kwordm9pZCBTZXR0aW5nczo6c2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9u
KGJvb2wgbWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKQoreworICAgIGdNZWRp
YUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24gPSBtZWRpYUNhcHR1cmVSZXF1aXJlc1Nl
Y3VyZUNvbm5lY3Rpb247Cit9CisjZW5kaWYKKwordm9pZCBTZXR0aW5nczo6c2V0U2Nyb2xsaW5n
UGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgbV9zY3JvbGxp
bmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkID0gZW5hYmxlZDsKKworICAgIGlmIChtX3BhZ2Ug
JiYgbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCkpCisgICAgICAgIG1fcGFnZS0+bWFpbkZyYW1l
KCkudmlldygpLT5zZXRTY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKGVuYWJsZWQp
OworfQorCisvLyBJdCdzIHZlcnkgaW1wb3J0YW50IHRoYXQgdGhpcyBzZXR0aW5nIGRvZXNuJ3Qg
Y2hhbmdlIGluIHRoZSBtaWRkbGUgb2YgYSBkb2N1bWVudCdzIGxpZmV0aW1lLgorLy8gVGhlIE1h
YyBwb3J0IHVzZXMgdGhpcyBmbGFnIHdoZW4gcmVnaXN0ZXJpbmcgYW5kIGRlcmVnaXN0ZXJpbmcg
cGxhdGZvcm0tZGVwZW5kZW50IHNjcm9sbGJhcgorLy8gb2JqZWN0cy4gVGhlcmVmb3JlLCBpZiB0
aGlzIGNoYW5nZXMgYXQgYW4gdW5leHBlY3RlZCB0aW1lLCBkZXJlZ2lzdHJhdGlvbiBtYXkgbm90
IGhhcHBlbgorLy8gY29ycmVjdGx5LCB3aGljaCBtYXkgY2F1c2UgdGhlIHBsYXRmb3JtIHRvIGZv
bGxvdyBkYW5nbGluZyBwb2ludGVycy4KK3ZvaWQgU2V0dGluZ3M6OnNldE1vY2tTY3JvbGxiYXJz
RW5hYmxlZChib29sIGZsYWcpCit7CisgICAgZ01vY2tTY3JvbGxiYXJzRW5hYmxlZCA9IGZsYWc7
CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVwZGF0ZSBzY3JvbGwgYmFycyBpbiBleGlzdGlu
ZyBwYWdlcy4KK30KKworYm9vbCBTZXR0aW5nczo6bW9ja1Njcm9sbGJhcnNFbmFibGVkKCkKK3sK
KyAgICByZXR1cm4gZ01vY2tTY3JvbGxiYXJzRW5hYmxlZDsKK30KKwordm9pZCBTZXR0aW5nczo6
c2V0VXNlc092ZXJsYXlTY3JvbGxiYXJzKGJvb2wgZmxhZykKK3sKKyAgICBnVXNlc092ZXJsYXlT
Y3JvbGxiYXJzID0gZmxhZzsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXBkYXRlIHNjcm9s
bCBiYXJzIGluIGV4aXN0aW5nIHBhZ2VzLgorfQorCitib29sIFNldHRpbmdzOjp1c2VzT3Zlcmxh
eVNjcm9sbGJhcnMoKQoreworICAgIHJldHVybiBnVXNlc092ZXJsYXlTY3JvbGxiYXJzOworfQor
Cit2b2lkIFNldHRpbmdzOjpzZXRVc2VzTW9ja1Njcm9sbEFuaW1hdG9yKGJvb2wgZmxhZykKK3sK
KyAgICBnTW9ja1Njcm9sbEFuaW1hdG9yRW5hYmxlZCA9IGZsYWc7Cit9CisKK2Jvb2wgU2V0dGlu
Z3M6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKQoreworICAgIHJldHVybiBnTW9ja1Njcm9sbEFu
aW1hdG9yRW5hYmxlZDsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0U2hvdWxkUmVzcGVjdFByaW9y
aXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzKGJvb2wgZmxhZykKK3sKKyAgICBnU2hvdWxkUmVzcGVj
dFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzID0gZmxhZzsKK30KKworYm9vbCBTZXR0aW5n
czo6c2hvdWxkUmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzKCkKK3sKKyAgICBy
ZXR1cm4gZ1Nob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0cmlidXRlU2V0dGVyczsKK30KKwor
dm9pZCBTZXR0aW5nczo6c2V0SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQoYm9v
bCBmbGFnKQoreworICAgIGlmIChtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVk
ID09IGZsYWcpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hpZGRlblBhZ2VET01UaW1lclRocm90
dGxpbmdFbmFibGVkID0gZmxhZzsKKyAgICBpZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2UtPmhp
ZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdTdGF0ZUNoYW5nZWQoKTsKK30KKwordm9pZCBTZXR0
aW5nczo6c2V0SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0F1dG9JbmNyZWFzZXMoYm9vbCBm
bGFnKQoreworICAgIGlmIChtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVh
c2VzID09IGZsYWcpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hpZGRlblBhZ2VET01UaW1lclRo
cm90dGxpbmdBdXRvSW5jcmVhc2VzID0gZmxhZzsKKyAgICBpZiAobV9wYWdlKQorICAgICAgICBt
X3BhZ2UtPmhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdTdGF0ZUNoYW5nZWQoKTsKK30KKwor
dm9pZCBTZXR0aW5nczo6c2V0SGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVk
KGJvb2wgZmxhZykKK3sKKyAgICBpZiAobV9oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lv
bkVuYWJsZWQgPT0gZmxhZykKKyAgICAgICAgcmV0dXJuOworICAgIG1faGlkZGVuUGFnZUNTU0Fu
aW1hdGlvblN1c3BlbnNpb25FbmFibGVkID0gZmxhZzsKKyAgICBpZiAobV9wYWdlKQorICAgICAg
ICBtX3BhZ2UtPmhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uU3RhdGVDaGFuZ2VkKCk7
Cit9CisKK3ZvaWQgU2V0dGluZ3M6OnNldEZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXBocyhi
b29sIHByZWZlclBpY3RvZ3JhcGhzKQoreworICAgIGlmIChtX2ZvbnRGYWxsYmFja1ByZWZlcnNQ
aWN0b2dyYXBocyA9PSBwcmVmZXJQaWN0b2dyYXBocykKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9mb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMgPSBwcmVmZXJQaWN0b2dyYXBoczsKKyAg
ICBpZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZy
YW1lcygpOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRMb3dQb3dlclZpZGVvQXVkaW9CdWZmZXJT
aXplRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgZ0xvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNp
emVFbmFibGVkID0gZmxhZzsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIGdSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RW5hYmxlZEVuYWJsZWQgPSBmbGFnOworfQorCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBTZXR0
aW5nczo6c2V0QXVkaW9TZXNzaW9uQ2F0ZWdvcnlPdmVycmlkZSh1bnNpZ25lZCBzZXNzaW9uQ2F0
ZWdvcnkpCit7CisgICAgQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuc2V0Q2F0ZWdvcnlP
dmVycmlkZShzdGF0aWNfY2FzdDxBdWRpb1Nlc3Npb246OkNhdGVnb3J5VHlwZT4oc2Vzc2lvbkNh
dGVnb3J5KSk7Cit9CisKK3Vuc2lnbmVkIFNldHRpbmdzOjphdWRpb1Nlc3Npb25DYXRlZ29yeU92
ZXJyaWRlKCkKK3sKKyAgICByZXR1cm4gQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuY2F0
ZWdvcnlPdmVycmlkZSgpOworfQorCit2b2lkIFNldHRpbmdzOjpzZXROZXR3b3JrRGF0YVVzYWdl
VHJhY2tpbmdFbmFibGVkKGJvb2wgdHJhY2tpbmdFbmFibGVkKQoreworICAgIGdOZXR3b3JrRGF0
YVVzYWdlVHJhY2tpbmdFbmFibGVkID0gdHJhY2tpbmdFbmFibGVkOworfQorCitib29sIFNldHRp
bmdzOjpuZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVkKCkKK3sKKyAgICByZXR1cm4gZ05l
dHdvcmtEYXRhVXNhZ2VUcmFja2luZ0VuYWJsZWQ7Cit9CisKK3N0YXRpYyBTdHJpbmcmIHNoYXJl
ZE5ldHdvcmtJbnRlcmZhY2VOYW1lR2xvYmFsKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8U3RyaW5nPiBuZXR3b3JrSW50ZXJmYWNlTmFtZTsKKyAgICByZXR1cm4gbmV0d29ya0ludGVy
ZmFjZU5hbWU7Cit9CisKK3ZvaWQgU2V0dGluZ3M6OnNldE5ldHdvcmtJbnRlcmZhY2VOYW1lKGNv
bnN0IFN0cmluZyYgbmV0d29ya0ludGVyZmFjZU5hbWUpCit7CisgICAgc2hhcmVkTmV0d29ya0lu
dGVyZmFjZU5hbWVHbG9iYWwoKSA9IG5ldHdvcmtJbnRlcmZhY2VOYW1lOworfQorCitjb25zdCBT
dHJpbmcmIFNldHRpbmdzOjpuZXR3b3JrSW50ZXJmYWNlTmFtZSgpCit7CisgICAgcmV0dXJuIHNo
YXJlZE5ldHdvcmtJbnRlcmZhY2VOYW1lR2xvYmFsKCk7Cit9CisjZW5kaWYKKworYm9vbCBTZXR0
aW5nczo6Z2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3coKQoreworI2lmIFBMQVRG
T1JNKE1BQykKKyAgICByZXR1cm4gIU1hY0FwcGxpY2F0aW9uOjppc0lCb29rcygpOworI2VsaWYg
UExBVEZPUk0oSU9TKQorICAgIHJldHVybiAhSU9TQXBwbGljYXRpb246OmlzSUJvb2tzKCk7Cisj
ZWxzZQorICAgIHJldHVybiB0cnVlOworI2VuZGlmCit9CisKK3ZvaWQgU2V0dGluZ3M6OnNldEFs
bG93c0FueVNTTENlcnRpZmljYXRlKGJvb2wgYWxsb3dBbnlTU0xDZXJ0aWZpY2F0ZSkKK3sKKyAg
ICBnQWxsb3dzQW55U1NMQ2VydGlmaWNhdGUgPSBhbGxvd0FueVNTTENlcnRpZmljYXRlOworfQor
Citib29sIFNldHRpbmdzOjphbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSgpCit7CisgICAgcmV0dXJu
IGdBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZTsKK30KKworI2lmICFQTEFURk9STShDT0NPQSkKK2Nv
bnN0IFN0cmluZyYgU2V0dGluZ3M6OmRlZmF1bHRNZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hh
cmR3YXJlU3VwcG9ydCgpCit7CisgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Cit9CisjZW5kaWYK
Kwordm9pZCBTZXR0aW5nczo6c2V0TWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1
cHBvcnQoY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZXMpCit7CisgICAgbV9tZWRpYUNvbnRlbnRU
eXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydC5zaHJpbmsoMCk7CisgICAgZm9yIChhdXRvIHR5
cGUgOiBTdHJpbmdWaWV3KGNvbnRlbnRUeXBlcykuc3BsaXQoJzonKSkKKyAgICAgICAgbV9tZWRp
YUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydC5hcHBlbmQoQ29udGVudFR5cGUg
eyB0eXBlLnRvU3RyaW5nKCkgfSk7Cit9CisKK3ZvaWQgU2V0dGluZ3M6OnNldE1lZGlhQ29udGVu
dFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KGNvbnN0IFZlY3RvcjxDb250ZW50VHlwZT4m
IGNvbnRlbnRUeXBlcykKK3sKKyAgICBtX21lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdh
cmVTdXBwb3J0ID0gY29udGVudFR5cGVzOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0
dGluZ3NCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdz
QmFzZS5jcHAJKHJldmlzaW9uIDIyMzMyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGlu
Z3NCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlNldHRpbmdz
QmFzZS5oIgogCiAjaW5jbHVkZSAiQXVkaW9TZXNzaW9uLmgiCiAjaW5jbHVkZSAiQmFja0Zvcndh
cmRDb250cm9sbGVyLmgiCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2lu
Y2x1ZGUgIlBhZ2VDYWNoZS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5o
IgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU1hcC5oIgogI2luY2x1
ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTgzLDY4ICs4
NCw0NSBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlQWZ0ZXJHZW5lcmljRmFtaWx5CiB9CiAKICNp
ZiBVU0UoQVZGT1VOREFUSU9OKQotYm9vbCBTZXR0aW5nczo6Z0FWRm91bmRhdGlvbkVuYWJsZWQg
PSB0cnVlOwotYm9vbCBTZXR0aW5nczo6Z0FWRm91bmRhdGlvbk5TVVJMU2Vzc2lvbkVuYWJsZWQg
PSB0cnVlOworYm9vbCBTZXR0aW5nc0Jhc2U6OmdBVkZvdW5kYXRpb25FbmFibGVkID0gdHJ1ZTsK
K2Jvb2wgU2V0dGluZ3NCYXNlOjpnQVZGb3VuZGF0aW9uTlNVUkxTZXNzaW9uRW5hYmxlZCA9IHRy
dWU7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENPQ09BKQotYm9vbCBTZXR0aW5nczo6Z1FUS2l0
RW5hYmxlZCA9IGZhbHNlOworYm9vbCBTZXR0aW5nc0Jhc2U6OmdRVEtpdEVuYWJsZWQgPSBmYWxz
ZTsKICNlbmRpZgogCiAjaWYgVVNFKEdTVFJFQU1FUikKLWJvb2wgU2V0dGluZ3M6OmdHU3RyZWFt
ZXJFbmFibGVkID0gdHJ1ZTsKK2Jvb2wgU2V0dGluZ3NCYXNlOjpnR1N0cmVhbWVyRW5hYmxlZCA9
IHRydWU7CiAjZW5kaWYKIAotYm9vbCBTZXR0aW5nczo6Z01vY2tTY3JvbGxiYXJzRW5hYmxlZCA9
IGZhbHNlOwotYm9vbCBTZXR0aW5nczo6Z1VzZXNPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOwot
Ym9vbCBTZXR0aW5nczo6Z01vY2tTY3JvbGxBbmltYXRvckVuYWJsZWQgPSBmYWxzZTsKK2Jvb2wg
U2V0dGluZ3NCYXNlOjpnTW9ja1Njcm9sbGJhcnNFbmFibGVkID0gZmFsc2U7Citib29sIFNldHRp
bmdzQmFzZTo6Z1VzZXNPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOworYm9vbCBTZXR0aW5nc0Jh
c2U6OmdNb2NrU2Nyb2xsQW5pbWF0b3JFbmFibGVkID0gZmFsc2U7CiAKICNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQotYm9vbCBTZXR0aW5nczo6Z01vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQgPSBm
YWxzZTsKLWJvb2wgU2V0dGluZ3M6OmdNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rp
b24gPSB0cnVlOworYm9vbCBTZXR0aW5nc0Jhc2U6OmdNb2NrQ2FwdHVyZURldmljZXNFbmFibGVk
ID0gZmFsc2U7Citib29sIFNldHRpbmdzQmFzZTo6Z01lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJl
Q29ubmVjdGlvbiA9IHRydWU7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikKLWJvb2wgU2V0
dGluZ3M6OmdTaG91bGRVc2VIaWdoUmVzb2x1dGlvblRpbWVycyA9IHRydWU7Citib29sIFNldHRp
bmdzQmFzZTo6Z1Nob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzID0gdHJ1ZTsKICNlbmRpZgog
ICAgIAotYm9vbCBTZXR0aW5nczo6Z1Nob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0cmlidXRl
U2V0dGVycyA9IGZhbHNlOwotYm9vbCBTZXR0aW5nczo6Z0xvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZl
clNpemVFbmFibGVkID0gZmFsc2U7Ci1ib29sIFNldHRpbmdzOjpnUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0VuYWJsZWRFbmFibGVkID0gZmFsc2U7Ci1ib29sIFNldHRpbmdzOjpnQWxsb3dzQW55U1NM
Q2VydGlmaWNhdGUgPSBmYWxzZTsKK2Jvb2wgU2V0dGluZ3NCYXNlOjpnU2hvdWxkUmVzcGVjdFBy
aW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzID0gZmFsc2U7Citib29sIFNldHRpbmdzQmFzZTo6
Z0xvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkID0gZmFsc2U7Citib29sIFNldHRp
bmdzQmFzZTo6Z1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkRW5hYmxlZCA9IGZhbHNlOwor
Ym9vbCBTZXR0aW5nc0Jhc2U6OmdBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSA9IGZhbHNlOwogCiAj
aWYgUExBVEZPUk0oSU9TKQotYm9vbCBTZXR0aW5nczo6Z05ldHdvcmtEYXRhVXNhZ2VUcmFja2lu
Z0VuYWJsZWQgPSBmYWxzZTsKLWJvb2wgU2V0dGluZ3M6OmdBVktpdEVuYWJsZWQgPSBmYWxzZTsK
LWJvb2wgU2V0dGluZ3M6OmdTaG91bGRPcHRPdXRPZk5ldHdvcmtTdGF0ZU9ic2VydmF0aW9uID0g
ZmFsc2U7Ci0jZW5kaWYKLWJvb2wgU2V0dGluZ3M6OmdNYW5hZ2VBdWRpb1Nlc3Npb24gPSBmYWxz
ZTsKLWJvb2wgU2V0dGluZ3M6OmdDdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQgPSBmYWxzZTsK
LQotLy8gTk9URXMKLS8vICAxKSBFZGl0aW5nTWFjQmVoYXZpb3IgY29tcHJpc2VzIFRpZ2VyLCBM
ZW9wYXJkLCBTbm93TGVvcGFyZCBhbmQgaU9TIGJ1aWxkcywgYXMgd2VsbCBhcyBRdFdlYktpdCB3
aGVuIGJ1aWx0IG9uIE1hYzsKLS8vICAyKSBFZGl0aW5nV2luZG93c0JlaGF2aW9yIGNvbXByaXNl
cyBXaW4zMiBidWlsZDsKLS8vICAzKSBFZGl0aW5nVW5peEJlaGF2aW9yIGNvbXByaXNlcyBhbGwg
dW5peC1iYXNlZCBzeXN0ZW1zLCBidXQgRGFyd2luL01hY09TIChhbmQgdGhlbiBhYnVzaW5nIHRo
ZSB0ZXJtaW5vbG9neSk7Ci0vLyA5OSkgTWFjRWRpdGluZ0JlaGF2aW9yIGlzIHVzZWQgYXMgYSBm
YWxsYmFjay4KLXN0YXRpYyBFZGl0aW5nQmVoYXZpb3JUeXBlIGVkaXRpbmdCZWhhdmlvclR5cGVG
b3JQbGF0Zm9ybSgpCi17Ci0gICAgcmV0dXJuCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIEVkaXRp
bmdJT1NCZWhhdmlvcgotI2VsaWYgT1MoREFSV0lOKQotICAgIEVkaXRpbmdNYWNCZWhhdmlvcgot
I2VsaWYgT1MoV0lORE9XUykKLSAgICBFZGl0aW5nV2luZG93c0JlaGF2aW9yCi0jZWxpZiBPUyhV
TklYKQotICAgIEVkaXRpbmdVbml4QmVoYXZpb3IKLSNlbHNlCi0gICAgLy8gRmFsbGJhY2sKLSAg
ICBFZGl0aW5nTWFjQmVoYXZpb3IKK2Jvb2wgU2V0dGluZ3NCYXNlOjpnTmV0d29ya0RhdGFVc2Fn
ZVRyYWNraW5nRW5hYmxlZCA9IGZhbHNlOworYm9vbCBTZXR0aW5nc0Jhc2U6OmdBVktpdEVuYWJs
ZWQgPSBmYWxzZTsKK2Jvb2wgU2V0dGluZ3NCYXNlOjpnU2hvdWxkT3B0T3V0T2ZOZXR3b3JrU3Rh
dGVPYnNlcnZhdGlvbiA9IGZhbHNlOwogI2VuZGlmCi0gICAgOwotfQorYm9vbCBTZXR0aW5nc0Jh
c2U6OmdNYW5hZ2VBdWRpb1Nlc3Npb24gPSBmYWxzZTsKK2Jvb2wgU2V0dGluZ3NCYXNlOjpnQ3Vz
dG9tUGFzdGVib2FyZERhdGFFbmFibGVkID0gZmFsc2U7CiAKLWJvb2wgU2V0dGluZ3M6OmRlZmF1
bHRDdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQoKQorYm9vbCBTZXR0aW5nc0Jhc2U6OmRlZmF1
bHRDdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQoKQogewogI2lmIFBMQVRGT1JNKElPUykgJiYg
X19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMTAzMDAKICAgICByZXR1cm4gSU9T
QXBwbGljYXRpb246OmlzTW9iaWxlU2FmYXJpKCkgfHwgZHlsZF9nZXRfcHJvZ3JhbV9zZGtfdmVy
c2lvbigpID49IERZTERfSU9TX1ZFUlNJT05fMTFfMzsKQEAgLTE1Nyw2NiArMTM1LDE3IEBAIGJv
b2wgU2V0dGluZ3M6OmRlZmF1bHRDdXN0b21QYXN0ZWJvYXJkRGEKICNlbmRpZgogfQogCi0jaWYg
UExBVEZPUk0oQ09DT0EpCi1zdGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0WW91VHViZUZsYXNoUGx1
Z2luUmVwbGFjZW1lbnRFbmFibGVkID0gdHJ1ZTsKLSNlbHNlCi1zdGF0aWMgY29uc3QgYm9vbCBk
ZWZhdWx0WW91VHViZUZsYXNoUGx1Z2luUmVwbGFjZW1lbnRFbmFibGVkID0gZmFsc2U7Ci0jZW5k
aWYKLQotI2lmIFBMQVRGT1JNKElPUykKLXN0YXRpYyBjb25zdCBib29sIGRlZmF1bHRGaXhlZEJh
Y2tncm91bmRzUGFpbnRSZWxhdGl2ZVRvRG9jdW1lbnQgPSB0cnVlOwotc3RhdGljIGNvbnN0IGJv
b2wgZGVmYXVsdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCA9
IHRydWU7Ci1zdGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0QWxsb3dzSW5saW5lTWVkaWFQbGF5YmFj
ayA9IGZhbHNlOwotc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdElubGluZU1lZGlhUGxheWJhY2tS
ZXF1aXJlc1BsYXlzSW5saW5lQXR0cmlidXRlID0gdHJ1ZTsKLXN0YXRpYyBjb25zdCBib29sIGRl
ZmF1bHRWaWRlb1BsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZSA9IHRydWU7Ci1zdGF0aWMgY29u
c3QgYm9vbCBkZWZhdWx0QXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUgPSB0cnVlOwot
c3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdE1lZGlhRGF0YUxvYWRzQXV0b21hdGljYWxseSA9IGZh
bHNlOwotc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdFNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0
aW9uID0gdHJ1ZTsKLXN0YXRpYyBjb25zdCBib29sIGRlZmF1bHRJbWFnZVN1YnNhbXBsaW5nRW5h
YmxlZCA9IHRydWU7Ci1zdGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0U2Nyb2xsaW5nVHJlZUluY2x1
ZGVzRnJhbWVzID0gdHJ1ZTsKLXN0YXRpYyBjb25zdCBib29sIGRlZmF1bHRNZWRpYUNvbnRyb2xz
U2NhbGVXaXRoUGFnZVpvb20gPSB0cnVlOwotc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdFF1aWNr
VGltZVBsdWdpblJlcGxhY2VtZW50RW5hYmxlZCA9IHRydWU7Ci0jZWxzZQotc3RhdGljIGNvbnN0
IGJvb2wgZGVmYXVsdEZpeGVkQmFja2dyb3VuZHNQYWludFJlbGF0aXZlVG9Eb2N1bWVudCA9IGZh
bHNlOwotc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JG
aXhlZFBvc2l0aW9uRW5hYmxlZCA9IGZhbHNlOwotc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdEFs
bG93c0lubGluZU1lZGlhUGxheWJhY2sgPSB0cnVlOwotc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVs
dElubGluZU1lZGlhUGxheWJhY2tSZXF1aXJlc1BsYXlzSW5saW5lQXR0cmlidXRlID0gZmFsc2U7
Ci1zdGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0VmlkZW9QbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1
cmUgPSBmYWxzZTsKLXN0YXRpYyBjb25zdCBib29sIGRlZmF1bHRBdWRpb1BsYXliYWNrUmVxdWly
ZXNVc2VyR2VzdHVyZSA9IGZhbHNlOwotc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdE1lZGlhRGF0
YUxvYWRzQXV0b21hdGljYWxseSA9IHRydWU7Ci1zdGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0U2hv
dWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24gPSBmYWxzZTsKLXN0YXRpYyBjb25zdCBib29sIGRl
ZmF1bHRJbWFnZVN1YnNhbXBsaW5nRW5hYmxlZCA9IGZhbHNlOwotc3RhdGljIGNvbnN0IGJvb2wg
ZGVmYXVsdFNjcm9sbGluZ1RyZWVJbmNsdWRlc0ZyYW1lcyA9IGZhbHNlOwotc3RhdGljIGNvbnN0
IGJvb2wgZGVmYXVsdE1lZGlhQ29udHJvbHNTY2FsZVdpdGhQYWdlWm9vbSA9IHRydWU7Ci1zdGF0
aWMgY29uc3QgYm9vbCBkZWZhdWx0UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnRFbmFibGVkID0g
ZmFsc2U7Ci0jZW5kaWYKLQotc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdFJlcXVpcmVzVXNlckdl
c3R1cmVUb0xvYWRWaWRlbyA9IHRydWU7Ci0KLXN0YXRpYyBjb25zdCBib29sIGRlZmF1bHRBbGxv
d3NQaWN0dXJlSW5QaWN0dXJlTWVkaWFQbGF5YmFjayA9IHRydWU7Ci0KLXN0YXRpYyBjb25zdCBk
b3VibGUgZGVmYXVsdEluY3JlbWVudGFsUmVuZGVyaW5nU3VwcHJlc3Npb25UaW1lb3V0SW5TZWNv
bmRzID0gNTsKLSNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotc3RhdGljIGNvbnN0IGJv
b2wgZGVmYXVsdFVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQgPSB0cnVlOwotI2Vsc2UKLXN0YXRp
YyBjb25zdCBib29sIGRlZmF1bHRVbmlmaWVkVGV4dENoZWNrZXJFbmFibGVkID0gZmFsc2U7Ci0j
ZW5kaWYKLXN0YXRpYyBjb25zdCBib29sIGRlZmF1bHRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQg
PSB0cnVlOwotc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFj
ZUVuYWJsZWQgPSBmYWxzZTsKIAogLy8gVGhpcyBhbW91bnQgb2YgdGltZSBtdXN0IGhhdmUgZWxh
cHNlZCBiZWZvcmUgd2Ugd2lsbCBldmVuIGNvbnNpZGVyIHNjaGVkdWxpbmcgYSBsYXlvdXQgd2l0
aG91dCBhIGRlbGF5LgogLy8gRklYTUU6IEZvciBmYXN0ZXIgbWFjaGluZXMgdGhpcyB2YWx1ZSBj
YW4gcmVhbGx5IGJlIGxvd2VyZWQgdG8gMjAwLiAyNTAgaXMgYWRlcXVhdGUsIGJ1dCBhIGxpdHRs
ZSBoaWdoCiAvLyBmb3IgZHVhbCBHNXMuIDopCiBzdGF0aWMgY29uc3QgU2Vjb25kcyBsYXlvdXRT
Y2hlZHVsZVRocmVzaG9sZCA9IDI1MF9tczsKIAotU2V0dGluZ3M6OlNldHRpbmdzKFBhZ2UqIHBh
Z2UpCitTZXR0aW5nc0Jhc2U6OlNldHRpbmdzQmFzZShQYWdlKiBwYWdlKQogICAgIDogbV9wYWdl
KG51bGxwdHIpCi0gICAgLCBtX21lZGlhVHlwZU92ZXJyaWRlKCJzY3JlZW4iKQogICAgICwgbV9m
b250R2VuZXJpY0ZhbWlsaWVzKHN0ZDo6bWFrZV91bmlxdWU8Rm9udEdlbmVyaWNGYW1pbGllcz4o
KSkKLSAgICAsIG1fc3RvcmFnZUJsb2NraW5nUG9saWN5KFNlY3VyaXR5T3JpZ2luOjpBbGxvd0Fs
bFN0b3JhZ2UpCiAgICAgLCBtX2xheW91dEludGVydmFsKGxheW91dFNjaGVkdWxlVGhyZXNob2xk
KQogICAgICwgbV9taW5pbXVtRE9NVGltZXJJbnRlcnZhbChET01UaW1lcjo6ZGVmYXVsdE1pbmlt
dW1JbnRlcnZhbCgpKQotICAgIFNFVFRJTkdTX0lOSVRJQUxJWkVSX0xJU1QKICAgICAsIG1faXNK
YXZhRW5hYmxlZChmYWxzZSkKICAgICAsIG1faXNKYXZhRW5hYmxlZEZvckxvY2FsRmlsZXModHJ1
ZSkKICAgICAsIG1fbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KGZhbHNlKQpAQCAtMjM0LDggKzE2
Myw3IEBAIFNldHRpbmdzOjpTZXR0aW5ncyhQYWdlKiBwYWdlKQogICAgICwgbV90b3VjaEV2ZW50
RW11bGF0aW9uRW5hYmxlZChmYWxzZSkKICNlbmRpZgogICAgICwgbV9zY3JvbGxpbmdQZXJmb3Jt
YW5jZUxvZ2dpbmdFbmFibGVkKGZhbHNlKQotICAgICwgbV90aW1lV2l0aG91dE1vdXNlTW92ZW1l
bnRCZWZvcmVIaWRpbmdDb250cm9scygzX3MpCi0gICAgLCBtX3NldEltYWdlTG9hZGluZ1NldHRp
bmdzVGltZXIoKnRoaXMsICZTZXR0aW5nczo6aW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lckZpcmVk
KQorICAgICwgbV9zZXRJbWFnZUxvYWRpbmdTZXR0aW5nc1RpbWVyKCp0aGlzLCAmU2V0dGluZ3NC
YXNlOjppbWFnZUxvYWRpbmdTZXR0aW5nc1RpbWVyRmlyZWQpCiAgICAgLCBtX2hpZGRlblBhZ2VE
T01UaW1lclRocm90dGxpbmdFbmFibGVkKGZhbHNlKQogICAgICwgbV9oaWRkZW5QYWdlQ1NTQW5p
bWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2ZvbnRGYWxsYmFja1ByZWZl
cnNQaWN0b2dyYXBocyhmYWxzZSkKQEAgLTI0OCwxMjEgKzE3NiwxMTQgQEAgU2V0dGluZ3M6OlNl
dHRpbmdzKFBhZ2UqIHBhZ2UpCiAgICAgbV9wYWdlID0gcGFnZTsgLy8gUGFnZSBpcyBub3QgeWV0
IGZ1bGx5IGluaXRpYWxpemVkIHdoZW4gY29uc3RydWN0aW5nIFNldHRpbmdzLCBzbyBrZWVwaW5n
IG1fcGFnZSBudWxsIG92ZXIgaW5pdGlhbGl6ZURlZmF1bHRGb250RmFtaWxpZXMoKSBjYWxsLgog
fQogCi1TZXR0aW5nczo6flNldHRpbmdzKCkKLXsKLX0KLQotUmVmPFNldHRpbmdzPiBTZXR0aW5n
czo6Y3JlYXRlKFBhZ2UqIHBhZ2UpCitTZXR0aW5nc0Jhc2U6On5TZXR0aW5nc0Jhc2UoKQogewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldHRpbmdzKHBhZ2UpKTsKIH0KIAotU0VUVElOR1Nf
U0VUVEVSX0JPRElFUwotCiAjaWYgIVBMQVRGT1JNKENPQ09BKQotdm9pZCBTZXR0aW5nczo6aW5p
dGlhbGl6ZURlZmF1bHRGb250RmFtaWxpZXMoKQordm9pZCBTZXR0aW5nc0Jhc2U6OmluaXRpYWxp
emVEZWZhdWx0Rm9udEZhbWlsaWVzKCkKIHsKICAgICAvLyBPdGhlciBwbGF0Zm9ybXMgY2FuIHNl
dCB1cCBmb250cyBmcm9tIGEgY2xpZW50LCBidXQgb24gTWFjLCB3ZSB3YW50IGl0IGluIFdlYkNv
cmUgdG8gc2hhcmUgY29kZSBiZXR3ZWVuIFdlYktpdDEgYW5kIFdlYktpdDIuCiB9CiAjZW5kaWYK
IAotY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nczo6c3RhbmRhcmRGb250RmFtaWx5KFVTY3Jp
cHRDb2RlIHNjcmlwdCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgU2V0dGluZ3NCYXNlOjpz
dGFuZGFyZEZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAogewogICAgIHJldHVy
biBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnN0YW5kYXJkRm9udEZhbWlseShzY3JpcHQpOwogfQog
Ci12b2lkIFNldHRpbmdzOjpzZXRTdGFuZGFyZEZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5n
JiBmYW1pbHksIFVTY3JpcHRDb2RlIHNjcmlwdCkKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRTdGFu
ZGFyZEZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDb2RlIHNj
cmlwdCkKIHsKICAgICBib29sIGNoYW5nZXMgPSBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNldFN0
YW5kYXJkRm9udEZhbWlseShmYW1pbHksIHNjcmlwdCk7CiAgICAgaWYgKGNoYW5nZXMpCiAgICAg
ICAgIGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKIH0KIAotY29u
c3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nczo6Zml4ZWRGb250RmFtaWx5KFVTY3JpcHRDb2RlIHNj
cmlwdCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgU2V0dGluZ3NCYXNlOjpmaXhlZEZvbnRG
YW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAogewogICAgIHJldHVybiBtX2ZvbnRHZW5l
cmljRmFtaWxpZXMtPmZpeGVkRm9udEZhbWlseShzY3JpcHQpOwogfQogCi12b2lkIFNldHRpbmdz
OjpzZXRGaXhlZEZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRD
b2RlIHNjcmlwdCkKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRGaXhlZEZvbnRGYW1pbHkoY29uc3Qg
QXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDb2RlIHNjcmlwdCkKIHsKICAgICBib29sIGNo
YW5nZXMgPSBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNldEZpeGVkRm9udEZhbWlseShmYW1pbHks
IHNjcmlwdCk7CiAgICAgaWYgKGNoYW5nZXMpCiAgICAgICAgIGludmFsaWRhdGVBZnRlckdlbmVy
aWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5n
czo6c2VyaWZGb250RmFtaWx5KFVTY3JpcHRDb2RlIHNjcmlwdCkgY29uc3QKK2NvbnN0IEF0b21p
Y1N0cmluZyYgU2V0dGluZ3NCYXNlOjpzZXJpZkZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0
KSBjb25zdAogewogICAgIHJldHVybiBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNlcmlmRm9udEZh
bWlseShzY3JpcHQpOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRTZXJpZkZvbnRGYW1pbHkoY29u
c3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDb2RlIHNjcmlwdCkKK3ZvaWQgU2V0dGlu
Z3NCYXNlOjpzZXRTZXJpZkZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVT
Y3JpcHRDb2RlIHNjcmlwdCkKIHsKICAgICBib29sIGNoYW5nZXMgPSBtX2ZvbnRHZW5lcmljRmFt
aWxpZXMtPnNldFNlcmlmRm9udEZhbWlseShmYW1pbHksIHNjcmlwdCk7CiAgICAgaWYgKGNoYW5n
ZXMpCiAgICAgICAgIGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsK
IH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nczo6c2Fuc1NlcmlmRm9udEZhbWlseShV
U2NyaXB0Q29kZSBzY3JpcHQpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIFNldHRpbmdzQmFz
ZTo6c2Fuc1NlcmlmRm9udEZhbWlseShVU2NyaXB0Q29kZSBzY3JpcHQpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1fZm9udEdlbmVyaWNGYW1pbGllcy0+c2Fuc1NlcmlmRm9udEZhbWlseShzY3JpcHQp
OwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRTYW5zU2VyaWZGb250RmFtaWx5KGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCit2b2lkIFNldHRpbmdzQmFzZTo6
c2V0U2Fuc1NlcmlmRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgVVNjcmlw
dENvZGUgc2NyaXB0KQogewogICAgIGJvb2wgY2hhbmdlcyA9IG1fZm9udEdlbmVyaWNGYW1pbGll
cy0+c2V0U2Fuc1NlcmlmRm9udEZhbWlseShmYW1pbHksIHNjcmlwdCk7CiAgICAgaWYgKGNoYW5n
ZXMpCiAgICAgICAgIGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsK
IH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nczo6Y3Vyc2l2ZUZvbnRGYW1pbHkoVVNj
cmlwdENvZGUgc2NyaXB0KSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nc0Jhc2U6
OmN1cnNpdmVGb250RmFtaWx5KFVTY3JpcHRDb2RlIHNjcmlwdCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5jdXJzaXZlRm9udEZhbWlseShzY3JpcHQpOwogfQog
Ci12b2lkIFNldHRpbmdzOjpzZXRDdXJzaXZlRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcm
IGZhbWlseSwgVVNjcmlwdENvZGUgc2NyaXB0KQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldEN1cnNp
dmVGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3Jp
cHQpCiB7CiAgICAgYm9vbCBjaGFuZ2VzID0gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zZXRDdXJz
aXZlRm9udEZhbWlseShmYW1pbHksIHNjcmlwdCk7CiAgICAgaWYgKGNoYW5nZXMpCiAgICAgICAg
IGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKIH0KIAotY29uc3Qg
QXRvbWljU3RyaW5nJiBTZXR0aW5nczo6ZmFudGFzeUZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2Ny
aXB0KSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nc0Jhc2U6OmZhbnRhc3lGb250
RmFtaWx5KFVTY3JpcHRDb2RlIHNjcmlwdCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9mb250R2Vu
ZXJpY0ZhbWlsaWVzLT5mYW50YXN5Rm9udEZhbWlseShzY3JpcHQpOwogfQogCi12b2lkIFNldHRp
bmdzOjpzZXRGYW50YXN5Rm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgVVNj
cmlwdENvZGUgc2NyaXB0KQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldEZhbnRhc3lGb250RmFtaWx5
KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCiB7CiAgICAg
Ym9vbCBjaGFuZ2VzID0gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zZXRGYW50YXN5Rm9udEZhbWls
eShmYW1pbHksIHNjcmlwdCk7CiAgICAgaWYgKGNoYW5nZXMpCiAgICAgICAgIGludmFsaWRhdGVB
ZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5n
JiBTZXR0aW5nczo6cGljdG9ncmFwaEZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25z
dAorY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nc0Jhc2U6OnBpY3RvZ3JhcGhGb250RmFtaWx5
KFVTY3JpcHRDb2RlIHNjcmlwdCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9mb250R2VuZXJpY0Zh
bWlsaWVzLT5waWN0b2dyYXBoRm9udEZhbWlseShzY3JpcHQpOwogfQogCi12b2lkIFNldHRpbmdz
OjpzZXRQaWN0b2dyYXBoRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgVVNj
cmlwdENvZGUgc2NyaXB0KQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldFBpY3RvZ3JhcGhGb250RmFt
aWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCiB7CiAg
ICAgYm9vbCBjaGFuZ2VzID0gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zZXRQaWN0b2dyYXBoRm9u
dEZhbWlseShmYW1pbHksIHNjcmlwdCk7CiAgICAgaWYgKGNoYW5nZXMpCiAgICAgICAgIGludmFs
aWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKIH0KIAotZmxvYXQgU2V0dGlu
Z3M6OmRlZmF1bHRNaW5pbXVtWm9vbUZvbnRTaXplKCkKK2Zsb2F0IFNldHRpbmdzQmFzZTo6ZGVm
YXVsdE1pbmltdW1ab29tRm9udFNpemUoKQogewogICAgIHJldHVybiAxNTsKIH0KIAogI2lmICFQ
TEFURk9STShJT1MpCi1ib29sIFNldHRpbmdzOjpkZWZhdWx0VGV4dEF1dG9zaXppbmdFbmFibGVk
KCkKK2Jvb2wgU2V0dGluZ3NCYXNlOjpkZWZhdWx0VGV4dEF1dG9zaXppbmdFbmFibGVkKCkKIHsK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAjZW5kaWYKIAotdm9pZCBTZXR0aW5nczo6c2V0TWVkaWFU
eXBlT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBtZWRpYVR5cGVPdmVycmlkZSkKK3ZvaWQgU2V0dGlu
Z3NCYXNlOjpzZXRNZWRpYVR5cGVPdmVycmlkZShjb25zdCBTdHJpbmcmIG1lZGlhVHlwZU92ZXJy
aWRlKQogewogICAgIGlmIChtX21lZGlhVHlwZU92ZXJyaWRlID09IG1lZGlhVHlwZU92ZXJyaWRl
KQogICAgICAgICByZXR1cm47CkBAIC0zNzksNyArMzAwLDcgQEAgdm9pZCBTZXR0aW5nczo6c2V0
TWVkaWFUeXBlT3ZlcnJpZGUoY29ucwogICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUlu
QWxsRnJhbWVzKCk7CiB9CiAKLXZvaWQgU2V0dGluZ3M6OnNldExvYWRzSW1hZ2VzQXV0b21hdGlj
YWxseShib29sIGxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSkKK3ZvaWQgU2V0dGluZ3NCYXNlOjpz
ZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoYm9vbCBsb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkp
CiB7CiAgICAgbV9sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkgPSBsb2Fkc0ltYWdlc0F1dG9tYXRp
Y2FsbHk7CiAgICAgCkBAIC0zOTMsMTIgKzMxNCwxMiBAQCB2b2lkIFNldHRpbmdzOjpzZXRMb2Fk
c0ltYWdlc0F1dG9tYXRpY2FsCiAgICAgbV9zZXRJbWFnZUxvYWRpbmdTZXR0aW5nc1RpbWVyLnN0
YXJ0T25lU2hvdCgwX3MpOwogfQogCi12b2lkIFNldHRpbmdzOjppbWFnZUxvYWRpbmdTZXR0aW5n
c1RpbWVyRmlyZWQoKQordm9pZCBTZXR0aW5nc0Jhc2U6OmltYWdlTG9hZGluZ1NldHRpbmdzVGlt
ZXJGaXJlZCgpCiB7CiAgICAgc2V0SW1hZ2VMb2FkaW5nU2V0dGluZ3MobV9wYWdlKTsKIH0KIAot
dm9pZCBTZXR0aW5nczo6c2V0U2NyaXB0RW5hYmxlZChib29sIGlzU2NyaXB0RW5hYmxlZCkKK3Zv
aWQgU2V0dGluZ3NCYXNlOjpzZXRTY3JpcHRFbmFibGVkKGJvb2wgaXNTY3JpcHRFbmFibGVkKQog
ewogICAgIGlmIChtX2lzU2NyaXB0RW5hYmxlZCA9PSBpc1NjcmlwdEVuYWJsZWQpCiAgICAgICAg
IHJldHVybjsKQEAgLTQxMywxNyArMzM0LDE3IEBAIHZvaWQgU2V0dGluZ3M6OnNldFNjcmlwdEVu
YWJsZWQoYm9vbCBpc1MKICNlbmRpZgogfQogCi12b2lkIFNldHRpbmdzOjpzZXRKYXZhRW5hYmxl
ZChib29sIGlzSmF2YUVuYWJsZWQpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0SmF2YUVuYWJsZWQo
Ym9vbCBpc0phdmFFbmFibGVkKQogewogICAgIG1faXNKYXZhRW5hYmxlZCA9IGlzSmF2YUVuYWJs
ZWQ7CiB9CiAKLXZvaWQgU2V0dGluZ3M6OnNldEphdmFFbmFibGVkRm9yTG9jYWxGaWxlcyhib29s
IGlzSmF2YUVuYWJsZWRGb3JMb2NhbEZpbGVzKQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldEphdmFF
bmFibGVkRm9yTG9jYWxGaWxlcyhib29sIGlzSmF2YUVuYWJsZWRGb3JMb2NhbEZpbGVzKQogewog
ICAgIG1faXNKYXZhRW5hYmxlZEZvckxvY2FsRmlsZXMgPSBpc0phdmFFbmFibGVkRm9yTG9jYWxG
aWxlczsKIH0KIAotdm9pZCBTZXR0aW5nczo6c2V0SW1hZ2VzRW5hYmxlZChib29sIGFyZUltYWdl
c0VuYWJsZWQpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0SW1hZ2VzRW5hYmxlZChib29sIGFyZUlt
YWdlc0VuYWJsZWQpCiB7CiAgICAgbV9hcmVJbWFnZXNFbmFibGVkID0gYXJlSW1hZ2VzRW5hYmxl
ZDsKIApAQCAtNDMxLDI5ICszNTIsMTcgQEAgdm9pZCBTZXR0aW5nczo6c2V0SW1hZ2VzRW5hYmxl
ZChib29sIGFyZQogICAgIG1fc2V0SW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lci5zdGFydE9uZVNo
b3QoMF9zKTsKIH0KIAotdm9pZCBTZXR0aW5nczo6c2V0UHJlZmVyTUlNRVR5cGVGb3JJbWFnZXMo
Ym9vbCBwcmVmZXJNSU1FVHlwZUZvckltYWdlcykKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRQcmVm
ZXJNSU1FVHlwZUZvckltYWdlcyhib29sIHByZWZlck1JTUVUeXBlRm9ySW1hZ2VzKQogewogICAg
IG1fcHJlZmVyTUlNRVR5cGVGb3JJbWFnZXMgPSBwcmVmZXJNSU1FVHlwZUZvckltYWdlczsKIH0K
IAotdm9pZCBTZXR0aW5nczo6c2V0Rm9yY2VQZW5kaW5nV2ViR0xQb2xpY3koYm9vbCBmb3JjZWQp
Cit2b2lkIFNldHRpbmdzQmFzZTo6c2V0Rm9yY2VQZW5kaW5nV2ViR0xQb2xpY3koYm9vbCBmb3Jj
ZWQpCiB7CiAgICAgbV9mb3JjZVBlbmRpbmdXZWJHTFBvbGljeSA9IGZvcmNlZDsKIH0KIAotRnJh
bWVGbGF0dGVuaW5nIFNldHRpbmdzOjplZmZlY3RpdmVGcmFtZUZsYXR0ZW5pbmcoKQotewotI2lm
IFBMQVRGT1JNKElPUykKLSAgICAvLyBPbiBpT1Mgd2hlbiBhc3luYyBmcmFtZSBzY3JvbGxpbmcg
aXMgZW5hYmxlZCwgaXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byB1c2UgZnVsbCBmcmFtZSBmbGF0
dGVuaW5nLgotICAgIC8vIEluIHRoYXQgY2FzZSwgd2UganVzdCBjb25zaWRlciB0aGF0IGZyYW1l
IGZsYXR0ZW5pbmcgaXMgZGlzYWJsZWQuIFRoaXMgYWxsb3dzIHBlb3BsZSB0byB0ZXN0Ci0gICAg
Ly8gZnJhbWUgc2Nyb2xsaW5nIG9uIGlPUyBieSBlbmFibGluZyAiQXN5bmMgRnJhbWUgU2Nyb2xs
aW5nIiB2aWEgdGhlIFNhZmFyaSBtZW51LgotICAgIGlmIChhc3luY0ZyYW1lU2Nyb2xsaW5nRW5h
YmxlZCgpICYmIGZyYW1lRmxhdHRlbmluZygpID09IEZyYW1lRmxhdHRlbmluZ0Z1bGx5RW5hYmxl
ZCkKLSAgICAgICAgcmV0dXJuIEZyYW1lRmxhdHRlbmluZ0Rpc2FibGVkOwotI2VuZGlmCi0gICAg
cmV0dXJuIGZyYW1lRmxhdHRlbmluZygpOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRQbHVnaW5z
RW5hYmxlZChib29sIGFyZVBsdWdpbnNFbmFibGVkKQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldFBs
dWdpbnNFbmFibGVkKGJvb2wgYXJlUGx1Z2luc0VuYWJsZWQpCiB7CiAgICAgaWYgKG1fYXJlUGx1
Z2luc0VuYWJsZWQgPT0gYXJlUGx1Z2luc0VuYWJsZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTQ2
Miw3ICszNzEsNyBAQCB2b2lkIFNldHRpbmdzOjpzZXRQbHVnaW5zRW5hYmxlZChib29sIGFyCiAg
ICAgUGFnZTo6cmVmcmVzaFBsdWdpbnMoZmFsc2UpOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRV
c2VyU3R5bGVTaGVldExvY2F0aW9uKGNvbnN0IFVSTCYgdXNlclN0eWxlU2hlZXRMb2NhdGlvbikK
K3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGNvbnN0IFVSTCYg
dXNlclN0eWxlU2hlZXRMb2NhdGlvbikKIHsKICAgICBpZiAobV91c2VyU3R5bGVTaGVldExvY2F0
aW9uID09IHVzZXJTdHlsZVNoZWV0TG9jYXRpb24pCiAgICAgICAgIHJldHVybjsKQEAgLTQ3NSwx
MiArMzg0LDEyIEBAIHZvaWQgU2V0dGluZ3M6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24KIAog
Ly8gRklYTUU6IFRoaXMgcXVpcmsgaXMgbmVlZGVkIGJlY2F1c2Ugb2YgUmFkYXIgNDY3NDUzNyBh
bmQgNTIxMTI3MS4gV2UgbmVlZCB0byBwaGFzZSBpdCBvdXQgb25jZSBBZG9iZQogLy8gY2FuIGZp
eCB0aGUgYnVnIGZyb20gdGhlaXIgZW5kLgotdm9pZCBTZXR0aW5nczo6c2V0TmVlZHNBZG9iZUZy
YW1lUmVsb2FkaW5nUXVpcmsoYm9vbCBzaG91bGROb3RSZWxvYWRJRnJhbWVzRm9yVW5jaGFuZ2Vk
U1JDKQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldE5lZWRzQWRvYmVGcmFtZVJlbG9hZGluZ1F1aXJr
KGJvb2wgc2hvdWxkTm90UmVsb2FkSUZyYW1lc0ZvclVuY2hhbmdlZFNSQykKIHsKICAgICBtX25l
ZWRzQWRvYmVGcmFtZVJlbG9hZGluZ1F1aXJrID0gc2hvdWxkTm90UmVsb2FkSUZyYW1lc0ZvclVu
Y2hhbmdlZFNSQzsKIH0KIAotdm9pZCBTZXR0aW5nczo6c2V0TWluaW11bURPTVRpbWVySW50ZXJ2
YWwoU2Vjb25kcyBpbnRlcnZhbCkKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRNaW5pbXVtRE9NVGlt
ZXJJbnRlcnZhbChTZWNvbmRzIGludGVydmFsKQogewogICAgIGF1dG8gb2xkVGltZXJJbnRlcnZh
bCA9IHN0ZDo6ZXhjaGFuZ2UobV9taW5pbXVtRE9NVGltZXJJbnRlcnZhbCwgaW50ZXJ2YWwpOwog
CkBAIC00OTMsMTQgKzQwMiwxNCBAQCB2b2lkIFNldHRpbmdzOjpzZXRNaW5pbXVtRE9NVGltZXJJ
bnRlcnZhCiAgICAgfQogfQogCi12b2lkIFNldHRpbmdzOjpzZXRMYXlvdXRJbnRlcnZhbChTZWNv
bmRzIGxheW91dEludGVydmFsKQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldExheW91dEludGVydmFs
KFNlY29uZHMgbGF5b3V0SW50ZXJ2YWwpCiB7CiAgICAgLy8gRklYTUU6IEl0IHNlZW1zIHdlaXJk
IHRoYXQgdGhpcyBmdW5jdGlvbiBtYXkgZGlzcmVnYXJkIHRoZSBzcGVjaWZpZWQgbGF5b3V0IGlu
dGVydmFsLgogICAgIC8vIFdlIHNob3VsZCBlaXRoZXIgZXhwb3NlIGxheW91dFNjaGVkdWxlVGhy
ZXNob2xkIG9yIGJldHRlciBjb21tdW5pY2F0ZSB0aGlzIGludmFyaWFudC4KICAgICBtX2xheW91
dEludGVydmFsID0gc3RkOjptYXgobGF5b3V0SW50ZXJ2YWwsIGxheW91dFNjaGVkdWxlVGhyZXNo
b2xkKTsKIH0KIAotdm9pZCBTZXR0aW5nczo6c2V0VXNlc1BhZ2VDYWNoZShib29sIHVzZXNQYWdl
Q2FjaGUpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0VXNlc1BhZ2VDYWNoZShib29sIHVzZXNQYWdl
Q2FjaGUpCiB7CiAgICAgaWYgKG1fdXNlc1BhZ2VDYWNoZSA9PSB1c2VzUGFnZUNhY2hlKQogICAg
ICAgICByZXR1cm47CkBAIC01MTQsNyArNDIzLDcgQEAgdm9pZCBTZXR0aW5nczo6c2V0VXNlc1Bh
Z2VDYWNoZShib29sIHVzZQogICAgICAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnBydW5lVG9T
aXplTm93KDAsIFBydW5pbmdSZWFzb246Ok5vbmUpOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRG
b250UmVuZGVyaW5nTW9kZShGb250UmVuZGVyaW5nTW9kZSBtb2RlKQordm9pZCBTZXR0aW5nc0Jh
c2U6OnNldEZvbnRSZW5kZXJpbmdNb2RlKEZvbnRSZW5kZXJpbmdNb2RlIG1vZGUpCiB7CiAgICAg
aWYgKGZvbnRSZW5kZXJpbmdNb2RlKCkgPT0gbW9kZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTIz
LDEyICs0MzIsMTIgQEAgdm9pZCBTZXR0aW5nczo6c2V0Rm9udFJlbmRlcmluZ01vZGUoRm9udAog
ICAgICAgICBtX3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOwogfQogCi1G
b250UmVuZGVyaW5nTW9kZSBTZXR0aW5nczo6Zm9udFJlbmRlcmluZ01vZGUoKSBjb25zdAorRm9u
dFJlbmRlcmluZ01vZGUgU2V0dGluZ3NCYXNlOjpmb250UmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRSZW5kZXJpbmdNb2RlPihtX2ZvbnRSZW5kZXJp
bmdNb2RlKTsKIH0KIAotdm9pZCBTZXR0aW5nczo6c2V0RE5TUHJlZmV0Y2hpbmdFbmFibGVkKGJv
b2wgZG5zUHJlZmV0Y2hpbmdFbmFibGVkKQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldEROU1ByZWZl
dGNoaW5nRW5hYmxlZChib29sIGRuc1ByZWZldGNoaW5nRW5hYmxlZCkKIHsKICAgICBpZiAobV9k
bnNQcmVmZXRjaGluZ0VuYWJsZWQgPT0gZG5zUHJlZmV0Y2hpbmdFbmFibGVkKQogICAgICAgICBy
ZXR1cm47CkBAIC01MzgsNyArNDQ3LDcgQEAgdm9pZCBTZXR0aW5nczo6c2V0RE5TUHJlZmV0Y2hp
bmdFbmFibGVkKAogICAgICAgICBtX3BhZ2UtPmRuc1ByZWZldGNoaW5nU3RhdGVDaGFuZ2VkKCk7
CiB9CiAKLXZvaWQgU2V0dGluZ3M6OnNldFNob3dUaWxlZFNjcm9sbGluZ0luZGljYXRvcihib29s
IGVuYWJsZWQpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0U2hvd1RpbGVkU2Nyb2xsaW5nSW5kaWNh
dG9yKGJvb2wgZW5hYmxlZCkKIHsKICAgICBpZiAobV9zaG93VGlsZWRTY3JvbGxpbmdJbmRpY2F0
b3IgPT0gZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNTQ3LDcgKzQ1Niw3IEBAIHZvaWQg
U2V0dGluZ3M6OnNldFNob3dUaWxlZFNjcm9sbGluZ0luZGkKIH0KIAogI2lmIEVOQUJMRShSRVNP
VVJDRV9VU0FHRSkKLXZvaWQgU2V0dGluZ3M6OnNldFJlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJs
ZShib29sIHZpc2libGUpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0UmVzb3VyY2VVc2FnZU92ZXJs
YXlWaXNpYmxlKGJvb2wgdmlzaWJsZSkKIHsKICAgICBpZiAobV9yZXNvdXJjZVVzYWdlT3Zlcmxh
eVZpc2libGUgPT0gdmlzaWJsZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTU5LDEzICs0NjgsMTMg
QEAgdm9pZCBTZXR0aW5nczo6c2V0UmVzb3VyY2VVc2FnZU92ZXJsYXlWaQogI2VuZGlmCiAKICNp
ZiBQTEFURk9STShXSU4pCi12b2lkIFNldHRpbmdzOjpzZXRTaG91bGRVc2VIaWdoUmVzb2x1dGlv
blRpbWVycyhib29sIHNob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzKQordm9pZCBTZXR0aW5n
c0Jhc2U6OnNldFNob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzKGJvb2wgc2hvdWxkVXNlSGln
aFJlc29sdXRpb25UaW1lcnMpCiB7CiAgICAgZ1Nob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJz
ID0gc2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnM7CiB9CiAjZW5kaWYKIAotdm9pZCBTZXR0
aW5nczo6c2V0U3RvcmFnZUJsb2NraW5nUG9saWN5KFNlY3VyaXR5T3JpZ2luOjpTdG9yYWdlQmxv
Y2tpbmdQb2xpY3kgZW5hYmxlZCkKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRTdG9yYWdlQmxvY2tp
bmdQb2xpY3koU2VjdXJpdHlPcmlnaW46OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSBlbmFibGVkKQog
ewogICAgIGlmIChtX3N0b3JhZ2VCbG9ja2luZ1BvbGljeSA9PSBlbmFibGVkKQogICAgICAgICBy
ZXR1cm47CkBAIC01NzUsNyArNDg0LDcgQEAgdm9pZCBTZXR0aW5nczo6c2V0U3RvcmFnZUJsb2Nr
aW5nUG9saWN5KAogICAgICAgICBtX3BhZ2UtPnN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZCgp
OwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRCYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFn
ZShib29sIHNob3VsZEV4dGVuZCkKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRCYWNrZ3JvdW5kU2hv
dWxkRXh0ZW5kQmV5b25kUGFnZShib29sIHNob3VsZEV4dGVuZCkKIHsKICAgICBpZiAobV9iYWNr
Z3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSA9PSBzaG91bGRFeHRlbmQpCiAgICAgICAgIHJl
dHVybjsKQEAgLTU4Nyw3ICs0OTYsNyBAQCB2b2lkIFNldHRpbmdzOjpzZXRCYWNrZ3JvdW5kU2hv
dWxkRXh0ZW5kCiB9CiAKICNpZiBVU0UoQVZGT1VOREFUSU9OKQotdm9pZCBTZXR0aW5nczo6c2V0
QVZGb3VuZGF0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0
QVZGb3VuZGF0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgaWYgKGdBVkZvdW5kYXRp
b25FbmFibGVkID09IGVuYWJsZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTU5Niw3ICs1MDUsNyBA
QCB2b2lkIFNldHRpbmdzOjpzZXRBVkZvdW5kYXRpb25FbmFibGVkKGJvCiAgICAgSFRNTE1lZGlh
RWxlbWVudDo6cmVzZXRNZWRpYUVuZ2luZXMoKTsKIH0KIAotdm9pZCBTZXR0aW5nczo6c2V0QVZG
b3VuZGF0aW9uTlNVUkxTZXNzaW9uRW5hYmxlZChib29sIGVuYWJsZWQpCit2b2lkIFNldHRpbmdz
QmFzZTo6c2V0QVZGb3VuZGF0aW9uTlNVUkxTZXNzaW9uRW5hYmxlZChib29sIGVuYWJsZWQpCiB7
CiAgICAgaWYgKGdBVkZvdW5kYXRpb25OU1VSTFNlc3Npb25FbmFibGVkID09IGVuYWJsZWQpCiAg
ICAgICAgIHJldHVybjsKQEAgLTYwNiw3ICs1MTUsNyBAQCB2b2lkIFNldHRpbmdzOjpzZXRBVkZv
dW5kYXRpb25OU1VSTFNlc3NpCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENPQ09BKQotdm9pZCBT
ZXR0aW5nczo6c2V0UVRLaXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3ZvaWQgU2V0dGluZ3NCYXNl
OjpzZXRRVEtpdEVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIGlmIChnUVRLaXRFbmFibGVk
ID09IGVuYWJsZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTYxNyw3ICs1MjYsNyBAQCB2b2lkIFNl
dHRpbmdzOjpzZXRRVEtpdEVuYWJsZWQoYm9vbCBlbmFiCiAjZW5kaWYKIAogI2lmIFVTRShHU1RS
RUFNRVIpCi12b2lkIFNldHRpbmdzOjpzZXRHU3RyZWFtZXJFbmFibGVkKGJvb2wgZW5hYmxlZCkK
K3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRHU3RyZWFtZXJFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsK
ICAgICBpZiAoZ0dTdHJlYW1lckVuYWJsZWQgPT0gZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwpA
QCAtNjI4LDI5ICs1MzcsMjkgQEAgdm9pZCBTZXR0aW5nczo6c2V0R1N0cmVhbWVyRW5hYmxlZChi
b29sIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotYm9vbCBTZXR0aW5nczo6
bW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZCgpCitib29sIFNldHRpbmdzQmFzZTo6bW9ja0NhcHR1
cmVEZXZpY2VzRW5hYmxlZCgpCiB7CiAgICAgcmV0dXJuIGdNb2NrQ2FwdHVyZURldmljZXNFbmFi
bGVkOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkKGJv
b2wgZW5hYmxlZCkKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFi
bGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBnTW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZCA9IGVu
YWJsZWQ7CiAgICAgTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNldE1vY2tSZWFsdGlt
ZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZChlbmFibGVkKTsKIH0KIAotYm9vbCBTZXR0aW5nczo6
bWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKCkgY29uc3QKK2Jvb2wgU2V0dGlu
Z3NCYXNlOjptZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oKSBjb25zdAogewog
ICAgIHJldHVybiBnTWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uOwogfQogCi12
b2lkIFNldHRpbmdzOjpzZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oYm9v
bCBtZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24pCit2b2lkIFNldHRpbmdzQmFz
ZTo6c2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKGJvb2wgbWVkaWFDYXB0
dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKQogewogICAgIGdNZWRpYUNhcHR1cmVSZXF1aXJl
c1NlY3VyZUNvbm5lY3Rpb24gPSBtZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb247
CiB9CiAjZW5kaWYKIAotdm9pZCBTZXR0aW5nczo6c2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dn
aW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0U2Nyb2xsaW5n
UGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgbV9zY3JvbGxp
bmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkID0gZW5hYmxlZDsKIApAQCAtNjYyLDQ5ICs1NzEs
NDkgQEAgdm9pZCBTZXR0aW5nczo6c2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VMbwogLy8gVGhlIE1h
YyBwb3J0IHVzZXMgdGhpcyBmbGFnIHdoZW4gcmVnaXN0ZXJpbmcgYW5kIGRlcmVnaXN0ZXJpbmcg
cGxhdGZvcm0tZGVwZW5kZW50IHNjcm9sbGJhcgogLy8gb2JqZWN0cy4gVGhlcmVmb3JlLCBpZiB0
aGlzIGNoYW5nZXMgYXQgYW4gdW5leHBlY3RlZCB0aW1lLCBkZXJlZ2lzdHJhdGlvbiBtYXkgbm90
IGhhcHBlbgogLy8gY29ycmVjdGx5LCB3aGljaCBtYXkgY2F1c2UgdGhlIHBsYXRmb3JtIHRvIGZv
bGxvdyBkYW5nbGluZyBwb2ludGVycy4KLXZvaWQgU2V0dGluZ3M6OnNldE1vY2tTY3JvbGxiYXJz
RW5hYmxlZChib29sIGZsYWcpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0TW9ja1Njcm9sbGJhcnNF
bmFibGVkKGJvb2wgZmxhZykKIHsKICAgICBnTW9ja1Njcm9sbGJhcnNFbmFibGVkID0gZmxhZzsK
ICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXBkYXRlIHNjcm9sbCBiYXJzIGluIGV4aXN0aW5n
IHBhZ2VzLgogfQogCi1ib29sIFNldHRpbmdzOjptb2NrU2Nyb2xsYmFyc0VuYWJsZWQoKQorYm9v
bCBTZXR0aW5nc0Jhc2U6Om1vY2tTY3JvbGxiYXJzRW5hYmxlZCgpCiB7CiAgICAgcmV0dXJuIGdN
b2NrU2Nyb2xsYmFyc0VuYWJsZWQ7CiB9CiAKLXZvaWQgU2V0dGluZ3M6OnNldFVzZXNPdmVybGF5
U2Nyb2xsYmFycyhib29sIGZsYWcpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0VXNlc092ZXJsYXlT
Y3JvbGxiYXJzKGJvb2wgZmxhZykKIHsKICAgICBnVXNlc092ZXJsYXlTY3JvbGxiYXJzID0gZmxh
ZzsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXBkYXRlIHNjcm9sbCBiYXJzIGluIGV4aXN0
aW5nIHBhZ2VzLgogfQogCi1ib29sIFNldHRpbmdzOjp1c2VzT3ZlcmxheVNjcm9sbGJhcnMoKQor
Ym9vbCBTZXR0aW5nc0Jhc2U6OnVzZXNPdmVybGF5U2Nyb2xsYmFycygpCiB7CiAgICAgcmV0dXJu
IGdVc2VzT3ZlcmxheVNjcm9sbGJhcnM7CiB9CiAKLXZvaWQgU2V0dGluZ3M6OnNldFVzZXNNb2Nr
U2Nyb2xsQW5pbWF0b3IoYm9vbCBmbGFnKQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldFVzZXNNb2Nr
U2Nyb2xsQW5pbWF0b3IoYm9vbCBmbGFnKQogewogICAgIGdNb2NrU2Nyb2xsQW5pbWF0b3JFbmFi
bGVkID0gZmxhZzsKIH0KIAotYm9vbCBTZXR0aW5nczo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigp
Citib29sIFNldHRpbmdzQmFzZTo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpCiB7CiAgICAgcmV0
dXJuIGdNb2NrU2Nyb2xsQW5pbWF0b3JFbmFibGVkOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRT
aG91bGRSZXNwZWN0UHJpb3JpdHlJbkNTU0F0dHJpYnV0ZVNldHRlcnMoYm9vbCBmbGFnKQordm9p
ZCBTZXR0aW5nc0Jhc2U6OnNldFNob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0cmlidXRlU2V0
dGVycyhib29sIGZsYWcpCiB7CiAgICAgZ1Nob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0cmli
dXRlU2V0dGVycyA9IGZsYWc7CiB9CiAKLWJvb2wgU2V0dGluZ3M6OnNob3VsZFJlc3BlY3RQcmlv
cml0eUluQ1NTQXR0cmlidXRlU2V0dGVycygpCitib29sIFNldHRpbmdzQmFzZTo6c2hvdWxkUmVz
cGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzKCkKIHsKICAgICByZXR1cm4gZ1Nob3Vs
ZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0cmlidXRlU2V0dGVyczsKIH0KIAotdm9pZCBTZXR0aW5n
czo6c2V0SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQoYm9vbCBmbGFnKQordm9p
ZCBTZXR0aW5nc0Jhc2U6OnNldEhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVkKGJv
b2wgZmxhZykKIHsKICAgICBpZiAobV9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxl
ZCA9PSBmbGFnKQogICAgICAgICByZXR1cm47CkBAIC03MTMsNyArNjIyLDcgQEAgdm9pZCBTZXR0
aW5nczo6c2V0SGlkZGVuUGFnZURPTVRpbWVyVGhybwogICAgICAgICBtX3BhZ2UtPmhpZGRlblBh
Z2VET01UaW1lclRocm90dGxpbmdTdGF0ZUNoYW5nZWQoKTsKIH0KIAotdm9pZCBTZXR0aW5nczo6
c2V0SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0F1dG9JbmNyZWFzZXMoYm9vbCBmbGFnKQor
dm9pZCBTZXR0aW5nc0Jhc2U6OnNldEhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5j
cmVhc2VzKGJvb2wgZmxhZykKIHsKICAgICBpZiAobV9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRs
aW5nQXV0b0luY3JlYXNlcyA9PSBmbGFnKQogICAgICAgICByZXR1cm47CkBAIC03MjIsNyArNjMx
LDcgQEAgdm9pZCBTZXR0aW5nczo6c2V0SGlkZGVuUGFnZURPTVRpbWVyVGhybwogICAgICAgICBt
X3BhZ2UtPmhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdTdGF0ZUNoYW5nZWQoKTsKIH0KIAot
dm9pZCBTZXR0aW5nczo6c2V0SGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVk
KGJvb2wgZmxhZykKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRIaWRkZW5QYWdlQ1NTQW5pbWF0aW9u
U3VzcGVuc2lvbkVuYWJsZWQoYm9vbCBmbGFnKQogewogICAgIGlmIChtX2hpZGRlblBhZ2VDU1NB
bmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCA9PSBmbGFnKQogICAgICAgICByZXR1cm47CkBAIC03
MzEsNyArNjQwLDcgQEAgdm9pZCBTZXR0aW5nczo6c2V0SGlkZGVuUGFnZUNTU0FuaW1hdGlvbgog
ICAgICAgICBtX3BhZ2UtPmhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uU3RhdGVDaGFu
Z2VkKCk7CiB9CiAKLXZvaWQgU2V0dGluZ3M6OnNldEZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dy
YXBocyhib29sIHByZWZlclBpY3RvZ3JhcGhzKQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldEZvbnRG
YWxsYmFja1ByZWZlcnNQaWN0b2dyYXBocyhib29sIHByZWZlclBpY3RvZ3JhcGhzKQogewogICAg
IGlmIChtX2ZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXBocyA9PSBwcmVmZXJQaWN0b2dyYXBo
cykKICAgICAgICAgcmV0dXJuOwpAQCAtNzQxLDMzICs2NTAsMzMgQEAgdm9pZCBTZXR0aW5nczo6
c2V0Rm9udEZhbGxiYWNrUHJlZmVyc1BpYwogICAgICAgICBtX3BhZ2UtPnNldE5lZWRzUmVjYWxj
U3R5bGVJbkFsbEZyYW1lcygpOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRMb3dQb3dlclZpZGVv
QXVkaW9CdWZmZXJTaXplRW5hYmxlZChib29sIGZsYWcpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0
TG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQoYm9vbCBmbGFnKQogewogICAgIGdM
b3dQb3dlclZpZGVvQXVkaW9CdWZmZXJTaXplRW5hYmxlZCA9IGZsYWc7CiB9CiAKLXZvaWQgU2V0
dGluZ3M6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZmxhZykKK3ZvaWQg
U2V0dGluZ3NCYXNlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sIGZsYWcp
CiB7CiAgICAgZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkRW5hYmxlZCA9IGZsYWc7CiB9
CiAKICNpZiBQTEFURk9STShJT1MpCi12b2lkIFNldHRpbmdzOjpzZXRBdWRpb1Nlc3Npb25DYXRl
Z29yeU92ZXJyaWRlKHVuc2lnbmVkIHNlc3Npb25DYXRlZ29yeSkKK3ZvaWQgU2V0dGluZ3NCYXNl
OjpzZXRBdWRpb1Nlc3Npb25DYXRlZ29yeU92ZXJyaWRlKHVuc2lnbmVkIHNlc3Npb25DYXRlZ29y
eSkKIHsKICAgICBBdWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24oKS5zZXRDYXRlZ29yeU92ZXJy
aWRlKHN0YXRpY19jYXN0PEF1ZGlvU2Vzc2lvbjo6Q2F0ZWdvcnlUeXBlPihzZXNzaW9uQ2F0ZWdv
cnkpKTsKIH0KIAotdW5zaWduZWQgU2V0dGluZ3M6OmF1ZGlvU2Vzc2lvbkNhdGVnb3J5T3ZlcnJp
ZGUoKQordW5zaWduZWQgU2V0dGluZ3NCYXNlOjphdWRpb1Nlc3Npb25DYXRlZ29yeU92ZXJyaWRl
KCkKIHsKICAgICByZXR1cm4gQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuY2F0ZWdvcnlP
dmVycmlkZSgpOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXROZXR3b3JrRGF0YVVzYWdlVHJhY2tp
bmdFbmFibGVkKGJvb2wgdHJhY2tpbmdFbmFibGVkKQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldE5l
dHdvcmtEYXRhVXNhZ2VUcmFja2luZ0VuYWJsZWQoYm9vbCB0cmFja2luZ0VuYWJsZWQpCiB7CiAg
ICAgZ05ldHdvcmtEYXRhVXNhZ2VUcmFja2luZ0VuYWJsZWQgPSB0cmFja2luZ0VuYWJsZWQ7CiB9
CiAKLWJvb2wgU2V0dGluZ3M6Om5ldHdvcmtEYXRhVXNhZ2VUcmFja2luZ0VuYWJsZWQoKQorYm9v
bCBTZXR0aW5nc0Jhc2U6Om5ldHdvcmtEYXRhVXNhZ2VUcmFja2luZ0VuYWJsZWQoKQogewogICAg
IHJldHVybiBnTmV0d29ya0RhdGFVc2FnZVRyYWNraW5nRW5hYmxlZDsKIH0KQEAgLTc3OCwxOCAr
Njg3LDE4IEBAIHN0YXRpYyBTdHJpbmcmIHNoYXJlZE5ldHdvcmtJbnRlcmZhY2VOYW0KICAgICBy
ZXR1cm4gbmV0d29ya0ludGVyZmFjZU5hbWU7CiB9CiAKLXZvaWQgU2V0dGluZ3M6OnNldE5ldHdv
cmtJbnRlcmZhY2VOYW1lKGNvbnN0IFN0cmluZyYgbmV0d29ya0ludGVyZmFjZU5hbWUpCit2b2lk
IFNldHRpbmdzQmFzZTo6c2V0TmV0d29ya0ludGVyZmFjZU5hbWUoY29uc3QgU3RyaW5nJiBuZXR3
b3JrSW50ZXJmYWNlTmFtZSkKIHsKICAgICBzaGFyZWROZXR3b3JrSW50ZXJmYWNlTmFtZUdsb2Jh
bCgpID0gbmV0d29ya0ludGVyZmFjZU5hbWU7CiB9CiAKLWNvbnN0IFN0cmluZyYgU2V0dGluZ3M6
Om5ldHdvcmtJbnRlcmZhY2VOYW1lKCkKK2NvbnN0IFN0cmluZyYgU2V0dGluZ3NCYXNlOjpuZXR3
b3JrSW50ZXJmYWNlTmFtZSgpCiB7CiAgICAgcmV0dXJuIHNoYXJlZE5ldHdvcmtJbnRlcmZhY2VO
YW1lR2xvYmFsKCk7CiB9CiAjZW5kaWYKIAotYm9vbCBTZXR0aW5nczo6Z2xvYmFsQ29uc3RSZWRl
Y2xhcmF0aW9uU2hvdWxkVGhyb3coKQorYm9vbCBTZXR0aW5nc0Jhc2U6Omdsb2JhbENvbnN0UmVk
ZWNsYXJhdGlvblNob3VsZFRocm93KCkKIHsKICNpZiBQTEFURk9STShNQUMpCiAgICAgcmV0dXJu
ICFNYWNBcHBsaWNhdGlvbjo6aXNJQm9va3MoKTsKQEAgLTgwMCwzNCArNzA5LDMzIEBAIGJvb2wg
U2V0dGluZ3M6Omdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblMKICNlbmRpZgogfQogCi12b2lkIFNl
dHRpbmdzOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZShib29sIGFsbG93QW55U1NMQ2VydGlm
aWNhdGUpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoYm9v
bCBhbGxvd0FueVNTTENlcnRpZmljYXRlKQogewogICAgIGdBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZSA9IGFsbG93QW55U1NMQ2VydGlmaWNhdGU7CiB9CiAKLWJvb2wgU2V0dGluZ3M6OmFsbG93c0Fu
eVNTTENlcnRpZmljYXRlKCkKK2Jvb2wgU2V0dGluZ3NCYXNlOjphbGxvd3NBbnlTU0xDZXJ0aWZp
Y2F0ZSgpCiB7CiAgICAgcmV0dXJuIGdBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZTsKIH0KIAogI2lm
ICFQTEFURk9STShDT0NPQSkKLWNvbnN0IFN0cmluZyYgU2V0dGluZ3M6OmRlZmF1bHRNZWRpYUNv
bnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydCgpCitjb25zdCBTdHJpbmcmIFNldHRp
bmdzQmFzZTo6ZGVmYXVsdE1lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0
KCkKIHsKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KICNlbmRpZgogCi12b2lkIFNldHRp
bmdzOjpzZXRNZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydChjb25zdCBT
dHJpbmcmIGNvbnRlbnRUeXBlcykKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRNZWRpYUNvbnRlbnRU
eXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydChjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlcykK
IHsKICAgICBtX21lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0LnNocmlu
aygwKTsKICAgICBmb3IgKGF1dG8gdHlwZSA6IFN0cmluZ1ZpZXcoY29udGVudFR5cGVzKS5zcGxp
dCgnOicpKQogICAgICAgICBtX21lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBw
b3J0LmFwcGVuZChDb250ZW50VHlwZSB7IHR5cGUudG9TdHJpbmcoKSB9KTsKIH0KIAotdm9pZCBT
ZXR0aW5nczo6c2V0TWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQoY29u
c3QgVmVjdG9yPENvbnRlbnRUeXBlPiYgY29udGVudFR5cGVzKQordm9pZCBTZXR0aW5nc0Jhc2U6
OnNldE1lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KGNvbnN0IFZlY3Rv
cjxDb250ZW50VHlwZT4mIGNvbnRlbnRUeXBlcykKIHsKICAgICBtX21lZGlhQ29udGVudFR5cGVz
UmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0ID0gY29udGVudFR5cGVzOwogfQogCi0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuaAkocmV2aXNp
b24gMjIzMzI4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmg6MjIzMzI4KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAoQykgMjAwNiBHcmFoYW0gRGVubmlz
IChncmFoYW0uZGVubmlzQGdtYWlsLmNvbSkKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2xpcGJvYXJkQWNjZXNz
UG9saWN5LmgiCisjaW5jbHVkZSAiQ29udGVudFR5cGUuaCIKKyNpbmNsdWRlICJFZGl0aW5nQmVo
YXZpb3JUeXBlcy5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbi5oIgorI2luY2x1ZGUgIlNldHRpbmdzTWFjcm9zLmgiCisjaW5jbHVkZSAiVGV4dEZsYWdz
LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlICJXcml0
aW5nTW9kZS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvUnVudGltZUZsYWdzLmg+CisjaW5jbHVkZSA8
dW5pY29kZS91c2NyaXB0Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KKworI2lmIEVOQUJMRShEQVRBX0RF
VEVDVElPTikKKyNpbmNsdWRlICJEYXRhRGV0ZWN0aW9uLmgiCisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBGb250R2VuZXJpY0ZhbWlsaWVzOworY2xhc3MgUGFnZTsKKwor
ZW51bSBFZGl0YWJsZUxpbmtCZWhhdmlvciB7CisgICAgRWRpdGFibGVMaW5rRGVmYXVsdEJlaGF2
aW9yLAorICAgIEVkaXRhYmxlTGlua0Fsd2F5c0xpdmUsCisgICAgRWRpdGFibGVMaW5rT25seUxp
dmVXaXRoU2hpZnRLZXksCisgICAgRWRpdGFibGVMaW5rTGl2ZVdoZW5Ob3RGb2N1c2VkLAorICAg
IEVkaXRhYmxlTGlua05ldmVyTGl2ZQorfTsKKworZW51bSBUZXh0RGlyZWN0aW9uU3VibWVudUlu
Y2x1c2lvbkJlaGF2aW9yIHsKKyAgICBUZXh0RGlyZWN0aW9uU3VibWVudU5ldmVySW5jbHVkZWQs
CisgICAgVGV4dERpcmVjdGlvblN1Ym1lbnVBdXRvbWF0aWNhbGx5SW5jbHVkZWQsCisgICAgVGV4
dERpcmVjdGlvblN1Ym1lbnVBbHdheXNJbmNsdWRlZAorfTsKKworZW51bSBEZWJ1Z092ZXJsYXlS
ZWdpb25GbGFncyB7CisgICAgTm9uRmFzdFNjcm9sbGFibGVSZWdpb24gPSAxIDw8IDAsCisgICAg
V2hlZWxFdmVudEhhbmRsZXJSZWdpb24gPSAxIDw8IDEsCit9OworCitlbnVtIGNsYXNzIFVzZXJJ
bnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3kgeworICAgIENvbnRlbnQsCisgICAgU3lzdGVtCit9Owor
CitlbnVtIFBERkltYWdlQ2FjaGluZ1BvbGljeSB7CisgICAgUERGSW1hZ2VDYWNoaW5nRW5hYmxl
ZCwKKyAgICBQREZJbWFnZUNhY2hpbmdCZWxvd01lbW9yeUxpbWl0LAorICAgIFBERkltYWdlQ2Fj
aGluZ0Rpc2FibGVkLAorICAgIFBERkltYWdlQ2FjaGluZ0NsaXBCb3VuZHNPbmx5LAorI2lmIFBM
QVRGT1JNKElPUykKKyAgICBQREZJbWFnZUNhY2hpbmdEZWZhdWx0ID0gUERGSW1hZ2VDYWNoaW5n
QmVsb3dNZW1vcnlMaW1pdAorI2Vsc2UKKyAgICBQREZJbWFnZUNhY2hpbmdEZWZhdWx0ID0gUERG
SW1hZ2VDYWNoaW5nRW5hYmxlZAorI2VuZGlmCit9OworCitlbnVtIEZyYW1lRmxhdHRlbmluZyB7
CisgICAgRnJhbWVGbGF0dGVuaW5nRGlzYWJsZWQsCisgICAgRnJhbWVGbGF0dGVuaW5nRW5hYmxl
ZEZvck5vbkZ1bGxTY3JlZW5JRnJhbWVzLAorICAgIEZyYW1lRmxhdHRlbmluZ0Z1bGx5RW5hYmxl
ZAorfTsKKwordHlwZWRlZiB1bnNpZ25lZCBEZWJ1Z092ZXJsYXlSZWdpb25zOworCitjbGFzcyBT
ZXR0aW5ncyA6IHB1YmxpYyBSZWZDb3VudGVkPFNldHRpbmdzPiB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoU2V0dGluZ3MpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmPFNldHRpbmdzPiBjcmVhdGUoUGFnZSopOworICAgIH5TZXR0aW5ncygpOwor
CisgICAgdm9pZCBwYWdlRGVzdHJveWVkKCkgeyBtX3BhZ2UgPSBudWxscHRyOyB9CisKKyAgICBl
bnVtIGNsYXNzIEZvbnRMb2FkVGltaW5nT3ZlcnJpZGUgeyBOb25lLCBCbG9jaywgU3dhcCwgRmFp
bHVyZSB9OworCisgICAgZW51bSBjbGFzcyBGb3JjZWRBY2Nlc3NpYmlsaXR5VmFsdWUgeyBTeXN0
ZW0sIE9uLCBPZmYgfTsKKyAgICBzdGF0aWMgY29uc3QgU2V0dGluZ3M6OkZvcmNlZEFjY2Vzc2li
aWxpdHlWYWx1ZSBkZWZhdWx0Rm9yY2VkQ29sb3JzQXJlSW52ZXJ0ZWRBY2Nlc3NpYmlsaXR5VmFs
dWUgPSBGb3JjZWRBY2Nlc3NpYmlsaXR5VmFsdWU6OlN5c3RlbTsKKyAgICBzdGF0aWMgY29uc3Qg
U2V0dGluZ3M6OkZvcmNlZEFjY2Vzc2liaWxpdHlWYWx1ZSBkZWZhdWx0Rm9yY2VkRGlzcGxheUlz
TW9ub2Nocm9tZUFjY2Vzc2liaWxpdHlWYWx1ZSA9IEZvcmNlZEFjY2Vzc2liaWxpdHlWYWx1ZTo6
U3lzdGVtOworICAgIHN0YXRpYyBjb25zdCBTZXR0aW5nczo6Rm9yY2VkQWNjZXNzaWJpbGl0eVZh
bHVlIGRlZmF1bHRGb3JjZWRQcmVmZXJzUmVkdWNlZE1vdGlvbkFjY2Vzc2liaWxpdHlWYWx1ZSA9
IEZvcmNlZEFjY2Vzc2liaWxpdHlWYWx1ZTo6U3lzdGVtOworCisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRTdGFuZGFyZEZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVVNjcmlwdENv
ZGUgPSBVU0NSSVBUX0NPTU1PTik7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQXRvbWljU3Ry
aW5nJiBzdGFuZGFyZEZvbnRGYW1pbHkoVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTikgY29u
c3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpeGVkRm9udEZhbWlseShjb25zdCBB
dG9taWNTdHJpbmcmLCBVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBjb25zdCBBdG9taWNTdHJpbmcmIGZpeGVkRm9udEZhbWlseShVU2NyaXB0Q29kZSA9
IFVTQ1JJUFRfQ09NTU9OKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2Vy
aWZGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFVTY3JpcHRDb2RlID0gVVNDUklQVF9D
T01NT04pOworICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEF0b21pY1N0cmluZyYgc2VyaWZGb250
RmFtaWx5KFVTY3JpcHRDb2RlID0gVVNDUklQVF9DT01NT04pIGNvbnN0OworCisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRTYW5zU2VyaWZGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYs
IFVTY3JpcHRDb2RlID0gVVNDUklQVF9DT01NT04pOworICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0
IEF0b21pY1N0cmluZyYgc2Fuc1NlcmlmRm9udEZhbWlseShVU2NyaXB0Q29kZSA9IFVTQ1JJUFRf
Q09NTU9OKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q3Vyc2l2ZUZvbnRG
YW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTik7
CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQXRvbWljU3RyaW5nJiBjdXJzaXZlRm9udEZhbWls
eShVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0RmFudGFzeUZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVVNjcmlw
dENvZGUgPSBVU0NSSVBUX0NPTU1PTik7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQXRvbWlj
U3RyaW5nJiBmYW50YXN5Rm9udEZhbWlseShVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKSBj
b25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UGljdG9ncmFwaEZvbnRGYW1pbHko
Y29uc3QgQXRvbWljU3RyaW5nJiwgVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTik7CisgICAg
V0VCQ09SRV9FWFBPUlQgY29uc3QgQXRvbWljU3RyaW5nJiBwaWN0b2dyYXBoRm9udEZhbWlseShV
U2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBib29sIGRlZmF1bHRUZXh0QXV0b3NpemluZ0VuYWJsZWQoKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgZmxvYXQgZGVmYXVsdE1pbmltdW1ab29tRm9udFNpemUoKTsKKworICAg
IC8vIE9ubHkgc2V0IGJ5IExheW91dCBUZXN0cy4KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dE1lZGlhVHlwZU92ZXJyaWRlKGNvbnN0IFN0cmluZyYpOworICAgIGNvbnN0IFN0cmluZyYgbWVk
aWFUeXBlT3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBtX21lZGlhVHlwZU92ZXJyaWRlOyB9CisK
KyAgICAvLyBVbmxpa2UgYXJlSW1hZ2VzRW5hYmxlZCwgdGhpcyBvbmx5IHN1cHByZXNzZXMgdGhl
IG5ldHdvcmsgbG9hZCBvZgorICAgIC8vIHRoZSBpbWFnZSBVUkwuICBBIGNhY2hlZCBpbWFnZSB3
aWxsIHN0aWxsIGJlIHJlbmRlcmVkIGlmIHJlcXVlc3RlZC4KKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShib29sKTsKKyAgICBib29sIGxvYWRzSW1h
Z2VzQXV0b21hdGljYWxseSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZHNJbWFnZXNBdXRvbWF0aWNh
bGx5OyB9CisKKyAgICAvLyBDbGllbnRzIHRoYXQgZXhlY3V0ZSBzY3JpcHQgc2hvdWxkIGNhbGwg
U2NyaXB0Q29udHJvbGxlcjo6Y2FuRXhlY3V0ZVNjcmlwdHMoKQorICAgIC8vIGluc3RlYWQgb2Yg
dGhpcyBmdW5jdGlvbi4gU2NyaXB0Q29udHJvbGxlcjo6Y2FuRXhlY3V0ZVNjcmlwdHMoKSBjaGVj
a3MgdGhlCisgICAgLy8gSFRNTCBzYW5kYm94LCBwbHVnLWluIHNhbmRib3hpbmcsIGFuZCBvdGhl
ciBpbXBvcnRhbnQgZGV0YWlscy4KKyAgICBib29sIGlzU2NyaXB0RW5hYmxlZCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNTY3JpcHRFbmFibGVkOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRT
Y3JpcHRFbmFibGVkKGJvb2wpOworCisgICAgU0VUVElOR1NfR0VUVEVSU19BTkRfU0VUVEVSUwor
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRKYXZhRW5hYmxlZChib29sKTsKKyAgICBib29s
IGlzSmF2YUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzSmF2YUVuYWJsZWQ7IH0KKworICAg
IC8vIFRoaXMgc2V0dGluZ3MgaXMgb25seSBjb25zdWx0ZWQgaWYgaXNKYXZhRW5hYmxlZCgpIHJl
dHVybnMgdHJ1ZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEphdmFFbmFibGVkRm9yTG9j
YWxGaWxlcyhib29sKTsKKyAgICBib29sIGlzSmF2YUVuYWJsZWRGb3JMb2NhbEZpbGVzKCkgY29u
c3QgeyByZXR1cm4gbV9pc0phdmFFbmFibGVkRm9yTG9jYWxGaWxlczsgfQorCisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRJbWFnZXNFbmFibGVkKGJvb2wpOworICAgIGJvb2wgYXJlSW1hZ2Vz
RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXJlSW1hZ2VzRW5hYmxlZDsgfQorCisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRQcmVmZXJNSU1FVHlwZUZvckltYWdlcyhib29sKTsKKyAgICBi
b29sIHByZWZlck1JTUVUeXBlRm9ySW1hZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVmZXJNSU1F
VHlwZUZvckltYWdlczsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRQbHVnaW5zRW5h
YmxlZChib29sKTsKKyAgICBib29sIGFyZVBsdWdpbnNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4g
bV9hcmVQbHVnaW5zRW5hYmxlZDsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRETlNQ
cmVmZXRjaGluZ0VuYWJsZWQoYm9vbCk7CisgICAgYm9vbCBkbnNQcmVmZXRjaGluZ0VuYWJsZWQo
KSBjb25zdCB7IHJldHVybiBtX2Ruc1ByZWZldGNoaW5nRW5hYmxlZDsgfQorCisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGNvbnN0IFVSTCYpOworICAg
IGNvbnN0IFVSTCYgdXNlclN0eWxlU2hlZXRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdXNl
clN0eWxlU2hlZXRMb2NhdGlvbjsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXROZWVk
c0Fkb2JlRnJhbWVSZWxvYWRpbmdRdWlyayhib29sKTsKKyAgICBib29sIG5lZWRzQWNyb2JhdEZy
YW1lUmVsb2FkaW5nUXVpcmsoKSBjb25zdCB7IHJldHVybiBtX25lZWRzQWRvYmVGcmFtZVJlbG9h
ZGluZ1F1aXJrOyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1pbmltdW1ET01UaW1l
ckludGVydmFsKFNlY29uZHMpOyAvLyBJbml0aWFsaXplZCB0byBET01UaW1lcjo6ZGVmYXVsdE1p
bmltdW1JbnRlcnZhbCgpLgorICAgIFNlY29uZHMgbWluaW11bURPTVRpbWVySW50ZXJ2YWwoKSBj
b25zdCB7IHJldHVybiBtX21pbmltdW1ET01UaW1lckludGVydmFsOyB9CisKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldExheW91dEludGVydmFsKFNlY29uZHMpOworICAgIFNlY29uZHMgbGF5
b3V0SW50ZXJ2YWwoKSBjb25zdCB7IHJldHVybiBtX2xheW91dEludGVydmFsOyB9CisKKyAgICBi
b29sIGhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVkKCkgY29uc3QgeyByZXR1cm4g
bV9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZDsgfQorICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQoYm9vbCk7Cisg
ICAgYm9vbCBoaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nQXV0b0luY3JlYXNlcygpIGNvbnN0
IHsgcmV0dXJuIG1faGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0F1dG9JbmNyZWFzZXM7IH0K
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdB
dXRvSW5jcmVhc2VzKGJvb2wpOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRVc2VzUGFn
ZUNhY2hlKGJvb2wpOworICAgIGJvb2wgdXNlc1BhZ2VDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dXNlc1BhZ2VDYWNoZTsgfQorICAgICAgICAKKyAgICB2b2lkIHNldEZvbnRSZW5kZXJpbmdNb2Rl
KEZvbnRSZW5kZXJpbmdNb2RlIG1vZGUpOworICAgIEZvbnRSZW5kZXJpbmdNb2RlIGZvbnRSZW5k
ZXJpbmdNb2RlKCkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNob3dUaWxl
ZFNjcm9sbGluZ0luZGljYXRvcihib29sKTsKKyAgICBib29sIHNob3dUaWxlZFNjcm9sbGluZ0lu
ZGljYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2hvd1RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yOyB9
CisKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCisgICAgYm9vbCByZXNvdXJjZVVzYWdlT3Zl
cmxheVZpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJs
ZTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNp
YmxlKGJvb2wpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisgICAgc3RhdGljIHZvaWQg
c2V0U2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnMoYm9vbCk7CisgICAgc3RhdGljIGJvb2wg
c2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnMoKSB7IHJldHVybiBnU2hvdWxkVXNlSGlnaFJl
c29sdXRpb25UaW1lcnM7IH0KKyNlbmRpZgorCisgICAgc3RhdGljIGJvb2wgaXNQb3N0TG9hZENQ
VVVzYWdlTWVhc3VyZW1lbnRFbmFibGVkKCk7CisgICAgc3RhdGljIGJvb2wgaXNQb3N0QmFja2dy
b3VuZGluZ0NQVVVzYWdlTWVhc3VyZW1lbnRFbmFibGVkKCk7CisgICAgc3RhdGljIGJvb2wgaXNQ
ZXJBY3Rpdml0eVN0YXRlQ1BVVXNhZ2VNZWFzdXJlbWVudEVuYWJsZWQoKTsKKworICAgIHN0YXRp
YyBib29sIGlzUG9zdExvYWRNZW1vcnlVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpOworICAgIHN0
YXRpYyBib29sIGlzUG9zdEJhY2tncm91bmRpbmdNZW1vcnlVc2FnZU1lYXN1cmVtZW50RW5hYmxl
ZCgpOworCisgICAgc3RhdGljIGJvb2wgZ2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhy
b3coKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0QmFja2dyb3VuZFNob3VsZEV4dGVu
ZEJleW9uZFBhZ2UoYm9vbCk7CisgICAgYm9vbCBiYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25k
UGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2U7
IH0KKworI2lmIFVTRShBVkZPVU5EQVRJT04pCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZv
aWQgc2V0QVZGb3VuZGF0aW9uRW5hYmxlZChib29sIGZsYWcpOworICAgIHN0YXRpYyBib29sIGlz
QVZGb3VuZGF0aW9uRW5hYmxlZCgpIHsgcmV0dXJuIGdBVkZvdW5kYXRpb25FbmFibGVkOyB9Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0QVZGb3VuZGF0aW9uTlNVUkxTZXNzaW9u
RW5hYmxlZChib29sIGZsYWcpOworICAgIHN0YXRpYyBib29sIGlzQVZGb3VuZGF0aW9uTlNVUkxT
ZXNzaW9uRW5hYmxlZCgpIHsgcmV0dXJuIGdBVkZvdW5kYXRpb25OU1VSTFNlc3Npb25FbmFibGVk
OyB9CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyB2b2lkIHNldFFUS2l0RW5hYmxlZChib29sIGZsYWcpOworICAgIHN0YXRpYyBib29sIGlz
UVRLaXRFbmFibGVkKCkgeyByZXR1cm4gZ1FUS2l0RW5hYmxlZDsgfQorI2Vsc2UKKyAgICBzdGF0
aWMgYm9vbCBpc1FUS2l0RW5hYmxlZCgpIHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKKworI2lm
IFVTRShHU1RSRUFNRVIpCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0R1N0cmVh
bWVyRW5hYmxlZChib29sIGZsYWcpOworICAgIHN0YXRpYyBib29sIGlzR1N0cmVhbWVyRW5hYmxl
ZCgpIHsgcmV0dXJuIGdHU3RyZWFtZXJFbmFibGVkOyB9CisjZW5kaWYKKworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBkZWZhdWx0TWF4aW11bUhUTUxQYXJzZXJET01UcmVlRGVwdGggPSA1MTI7
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRNYXhpbXVtUmVuZGVyVHJlZURlcHRo
ID0gNTEyOworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0TW9ja1Njcm9sbGJh
cnNFbmFibGVkKGJvb2wgZmxhZyk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgbW9j
a1Njcm9sbGJhcnNFbmFibGVkKCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBz
ZXRVc2VzT3ZlcmxheVNjcm9sbGJhcnMoYm9vbCBmbGFnKTsKKyAgICBzdGF0aWMgYm9vbCB1c2Vz
T3ZlcmxheVNjcm9sbGJhcnMoKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNl
dFVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoYm9vbCk7CisgICAgc3RhdGljIGJvb2wgdXNlc01vY2tT
Y3JvbGxBbmltYXRvcigpOworCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICB2b2lkIHNl
dFRvdWNoRXZlbnRFbXVsYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX3RvdWNoRXZlbnRF
bXVsYXRpb25FbmFibGVkID0gZW5hYmxlZDsgfQorICAgIGJvb2wgaXNUb3VjaEV2ZW50RW11bGF0
aW9uRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdG91Y2hFdmVudEVtdWxhdGlvbkVuYWJsZWQ7
IH0KKyNlbmRpZgorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdG9yYWdlQmxvY2tpbmdQ
b2xpY3koU2VjdXJpdHlPcmlnaW46OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSk7CisgICAgU2VjdXJp
dHlPcmlnaW46OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSBzdG9yYWdlQmxvY2tpbmdQb2xpY3koKSBj
b25zdCB7IHJldHVybiBtX3N0b3JhZ2VCbG9ja2luZ1BvbGljeTsgfQorCisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRTY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKGJvb2wpOwor
ICAgIGJvb2wgc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCgpIHsgcmV0dXJuIG1f
c2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZDsgfQorCisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIHZvaWQgc2V0U2hvdWxkUmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0
ZXJzKGJvb2wpOworICAgIHN0YXRpYyBib29sIHNob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0
cmlidXRlU2V0dGVycygpOworCisgICAgdm9pZCBzZXRUaW1lV2l0aG91dE1vdXNlTW92ZW1lbnRC
ZWZvcmVIaWRpbmdDb250cm9scyhTZWNvbmRzIHRpbWUpIHsgbV90aW1lV2l0aG91dE1vdXNlTW92
ZW1lbnRCZWZvcmVIaWRpbmdDb250cm9scyA9IHRpbWU7IH0KKyAgICBTZWNvbmRzIHRpbWVXaXRo
b3V0TW91c2VNb3ZlbWVudEJlZm9yZUhpZGluZ0NvbnRyb2xzKCkgY29uc3QgeyByZXR1cm4gbV90
aW1lV2l0aG91dE1vdXNlTW92ZW1lbnRCZWZvcmVIaWRpbmdDb250cm9sczsgfQorCisgICAgYm9v
bCBoaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoKSBjb25zdCB7IHJldHVy
biBtX2hpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZDsgfQorICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0SGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVk
KGJvb2wpOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGb250RmFsbGJhY2tQcmVmZXJz
UGljdG9ncmFwaHMoYm9vbCk7CisgICAgYm9vbCBmb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFw
aHMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXBoczsgfQor
CisgICAgc3RhdGljIGJvb2wgbG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQoKSB7
IHJldHVybiBnTG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQ7IH0KKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRMb3dQb3dlclZpZGVvQXVkaW9CdWZmZXJTaXplRW5h
YmxlZChib29sKTsKKworICAgIHN0YXRpYyBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKCkgeyByZXR1cm4gZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkRW5hYmxlZDsgfQor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkKGJvb2wpOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyB2b2lkIHNldEF1ZGlvU2Vzc2lvbkNhdGVnb3J5T3ZlcnJpZGUodW5zaWduZWQpOworICAg
IHN0YXRpYyB1bnNpZ25lZCBhdWRpb1Nlc3Npb25DYXRlZ29yeU92ZXJyaWRlKCk7CisKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXROZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFi
bGVkKGJvb2wpOworICAgIHN0YXRpYyBib29sIG5ldHdvcmtEYXRhVXNhZ2VUcmFja2luZ0VuYWJs
ZWQoKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldE5ldHdvcmtJbnRlcmZh
Y2VOYW1lKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIG5ldHdvcmtJ
bnRlcmZhY2VOYW1lKCk7CisKKyNpZiBIQVZFKEFWS0lUKQorICAgIHN0YXRpYyB2b2lkIHNldEFW
S2l0RW5hYmxlZChib29sIGZsYWcpIHsgZ0FWS2l0RW5hYmxlZCA9IGZsYWc7IH0KKyNlbmRpZgor
ICAgIHN0YXRpYyBib29sIGF2S2l0RW5hYmxlZCgpIHsgcmV0dXJuIGdBVktpdEVuYWJsZWQ7IH0K
KworICAgIHN0YXRpYyB2b2lkIHNldFNob3VsZE9wdE91dE9mTmV0d29ya1N0YXRlT2JzZXJ2YXRp
b24oYm9vbCBmbGFnKSB7IGdTaG91bGRPcHRPdXRPZk5ldHdvcmtTdGF0ZU9ic2VydmF0aW9uID0g
ZmxhZzsgfQorICAgIHN0YXRpYyBib29sIHNob3VsZE9wdE91dE9mTmV0d29ya1N0YXRlT2JzZXJ2
YXRpb24oKSB7IHJldHVybiBnU2hvdWxkT3B0T3V0T2ZOZXR3b3JrU3RhdGVPYnNlcnZhdGlvbjsg
fQorI2VuZGlmCisKKyNpZiBVU0UoQVVESU9fU0VTU0lPTikKKyAgICBzdGF0aWMgdm9pZCBzZXRT
aG91bGRNYW5hZ2VBdWRpb1Nlc3Npb25DYXRlZ29yeShib29sIGZsYWcpIHsgZ01hbmFnZUF1ZGlv
U2Vzc2lvbiA9IGZsYWc7IH0KKyAgICBzdGF0aWMgYm9vbCBzaG91bGRNYW5hZ2VBdWRpb1Nlc3Np
b25DYXRlZ29yeSgpIHsgcmV0dXJuIGdNYW5hZ2VBdWRpb1Nlc3Npb247IH0KKyNlbmRpZgorCisg
ICAgc3RhdGljIHZvaWQgc2V0Q3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKGJvb2wgZW5hYmxl
ZCkgeyBnQ3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkID0gZW5hYmxlZDsgfQorICAgIHN0YXRp
YyBib29sIGN1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCgpIHsgcmV0dXJuIGdDdXN0b21QYXN0
ZWJvYXJkRGF0YUVuYWJsZWQ7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBkZWZh
dWx0Q3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKCk7CisKKyNpZiBFTkFCTEUoTEVHQUNZX0VO
Q1JZUFRFRF9NRURJQSkKKyAgICB2b2lkIHNldE1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoY29u
c3QgU3RyaW5nJiBkaXJlY3RvcnkpIHsgbV9tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5ID0gZGly
ZWN0b3J5OyB9CisgICAgY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KCkg
Y29uc3QgeyByZXR1cm4gbV9tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5OyB9CisjZW5kaWYKKyAg
ICAKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIHZvaWQgc2V0TWVkaWFEZXZpY2VJZGVu
dGlmaWVyU3RvcmFnZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSkgeyBtX21lZGlh
RGV2aWNlSWRlbnRpZmllclN0b3JhZ2VEaXJlY3RvcnkgPSBkaXJlY3Rvcnk7IH0KKyAgICBjb25z
dCBTdHJpbmcmIG1lZGlhRGV2aWNlSWRlbnRpZmllclN0b3JhZ2VEaXJlY3RvcnkoKSBjb25zdCB7
IHJldHVybiBtX21lZGlhRGV2aWNlSWRlbnRpZmllclN0b3JhZ2VEaXJlY3Rvcnk7IH0KKworICAg
IHN0YXRpYyBib29sIG1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQoKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgdm9pZCBzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkKGJvb2wpOworCisg
ICAgYm9vbCBtZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oKSBjb25zdDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3Vy
ZUNvbm5lY3Rpb24oYm9vbCk7CisjZW5kaWYKKworI2lmIEVOQUJMRShBUFBMRV9QQVkpCisgICAg
Ym9vbCBhcHBsZVBheUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FwcGxlUGF5RW5hYmxlZDsg
fQorICAgIHZvaWQgc2V0QXBwbGVQYXlFbmFibGVkKGJvb2wgYXBwbGVQYXlFbmFibGVkKSB7IG1f
YXBwbGVQYXlFbmFibGVkID0gYXBwbGVQYXlFbmFibGVkOyB9CisKKyAgICBib29sIGFwcGxlUGF5
Q2FwYWJpbGl0eURpc2Nsb3N1cmVBbGxvd2VkKCkgY29uc3QgeyByZXR1cm4gbV9hcHBsZVBheUNh
cGFiaWxpdHlEaXNjbG9zdXJlQWxsb3dlZDsgfQorICAgIHZvaWQgc2V0QXBwbGVQYXlDYXBhYmls
aXR5RGlzY2xvc3VyZUFsbG93ZWQoYm9vbCBhcHBsZVBheUNhcGFiaWxpdHlEaXNjbG9zdXJlQWxs
b3dlZCkgeyBtX2FwcGxlUGF5Q2FwYWJpbGl0eURpc2Nsb3N1cmVBbGxvd2VkID0gYXBwbGVQYXlD
YXBhYmlsaXR5RGlzY2xvc3VyZUFsbG93ZWQ7IH0KKyNlbmRpZgorCisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRGb3JjZVBlbmRpbmdXZWJHTFBvbGljeShib29sKTsKKyAgICBib29sIGlzRm9y
Y2VQZW5kaW5nV2ViR0xQb2xpY3koKSBjb25zdCB7IHJldHVybiBtX2ZvcmNlUGVuZGluZ1dlYkdM
UG9saWN5OyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCBGcmFtZUZsYXR0ZW5pbmcgZWZmZWN0aXZl
RnJhbWVGbGF0dGVuaW5nKCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRB
bGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZShib29sKTsKKyAgICBzdGF0aWMgYm9vbCBhbGxvd3NBbnlT
U0xDZXJ0aWZpY2F0ZSgpOworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGNvbnN0IFN0cmlu
ZyYgZGVmYXVsdE1lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3
YXJlU3VwcG9ydChjb25zdCBWZWN0b3I8Q29udGVudFR5cGU+Jik7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRNZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydChjb25z
dCBTdHJpbmcmKTsKKyAgICBjb25zdCBWZWN0b3I8Q29udGVudFR5cGU+JiBtZWRpYUNvbnRlbnRU
eXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFDb250
ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQ7IH0KKworcHJpdmF0ZToKKyAgICBleHBs
aWNpdCBTZXR0aW5ncyhQYWdlKik7CisKKyAgICB2b2lkIGluaXRpYWxpemVEZWZhdWx0Rm9udEZh
bWlsaWVzKCk7CisKKyAgICBQYWdlKiBtX3BhZ2U7CisKKyAgICBTdHJpbmcgbV9tZWRpYVR5cGVP
dmVycmlkZTsKKyAgICBVUkwgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uOworICAgIGNvbnN0IHN0
ZDo6dW5pcXVlX3B0cjxGb250R2VuZXJpY0ZhbWlsaWVzPiBtX2ZvbnRHZW5lcmljRmFtaWxpZXM7
CisgICAgU2VjdXJpdHlPcmlnaW46OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSBtX3N0b3JhZ2VCbG9j
a2luZ1BvbGljeTsKKyAgICBTZWNvbmRzIG1fbGF5b3V0SW50ZXJ2YWw7CisgICAgU2Vjb25kcyBt
X21pbmltdW1ET01UaW1lckludGVydmFsOworCisgICAgU0VUVElOR1NfTUVNQkVSX1ZBUklBQkxF
UworCisgICAgYm9vbCBtX2lzSmF2YUVuYWJsZWQgOiAxOworICAgIGJvb2wgbV9pc0phdmFFbmFi
bGVkRm9yTG9jYWxGaWxlcyA6IDE7CisgICAgYm9vbCBtX2xvYWRzSW1hZ2VzQXV0b21hdGljYWxs
eSA6IDE7CisgICAgYm9vbCBtX2FyZUltYWdlc0VuYWJsZWQgOiAxOworICAgIGJvb2wgbV9wcmVm
ZXJNSU1FVHlwZUZvckltYWdlcyA6IDE7CisgICAgYm9vbCBtX2FyZVBsdWdpbnNFbmFibGVkIDog
MTsKKyAgICBib29sIG1faXNTY3JpcHRFbmFibGVkIDogMTsKKyAgICBib29sIG1fbmVlZHNBZG9i
ZUZyYW1lUmVsb2FkaW5nUXVpcmsgOiAxOworICAgIGJvb2wgbV91c2VzUGFnZUNhY2hlIDogMTsK
KyAgICB1bnNpZ25lZCBtX2ZvbnRSZW5kZXJpbmdNb2RlIDogMTsKKyAgICBib29sIG1fc2hvd1Rp
bGVkU2Nyb2xsaW5nSW5kaWNhdG9yIDogMTsKKyAgICBib29sIG1fYmFja2dyb3VuZFNob3VsZEV4
dGVuZEJleW9uZFBhZ2UgOiAxOworICAgIGJvb2wgbV9kbnNQcmVmZXRjaGluZ0VuYWJsZWQgOiAx
OworCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICBib29sIG1fdG91Y2hFdmVudEVtdWxh
dGlvbkVuYWJsZWQgOiAxOworI2VuZGlmCisgICAgYm9vbCBtX3Njcm9sbGluZ1BlcmZvcm1hbmNl
TG9nZ2luZ0VuYWJsZWQgOiAxOworCisgICAgU2Vjb25kcyBtX3RpbWVXaXRob3V0TW91c2VNb3Zl
bWVudEJlZm9yZUhpZGluZ0NvbnRyb2xzOworCisgICAgVGltZXIgbV9zZXRJbWFnZUxvYWRpbmdT
ZXR0aW5nc1RpbWVyOworICAgIHZvaWQgaW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lckZpcmVkKCk7
CisKKyAgICBib29sIG1faGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQgOiAxOwor
ICAgIGJvb2wgbV9oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQgOiAxOwor
ICAgIGJvb2wgbV9mb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMgOiAxOworCisgICAgYm9v
bCBtX2ZvcmNlUGVuZGluZ1dlYkdMUG9saWN5IDogMTsKKworI2lmIEVOQUJMRShSRVNPVVJDRV9V
U0FHRSkKKyAgICBib29sIG1fcmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlIHsgZmFsc2UgfTsK
KyNlbmRpZgorCisgICAgYm9vbCBtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5j
cmVhc2VzIHsgZmFsc2UgfTsKKworI2lmIFVTRShBVkZPVU5EQVRJT04pCisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIGJvb2wgZ0FWRm91bmRhdGlvbkVuYWJsZWQ7CisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIGJvb2wgZ0FWRm91bmRhdGlvbk5TVVJMU2Vzc2lvbkVuYWJsZWQ7CisjZW5kaWYK
KworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGdR
VEtpdEVuYWJsZWQ7CisjZW5kaWYKKworI2lmIFVTRShHU1RSRUFNRVIpCisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIGJvb2wgZ0dTdHJlYW1lckVuYWJsZWQ7CisjZW5kaWYKKworICAgIHN0YXRp
YyBib29sIGdNb2NrU2Nyb2xsYmFyc0VuYWJsZWQ7CisgICAgc3RhdGljIGJvb2wgZ1VzZXNPdmVy
bGF5U2Nyb2xsYmFyczsKKyAgICBzdGF0aWMgYm9vbCBnTW9ja1Njcm9sbEFuaW1hdG9yRW5hYmxl
ZDsKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBzdGF0aWMgYm9vbCBnU2hvdWxkVXNlSGlnaFJl
c29sdXRpb25UaW1lcnM7CisjZW5kaWYKKyAgICBzdGF0aWMgYm9vbCBnU2hvdWxkUmVzcGVjdFBy
aW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBzdGF0
aWMgYm9vbCBnTmV0d29ya0RhdGFVc2FnZVRyYWNraW5nRW5hYmxlZDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgYm9vbCBnQVZLaXRFbmFibGVkOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBib29sIGdTaG91bGRPcHRPdXRPZk5ldHdvcmtTdGF0ZU9ic2VydmF0aW9uOworI2VuZGlmCisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZ01hbmFnZUF1ZGlvU2Vzc2lvbjsKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBnQ3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkOwor
CisjaWYgRU5BQkxFKExFR0FDWV9FTkNSWVBURURfTUVESUEpCisgICAgU3RyaW5nIG1fbWVkaWFL
ZXlzU3RvcmFnZURpcmVjdG9yeTsKKyNlbmRpZgorICAgIAorI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pCisgICAgU3RyaW5nIG1fbWVkaWFEZXZpY2VJZGVudGlmaWVyU3RvcmFnZURpcmVjdG9yeTsK
KyAgICBzdGF0aWMgYm9vbCBnTW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZDsKKyAgICBzdGF0aWMg
Ym9vbCBnTWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uOworI2VuZGlmCisKKyNp
ZiBFTkFCTEUoQVBQTEVfUEFZKQorICAgIGJvb2wgbV9hcHBsZVBheUVuYWJsZWQgeyBmYWxzZSB9
OworICAgIGJvb2wgbV9hcHBsZVBheUNhcGFiaWxpdHlEaXNjbG9zdXJlQWxsb3dlZCB7IHRydWUg
fTsKKyNlbmRpZgorCisgICAgc3RhdGljIGJvb2wgZ0xvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNp
emVFbmFibGVkOworICAgIHN0YXRpYyBib29sIGdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxl
ZEVuYWJsZWQ7CisgICAgc3RhdGljIGJvb2wgZ0FsbG93c0FueVNTTENlcnRpZmljYXRlOworCisg
ICAgVmVjdG9yPENvbnRlbnRUeXBlPiBtX21lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdh
cmVTdXBwb3J0OworfTsKKworaW5saW5lIGJvb2wgU2V0dGluZ3M6OmlzUG9zdExvYWRDUFVVc2Fn
ZU1lYXN1cmVtZW50RW5hYmxlZCgpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcmV0dXJu
IHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitpbmxpbmUgYm9v
bCBTZXR0aW5nczo6aXNQb3N0QmFja2dyb3VuZGluZ0NQVVVzYWdlTWVhc3VyZW1lbnRFbmFibGVk
KCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIHJl
dHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitpbmxpbmUgYm9vbCBTZXR0aW5nczo6aXNQZXJBY3Rp
dml0eVN0YXRlQ1BVVXNhZ2VNZWFzdXJlbWVudEVuYWJsZWQoKQoreworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9
CisKK2lubGluZSBib29sIFNldHRpbmdzOjppc1Bvc3RMb2FkTWVtb3J5VXNhZ2VNZWFzdXJlbWVu
dEVuYWJsZWQoKQoreworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHJldHVybiB0cnVlOworI2Vs
c2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworaW5saW5lIGJvb2wgU2V0dGluZ3M6
OmlzUG9zdEJhY2tncm91bmRpbmdNZW1vcnlVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpCit7Cisj
aWYgUExBVEZPUk0oTUFDKQorICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2
bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuaAkocmV2aXNpb24gMjIz
MzI4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtOTYsMjAgKzk2LDE3IEBAIGVudW0gRnJhbWVGbGF0dGVuaW5nIHsKIAogdHlwZWRlZiB1
bnNpZ25lZCBEZWJ1Z092ZXJsYXlSZWdpb25zOwogCi1jbGFzcyBTZXR0aW5ncyA6IHB1YmxpYyBS
ZWZDb3VudGVkPFNldHRpbmdzPiB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2V0dGluZ3Mp
OyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK2NsYXNzIFNldHRpbmdzQmFzZSB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoU2V0dGluZ3NCYXNlKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTZXR0aW5ncz4gY3JlYXRlKFBhZ2UqKTsKLSAgICB+
U2V0dGluZ3MoKTsKLQotICAgIHZvaWQgcGFnZURlc3Ryb3llZCgpIHsgbV9wYWdlID0gbnVsbHB0
cjsgfQorICAgIH5TZXR0aW5nc0Jhc2UoKTsKIAogICAgIGVudW0gY2xhc3MgRm9udExvYWRUaW1p
bmdPdmVycmlkZSB7IE5vbmUsIEJsb2NrLCBTd2FwLCBGYWlsdXJlIH07CiAKICAgICBlbnVtIGNs
YXNzIEZvcmNlZEFjY2Vzc2liaWxpdHlWYWx1ZSB7IFN5c3RlbSwgT24sIE9mZiB9OwotICAgIHN0
YXRpYyBjb25zdCBTZXR0aW5nczo6Rm9yY2VkQWNjZXNzaWJpbGl0eVZhbHVlIGRlZmF1bHRGb3Jj
ZWRDb2xvcnNBcmVJbnZlcnRlZEFjY2Vzc2liaWxpdHlWYWx1ZSA9IEZvcmNlZEFjY2Vzc2liaWxp
dHlWYWx1ZTo6U3lzdGVtOwotICAgIHN0YXRpYyBjb25zdCBTZXR0aW5nczo6Rm9yY2VkQWNjZXNz
aWJpbGl0eVZhbHVlIGRlZmF1bHRGb3JjZWREaXNwbGF5SXNNb25vY2hyb21lQWNjZXNzaWJpbGl0
eVZhbHVlID0gRm9yY2VkQWNjZXNzaWJpbGl0eVZhbHVlOjpTeXN0ZW07Ci0gICAgc3RhdGljIGNv
bnN0IFNldHRpbmdzOjpGb3JjZWRBY2Nlc3NpYmlsaXR5VmFsdWUgZGVmYXVsdEZvcmNlZFByZWZl
cnNSZWR1Y2VkTW90aW9uQWNjZXNzaWJpbGl0eVZhbHVlID0gRm9yY2VkQWNjZXNzaWJpbGl0eVZh
bHVlOjpTeXN0ZW07CisgICAgc3RhdGljIGNvbnN0IFNldHRpbmdzQmFzZTo6Rm9yY2VkQWNjZXNz
aWJpbGl0eVZhbHVlIGRlZmF1bHRGb3JjZWRDb2xvcnNBcmVJbnZlcnRlZEFjY2Vzc2liaWxpdHlW
YWx1ZSA9IEZvcmNlZEFjY2Vzc2liaWxpdHlWYWx1ZTo6U3lzdGVtOworICAgIHN0YXRpYyBjb25z
dCBTZXR0aW5nc0Jhc2U6OkZvcmNlZEFjY2Vzc2liaWxpdHlWYWx1ZSBkZWZhdWx0Rm9yY2VkRGlz
cGxheUlzTW9ub2Nocm9tZUFjY2Vzc2liaWxpdHlWYWx1ZSA9IEZvcmNlZEFjY2Vzc2liaWxpdHlW
YWx1ZTo6U3lzdGVtOworICAgIHN0YXRpYyBjb25zdCBTZXR0aW5nc0Jhc2U6OkZvcmNlZEFjY2Vz
c2liaWxpdHlWYWx1ZSBkZWZhdWx0Rm9yY2VkUHJlZmVyc1JlZHVjZWRNb3Rpb25BY2Nlc3NpYmls
aXR5VmFsdWUgPSBGb3JjZWRBY2Nlc3NpYmlsaXR5VmFsdWU6OlN5c3RlbTsKIAogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0U3RhbmRhcmRGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYs
IFVTY3JpcHRDb2RlID0gVVNDUklQVF9DT01NT04pOwogICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0
IEF0b21pY1N0cmluZyYgc3RhbmRhcmRGb250RmFtaWx5KFVTY3JpcHRDb2RlID0gVVNDUklQVF9D
T01NT04pIGNvbnN0OwpAQCAtMTUwLDcgKzE0Nyw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzU2Ny
aXB0RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTY3JpcHRFbmFibGVkOyB9CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRTY3JpcHRFbmFibGVkKGJvb2wpOwogCi0gICAgU0VUVElOR1Nf
R0VUVEVSU19BTkRfU0VUVEVSUwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRKYXZhRW5h
YmxlZChib29sKTsKICAgICBib29sIGlzSmF2YUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lz
SmF2YUVuYWJsZWQ7IH0KQEAgLTMzNCw4ICszMzAsNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRGb3JjZVBlbmRpbmdXZWJHTFBvbGljeShib29sKTsKICAgICBib29sIGlz
Rm9yY2VQZW5kaW5nV2ViR0xQb2xpY3koKSBjb25zdCB7IHJldHVybiBtX2ZvcmNlUGVuZGluZ1dl
YkdMUG9saWN5OyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBGcmFtZUZsYXR0ZW5pbmcgZWZmZWN0
aXZlRnJhbWVGbGF0dGVuaW5nKCk7Ci0KICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBz
ZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZShib29sKTsKICAgICBzdGF0aWMgYm9vbCBhbGxvd3NB
bnlTU0xDZXJ0aWZpY2F0ZSgpOwogCkBAIC0zNDQsMjIgKzMzOCwyMCBAQCBwdWJsaWM6CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJl
U3VwcG9ydChjb25zdCBTdHJpbmcmKTsKICAgICBjb25zdCBWZWN0b3I8Q29udGVudFR5cGU+JiBt
ZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydCgpIGNvbnN0IHsgcmV0dXJu
IG1fbWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQ7IH0KIAotcHJpdmF0
ZToKLSAgICBleHBsaWNpdCBTZXR0aW5ncyhQYWdlKik7Citwcm90ZWN0ZWQ6CisgICAgZXhwbGlj
aXQgU2V0dGluZ3NCYXNlKFBhZ2UqKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRGb250
RmFtaWxpZXMoKTsKIAogICAgIFBhZ2UqIG1fcGFnZTsKIAotICAgIFN0cmluZyBtX21lZGlhVHlw
ZU92ZXJyaWRlOworICAgIFN0cmluZyBtX21lZGlhVHlwZU92ZXJyaWRlIHsgInNjcmVlbiIgfTsK
ICAgICBVUkwgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uOwogICAgIGNvbnN0IHN0ZDo6dW5pcXVl
X3B0cjxGb250R2VuZXJpY0ZhbWlsaWVzPiBtX2ZvbnRHZW5lcmljRmFtaWxpZXM7Ci0gICAgU2Vj
dXJpdHlPcmlnaW46OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSBtX3N0b3JhZ2VCbG9ja2luZ1BvbGlj
eTsKKyAgICBTZWN1cml0eU9yaWdpbjo6U3RvcmFnZUJsb2NraW5nUG9saWN5IG1fc3RvcmFnZUJs
b2NraW5nUG9saWN5IHsgU2VjdXJpdHlPcmlnaW46OkFsbG93QWxsU3RvcmFnZSB9OwogICAgIFNl
Y29uZHMgbV9sYXlvdXRJbnRlcnZhbDsKICAgICBTZWNvbmRzIG1fbWluaW11bURPTVRpbWVySW50
ZXJ2YWw7CiAKLSAgICBTRVRUSU5HU19NRU1CRVJfVkFSSUFCTEVTCi0KICAgICBib29sIG1faXNK
YXZhRW5hYmxlZCA6IDE7CiAgICAgYm9vbCBtX2lzSmF2YUVuYWJsZWRGb3JMb2NhbEZpbGVzIDog
MTsKICAgICBib29sIG1fbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5IDogMTsKQEAgLTM3OSw3ICsz
NzEsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgYm9vbCBtX3Njcm9sbGluZ1BlcmZvcm1hbmNl
TG9nZ2luZ0VuYWJsZWQgOiAxOwogCi0gICAgU2Vjb25kcyBtX3RpbWVXaXRob3V0TW91c2VNb3Zl
bWVudEJlZm9yZUhpZGluZ0NvbnRyb2xzOworICAgIFNlY29uZHMgbV90aW1lV2l0aG91dE1vdXNl
TW92ZW1lbnRCZWZvcmVIaWRpbmdDb250cm9scyB7IDNfcyB9OwogCiAgICAgVGltZXIgbV9zZXRJ
bWFnZUxvYWRpbmdTZXR0aW5nc1RpbWVyOwogICAgIHZvaWQgaW1hZ2VMb2FkaW5nU2V0dGluZ3NU
aW1lckZpcmVkKCk7CkBAIC00NDcsNyArNDM5LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8Q29u
dGVudFR5cGU+IG1fbWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQ7CiB9
OwogCi1pbmxpbmUgYm9vbCBTZXR0aW5nczo6aXNQb3N0TG9hZENQVVVzYWdlTWVhc3VyZW1lbnRF
bmFibGVkKCkKK2lubGluZSBib29sIFNldHRpbmdzQmFzZTo6aXNQb3N0TG9hZENQVVVzYWdlTWVh
c3VyZW1lbnRFbmFibGVkKCkKIHsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTQ1Niw3ICs0NDgsNyBAQCBpbmxpbmUgYm9vbCBTZXR0aW5nczo6aXNQb3N0TG9hZENQ
VVVzYWdlCiAjZW5kaWYKIH0KIAotaW5saW5lIGJvb2wgU2V0dGluZ3M6OmlzUG9zdEJhY2tncm91
bmRpbmdDUFVVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpCitpbmxpbmUgYm9vbCBTZXR0aW5nc0Jh
c2U6OmlzUG9zdEJhY2tncm91bmRpbmdDUFVVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpCiB7CiAj
aWYgUExBVEZPUk0oTUFDKQogICAgIHJldHVybiB0cnVlOwpAQCAtNDY1LDcgKzQ1Nyw3IEBAIGlu
bGluZSBib29sIFNldHRpbmdzOjppc1Bvc3RCYWNrZ3JvdW5kaW4KICNlbmRpZgogfQogCi1pbmxp
bmUgYm9vbCBTZXR0aW5nczo6aXNQZXJBY3Rpdml0eVN0YXRlQ1BVVXNhZ2VNZWFzdXJlbWVudEVu
YWJsZWQoKQoraW5saW5lIGJvb2wgU2V0dGluZ3NCYXNlOjppc1BlckFjdGl2aXR5U3RhdGVDUFVV
c2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHJldHVy
biB0cnVlOwpAQCAtNDc0LDcgKzQ2Niw3IEBAIGlubGluZSBib29sIFNldHRpbmdzOjppc1BlckFj
dGl2aXR5U3RhdGUKICNlbmRpZgogfQogCi1pbmxpbmUgYm9vbCBTZXR0aW5nczo6aXNQb3N0TG9h
ZE1lbW9yeVVzYWdlTWVhc3VyZW1lbnRFbmFibGVkKCkKK2lubGluZSBib29sIFNldHRpbmdzQmFz
ZTo6aXNQb3N0TG9hZE1lbW9yeVVzYWdlTWVhc3VyZW1lbnRFbmFibGVkKCkKIHsKICNpZiBQTEFU
Rk9STShDT0NPQSkKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ4Myw3ICs0NzUsNyBAQCBpbmxpbmUg
Ym9vbCBTZXR0aW5nczo6aXNQb3N0TG9hZE1lbW9yeVVzCiAjZW5kaWYKIH0KIAotaW5saW5lIGJv
b2wgU2V0dGluZ3M6OmlzUG9zdEJhY2tncm91bmRpbmdNZW1vcnlVc2FnZU1lYXN1cmVtZW50RW5h
YmxlZCgpCitpbmxpbmUgYm9vbCBTZXR0aW5nc0Jhc2U6OmlzUG9zdEJhY2tncm91bmRpbmdNZW1v
cnlVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHJl
dHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9TZXR0aW5nc0Jhc2VD
b2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1NldHRpbmdz
QmFzZUNvY29hLm1tCShyZXZpc2lvbiAyMjMzMjgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
Y29jb2EvU2V0dGluZ3NDb2NvYS5tbToyMjMzMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2Nv
Y29hL1NldHRpbmdzQmFzZUNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgi
CisKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworI2lmIFBMQVRGT1JNKElPUykK
KyNpbmNsdWRlICJEZXZpY2UuaCIKKyNpbmNsdWRlIDxwYWwvc3BpL2lvcy9VSUtpdFNQSS5oPgor
I2luY2x1ZGUgPHd0Zi9Tb2Z0TGlua2luZy5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1Mp
CitTT0ZUX0xJTktfRlJBTUVXT1JLKFVJS2l0KQorU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSUFw
cGxpY2F0aW9uKQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGlu
ZSBjb25zdCBjaGFyKiBzYW5zU2VyaWZUcmFkaXRpb25hbEhhbkZvbnRGYW1pbHkoKQoreworICAg
IHJldHVybiAiUGluZ0ZhbmcgVEMiOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIHNh
bnNTZXJpZlNpbXBsaWZpZWRIYW5Gb250RmFtaWx5KCkKK3sKKyAgICByZXR1cm4gIlBpbmdGYW5n
IFNDIjsKK30KKworI2lmIFBMQVRGT1JNKE1BQykKKworc3RhdGljIGJvb2wgb3Nha2FNb25vSXNJ
bnN0YWxsZWQoKQoreworICAgIGludCBvbmUgPSAxOworICAgIFJldGFpblB0cjxDRk51bWJlclJl
Zj4geWVzID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZO
dW1iZXJJbnRUeXBlLCAmb25lKSk7CisgICAgQ0ZUeXBlUmVmIGtleXNbXSA9IHsga0NURm9udEVu
YWJsZWRBdHRyaWJ1dGUsIGtDVEZvbnROYW1lQXR0cmlidXRlIH07CisgICAgQ0ZUeXBlUmVmIHZh
bHVlc1tdID0geyB5ZXMuZ2V0KCksIENGU1RSKCJPc2FrYS1Nb25vIikgfTsKKyAgICBSZXRhaW5Q
dHI8Q0ZEaWN0aW9uYXJ5UmVmPiBhdHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVh
dGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKHZh
bHVlcyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5
VmFsdWVDYWxsQmFja3MpKTsKKyAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZGVz
Y3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhBdHRyaWJ1dGVzKGF0
dHJpYnV0ZXMuZ2V0KCkpKTsKKyAgICBSZXRhaW5QdHI8Q0ZTZXRSZWY+IG1hbmRhdG9yeUF0dHJp
YnV0ZXMgPSBhZG9wdENGKENGU2V0Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtleXMsIFdU
Rl9BUlJBWV9MRU5HVEgoa2V5cyksICZrQ0ZUeXBlU2V0Q2FsbEJhY2tzKSk7CisgICAgcmV0dXJu
IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZU1hdGNoaW5nRm9udERlc2NyaXB0b3IoZGVz
Y3JpcHRvci5nZXQoKSwgbWFuZGF0b3J5QXR0cmlidXRlcy5nZXQoKSkpOworfQorCit2b2lkIFNl
dHRpbmdzOjppbml0aWFsaXplRGVmYXVsdEZvbnRGYW1pbGllcygpCit7CisgICAgc2V0U3RhbmRh
cmRGb250RmFtaWx5KCJTb25ndGkgVEMiLCBVU0NSSVBUX1RSQURJVElPTkFMX0hBTik7CisgICAg
c2V0U2VyaWZGb250RmFtaWx5KCJTb25ndGkgVEMiLCBVU0NSSVBUX1RSQURJVElPTkFMX0hBTik7
CisgICAgc2V0Rml4ZWRGb250RmFtaWx5KHNhbnNTZXJpZlRyYWRpdGlvbmFsSGFuRm9udEZhbWls
eSgpLCBVU0NSSVBUX1RSQURJVElPTkFMX0hBTik7CisgICAgc2V0U2Fuc1NlcmlmRm9udEZhbWls
eShzYW5zU2VyaWZUcmFkaXRpb25hbEhhbkZvbnRGYW1pbHkoKSwgVVNDUklQVF9UUkFESVRJT05B
TF9IQU4pOworICAgIHNldEN1cnNpdmVGb250RmFtaWx5KCJLYWl0aSBUQyIsIFVTQ1JJUFRfVFJB
RElUSU9OQUxfSEFOKTsKKworICAgIHNldFN0YW5kYXJkRm9udEZhbWlseSgiU29uZ3RpIFNDIiwg
VVNDUklQVF9TSU1QTElGSUVEX0hBTik7CisgICAgc2V0U2VyaWZGb250RmFtaWx5KCJTb25ndGkg
U0MiLCBVU0NSSVBUX1NJTVBMSUZJRURfSEFOKTsKKyAgICBzZXRGaXhlZEZvbnRGYW1pbHkoc2Fu
c1NlcmlmU2ltcGxpZmllZEhhbkZvbnRGYW1pbHkoKSwgVVNDUklQVF9TSU1QTElGSUVEX0hBTik7
CisgICAgc2V0U2Fuc1NlcmlmRm9udEZhbWlseShzYW5zU2VyaWZTaW1wbGlmaWVkSGFuRm9udEZh
bWlseSgpLCBVU0NSSVBUX1NJTVBMSUZJRURfSEFOKTsKKyAgICBzZXRDdXJzaXZlRm9udEZhbWls
eSgiS2FpdGkgU0MiLCBVU0NSSVBUX1NJTVBMSUZJRURfSEFOKTsKKworICAgIHNldFN0YW5kYXJk
Rm9udEZhbWlseSgiSGlyYWdpbm8gTWluY2hvIFByb04iLCBVU0NSSVBUX0tBVEFLQU5BX09SX0hJ
UkFHQU5BKTsKKyAgICBzZXRGaXhlZEZvbnRGYW1pbHkob3Nha2FNb25vSXNJbnN0YWxsZWQoKSA/
ICJPc2FrYS1Nb25vIiA6ICJIaXJhZ2lubyBTYW5zIiwgVVNDUklQVF9LQVRBS0FOQV9PUl9ISVJB
R0FOQSk7CisgICAgc2V0U2VyaWZGb250RmFtaWx5KCJIaXJhZ2lubyBNaW5jaG8gUHJvTiIsIFVT
Q1JJUFRfS0FUQUtBTkFfT1JfSElSQUdBTkEpOworICAgIHNldFNhbnNTZXJpZkZvbnRGYW1pbHko
IkhpcmFnaW5vIEtha3UgR290aGljIFByb04iLCBVU0NSSVBUX0tBVEFLQU5BX09SX0hJUkFHQU5B
KTsKKworICAgIHNldFN0YW5kYXJkRm9udEZhbWlseSgiQXBwbGVNeXVuZ2pvIiwgVVNDUklQVF9I
QU5HVUwpOworICAgIHNldFNlcmlmRm9udEZhbWlseSgiQXBwbGVNeXVuZ2pvIiwgVVNDUklQVF9I
QU5HVUwpOworICAgIHNldEZpeGVkRm9udEZhbWlseSgiQXBwbGUgU0QgR290aGljIE5lbyIsIFVT
Q1JJUFRfSEFOR1VMKTsKKyAgICBzZXRTYW5zU2VyaWZGb250RmFtaWx5KCJBcHBsZSBTRCBHb3Ro
aWMgTmVvIiwgVVNDUklQVF9IQU5HVUwpOworCisgICAgc2V0U3RhbmRhcmRGb250RmFtaWx5KCJU
aW1lcyIsIFVTQ1JJUFRfQ09NTU9OKTsKKyAgICBzZXRGaXhlZEZvbnRGYW1pbHkoIkNvdXJpZXIi
LCBVU0NSSVBUX0NPTU1PTik7CisgICAgc2V0U2VyaWZGb250RmFtaWx5KCJUaW1lcyIsIFVTQ1JJ
UFRfQ09NTU9OKTsKKyAgICBzZXRTYW5zU2VyaWZGb250RmFtaWx5KCJIZWx2ZXRpY2EiLCBVU0NS
SVBUX0NPTU1PTik7Cit9CisKKyNlbHNlCisKK3ZvaWQgU2V0dGluZ3M6OmluaXRpYWxpemVEZWZh
dWx0Rm9udEZhbWlsaWVzKCkKK3sKKyAgICAvLyBUaGVyZSBpcyBubyBzZXJpZiBDaGluZXNlIGZv
bnQgaW4gZGVmYXVsdCBpT1MgaW5zdGFsbGF0aW9uLgorICAgIHNldFN0YW5kYXJkRm9udEZhbWls
eShzYW5zU2VyaWZUcmFkaXRpb25hbEhhbkZvbnRGYW1pbHkoKSwgVVNDUklQVF9UUkFESVRJT05B
TF9IQU4pOworICAgIHNldFNlcmlmRm9udEZhbWlseShzYW5zU2VyaWZUcmFkaXRpb25hbEhhbkZv
bnRGYW1pbHkoKSwgVVNDUklQVF9UUkFESVRJT05BTF9IQU4pOworICAgIHNldEZpeGVkRm9udEZh
bWlseShzYW5zU2VyaWZUcmFkaXRpb25hbEhhbkZvbnRGYW1pbHkoKSwgVVNDUklQVF9UUkFESVRJ
T05BTF9IQU4pOworICAgIHNldFNhbnNTZXJpZkZvbnRGYW1pbHkoc2Fuc1NlcmlmVHJhZGl0aW9u
YWxIYW5Gb250RmFtaWx5KCksIFVTQ1JJUFRfVFJBRElUSU9OQUxfSEFOKTsKKworICAgIC8vIFRo
ZXJlIGlzIG5vIHNlcmlmIENoaW5lc2UgZm9udCBpbiBkZWZhdWx0IGlPUyBpbnN0YWxsYXRpb24u
CisgICAgc2V0U3RhbmRhcmRGb250RmFtaWx5KHNhbnNTZXJpZlNpbXBsaWZpZWRIYW5Gb250RmFt
aWx5KCksIFVTQ1JJUFRfU0lNUExJRklFRF9IQU4pOworICAgIHNldFNlcmlmRm9udEZhbWlseShz
YW5zU2VyaWZTaW1wbGlmaWVkSGFuRm9udEZhbWlseSgpLCBVU0NSSVBUX1NJTVBMSUZJRURfSEFO
KTsKKyAgICBzZXRGaXhlZEZvbnRGYW1pbHkoc2Fuc1NlcmlmU2ltcGxpZmllZEhhbkZvbnRGYW1p
bHkoKSwgVVNDUklQVF9TSU1QTElGSUVEX0hBTik7CisgICAgc2V0U2Fuc1NlcmlmRm9udEZhbWls
eShzYW5zU2VyaWZTaW1wbGlmaWVkSGFuRm9udEZhbWlseSgpLCBVU0NSSVBUX1NJTVBMSUZJRURf
SEFOKTsKKworICAgIHNldFN0YW5kYXJkRm9udEZhbWlseSgiSGlyYWdpbm8gTWluY2hvIFByb04i
LCBVU0NSSVBUX0tBVEFLQU5BX09SX0hJUkFHQU5BKTsKKyAgICBzZXRGaXhlZEZvbnRGYW1pbHko
IkhpcmFnaW5vIEtha3UgR290aGljIFByb04iLCBVU0NSSVBUX0tBVEFLQU5BX09SX0hJUkFHQU5B
KTsKKyAgICBzZXRTZXJpZkZvbnRGYW1pbHkoIkhpcmFnaW5vIE1pbmNobyBQcm9OIiwgVVNDUklQ
VF9LQVRBS0FOQV9PUl9ISVJBR0FOQSk7CisgICAgc2V0U2Fuc1NlcmlmRm9udEZhbWlseSgiSGly
YWdpbm8gS2FrdSBHb3RoaWMgUHJvTiIsIFVTQ1JJUFRfS0FUQUtBTkFfT1JfSElSQUdBTkEpOwor
CisgICAgLy8gVGhlcmUgaXMgbm8gc2VyaWYgS29yZWFuIGZvbnQgaW4gZGVmYXVsdCBpT1MgaW5z
dGFsbGF0aW9uLgorICAgIHNldFN0YW5kYXJkRm9udEZhbWlseSgiQXBwbGUgU0QgR290aGljIE5l
byIsIFVTQ1JJUFRfSEFOR1VMKTsKKyAgICBzZXRTZXJpZkZvbnRGYW1pbHkoIkFwcGxlIFNEIEdv
dGhpYyBOZW8iLCBVU0NSSVBUX0hBTkdVTCk7CisgICAgc2V0Rml4ZWRGb250RmFtaWx5KCJBcHBs
ZSBTRCBHb3RoaWMgTmVvIiwgVVNDUklQVF9IQU5HVUwpOworICAgIHNldFNhbnNTZXJpZkZvbnRG
YW1pbHkoIkFwcGxlIFNEIEdvdGhpYyBOZW8iLCBVU0NSSVBUX0hBTkdVTCk7CisKKyAgICBzZXRT
dGFuZGFyZEZvbnRGYW1pbHkoIlRpbWVzIiwgVVNDUklQVF9DT01NT04pOworICAgIHNldEZpeGVk
Rm9udEZhbWlseSgiQ291cmllciIsIFVTQ1JJUFRfQ09NTU9OKTsKKyAgICBzZXRTZXJpZkZvbnRG
YW1pbHkoIlRpbWVzIiwgVVNDUklQVF9DT01NT04pOworICAgIHNldFNhbnNTZXJpZkZvbnRGYW1p
bHkoIkhlbHZldGljYSIsIFVTQ1JJUFRfQ09NTU9OKTsKK30KKworYm9vbCBTZXR0aW5nczo6ZGVm
YXVsdFRleHRBdXRvc2l6aW5nRW5hYmxlZCgpCit7CisgICAgcmV0dXJuICFkZXZpY2VIYXNJUGFk
Q2FwYWJpbGl0eSgpIHx8IFtbZ2V0VUlBcHBsaWNhdGlvbkNsYXNzKCkgc2hhcmVkQXBwbGljYXRp
b25dIF9pc0NsYXNzaWNdOworfQorCisjZW5kaWYKKworY29uc3QgU3RyaW5nJiBTZXR0aW5nczo6
ZGVmYXVsdE1lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KCkKK3sKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBkZWZhdWx0TWVkaWFDb250ZW50VHlwZXMg
eyAidmlkZW8vbXA0O2NvZGVjcz1odmMxOnZpZGVvL21wNDtjb2RlY3M9aGV2MSIgfTsKKyAgICBy
ZXR1cm4gZGVmYXVsdE1lZGlhQ29udGVudFR5cGVzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1NldHRp
bmdzQ29jb2EubW0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMj
CitMRgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL2NvY29hL1NldHRpbmdzQmFzZUNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvY29jb2EvU2V0dGluZ3NCYXNlQ29jb2EubW0JKHJldmlzaW9uIDIyMzMyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvU2V0dGluZ3NCYXNlQ29jb2EubW0JKHdvcmtp
bmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTZXR0aW5nc0Jhc2UuaCIKIAogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCkBAIC02NSw3ICs2NSw3IEBAIHN0YXRpYyBib29s
IG9zYWthTW9ub0lzSW5zdGFsbGVkKCkKICAgICByZXR1cm4gYWRvcHRDRihDVEZvbnREZXNjcmlw
dG9yQ3JlYXRlTWF0Y2hpbmdGb250RGVzY3JpcHRvcihkZXNjcmlwdG9yLmdldCgpLCBtYW5kYXRv
cnlBdHRyaWJ1dGVzLmdldCgpKSk7CiB9CiAKLXZvaWQgU2V0dGluZ3M6OmluaXRpYWxpemVEZWZh
dWx0Rm9udEZhbWlsaWVzKCkKK3ZvaWQgU2V0dGluZ3NCYXNlOjppbml0aWFsaXplRGVmYXVsdEZv
bnRGYW1pbGllcygpCiB7CiAgICAgc2V0U3RhbmRhcmRGb250RmFtaWx5KCJTb25ndGkgVEMiLCBV
U0NSSVBUX1RSQURJVElPTkFMX0hBTik7CiAgICAgc2V0U2VyaWZGb250RmFtaWx5KCJTb25ndGkg
VEMiLCBVU0NSSVBUX1RSQURJVElPTkFMX0hBTik7CkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgU2V0
dGluZ3M6OmluaXRpYWxpemVEZWZhdWx0Rm9udEZhbWkKIAogI2Vsc2UKIAotdm9pZCBTZXR0aW5n
czo6aW5pdGlhbGl6ZURlZmF1bHRGb250RmFtaWxpZXMoKQordm9pZCBTZXR0aW5nc0Jhc2U6Omlu
aXRpYWxpemVEZWZhdWx0Rm9udEZhbWlsaWVzKCkKIHsKICAgICAvLyBUaGVyZSBpcyBubyBzZXJp
ZiBDaGluZXNlIGZvbnQgaW4gZGVmYXVsdCBpT1MgaW5zdGFsbGF0aW9uLgogICAgIHNldFN0YW5k
YXJkRm9udEZhbWlseShzYW5zU2VyaWZUcmFkaXRpb25hbEhhbkZvbnRGYW1pbHkoKSwgVVNDUklQ
VF9UUkFESVRJT05BTF9IQU4pOwpAQCAtMTI4LDE0ICsxMjgsMTQgQEAgdm9pZCBTZXR0aW5nczo6
aW5pdGlhbGl6ZURlZmF1bHRGb250RmFtaQogICAgIHNldFNhbnNTZXJpZkZvbnRGYW1pbHkoIkhl
bHZldGljYSIsIFVTQ1JJUFRfQ09NTU9OKTsKIH0KIAotYm9vbCBTZXR0aW5nczo6ZGVmYXVsdFRl
eHRBdXRvc2l6aW5nRW5hYmxlZCgpCitib29sIFNldHRpbmdzQmFzZTo6ZGVmYXVsdFRleHRBdXRv
c2l6aW5nRW5hYmxlZCgpCiB7CiAgICAgcmV0dXJuICFkZXZpY2VIYXNJUGFkQ2FwYWJpbGl0eSgp
IHx8IFtbZ2V0VUlBcHBsaWNhdGlvbkNsYXNzKCkgc2hhcmVkQXBwbGljYXRpb25dIF9pc0NsYXNz
aWNdOwogfQogCiAjZW5kaWYKIAotY29uc3QgU3RyaW5nJiBTZXR0aW5nczo6ZGVmYXVsdE1lZGlh
Q29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KCkKK2NvbnN0IFN0cmluZyYgU2V0
dGluZ3NCYXNlOjpkZWZhdWx0TWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBv
cnQoKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGRlZmF1bHRNZWRpYUNv
bnRlbnRUeXBlcyB7ICJ2aWRlby9tcDQ7Y29kZWNzPWh2YzE6dmlkZW8vbXA0O2NvZGVjcz1oZXYx
IiB9OwogICAgIHJldHVybiBkZWZhdWx0TWVkaWFDb250ZW50VHlwZXM7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2NvY29hL1NldHRpbmdzQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9jb2NvYS9TZXR0aW5nc0NvY29hLm1tCShyZXZpc2lvbiAyMjMzMjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1NldHRpbmdzQ29jb2EubW0JKG5vbmV4aXN0ZW50
KQpAQCAtMSwxNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJTZXR0aW5ncy5oIgotCi0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0K
LSNpZiBQTEFURk9STShJT1MpCi0jaW5jbHVkZSAiRGV2aWNlLmgiCi0jaW5jbHVkZSA8cGFsL3Nw
aS9pb3MvVUlLaXRTUEkuaD4KLSNpbmNsdWRlIDx3dGYvU29mdExpbmtpbmcuaD4KLSNlbmRpZgot
Ci0jaWYgUExBVEZPUk0oSU9TKQotU09GVF9MSU5LX0ZSQU1FV09SSyhVSUtpdCkKLVNPRlRfTElO
S19DTEFTUyhVSUtpdCwgVUlBcHBsaWNhdGlvbikKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogc2Fuc1NlcmlmVHJhZGl0aW9uYWxIYW5G
b250RmFtaWx5KCkKLXsKLSAgICByZXR1cm4gIlBpbmdGYW5nIFRDIjsKLX0KLQotc3RhdGljIGlu
bGluZSBjb25zdCBjaGFyKiBzYW5zU2VyaWZTaW1wbGlmaWVkSGFuRm9udEZhbWlseSgpCi17Ci0g
ICAgcmV0dXJuICJQaW5nRmFuZyBTQyI7Ci19Ci0KLSNpZiBQTEFURk9STShNQUMpCi0KLXN0YXRp
YyBib29sIG9zYWthTW9ub0lzSW5zdGFsbGVkKCkKLXsKLSAgICBpbnQgb25lID0gMTsKLSAgICBS
ZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHllcyA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJm9uZSkpOwotICAgIENGVHlwZVJlZiBr
ZXlzW10gPSB7IGtDVEZvbnRFbmFibGVkQXR0cmlidXRlLCBrQ1RGb250TmFtZUF0dHJpYnV0ZSB9
OwotICAgIENGVHlwZVJlZiB2YWx1ZXNbXSA9IHsgeWVzLmdldCgpLCBDRlNUUigiT3Nha2EtTW9u
byIpIH07Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gYXR0cmlidXRlcyA9IGFkb3B0
Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtleXMsIHZhbHVlcywg
V1RGX0FSUkFZX0xFTkdUSCh2YWx1ZXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3Ms
ICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgUmV0YWluUHRyPENURm9u
dERlc2NyaXB0b3JSZWY+IGRlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVh
dGVXaXRoQXR0cmlidXRlcyhhdHRyaWJ1dGVzLmdldCgpKSk7Ci0gICAgUmV0YWluUHRyPENGU2V0
UmVmPiBtYW5kYXRvcnlBdHRyaWJ1dGVzID0gYWRvcHRDRihDRlNldENyZWF0ZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBrZXlzLCBXVEZfQVJSQVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZVNldENhbGxC
YWNrcykpOwotICAgIHJldHVybiBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVNYXRjaGlu
Z0ZvbnREZXNjcmlwdG9yKGRlc2NyaXB0b3IuZ2V0KCksIG1hbmRhdG9yeUF0dHJpYnV0ZXMuZ2V0
KCkpKTsKLX0KLQotdm9pZCBTZXR0aW5nczo6aW5pdGlhbGl6ZURlZmF1bHRGb250RmFtaWxpZXMo
KQotewotICAgIHNldFN0YW5kYXJkRm9udEZhbWlseSgiU29uZ3RpIFRDIiwgVVNDUklQVF9UUkFE
SVRJT05BTF9IQU4pOwotICAgIHNldFNlcmlmRm9udEZhbWlseSgiU29uZ3RpIFRDIiwgVVNDUklQ
VF9UUkFESVRJT05BTF9IQU4pOwotICAgIHNldEZpeGVkRm9udEZhbWlseShzYW5zU2VyaWZUcmFk
aXRpb25hbEhhbkZvbnRGYW1pbHkoKSwgVVNDUklQVF9UUkFESVRJT05BTF9IQU4pOwotICAgIHNl
dFNhbnNTZXJpZkZvbnRGYW1pbHkoc2Fuc1NlcmlmVHJhZGl0aW9uYWxIYW5Gb250RmFtaWx5KCks
IFVTQ1JJUFRfVFJBRElUSU9OQUxfSEFOKTsKLSAgICBzZXRDdXJzaXZlRm9udEZhbWlseSgiS2Fp
dGkgVEMiLCBVU0NSSVBUX1RSQURJVElPTkFMX0hBTik7Ci0KLSAgICBzZXRTdGFuZGFyZEZvbnRG
YW1pbHkoIlNvbmd0aSBTQyIsIFVTQ1JJUFRfU0lNUExJRklFRF9IQU4pOwotICAgIHNldFNlcmlm
Rm9udEZhbWlseSgiU29uZ3RpIFNDIiwgVVNDUklQVF9TSU1QTElGSUVEX0hBTik7Ci0gICAgc2V0
Rml4ZWRGb250RmFtaWx5KHNhbnNTZXJpZlNpbXBsaWZpZWRIYW5Gb250RmFtaWx5KCksIFVTQ1JJ
UFRfU0lNUExJRklFRF9IQU4pOwotICAgIHNldFNhbnNTZXJpZkZvbnRGYW1pbHkoc2Fuc1Nlcmlm
U2ltcGxpZmllZEhhbkZvbnRGYW1pbHkoKSwgVVNDUklQVF9TSU1QTElGSUVEX0hBTik7Ci0gICAg
c2V0Q3Vyc2l2ZUZvbnRGYW1pbHkoIkthaXRpIFNDIiwgVVNDUklQVF9TSU1QTElGSUVEX0hBTik7
Ci0KLSAgICBzZXRTdGFuZGFyZEZvbnRGYW1pbHkoIkhpcmFnaW5vIE1pbmNobyBQcm9OIiwgVVND
UklQVF9LQVRBS0FOQV9PUl9ISVJBR0FOQSk7Ci0gICAgc2V0Rml4ZWRGb250RmFtaWx5KG9zYWth
TW9ub0lzSW5zdGFsbGVkKCkgPyAiT3Nha2EtTW9ubyIgOiAiSGlyYWdpbm8gU2FucyIsIFVTQ1JJ
UFRfS0FUQUtBTkFfT1JfSElSQUdBTkEpOwotICAgIHNldFNlcmlmRm9udEZhbWlseSgiSGlyYWdp
bm8gTWluY2hvIFByb04iLCBVU0NSSVBUX0tBVEFLQU5BX09SX0hJUkFHQU5BKTsKLSAgICBzZXRT
YW5zU2VyaWZGb250RmFtaWx5KCJIaXJhZ2lubyBLYWt1IEdvdGhpYyBQcm9OIiwgVVNDUklQVF9L
QVRBS0FOQV9PUl9ISVJBR0FOQSk7Ci0KLSAgICBzZXRTdGFuZGFyZEZvbnRGYW1pbHkoIkFwcGxl
TXl1bmdqbyIsIFVTQ1JJUFRfSEFOR1VMKTsKLSAgICBzZXRTZXJpZkZvbnRGYW1pbHkoIkFwcGxl
TXl1bmdqbyIsIFVTQ1JJUFRfSEFOR1VMKTsKLSAgICBzZXRGaXhlZEZvbnRGYW1pbHkoIkFwcGxl
IFNEIEdvdGhpYyBOZW8iLCBVU0NSSVBUX0hBTkdVTCk7Ci0gICAgc2V0U2Fuc1NlcmlmRm9udEZh
bWlseSgiQXBwbGUgU0QgR290aGljIE5lbyIsIFVTQ1JJUFRfSEFOR1VMKTsKLQotICAgIHNldFN0
YW5kYXJkRm9udEZhbWlseSgiVGltZXMiLCBVU0NSSVBUX0NPTU1PTik7Ci0gICAgc2V0Rml4ZWRG
b250RmFtaWx5KCJDb3VyaWVyIiwgVVNDUklQVF9DT01NT04pOwotICAgIHNldFNlcmlmRm9udEZh
bWlseSgiVGltZXMiLCBVU0NSSVBUX0NPTU1PTik7Ci0gICAgc2V0U2Fuc1NlcmlmRm9udEZhbWls
eSgiSGVsdmV0aWNhIiwgVVNDUklQVF9DT01NT04pOwotfQotCi0jZWxzZQotCi12b2lkIFNldHRp
bmdzOjppbml0aWFsaXplRGVmYXVsdEZvbnRGYW1pbGllcygpCi17Ci0gICAgLy8gVGhlcmUgaXMg
bm8gc2VyaWYgQ2hpbmVzZSBmb250IGluIGRlZmF1bHQgaU9TIGluc3RhbGxhdGlvbi4KLSAgICBz
ZXRTdGFuZGFyZEZvbnRGYW1pbHkoc2Fuc1NlcmlmVHJhZGl0aW9uYWxIYW5Gb250RmFtaWx5KCks
IFVTQ1JJUFRfVFJBRElUSU9OQUxfSEFOKTsKLSAgICBzZXRTZXJpZkZvbnRGYW1pbHkoc2Fuc1Nl
cmlmVHJhZGl0aW9uYWxIYW5Gb250RmFtaWx5KCksIFVTQ1JJUFRfVFJBRElUSU9OQUxfSEFOKTsK
LSAgICBzZXRGaXhlZEZvbnRGYW1pbHkoc2Fuc1NlcmlmVHJhZGl0aW9uYWxIYW5Gb250RmFtaWx5
KCksIFVTQ1JJUFRfVFJBRElUSU9OQUxfSEFOKTsKLSAgICBzZXRTYW5zU2VyaWZGb250RmFtaWx5
KHNhbnNTZXJpZlRyYWRpdGlvbmFsSGFuRm9udEZhbWlseSgpLCBVU0NSSVBUX1RSQURJVElPTkFM
X0hBTik7Ci0KLSAgICAvLyBUaGVyZSBpcyBubyBzZXJpZiBDaGluZXNlIGZvbnQgaW4gZGVmYXVs
dCBpT1MgaW5zdGFsbGF0aW9uLgotICAgIHNldFN0YW5kYXJkRm9udEZhbWlseShzYW5zU2VyaWZT
aW1wbGlmaWVkSGFuRm9udEZhbWlseSgpLCBVU0NSSVBUX1NJTVBMSUZJRURfSEFOKTsKLSAgICBz
ZXRTZXJpZkZvbnRGYW1pbHkoc2Fuc1NlcmlmU2ltcGxpZmllZEhhbkZvbnRGYW1pbHkoKSwgVVND
UklQVF9TSU1QTElGSUVEX0hBTik7Ci0gICAgc2V0Rml4ZWRGb250RmFtaWx5KHNhbnNTZXJpZlNp
bXBsaWZpZWRIYW5Gb250RmFtaWx5KCksIFVTQ1JJUFRfU0lNUExJRklFRF9IQU4pOwotICAgIHNl
dFNhbnNTZXJpZkZvbnRGYW1pbHkoc2Fuc1NlcmlmU2ltcGxpZmllZEhhbkZvbnRGYW1pbHkoKSwg
VVNDUklQVF9TSU1QTElGSUVEX0hBTik7Ci0KLSAgICBzZXRTdGFuZGFyZEZvbnRGYW1pbHkoIkhp
cmFnaW5vIE1pbmNobyBQcm9OIiwgVVNDUklQVF9LQVRBS0FOQV9PUl9ISVJBR0FOQSk7Ci0gICAg
c2V0Rml4ZWRGb250RmFtaWx5KCJIaXJhZ2lubyBLYWt1IEdvdGhpYyBQcm9OIiwgVVNDUklQVF9L
QVRBS0FOQV9PUl9ISVJBR0FOQSk7Ci0gICAgc2V0U2VyaWZGb250RmFtaWx5KCJIaXJhZ2lubyBN
aW5jaG8gUHJvTiIsIFVTQ1JJUFRfS0FUQUtBTkFfT1JfSElSQUdBTkEpOwotICAgIHNldFNhbnNT
ZXJpZkZvbnRGYW1pbHkoIkhpcmFnaW5vIEtha3UgR290aGljIFByb04iLCBVU0NSSVBUX0tBVEFL
QU5BX09SX0hJUkFHQU5BKTsKLQotICAgIC8vIFRoZXJlIGlzIG5vIHNlcmlmIEtvcmVhbiBmb250
IGluIGRlZmF1bHQgaU9TIGluc3RhbGxhdGlvbi4KLSAgICBzZXRTdGFuZGFyZEZvbnRGYW1pbHko
IkFwcGxlIFNEIEdvdGhpYyBOZW8iLCBVU0NSSVBUX0hBTkdVTCk7Ci0gICAgc2V0U2VyaWZGb250
RmFtaWx5KCJBcHBsZSBTRCBHb3RoaWMgTmVvIiwgVVNDUklQVF9IQU5HVUwpOwotICAgIHNldEZp
eGVkRm9udEZhbWlseSgiQXBwbGUgU0QgR290aGljIE5lbyIsIFVTQ1JJUFRfSEFOR1VMKTsKLSAg
ICBzZXRTYW5zU2VyaWZGb250RmFtaWx5KCJBcHBsZSBTRCBHb3RoaWMgTmVvIiwgVVNDUklQVF9I
QU5HVUwpOwotCi0gICAgc2V0U3RhbmRhcmRGb250RmFtaWx5KCJUaW1lcyIsIFVTQ1JJUFRfQ09N
TU9OKTsKLSAgICBzZXRGaXhlZEZvbnRGYW1pbHkoIkNvdXJpZXIiLCBVU0NSSVBUX0NPTU1PTik7
Ci0gICAgc2V0U2VyaWZGb250RmFtaWx5KCJUaW1lcyIsIFVTQ1JJUFRfQ09NTU9OKTsKLSAgICBz
ZXRTYW5zU2VyaWZGb250RmFtaWx5KCJIZWx2ZXRpY2EiLCBVU0NSSVBUX0NPTU1PTik7Ci19Ci0K
LWJvb2wgU2V0dGluZ3M6OmRlZmF1bHRUZXh0QXV0b3NpemluZ0VuYWJsZWQoKQotewotICAgIHJl
dHVybiAhZGV2aWNlSGFzSVBhZENhcGFiaWxpdHkoKSB8fCBbW2dldFVJQXBwbGljYXRpb25DbGFz
cygpIHNoYXJlZEFwcGxpY2F0aW9uXSBfaXNDbGFzc2ljXTsKLX0KLQotI2VuZGlmCi0KLWNvbnN0
IFN0cmluZyYgU2V0dGluZ3M6OmRlZmF1bHRNZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3
YXJlU3VwcG9ydCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gZGVmYXVs
dE1lZGlhQ29udGVudFR5cGVzIHsgInZpZGVvL21wNDtjb2RlY3M9aHZjMTp2aWRlby9tcDQ7Y29k
ZWNzPWhldjEiIH07Ci0gICAgcmV0dXJuIGRlZmF1bHRNZWRpYUNvbnRlbnRUeXBlczsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNv
cmUvcGFnZS9jb2NvYS9TZXR0aW5nc0NvY29hLm1tCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVv
bC1zdHlsZQojIyAtMSArMCwwICMjCi1MRgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>