<?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>107475</bug_id>
          
          <creation_ts>2013-01-21 13:52:53 -0800</creation_ts>
          <short_desc>webdatabase: Split openDatabase() between front and back end work</short_desc>
          <delta_ts>2013-02-06 13:54:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>107535</dependson>
    
    <dependson>107784</dependson>
    
    <dependson>108275</dependson>
    
    <dependson>108278</dependson>
    
    <dependson>108279</dependson>
    
    <dependson>108431</dependson>
    
    <dependson>108724</dependson>
    
    <dependson>108759</dependson>
    
    <dependson>108988</dependson>
    
    <dependson>108995</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>andersca</cc>
    
    <cc>beidson</cc>
    
    <cc>dglazkov</cc>
    
    <cc>ggaren</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>michaeln</cc>
    
    <cc>peter+ews</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>812377</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-21 13:52:53 -0800</bug_when>
    <thetext>1. Need to refactor the openDatabase() process to isolate the front-end script activity from back-end database activity.

Also, ...
2. Rename AbstractDatabase to DatabaseBackend.
    - Currently, this is just a rename operation.  In a subsequent task, we&apos;ll change Database and DatabaseSync to delegate to DatabaseBackend instead of inheriting from it.
3. Rename DBBackend::Server to DatabaseServer.
    - This simplifies things.  I realized that splitting out a DBBackend namespace to encapsulate all backend code isn&apos;t worth the effort yet.
4. Create a DatabaseBackendContext that the database backend uses.
    - Currently, it is only a wrapper which inherits from DatabaseContext.  Later on, we&apos;ll need to split the 2 apart.
5. Fix up add/removeOpenDatabase() so that they are called only when a database has been opened and closed respectively.
    - Previously, client code needs to call removeOpenDatabase() directly, and the Database constructor automatically calls addOpenDatabase() even when the database has not been opened yet.
    - Currently, addOpenDatabase() is only called if the database is successfully opened, and removeOpenDatabase() is only called when the database is closed.
    - In addition, we ensure that the database destructor will always close the database if it is still opened.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819580</commentid>
    <comment_count>1</comment_count>
      <attachid>185358</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-01-29 17:35:20 -0800</bug_when>
    <thetext>Created attachment 185358
work in progress 1.

Uploading in case anyone wants to take a preliminary look at this.  This patch builds should build but still need to self-review (after the latest svn up which changed some logic) and re-test.  In it&apos;s current form, it shows how all the pieces come together for this refactor, but the patch as a whole is big.  I will break them out into smaller pieces in separate bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823063</commentid>
    <comment_count>2</comment_count>
      <attachid>186093</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-01 11:45:42 -0800</bug_when>
    <thetext>Created attachment 186093
work in progress 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825992</commentid>
    <comment_count>3</comment_count>
      <attachid>186740</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-05 18:18:25 -0800</bug_when>
    <thetext>Created attachment 186740
work in progress 3: time to test on the EWS bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825993</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-05 18:21:35 -0800</bug_when>
    <thetext>Attachment 186740 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/Modules/webdatabase/AbstractDatabaseServer.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DOMWindowWebDatabase.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/Database.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/Database.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackend.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackendAsync.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackendAsync.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackendSync.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackendSync.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseError.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseManager.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseManager.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseServer.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseServer.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseSync.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseSync.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseTracker.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/WorkerContextWebDatabase.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/chromium/DatabaseTrackerChromium.cpp&apos;]&quot; exit_code: 1
Source/WebCore/Modules/webdatabase/AbstractDatabaseServer.h:55:  Missing space before {  [whitespace/braces] [5]
Total errors found: 1 in 17 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>825994</commentid>
    <comment_count>5</comment_count>
      <attachid>186740</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-05 18:25:30 -0800</bug_when>
    <thetext>Comment on attachment 186740
work in progress 3: time to test on the EWS bots.

Attachment 186740 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16373911</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825995</commentid>
    <comment_count>6</comment_count>
      <attachid>186740</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-02-05 18:26:08 -0800</bug_when>
    <thetext>Comment on attachment 186740
work in progress 3: time to test on the EWS bots.

Attachment 186740 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/16374975</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825996</commentid>
    <comment_count>7</comment_count>
      <attachid>186740</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-02-05 18:27:17 -0800</bug_when>
    <thetext>Comment on attachment 186740
work in progress 3: time to test on the EWS bots.

Attachment 186740 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/16389044</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825999</commentid>
    <comment_count>8</comment_count>
      <attachid>186740</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-02-05 18:31:04 -0800</bug_when>
    <thetext>Comment on attachment 186740
work in progress 3: time to test on the EWS bots.

Attachment 186740 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/16376970</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826006</commentid>
    <comment_count>9</comment_count>
      <attachid>186740</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-05 18:38:15 -0800</bug_when>
    <thetext>Comment on attachment 186740
work in progress 3: time to test on the EWS bots.

Time to stop the EWS bleeding.  =(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826083</commentid>
    <comment_count>10</comment_count>
      <attachid>186759</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-05 22:32:57 -0800</bug_when>
    <thetext>Created attachment 186759
work in progress 4: let&apos;s check the ews bots again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826085</commentid>
    <comment_count>11</comment_count>
      <attachid>186759</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-05 22:37:46 -0800</bug_when>
    <thetext>Comment on attachment 186759
work in progress 4: let&apos;s check the ews bots again.

Attachment 186759 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16398005</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826086</commentid>
    <comment_count>12</comment_count>
      <attachid>186759</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-02-05 22:38:08 -0800</bug_when>
    <thetext>Comment on attachment 186759
work in progress 4: let&apos;s check the ews bots again.

Attachment 186759 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/16394066</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826087</commentid>
    <comment_count>13</comment_count>
      <attachid>186759</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-05 22:38:16 -0800</bug_when>
    <thetext>Comment on attachment 186759
work in progress 4: let&apos;s check the ews bots again.

Attachment 186759 did not pass cr-linux-debug-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16393077</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826089</commentid>
    <comment_count>14</comment_count>
      <attachid>186759</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-02-05 22:38:47 -0800</bug_when>
    <thetext>Comment on attachment 186759
work in progress 4: let&apos;s check the ews bots again.

Attachment 186759 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/16394068</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826092</commentid>
    <comment_count>15</comment_count>
      <attachid>186759</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-02-05 22:40:54 -0800</bug_when>
    <thetext>Comment on attachment 186759
work in progress 4: let&apos;s check the ews bots again.

Attachment 186759 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/16391122</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826094</commentid>
    <comment_count>16</comment_count>
      <attachid>186759</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2013-02-05 22:41:39 -0800</bug_when>
    <thetext>Comment on attachment 186759
work in progress 4: let&apos;s check the ews bots again.

Attachment 186759 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/16388154</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826095</commentid>
    <comment_count>17</comment_count>
      <attachid>186759</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-05 22:44:52 -0800</bug_when>
    <thetext>Comment on attachment 186759
work in progress 4: let&apos;s check the ews bots again.

Arggg... GCC!!!  Oh well.  Will upload another patch shortly with some unreachable code to placate GCC because it doesn&apos;t have enough smarts to infer that the end of the function DatabaseManager::exceptionCodeForDatabaseError() is unreachable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826096</commentid>
    <comment_count>18</comment_count>
      <attachid>186761</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-05 22:53:56 -0800</bug_when>
    <thetext>Created attachment 186761
work in progress 5: let&apos;s check those ews bots again. =(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826099</commentid>
    <comment_count>19</comment_count>
      <attachid>186761</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-05 23:00:12 -0800</bug_when>
    <thetext>Comment on attachment 186761
work in progress 5: let&apos;s check those ews bots again. =(

Attachment 186761 did not pass cr-linux-debug-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16388161</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826113</commentid>
    <comment_count>20</comment_count>
      <attachid>186767</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-05 23:42:16 -0800</bug_when>
    <thetext>Created attachment 186767
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826230</commentid>
    <comment_count>21</comment_count>
      <attachid>186791</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-06 01:46:36 -0800</bug_when>
    <thetext>Created attachment 186791
the patch with comments fixed up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826693</commentid>
    <comment_count>22</comment_count>
      <attachid>186791</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-02-06 13:15:43 -0800</bug_when>
    <thetext>Comment on attachment 186791
the patch with comments fixed up.

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

&gt; Source/WebCore/Modules/webdatabase/DatabaseManager.cpp:243
&gt; +    if (!backend) {
&gt; +        ASSERT(error != DatabaseError::None);
&gt; +
&gt; +        switch (error) {
&gt; +        case DatabaseError::DatabaseIsBeingDeleted:
&gt; +        case DatabaseError::DatabaseSizeOverflowed:
&gt; +        case DatabaseError::GenericSecurityError:
&gt; +            goto handleError;
&gt; +
&gt; +        case DatabaseError::InvalidDatabaseState:
&gt; +            goto handleInvalidDatabaseState;

Please restructure the code so you can avoid these gotos.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826719</commentid>
    <comment_count>23</comment_count>
      <attachid>186911</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-06 13:41:44 -0800</bug_when>
    <thetext>Created attachment 186911
No more gotos.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826736</commentid>
    <comment_count>24</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-06 13:54:20 -0800</bug_when>
    <thetext>Thanks for the review.  Landed in r142030: &lt;http://trac.webkit.org/changeset/142030&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185358</attachid>
            <date>2013-01-29 17:35:20 -0800</date>
            <delta_ts>2013-02-01 11:45:42 -0800</delta_ts>
            <desc>work in progress 1.</desc>
            <filename>bug-107475.patch</filename>
            <type>text/plain</type>
            <size>250374</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNDExODYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDEzLTAxLTI5ICBNYXJrIExhbSAgPG1hcmsubGFt
QGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBvcGVuRGF0YWJhc2UoKSBiZXR3ZWVuIGZyb250
IGFuZCBiYWNrIGVuZCB3b3JrLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA3NDc1LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEludHJvZHVjaW5nIHRoZSBUeXBlU2FmZUVudW0gdGVtcGxhdGUuCisKKyAg
ICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvVHlw
ZVNhZmVFbnVtLmg6IEFkZGVkLgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFR5cGVTYWZlRW51
bSk6CisgICAgICAgIChXVEY6OlR5cGVTYWZlRW51bTo6VHlwZVNhZmVFbnVtKToKKyAgICAgICAg
KFdURjo6VHlwZVNhZmVFbnVtOjp2YWx1ZSk6CisgICAgICAgIChXVEY6OlR5cGVTYWZlRW51bTo6
b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OlR5cGVTYWZlRW51bTo6b3BlcmF0b3IhPSk6Cisg
ICAgICAgIChXVEY6OlR5cGVTYWZlRW51bTo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdURjo6VHlw
ZVNhZmVFbnVtOjpvcGVyYXRvcjw9KToKKyAgICAgICAgKFdURjo6VHlwZVNhZmVFbnVtOjpvcGVy
YXRvcj4pOgorICAgICAgICAoV1RGOjpUeXBlU2FmZUVudW06Om9wZXJhdG9yPj0pOgorCiAyMDEz
LTAxLTI4ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBTdHJpbmcgY29uc3RydWN0ZWQgZnJvbSBMaXRlcmFscyBzaG91bGQgYmUgbm9uLWVtcHR5Cklu
ZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE0
MTE4MSkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTMwOCw2ICszMDgsNyBAQAogCQlGMzUyNUU0NjE2MTlBNEVFMDAyNzhCQzEg
LyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaE1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjM1MjVFNDUxNjE5QTRFRTAwMjc4QkMxIC8qIE1lbW9y
eUluc3RydW1lbnRhdGlvbkhhc2hNYXAuaCAqLzsgfTsKIAkJRjNGQkM3MUUxNjFBRjdCRjAwQkI0
QkQ0IC8qIE1lbW9yeUluc3RydW1lbnRhdGlvbkhhc2hDb3VudGVkU2V0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGM0ZCQzcxRDE2MUFGN0JGMDBCQjRC
RDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaENvdW50ZWRTZXQuaCAqLzsgfTsKIAkJRjNG
QkM3MjAxNjFBRjdDRDAwQkI0QkQ0IC8qIE1lbW9yeUluc3RydW1lbnRhdGlvblNlcXVlbmNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGM0ZCQzcxRjE2
MUFGN0NEMDBCQjRCRDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uU2VxdWVuY2UuaCAqLzsgfTsK
KwkJRkU0MzMwMjcxNkE3QURDMzAwRDE1ODVEIC8qIFR5cGVTYWZlRW51bS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU0MzMwMjYxNkE3QURDMzAwRDE1
ODVEIC8qIFR5cGVTYWZlRW51bS5oICovOyB9OwogCQlGRURBQ0QzRDE2MzBGODNGMDBDNjk2MzQg
LyogU3RhY2tTdGF0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRURBQ0QzQjE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5jcHAgKi87IH07
CiAJCUZFREFDRDNFMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRURBQ0QzQzE2MzBGODNGMDBDNjk2
MzQgLyogU3RhY2tTdGF0cy5oICovOyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICov
CkBAIC02MTksNiArNjIwLDcgQEAKIAkJRjM1MjVFNDUxNjE5QTRFRTAwMjc4QkMxIC8qIE1lbW9y
eUluc3RydW1lbnRhdGlvbkhhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGM0ZCQzcxRDE2MUFGN0JGMDBCQjRCRDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9u
SGFzaENvdW50ZWRTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVtb3J5
SW5zdHJ1bWVudGF0aW9uSGFzaENvdW50ZWRTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRjNGQkM3MUYxNjFBRjdDRDAwQkI0QkQ0IC8qIE1lbW9yeUluc3RydW1lbnRhdGlvblNl
cXVlbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lbW9yeUluc3RydW1l
bnRhdGlvblNlcXVlbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFNDMzMDI2
MTZBN0FEQzMwMEQxNTg1RCAvKiBUeXBlU2FmZUVudW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gVHlwZVNhZmVFbnVtLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFREFDRDNCMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0
YXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0YWNrU3RhdHMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRURBQ0QzQzE2MzBGODNGMDBDNjk2
MzQgLyogU3RhY2tTdGF0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGFj
a1N0YXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAvKiBFbmQgUEJYRmlsZVJlZmVy
ZW5jZSBzZWN0aW9uICovCkBAIC04NjYsNiArODY4LDcgQEAKIAkJCQlBOEE0NzMzRTE1MUE4MjVC
MDA0MTIzRkYgLyogVGhyZWFkU2FmZVJlZkNvdW50ZWQuaCAqLywKIAkJCQlBOEE0NzMzRjE1MUE4
MjVCMDA0MTIzRkYgLyogVGhyZWFkU3BlY2lmaWMuaCAqLywKIAkJCQlBOEE0NzM0MTE1MUE4MjVC
MDA0MTIzRkYgLyogVHlwZWRBcnJheUJhc2UuaCAqLywKKwkJCQlGRTQzMzAyNjE2QTdBREMzMDBE
MTU4NUQgLyogVHlwZVNhZmVFbnVtLmggKi8sCiAJCQkJQThBNDczNDIxNTFBODI1QjAwNDEyM0ZG
IC8qIFR5cGVUcmFpdHMuY3BwICovLAogCQkJCUE4QTQ3MzQzMTUxQTgyNUIwMDQxMjNGRiAvKiBU
eXBlVHJhaXRzLmggKi8sCiAJCQkJQThBNDczNDYxNTFBODI1QjAwNDEyM0ZGIC8qIFVpbnQxNkFy
cmF5LmggKi8sCkBAIC0xMjU2LDYgKzEyNTksNyBAQAogCQkJCTk3NENGQzhFMTZBNEYzMjcwMDZE
NTQwNCAvKiBXZWFrUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NjE1MUE4MjVCMDA0
MTIzRkYgLyogV1RGU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ4NzE1MUE4MjVC
MDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU0MzMwMjcx
NkE3QURDMzAwRDE1ODVEIC8qIFR5cGVTYWZlRW51bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9UeXBlU2FmZUVudW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9UeXBlU2FmZUVudW0uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL1R5cGVTYWZl
RW51bS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV1RGX1R5cGVTYWZlRW51bV9oCisj
ZGVmaW5lIFdURl9UeXBlU2FmZUVudW1faAorCituYW1lc3BhY2UgV1RGIHsKKworLy8gSG93IHRv
IGRlZmluZSBhIHR5cGUgc2FmZSBlbnVtIGxpc3QgdXNpbmcgVHlwZVNhZmVFbnVtPworLy8gPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBE
ZWYgc2hvdWxkIGJlIGEgc3RydWN0IHRoYXQgZW5jYXBzdWxhdGVzIGFuIGVudW0gbGlzdC4KKy8v
IFRoZSBlbnVtIGxpc3Qgc2hvdWxkIGJlIG5hbWVzIEVudW1zLgorLy8KKy8vIEhlcmUncyBhbiBl
eGFtcGxlIG9mIGhvdyB0byBkZWZpbmUgYSB0eXBlIHNhZmUgZW51bSBuYW1lZCBNeUVudW0gdXNp
bmcKKy8vIHRoZSBUeXBlU2FmZUVudW0gdGVtcGxhdGU6CisvLworLy8gICAgIHN0cnVjdCBNeUVu
dW1EZWYgeworLy8gICAgICAgICBlbnVtIEVudW1zIHsKKy8vICAgICAgICAgICAgIFZBTFVFX0RF
RkFVTFQsCisvLyAgICAgICAgICAgICBWQUxVRV8xLAorLy8gICAgICAgICAgICAgLi4uCisvLyAg
ICAgICAgICAgICBWQUxVRV9OCisvLyAgICAgICAgIH07CisvLyAgICAgfTsKKy8vICAgICB0eXBl
ZGVmIFR5cGVTYWZlRW51bTxNeUVudW1EZWYsIE15RW51bURlZjo6VkFMVUVfREVGQVVMVD4gTXlF
bnVtOworLy8KKy8vIFdpdGggdGhhdCwgeW91IGNhbiBub3cgdXNlIE15RW51bSBlbnVtIHZhbHVl
cyBhcyBmb2xsb3c6CisvLworLy8gICAgIE15RW51bSB2YWx1ZTE7IC8vIHZhbHVlMSBpcyBhc3Np
Z25lZCBNeUVudW06OlZBTFVFX0RFRkFVTFQgYnkgZGVmYXVsdC4KKy8vICAgICBNeUVudW0gdmFs
dWUyID0gTXlFbnVtOjpWQUxVRV8xOyAvLyB2YWx1ZTIgaXMgYXNzaWduZWQgTXlFbnVtOjpWQUxV
RV8xOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRGVmLCB0eXBlbmFtZSBEZWY6OkVudW1zIGRlZmF1
bHRWYWx1ZT4KK2NsYXNzIFR5cGVTYWZlRW51bSA6IHB1YmxpYyBEZWYgeworICAgIHR5cGVkZWYg
ZW51bSBEZWY6OkVudW1zIFZhbHVlOworcHVibGljOgorICAgIEFMV0FZU19JTkxJTkUgVHlwZVNh
ZmVFbnVtKCkgOiBtX3ZhbHVlKGRlZmF1bHRWYWx1ZSkgeyB9CisgICAgQUxXQVlTX0lOTElORSBU
eXBlU2FmZUVudW0oVmFsdWUgdmFsdWUpIDogbV92YWx1ZSh2YWx1ZSkgeyB9CisKKyAgICBBTFdB
WVNfSU5MSU5FIFZhbHVlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAg
QUxXQVlTX0lOTElORSBib29sIG9wZXJhdG9yPT0oY29uc3QgVHlwZVNhZmVFbnVtIG90aGVyKSB7
IHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBUeXBlU2FmZUVudW0gb3RoZXIpIHsgcmV0dXJuIG1fdmFsdWUg
IT0gb3RoZXIubV92YWx1ZTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBvcGVyYXRvcjwoY29u
c3QgVHlwZVNhZmVFbnVtIG90aGVyKSB7IHJldHVybiBtX3ZhbHVlIDwgb3RoZXIubV92YWx1ZTsg
fQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFR5cGVTYWZlRW51bSBv
dGhlcikgeyByZXR1cm4gbV92YWx1ZSA8PSBvdGhlci5tX3ZhbHVlOyB9CisgICAgQUxXQVlTX0lO
TElORSBib29sIG9wZXJhdG9yPihjb25zdCBUeXBlU2FmZUVudW0gb3RoZXIpIHsgcmV0dXJuIG1f
dmFsdWUgPiBvdGhlci5tX3ZhbHVlOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIG9wZXJhdG9y
Pj0oY29uc3QgVHlwZVNhZmVFbnVtIG90aGVyKSB7IHJldHVybiBtX3ZhbHVlID49IG90aGVyLm1f
dmFsdWU7IH0KKworcHJpdmF0ZToKKyAgICBWYWx1ZSBtX3ZhbHVlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKK3VzaW5nIFdURjo6VHlwZVNhZmVFbnVtOworCisjZW5kaWYgLy8gV1RGX1R5
cGVTYWZlRW51bV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDExODYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMzMgQEAKKzIwMTMt
MDEtMjkgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IG9w
ZW5EYXRhYmFzZSgpIGJldHdlZW4gZnJvbnQgYW5kIGJhY2sgZW5kIHdvcmsuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc0NzUuCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisg
ICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2VTZXJ2
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQWJzdHJhY3REYXRhYmFzZVNlcnZl
cik6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EQkJhY2tlbmRTZXJ2ZXIuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvREJCYWNrZW5kU2VydmVyLmg6
IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dXZWJEYXRh
YmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3dXZWJEYXRhYmFzZTo6b3BlbkRh
dGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2U6OnZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6Om9wZW5BbmRW
ZXJpZnlWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpjbG9zZTEpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKERhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
QmFja2VuZC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvQWJzdHJhY3REYXRhYmFzZS5jcHAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlQmFja2VuZDo6ZGF0YWJhc2VJbmZvVGFibGVOYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZDo6RGF0YWJhc2VCYWNrZW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlQmFja2VuZDo6fkRhdGFiYXNlQmFja2VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZUJhY2tlbmQ6OmNsb3NlRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2VCYWNrZW5kOjp2ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFj
a2VuZDo6cGVyZm9ybU9wZW5BbmRWZXJpZnkpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VC
YWNrZW5kOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlQmFja2VuZDo6c2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VC
YWNrZW5kOjpzdHJpbmdJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFj
a2VuZDo6ZGlzcGxheU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kOjpl
c3RpbWF0ZWRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZDo6ZmlsZU5h
bWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kOjpkZXRhaWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZDo6Z2V0VmVyc2lvbkZyb21EYXRhYmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmQ6OnNldFZlcnNpb25JbkRhdGFiYXNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZDo6c2V0RXhwZWN0ZWRWZXJzaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZDo6Z2V0Q2FjaGVkVmVyc2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmQ6OnNldENhY2hlZFZlcnNpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kOjpnZXRBY3R1YWxWZXJzaW9uRm9yVHJhbnNh
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kOjpkaXNhYmxlQXV0aG9y
aXplcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmQ6OmVuYWJsZUF1dGhvcml6
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kOjpzZXRBdXRob3JpemVyUmVh
ZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kOjpzZXRBdXRob3JpemVy
UGVybWlzc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kOjpsYXN0QWN0
aW9uQ2hhbmdlZERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZDo6
bGFzdEFjdGlvbldhc0luc2VydCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmQ6
OnJlc2V0RGVsZXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmQ6OmhhZERl
bGV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kOjpyZXNldEF1dGhvcml6
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kOjptYXhpbXVtU2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmQ6OmluY3JlbWVudGFsVmFjdXVtSWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kOjppbnRlcnJ1cHQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kOjppc0ludGVycnVwdGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZDo6bG9nRXJyb3JNZXNzYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlQmFja2VuZDo6cmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZDo6cmVwb3J0Q2hhbmdlVmVyc2lvblJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmQ6OnJlcG9ydFN0YXJ0VHJhbnNhY3Rp
b25SZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kOjpyZXBvcnRDb21t
aXRUcmFuc2FjdGlvblJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmQ6
OnJlcG9ydEV4ZWN1dGVTdGF0ZW1lbnRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VCYWNrZW5kOjpyZXBvcnRWYWN1dW1EYXRhYmFzZVJlc3VsdCk6CisgICAgICAgICogTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmguCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKERhdGFiYXNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZUJhY2tlbmQ6OmRhdGFiYXNlQ29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZUJhY2tlbmRBc3luYy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmRBc3luYzo6RGF0YWJhc2VCYWNrZW5k
QXN5bmMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5
bmMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERhdGFiYXNlQmFja2Vu
ZEFzeW5jKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZENv
bnRleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2VCYWNrZW5kQ29udGV4dDo6c2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoRGF0YWJhc2VCYWNrZW5kQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmRDb250ZXh0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZFN5bmMuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNr
ZW5kU3luYzo6RGF0YWJhc2VCYWNrZW5kU3luYyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZUJhY2tlbmRTeW5jLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChEYXRhYmFzZUJhY2tlbmRTeW5jKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUNvbnRl
eHQ6OkRhdGFiYXNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUNvbnRleHQ6
OmJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZUNvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRGF0
YWJhc2VDb250ZXh0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlRXJy
b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1h
bmFnZXI6OkRhdGFiYXNlTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFn
ZXI6Om9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6Om9w
ZW5EYXRhYmFzZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpoYXNP
cGVuRGF0YWJhc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6ZGF0YWJh
c2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6aW50ZXJydXB0
QWxsRGF0YWJhc2VzRm9yQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFn
ZXI6OmdldE1heFNpemVGb3JEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1h
bmFnZXI6OmxvZ0Vycm9yTWVzc2FnZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZU1hbmFnZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRGF0YWJhc2VN
YW5hZ2VyKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EQkJhY2tl
bmRTZXJ2ZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTZXJ2ZXI6OmluaXRpYWxp
emUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTZXJ2ZXI6OnNldENsaWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZVNlcnZlcjo6ZGF0YWJhc2VEaXJlY3RvcnlQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU2VydmVyOjpzZXREYXRhYmFzZURpcmVjdG9yeVBhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTZXJ2ZXI6OmZ1bGxQYXRoRm9yRGF0YWJhc2Up
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTZXJ2ZXI6Omhhc0VudHJ5Rm9yT3JpZ2luKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU2VydmVyOjpvcmlnaW5zKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlU2VydmVyOjpkYXRhYmFzZU5hbWVzRm9yT3JpZ2luKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlU2VydmVyOjpkZXRhaWxzRm9yTmFtZUFuZE9yaWdpbik6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZVNlcnZlcjo6dXNhZ2VGb3JPcmlnaW4pOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2VTZXJ2ZXI6OnF1b3RhRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlU2VydmVyOjpzZXRRdW90YSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZVNlcnZlcjo6ZGVsZXRlQWxsRGF0YWJhc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
U2VydmVyOjpkZWxldGVPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTZXJ2ZXI6
OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU2VydmVyOjpzY2hl
ZHVsZU5vdGlmeURhdGFiYXNlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVNl
cnZlcjo6ZGF0YWJhc2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU2VydmVy
OjpjbG9zZURhdGFiYXNlc0ltbWVkaWF0ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
U2VydmVyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlU2VydmVyOjpvcGVuRGF0YWJhc2VBc3luYyk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZVNlcnZlcjo6cmV0cnlPcGVuRGF0YWJhc2VBc3luYyk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVNlcnZlcjo6Y3JlYXRlRGF0YWJhc2VBc3luYyk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVNlcnZlcjo6b3BlbkRhdGFiYXNlU3luYyk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZVNlcnZlcjo6cmV0cnlPcGVuRGF0YWJhc2VTeW5jKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTZXJ2ZXI6OmNyZWF0ZURhdGFiYXNlU3lu
Yyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVNlcnZlcjo6Z2V0TWF4U2l6ZUZvckRhdGFi
YXNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvREJCYWNrZW5kU2Vy
dmVyLmguCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuY3BwOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6OkRhdGFiYXNlU3luYyk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6On5EYXRhYmFzZVN5bmMpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2VTeW5jOjpjbG9zZUltbWVkaWF0ZWx5KToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChEYXRhYmFzZVN5bmMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VU
YXNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRhYmFzZU9wZW5UYXNrOjpE
YXRhYmFzZU9wZW5UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRhYmFzZU9w
ZW5UYXNrOjpkb1BlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRh
YmFzZUNsb3NlVGFzazo6ZG9QZXJmb3JtVGFzayk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZVRhc2suaDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRhYmFz
ZU9wZW5UYXNrOjpjcmVhdGUpOgorICAgICAgICAoRGF0YWJhc2U6OkRhdGFiYXNlT3BlblRhc2sp
OgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhyZWFkKToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6Om9wZW5UcmFja2VyRGF0YWJhc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2VUcmFja2VyOjpoYXNBZGVxdWF0ZVF1b3RhRm9yT3JpZ2luKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpjYW5Fc3Rh
Ymxpc2hEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnJldHJ5
Q2FuRXN0YWJsaXNoRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2Vy
OjpoYXNFbnRyeUZvckRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6Z2V0TWF4U2l6ZUZvckRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJh
Y2tlcjo6ZGF0YWJhc2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRyYWNrZXI6OmRhdGFiYXNlTmFtZXNGb3JPcmlnaW5Ob0xvY2spOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjphZGRPcGVuRGF0YWJhc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2VUcmFja2VyOjpkb25lQ3JlYXRpbmdEYXRhYmFzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmdldE9wZW5EYXRhYmFzZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2VUcmFja2VyOjp1c2FnZUZvck9yaWdpbk5vTG9jayk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmlzRGVsZXRpbmdEYXRhYmFzZU9yT3JpZ2luRm9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6Y2FuRGVsZXRlRGF0YWJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjppc0RlbGV0aW5nRGF0YWJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpjYW5EZWxldGVPcmlnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjppc0RlbGV0aW5nT3JpZ2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6cmVjb3JkRGVsZXRpbmdPcmlnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkb25lRGVsZXRpbmdPcmlnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZUZpbGUpOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKERhdGFiYXNlVHJhY2tlcik6CisgICAgICAgICogTW9kdWxlcy93
ZWJkYXRhYmFzZS9PcmlnaW5RdW90YU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T3Jp
Z2luUXVvdGFNYW5hZ2VyOjptYXJrRGF0YWJhc2UpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0
YWJhc2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KE9yaWdpblF1b3RhTWFuYWdlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxU
cmFuc2FjdGlvbi5jcHA6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2Fj
dGlvbkNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNsaWVudDo6
ZGlkQ29tbWl0V3JpdGVUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2Fj
dGlvbkNsaWVudDo6ZGlkRXhlY3V0ZVN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxU
cmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhjZWVkUXVvdGEpOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoU1FMVHJhbnNhY3Rpb25DbGllbnQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMVHJhbnNhY3Rpb25TeW5jLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNl
L1dvcmtlckNvbnRleHRXZWJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJD
b250ZXh0V2ViRGF0YWJhc2U6Om9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJDb250ZXh0V2ViRGF0YWJhc2U6Om9wZW5EYXRhYmFzZVN5bmMpOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VPYnNlcnZlci5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChEYXRhYmFzZU9ic2VydmVyKToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vdGlmeURhdGFiYXNlT2JzZXJ2ZXJPbkNsb3NlVGFzazo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vdGlmeURhdGFiYXNlT2JzZXJ2ZXJPbkNsb3NlVGFzazo6Tm90aWZ5RGF0
YWJhc2VPYnNlcnZlck9uQ2xvc2VUYXNrKToKKyAgICAgICAgKE5vdGlmeURhdGFiYXNlT2JzZXJ2
ZXJPbkNsb3NlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnJlbW92
ZU9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmdldE1h
eFNpemVGb3JEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OkNs
b3NlT25lRGF0YWJhc2VJbW1lZGlhdGVseVRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZVRyYWNrZXI6OkNsb3NlT25lRGF0YWJhc2VJbW1lZGlhdGVseVRhc2s6OkNsb3Nl
T25lRGF0YWJhc2VJbW1lZGlhdGVseVRhc2spOgorICAgICAgICAoRGF0YWJhc2VUcmFja2VyOjpD
bG9zZU9uZURhdGFiYXNlSW1tZWRpYXRlbHlUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVHJhY2tlcjo6Y2xvc2VPbmVEYXRhYmFzZUltbWVkaWF0ZWx5KToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1NRTFRyYW5zYWN0aW9uQ2xpZW50Q2hyb21pdW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZ5RGF0YWJhc2VDaGFuZ2VkVGFzazo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmeURhdGFiYXNlQ2hhbmdlZFRhc2s6Ok5vdGlmeURhdGFi
YXNlQ2hhbmdlZFRhc2spOgorICAgICAgICAoTm90aWZ5RGF0YWJhc2VDaGFuZ2VkVGFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkQ29tbWl0V3JpdGVUcmFu
c2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhl
Y3V0ZVN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNsaWVudDo6
ZGlkRXhjZWVkUXVvdGEpOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9EYXRhYmFzZVN0cmF0ZWd5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlU3RyYXRlZ3k6OmdldERhdGFiYXNlU2VydmVyKToKKwogMjAxMy0w
MS0yOSAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFY
OiBBZGQgc3VwcG9ydCBmb3IgYXJpYS1hdXRvY29tcGxldGU9Imxpc3QiIG9uIEFSSUEgY29tYm9i
b3gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRh
YmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9BYnN0cmFjdERhdGFiYXNlLmNwcAkocmV2aXNpb24gMTQxMTgxKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2MTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBYnN0
cmFjdERhdGFiYXNlLmgiCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAi
RGF0YWJhc2VBdXRob3JpemVyLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VDb250ZXh0LmgiCi0jaW5j
bHVkZSAiRGF0YWJhc2VNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKLSNpbmNsdWRl
ICJTUUxpdGVUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgotI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
LSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotI2lmIFBMQVRGT1JNKENIUk9N
SVVNKQotI2luY2x1ZGUgIkRhdGFiYXNlT2JzZXJ2ZXIuaCIgLy8gRm9yIGVycm9yIHJlcG9ydGlu
Zy4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyIHZl
cnNpb25LZXlbXSA9ICJXZWJLaXREYXRhYmFzZVZlcnNpb25LZXkiOwotc3RhdGljIGNvbnN0IGNo
YXIgaW5mb1RhYmxlTmFtZVtdID0gIl9fV2ViS2l0RGF0YWJhc2VJbmZvVGFibGVfXyI7Ci0KLXN0
YXRpYyBTdHJpbmcgZm9ybWF0RXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIG1lc3NhZ2UsIGludCBz
cWxpdGVFcnJvckNvZGUsIGNvbnN0IGNoYXIqIHNxbGl0ZUVycm9yTWVzc2FnZSkKLXsKLSAgICBy
ZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiVzICglZCAlcykiLCBtZXNzYWdlLCBzcWxpdGVFcnJvckNv
ZGUsIHNxbGl0ZUVycm9yTWVzc2FnZSk7Ci19Ci0KLXN0YXRpYyBib29sIHJldHJpZXZlVGV4dFJl
c3VsdEZyb21EYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnks
IFN0cmluZyYgcmVzdWx0U3RyaW5nKQotewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQo
ZGIsIHF1ZXJ5KTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLQotICAg
IGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0T2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJFcnJvciAo
JWkpIHByZXBhcmluZyBzdGF0ZW1lbnQgdG8gcmVhZCB0ZXh0IHJlc3VsdCBmcm9tIGRhdGFiYXNl
ICglcykiLCByZXN1bHQsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0gICAgaWYgKHJl
c3VsdCA9PSBTUUxSZXN1bHRSb3cpIHsKLSAgICAgICAgcmVzdWx0U3RyaW5nID0gc3RhdGVtZW50
LmdldENvbHVtblRleHQoMCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAo
cmVzdWx0ID09IFNRTFJlc3VsdERvbmUpIHsKLSAgICAgICAgcmVzdWx0U3RyaW5nID0gU3RyaW5n
KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIExPR19FUlJPUigiRXJyb3Ig
KCVpKSByZWFkaW5nIHRleHQgcmVzdWx0IGZyb20gZGF0YWJhc2UgKCVzKSIsIHJlc3VsdCwgcXVl
cnkuYXNjaWkoKS5kYXRhKCkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wg
c2V0VGV4dFZhbHVlSW5EYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYg
cXVlcnksIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudChkYiwgcXVlcnkpOwotICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOwot
Ci0gICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgewotICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBzZXQgdmFsdWUgaW4gZGF0YWJhc2UgKCVzKSIs
IHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCB2YWx1ZSk7Ci0KLSAgICByZXN1bHQgPSBzdGF0ZW1l
bnQuc3RlcCgpOwotICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkgewotICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBzdGVwIHN0YXRlbWVudCB0byBzZXQgdmFsdWUgaW4gZGF0YWJh
c2UgKCVzKSIsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBGSVhNRTogbW92ZSBhbGwgZ3VpZC1y
ZWxhdGVkIGZ1bmN0aW9ucyB0byBhIERhdGFiYXNlVmVyc2lvblRyYWNrZXIgY2xhc3MuCi1zdGF0
aWMgTXV0ZXgmIGd1aWRNdXRleCgpCi17Ci0gICAgQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGlj
KE11dGV4JiwgbXV0ZXggPSAqbmV3IE11dGV4KTsKLSAgICByZXR1cm4gbXV0ZXg7Ci19Ci0KLXR5
cGVkZWYgSGFzaE1hcDxEYXRhYmFzZUd1aWQsIFN0cmluZz4gR3VpZFZlcnNpb25NYXA7Ci1zdGF0
aWMgR3VpZFZlcnNpb25NYXAmIGd1aWRUb1ZlcnNpb25NYXAoKQotewotICAgIC8vIEVuc3VyZSB0
aGUgdGhlIG11dGV4IGlzIGxvY2tlZC4KLSAgICBBU1NFUlQoIWd1aWRNdXRleCgpLnRyeUxvY2so
KSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChHdWlkVmVyc2lvbk1hcCwgbWFwLCAoKSk7Ci0g
ICAgcmV0dXJuIG1hcDsKLX0KLQotLy8gTk9URTogQ2FsbGVyIG11c3QgbG9jayBndWlkTXV0ZXgo
KS4KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVHdWlkVmVyc2lvbk1hcChEYXRhYmFzZUd1aWQg
Z3VpZCwgU3RyaW5nIG5ld1ZlcnNpb24pCi17Ci0gICAgLy8gRW5zdXJlIHRoZSB0aGUgbXV0ZXgg
aXMgbG9ja2VkLgotICAgIEFTU0VSVCghZ3VpZE11dGV4KCkudHJ5TG9jaygpKTsKLQotICAgIC8v
IE5vdGU6IEl0IGlzIG5vdCBzYWZlIHRvIHB1dCBhbiBlbXB0eSBzdHJpbmcgaW50byB0aGUgZ3Vp
ZFRvVmVyc2lvbk1hcCgpIG1hcC4KLSAgICAvLyBUaGF0J3MgYmVjYXVzZSB0aGUgbWFwIGlzIGNy
b3NzLXRocmVhZCwgYnV0IGVtcHR5IHN0cmluZ3MgYXJlIHBlci10aHJlYWQuCi0gICAgLy8gVGhl
IGNvcHkoKSBmdW5jdGlvbiBtYWtlcyBhIHZlcnNpb24gb2YgdGhlIHN0cmluZyB5b3UgY2FuIHVz
ZSBvbiB0aGUgY3VycmVudAotICAgIC8vIHRocmVhZCwgYnV0IHdlIG5lZWQgYSBzdHJpbmcgd2Ug
Y2FuIGtlZXAgaW4gYSBjcm9zcy10aHJlYWQgZGF0YSBzdHJ1Y3R1cmUuCi0gICAgLy8gRklYTUU6
IFRoaXMgaXMgYSBxdWl0ZS1hd2t3YXJkIHJlc3RyaWN0aW9uIHRvIGhhdmUgdG8gcHJvZ3JhbSB3
aXRoLgotCi0gICAgLy8gTWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5IHN0cmluZyAoc2VlIGNvbW1l
bnQgYWJvdmUpLgotICAgIGd1aWRUb1ZlcnNpb25NYXAoKS5zZXQoZ3VpZCwgbmV3VmVyc2lvbi5p
c0VtcHR5KCkgPyBTdHJpbmcoKSA6IG5ld1ZlcnNpb24uaXNvbGF0ZWRDb3B5KCkpOwotfQotCi10
eXBlZGVmIEhhc2hNYXA8RGF0YWJhc2VHdWlkLCBIYXNoU2V0PEFic3RyYWN0RGF0YWJhc2UqPio+
IEd1aWREYXRhYmFzZU1hcDsKLXN0YXRpYyBHdWlkRGF0YWJhc2VNYXAmIGd1aWRUb0RhdGFiYXNl
TWFwKCkKLXsKLSAgICAvLyBFbnN1cmUgdGhlIHRoZSBtdXRleCBpcyBsb2NrZWQuCi0gICAgQVNT
RVJUKCFndWlkTXV0ZXgoKS50cnlMb2NrKCkpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoR3Vp
ZERhdGFiYXNlTWFwLCBtYXAsICgpKTsKLSAgICByZXR1cm4gbWFwOwotfQotCi1zdGF0aWMgRGF0
YWJhc2VHdWlkIGd1aWRGb3JPcmlnaW5BbmROYW1lKGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25z
dCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgLy8gRW5zdXJlIHRoZSB0aGUgbXV0ZXggaXMgbG9ja2Vk
LgotICAgIEFTU0VSVCghZ3VpZE11dGV4KCkudHJ5TG9jaygpKTsKLQotICAgIFN0cmluZyBzdHJp
bmdJRCA9IG9yaWdpbiArICIvIiArIG5hbWU7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5n
LCBpbnQ+IElER3VpZE1hcDsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKElER3VpZE1hcCwgc3Ry
aW5nSWRlbnRpZmllclRvR1VJRE1hcCwgKCkpOwotICAgIERhdGFiYXNlR3VpZCBndWlkID0gc3Ry
aW5nSWRlbnRpZmllclRvR1VJRE1hcC5nZXQoc3RyaW5nSUQpOwotICAgIGlmICghZ3VpZCkgewot
ICAgICAgICBzdGF0aWMgaW50IGN1cnJlbnROZXdHVUlEID0gMTsKLSAgICAgICAgZ3VpZCA9IGN1
cnJlbnROZXdHVUlEKys7Ci0gICAgICAgIHN0cmluZ0lkZW50aWZpZXJUb0dVSURNYXAuc2V0KHN0
cmluZ0lELCBndWlkKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZ3VpZDsKLX0KLQotLy8gc3RhdGlj
Ci1jb25zdCBjaGFyKiBBYnN0cmFjdERhdGFiYXNlOjpkYXRhYmFzZUluZm9UYWJsZU5hbWUoKQot
ewotICAgIHJldHVybiBpbmZvVGFibGVOYW1lOwotfQotCi1BYnN0cmFjdERhdGFiYXNlOjpBYnN0
cmFjdERhdGFiYXNlKFBhc3NSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBkYXRhYmFzZUNvbnRleHQs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUs
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgRGF0YWJhc2VUeXBlIGRhdGFiYXNlVHlwZSkK
LSAgICA6IG1fZGF0YWJhc2VDb250ZXh0KGRhdGFiYXNlQ29udGV4dCkKLSAgICAsIG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dChtX2RhdGFiYXNlQ29udGV4dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKQotICAgICwgbV9uYW1lKG5hbWUuaXNvbGF0ZWRDb3B5KCkpCi0gICAgLCBtX2V4cGVjdGVk
VmVyc2lvbihleHBlY3RlZFZlcnNpb24uaXNvbGF0ZWRDb3B5KCkpCi0gICAgLCBtX2Rpc3BsYXlO
YW1lKGRpc3BsYXlOYW1lLmlzb2xhdGVkQ29weSgpKQotICAgICwgbV9lc3RpbWF0ZWRTaXplKGVz
dGltYXRlZFNpemUpCi0gICAgLCBtX2d1aWQoMCkKLSAgICAsIG1fb3BlbmVkKGZhbHNlKQotICAg
ICwgbV9uZXcoZmFsc2UpCi0gICAgLCBtX2lzU3luY0RhdGFiYXNlKGRhdGFiYXNlVHlwZSA9PSBT
eW5jRGF0YWJhc2UpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VDb250ZXh0LT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBtX2NvbnRleHRUaHJlYWRT
ZWN1cml0eU9yaWdpbiA9IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4o
KS0+aXNvbGF0ZWRDb3B5KCk7Ci0KLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplciA9IERhdGFiYXNl
QXV0aG9yaXplcjo6Y3JlYXRlKGluZm9UYWJsZU5hbWUpOwotCi0gICAgaWYgKG1fbmFtZS5pc051
bGwoKSkKLSAgICAgICAgbV9uYW1lID0gIiI7Ci0KLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0gICAgICAgIG1fZ3VpZCA9IGd1aWRGb3JPcmlnaW5BbmRO
YW1lKHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG5hbWUpOwotICAgICAgICBIYXNoU2V0
PEFic3RyYWN0RGF0YWJhc2UqPiogaGFzaFNldCA9IGd1aWRUb0RhdGFiYXNlTWFwKCkuZ2V0KG1f
Z3VpZCk7Ci0gICAgICAgIGlmICghaGFzaFNldCkgewotICAgICAgICAgICAgaGFzaFNldCA9IG5l
dyBIYXNoU2V0PEFic3RyYWN0RGF0YWJhc2UqPjsKLSAgICAgICAgICAgIGd1aWRUb0RhdGFiYXNl
TWFwKCkuc2V0KG1fZ3VpZCwgaGFzaFNldCk7Ci0gICAgICAgIH0KLQotICAgICAgICBoYXNoU2V0
LT5hZGQodGhpcyk7Ci0gICAgfQotCi0gICAgbV9maWxlbmFtZSA9IERhdGFiYXNlTWFuYWdlcjo6
bWFuYWdlcigpLmZ1bGxQYXRoRm9yRGF0YWJhc2Uoc2VjdXJpdHlPcmlnaW4oKSwgbV9uYW1lKTsK
LSAgICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5hZGRPcGVuRGF0YWJhc2UodGhpcyk7Ci19
Ci0KLUFic3RyYWN0RGF0YWJhc2U6On5BYnN0cmFjdERhdGFiYXNlKCkKLXsKLSAgICBBU1NFUlQo
IW1fb3BlbmVkKTsKLX0KLQotdm9pZCBBYnN0cmFjdERhdGFiYXNlOjpjbG9zZURhdGFiYXNlKCkK
LXsKLSAgICBpZiAoIW1fb3BlbmVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NxbGl0ZURh
dGFiYXNlLmNsb3NlKCk7Ci0gICAgbV9vcGVuZWQgPSBmYWxzZTsKLSAgICB7Ci0gICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0KLSAgICAgICAgSGFzaFNldDxBYnN0cmFj
dERhdGFiYXNlKj4qIGhhc2hTZXQgPSBndWlkVG9EYXRhYmFzZU1hcCgpLmdldChtX2d1aWQpOwot
ICAgICAgICBBU1NFUlQoaGFzaFNldCk7Ci0gICAgICAgIEFTU0VSVChoYXNoU2V0LT5jb250YWlu
cyh0aGlzKSk7Ci0gICAgICAgIGhhc2hTZXQtPnJlbW92ZSh0aGlzKTsKLSAgICAgICAgaWYgKGhh
c2hTZXQtPmlzRW1wdHkoKSkgewotICAgICAgICAgICAgZ3VpZFRvRGF0YWJhc2VNYXAoKS5yZW1v
dmUobV9ndWlkKTsKLSAgICAgICAgICAgIGRlbGV0ZSBoYXNoU2V0OwotICAgICAgICAgICAgZ3Vp
ZFRvVmVyc2lvbk1hcCgpLnJlbW92ZShtX2d1aWQpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1T
dHJpbmcgQWJzdHJhY3REYXRhYmFzZTo6dmVyc2lvbigpIGNvbnN0Ci17Ci0gICAgLy8gTm90ZTog
SW4gbXVsdGktcHJvY2VzcyBicm93c2VycyB0aGUgY2FjaGVkIHZhbHVlIG1heSBiZSBhY2N1cmF0
ZSwgYnV0IHdlIGNhbm5vdCByZWFkIHRoZQotICAgIC8vIGFjdHVhbCB2ZXJzaW9uIGZyb20gdGhl
IGRhdGFiYXNlIHdpdGhvdXQgcG90ZW50aWFsbHkgaW5kdWNpbmcgYSBkZWFkbG9jay4KLSAgICAv
LyBGSVhNRTogQWRkIGFuIGFzeW5jIHZlcnNpb24gZ2V0dGVyIHRvIHRoZSBEYXRhYmFzZUFQSS4K
LSAgICByZXR1cm4gZ2V0Q2FjaGVkVmVyc2lvbigpOwotfQotCi1ib29sIEFic3RyYWN0RGF0YWJh
c2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2hvdWxkU2V0VmVyc2lvbkluTmV3RGF0YWJh
c2UsIEV4Y2VwdGlvbkNvZGUmIGVjLCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKLXsKLSAgICBBU1NF
UlQoZXJyb3JNZXNzYWdlLmlzRW1wdHkoKSk7Ci0KLSAgICBjb25zdCBpbnQgbWF4U3FsaXRlQnVz
eVdhaXRUaW1lID0gMzAwMDA7Ci0KLSAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2Uub3BlbihtX2Zp
bGVuYW1lLCB0cnVlKSkgewotICAgICAgICByZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQoMSwgSU5W
QUxJRF9TVEFURV9FUlIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCkpOwotICAgICAgICBl
cnJvck1lc3NhZ2UgPSBmb3JtYXRFcnJvck1lc3NhZ2UoInVuYWJsZSB0byBvcGVuIGRhdGFiYXNl
IiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLnR1cm5PbkluY3JlbWVu
dGFsQXV0b1ZhY3V1bSgpKQotICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byB0dXJuIG9uIGlu
Y3JlbWVudGFsIGF1dG8tdmFjdXVtICglZCAlcykiLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJv
cigpLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLQotICAgIG1fc3FsaXRlRGF0
YWJhc2Uuc2V0QnVzeVRpbWVvdXQobWF4U3FsaXRlQnVzeVdhaXRUaW1lKTsKLQotICAgIFN0cmlu
ZyBjdXJyZW50VmVyc2lvbjsKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlk
TXV0ZXgoKSk7Ci0KLSAgICAgICAgR3VpZFZlcnNpb25NYXA6Oml0ZXJhdG9yIGVudHJ5ID0gZ3Vp
ZFRvVmVyc2lvbk1hcCgpLmZpbmQobV9ndWlkKTsKLSAgICAgICAgaWYgKGVudHJ5ICE9IGd1aWRU
b1ZlcnNpb25NYXAoKS5lbmQoKSkgewotICAgICAgICAgICAgLy8gTWFwIG51bGwgc3RyaW5nIHRv
IGVtcHR5IHN0cmluZyAoc2VlIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKCkpLgotICAgICAgICAgICAg
Y3VycmVudFZlcnNpb24gPSBlbnRyeS0+dmFsdWUuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDog
ZW50cnktPnZhbHVlLmlzb2xhdGVkQ29weSgpOwotICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEks
ICJDdXJyZW50IGNhY2hlZCB2ZXJzaW9uIGZvciBndWlkICVpIGlzICVzIiwgbV9ndWlkLCBjdXJy
ZW50VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSk7Ci0KLSNpZiBQTEFURk9STShDSFJPTUlVTSkKLSAg
ICAgICAgICAgIC8vIE5vdGU6IEluIG11bHRpLXByb2Nlc3MgYnJvd3NlcnMgdGhlIGNhY2hlZCB2
YWx1ZSBtYXkgYmUgaW5hY2N1cmF0ZSwgYnV0Ci0gICAgICAgICAgICAvLyB3ZSBjYW5ub3QgcmVh
ZCB0aGUgYWN0dWFsIHZlcnNpb24gZnJvbSB0aGUgZGF0YWJhc2Ugd2l0aG91dCBwb3RlbnRpYWxs
eQotICAgICAgICAgICAgLy8gaW5kdWNpbmcgYSBmb3JtIG9mIGRlYWRsb2NrLCBhIGJ1c3l0aW1l
b3V0IGVycm9yIHdoZW4gdHJ5aW5nIHRvCi0gICAgICAgICAgICAvLyBhY2Nlc3MgdGhlIGRhdGFi
YXNlLiBTbyB3ZSdsbCB1c2UgdGhlIGNhY2hlZCB2YWx1ZSBpZiB3ZSdyZSB1bmFibGUgdG8gcmVh
ZAotICAgICAgICAgICAgLy8gdGhlIHZhbHVlIGZyb20gdGhlIGRhdGFiYXNlIGZpbGUgd2l0aG91
dCB3YWl0aW5nLgotICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBhbiBhc3luYyBvcGVuRGF0YWJh
c2UgbWV0aG9kIHRvIHRoZSBEYXRhYmFzZUFQSS4KLSAgICAgICAgICAgIGNvbnN0IGludCBub1Nx
bGl0ZUJ1c3lXYWl0VGltZSA9IDA7Ci0gICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLnNldEJ1
c3lUaW1lb3V0KG5vU3FsaXRlQnVzeVdhaXRUaW1lKTsKLSAgICAgICAgICAgIFN0cmluZyB2ZXJz
aW9uRnJvbURhdGFiYXNlOwotICAgICAgICAgICAgaWYgKGdldFZlcnNpb25Gcm9tRGF0YWJhc2Uo
dmVyc2lvbkZyb21EYXRhYmFzZSwgZmFsc2UpKSB7Ci0gICAgICAgICAgICAgICAgY3VycmVudFZl
cnNpb24gPSB2ZXJzaW9uRnJvbURhdGFiYXNlOwotICAgICAgICAgICAgICAgIHVwZGF0ZUd1aWRW
ZXJzaW9uTWFwKG1fZ3VpZCwgY3VycmVudFZlcnNpb24pOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbV9zcWxpdGVEYXRhYmFzZS5zZXRCdXN5VGltZW91dChtYXhTcWxpdGVCdXN5V2FpdFRp
bWUpOwotI2VuZGlmCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMT0coU3RvcmFnZUFQ
SSwgIk5vIGNhY2hlZCB2ZXJzaW9uIGZvciBndWlkICVpIiwgbV9ndWlkKTsKLQotICAgICAgICAg
ICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9zcWxpdGVEYXRhYmFzZSk7Ci0gICAg
ICAgICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwotICAgICAgICAgICAgaWYgKCF0cmFuc2FjdGlv
bi5pblByb2dyZXNzKCkpIHsKLSAgICAgICAgICAgICAgICByZXBvcnRPcGVuRGF0YWJhc2VSZXN1
bHQoMiwgSU5WQUxJRF9TVEFURV9FUlIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCkpOwot
ICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGZvcm1hdEVycm9yTWVzc2FnZSgidW5hYmxl
IHRvIG9wZW4gZGF0YWJhc2UsIGZhaWxlZCB0byBzdGFydCB0cmFuc2FjdGlvbiIsIG1fc3FsaXRl
RGF0YWJhc2UubGFzdEVycm9yKCksIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwot
ICAgICAgICAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgICAgICAgICAg
bV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZShpbmZvVGFibGVO
YW1lKTsKLSAgICAgICAgICAgIGlmICghbV9zcWxpdGVEYXRhYmFzZS50YWJsZUV4aXN0cyh0YWJs
ZU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgbV9uZXcgPSB0cnVlOwotCi0gICAgICAgICAgICAg
ICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgIiAr
IHRhYmxlTmFtZSArICIgKGtleSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVF
IE9OIENPTkZMSUNUIFJFUExBQ0UsdmFsdWUgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlM
KTsiKSkgewotICAgICAgICAgICAgICAgICAgICByZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQoMywg
SU5WQUxJRF9TVEFURV9FUlIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCkpOwotICAgICAg
ICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBmb3JtYXRFcnJvck1lc3NhZ2UoInVuYWJsZSB0
byBvcGVuIGRhdGFiYXNlLCBmYWlsZWQgdG8gY3JlYXRlICdpbmZvJyB0YWJsZSIsIG1fc3FsaXRl
RGF0YWJhc2UubGFzdEVycm9yKCksIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwot
ICAgICAgICAgICAgICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICAgICAg
ICAgICAgICB0cmFuc2FjdGlvbi5yb2xsYmFjaygpOwotICAgICAgICAgICAgICAgICAgICBtX3Nx
bGl0ZURhdGFiYXNlLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFnZXRWZXJzaW9uRnJv
bURhdGFiYXNlKGN1cnJlbnRWZXJzaW9uLCBmYWxzZSkpIHsKLSAgICAgICAgICAgICAgICByZXBv
cnRPcGVuRGF0YWJhc2VSZXN1bHQoNCwgSU5WQUxJRF9TVEFURV9FUlIsIG1fc3FsaXRlRGF0YWJh
c2UubGFzdEVycm9yKCkpOwotICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGZvcm1hdEVy
cm9yTWVzc2FnZSgidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UsIGZhaWxlZCB0byByZWFkIGN1cnJl
bnQgdmVyc2lvbiIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCksIG1fc3FsaXRlRGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9F
UlI7Ci0gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ucm9sbGJhY2soKTsKLSAgICAgICAgICAg
ICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY3VycmVudFZlcnNpb24ubGVu
Z3RoKCkpIHsKLSAgICAgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlJldHJpZXZlZCBjdXJy
ZW50IHZlcnNpb24gJXMgZnJvbSBkYXRhYmFzZSAlcyIsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCku
ZGF0YSgpLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoIW1fbmV3IHx8IHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlKSB7Ci0g
ICAgICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTZXR0aW5nIHZlcnNpb24gJXMgaW4gZGF0
YWJhc2UgJXMgdGhhdCB3YXMganVzdCBjcmVhdGVkIiwgbV9leHBlY3RlZFZlcnNpb24uYXNjaWko
KS5kYXRhKCksIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAg
ICAgICAgIGlmICghc2V0VmVyc2lvbkluRGF0YWJhc2UobV9leHBlY3RlZFZlcnNpb24sIGZhbHNl
KSkgewotICAgICAgICAgICAgICAgICAgICByZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQoNSwgSU5W
QUxJRF9TVEFURV9FUlIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCkpOwotICAgICAgICAg
ICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBmb3JtYXRFcnJvck1lc3NhZ2UoInVuYWJsZSB0byBv
cGVuIGRhdGFiYXNlLCBmYWlsZWQgdG8gd3JpdGUgY3VycmVudCB2ZXJzaW9uIiwgbV9zcWxpdGVE
YXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgICAgICAg
ICAgICAgIHRyYW5zYWN0aW9uLnJvbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3Fs
aXRlRGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IG1fZXhw
ZWN0ZWRWZXJzaW9uOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdXBkYXRlR3VpZFZlcnNp
b25NYXAobV9ndWlkLCBjdXJyZW50VmVyc2lvbik7Ci0gICAgICAgICAgICB0cmFuc2FjdGlvbi5j
b21taXQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChjdXJyZW50VmVyc2lvbi5pc051
bGwoKSkgewotICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkRhdGFiYXNlICVzIGRvZXMgbm90IGhh
dmUgaXRzIHZlcnNpb24gc2V0IiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7
Ci0gICAgICAgIGN1cnJlbnRWZXJzaW9uID0gIiI7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIGV4
cGVjdGVkIHZlcnNpb24gaXNuJ3QgdGhlIGVtcHR5IHN0cmluZywgZW5zdXJlIHRoYXQgdGhlIGN1
cnJlbnQgZGF0YWJhc2UgdmVyc2lvbiB3ZSBoYXZlIG1hdGNoZXMgdGhhdCB2ZXJzaW9uLiBPdGhl
cndpc2UsIHNldCBhbiBleGNlcHRpb24uCi0gICAgLy8gSWYgdGhlIGV4cGVjdGVkIHZlcnNpb24g
aXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbiB3ZSBhbHdheXMgcmV0dXJuIHdpdGggd2hhdGV2ZXIg
dmVyc2lvbiBvZiB0aGUgZGF0YWJhc2Ugd2UgaGF2ZS4KLSAgICBpZiAoKCFtX25ldyB8fCBzaG91
bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSkgJiYgbV9leHBlY3RlZFZlcnNpb24ubGVuZ3RoKCkg
JiYgbV9leHBlY3RlZFZlcnNpb24gIT0gY3VycmVudFZlcnNpb24pIHsKLSAgICAgICAgcmVwb3J0
T3BlbkRhdGFiYXNlUmVzdWx0KDYsIElOVkFMSURfU1RBVEVfRVJSLCAwKTsKLSAgICAgICAgZXJy
b3JNZXNzYWdlID0gInVuYWJsZSB0byBvcGVuIGRhdGFiYXNlLCB2ZXJzaW9uIG1pc21hdGNoLCAn
IiArIG1fZXhwZWN0ZWRWZXJzaW9uICsgIicgZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnRWZXJz
aW9uIG9mICciICsgY3VycmVudFZlcnNpb24gKyAiJyI7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9T
VEFURV9FUlI7Ci0gICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7Ci0g
ICAgbV9zcWxpdGVEYXRhYmFzZS5zZXRBdXRob3JpemVyKG1fZGF0YWJhc2VBdXRob3JpemVyKTsK
LQotICAgIG1fb3BlbmVkID0gdHJ1ZTsKLQotICAgIGlmIChtX25ldyAmJiAhc2hvdWxkU2V0VmVy
c2lvbkluTmV3RGF0YWJhc2UpCi0gICAgICAgIG1fZXhwZWN0ZWRWZXJzaW9uID0gIiI7IC8vIFRo
ZSBjYWxsZXIgcHJvdmlkZWQgYSBjcmVhdGlvbkNhbGxiYWNrIHdoaWNoIHdpbGwgc2V0IHRoZSBl
eHBlY3RlZCB2ZXJzaW9uLgotCi0gICAgcmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KDAsIC0xLCAw
KTsgLy8gT0sKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
QWJzdHJhY3REYXRhYmFzZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKTsKLX0KLQotU2VjdXJpdHlPcmln
aW4qIEFic3RyYWN0RGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4uZ2V0KCk7Ci19Ci0KLVN0cmluZyBBYnN0
cmFjdERhdGFiYXNlOjpzdHJpbmdJZGVudGlmaWVyKCkgY29uc3QKLXsKLSAgICAvLyBSZXR1cm4g
YSBkZWVwIGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQgc2FmZXR5Ci0gICAgcmV0dXJuIG1f
bmFtZS5pc29sYXRlZENvcHkoKTsKLX0KLQotU3RyaW5nIEFic3RyYWN0RGF0YWJhc2U6OmRpc3Bs
YXlOYW1lKCkgY29uc3QKLXsKLSAgICAvLyBSZXR1cm4gYSBkZWVwIGNvcHkgZm9yIHJlZiBjb3Vu
dGluZyB0aHJlYWQgc2FmZXR5Ci0gICAgcmV0dXJuIG1fZGlzcGxheU5hbWUuaXNvbGF0ZWRDb3B5
KCk7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgQWJzdHJhY3REYXRhYmFzZTo6ZXN0aW1hdGVkU2l6ZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZXN0aW1hdGVkU2l6ZTsKLX0KLQotU3RyaW5nIEFic3Ry
YWN0RGF0YWJhc2U6OmZpbGVOYW1lKCkgY29uc3QKLXsKLSAgICAvLyBSZXR1cm4gYSBkZWVwIGNv
cHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQgc2FmZXR5Ci0gICAgcmV0dXJuIG1fZmlsZW5hbWUu
aXNvbGF0ZWRDb3B5KCk7Ci19Ci0KLURhdGFiYXNlRGV0YWlscyBBYnN0cmFjdERhdGFiYXNlOjpk
ZXRhaWxzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRGF0YWJhc2VEZXRhaWxzKHN0cmluZ0lkZW50
aWZpZXIoKSwgZGlzcGxheU5hbWUoKSwgZXN0aW1hdGVkU2l6ZSgpLCAwKTsKLX0KLQotYm9vbCBB
YnN0cmFjdERhdGFiYXNlOjpnZXRWZXJzaW9uRnJvbURhdGFiYXNlKFN0cmluZyYgdmVyc2lvbiwg
Ym9vbCBzaG91bGRDYWNoZVZlcnNpb24pCi17Ci0gICAgU3RyaW5nIHF1ZXJ5KFN0cmluZygiU0VM
RUNUIHZhbHVlIEZST00gIikgKyBpbmZvVGFibGVOYW1lICsgICIgV0hFUkUga2V5ID0gJyIgKyB2
ZXJzaW9uS2V5ICsgIic7Iik7Ci0KLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgp
OwotCi0gICAgYm9vbCByZXN1bHQgPSByZXRyaWV2ZVRleHRSZXN1bHRGcm9tRGF0YWJhc2UobV9z
cWxpdGVEYXRhYmFzZSwgcXVlcnksIHZlcnNpb24pOwotICAgIGlmIChyZXN1bHQpIHsKLSAgICAg
ICAgaWYgKHNob3VsZENhY2hlVmVyc2lvbikKLSAgICAgICAgICAgIHNldENhY2hlZFZlcnNpb24o
dmVyc2lvbik7Ci0gICAgfSBlbHNlCi0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJldHJp
ZXZlIHZlcnNpb24gZnJvbSBkYXRhYmFzZSAlcyIsIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWko
KS5kYXRhKCkpOwotCi0gICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmVuYWJsZSgpOwotCi0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpzZXRWZXJzaW9uSW5E
YXRhYmFzZShjb25zdCBTdHJpbmcmIHZlcnNpb24sIGJvb2wgc2hvdWxkQ2FjaGVWZXJzaW9uKQot
ewotICAgIC8vIFRoZSBJTlNFUlQgd2lsbCByZXBsYWNlIGFuIGV4aXN0aW5nIGVudHJ5IGZvciB0
aGUgZGF0YWJhc2Ugd2l0aCB0aGUgbmV3IHZlcnNpb24gbnVtYmVyLCBkdWUgdG8gdGhlIFVOSVFV
RSBPTiBDT05GTElDVCBSRVBMQUNFCi0gICAgLy8gY2xhdXNlIGluIHRoZSBDUkVBVEUgc3RhdGVt
ZW50IChzZWUgRGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KCkpLgotICAgIFN0cmluZyBx
dWVyeShTdHJpbmcoIklOU0VSVCBJTlRPICIpICsgaW5mb1RhYmxlTmFtZSArICAiIChrZXksIHZh
bHVlKSBWQUxVRVMgKCciICsgdmVyc2lvbktleSArICInLCA/KTsiKTsKLQotICAgIG1fZGF0YWJh
c2VBdXRob3JpemVyLT5kaXNhYmxlKCk7Ci0KLSAgICBib29sIHJlc3VsdCA9IHNldFRleHRWYWx1
ZUluRGF0YWJhc2UobV9zcWxpdGVEYXRhYmFzZSwgcXVlcnksIHZlcnNpb24pOwotICAgIGlmIChy
ZXN1bHQpIHsKLSAgICAgICAgaWYgKHNob3VsZENhY2hlVmVyc2lvbikKLSAgICAgICAgICAgIHNl
dENhY2hlZFZlcnNpb24odmVyc2lvbik7Ci0gICAgfSBlbHNlCi0gICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIHNldCB2ZXJzaW9uICVzIGluIGRhdGFiYXNlICglcykiLCB2ZXJzaW9uLmFzY2lp
KCkuZGF0YSgpLCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7Ci0KLSAgICBtX2RhdGFiYXNlQXV0aG9y
aXplci0+ZW5hYmxlKCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEFic3RyYWN0
RGF0YWJhc2U6OnNldEV4cGVjdGVkVmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24pCi17Ci0g
ICAgbV9leHBlY3RlZFZlcnNpb24gPSB2ZXJzaW9uLmlzb2xhdGVkQ29weSgpOwotfQotCi1TdHJp
bmcgQWJzdHJhY3REYXRhYmFzZTo6Z2V0Q2FjaGVkVmVyc2lvbigpIGNvbnN0Ci17Ci0gICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKLSAgICByZXR1cm4gZ3VpZFRvVmVyc2lvbk1h
cCgpLmdldChtX2d1aWQpLmlzb2xhdGVkQ29weSgpOwotfQotCi12b2lkIEFic3RyYWN0RGF0YWJh
c2U6OnNldENhY2hlZFZlcnNpb24oY29uc3QgU3RyaW5nJiBhY3R1YWxWZXJzaW9uKQotewotICAg
IC8vIFVwZGF0ZSB0aGUgaW4gbWVtb3J5IGRhdGFiYXNlIHZlcnNpb24gbWFwLgotICAgIE11dGV4
TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0gICAgdXBkYXRlR3VpZFZlcnNpb25NYXAobV9n
dWlkLCBhY3R1YWxWZXJzaW9uKTsKLX0KLQotYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpnZXRBY3R1
YWxWZXJzaW9uRm9yVHJhbnNhY3Rpb24oU3RyaW5nICZhY3R1YWxWZXJzaW9uKQotewotICAgIEFT
U0VSVChtX3NxbGl0ZURhdGFiYXNlLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKLSNpZiBQTEFU
Rk9STShDSFJPTUlVTSkKLSAgICAvLyBOb3RlOiBJbiBtdWx0aS1wcm9jZXNzIGJyb3dzZXJzIHRo
ZSBjYWNoZWQgdmFsdWUgbWF5IGJlIGluYWNjdXJhdGUuCi0gICAgLy8gU28gd2UgcmV0cmlldmUg
dGhlIHZhbHVlIGZyb20gdGhlIGRhdGFiYXNlIGFuZCB1cGRhdGUgdGhlIGNhY2hlZCB2YWx1ZSBo
ZXJlLgotICAgIHJldHVybiBnZXRWZXJzaW9uRnJvbURhdGFiYXNlKGFjdHVhbFZlcnNpb24sIHRy
dWUpOwotI2Vsc2UKLSAgICBhY3R1YWxWZXJzaW9uID0gZ2V0Q2FjaGVkVmVyc2lvbigpOwotICAg
IHJldHVybiB0cnVlOwotI2VuZGlmCi19Ci0KLXZvaWQgQWJzdHJhY3REYXRhYmFzZTo6ZGlzYWJs
ZUF1dGhvcml6ZXIoKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7Ci0gICAg
bV9kYXRhYmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKLX0KLQotdm9pZCBBYnN0cmFjdERhdGFi
YXNlOjplbmFibGVBdXRob3JpemVyKCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6
ZXIpOwotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5lbmFibGUoKTsKLX0KLQotdm9pZCBBYnN0
cmFjdERhdGFiYXNlOjpzZXRBdXRob3JpemVyUmVhZE9ubHkoKQotewotICAgIEFTU0VSVChtX2Rh
dGFiYXNlQXV0aG9yaXplcik7Ci0gICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnNldFJlYWRPbmx5
KCk7Ci19Ci0KLXZvaWQgQWJzdHJhY3REYXRhYmFzZTo6c2V0QXV0aG9yaXplclBlcm1pc3Npb25z
KGludCBwZXJtaXNzaW9ucykKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwot
ICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5zZXRQZXJtaXNzaW9ucyhwZXJtaXNzaW9ucyk7Ci19
Ci0KLWJvb2wgQWJzdHJhY3REYXRhYmFzZTo6bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpCi17
Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICByZXR1cm4gbV9kYXRhYmFz
ZUF1dGhvcml6ZXItPmxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKTsKLX0KLQotYm9vbCBBYnN0
cmFjdERhdGFiYXNlOjpsYXN0QWN0aW9uV2FzSW5zZXJ0KCkKLXsKLSAgICBBU1NFUlQobV9kYXRh
YmFzZUF1dGhvcml6ZXIpOwotICAgIHJldHVybiBtX2RhdGFiYXNlQXV0aG9yaXplci0+bGFzdEFj
dGlvbldhc0luc2VydCgpOwotfQotCi12b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlc2V0RGVsZXRl
cygpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICBtX2RhdGFiYXNl
QXV0aG9yaXplci0+cmVzZXREZWxldGVzKCk7Ci19Ci0KLWJvb2wgQWJzdHJhY3REYXRhYmFzZTo6
aGFkRGVsZXRlcygpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICBy
ZXR1cm4gbV9kYXRhYmFzZUF1dGhvcml6ZXItPmhhZERlbGV0ZXMoKTsKLX0KLQotdm9pZCBBYnN0
cmFjdERhdGFiYXNlOjpyZXNldEF1dGhvcml6ZXIoKQotewotICAgIGlmIChtX2RhdGFiYXNlQXV0
aG9yaXplcikKLSAgICAgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJlc2V0KCk7Ci19Ci0KLXVu
c2lnbmVkIGxvbmcgbG9uZyBBYnN0cmFjdERhdGFiYXNlOjptYXhpbXVtU2l6ZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmdldE1heFNpemVGb3JEYXRh
YmFzZSh0aGlzKTsKLX0KLQotdm9pZCBBYnN0cmFjdERhdGFiYXNlOjppbmNyZW1lbnRhbFZhY3V1
bUlmTmVlZGVkKCkKLXsKLSAgICBpbnQ2NF90IGZyZWVTcGFjZVNpemUgPSBtX3NxbGl0ZURhdGFi
YXNlLmZyZWVTcGFjZVNpemUoKTsKLSAgICBpbnQ2NF90IHRvdGFsU2l6ZSA9IG1fc3FsaXRlRGF0
YWJhc2UudG90YWxTaXplKCk7Ci0gICAgaWYgKHRvdGFsU2l6ZSA8PSAxMCAqIGZyZWVTcGFjZVNp
emUpIHsKLSAgICAgICAgaW50IHJlc3VsdCA9IG1fc3FsaXRlRGF0YWJhc2UucnVuSW5jcmVtZW50
YWxWYWN1dW1Db21tYW5kKCk7Ci0gICAgICAgIHJlcG9ydFZhY3V1bURhdGFiYXNlUmVzdWx0KHJl
c3VsdCk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0T2spCi0gICAgICAgICAgICBs
b2dFcnJvck1lc3NhZ2UoZm9ybWF0RXJyb3JNZXNzYWdlKCJlcnJvciB2YWN1dW1pbmcgZGF0YWJh
c2UiLCByZXN1bHQsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpKTsKLSAgICB9Ci19
Ci0KLXZvaWQgQWJzdHJhY3REYXRhYmFzZTo6aW50ZXJydXB0KCkKLXsKLSAgICBtX3NxbGl0ZURh
dGFiYXNlLmludGVycnVwdCgpOwotfQotCi1ib29sIEFic3RyYWN0RGF0YWJhc2U6OmlzSW50ZXJy
dXB0ZWQoKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3NxbGl0ZURhdGFiYXNlLmRhdGFi
YXNlTXV0ZXgoKSk7Ci0gICAgcmV0dXJuIG1fc3FsaXRlRGF0YWJhc2UuaXNJbnRlcnJ1cHRlZCgp
OwotfQotCi12b2lkIEFic3RyYWN0RGF0YWJhc2U6OmxvZ0Vycm9yTWVzc2FnZShjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCi17Ci0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xl
TWVzc2FnZShPdGhlck1lc3NhZ2VTb3VyY2UsIEVycm9yTWVzc2FnZUxldmVsLCBtZXNzYWdlKTsK
LX0KLQotI2lmIFBMQVRGT1JNKENIUk9NSVVNKQotLy8gVGhlc2UgYXJlIHVzZWQgdG8gZ2VuZXJh
dGUgaGlzdG9ncmFtcyBvZiBlcnJvcnMgc2VlbiB3aXRoIHdlYnNxbC4KLS8vIFNlZSBhYm91dDpo
aXN0b2dyYW1zIGluIGNocm9taXVtLgotdm9pZCBBYnN0cmFjdERhdGFiYXNlOjpyZXBvcnRPcGVu
RGF0YWJhc2VSZXN1bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNx
bGl0ZUVycm9yQ29kZSkKLXsKLSAgICBEYXRhYmFzZU9ic2VydmVyOjpyZXBvcnRPcGVuRGF0YWJh
c2VSZXN1bHQodGhpcywgZXJyb3JTaXRlLCB3ZWJTcWxFcnJvckNvZGUsIHNxbGl0ZUVycm9yQ29k
ZSk7Ci19Ci0KLXZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVwb3J0Q2hhbmdlVmVyc2lvblJlc3Vs
dChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2Rl
KQotewotICAgIERhdGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydENoYW5nZVZlcnNpb25SZXN1bHQodGhp
cywgZXJyb3JTaXRlLCB3ZWJTcWxFcnJvckNvZGUsIHNxbGl0ZUVycm9yQ29kZSk7Ci19Ci0KLXZv
aWQgQWJzdHJhY3REYXRhYmFzZTo6cmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3VsdChpbnQgZXJy
b3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKQotewotICAg
IERhdGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQodGhpcywgZXJy
b3JTaXRlLCB3ZWJTcWxFcnJvckNvZGUsIHNxbGl0ZUVycm9yQ29kZSk7Ci19Ci0KLXZvaWQgQWJz
dHJhY3REYXRhYmFzZTo6cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoaW50IGVycm9yU2l0
ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSkKLXsKLSAgICBEYXRh
YmFzZU9ic2VydmVyOjpyZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdCh0aGlzLCBlcnJvclNp
dGUsIHdlYlNxbEVycm9yQ29kZSwgc3FsaXRlRXJyb3JDb2RlKTsKLX0KLQotdm9pZCBBYnN0cmFj
dERhdGFiYXNlOjpyZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KGludCBlcnJvclNpdGUsIGlu
dCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpCi17Ci0gICAgRGF0YWJhc2VP
YnNlcnZlcjo6cmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdCh0aGlzLCBlcnJvclNpdGUsIHdl
YlNxbEVycm9yQ29kZSwgc3FsaXRlRXJyb3JDb2RlKTsKLX0KLQotdm9pZCBBYnN0cmFjdERhdGFi
YXNlOjpyZXBvcnRWYWN1dW1EYXRhYmFzZVJlc3VsdChpbnQgc3FsaXRlRXJyb3JDb2RlKQotewot
ICAgIERhdGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydFZhY3V1bURhdGFiYXNlUmVzdWx0KHRoaXMsIHNx
bGl0ZUVycm9yQ29kZSk7Ci19Ci0KLSNlbHNlCi12b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlcG9y
dE9wZW5EYXRhYmFzZVJlc3VsdChpbnQsIGludCwgaW50KSB7IH0KLXZvaWQgQWJzdHJhY3REYXRh
YmFzZTo6cmVwb3J0Q2hhbmdlVmVyc2lvblJlc3VsdChpbnQsIGludCwgaW50KSB7IH0KLXZvaWQg
QWJzdHJhY3REYXRhYmFzZTo6cmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3VsdChpbnQsIGludCwg
aW50KSB7IH0KLXZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25S
ZXN1bHQoaW50LCBpbnQsIGludCkgeyB9Ci12b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlcG9ydEV4
ZWN1dGVTdGF0ZW1lbnRSZXN1bHQoaW50LCBpbnQsIGludCkgeyB9Ci12b2lkIEFic3RyYWN0RGF0
YWJhc2U6OnJlcG9ydFZhY3V1bURhdGFiYXNlUmVzdWx0KGludCkgeyB9Ci0jZW5kaWYgLy8gUExB
VEZPUk0oQ0hST01JVU0pCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVO
QUJMRShTUUxfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0Fic3RyYWN0RGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuaAkocmV2aXNpb24gMTQxMTgxKQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEFic3RyYWN0RGF0YWJhc2Vf
aAotI2RlZmluZSBBYnN0cmFjdERhdGFiYXNlX2gKLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0Up
Ci0KLSNpbmNsdWRlICJEYXRhYmFzZUJhc2ljVHlwZXMuaCIKLSNpbmNsdWRlICJEYXRhYmFzZURl
dGFpbHMuaCIKLSNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgIUxP
R19ESVNBQkxFRCB8fCAhRVJST1JfRElTQUJMRUQKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5o
IgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRGF0YWJhc2VBdXRob3Jp
emVyOwotY2xhc3MgRGF0YWJhc2VDb250ZXh0OwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dDsKLWNsYXNzIFNlY3VyaXR5T3JpZ2luOwotCi1jbGFzcyBBYnN0cmFjdERhdGFiYXNlIDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEFic3RyYWN0RGF0YWJhc2U+IHsKLXB1YmxpYzoKLSAg
ICB2aXJ0dWFsIH5BYnN0cmFjdERhdGFiYXNlKCk7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyB2ZXJz
aW9uKCkgY29uc3Q7Ci0KLSAgICBib29sIG9wZW5lZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbmVk
OyB9Ci0gICAgYm9vbCBpc05ldygpIGNvbnN0IHsgcmV0dXJuIG1fbmV3OyB9Ci0gICAgYm9vbCBp
c1N5bmNEYXRhYmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNTeW5jRGF0YWJhc2U7IH0KLQotICAg
IHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgc3RyaW5nSWRlbnRpZmllcigpIGNvbnN0OwotICAgIHZp
cnR1YWwgU3RyaW5nIGRpc3BsYXlOYW1lKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTmFtZSgp
IGNvbnN0OwotICAgIHZpcnR1YWwgRGF0YWJhc2VEZXRhaWxzIGRldGFpbHMoKSBjb25zdDsKLSAg
ICBTUUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UoKSB7IHJldHVybiBtX3NxbGl0ZURhdGFi
YXNlOyB9Ci0KLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUoKSBjb25zdDsKLSAg
ICB2b2lkIGluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQoKTsKLSAgICB2b2lkIGludGVycnVwdCgp
OwotICAgIGJvb2wgaXNJbnRlcnJ1cHRlZCgpOwotCi0gICAgdm9pZCBkaXNhYmxlQXV0aG9yaXpl
cigpOwotICAgIHZvaWQgZW5hYmxlQXV0aG9yaXplcigpOwotICAgIHZvaWQgc2V0QXV0aG9yaXpl
clJlYWRPbmx5KCk7Ci0gICAgdm9pZCBzZXRBdXRob3JpemVyUGVybWlzc2lvbnMoaW50IHBlcm1p
c3Npb25zKTsKLSAgICBib29sIGxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKTsKLSAgICBib29s
IGxhc3RBY3Rpb25XYXNJbnNlcnQoKTsKLSAgICB2b2lkIHJlc2V0RGVsZXRlcygpOwotICAgIGJv
b2wgaGFkRGVsZXRlcygpOwotICAgIHZvaWQgcmVzZXRBdXRob3JpemVyKCk7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgbWFya0FzRGVsZXRlZEFuZENsb3NlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBj
bG9zZUltbWVkaWF0ZWx5KCkgPSAwOwotCi0gICAgRGF0YWJhc2VDb250ZXh0KiBkYXRhYmFzZUNv
bnRleHQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlQ29udGV4dC5nZXQoKTsgfQotCi1wcm90
ZWN0ZWQ6Ci0gICAgZnJpZW5kIGNsYXNzIENoYW5nZVZlcnNpb25XcmFwcGVyOwotICAgIGZyaWVu
ZCBjbGFzcyBTUUxTdGF0ZW1lbnQ7Ci0gICAgZnJpZW5kIGNsYXNzIFNRTFN0YXRlbWVudFN5bmM7
Ci0gICAgZnJpZW5kIGNsYXNzIFNRTFRyYW5zYWN0aW9uU3luYzsKLSAgICBmcmllbmQgY2xhc3Mg
U1FMVHJhbnNhY3Rpb247Ci0KLSAgICBlbnVtIERhdGFiYXNlVHlwZSB7Ci0gICAgICAgIEFzeW5j
RGF0YWJhc2UsCi0gICAgICAgIFN5bmNEYXRhYmFzZQotICAgIH07Ci0KLSAgICBBYnN0cmFjdERh
dGFiYXNlKFBhc3NSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgRGF0YWJh
c2VUeXBlKTsKLQotICAgIHZvaWQgY2xvc2VEYXRhYmFzZSgpOwotCi0gICAgdmlydHVhbCBib29s
IHBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2hvdWxkU2V0VmVyc2lvbkluTmV3RGF0YWJhc2Us
IEV4Y2VwdGlvbkNvZGUmLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7Ci0KLSAgICBib29sIGdldFZl
cnNpb25Gcm9tRGF0YWJhc2UoU3RyaW5nJiB2ZXJzaW9uLCBib29sIHNob3VsZENhY2hlVmVyc2lv
biA9IHRydWUpOwotICAgIGJvb2wgc2V0VmVyc2lvbkluRGF0YWJhc2UoY29uc3QgU3RyaW5nJiB2
ZXJzaW9uLCBib29sIHNob3VsZENhY2hlVmVyc2lvbiA9IHRydWUpOwotICAgIHZvaWQgc2V0RXhw
ZWN0ZWRWZXJzaW9uKGNvbnN0IFN0cmluZyYpOwotICAgIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRW
ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9leHBlY3RlZFZlcnNpb247IH0KLSAgICBTdHJpbmcg
Z2V0Q2FjaGVkVmVyc2lvbigpY29uc3Q7Ci0gICAgdm9pZCBzZXRDYWNoZWRWZXJzaW9uKGNvbnN0
IFN0cmluZyYpOwotICAgIGJvb2wgZ2V0QWN0dWFsVmVyc2lvbkZvclRyYW5zYWN0aW9uKFN0cmlu
ZyYgdmVyc2lvbik7Ci0KLSAgICB2b2lkIGxvZ0Vycm9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpOwotCi0gICAgdm9pZCByZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQoaW50IGVycm9yU2l0
ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSk7Ci0gICAgdm9pZCBy
ZXBvcnRDaGFuZ2VWZXJzaW9uUmVzdWx0KGludCBlcnJvclNpdGUsIGludCB3ZWJTcWxFcnJvckNv
ZGUsIGludCBzcWxpdGVFcnJvckNvZGUpOwotICAgIHZvaWQgcmVwb3J0U3RhcnRUcmFuc2FjdGlv
blJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJy
b3JDb2RlKTsKLSAgICB2b2lkIHJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KGludCBlcnJv
clNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpOwotICAgIHZv
aWQgcmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3Fs
RXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKTsKLSAgICB2b2lkIHJlcG9ydFZhY3V1bURh
dGFiYXNlUmVzdWx0KGludCBzcWxpdGVFcnJvckNvZGUpOwotCi0gICAgc3RhdGljIGNvbnN0IGNo
YXIqIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpOwotCi0gICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbjsKLSAgICBSZWZQdHI8RGF0YWJhc2VDb250
ZXh0PiBtX2RhdGFiYXNlQ29udGV4dDsgLy8gQXNzb2NpYXRlZCB3aXRoIG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC4KLSAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0OwotCi0gICAgU3RyaW5nIG1fbmFtZTsKLSAgICBTdHJpbmcgbV9leHBl
Y3RlZFZlcnNpb247Ci0gICAgU3RyaW5nIG1fZGlzcGxheU5hbWU7Ci0gICAgdW5zaWduZWQgbG9u
ZyBtX2VzdGltYXRlZFNpemU7Ci0gICAgU3RyaW5nIG1fZmlsZW5hbWU7Ci0KLSNpZiAhTE9HX0RJ
U0FCTEVEIHx8ICFFUlJPUl9ESVNBQkxFRAotICAgIFN0cmluZyBkYXRhYmFzZURlYnVnTmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luLT50b1N0cmluZygp
ICsgIjo6IiArIG1fbmFtZTsgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgRGF0YWJhc2VHdWlk
IG1fZ3VpZDsKLSAgICBib29sIG1fb3BlbmVkOwotICAgIGJvb2wgbV9uZXc7Ci0gICAgY29uc3Qg
Ym9vbCBtX2lzU3luY0RhdGFiYXNlOwotCi0gICAgU1FMaXRlRGF0YWJhc2UgbV9zcWxpdGVEYXRh
YmFzZTsKLQotICAgIFJlZlB0cjxEYXRhYmFzZUF1dGhvcml6ZXI+IG1fZGF0YWJhc2VBdXRob3Jp
emVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNR
TF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIEFic3RyYWN0RGF0YWJhc2VfaApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlU2VydmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERh
dGFiYXNlU2VydmVyLmgJKHJldmlzaW9uIDE0MTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSwxNSArMjksMTggQEAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAi
RGF0YWJhc2VEZXRhaWxzLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VFcnJvci5oIgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQWJzdHJhY3RE
YXRhYmFzZTsKK2NsYXNzIERhdGFiYXNlQmFja2VuZDsKK2NsYXNzIERhdGFiYXNlQmFja2VuZEFz
eW5jOworY2xhc3MgRGF0YWJhc2VCYWNrZW5kQ29udGV4dDsKK2NsYXNzIERhdGFiYXNlQmFja2Vu
ZFN5bmM7CiBjbGFzcyBEYXRhYmFzZU1hbmFnZXJDbGllbnQ7Ci1jbGFzcyBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKIGNsYXNzIEFic3RyYWN0RGF0YWJh
c2VTZXJ2ZXIgewpAQCAtNTAsNiArNTMsMTQgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBTdHJp
bmcgZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCA9IHRydWUpID0gMDsKIAorICAgIC8vIE9wZW5p
bmcgYW4gYXN5bmMgZGF0YWJhc2U6CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPERhdGFiYXNlQmFj
a2VuZEFzeW5jPiBvcGVuRGF0YWJhc2VBc3luYyhSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4
dD4mLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBj
b25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIGJv
b2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImLCBTdHJpbmcmIGVycm9y
TWVzc2FnZSkgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRBc3lu
Yz4gcmV0cnlPcGVuRGF0YWJhc2VBc3luYyhSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4m
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25z
dCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIGJvb2wg
c2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImLCBTdHJpbmcmIGVycm9yTWVz
c2FnZSkgPSAwOyAgICAKKworICAgIC8vIE9wZW5pbmcgYSBzeW5jIGRhdGFiYXNlOgorICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRTeW5jPiBvcGVuRGF0YWJhc2VTeW5jKFJl
ZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiYsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2ln
bmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0
YWJhc2VFcnJvciYsIFN0cmluZyYgZXJyb3JNZXNzYWdlKSA9IDA7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPERhdGFiYXNlQmFja2VuZFN5bmM+IHJldHJ5T3BlbkRhdGFiYXNlU3luYyhSZWZQdHI8
RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4mLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNl
RXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgPSAwOworCiAjaWYgIVBMQVRGT1JNKENIUk9N
SVVNKQogICAgIHZpcnR1YWwgYm9vbCBoYXNFbnRyeUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiop
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgb3JpZ2lucyhWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiA+JiByZXN1bHQpID0gMDsKQEAgLTY3LDIwICs3OCwxNSBAQCBwdWJsaWM6CiAKICAgICAv
LyBGcm9tIGEgc2Vjb25kYXJ5IHRocmVhZCwgbXVzdCBiZSB0aHJlYWQgc2FmZSB3aXRoIGl0cyBk
YXRhCiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlTm90aWZ5RGF0YWJhc2VDaGFuZ2VkKFNlY3Vy
aXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRh
dGFiYXNlQ2hhbmdlZChBYnN0cmFjdERhdGFiYXNlKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBk
YXRhYmFzZUNoYW5nZWQoRGF0YWJhc2VCYWNrZW5kKikgPSAwOwogCiAjZWxzZSAvLyBQTEFURk9S
TShDSFJPTUlVTSkKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VEYXRhYmFzZXNJbW1lZGlhdGVseShj
b25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSkgPSAwOwog
I2VuZGlmIC8vIFBMQVRGT1JNKENIUk9NSVVNKQogCi0gICAgdmlydHVhbCB2b2lkIGludGVycnVw
dEFsbERhdGFiYXNlc0ZvckNvbnRleHQoY29uc3QgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopID0g
MDsKLQotICAgIHZpcnR1YWwgYm9vbCBjYW5Fc3RhYmxpc2hEYXRhYmFzZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1l
LCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRk
T3BlbkRhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJl
bW92ZU9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBpbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IERhdGFiYXNlQmFja2VuZENv
bnRleHQqKSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YWJhc2VEZXRhaWxzKFNlY3Vy
aXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1l
LCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpID0gMDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVk
IGxvbmcgbG9uZyBnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3QgQWJzdHJhY3REYXRhYmFzZSop
ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBnZXRNYXhTaXplRm9yRGF0YWJh
c2UoY29uc3QgRGF0YWJhc2VCYWNrZW5kKikgPSAwOwogCiBwcm90ZWN0ZWQ6CiAgICAgQWJzdHJh
Y3REYXRhYmFzZVNlcnZlcigpIHsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EQkJhY2tlbmRTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvREJCYWNrZW5kU2VydmVyLmNwcAkocmV2aXNpb24gMTQxMTgx
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EQkJhY2tlbmRTZXJ2ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJEQkJhY2tlbmRTZXJ2ZXIuaCIKLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNs
dWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKLSNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIERCQmFja2VuZCB7Ci0KLXZvaWQgU2VydmVy
Ojppbml0aWFsaXplKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoKQotewotI2lmICFQTEFURk9S
TShDSFJPTUlVTSkKLSAgICBEYXRhYmFzZVRyYWNrZXI6OmluaXRpYWxpemVUcmFja2VyKGRhdGFi
YXNlUGF0aCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShkYXRhYmFzZVBhdGgpOwotI2VuZGlm
Ci19Ci0KLXZvaWQgU2VydmVyOjpzZXRDbGllbnQoRGF0YWJhc2VNYW5hZ2VyQ2xpZW50KiBjbGll
bnQpCi17Ci0jaWYgIVBMQVRGT1JNKENIUk9NSVVNKQotICAgIERhdGFiYXNlVHJhY2tlcjo6dHJh
Y2tlcigpLnNldENsaWVudChjbGllbnQpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY2xpZW50
KTsKLSNlbmRpZgotfQotCi1TdHJpbmcgU2VydmVyOjpkYXRhYmFzZURpcmVjdG9yeVBhdGgoKSBj
b25zdAotewotI2lmICFQTEFURk9STShDSFJPTUlVTSkKLSAgICByZXR1cm4gRGF0YWJhc2VUcmFj
a2VyOjp0cmFja2VyKCkuZGF0YWJhc2VEaXJlY3RvcnlQYXRoKCk7Ci0jZWxzZQotICAgIHJldHVy
biAiIjsKLSNlbmRpZgotfQotCi12b2lkIFNlcnZlcjo6c2V0RGF0YWJhc2VEaXJlY3RvcnlQYXRo
KGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSNpZiAhUExBVEZPUk0oQ0hST01JVU0pCi0gICAgRGF0
YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0RGF0YWJhc2VEaXJlY3RvcnlQYXRoKHBhdGgpOwot
I2VuZGlmCi19Ci0KLVN0cmluZyBTZXJ2ZXI6OmZ1bGxQYXRoRm9yRGF0YWJhc2UoU2VjdXJpdHlP
cmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmRG9lc05vdEV4
aXN0KQotewotICAgIHJldHVybiBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5mdWxsUGF0aEZv
ckRhdGFiYXNlKG9yaWdpbiwgbmFtZSwgY3JlYXRlSWZEb2VzTm90RXhpc3QpOwotfQotCi0jaWYg
IVBMQVRGT1JNKENIUk9NSVVNKQotYm9vbCBTZXJ2ZXI6Omhhc0VudHJ5Rm9yT3JpZ2luKFNlY3Vy
aXR5T3JpZ2luKiBvcmlnaW4pCi17Ci0gICAgcmV0dXJuIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tl
cigpLmhhc0VudHJ5Rm9yT3JpZ2luKG9yaWdpbik7Ci19Ci0KLXZvaWQgU2VydmVyOjpvcmlnaW5z
KFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4mIHJlc3VsdCkKLXsKLSAgICBEYXRhYmFz
ZVRyYWNrZXI6OnRyYWNrZXIoKS5vcmlnaW5zKHJlc3VsdCk7Ci19Ci0KLWJvb2wgU2VydmVyOjpk
YXRhYmFzZU5hbWVzRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFZlY3RvcjxTdHJp
bmc+JiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRh
dGFiYXNlTmFtZXNGb3JPcmlnaW4ob3JpZ2luLCByZXN1bHQpOwotfQotCi1EYXRhYmFzZURldGFp
bHMgU2VydmVyOjpkZXRhaWxzRm9yTmFtZUFuZE9yaWdpbihjb25zdCBTdHJpbmcmIG5hbWUsIFNl
Y3VyaXR5T3JpZ2luKiBvcmlnaW4pCi17Ci0gICAgcmV0dXJuIERhdGFiYXNlVHJhY2tlcjo6dHJh
Y2tlcigpLmRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKG5hbWUsIG9yaWdpbik7Ci19Ci0KLXVuc2ln
bmVkIGxvbmcgbG9uZyBTZXJ2ZXI6OnVzYWdlRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmln
aW4pCi17Ci0gICAgcmV0dXJuIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnVzYWdlRm9yT3Jp
Z2luKG9yaWdpbik7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgbG9uZyBTZXJ2ZXI6OnF1b3RhRm9yT3Jp
Z2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCi17Ci0gICAgcmV0dXJuIERhdGFiYXNlVHJhY2tl
cjo6dHJhY2tlcigpLnF1b3RhRm9yT3JpZ2luKG9yaWdpbik7Ci19Ci0KLXZvaWQgU2VydmVyOjpz
ZXRRdW90YShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCB1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGFT
aXplKQotewotICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldFF1b3RhKG9yaWdpbiwg
cXVvdGFTaXplKTsKLX0KLQotdm9pZCBTZXJ2ZXI6OmRlbGV0ZUFsbERhdGFiYXNlcygpCi17Ci0g
ICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlQWxsRGF0YWJhc2VzKCk7Ci19Ci0K
LWJvb2wgU2VydmVyOjpkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKLXsKLSAg
ICByZXR1cm4gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlT3JpZ2luKG9yaWdpbik7
Ci19Ci0KLWJvb2wgU2VydmVyOjpkZWxldGVEYXRhYmFzZShTZWN1cml0eU9yaWdpbiogb3JpZ2lu
LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgcmV0dXJuIERhdGFiYXNlVHJhY2tlcjo6dHJh
Y2tlcigpLmRlbGV0ZURhdGFiYXNlKG9yaWdpbiwgbmFtZSk7Ci19Ci0KLS8vIEZyb20gYSBzZWNv
bmRhcnkgdGhyZWFkLCBtdXN0IGJlIHRocmVhZCBzYWZlIHdpdGggaXRzIGRhdGEKLXZvaWQgU2Vy
dmVyOjpzY2hlZHVsZU5vdGlmeURhdGFiYXNlQ2hhbmdlZChTZWN1cml0eU9yaWdpbiogb3JpZ2lu
LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCku
c2NoZWR1bGVOb3RpZnlEYXRhYmFzZUNoYW5nZWQob3JpZ2luLCBuYW1lKTsKLX0KLQotdm9pZCBT
ZXJ2ZXI6OmRhdGFiYXNlQ2hhbmdlZChBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKLXsKLSAg
ICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5kYXRhYmFzZUNoYW5nZWQoZGF0YWJhc2UpOwot
fQotCi0jZWxzZSAvLyBQTEFURk9STShDSFJPTUlVTSkKLXZvaWQgU2VydmVyOjpjbG9zZURhdGFi
YXNlc0ltbWVkaWF0ZWx5KGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiBuYW1lKQotewotICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmNsb3NlRGF0YWJh
c2VzSW1tZWRpYXRlbHkob3JpZ2luSWRlbnRpZmllciwgbmFtZSk7Ci19Ci0jZW5kaWYgLy8gUExB
VEZPUk0oQ0hST01JVU0pCi0KLXZvaWQgU2VydmVyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JD
b250ZXh0KGNvbnN0IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgRGF0
YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuaW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChj
b250ZXh0KTsKLX0KLQotYm9vbCBTZXJ2ZXI6OmNhbkVzdGFibGlzaERhdGFiYXNlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQotewotICAgIHJldHVy
biBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5jYW5Fc3RhYmxpc2hEYXRhYmFzZShjb250ZXh0
LCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7Ci19Ci0KLXZvaWQgU2VydmVyOjph
ZGRPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCi17Ci0gICAgRGF0YWJh
c2VUcmFja2VyOjp0cmFja2VyKCkuYWRkT3BlbkRhdGFiYXNlKGRhdGFiYXNlKTsKLX0KLQotdm9p
ZCBTZXJ2ZXI6OnJlbW92ZU9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkK
LXsKLSAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5yZW1vdmVPcGVuRGF0YWJhc2UoZGF0
YWJhc2UpOwotfQotCi12b2lkIFNlcnZlcjo6c2V0RGF0YWJhc2VEZXRhaWxzKFNlY3VyaXR5T3Jp
Z2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFt
ZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQotewotICAgIERhdGFiYXNlVHJhY2tlcjo6
dHJhY2tlcigpLnNldERhdGFiYXNlRGV0YWlscyhvcmlnaW4sIG5hbWUsIGRpc3BsYXlOYW1lLCBl
c3RpbWF0ZWRTaXplKTsKLX0KLQotdW5zaWduZWQgbG9uZyBsb25nIFNlcnZlcjo6Z2V0TWF4U2l6
ZUZvckRhdGFiYXNlKGNvbnN0IEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQotewotICAgIHJl
dHVybiBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5nZXRNYXhTaXplRm9yRGF0YWJhc2UoZGF0
YWJhc2UpOwotfQotCi19IC8vIG5hbWVzcGFjZSBEQkJhY2tlbmQKLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RCQmFja2VuZFNlcnZlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvREJCYWNrZW5kU2VydmVyLmgJKHJl
dmlzaW9uIDE0MTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvREJC
YWNrZW5kU2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIERCQmFja2VuZFNl
cnZlcl9oCi0jZGVmaW5lIERCQmFja2VuZFNlcnZlcl9oCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFC
QVNFKQotCi0jaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1uYW1lc3BhY2UgREJCYWNrZW5kIHsKLQotY2xhc3MgU2VydmVyOiBwdWJsaWMg
QWJzdHJhY3REYXRhYmFzZVNlcnZlciB7Ci1wdWJsaWM6Ci0gICAgU2VydmVyKCkgeyB9OwotICAg
IHZpcnR1YWwgflNlcnZlcigpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoY29u
c3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldENsaWVudChE
YXRhYmFzZU1hbmFnZXJDbGllbnQqKTsKLSAgICB2aXJ0dWFsIFN0cmluZyBkYXRhYmFzZURpcmVj
dG9yeVBhdGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YWJhc2VEaXJlY3RvcnlQ
YXRoKGNvbnN0IFN0cmluZyYpOwotCi0gICAgdmlydHVhbCBTdHJpbmcgZnVsbFBhdGhGb3JEYXRh
YmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZkRv
ZXNOb3RFeGlzdCk7Ci0KLSNpZiAhUExBVEZPUk0oQ0hST01JVU0pCi0gICAgdmlydHVhbCBib29s
IGhhc0VudHJ5Rm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7Ci0gICAgdmlydHVhbCB2b2lkIG9y
aWdpbnMoVmVjdG9yPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gPiYgcmVzdWx0KTsKLSAgICB2aXJ0
dWFsIGJvb2wgZGF0YWJhc2VOYW1lc0Zvck9yaWdpbihTZWN1cml0eU9yaWdpbiosIFZlY3RvcjxT
dHJpbmc+JiByZXN1bHQpOwotICAgIHZpcnR1YWwgRGF0YWJhc2VEZXRhaWxzIGRldGFpbHNGb3JO
YW1lQW5kT3JpZ2luKGNvbnN0IFN0cmluZyYsIFNlY3VyaXR5T3JpZ2luKik7Ci0KLSAgICB2aXJ0
dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyB1c2FnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiopOwot
ICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHF1b3RhRm9yT3JpZ2luKFNlY3VyaXR5T3Jp
Z2luKik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UXVvdGEoU2VjdXJpdHlPcmlnaW4qLCB1bnNp
Z25lZCBsb25nIGxvbmcpOwotCi0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUFsbERhdGFiYXNlcygp
OwotICAgIHZpcnR1YWwgYm9vbCBkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qKTsKLSAgICB2
aXJ0dWFsIGJvb2wgZGVsZXRlRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcm
IG5hbWUpOwotCi0gICAgLy8gRnJvbSBhIHNlY29uZGFyeSB0aHJlYWQsIG11c3QgYmUgdGhyZWFk
IHNhZmUgd2l0aCBpdHMgZGF0YQotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZU5vdGlmeURhdGFi
YXNlQ2hhbmdlZChTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdmly
dHVhbCB2b2lkIGRhdGFiYXNlQ2hhbmdlZChBYnN0cmFjdERhdGFiYXNlKik7Ci0KLSNlbHNlIC8v
IFBMQVRGT1JNKENIUk9NSVVNKQotICAgIHZpcnR1YWwgdm9pZCBjbG9zZURhdGFiYXNlc0ltbWVk
aWF0ZWx5KGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuYW1l
KTsKLSNlbmRpZiAvLyBQTEFURk9STShDSFJPTUlVTSkKLQotICAgIHZpcnR1YWwgdm9pZCBpbnRl
cnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
KTsKLQotICAgIHZpcnR1YWwgYm9vbCBjYW5Fc3RhYmxpc2hEYXRhYmFzZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1l
LCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwotICAgIHZpcnR1YWwgdm9pZCBhZGRPcGVu
RGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSopOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVPcGVu
RGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSopOwotCi0gICAgdmlydHVhbCB2b2lkIHNldERhdGFi
YXNlRGV0YWlscyhTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKLSAgICB2aXJ0
dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3QgQWJzdHJh
Y3REYXRhYmFzZSopOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgREJCYWNrZW5kCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jZW5kaWYg
Ly8gREJCYWNrZW5kU2VydmVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRE9NV2luZG93V2ViRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93V2ViRGF0YWJhc2UuY3BwCShyZXZpc2lv
biAxNDExODEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RPTVdpbmRv
d1dlYkRhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOSArNDcsMTIgQEAgUGFzc1Jl
ZlB0cjxEYXRhYmFzZT4gRE9NV2luZG93V2ViRGF0YWJhcwogCiAgICAgUmVmUHRyPERhdGFiYXNl
PiBkYXRhYmFzZSA9IDA7CiAgICAgRGF0YWJhc2VNYW5hZ2VyJiBkYk1hbmFnZXIgPSBEYXRhYmFz
ZU1hbmFnZXI6Om1hbmFnZXIoKTsKKyAgICBEYXRhYmFzZUVycm9yIGVycm9yOwogICAgIGlmIChk
Yk1hbmFnZXIuaXNBdmFpbGFibGUoKSAmJiB3aW5kb3ctPmRvY3VtZW50KCktPnNlY3VyaXR5T3Jp
Z2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKHdpbmRvdy0+ZG9jdW1lbnQoKS0+dG9wRG9jdW1lbnQo
KS0+c2VjdXJpdHlPcmlnaW4oKSkpCi0gICAgICAgIGRhdGFiYXNlID0gZGJNYW5hZ2VyLm9wZW5E
YXRhYmFzZSh3aW5kb3ctPmRvY3VtZW50KCksIG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1lLCBl
c3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrLCBlYyk7CisgICAgICAgIGRhdGFiYXNlID0g
ZGJNYW5hZ2VyLm9wZW5EYXRhYmFzZSh3aW5kb3ctPmRvY3VtZW50KCksIG5hbWUsIHZlcnNpb24s
IGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrLCBlcnJvcik7CiAK
KyAgICBpZiAoZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6Q2Fubm90T3BlbkRhdGFiYXNlKQorICAg
ICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgIGlmICghZGF0YWJhc2UgJiYgIWVjKQog
ICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDE0MTE4MSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMywxMSArMzMsMTQgQEAKIAogI2luY2x1ZGUgIkNoYW5nZVZlcnNpb25XcmFwcGVy
LmgiCiAjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VCYWNr
ZW5kQXN5bmMuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiRGF0YWJhc2VDYWxsYmFjay5oIgogI2luY2x1ZGUgIkRhdGFiYXNlQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIkRhdGFiYXNlTWFuYWdlci5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVGFzay5oIgogI2lu
Y2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKQEAgLTQ4LDcgKzUxLDYgQEAKICNpbmNsdWRlICJTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgi
CiAjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCi0jaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlZvaWRDYWxsYmFjay5oIgpAQCAtNjUsMTUgKzY3LDI0
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRGF0YWJhc2U6OkRhdGFiYXNlKFBhc3NSZWZQ
dHI8RGF0YWJhc2VDb250ZXh0PiBkYXRhYmFzZUNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUs
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKLSAgICA6IEFic3RyYWN0RGF0YWJhc2UoZGF0
YWJhc2VDb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0
ZWRTaXplLCBBc3luY0RhdGFiYXNlKQorLy8gRklYTUU6IFRoZSBEYXRhYmFzZU1hbmFnZXIgbmVl
ZHMgdG8gY3JlYXRlIGEgRGF0YWJhc2UgaW5zdGFuY2UgZnJvbSBpdHMgYmFja2VuZC4KKy8vIFRo
aXMgZmFjdG9yeSBtZXRob2QgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCB0byB0aGF0IERhdGFi
YXNlTWFuYWdlciBuZWVkLgorLy8gV2hlbiB0aGUgYmFja2VuZCBoYXMgYWN0dWFsbHkgYmVlbiBz
cGxpdCBvdXQgZnJvbSB0aGUgRGF0YWJhc2UsIHdlIHNob3VsZCBiZQorLy8gdXNpbmcgdGhlIHVw
ZGF0ZWQgRGF0YWJhc2UgY29uc3RydWN0b3IgaW5zdGVhZCBvZiB0aGlzIHdvcmthcm91bmQsIGFu
ZCB0aGlzCisvLyBtZXRob2Qgc2hvdWxkIGJlIGRlbGV0ZWQuCitQYXNzUmVmUHRyPERhdGFiYXNl
PiBEYXRhYmFzZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPERh
dGFiYXNlQmFja2VuZEFzeW5jPiBiYWNrZW5kKQoreworICAgIHJldHVybiBiYWNrZW5kOworfQor
CitEYXRhYmFzZTo6RGF0YWJhc2UoUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiBk
YXRhYmFzZUNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3Rl
ZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1h
dGVkU2l6ZSkKKyAgICA6IERhdGFiYXNlQmFja2VuZChkYXRhYmFzZUNvbnRleHQsIG5hbWUsIGV4
cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIEFzeW5jRGF0YWJhc2Up
CiAgICAgLCBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyhmYWxzZSkKICAgICAsIG1faXNUcmFuc2Fj
dGlvblF1ZXVlRW5hYmxlZCh0cnVlKQogICAgICwgbV9kZWxldGVkKGZhbHNlKQogewogICAgIG1f
ZGF0YWJhc2VUaHJlYWRTZWN1cml0eU9yaWdpbiA9IG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3Jp
Z2luLT5pc29sYXRlZENvcHkoKTsKIAotICAgIFNjcmlwdENvbnRyb2xsZXI6OmluaXRpYWxpemVU
aHJlYWRpbmcoKTsKICAgICBBU1NFUlQobV9kYXRhYmFzZUNvbnRleHQtPmRhdGFiYXNlVGhyZWFk
KCkpOwogfQogCkBAIC0xMTcsMTcgKzEyOCwxNyBAQCBTdHJpbmcgRGF0YWJhc2U6OnZlcnNpb24o
KSBjb25zdAogewogICAgIGlmIChtX2RlbGV0ZWQpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LSAgICByZXR1cm4gQWJzdHJhY3REYXRhYmFzZTo6dmVyc2lvbigpOworICAgIHJldHVybiBEYXRh
YmFzZUJhY2tlbmQ6OnZlcnNpb24oKTsKIH0KIAotYm9vbCBEYXRhYmFzZTo6b3BlbkFuZFZlcmlm
eVZlcnNpb24oYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYgZSwg
U3RyaW5nJiBlcnJvck1lc3NhZ2UpCitib29sIERhdGFiYXNlOjpvcGVuQW5kVmVyaWZ5VmVyc2lv
bihib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiBlcnJvciwgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyIHN5bmNo
cm9uaXplcjsKICAgICBpZiAoIWRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpIHx8
IGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT50ZXJtaW5hdGlvblJlcXVlc3Rl
ZCgmc3luY2hyb25pemVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9vbCBzdWNj
ZXNzID0gZmFsc2U7Ci0gICAgT3duUHRyPERhdGFiYXNlT3BlblRhc2s+IHRhc2sgPSBEYXRhYmFz
ZU9wZW5UYXNrOjpjcmVhdGUodGhpcywgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsICZzeW5jaHJv
bml6ZXIsIGUsIGVycm9yTWVzc2FnZSwgc3VjY2Vzcyk7CisgICAgT3duUHRyPERhdGFiYXNlT3Bl
blRhc2s+IHRhc2sgPSBEYXRhYmFzZU9wZW5UYXNrOjpjcmVhdGUodGhpcywgc2V0VmVyc2lvbklu
TmV3RGF0YWJhc2UsICZzeW5jaHJvbml6ZXIsIGVycm9yLCBlcnJvck1lc3NhZ2UsIHN1Y2Nlc3Mp
OwogICAgIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5zY2hlZHVsZUltbWVk
aWF0ZVRhc2sodGFzay5yZWxlYXNlKCkpOwogICAgIHN5bmNocm9uaXplci53YWl0Rm9yVGFza0Nv
bXBsZXRpb24oKTsKIApAQCAtMTUzLDcgKzE2NCw3IEBAIHZvaWQgRGF0YWJhc2U6Om1hcmtBc0Rl
bGV0ZWRBbmRDbG9zZSgpCiAgICAgc3luY2hyb25pemVyLndhaXRGb3JUYXNrQ29tcGxldGlvbigp
OwogfQogCi12b2lkIERhdGFiYXNlOjpjbG9zZSgpCit2b2lkIERhdGFiYXNlOjpjbG9zZTEoKQog
ewogICAgIEFTU0VSVChkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKSk7CiAgICAg
QVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJl
YWQoKS0+Z2V0VGhyZWFkSUQoKSk7CkBAIC0xNzEsNyArMTgyLDYgQEAgdm9pZCBEYXRhYmFzZTo6
Y2xvc2UoKQogICAgIFJlZlB0cjxEYXRhYmFzZT4gcHJvdGVjdCA9IHRoaXM7CiAgICAgZGF0YWJh
c2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlQ2xvc2VkKHRoaXMp
OwogICAgIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT51bnNjaGVkdWxlRGF0
YWJhc2VUYXNrcyh0aGlzKTsKLSAgICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5yZW1vdmVP
cGVuRGF0YWJhc2UodGhpcyk7CiB9CiAKIHZvaWQgRGF0YWJhc2U6OmNsb3NlSW1tZWRpYXRlbHko
KQpAQCAtMTg5LDkgKzE5OSw5IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZTo6bWF4aW11
bVNpemUKICAgICByZXR1cm4gRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuZ2V0TWF4U2l6ZUZv
ckRhdGFiYXNlKHRoaXMpOwogfQogCi1ib29sIERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlm
eShib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiBlLCBTdHJpbmcm
IGVycm9yTWVzc2FnZSkKK2Jvb2wgRGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wg
c2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImIGVycm9yLCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSkKIHsKLSAgICBpZiAoQWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRW
ZXJpZnkoc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGUsIGVycm9yTWVzc2FnZSkpIHsKKyAgICBp
ZiAoRGF0YWJhc2VCYWNrZW5kOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShzZXRWZXJzaW9uSW5OZXdE
YXRhYmFzZSwgZXJyb3IsIGVycm9yTWVzc2FnZSkpIHsKICAgICAgICAgaWYgKGRhdGFiYXNlQ29u
dGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpKQogICAgICAgICAgICAgZGF0YWJhc2VDb250ZXh0KCkt
PmRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlT3Blbih0aGlzKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaAkocmV2aXNpb24g
MTQxMTgxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNCArMzEsMTYgQEAKIAogI2lmIEVOQUJMRShTUUxfREFU
QUJBU0UpCiAKLSNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCisjaW5jbHVkZSAiRGF0YWJh
c2VCYWNrZW5kLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VCYXNpY1R5cGVzLmgiCisjaW5jbHVkZSAi
RGF0YWJhc2VFcnJvci5oIgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgRGF0YWJhc2VCYWNrZW5kQXN5bmM7CiBjbGFzcyBEYXRhYmFzZUNh
bGxiYWNrOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBTUUxUcmFuc2FjdGlvbjsKQEAg
LTQ5LDcgKzUxLDcgQEAgY2xhc3MgU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOwogY2xhc3Mg
U1FMVHJhbnNhY3Rpb25XcmFwcGVyOwogY2xhc3MgVm9pZENhbGxiYWNrOwogCi1jbGFzcyBEYXRh
YmFzZSA6IHB1YmxpYyBBYnN0cmFjdERhdGFiYXNlIHsKK2NsYXNzIERhdGFiYXNlIDogcHVibGlj
IERhdGFiYXNlQmFja2VuZCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+RGF0YWJhc2UoKTsKIApA
QCAtNjgsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG1hcmtBc0RlbGV0ZWRB
bmRDbG9zZSgpOwogICAgIGJvb2wgZGVsZXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsZXRlZDsg
fQogCi0gICAgdm9pZCBjbG9zZSgpOworICAgIHZvaWQgY2xvc2UxKCk7CiAgICAgdmlydHVhbCB2
b2lkIGNsb3NlSW1tZWRpYXRlbHkoKTsKIAogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkYXRhYmFz
ZVNpemUoKSBjb25zdDsKQEAgLTg2LDEzICs4OCwxNiBAQCBwcml2YXRlOgogICAgIGNsYXNzIERh
dGFiYXNlVHJhbnNhY3Rpb25UYXNrOwogICAgIGNsYXNzIERhdGFiYXNlVGFibGVOYW1lc1Rhc2s7
CiAKLSAgICBEYXRhYmFzZShQYXNzUmVmUHRyPERhdGFiYXNlQ29udGV4dD4sIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCisgICAgRGF0YWJhc2UoUGFz
c1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRp
c3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOworICAgIERhdGFiYXNlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZEFzeW5jPik7
IC8vIEZJWE1FOiBub3QgaW1wbGVtZW50ZWQgJiB1c2VkIHlldC4KKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxEYXRhYmFzZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PERhdGFiYXNlQmFja2VuZEFzeW5jPik7CisKICAgICB2b2lkIHJ1blRyYW5zYWN0aW9uKFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrPiwKICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENh
bGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVy
PiwgYm9vbCByZWFkT25seSk7CiAKLSAgICBib29sIG9wZW5BbmRWZXJpZnlWZXJzaW9uKGJvb2wg
c2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmLCBTdHJpbmcmIGVycm9yTWVz
c2FnZSk7Ci0gICAgdmlydHVhbCBib29sIHBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2V0VmVy
c2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7
CisgICAgYm9vbCBvcGVuQW5kVmVyaWZ5VmVyc2lvbihib29sIHNldFZlcnNpb25Jbk5ld0RhdGFi
YXNlLCBEYXRhYmFzZUVycm9yJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOworICAgIHZpcnR1YWwg
Ym9vbCBwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBE
YXRhYmFzZUVycm9yJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogCiAgICAgdm9pZCBpblByb2dy
ZXNzVHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB2b2lkIHNjaGVkdWxlVHJhbnNhY3Rpb24o
KTsKQEAgLTEwOSw2ICsxMTQsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9kZWxldGVkOwogCiAg
ICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlTWFuYWdlcjsKKyAgICBmcmllbmQgY2xhc3MgRGF0YWJh
c2VTZXJ2ZXI7IC8vIEZJWE1FOiByZW1vdmUgdGhpcyB3aGVuIHRoZSBiYWNrZW5kIGhhcyBiZWVu
IHNwbGl0IG91dC4KKyAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2VCYWNrZW5kQXN5bmM7IC8vIEZJ
WE1FOiByZW1vdmUgdGhpcyB3aGVuIHRoZSBiYWNrZW5kIGhhcyBiZWVuIHNwbGl0IG91dC4KIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZC5jcHAJKHJldmlzaW9uIDE0
MTE2OCkJKGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERh
dGFiYXNlLmNwcDoxNDExNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgorCisjaWYg
RU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkRhdGFiYXNlQXV0aG9yaXplci5oIgor
I2luY2x1ZGUgIkRhdGFiYXNlQ29udGV4dC5oIgorI2luY2x1ZGUgIkRhdGFiYXNlTWFuYWdlci5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5j
bHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiU1FMaXRlVHJhbnNhY3Rpb24uaCIK
KyNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+CisKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRlICJEYXRhYmFz
ZU9ic2VydmVyLmgiIC8vIEZvciBlcnJvciByZXBvcnRpbmcuCisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uS2V5W10gPSAiV2ViS2l0RGF0
YWJhc2VWZXJzaW9uS2V5IjsKK3N0YXRpYyBjb25zdCBjaGFyIGluZm9UYWJsZU5hbWVbXSA9ICJf
X1dlYktpdERhdGFiYXNlSW5mb1RhYmxlX18iOworCitzdGF0aWMgU3RyaW5nIGZvcm1hdEVycm9y
TWVzc2FnZShjb25zdCBjaGFyKiBtZXNzYWdlLCBpbnQgc3FsaXRlRXJyb3JDb2RlLCBjb25zdCBj
aGFyKiBzcWxpdGVFcnJvck1lc3NhZ2UpCit7CisgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIl
cyAoJWQgJXMpIiwgbWVzc2FnZSwgc3FsaXRlRXJyb3JDb2RlLCBzcWxpdGVFcnJvck1lc3NhZ2Up
OworfQorCitzdGF0aWMgYm9vbCByZXRyaWV2ZVRleHRSZXN1bHRGcm9tRGF0YWJhc2UoU1FMaXRl
RGF0YWJhc2UmIGRiLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBTdHJpbmcmIHJlc3VsdFN0cmluZykK
K3sKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRiLCBxdWVyeSk7CisgICAgaW50IHJl
c3VsdCA9IHN0YXRlbWVudC5wcmVwYXJlKCk7CisKKyAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3Vs
dE9rKSB7CisgICAgICAgIExPR19FUlJPUigiRXJyb3IgKCVpKSBwcmVwYXJpbmcgc3RhdGVtZW50
IHRvIHJlYWQgdGV4dCByZXN1bHQgZnJvbSBkYXRhYmFzZSAoJXMpIiwgcmVzdWx0LCBxdWVyeS5h
c2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXN1
bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KSB7
CisgICAgICAgIHJlc3VsdFN0cmluZyA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHREb25l
KSB7CisgICAgICAgIHJlc3VsdFN0cmluZyA9IFN0cmluZygpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBMT0dfRVJST1IoIkVycm9yICglaSkgcmVhZGluZyB0ZXh0IHJlc3Vs
dCBmcm9tIGRhdGFiYXNlICglcykiLCByZXN1bHQsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIHNldFRleHRWYWx1ZUluRGF0YWJhc2Uo
U1FMaXRlRGF0YWJhc2UmIGRiLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBTdHJpbmcmIHZh
bHVlKQoreworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGIsIHF1ZXJ5KTsKKyAgICBp
bnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKKworICAgIGlmIChyZXN1bHQgIT0gU1FM
UmVzdWx0T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1l
bnQgdG8gc2V0IHZhbHVlIGluIGRhdGFiYXNlICglcykiLCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGF0ZW1lbnQuYmluZFRleHQo
MSwgdmFsdWUpOworCisgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpZiAocmVz
dWx0ICE9IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc3Rl
cCBzdGF0ZW1lbnQgdG8gc2V0IHZhbHVlIGluIGRhdGFiYXNlICglcykiLCBxdWVyeS5hc2NpaSgp
LmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworLy8gRklYTUU6IG1vdmUgYWxsIGd1aWQtcmVsYXRlZCBmdW5jdGlvbnMgdG8gYSBE
YXRhYmFzZVZlcnNpb25UcmFja2VyIGNsYXNzLgorc3RhdGljIE11dGV4JiBndWlkTXV0ZXgoKQor
eworICAgIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyhNdXRleCYsIG11dGV4ID0gKm5ldyBN
dXRleCk7CisgICAgcmV0dXJuIG11dGV4OworfQorCit0eXBlZGVmIEhhc2hNYXA8RGF0YWJhc2VH
dWlkLCBTdHJpbmc+IEd1aWRWZXJzaW9uTWFwOworc3RhdGljIEd1aWRWZXJzaW9uTWFwJiBndWlk
VG9WZXJzaW9uTWFwKCkKK3sKKyAgICAvLyBFbnN1cmUgdGhlIHRoZSBtdXRleCBpcyBsb2NrZWQu
CisgICAgQVNTRVJUKCFndWlkTXV0ZXgoKS50cnlMb2NrKCkpOworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoR3VpZFZlcnNpb25NYXAsIG1hcCwgKCkpOworICAgIHJldHVybiBtYXA7Cit9CisKKy8v
IE5PVEU6IENhbGxlciBtdXN0IGxvY2sgZ3VpZE11dGV4KCkuCitzdGF0aWMgaW5saW5lIHZvaWQg
dXBkYXRlR3VpZFZlcnNpb25NYXAoRGF0YWJhc2VHdWlkIGd1aWQsIFN0cmluZyBuZXdWZXJzaW9u
KQoreworICAgIC8vIEVuc3VyZSB0aGUgdGhlIG11dGV4IGlzIGxvY2tlZC4KKyAgICBBU1NFUlQo
IWd1aWRNdXRleCgpLnRyeUxvY2soKSk7CisKKyAgICAvLyBOb3RlOiBJdCBpcyBub3Qgc2FmZSB0
byBwdXQgYW4gZW1wdHkgc3RyaW5nIGludG8gdGhlIGd1aWRUb1ZlcnNpb25NYXAoKSBtYXAuCisg
ICAgLy8gVGhhdCdzIGJlY2F1c2UgdGhlIG1hcCBpcyBjcm9zcy10aHJlYWQsIGJ1dCBlbXB0eSBz
dHJpbmdzIGFyZSBwZXItdGhyZWFkLgorICAgIC8vIFRoZSBjb3B5KCkgZnVuY3Rpb24gbWFrZXMg
YSB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgeW91IGNhbiB1c2Ugb24gdGhlIGN1cnJlbnQKKyAgICAv
LyB0aHJlYWQsIGJ1dCB3ZSBuZWVkIGEgc3RyaW5nIHdlIGNhbiBrZWVwIGluIGEgY3Jvc3MtdGhy
ZWFkIGRhdGEgc3RydWN0dXJlLgorICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgcXVpdGUtYXdrd2Fy
ZCByZXN0cmljdGlvbiB0byBoYXZlIHRvIHByb2dyYW0gd2l0aC4KKworICAgIC8vIE1hcCBudWxs
IHN0cmluZyB0byBlbXB0eSBzdHJpbmcgKHNlZSBjb21tZW50IGFib3ZlKS4KKyAgICBndWlkVG9W
ZXJzaW9uTWFwKCkuc2V0KGd1aWQsIG5ld1ZlcnNpb24uaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBu
ZXdWZXJzaW9uLmlzb2xhdGVkQ29weSgpKTsKK30KKwordHlwZWRlZiBIYXNoTWFwPERhdGFiYXNl
R3VpZCwgSGFzaFNldDxBYnN0cmFjdERhdGFiYXNlKj4qPiBHdWlkRGF0YWJhc2VNYXA7CitzdGF0
aWMgR3VpZERhdGFiYXNlTWFwJiBndWlkVG9EYXRhYmFzZU1hcCgpCit7CisgICAgLy8gRW5zdXJl
IHRoZSB0aGUgbXV0ZXggaXMgbG9ja2VkLgorICAgIEFTU0VSVCghZ3VpZE11dGV4KCkudHJ5TG9j
aygpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEd1aWREYXRhYmFzZU1hcCwgbWFwLCAoKSk7
CisgICAgcmV0dXJuIG1hcDsKK30KKworc3RhdGljIERhdGFiYXNlR3VpZCBndWlkRm9yT3JpZ2lu
QW5kTmFtZShjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAg
IC8vIEVuc3VyZSB0aGUgdGhlIG11dGV4IGlzIGxvY2tlZC4KKyAgICBBU1NFUlQoIWd1aWRNdXRl
eCgpLnRyeUxvY2soKSk7CisKKyAgICBTdHJpbmcgc3RyaW5nSUQgPSBvcmlnaW4gKyAiLyIgKyBu
YW1lOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgaW50PiBJREd1aWRNYXA7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChJREd1aWRNYXAsIHN0cmluZ0lkZW50aWZpZXJUb0dVSURNYXAs
ICgpKTsKKyAgICBEYXRhYmFzZUd1aWQgZ3VpZCA9IHN0cmluZ0lkZW50aWZpZXJUb0dVSURNYXAu
Z2V0KHN0cmluZ0lEKTsKKyAgICBpZiAoIWd1aWQpIHsKKyAgICAgICAgc3RhdGljIGludCBjdXJy
ZW50TmV3R1VJRCA9IDE7CisgICAgICAgIGd1aWQgPSBjdXJyZW50TmV3R1VJRCsrOworICAgICAg
ICBzdHJpbmdJZGVudGlmaWVyVG9HVUlETWFwLnNldChzdHJpbmdJRCwgZ3VpZCk7CisgICAgfQor
CisgICAgcmV0dXJuIGd1aWQ7Cit9CisKKy8vIHN0YXRpYworY29uc3QgY2hhciogQWJzdHJhY3RE
YXRhYmFzZTo6ZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkKK3sKKyAgICByZXR1cm4gaW5mb1RhYmxl
TmFtZTsKK30KKworQWJzdHJhY3REYXRhYmFzZTo6QWJzdHJhY3REYXRhYmFzZShQYXNzUmVmUHRy
PERhdGFiYXNlQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRl
ZFNpemUsIERhdGFiYXNlVHlwZSBkYXRhYmFzZVR5cGUpCisgICAgOiBtX2RhdGFiYXNlQ29udGV4
dChkYXRhYmFzZUNvbnRleHQpCisgICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQobV9kYXRh
YmFzZUNvbnRleHQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAsIG1fbmFtZShuYW1l
Lmlzb2xhdGVkQ29weSgpKQorICAgICwgbV9leHBlY3RlZFZlcnNpb24oZXhwZWN0ZWRWZXJzaW9u
Lmlzb2xhdGVkQ29weSgpKQorICAgICwgbV9kaXNwbGF5TmFtZShkaXNwbGF5TmFtZS5pc29sYXRl
ZENvcHkoKSkKKyAgICAsIG1fZXN0aW1hdGVkU2l6ZShlc3RpbWF0ZWRTaXplKQorICAgICwgbV9n
dWlkKDApCisgICAgLCBtX29wZW5lZChmYWxzZSkKKyAgICAsIG1fbmV3KGZhbHNlKQorICAgICwg
bV9pc1N5bmNEYXRhYmFzZShkYXRhYmFzZVR5cGUgPT0gU3luY0RhdGFiYXNlKQoreworICAgIEFT
U0VSVChtX2RhdGFiYXNlQ29udGV4dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRl
eHRUaHJlYWQoKSk7CisgICAgbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4gPSBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmlzb2xhdGVkQ29weSgpOworCisg
ICAgbV9kYXRhYmFzZUF1dGhvcml6ZXIgPSBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZShpbmZv
VGFibGVOYW1lKTsKKworICAgIGlmIChtX25hbWUuaXNOdWxsKCkpCisgICAgICAgIG1fbmFtZSA9
ICIiOworCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwor
ICAgICAgICBtX2d1aWQgPSBndWlkRm9yT3JpZ2luQW5kTmFtZShzZWN1cml0eU9yaWdpbigpLT50
b1N0cmluZygpLCBuYW1lKTsKKyAgICAgICAgSGFzaFNldDxBYnN0cmFjdERhdGFiYXNlKj4qIGhh
c2hTZXQgPSBndWlkVG9EYXRhYmFzZU1hcCgpLmdldChtX2d1aWQpOworICAgICAgICBpZiAoIWhh
c2hTZXQpIHsKKyAgICAgICAgICAgIGhhc2hTZXQgPSBuZXcgSGFzaFNldDxBYnN0cmFjdERhdGFi
YXNlKj47CisgICAgICAgICAgICBndWlkVG9EYXRhYmFzZU1hcCgpLnNldChtX2d1aWQsIGhhc2hT
ZXQpOworICAgICAgICB9CisKKyAgICAgICAgaGFzaFNldC0+YWRkKHRoaXMpOworICAgIH0KKwor
ICAgIG1fZmlsZW5hbWUgPSBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5mdWxsUGF0aEZvckRh
dGFiYXNlKHNlY3VyaXR5T3JpZ2luKCksIG1fbmFtZSk7CisgICAgRGF0YWJhc2VNYW5hZ2VyOjpt
YW5hZ2VyKCkuYWRkT3BlbkRhdGFiYXNlKHRoaXMpOworfQorCitBYnN0cmFjdERhdGFiYXNlOjp+
QWJzdHJhY3REYXRhYmFzZSgpCit7CisgICAgQVNTRVJUKCFtX29wZW5lZCk7Cit9CisKK3ZvaWQg
QWJzdHJhY3REYXRhYmFzZTo6Y2xvc2VEYXRhYmFzZSgpCit7CisgICAgaWYgKCFtX29wZW5lZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOworICAgIG1f
b3BlbmVkID0gZmFsc2U7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11
dGV4KCkpOworCisgICAgICAgIEhhc2hTZXQ8QWJzdHJhY3REYXRhYmFzZSo+KiBoYXNoU2V0ID0g
Z3VpZFRvRGF0YWJhc2VNYXAoKS5nZXQobV9ndWlkKTsKKyAgICAgICAgQVNTRVJUKGhhc2hTZXQp
OworICAgICAgICBBU1NFUlQoaGFzaFNldC0+Y29udGFpbnModGhpcykpOworICAgICAgICBoYXNo
U2V0LT5yZW1vdmUodGhpcyk7CisgICAgICAgIGlmIChoYXNoU2V0LT5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIGd1aWRUb0RhdGFiYXNlTWFwKCkucmVtb3ZlKG1fZ3VpZCk7CisgICAgICAgICAg
ICBkZWxldGUgaGFzaFNldDsKKyAgICAgICAgICAgIGd1aWRUb1ZlcnNpb25NYXAoKS5yZW1vdmUo
bV9ndWlkKTsKKyAgICAgICAgfQorICAgIH0KK30KKworU3RyaW5nIEFic3RyYWN0RGF0YWJhc2U6
OnZlcnNpb24oKSBjb25zdAoreworICAgIC8vIE5vdGU6IEluIG11bHRpLXByb2Nlc3MgYnJvd3Nl
cnMgdGhlIGNhY2hlZCB2YWx1ZSBtYXkgYmUgYWNjdXJhdGUsIGJ1dCB3ZSBjYW5ub3QgcmVhZCB0
aGUKKyAgICAvLyBhY3R1YWwgdmVyc2lvbiBmcm9tIHRoZSBkYXRhYmFzZSB3aXRob3V0IHBvdGVu
dGlhbGx5IGluZHVjaW5nIGEgZGVhZGxvY2suCisgICAgLy8gRklYTUU6IEFkZCBhbiBhc3luYyB2
ZXJzaW9uIGdldHRlciB0byB0aGUgRGF0YWJhc2VBUEkuCisgICAgcmV0dXJuIGdldENhY2hlZFZl
cnNpb24oKTsKK30KKworYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlm
eShib29sIHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiBlYywg
U3RyaW5nJiBlcnJvck1lc3NhZ2UpCit7CisgICAgQVNTRVJUKGVycm9yTWVzc2FnZS5pc0VtcHR5
KCkpOworCisgICAgY29uc3QgaW50IG1heFNxbGl0ZUJ1c3lXYWl0VGltZSA9IDMwMDAwOworCisg
ICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLm9wZW4obV9maWxlbmFtZSwgdHJ1ZSkpIHsKKyAgICAg
ICAgcmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KDEsIElOVkFMSURfU1RBVEVfRVJSLCBtX3NxbGl0
ZURhdGFiYXNlLmxhc3RFcnJvcigpKTsKKyAgICAgICAgZXJyb3JNZXNzYWdlID0gZm9ybWF0RXJy
b3JNZXNzYWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSIsIG1fc3FsaXRlRGF0YWJhc2UubGFz
dEVycm9yKCksIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBlYyA9
IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlm
ICghbV9zcWxpdGVEYXRhYmFzZS50dXJuT25JbmNyZW1lbnRhbEF1dG9WYWN1dW0oKSkKKyAgICAg
ICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gdHVybiBvbiBpbmNyZW1lbnRhbCBhdXRvLXZhY3V1bSAo
JWQgJXMpIiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CisKKyAgICBtX3NxbGl0ZURhdGFiYXNlLnNldEJ1c3lUaW1lb3V0KG1h
eFNxbGl0ZUJ1c3lXYWl0VGltZSk7CisKKyAgICBTdHJpbmcgY3VycmVudFZlcnNpb247CisgICAg
eworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOworCisgICAgICAgIEd1
aWRWZXJzaW9uTWFwOjppdGVyYXRvciBlbnRyeSA9IGd1aWRUb1ZlcnNpb25NYXAoKS5maW5kKG1f
Z3VpZCk7CisgICAgICAgIGlmIChlbnRyeSAhPSBndWlkVG9WZXJzaW9uTWFwKCkuZW5kKCkpIHsK
KyAgICAgICAgICAgIC8vIE1hcCBudWxsIHN0cmluZyB0byBlbXB0eSBzdHJpbmcgKHNlZSB1cGRh
dGVHdWlkVmVyc2lvbk1hcCgpKS4KKyAgICAgICAgICAgIGN1cnJlbnRWZXJzaW9uID0gZW50cnkt
PnZhbHVlLmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IGVudHJ5LT52YWx1ZS5pc29sYXRlZENv
cHkoKTsKKyAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiQ3VycmVudCBjYWNoZWQgdmVyc2lv
biBmb3IgZ3VpZCAlaSBpcyAlcyIsIG1fZ3VpZCwgY3VycmVudFZlcnNpb24uYXNjaWkoKS5kYXRh
KCkpOworCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgICAgICAgICAvLyBOb3RlOiBJbiBt
dWx0aS1wcm9jZXNzIGJyb3dzZXJzIHRoZSBjYWNoZWQgdmFsdWUgbWF5IGJlIGluYWNjdXJhdGUs
IGJ1dAorICAgICAgICAgICAgLy8gd2UgY2Fubm90IHJlYWQgdGhlIGFjdHVhbCB2ZXJzaW9uIGZy
b20gdGhlIGRhdGFiYXNlIHdpdGhvdXQgcG90ZW50aWFsbHkKKyAgICAgICAgICAgIC8vIGluZHVj
aW5nIGEgZm9ybSBvZiBkZWFkbG9jaywgYSBidXN5dGltZW91dCBlcnJvciB3aGVuIHRyeWluZyB0
bworICAgICAgICAgICAgLy8gYWNjZXNzIHRoZSBkYXRhYmFzZS4gU28gd2UnbGwgdXNlIHRoZSBj
YWNoZWQgdmFsdWUgaWYgd2UncmUgdW5hYmxlIHRvIHJlYWQKKyAgICAgICAgICAgIC8vIHRoZSB2
YWx1ZSBmcm9tIHRoZSBkYXRhYmFzZSBmaWxlIHdpdGhvdXQgd2FpdGluZy4KKyAgICAgICAgICAg
IC8vIEZJWE1FOiBBZGQgYW4gYXN5bmMgb3BlbkRhdGFiYXNlIG1ldGhvZCB0byB0aGUgRGF0YWJh
c2VBUEkuCisgICAgICAgICAgICBjb25zdCBpbnQgbm9TcWxpdGVCdXN5V2FpdFRpbWUgPSAwOwor
ICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5zZXRCdXN5VGltZW91dChub1NxbGl0ZUJ1c3lX
YWl0VGltZSk7CisgICAgICAgICAgICBTdHJpbmcgdmVyc2lvbkZyb21EYXRhYmFzZTsKKyAgICAg
ICAgICAgIGlmIChnZXRWZXJzaW9uRnJvbURhdGFiYXNlKHZlcnNpb25Gcm9tRGF0YWJhc2UsIGZh
bHNlKSkgeworICAgICAgICAgICAgICAgIGN1cnJlbnRWZXJzaW9uID0gdmVyc2lvbkZyb21EYXRh
YmFzZTsKKyAgICAgICAgICAgICAgICB1cGRhdGVHdWlkVmVyc2lvbk1hcChtX2d1aWQsIGN1cnJl
bnRWZXJzaW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2Uu
c2V0QnVzeVRpbWVvdXQobWF4U3FsaXRlQnVzeVdhaXRUaW1lKTsKKyNlbmRpZgorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJObyBjYWNoZWQgdmVyc2lvbiBm
b3IgZ3VpZCAlaSIsIG1fZ3VpZCk7CisKKyAgICAgICAgICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRy
YW5zYWN0aW9uKG1fc3FsaXRlRGF0YWJhc2UpOworICAgICAgICAgICAgdHJhbnNhY3Rpb24uYmVn
aW4oKTsKKyAgICAgICAgICAgIGlmICghdHJhbnNhY3Rpb24uaW5Qcm9ncmVzcygpKSB7CisgICAg
ICAgICAgICAgICAgcmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KDIsIElOVkFMSURfU1RBVEVfRVJS
LCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpKTsKKyAgICAgICAgICAgICAgICBlcnJvck1l
c3NhZ2UgPSBmb3JtYXRFcnJvck1lc3NhZ2UoInVuYWJsZSB0byBvcGVuIGRhdGFiYXNlLCBmYWls
ZWQgdG8gc3RhcnQgdHJhbnNhY3Rpb24iLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpLCBt
X3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgICAgICBlYyA9IElO
VkFMSURfU1RBVEVfRVJSOworICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2Uo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIFN0cmluZyB0YWJsZU5hbWUoaW5mb1RhYmxlTmFtZSk7CisgICAgICAgICAgICBpZiAo
IW1fc3FsaXRlRGF0YWJhc2UudGFibGVFeGlzdHModGFibGVOYW1lKSkgeworICAgICAgICAgICAg
ICAgIG1fbmV3ID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIGlmICghbV9zcWxpdGVEYXRhYmFz
ZS5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFICIgKyB0YWJsZU5hbWUgKyAiIChrZXkgVEVY
VCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIFVOSVFVRSBPTiBDT05GTElDVCBSRVBMQUNFLHZh
bHVlIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCk7IikpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KDMsIElOVkFMSURfU1RBVEVfRVJSLCBtX3Nx
bGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpKTsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNz
YWdlID0gZm9ybWF0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSwgZmFpbGVk
IHRvIGNyZWF0ZSAnaW5mbycgdGFibGUiLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpLCBt
X3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgICAgICAgICAgZWMg
PSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ucm9s
bGJhY2soKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIGlmICghZ2V0VmVyc2lvbkZyb21EYXRhYmFzZShjdXJyZW50VmVyc2lv
biwgZmFsc2UpKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KDQs
IElOVkFMSURfU1RBVEVfRVJSLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpKTsKKyAgICAg
ICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBmb3JtYXRFcnJvck1lc3NhZ2UoInVuYWJsZSB0byBv
cGVuIGRhdGFiYXNlLCBmYWlsZWQgdG8gcmVhZCBjdXJyZW50IHZlcnNpb24iLCBtX3NxbGl0ZURh
dGFiYXNlLmxhc3RFcnJvcigpLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICAgICAgICAgIHRy
YW5zYWN0aW9uLnJvbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5j
bG9zZSgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKGN1cnJlbnRWZXJzaW9uLmxlbmd0aCgpKSB7CisgICAgICAgICAgICAg
ICAgTE9HKFN0b3JhZ2VBUEksICJSZXRyaWV2ZWQgY3VycmVudCB2ZXJzaW9uICVzIGZyb20gZGF0
YWJhc2UgJXMiLCBjdXJyZW50VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05h
bWUoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFtX25ldyB8fCBz
aG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSkgeworICAgICAgICAgICAgICAgIExPRyhTdG9y
YWdlQVBJLCAiU2V0dGluZyB2ZXJzaW9uICVzIGluIGRhdGFiYXNlICVzIHRoYXQgd2FzIGp1c3Qg
Y3JlYXRlZCIsIG1fZXhwZWN0ZWRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZURlYnVn
TmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNldFZlcnNpb25J
bkRhdGFiYXNlKG1fZXhwZWN0ZWRWZXJzaW9uLCBmYWxzZSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KDUsIElOVkFMSURfU1RBVEVfRVJSLCBtX3NxbGl0
ZURhdGFiYXNlLmxhc3RFcnJvcigpKTsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdl
ID0gZm9ybWF0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSwgZmFpbGVkIHRv
IHdyaXRlIGN1cnJlbnQgdmVyc2lvbiIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCksIG1f
c3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgICAgICAgICBlYyA9
IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5yb2xs
YmFjaygpOworICAgICAgICAgICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSBtX2V4cGVjdGVkVmVyc2lvbjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKG1fZ3VpZCwgY3VycmVudFZl
cnNpb24pOworICAgICAgICAgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoY3VycmVudFZlcnNpb24uaXNOdWxsKCkpIHsKKyAgICAgICAgTE9HKFN0
b3JhZ2VBUEksICJEYXRhYmFzZSAlcyBkb2VzIG5vdCBoYXZlIGl0cyB2ZXJzaW9uIHNldCIsIGRh
dGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBjdXJyZW50VmVyc2lv
biA9ICIiOworICAgIH0KKworICAgIC8vIElmIHRoZSBleHBlY3RlZCB2ZXJzaW9uIGlzbid0IHRo
ZSBlbXB0eSBzdHJpbmcsIGVuc3VyZSB0aGF0IHRoZSBjdXJyZW50IGRhdGFiYXNlIHZlcnNpb24g
d2UgaGF2ZSBtYXRjaGVzIHRoYXQgdmVyc2lvbi4gT3RoZXJ3aXNlLCBzZXQgYW4gZXhjZXB0aW9u
LgorICAgIC8vIElmIHRoZSBleHBlY3RlZCB2ZXJzaW9uIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRo
ZW4gd2UgYWx3YXlzIHJldHVybiB3aXRoIHdoYXRldmVyIHZlcnNpb24gb2YgdGhlIGRhdGFiYXNl
IHdlIGhhdmUuCisgICAgaWYgKCghbV9uZXcgfHwgc2hvdWxkU2V0VmVyc2lvbkluTmV3RGF0YWJh
c2UpICYmIG1fZXhwZWN0ZWRWZXJzaW9uLmxlbmd0aCgpICYmIG1fZXhwZWN0ZWRWZXJzaW9uICE9
IGN1cnJlbnRWZXJzaW9uKSB7CisgICAgICAgIHJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdCg2LCBJ
TlZBTElEX1NUQVRFX0VSUiwgMCk7CisgICAgICAgIGVycm9yTWVzc2FnZSA9ICJ1bmFibGUgdG8g
b3BlbiBkYXRhYmFzZSwgdmVyc2lvbiBtaXNtYXRjaCwgJyIgKyBtX2V4cGVjdGVkVmVyc2lvbiAr
ICInIGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50VmVyc2lvbiBvZiAnIiArIGN1cnJlbnRWZXJz
aW9uICsgIiciOworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICBtX3Nx
bGl0ZURhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1fc3FsaXRlRGF0YWJhc2Uuc2V0
QXV0aG9yaXplcihtX2RhdGFiYXNlQXV0aG9yaXplcik7CisKKyAgICBtX29wZW5lZCA9IHRydWU7
CisKKyAgICBpZiAobV9uZXcgJiYgIXNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlKQorICAg
ICAgICBtX2V4cGVjdGVkVmVyc2lvbiA9ICIiOyAvLyBUaGUgY2FsbGVyIHByb3ZpZGVkIGEgY3Jl
YXRpb25DYWxsYmFjayB3aGljaCB3aWxsIHNldCB0aGUgZXhwZWN0ZWQgdmVyc2lvbi4KKworICAg
IHJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdCgwLCAtMSwgMCk7IC8vIE9LCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEFic3RyYWN0RGF0YWJhc2U6OnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuZ2V0KCk7Cit9CisKK1NlY3VyaXR5T3JpZ2luKiBBYnN0cmFjdERhdGFiYXNlOjpz
ZWN1cml0eU9yaWdpbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dFRocmVhZFNlY3Vy
aXR5T3JpZ2luLmdldCgpOworfQorCitTdHJpbmcgQWJzdHJhY3REYXRhYmFzZTo6c3RyaW5nSWRl
bnRpZmllcigpIGNvbnN0Cit7CisgICAgLy8gUmV0dXJuIGEgZGVlcCBjb3B5IGZvciByZWYgY291
bnRpbmcgdGhyZWFkIHNhZmV0eQorICAgIHJldHVybiBtX25hbWUuaXNvbGF0ZWRDb3B5KCk7Cit9
CisKK1N0cmluZyBBYnN0cmFjdERhdGFiYXNlOjpkaXNwbGF5TmFtZSgpIGNvbnN0Cit7CisgICAg
Ly8gUmV0dXJuIGEgZGVlcCBjb3B5IGZvciByZWYgY291bnRpbmcgdGhyZWFkIHNhZmV0eQorICAg
IHJldHVybiBtX2Rpc3BsYXlOYW1lLmlzb2xhdGVkQ29weSgpOworfQorCit1bnNpZ25lZCBsb25n
IEFic3RyYWN0RGF0YWJhc2U6OmVzdGltYXRlZFNpemUoKSBjb25zdAoreworICAgIHJldHVybiBt
X2VzdGltYXRlZFNpemU7Cit9CisKK1N0cmluZyBBYnN0cmFjdERhdGFiYXNlOjpmaWxlTmFtZSgp
IGNvbnN0Cit7CisgICAgLy8gUmV0dXJuIGEgZGVlcCBjb3B5IGZvciByZWYgY291bnRpbmcgdGhy
ZWFkIHNhZmV0eQorICAgIHJldHVybiBtX2ZpbGVuYW1lLmlzb2xhdGVkQ29weSgpOworfQorCitE
YXRhYmFzZURldGFpbHMgQWJzdHJhY3REYXRhYmFzZTo6ZGV0YWlscygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIERhdGFiYXNlRGV0YWlscyhzdHJpbmdJZGVudGlmaWVyKCksIGRpc3BsYXlOYW1lKCks
IGVzdGltYXRlZFNpemUoKSwgMCk7Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6Z2V0VmVy
c2lvbkZyb21EYXRhYmFzZShTdHJpbmcmIHZlcnNpb24sIGJvb2wgc2hvdWxkQ2FjaGVWZXJzaW9u
KQoreworICAgIFN0cmluZyBxdWVyeShTdHJpbmcoIlNFTEVDVCB2YWx1ZSBGUk9NICIpICsgaW5m
b1RhYmxlTmFtZSArICAiIFdIRVJFIGtleSA9ICciICsgdmVyc2lvbktleSArICInOyIpOworCisg
ICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKKworICAgIGJvb2wgcmVzdWx0ID0g
cmV0cmlldmVUZXh0UmVzdWx0RnJvbURhdGFiYXNlKG1fc3FsaXRlRGF0YWJhc2UsIHF1ZXJ5LCB2
ZXJzaW9uKTsKKyAgICBpZiAocmVzdWx0KSB7CisgICAgICAgIGlmIChzaG91bGRDYWNoZVZlcnNp
b24pCisgICAgICAgICAgICBzZXRDYWNoZWRWZXJzaW9uKHZlcnNpb24pOworICAgIH0gZWxzZQor
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSB2ZXJzaW9uIGZyb20gZGF0YWJh
c2UgJXMiLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKworICAgIG1fZGF0
YWJhc2VBdXRob3JpemVyLT5lbmFibGUoKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jv
b2wgQWJzdHJhY3REYXRhYmFzZTo6c2V0VmVyc2lvbkluRGF0YWJhc2UoY29uc3QgU3RyaW5nJiB2
ZXJzaW9uLCBib29sIHNob3VsZENhY2hlVmVyc2lvbikKK3sKKyAgICAvLyBUaGUgSU5TRVJUIHdp
bGwgcmVwbGFjZSBhbiBleGlzdGluZyBlbnRyeSBmb3IgdGhlIGRhdGFiYXNlIHdpdGggdGhlIG5l
dyB2ZXJzaW9uIG51bWJlciwgZHVlIHRvIHRoZSBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRQor
ICAgIC8vIGNsYXVzZSBpbiB0aGUgQ1JFQVRFIHN0YXRlbWVudCAoc2VlIERhdGFiYXNlOjpwZXJm
b3JtT3BlbkFuZFZlcmlmeSgpKS4KKyAgICBTdHJpbmcgcXVlcnkoU3RyaW5nKCJJTlNFUlQgSU5U
TyAiKSArIGluZm9UYWJsZU5hbWUgKyAgIiAoa2V5LCB2YWx1ZSkgVkFMVUVTICgnIiArIHZlcnNp
b25LZXkgKyAiJywgPyk7Iik7CisKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgp
OworCisgICAgYm9vbCByZXN1bHQgPSBzZXRUZXh0VmFsdWVJbkRhdGFiYXNlKG1fc3FsaXRlRGF0
YWJhc2UsIHF1ZXJ5LCB2ZXJzaW9uKTsKKyAgICBpZiAocmVzdWx0KSB7CisgICAgICAgIGlmIChz
aG91bGRDYWNoZVZlcnNpb24pCisgICAgICAgICAgICBzZXRDYWNoZWRWZXJzaW9uKHZlcnNpb24p
OworICAgIH0gZWxzZQorICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgdmVyc2lvbiAl
cyBpbiBkYXRhYmFzZSAoJXMpIiwgdmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgcXVlcnkuYXNjaWko
KS5kYXRhKCkpOworCisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmVuYWJsZSgpOworCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBBYnN0cmFjdERhdGFiYXNlOjpzZXRFeHBlY3RlZFZl
cnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQoreworICAgIG1fZXhwZWN0ZWRWZXJzaW9uID0g
dmVyc2lvbi5pc29sYXRlZENvcHkoKTsKK30KKworU3RyaW5nIEFic3RyYWN0RGF0YWJhc2U6Omdl
dENhY2hlZFZlcnNpb24oKSBjb25zdAoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0
ZXgoKSk7CisgICAgcmV0dXJuIGd1aWRUb1ZlcnNpb25NYXAoKS5nZXQobV9ndWlkKS5pc29sYXRl
ZENvcHkoKTsKK30KKwordm9pZCBBYnN0cmFjdERhdGFiYXNlOjpzZXRDYWNoZWRWZXJzaW9uKGNv
bnN0IFN0cmluZyYgYWN0dWFsVmVyc2lvbikKK3sKKyAgICAvLyBVcGRhdGUgdGhlIGluIG1lbW9y
eSBkYXRhYmFzZSB2ZXJzaW9uIG1hcC4KKyAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4
KCkpOworICAgIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKG1fZ3VpZCwgYWN0dWFsVmVyc2lvbik7Cit9
CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6Z2V0QWN0dWFsVmVyc2lvbkZvclRyYW5zYWN0aW9u
KFN0cmluZyAmYWN0dWFsVmVyc2lvbikKK3sKKyAgICBBU1NFUlQobV9zcWxpdGVEYXRhYmFzZS50
cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgLy8g
Tm90ZTogSW4gbXVsdGktcHJvY2VzcyBicm93c2VycyB0aGUgY2FjaGVkIHZhbHVlIG1heSBiZSBp
bmFjY3VyYXRlLgorICAgIC8vIFNvIHdlIHJldHJpZXZlIHRoZSB2YWx1ZSBmcm9tIHRoZSBkYXRh
YmFzZSBhbmQgdXBkYXRlIHRoZSBjYWNoZWQgdmFsdWUgaGVyZS4KKyAgICByZXR1cm4gZ2V0VmVy
c2lvbkZyb21EYXRhYmFzZShhY3R1YWxWZXJzaW9uLCB0cnVlKTsKKyNlbHNlCisgICAgYWN0dWFs
VmVyc2lvbiA9IGdldENhY2hlZFZlcnNpb24oKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgor
fQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OmRpc2FibGVBdXRob3JpemVyKCkKK3sKKyAgICBB
U1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5k
aXNhYmxlKCk7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6ZW5hYmxlQXV0aG9yaXplcigp
Cit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX2RhdGFiYXNlQXV0
aG9yaXplci0+ZW5hYmxlKCk7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6c2V0QXV0aG9y
aXplclJlYWRPbmx5KCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAg
IG1fZGF0YWJhc2VBdXRob3JpemVyLT5zZXRSZWFkT25seSgpOworfQorCit2b2lkIEFic3RyYWN0
RGF0YWJhc2U6OnNldEF1dGhvcml6ZXJQZXJtaXNzaW9ucyhpbnQgcGVybWlzc2lvbnMpCit7Cisg
ICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXpl
ci0+c2V0UGVybWlzc2lvbnMocGVybWlzc2lvbnMpOworfQorCitib29sIEFic3RyYWN0RGF0YWJh
c2U6Omxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNl
QXV0aG9yaXplcik7CisgICAgcmV0dXJuIG1fZGF0YWJhc2VBdXRob3JpemVyLT5sYXN0QWN0aW9u
Q2hhbmdlZERhdGFiYXNlKCk7Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6bGFzdEFjdGlv
bldhc0luc2VydCgpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBy
ZXR1cm4gbV9kYXRhYmFzZUF1dGhvcml6ZXItPmxhc3RBY3Rpb25XYXNJbnNlcnQoKTsKK30KKwor
dm9pZCBBYnN0cmFjdERhdGFiYXNlOjpyZXNldERlbGV0ZXMoKQoreworICAgIEFTU0VSVChtX2Rh
dGFiYXNlQXV0aG9yaXplcik7CisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJlc2V0RGVsZXRl
cygpOworfQorCitib29sIEFic3RyYWN0RGF0YWJhc2U6OmhhZERlbGV0ZXMoKQoreworICAgIEFT
U0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAgcmV0dXJuIG1fZGF0YWJhc2VBdXRob3Jp
emVyLT5oYWREZWxldGVzKCk7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVzZXRBdXRo
b3JpemVyKCkKK3sKKyAgICBpZiAobV9kYXRhYmFzZUF1dGhvcml6ZXIpCisgICAgICAgIG1fZGF0
YWJhc2VBdXRob3JpemVyLT5yZXNldCgpOworfQorCit1bnNpZ25lZCBsb25nIGxvbmcgQWJzdHJh
Y3REYXRhYmFzZTo6bWF4aW11bVNpemUoKSBjb25zdAoreworICAgIHJldHVybiBEYXRhYmFzZU1h
bmFnZXI6Om1hbmFnZXIoKS5nZXRNYXhTaXplRm9yRGF0YWJhc2UodGhpcyk7Cit9CisKK3ZvaWQg
QWJzdHJhY3REYXRhYmFzZTo6aW5jcmVtZW50YWxWYWN1dW1JZk5lZWRlZCgpCit7CisgICAgaW50
NjRfdCBmcmVlU3BhY2VTaXplID0gbV9zcWxpdGVEYXRhYmFzZS5mcmVlU3BhY2VTaXplKCk7Cisg
ICAgaW50NjRfdCB0b3RhbFNpemUgPSBtX3NxbGl0ZURhdGFiYXNlLnRvdGFsU2l6ZSgpOworICAg
IGlmICh0b3RhbFNpemUgPD0gMTAgKiBmcmVlU3BhY2VTaXplKSB7CisgICAgICAgIGludCByZXN1
bHQgPSBtX3NxbGl0ZURhdGFiYXNlLnJ1bkluY3JlbWVudGFsVmFjdXVtQ29tbWFuZCgpOworICAg
ICAgICByZXBvcnRWYWN1dW1EYXRhYmFzZVJlc3VsdChyZXN1bHQpOworICAgICAgICBpZiAocmVz
dWx0ICE9IFNRTFJlc3VsdE9rKQorICAgICAgICAgICAgbG9nRXJyb3JNZXNzYWdlKGZvcm1hdEVy
cm9yTWVzc2FnZSgiZXJyb3IgdmFjdXVtaW5nIGRhdGFiYXNlIiwgcmVzdWx0LCBtX3NxbGl0ZURh
dGFiYXNlLmxhc3RFcnJvck1zZygpKSk7CisgICAgfQorfQorCit2b2lkIEFic3RyYWN0RGF0YWJh
c2U6OmludGVycnVwdCgpCit7CisgICAgbV9zcWxpdGVEYXRhYmFzZS5pbnRlcnJ1cHQoKTsKK30K
KworYm9vbCBBYnN0cmFjdERhdGFiYXNlOjppc0ludGVycnVwdGVkKCkKK3sKKyAgICBNdXRleExv
Y2tlciBsb2NrZXIobV9zcWxpdGVEYXRhYmFzZS5kYXRhYmFzZU11dGV4KCkpOworICAgIHJldHVy
biBtX3NxbGl0ZURhdGFiYXNlLmlzSW50ZXJydXB0ZWQoKTsKK30KKwordm9pZCBBYnN0cmFjdERh
dGFiYXNlOjpsb2dFcnJvck1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQ29uc29sZU1lc3NhZ2UoT3RoZXJNZXNzYWdlU291
cmNlLCBFcnJvck1lc3NhZ2VMZXZlbCwgbWVzc2FnZSk7Cit9CisKKyNpZiBQTEFURk9STShDSFJP
TUlVTSkKKy8vIFRoZXNlIGFyZSB1c2VkIHRvIGdlbmVyYXRlIGhpc3RvZ3JhbXMgb2YgZXJyb3Jz
IHNlZW4gd2l0aCB3ZWJzcWwuCisvLyBTZWUgYWJvdXQ6aGlzdG9ncmFtcyBpbiBjaHJvbWl1bS4K
K3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KGludCBlcnJv
clNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpCit7CisgICAg
RGF0YWJhc2VPYnNlcnZlcjo6cmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KHRoaXMsIGVycm9yU2l0
ZSwgd2ViU3FsRXJyb3JDb2RlLCBzcWxpdGVFcnJvckNvZGUpOworfQorCit2b2lkIEFic3RyYWN0
RGF0YWJhc2U6OnJlcG9ydENoYW5nZVZlcnNpb25SZXN1bHQoaW50IGVycm9yU2l0ZSwgaW50IHdl
YlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSkKK3sKKyAgICBEYXRhYmFzZU9ic2Vy
dmVyOjpyZXBvcnRDaGFuZ2VWZXJzaW9uUmVzdWx0KHRoaXMsIGVycm9yU2l0ZSwgd2ViU3FsRXJy
b3JDb2RlLCBzcWxpdGVFcnJvckNvZGUpOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJl
cG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9y
Q29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSkKK3sKKyAgICBEYXRhYmFzZU9ic2VydmVyOjpyZXBv
cnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KHRoaXMsIGVycm9yU2l0ZSwgd2ViU3FsRXJyb3JDb2Rl
LCBzcWxpdGVFcnJvckNvZGUpOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlcG9ydENv
bW1pdFRyYW5zYWN0aW9uUmVzdWx0KGludCBlcnJvclNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUs
IGludCBzcWxpdGVFcnJvckNvZGUpCit7CisgICAgRGF0YWJhc2VPYnNlcnZlcjo6cmVwb3J0Q29t
bWl0VHJhbnNhY3Rpb25SZXN1bHQodGhpcywgZXJyb3JTaXRlLCB3ZWJTcWxFcnJvckNvZGUsIHNx
bGl0ZUVycm9yQ29kZSk7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVwb3J0RXhlY3V0
ZVN0YXRlbWVudFJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQg
c3FsaXRlRXJyb3JDb2RlKQoreworICAgIERhdGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydEV4ZWN1dGVT
dGF0ZW1lbnRSZXN1bHQodGhpcywgZXJyb3JTaXRlLCB3ZWJTcWxFcnJvckNvZGUsIHNxbGl0ZUVy
cm9yQ29kZSk7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVwb3J0VmFjdXVtRGF0YWJh
c2VSZXN1bHQoaW50IHNxbGl0ZUVycm9yQ29kZSkKK3sKKyAgICBEYXRhYmFzZU9ic2VydmVyOjpy
ZXBvcnRWYWN1dW1EYXRhYmFzZVJlc3VsdCh0aGlzLCBzcWxpdGVFcnJvckNvZGUpOworfQorCisj
ZWxzZQordm9pZCBBYnN0cmFjdERhdGFiYXNlOjpyZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQoaW50
LCBpbnQsIGludCkgeyB9Cit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlcG9ydENoYW5nZVZlcnNp
b25SZXN1bHQoaW50LCBpbnQsIGludCkgeyB9Cit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlcG9y
dFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoaW50LCBpbnQsIGludCkgeyB9Cit2b2lkIEFic3RyYWN0
RGF0YWJhc2U6OnJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KGludCwgaW50LCBpbnQpIHsg
fQordm9pZCBBYnN0cmFjdERhdGFiYXNlOjpyZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KGlu
dCwgaW50LCBpbnQpIHsgfQordm9pZCBBYnN0cmFjdERhdGFiYXNlOjpyZXBvcnRWYWN1dW1EYXRh
YmFzZVJlc3VsdChpbnQpIHsgfQorI2VuZGlmIC8vIFBMQVRGT1JNKENIUk9NSVVNKQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VCYWNrZW5kLmNwcAkocmV2aXNpb24gMTQxMTY4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywx
MyArMjcsMTUgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQWJzdHJh
Y3REYXRhYmFzZS5oIgorI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZC5oIgogCiAjaWYgRU5BQkxF
KFNRTF9EQVRBQkFTRSkKIAogI2luY2x1ZGUgIkRhdGFiYXNlQXV0aG9yaXplci5oIgorI2luY2x1
ZGUgIkRhdGFiYXNlQmFja2VuZENvbnRleHQuaCIKICNpbmNsdWRlICJEYXRhYmFzZUNvbnRleHQu
aCIKICNpbmNsdWRlICJEYXRhYmFzZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVRyYWNr
ZXIuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgog
I2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgpAQCAtNTMsNiArNTUsMzQgQEAKICNpbmNsdWRl
ICJEYXRhYmFzZU9ic2VydmVyLmgiIC8vIEZvciBlcnJvciByZXBvcnRpbmcuCiAjZW5kaWYKIAor
Ly8gUmVnaXN0ZXJpbmcgIm9wZW5lZCIgZGF0YWJhc2VzIHdpdGggdGhlIERhdGFiYXNlVHJhY2tl
cgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQorLy8gVGhlIERhdGFiYXNlVHJhY2tlciBtYWludGFpbnMgYSBsaXN0IG9mIGRhdGFiYXNl
cyB0aGF0IGhhdmUgYmVlbgorLy8gIm9wZW5lZCIgc28gdGhhdCB0aGUgY2xpZW50IGNhbiBjYWxs
IGludGVycnVwdCBvciBkZWxldGUgZXZlcnkgZGF0YWJhc2UKKy8vIGFzc29jaWF0ZWQgd2l0aCBh
IERhdGFiYXNlQmFja2VuZENvbnRleHQuCisvLworLy8gV2Ugb25seSBjYWxsIERhdGFiYXNlVHJh
Y2tlcjo6YWRkT3BlbkRhdGFiYXNlKCkgdG8gYWRkIHRoZSBkYXRhYmFzZQorLy8gdG8gdGhlIHRy
YWNrZXIgYXMgb3BlbmVkIHdoZW4gd2UndmUgc3VjY2VlZGVkIGluIG9wZW5pbmcgdGhlIGRhdGFi
YXNlCisvLyBhbmQgd2lsbCBzZXQgbV9vcGVuZWQgdG8gdHJ1ZS4gU2ltaWxhcmx5LCB3ZSBvbmx5
IGNhbGwKKy8vIERhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlT3BlbkRhdGFiYXNlKCkgdG8gcmVtb3Zl
IHRoZSBkYXRhYmFzZSBmcm9tIHRoZQorLy8gdHJhY2tlciB3aGVuIHdlIHNldCBtX29wZW5lZCB0
byBmYWxzZSBpbiBjbG9zZURhdGFiYXNlKCkuIFRoaXMgc2V0cyB1cAorLy8gYSBzaW1wbGUgc3lt
bWV0cnkgYmV0d2VlbiBvcGVuIGFuZCBjbG9zZSBvcGVyYXRpb25zLCBhbmQgYSBkaXJlY3QKKy8v
IGNvcnJlbGF0aW9uIHRvIGFkZGluZyBhbmQgcmVtb3ZpbmcgZGF0YWJhc2VzIGZyb20gdGhlIHRy
YWNrZXIncyBsaXN0LAorLy8gdGh1cyBlbnN1cmluZyB0aGF0IHdlIGhhdmUgYSBjb3JyZWN0IGxp
c3QgZm9yIHRoZSBpbnRlcnJ1cHQgYW5kCisvLyBkZWxldGUgb3BlcmF0aW9ucyB0byB3b3JrIG9u
LgorLy8KKy8vIFRoZSBvbmx5IGRhdGFiYXNlcyBpbnN0YW5jZXMgbm90IHRyYWNrZWQgYnkgdGhl
IHRyYWNrZXIncyBvcGVuIGRhdGFiYXNlCisvLyBsaXN0IGFyZSB0aGUgb25lcyB0aGF0IGhhdmUg
bm90IGJlZW4gYWRkZWQgeWV0LCBvciB0aGUgb25lcyB0aGF0IHdlCisvLyBhdHRlbXB0ZWQgYW4g
b3BlbiBvbiBidXQgZmFpbGVkIHRvLiBTdWNoIGluc3RhbmNlcyBvbmx5IGV4aXN0IGluIHRoZQor
Ly8gRGF0YWJhc2VTZXJ2ZXIncyBmYWN0b3J5IG1ldGhvZHMgZm9yIGNyZWF0aW5nIERhdGFiYXNl
QmFja2VuZHMuCisvLworLy8gVGhlIGZhY3RvcnkgbWV0aG9kcyB3aWxsIGVpdGhlciBjYWxsIG9w
ZW5BbmRWZXJpZnlWZXJzaW9uKCkgb3IKKy8vIHBlcmZvcm1PcGVuQW5kVmVyaWZ5KCkgdG8gYWRk
IHRoZSBuZXdseSBpbnN0YW50aWF0ZWQgRGF0YWJhc2VCYWNrZW5kLgorLy8gT3IgaW4gdGhlIGNh
c2Ugb2YgZmFpbHVyZSB0byBvcGVuIHRoZSBkYXRhYmFzZSwgdGhlIGZhY3RvcnkgbWV0aG9kcyB3
aWxsCisvLyBzaW1wbHkgZGlzY2FyZCB0aGUgbmV3bHkgaW5zdGFudGlhdGVkIERhdGFiYXNlQmFj
a2VuZCB3aGVuIHRoZXkgcmV0dXJuLgorLy8gVGhlIHJlZiBjb3VudGluZyBtZWNoYW5pbXMgd2ls
bCBhdXRvbWF0aWNhbGx5IGRlc3RydWN0IHRoZSB1bi1hZGRlZAorLy8gKGFuZCB1bi1yZXR1cm5l
ZCkgZGF0YWJhc2VzIGluc3RhbmNlcy4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMg
Y29uc3QgY2hhciB2ZXJzaW9uS2V5W10gPSAiV2ViS2l0RGF0YWJhc2VWZXJzaW9uS2V5IjsKQEAg
LTE0MCw3ICsxNzAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlR3VpZFZlcnNpb25NYXAo
CiAgICAgZ3VpZFRvVmVyc2lvbk1hcCgpLnNldChndWlkLCBuZXdWZXJzaW9uLmlzRW1wdHkoKSA/
IFN0cmluZygpIDogbmV3VmVyc2lvbi5pc29sYXRlZENvcHkoKSk7CiB9CiAKLXR5cGVkZWYgSGFz
aE1hcDxEYXRhYmFzZUd1aWQsIEhhc2hTZXQ8QWJzdHJhY3REYXRhYmFzZSo+Kj4gR3VpZERhdGFi
YXNlTWFwOwordHlwZWRlZiBIYXNoTWFwPERhdGFiYXNlR3VpZCwgSGFzaFNldDxEYXRhYmFzZUJh
Y2tlbmQqPio+IEd1aWREYXRhYmFzZU1hcDsKIHN0YXRpYyBHdWlkRGF0YWJhc2VNYXAmIGd1aWRU
b0RhdGFiYXNlTWFwKCkKIHsKICAgICAvLyBFbnN1cmUgdGhlIHRoZSBtdXRleCBpcyBsb2NrZWQu
CkBAIC0xNjksMTMgKzE5OSwxMyBAQCBzdGF0aWMgRGF0YWJhc2VHdWlkIGd1aWRGb3JPcmlnaW5B
bmROYW1lCiB9CiAKIC8vIHN0YXRpYwotY29uc3QgY2hhciogQWJzdHJhY3REYXRhYmFzZTo6ZGF0
YWJhc2VJbmZvVGFibGVOYW1lKCkKK2NvbnN0IGNoYXIqIERhdGFiYXNlQmFja2VuZDo6ZGF0YWJh
c2VJbmZvVGFibGVOYW1lKCkKIHsKICAgICByZXR1cm4gaW5mb1RhYmxlTmFtZTsKIH0KIAotQWJz
dHJhY3REYXRhYmFzZTo6QWJzdHJhY3REYXRhYmFzZShQYXNzUmVmUHRyPERhdGFiYXNlQ29udGV4
dD4gZGF0YWJhc2VDb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhw
ZWN0ZWRWZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIERhdGFiYXNl
VHlwZSBkYXRhYmFzZVR5cGUpCitEYXRhYmFzZUJhY2tlbmQ6OkRhdGFiYXNlQmFja2VuZChQYXNz
UmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKKyAgICBjb25zdCBTdHJp
bmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIERhdGFiYXNlVHlw
ZSBkYXRhYmFzZVR5cGUpCiAgICAgOiBtX2RhdGFiYXNlQ29udGV4dChkYXRhYmFzZUNvbnRleHQp
CiAgICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQobV9kYXRhYmFzZUNvbnRleHQtPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSkKICAgICAsIG1fbmFtZShuYW1lLmlzb2xhdGVkQ29weSgpKQpA
QCAtMTg4LDcgKzIxOCw3IEBAIEFic3RyYWN0RGF0YWJhc2U6OkFic3RyYWN0RGF0YWJhc2UoUGFz
c1IKICAgICAsIG1faXNTeW5jRGF0YWJhc2UoZGF0YWJhc2VUeXBlID09IFN5bmNEYXRhYmFzZSkK
IHsKICAgICBBU1NFUlQobV9kYXRhYmFzZUNvbnRleHQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2lu
ID0gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5pc29sYXRlZENv
cHkoKTsKKyAgICBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbiA9IG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKTsKIAogICAgIG1fZGF0YWJhc2VBdXRob3JpemVy
ID0gRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGUoaW5mb1RhYmxlTmFtZSk7CiAKQEAgLTE5OCw5
ICsyMjgsOSBAQCBBYnN0cmFjdERhdGFiYXNlOjpBYnN0cmFjdERhdGFiYXNlKFBhc3NSCiAgICAg
ewogICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwogICAgICAgICBtX2d1
aWQgPSBndWlkRm9yT3JpZ2luQW5kTmFtZShzZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBu
YW1lKTsKLSAgICAgICAgSGFzaFNldDxBYnN0cmFjdERhdGFiYXNlKj4qIGhhc2hTZXQgPSBndWlk
VG9EYXRhYmFzZU1hcCgpLmdldChtX2d1aWQpOworICAgICAgICBIYXNoU2V0PERhdGFiYXNlQmFj
a2VuZCo+KiBoYXNoU2V0ID0gZ3VpZFRvRGF0YWJhc2VNYXAoKS5nZXQobV9ndWlkKTsKICAgICAg
ICAgaWYgKCFoYXNoU2V0KSB7Ci0gICAgICAgICAgICBoYXNoU2V0ID0gbmV3IEhhc2hTZXQ8QWJz
dHJhY3REYXRhYmFzZSo+OworICAgICAgICAgICAgaGFzaFNldCA9IG5ldyBIYXNoU2V0PERhdGFi
YXNlQmFja2VuZCo+OwogICAgICAgICAgICAgZ3VpZFRvRGF0YWJhc2VNYXAoKS5zZXQobV9ndWlk
LCBoYXNoU2V0KTsKICAgICAgICAgfQogCkBAIC0yMDgsMjUgKzIzOCwyNyBAQCBBYnN0cmFjdERh
dGFiYXNlOjpBYnN0cmFjdERhdGFiYXNlKFBhc3NSCiAgICAgfQogCiAgICAgbV9maWxlbmFtZSA9
IERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmZ1bGxQYXRoRm9yRGF0YWJhc2Uoc2VjdXJpdHlP
cmlnaW4oKSwgbV9uYW1lKTsKLSAgICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5hZGRPcGVu
RGF0YWJhc2UodGhpcyk7CiB9CiAKLUFic3RyYWN0RGF0YWJhc2U6On5BYnN0cmFjdERhdGFiYXNl
KCkKK0RhdGFiYXNlQmFja2VuZDo6fkRhdGFiYXNlQmFja2VuZCgpCiB7Ci0gICAgQVNTRVJUKCFt
X29wZW5lZCk7CisgICAgaWYgKG9wZW5lZCgpKQorICAgICAgICBjbG9zZURhdGFiYXNlKCk7CiB9
CiAKLXZvaWQgQWJzdHJhY3REYXRhYmFzZTo6Y2xvc2VEYXRhYmFzZSgpCit2b2lkIERhdGFiYXNl
QmFja2VuZDo6Y2xvc2VEYXRhYmFzZSgpCiB7CiAgICAgaWYgKCFtX29wZW5lZCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwogICAgIG1fb3BlbmVkID0g
ZmFsc2U7CisgICAgLy8gU2VlIGNvbW1lbnQgYXQgdGhlIHRvcCB0aGlzIGZpbGUgcmVnYXJkaW5n
IGNhbGxpbmcgcmVtb3ZlT3BlbkRhdGFiYXNlKCkuCisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFj
a2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKHRoaXMpOwogICAgIHsKICAgICAgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKIAotICAgICAgICBIYXNoU2V0PEFic3RyYWN0RGF0YWJh
c2UqPiogaGFzaFNldCA9IGd1aWRUb0RhdGFiYXNlTWFwKCkuZ2V0KG1fZ3VpZCk7CisgICAgICAg
IEhhc2hTZXQ8RGF0YWJhc2VCYWNrZW5kKj4qIGhhc2hTZXQgPSBndWlkVG9EYXRhYmFzZU1hcCgp
LmdldChtX2d1aWQpOwogICAgICAgICBBU1NFUlQoaGFzaFNldCk7CiAgICAgICAgIEFTU0VSVCho
YXNoU2V0LT5jb250YWlucyh0aGlzKSk7CiAgICAgICAgIGhhc2hTZXQtPnJlbW92ZSh0aGlzKTsK
QEAgLTIzOCw3ICsyNzAsNyBAQCB2b2lkIEFic3RyYWN0RGF0YWJhc2U6OmNsb3NlRGF0YWJhc2Uo
KQogICAgIH0KIH0KIAotU3RyaW5nIEFic3RyYWN0RGF0YWJhc2U6OnZlcnNpb24oKSBjb25zdAor
U3RyaW5nIERhdGFiYXNlQmFja2VuZDo6dmVyc2lvbigpIGNvbnN0CiB7CiAgICAgLy8gTm90ZTog
SW4gbXVsdGktcHJvY2VzcyBicm93c2VycyB0aGUgY2FjaGVkIHZhbHVlIG1heSBiZSBhY2N1cmF0
ZSwgYnV0IHdlIGNhbm5vdCByZWFkIHRoZQogICAgIC8vIGFjdHVhbCB2ZXJzaW9uIGZyb20gdGhl
IGRhdGFiYXNlIHdpdGhvdXQgcG90ZW50aWFsbHkgaW5kdWNpbmcgYSBkZWFkbG9jay4KQEAgLTI0
Niw3ICsyNzgsNyBAQCBTdHJpbmcgQWJzdHJhY3REYXRhYmFzZTo6dmVyc2lvbigpIGNvbnN0CiAg
ICAgcmV0dXJuIGdldENhY2hlZFZlcnNpb24oKTsKIH0KIAotYm9vbCBBYnN0cmFjdERhdGFiYXNl
OjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNl
LCBFeGNlcHRpb25Db2RlJiBlYywgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCitib29sIERhdGFiYXNl
QmFja2VuZDo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzaG91bGRTZXRWZXJzaW9uSW5OZXdE
YXRhYmFzZSwgRGF0YWJhc2VFcnJvciYgZXJyb3IsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQogewog
ICAgIEFTU0VSVChlcnJvck1lc3NhZ2UuaXNFbXB0eSgpKTsKIApAQCAtMjU1LDcgKzI4Nyw4IEBA
IGJvb2wgQWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXIKICAgICBpZiAoIW1fc3Fs
aXRlRGF0YWJhc2Uub3BlbihtX2ZpbGVuYW1lLCB0cnVlKSkgewogICAgICAgICByZXBvcnRPcGVu
RGF0YWJhc2VSZXN1bHQoMSwgSU5WQUxJRF9TVEFURV9FUlIsIG1fc3FsaXRlRGF0YWJhc2UubGFz
dEVycm9yKCkpOwogICAgICAgICBlcnJvck1lc3NhZ2UgPSBmb3JtYXRFcnJvck1lc3NhZ2UoInVu
YWJsZSB0byBvcGVuIGRhdGFiYXNlIiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9z
cWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFU
RV9FUlI7CisgICAgICAgIGVycm9yID0gRGF0YWJhc2VFcnJvcjo6Q2Fubm90T3BlbkRhdGFiYXNl
OworICAgICAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5kb25lQ3JlYXRpbmdEYXRhYmFz
ZSh0aGlzKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAoIW1fc3FsaXRl
RGF0YWJhc2UudHVybk9uSW5jcmVtZW50YWxBdXRvVmFjdXVtKCkpCkBAIC0yOTcsOCArMzMwLDkg
QEAgYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcgogICAgICAgICAgICAg
aWYgKCF0cmFuc2FjdGlvbi5pblByb2dyZXNzKCkpIHsKICAgICAgICAgICAgICAgICByZXBvcnRP
cGVuRGF0YWJhc2VSZXN1bHQoMiwgSU5WQUxJRF9TVEFURV9FUlIsIG1fc3FsaXRlRGF0YWJhc2Uu
bGFzdEVycm9yKCkpOwogICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGZvcm1hdEVycm9y
TWVzc2FnZSgidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UsIGZhaWxlZCB0byBzdGFydCB0cmFuc2Fj
dGlvbiIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCksIG1fc3FsaXRlRGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwotICAgICAgICAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Cisg
ICAgICAgICAgICAgICAgZXJyb3IgPSBEYXRhYmFzZUVycm9yOjpDYW5ub3RPcGVuRGF0YWJhc2U7
CiAgICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOworICAgICAgICAgICAg
ICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRvbmVDcmVhdGluZ0RhdGFiYXNlKHRoaXMp
OwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIApAQCAtMzA5
LDE3ICszNDMsMTkgQEAgYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcgog
ICAgICAgICAgICAgICAgIGlmICghbV9zcWxpdGVEYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiQ1JF
QVRFIFRBQkxFICIgKyB0YWJsZU5hbWUgKyAiIChrZXkgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElD
VCBGQUlMIFVOSVFVRSBPTiBDT05GTElDVCBSRVBMQUNFLHZhbHVlIFRFWFQgTk9UIE5VTEwgT04g
Q09ORkxJQ1QgRkFJTCk7IikpIHsKICAgICAgICAgICAgICAgICAgICAgcmVwb3J0T3BlbkRhdGFi
YXNlUmVzdWx0KDMsIElOVkFMSURfU1RBVEVfRVJSLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJv
cigpKTsKICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZm9ybWF0RXJyb3JNZXNz
YWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSwgZmFpbGVkIHRvIGNyZWF0ZSAnaW5mbycgdGFi
bGUiLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKLSAgICAgICAgICAgICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsK
KyAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBEYXRhYmFzZUVycm9yOjpDYW5ub3RPcGVuRGF0
YWJhc2U7CiAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLnJvbGxiYWNrKCk7CiAgICAg
ICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKKyAgICAgICAgICAgICAg
ICAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZG9uZUNyZWF0aW5nRGF0YWJhc2UodGhp
cyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCFnZXRWZXJzaW9uRnJvbURhdGFiYXNlKGN1cnJlbnRW
ZXJzaW9uLCBmYWxzZSkpIHsKICAgICAgICAgICAgICAgICByZXBvcnRPcGVuRGF0YWJhc2VSZXN1
bHQoNCwgSU5WQUxJRF9TVEFURV9FUlIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCkpOwog
ICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGZvcm1hdEVycm9yTWVzc2FnZSgidW5hYmxl
IHRvIG9wZW4gZGF0YWJhc2UsIGZhaWxlZCB0byByZWFkIGN1cnJlbnQgdmVyc2lvbiIsIG1fc3Fs
aXRlRGF0YWJhc2UubGFzdEVycm9yKCksIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OwotICAgICAgICAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgICAgICAg
ICAgZXJyb3IgPSBEYXRhYmFzZUVycm9yOjpDYW5ub3RPcGVuRGF0YWJhc2U7CiAgICAgICAgICAg
ICAgICAgdHJhbnNhY3Rpb24ucm9sbGJhY2soKTsKICAgICAgICAgICAgICAgICBtX3NxbGl0ZURh
dGFiYXNlLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2Vy
KCkuZG9uZUNyZWF0aW5nRGF0YWJhc2UodGhpcyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgfQogCkBAIC0zMzAsOSArMzY2LDEwIEBAIGJvb2wgQWJzdHJhY3RE
YXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXIKICAgICAgICAgICAgICAgICBpZiAoIXNldFZlcnNp
b25JbkRhdGFiYXNlKG1fZXhwZWN0ZWRWZXJzaW9uLCBmYWxzZSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgcmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KDUsIElOVkFMSURfU1RBVEVfRVJSLCBtX3Nx
bGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpKTsKICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNz
YWdlID0gZm9ybWF0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSwgZmFpbGVk
IHRvIHdyaXRlIGN1cnJlbnQgdmVyc2lvbiIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCks
IG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgICAgICAgICBl
YyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICAgICAgICAgICAgICBlcnJvciA9IERhdGFi
YXNlRXJyb3I6OkNhbm5vdE9wZW5EYXRhYmFzZTsKICAgICAgICAgICAgICAgICAgICAgdHJhbnNh
Y3Rpb24ucm9sbGJhY2soKTsKICAgICAgICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5j
bG9zZSgpOworICAgICAgICAgICAgICAgICAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5k
b25lQ3JlYXRpbmdEYXRhYmFzZSh0aGlzKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9
IG1fZXhwZWN0ZWRWZXJzaW9uOwpAQCAtMzUyLDE0ICszODksMTcgQEAgYm9vbCBBYnN0cmFjdERh
dGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcgogICAgIGlmICgoIW1fbmV3IHx8IHNob3VsZFNldFZl
cnNpb25Jbk5ld0RhdGFiYXNlKSAmJiBtX2V4cGVjdGVkVmVyc2lvbi5sZW5ndGgoKSAmJiBtX2V4
cGVjdGVkVmVyc2lvbiAhPSBjdXJyZW50VmVyc2lvbikgewogICAgICAgICByZXBvcnRPcGVuRGF0
YWJhc2VSZXN1bHQoNiwgSU5WQUxJRF9TVEFURV9FUlIsIDApOwogICAgICAgICBlcnJvck1lc3Nh
Z2UgPSAidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UsIHZlcnNpb24gbWlzbWF0Y2gsICciICsgbV9l
eHBlY3RlZFZlcnNpb24gKyAiJyBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudFZlcnNpb24gb2Yg
JyIgKyBjdXJyZW50VmVyc2lvbiArICInIjsKLSAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VS
UjsKKyAgICAgICAgZXJyb3IgPSBEYXRhYmFzZUVycm9yOjpDYW5ub3RPcGVuRGF0YWJhc2U7CiAg
ICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKKyAgICAgICAgRGF0YWJhc2VUcmFja2Vy
Ojp0cmFja2VyKCkuZG9uZUNyZWF0aW5nRGF0YWJhc2UodGhpcyk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKICAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwogICAgIG1f
c3FsaXRlRGF0YWJhc2Uuc2V0QXV0aG9yaXplcihtX2RhdGFiYXNlQXV0aG9yaXplcik7CiAKKyAg
ICAvLyBTZWUgY29tbWVudCBhdCB0aGUgdG9wIHRoaXMgZmlsZSByZWdhcmRpbmcgY2FsbGluZyBh
ZGRPcGVuRGF0YWJhc2UoKS4KKyAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5hZGRPcGVu
RGF0YWJhc2UodGhpcyk7CiAgICAgbV9vcGVuZWQgPSB0cnVlOwogCiAgICAgaWYgKG1fbmV3ICYm
ICFzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSkKQEAgLTM2OSw0NSArNDA5LDQ1IEBAIGJv
b2wgQWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXIKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogQWJzdHJhY3REYXRhYmFzZTo6c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpIGNvbnN0CitTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBEYXRhYmFzZUJh
Y2tlbmQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAogewogICAgIHJldHVybiBtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCk7CiB9CiAKLVNlY3VyaXR5T3JpZ2luKiBBYnN0cmFj
dERhdGFiYXNlOjpzZWN1cml0eU9yaWdpbigpIGNvbnN0CitTZWN1cml0eU9yaWdpbiogRGF0YWJh
c2VCYWNrZW5kOjpzZWN1cml0eU9yaWdpbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fY29udGV4
dFRocmVhZFNlY3VyaXR5T3JpZ2luLmdldCgpOwogfQogCi1TdHJpbmcgQWJzdHJhY3REYXRhYmFz
ZTo6c3RyaW5nSWRlbnRpZmllcigpIGNvbnN0CitTdHJpbmcgRGF0YWJhc2VCYWNrZW5kOjpzdHJp
bmdJZGVudGlmaWVyKCkgY29uc3QKIHsKICAgICAvLyBSZXR1cm4gYSBkZWVwIGNvcHkgZm9yIHJl
ZiBjb3VudGluZyB0aHJlYWQgc2FmZXR5CiAgICAgcmV0dXJuIG1fbmFtZS5pc29sYXRlZENvcHko
KTsKIH0KIAotU3RyaW5nIEFic3RyYWN0RGF0YWJhc2U6OmRpc3BsYXlOYW1lKCkgY29uc3QKK1N0
cmluZyBEYXRhYmFzZUJhY2tlbmQ6OmRpc3BsYXlOYW1lKCkgY29uc3QKIHsKICAgICAvLyBSZXR1
cm4gYSBkZWVwIGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQgc2FmZXR5CiAgICAgcmV0dXJu
IG1fZGlzcGxheU5hbWUuaXNvbGF0ZWRDb3B5KCk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgQWJzdHJh
Y3REYXRhYmFzZTo6ZXN0aW1hdGVkU2l6ZSgpIGNvbnN0Cit1bnNpZ25lZCBsb25nIERhdGFiYXNl
QmFja2VuZDo6ZXN0aW1hdGVkU2l6ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZXN0aW1hdGVk
U2l6ZTsKIH0KIAotU3RyaW5nIEFic3RyYWN0RGF0YWJhc2U6OmZpbGVOYW1lKCkgY29uc3QKK1N0
cmluZyBEYXRhYmFzZUJhY2tlbmQ6OmZpbGVOYW1lKCkgY29uc3QKIHsKICAgICAvLyBSZXR1cm4g
YSBkZWVwIGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQgc2FmZXR5CiAgICAgcmV0dXJuIG1f
ZmlsZW5hbWUuaXNvbGF0ZWRDb3B5KCk7CiB9CiAKLURhdGFiYXNlRGV0YWlscyBBYnN0cmFjdERh
dGFiYXNlOjpkZXRhaWxzKCkgY29uc3QKK0RhdGFiYXNlRGV0YWlscyBEYXRhYmFzZUJhY2tlbmQ6
OmRldGFpbHMoKSBjb25zdAogewogICAgIHJldHVybiBEYXRhYmFzZURldGFpbHMoc3RyaW5nSWRl
bnRpZmllcigpLCBkaXNwbGF5TmFtZSgpLCBlc3RpbWF0ZWRTaXplKCksIDApOwogfQogCi1ib29s
IEFic3RyYWN0RGF0YWJhc2U6OmdldFZlcnNpb25Gcm9tRGF0YWJhc2UoU3RyaW5nJiB2ZXJzaW9u
LCBib29sIHNob3VsZENhY2hlVmVyc2lvbikKK2Jvb2wgRGF0YWJhc2VCYWNrZW5kOjpnZXRWZXJz
aW9uRnJvbURhdGFiYXNlKFN0cmluZyYgdmVyc2lvbiwgYm9vbCBzaG91bGRDYWNoZVZlcnNpb24p
CiB7CiAgICAgU3RyaW5nIHF1ZXJ5KFN0cmluZygiU0VMRUNUIHZhbHVlIEZST00gIikgKyBpbmZv
VGFibGVOYW1lICsgICIgV0hFUkUga2V5ID0gJyIgKyB2ZXJzaW9uS2V5ICsgIic7Iik7CiAKQEAg
LTQyNSw3ICs0NjUsNyBAQCBib29sIEFic3RyYWN0RGF0YWJhc2U6OmdldFZlcnNpb25Gcm9tRGF0
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpzZXRWZXJz
aW9uSW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIHZlcnNpb24sIGJvb2wgc2hvdWxkQ2FjaGVWZXJz
aW9uKQorYm9vbCBEYXRhYmFzZUJhY2tlbmQ6OnNldFZlcnNpb25JbkRhdGFiYXNlKGNvbnN0IFN0
cmluZyYgdmVyc2lvbiwgYm9vbCBzaG91bGRDYWNoZVZlcnNpb24pCiB7CiAgICAgLy8gVGhlIElO
U0VSVCB3aWxsIHJlcGxhY2UgYW4gZXhpc3RpbmcgZW50cnkgZm9yIHRoZSBkYXRhYmFzZSB3aXRo
IHRoZSBuZXcgdmVyc2lvbiBudW1iZXIsIGR1ZSB0byB0aGUgVU5JUVVFIE9OIENPTkZMSUNUIFJF
UExBQ0UKICAgICAvLyBjbGF1c2UgaW4gdGhlIENSRUFURSBzdGF0ZW1lbnQgKHNlZSBEYXRhYmFz
ZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoKSkuCkBAIC00NDUsMjUgKzQ4NSwyNSBAQCBib29sIEFi
c3RyYWN0RGF0YWJhc2U6OnNldFZlcnNpb25JbkRhdGFiCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotdm9pZCBBYnN0cmFjdERhdGFiYXNlOjpzZXRFeHBlY3RlZFZlcnNpb24oY29uc3QgU3RyaW5n
JiB2ZXJzaW9uKQordm9pZCBEYXRhYmFzZUJhY2tlbmQ6OnNldEV4cGVjdGVkVmVyc2lvbihjb25z
dCBTdHJpbmcmIHZlcnNpb24pCiB7CiAgICAgbV9leHBlY3RlZFZlcnNpb24gPSB2ZXJzaW9uLmlz
b2xhdGVkQ29weSgpOwogfQogCi1TdHJpbmcgQWJzdHJhY3REYXRhYmFzZTo6Z2V0Q2FjaGVkVmVy
c2lvbigpIGNvbnN0CitTdHJpbmcgRGF0YWJhc2VCYWNrZW5kOjpnZXRDYWNoZWRWZXJzaW9uKCkg
Y29uc3QKIHsKICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwogICAgIHJldHVy
biBndWlkVG9WZXJzaW9uTWFwKCkuZ2V0KG1fZ3VpZCkuaXNvbGF0ZWRDb3B5KCk7CiB9CiAKLXZv
aWQgQWJzdHJhY3REYXRhYmFzZTo6c2V0Q2FjaGVkVmVyc2lvbihjb25zdCBTdHJpbmcmIGFjdHVh
bFZlcnNpb24pCit2b2lkIERhdGFiYXNlQmFja2VuZDo6c2V0Q2FjaGVkVmVyc2lvbihjb25zdCBT
dHJpbmcmIGFjdHVhbFZlcnNpb24pCiB7CiAgICAgLy8gVXBkYXRlIHRoZSBpbiBtZW1vcnkgZGF0
YWJhc2UgdmVyc2lvbiBtYXAuCiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsK
ICAgICB1cGRhdGVHdWlkVmVyc2lvbk1hcChtX2d1aWQsIGFjdHVhbFZlcnNpb24pOwogfQogCi1i
b29sIEFic3RyYWN0RGF0YWJhc2U6OmdldEFjdHVhbFZlcnNpb25Gb3JUcmFuc2FjdGlvbihTdHJp
bmcgJmFjdHVhbFZlcnNpb24pCitib29sIERhdGFiYXNlQmFja2VuZDo6Z2V0QWN0dWFsVmVyc2lv
bkZvclRyYW5zYWN0aW9uKFN0cmluZyAmYWN0dWFsVmVyc2lvbikKIHsKICAgICBBU1NFUlQobV9z
cWxpdGVEYXRhYmFzZS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CiAjaWYgUExBVEZPUk0oQ0hS
T01JVU0pCkBAIC00NzYsNjYgKzUxNiw2NiBAQCBib29sIEFic3RyYWN0RGF0YWJhc2U6OmdldEFj
dHVhbFZlcnNpb25GCiAjZW5kaWYKIH0KIAotdm9pZCBBYnN0cmFjdERhdGFiYXNlOjpkaXNhYmxl
QXV0aG9yaXplcigpCit2b2lkIERhdGFiYXNlQmFja2VuZDo6ZGlzYWJsZUF1dGhvcml6ZXIoKQog
ewogICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7CiAgICAgbV9kYXRhYmFzZUF1dGhv
cml6ZXItPmRpc2FibGUoKTsKIH0KIAotdm9pZCBBYnN0cmFjdERhdGFiYXNlOjplbmFibGVBdXRo
b3JpemVyKCkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kOjplbmFibGVBdXRob3JpemVyKCkKIHsKICAg
ICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwogICAgIG1fZGF0YWJhc2VBdXRob3JpemVy
LT5lbmFibGUoKTsKIH0KIAotdm9pZCBBYnN0cmFjdERhdGFiYXNlOjpzZXRBdXRob3JpemVyUmVh
ZE9ubHkoKQordm9pZCBEYXRhYmFzZUJhY2tlbmQ6OnNldEF1dGhvcml6ZXJSZWFkT25seSgpCiB7
CiAgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKICAgICBtX2RhdGFiYXNlQXV0aG9y
aXplci0+c2V0UmVhZE9ubHkoKTsKIH0KIAotdm9pZCBBYnN0cmFjdERhdGFiYXNlOjpzZXRBdXRo
b3JpemVyUGVybWlzc2lvbnMoaW50IHBlcm1pc3Npb25zKQordm9pZCBEYXRhYmFzZUJhY2tlbmQ6
OnNldEF1dGhvcml6ZXJQZXJtaXNzaW9ucyhpbnQgcGVybWlzc2lvbnMpCiB7CiAgICAgQVNTRVJU
KG1fZGF0YWJhc2VBdXRob3JpemVyKTsKICAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+c2V0UGVy
bWlzc2lvbnMocGVybWlzc2lvbnMpOwogfQogCi1ib29sIEFic3RyYWN0RGF0YWJhc2U6Omxhc3RB
Y3Rpb25DaGFuZ2VkRGF0YWJhc2UoKQorYm9vbCBEYXRhYmFzZUJhY2tlbmQ6Omxhc3RBY3Rpb25D
aGFuZ2VkRGF0YWJhc2UoKQogewogICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7CiAg
ICAgcmV0dXJuIG1fZGF0YWJhc2VBdXRob3JpemVyLT5sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNl
KCk7CiB9CiAKLWJvb2wgQWJzdHJhY3REYXRhYmFzZTo6bGFzdEFjdGlvbldhc0luc2VydCgpCiti
b29sIERhdGFiYXNlQmFja2VuZDo6bGFzdEFjdGlvbldhc0luc2VydCgpCiB7CiAgICAgQVNTRVJU
KG1fZGF0YWJhc2VBdXRob3JpemVyKTsKICAgICByZXR1cm4gbV9kYXRhYmFzZUF1dGhvcml6ZXIt
Pmxhc3RBY3Rpb25XYXNJbnNlcnQoKTsKIH0KIAotdm9pZCBBYnN0cmFjdERhdGFiYXNlOjpyZXNl
dERlbGV0ZXMoKQordm9pZCBEYXRhYmFzZUJhY2tlbmQ6OnJlc2V0RGVsZXRlcygpCiB7CiAgICAg
QVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKICAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+
cmVzZXREZWxldGVzKCk7CiB9CiAKLWJvb2wgQWJzdHJhY3REYXRhYmFzZTo6aGFkRGVsZXRlcygp
Citib29sIERhdGFiYXNlQmFja2VuZDo6aGFkRGVsZXRlcygpCiB7CiAgICAgQVNTRVJUKG1fZGF0
YWJhc2VBdXRob3JpemVyKTsKICAgICByZXR1cm4gbV9kYXRhYmFzZUF1dGhvcml6ZXItPmhhZERl
bGV0ZXMoKTsKIH0KIAotdm9pZCBBYnN0cmFjdERhdGFiYXNlOjpyZXNldEF1dGhvcml6ZXIoKQor
dm9pZCBEYXRhYmFzZUJhY2tlbmQ6OnJlc2V0QXV0aG9yaXplcigpCiB7CiAgICAgaWYgKG1fZGF0
YWJhc2VBdXRob3JpemVyKQogICAgICAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+cmVzZXQoKTsK
IH0KIAotdW5zaWduZWQgbG9uZyBsb25nIEFic3RyYWN0RGF0YWJhc2U6Om1heGltdW1TaXplKCkg
Y29uc3QKK3Vuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZUJhY2tlbmQ6Om1heGltdW1TaXplKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuZ2V0TWF4U2l6
ZUZvckRhdGFiYXNlKHRoaXMpOwogfQogCi12b2lkIEFic3RyYWN0RGF0YWJhc2U6OmluY3JlbWVu
dGFsVmFjdXVtSWZOZWVkZWQoKQordm9pZCBEYXRhYmFzZUJhY2tlbmQ6OmluY3JlbWVudGFsVmFj
dXVtSWZOZWVkZWQoKQogewogICAgIGludDY0X3QgZnJlZVNwYWNlU2l6ZSA9IG1fc3FsaXRlRGF0
YWJhc2UuZnJlZVNwYWNlU2l6ZSgpOwogICAgIGludDY0X3QgdG90YWxTaXplID0gbV9zcWxpdGVE
YXRhYmFzZS50b3RhbFNpemUoKTsKQEAgLTU0NywxOCArNTg3LDE4IEBAIHZvaWQgQWJzdHJhY3RE
YXRhYmFzZTo6aW5jcmVtZW50YWxWYWN1dW0KICAgICB9CiB9CiAKLXZvaWQgQWJzdHJhY3REYXRh
YmFzZTo6aW50ZXJydXB0KCkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kOjppbnRlcnJ1cHQoKQogewog
ICAgIG1fc3FsaXRlRGF0YWJhc2UuaW50ZXJydXB0KCk7CiB9CiAKLWJvb2wgQWJzdHJhY3REYXRh
YmFzZTo6aXNJbnRlcnJ1cHRlZCgpCitib29sIERhdGFiYXNlQmFja2VuZDo6aXNJbnRlcnJ1cHRl
ZCgpCiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc3FsaXRlRGF0YWJhc2UuZGF0YWJhc2VN
dXRleCgpKTsKICAgICByZXR1cm4gbV9zcWxpdGVEYXRhYmFzZS5pc0ludGVycnVwdGVkKCk7CiB9
CiAKLXZvaWQgQWJzdHJhY3REYXRhYmFzZTo6bG9nRXJyb3JNZXNzYWdlKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kOjpsb2dFcnJvck1lc3NhZ2UoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQogewogICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQ29uc29s
ZU1lc3NhZ2UoT3RoZXJNZXNzYWdlU291cmNlLCBFcnJvck1lc3NhZ2VMZXZlbCwgbWVzc2FnZSk7
CiB9CkBAIC01NjYsNDMgKzYwNiw0MyBAQCB2b2lkIEFic3RyYWN0RGF0YWJhc2U6OmxvZ0Vycm9y
TWVzc2FnZShjCiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCiAvLyBUaGVzZSBhcmUgdXNlZCB0byBn
ZW5lcmF0ZSBoaXN0b2dyYW1zIG9mIGVycm9ycyBzZWVuIHdpdGggd2Vic3FsLgogLy8gU2VlIGFi
b3V0Omhpc3RvZ3JhbXMgaW4gY2hyb21pdW0uCi12b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlcG9y
dE9wZW5EYXRhYmFzZVJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBp
bnQgc3FsaXRlRXJyb3JDb2RlKQordm9pZCBEYXRhYmFzZUJhY2tlbmQ6OnJlcG9ydE9wZW5EYXRh
YmFzZVJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRl
RXJyb3JDb2RlKQogewogICAgIERhdGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydE9wZW5EYXRhYmFzZVJl
c3VsdCh0aGlzLCBlcnJvclNpdGUsIHdlYlNxbEVycm9yQ29kZSwgc3FsaXRlRXJyb3JDb2RlKTsK
IH0KIAotdm9pZCBBYnN0cmFjdERhdGFiYXNlOjpyZXBvcnRDaGFuZ2VWZXJzaW9uUmVzdWx0KGlu
dCBlcnJvclNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpCit2
b2lkIERhdGFiYXNlQmFja2VuZDo6cmVwb3J0Q2hhbmdlVmVyc2lvblJlc3VsdChpbnQgZXJyb3JT
aXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKQogewogICAgIERh
dGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydENoYW5nZVZlcnNpb25SZXN1bHQodGhpcywgZXJyb3JTaXRl
LCB3ZWJTcWxFcnJvckNvZGUsIHNxbGl0ZUVycm9yQ29kZSk7CiB9CiAKLXZvaWQgQWJzdHJhY3RE
YXRhYmFzZTo6cmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQg
d2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKQordm9pZCBEYXRhYmFzZUJhY2tl
bmQ6OnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNx
bEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSkKIHsKICAgICBEYXRhYmFzZU9ic2VydmVy
OjpyZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KHRoaXMsIGVycm9yU2l0ZSwgd2ViU3FsRXJy
b3JDb2RlLCBzcWxpdGVFcnJvckNvZGUpOwogfQogCi12b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJl
cG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KGludCBlcnJvclNpdGUsIGludCB3ZWJTcWxFcnJv
ckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpCit2b2lkIERhdGFiYXNlQmFja2VuZDo6cmVwb3J0
Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29k
ZSwgaW50IHNxbGl0ZUVycm9yQ29kZSkKIHsKICAgICBEYXRhYmFzZU9ic2VydmVyOjpyZXBvcnRD
b21taXRUcmFuc2FjdGlvblJlc3VsdCh0aGlzLCBlcnJvclNpdGUsIHdlYlNxbEVycm9yQ29kZSwg
c3FsaXRlRXJyb3JDb2RlKTsKIH0KIAotdm9pZCBBYnN0cmFjdERhdGFiYXNlOjpyZXBvcnRFeGVj
dXRlU3RhdGVtZW50UmVzdWx0KGludCBlcnJvclNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGlu
dCBzcWxpdGVFcnJvckNvZGUpCit2b2lkIERhdGFiYXNlQmFja2VuZDo6cmVwb3J0RXhlY3V0ZVN0
YXRlbWVudFJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3Fs
aXRlRXJyb3JDb2RlKQogewogICAgIERhdGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydEV4ZWN1dGVTdGF0
ZW1lbnRSZXN1bHQodGhpcywgZXJyb3JTaXRlLCB3ZWJTcWxFcnJvckNvZGUsIHNxbGl0ZUVycm9y
Q29kZSk7CiB9CiAKLXZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVwb3J0VmFjdXVtRGF0YWJhc2VS
ZXN1bHQoaW50IHNxbGl0ZUVycm9yQ29kZSkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kOjpyZXBvcnRW
YWN1dW1EYXRhYmFzZVJlc3VsdChpbnQgc3FsaXRlRXJyb3JDb2RlKQogewogICAgIERhdGFiYXNl
T2JzZXJ2ZXI6OnJlcG9ydFZhY3V1bURhdGFiYXNlUmVzdWx0KHRoaXMsIHNxbGl0ZUVycm9yQ29k
ZSk7CiB9CiAKICNlbHNlCi12b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlcG9ydE9wZW5EYXRhYmFz
ZVJlc3VsdChpbnQsIGludCwgaW50KSB7IH0KLXZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVwb3J0
Q2hhbmdlVmVyc2lvblJlc3VsdChpbnQsIGludCwgaW50KSB7IH0KLXZvaWQgQWJzdHJhY3REYXRh
YmFzZTo6cmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3VsdChpbnQsIGludCwgaW50KSB7IH0KLXZv
aWQgQWJzdHJhY3REYXRhYmFzZTo6cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoaW50LCBp
bnQsIGludCkgeyB9Ci12b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlcG9ydEV4ZWN1dGVTdGF0ZW1l
bnRSZXN1bHQoaW50LCBpbnQsIGludCkgeyB9Ci12b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlcG9y
dFZhY3V1bURhdGFiYXNlUmVzdWx0KGludCkgeyB9Cit2b2lkIERhdGFiYXNlQmFja2VuZDo6cmVw
b3J0T3BlbkRhdGFiYXNlUmVzdWx0KGludCwgaW50LCBpbnQpIHsgfQordm9pZCBEYXRhYmFzZUJh
Y2tlbmQ6OnJlcG9ydENoYW5nZVZlcnNpb25SZXN1bHQoaW50LCBpbnQsIGludCkgeyB9Cit2b2lk
IERhdGFiYXNlQmFja2VuZDo6cmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3VsdChpbnQsIGludCwg
aW50KSB7IH0KK3ZvaWQgRGF0YWJhc2VCYWNrZW5kOjpyZXBvcnRDb21taXRUcmFuc2FjdGlvblJl
c3VsdChpbnQsIGludCwgaW50KSB7IH0KK3ZvaWQgRGF0YWJhc2VCYWNrZW5kOjpyZXBvcnRFeGVj
dXRlU3RhdGVtZW50UmVzdWx0KGludCwgaW50LCBpbnQpIHsgfQordm9pZCBEYXRhYmFzZUJhY2tl
bmQ6OnJlcG9ydFZhY3V1bURhdGFiYXNlUmVzdWx0KGludCkgeyB9CiAjZW5kaWYgLy8gUExBVEZP
Uk0oQ0hST01JVU0pCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuaAkocmV2
aXNpb24gMTQxMTY4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fi
c3RyYWN0RGF0YWJhc2UuaDoxNDExNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBBYnN0cmFjdERhdGFiYXNlX2gKKyNkZWZpbmUgQWJzdHJhY3REYXRhYmFzZV9o
CisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiRGF0YWJhc2VCYXNpY1R5
cGVzLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgiCisjaW5jbHVkZSAiU1FMaXRlRGF0
YWJhc2UuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworI2lmICFMT0dfRElTQUJMRUQgfHwgIUVSUk9SX0RJU0FCTEVE
CisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIERhdGFiYXNlQXV0aG9yaXplcjsKK2NsYXNzIERhdGFiYXNlQ29udGV4dDsK
K2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKKwor
Y2xhc3MgQWJzdHJhY3REYXRhYmFzZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBYnN0
cmFjdERhdGFiYXNlPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWJzdHJhY3REYXRhYmFzZSgp
OworCisgICAgdmlydHVhbCBTdHJpbmcgdmVyc2lvbigpIGNvbnN0OworCisgICAgYm9vbCBvcGVu
ZWQoKSBjb25zdCB7IHJldHVybiBtX29wZW5lZDsgfQorICAgIGJvb2wgaXNOZXcoKSBjb25zdCB7
IHJldHVybiBtX25ldzsgfQorICAgIGJvb2wgaXNTeW5jRGF0YWJhc2UoKSBjb25zdCB7IHJldHVy
biBtX2lzU3luY0RhdGFiYXNlOyB9CisKKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFNlY3VyaXR5
T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHN0cmlu
Z0lkZW50aWZpZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBkaXNwbGF5TmFtZSgpIGNv
bnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBTdHJpbmcgZmlsZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIERhdGFiYXNl
RGV0YWlscyBkZXRhaWxzKCkgY29uc3Q7CisgICAgU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFi
YXNlKCkgeyByZXR1cm4gbV9zcWxpdGVEYXRhYmFzZTsgfQorCisgICAgdW5zaWduZWQgbG9uZyBs
b25nIG1heGltdW1TaXplKCkgY29uc3Q7CisgICAgdm9pZCBpbmNyZW1lbnRhbFZhY3V1bUlmTmVl
ZGVkKCk7CisgICAgdm9pZCBpbnRlcnJ1cHQoKTsKKyAgICBib29sIGlzSW50ZXJydXB0ZWQoKTsK
KworICAgIHZvaWQgZGlzYWJsZUF1dGhvcml6ZXIoKTsKKyAgICB2b2lkIGVuYWJsZUF1dGhvcml6
ZXIoKTsKKyAgICB2b2lkIHNldEF1dGhvcml6ZXJSZWFkT25seSgpOworICAgIHZvaWQgc2V0QXV0
aG9yaXplclBlcm1pc3Npb25zKGludCBwZXJtaXNzaW9ucyk7CisgICAgYm9vbCBsYXN0QWN0aW9u
Q2hhbmdlZERhdGFiYXNlKCk7CisgICAgYm9vbCBsYXN0QWN0aW9uV2FzSW5zZXJ0KCk7CisgICAg
dm9pZCByZXNldERlbGV0ZXMoKTsKKyAgICBib29sIGhhZERlbGV0ZXMoKTsKKyAgICB2b2lkIHJl
c2V0QXV0aG9yaXplcigpOworCisgICAgdmlydHVhbCB2b2lkIG1hcmtBc0RlbGV0ZWRBbmRDbG9z
ZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2VJbW1lZGlhdGVseSgpID0gMDsKKworICAg
IERhdGFiYXNlQ29udGV4dCogZGF0YWJhc2VDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9kYXRh
YmFzZUNvbnRleHQuZ2V0KCk7IH0KKworcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBDaGFu
Z2VWZXJzaW9uV3JhcHBlcjsKKyAgICBmcmllbmQgY2xhc3MgU1FMU3RhdGVtZW50OworICAgIGZy
aWVuZCBjbGFzcyBTUUxTdGF0ZW1lbnRTeW5jOworICAgIGZyaWVuZCBjbGFzcyBTUUxUcmFuc2Fj
dGlvblN5bmM7CisgICAgZnJpZW5kIGNsYXNzIFNRTFRyYW5zYWN0aW9uOworCisgICAgZW51bSBE
YXRhYmFzZVR5cGUgeworICAgICAgICBBc3luY0RhdGFiYXNlLAorICAgICAgICBTeW5jRGF0YWJh
c2UKKyAgICB9OworCisgICAgQWJzdHJhY3REYXRhYmFzZShQYXNzUmVmUHRyPERhdGFiYXNlQ29u
dGV4dD4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24s
CisgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25l
ZCBsb25nIGVzdGltYXRlZFNpemUsIERhdGFiYXNlVHlwZSk7CisKKyAgICB2b2lkIGNsb3NlRGF0
YWJhc2UoKTsKKworICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNo
b3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiwgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UpOworCisgICAgYm9vbCBnZXRWZXJzaW9uRnJvbURhdGFiYXNlKFN0cmluZyYgdmVy
c2lvbiwgYm9vbCBzaG91bGRDYWNoZVZlcnNpb24gPSB0cnVlKTsKKyAgICBib29sIHNldFZlcnNp
b25JbkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgYm9vbCBzaG91bGRDYWNoZVZlcnNp
b24gPSB0cnVlKTsKKyAgICB2b2lkIHNldEV4cGVjdGVkVmVyc2lvbihjb25zdCBTdHJpbmcmKTsK
KyAgICBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhw
ZWN0ZWRWZXJzaW9uOyB9CisgICAgU3RyaW5nIGdldENhY2hlZFZlcnNpb24oKWNvbnN0OworICAg
IHZvaWQgc2V0Q2FjaGVkVmVyc2lvbihjb25zdCBTdHJpbmcmKTsKKyAgICBib29sIGdldEFjdHVh
bFZlcnNpb25Gb3JUcmFuc2FjdGlvbihTdHJpbmcmIHZlcnNpb24pOworCisgICAgdm9pZCBsb2dF
cnJvck1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKworICAgIHZvaWQgcmVwb3J0T3Bl
bkRhdGFiYXNlUmVzdWx0KGludCBlcnJvclNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBz
cWxpdGVFcnJvckNvZGUpOworICAgIHZvaWQgcmVwb3J0Q2hhbmdlVmVyc2lvblJlc3VsdChpbnQg
ZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKTsKKyAg
ICB2b2lkIHJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoaW50IGVycm9yU2l0ZSwgaW50IHdl
YlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSk7CisgICAgdm9pZCByZXBvcnRDb21t
aXRUcmFuc2FjdGlvblJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBp
bnQgc3FsaXRlRXJyb3JDb2RlKTsKKyAgICB2b2lkIHJlcG9ydEV4ZWN1dGVTdGF0ZW1lbnRSZXN1
bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29k
ZSk7CisgICAgdm9pZCByZXBvcnRWYWN1dW1EYXRhYmFzZVJlc3VsdChpbnQgc3FsaXRlRXJyb3JD
b2RlKTsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKTsK
KworICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmln
aW47CisgICAgUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gbV9kYXRhYmFzZUNvbnRleHQ7IC8vIEFz
c29jaWF0ZWQgd2l0aCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuCisgICAgUmVmUHRyPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKworICAgIFN0cmlu
ZyBtX25hbWU7CisgICAgU3RyaW5nIG1fZXhwZWN0ZWRWZXJzaW9uOworICAgIFN0cmluZyBtX2Rp
c3BsYXlOYW1lOworICAgIHVuc2lnbmVkIGxvbmcgbV9lc3RpbWF0ZWRTaXplOworICAgIFN0cmlu
ZyBtX2ZpbGVuYW1lOworCisjaWYgIUxPR19ESVNBQkxFRCB8fCAhRVJST1JfRElTQUJMRUQKKyAg
ICBTdHJpbmcgZGF0YWJhc2VEZWJ1Z05hbWUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRUaHJl
YWRTZWN1cml0eU9yaWdpbi0+dG9TdHJpbmcoKSArICI6OiIgKyBtX25hbWU7IH0KKyNlbmRpZgor
Citwcml2YXRlOgorICAgIERhdGFiYXNlR3VpZCBtX2d1aWQ7CisgICAgYm9vbCBtX29wZW5lZDsK
KyAgICBib29sIG1fbmV3OworICAgIGNvbnN0IGJvb2wgbV9pc1N5bmNEYXRhYmFzZTsKKworICAg
IFNRTGl0ZURhdGFiYXNlIG1fc3FsaXRlRGF0YWJhc2U7CisKKyAgICBSZWZQdHI8RGF0YWJhc2VB
dXRob3JpemVyPiBtX2RhdGFiYXNlQXV0aG9yaXplcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBBYnN0
cmFjdERhdGFiYXNlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuaAkocmV2aXNpb24gMTQxMTY4KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsMTMgKzI2LDE0IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgQWJz
dHJhY3REYXRhYmFzZV9oCi0jZGVmaW5lIEFic3RyYWN0RGF0YWJhc2VfaAorI2lmbmRlZiBEYXRh
YmFzZUJhY2tlbmRfaAorI2RlZmluZSBEYXRhYmFzZUJhY2tlbmRfaAogCiAjaWYgRU5BQkxFKFNR
TF9EQVRBQkFTRSkKIAogI2luY2x1ZGUgIkRhdGFiYXNlQmFzaWNUeXBlcy5oIgogI2luY2x1ZGUg
IkRhdGFiYXNlRGV0YWlscy5oIgorI2luY2x1ZGUgIkRhdGFiYXNlRXJyb3IuaCIKICNpbmNsdWRl
ICJTUUxpdGVEYXRhYmFzZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgpAQCAtNDYsMTMgKzQ3LDEzIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIERhdGFiYXNlQXV0aG9yaXplcjsKLWNsYXNzIERhdGFiYXNlQ29udGV4dDsKK2NsYXNz
IERhdGFiYXNlQmFja2VuZENvbnRleHQ7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0Owog
Y2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKLWNsYXNzIEFic3RyYWN0RGF0YWJhc2UgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8QWJzdHJhY3REYXRhYmFzZT4geworY2xhc3MgRGF0YWJhc2VC
YWNrZW5kIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERhdGFiYXNlQmFja2VuZD4gewog
cHVibGljOgotICAgIHZpcnR1YWwgfkFic3RyYWN0RGF0YWJhc2UoKTsKKyAgICB2aXJ0dWFsIH5E
YXRhYmFzZUJhY2tlbmQoKTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKSBjb25zdDsK
IApAQCAtODcsNyArODgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG1hcmtBc0RlbGV0
ZWRBbmRDbG9zZSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VJbW1lZGlhdGVseSgpID0g
MDsKIAotICAgIERhdGFiYXNlQ29udGV4dCogZGF0YWJhc2VDb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhYmFzZUNvbnRleHQuZ2V0KCk7IH0KKyAgICBEYXRhYmFzZUJhY2tlbmRDb250ZXh0
KiBkYXRhYmFzZUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlQ29udGV4dC5nZXQo
KTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIENoYW5nZVZlcnNpb25XcmFwcGVy
OwpAQCAtMTAxLDEyICsxMDIsMTIgQEAgcHJvdGVjdGVkOgogICAgICAgICBTeW5jRGF0YWJhc2UK
ICAgICB9OwogCi0gICAgQWJzdHJhY3REYXRhYmFzZShQYXNzUmVmUHRyPERhdGFiYXNlQ29udGV4
dD4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCi0g
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUsIERhdGFiYXNlVHlwZSk7CisgICAgRGF0YWJhc2VCYWNrZW5kKFBh
c3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCisgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxh
eU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgRGF0YWJhc2VUeXBlKTsKIAogICAg
IHZvaWQgY2xvc2VEYXRhYmFzZSgpOwogCi0gICAgdmlydHVhbCBib29sIHBlcmZvcm1PcGVuQW5k
VmVyaWZ5KGJvb2wgc2hvdWxkU2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUm
LCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CisgICAgdmlydHVhbCBib29sIHBlcmZvcm1PcGVuQW5k
VmVyaWZ5KGJvb2wgc2hvdWxkU2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3Im
LCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiAKICAgICBib29sIGdldFZlcnNpb25Gcm9tRGF0YWJh
c2UoU3RyaW5nJiB2ZXJzaW9uLCBib29sIHNob3VsZENhY2hlVmVyc2lvbiA9IHRydWUpOwogICAg
IGJvb2wgc2V0VmVyc2lvbkluRGF0YWJhc2UoY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBib29sIHNo
b3VsZENhY2hlVmVyc2lvbiA9IHRydWUpOwpAQCAtMTI4LDcgKzEyOSw3IEBAIHByb3RlY3RlZDoK
ICAgICBzdGF0aWMgY29uc3QgY2hhciogZGF0YWJhc2VJbmZvVGFibGVOYW1lKCk7CiAKICAgICBS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luOwotICAg
IFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IG1fZGF0YWJhc2VDb250ZXh0OyAvLyBBc3NvY2lhdGVk
IHdpdGggbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LgorICAgIFJlZlB0cjxEYXRhYmFzZUJhY2tl
bmRDb250ZXh0PiBtX2RhdGFiYXNlQ29udGV4dDsgLy8gQXNzb2NpYXRlZCB3aXRoIG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC4KICAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiAgICAgU3RyaW5nIG1fbmFtZTsKQEAgLTE1MCwxMCAr
MTUxLDEyIEBAIHByaXZhdGU6CiAgICAgU1FMaXRlRGF0YWJhc2UgbV9zcWxpdGVEYXRhYmFzZTsK
IAogICAgIFJlZlB0cjxEYXRhYmFzZUF1dGhvcml6ZXI+IG1fZGF0YWJhc2VBdXRob3JpemVyOwor
CisgICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlU2VydmVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAotI2VuZGlmIC8vIEFi
c3RyYWN0RGF0YWJhc2VfaAorI2VuZGlmIC8vIERhdGFiYXNlQmFja2VuZF9oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEFzeW5jLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
QmFja2VuZEFzeW5jLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRBc3luYy5oIgor
CisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZENv
bnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitEYXRhYmFzZUJhY2tlbmRBc3luYzo6
RGF0YWJhc2VCYWNrZW5kQXN5bmMoUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiBk
YXRhYmFzZUNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3Rl
ZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1h
dGVkU2l6ZSkKKyAgICA6IERhdGFiYXNlKGRhdGFiYXNlQ29udGV4dCwgbmFtZSwgZXhwZWN0ZWRW
ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkKK3sKK30KKworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRBc3luYy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VC
YWNrZW5kQXN5bmMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIERhdGFiYXNlQmFja2VuZEFzeW5jX2gKKyNkZWZpbmUgRGF0YWJhc2VCYWNrZW5kQXN5bmNf
aAorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRGF0YWJhc2VTZXJ2ZXI7CisKKy8vIEZJWE1FOiBUaGlzIGltcGxlbWVudGF0aW9uIG9m
IERhdGFiYXNlQmFja2VuZEFzeW5jIGlzIG9ubHkgYSBwbGFjZSBob2xkZXIKKy8vIGZvciB0aGUg
c3BsaXQgb3V0IG9mIHRoZSBEYXRhYmFzZSBiYWNrZW5kIHRvIGJlIGRvbmUgbGF0ZXIuIFRoaXMK
Ky8vIHBsYWNlIGhvbGRlciBpcyBuZWVkZWQgdG8gYWxsb3cgb3RoZXIgY29kZSB0aGF0IG5lZWQg
dG8gcmVmZXJlbmNlIHRoZQorLy8gRGF0YWJhc2VCYWNrZW5kQXN5bmMgdG8gZG8gc28gYmVmb3Jl
IHRoZSBwcm9wZXIgYmFja2VuZCBzcGxpdCBpcworLy8gYXZhaWxhYmxlLiBUaGlzIHNob3VsZCBi
ZSByZXBsYWNlZCB3aXRoIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gbGF0ZXIuCisKK2NsYXNz
IERhdGFiYXNlQmFja2VuZEFzeW5jIDogcHVibGljIERhdGFiYXNlIHsKK3ByaXZhdGU6CisgICAg
RGF0YWJhc2VCYWNrZW5kQXN5bmMoUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0Piwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3Qg
U3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKKworICAg
IGZyaWVuZCBjbGFzcyBEYXRhYmFzZVNlcnZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBEYXRhYmFz
ZUJhY2tlbmRBc3luY19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlQmFja2VuZENvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2Vu
ZENvbnRleHQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmgiCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFC
QVNFKQorCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1NlY3VyaXR5T3JpZ2luKiBEYXRhYmFzZUJhY2tlbmRDb250ZXh0OjpzZWN1
cml0eU9yaWdpbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+c2VjdXJpdHlPcmlnaW4oKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZUJhY2tlbmRDb250ZXh0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEYXRhYmFzZUJh
Y2tlbmRDb250ZXh0X2gKKyNkZWZpbmUgRGF0YWJhc2VCYWNrZW5kQ29udGV4dF9oCisKKyNpZiBF
TkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiRGF0YWJhc2VDb250ZXh0LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNz
IFNlY3VyaXR5T3JpZ2luOworCisvLyBGSVhNRTogVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBEYXRh
YmFzZUJhY2tlbmRDb250ZXh0IGlzIG9ubHkgYSBwbGFjZSBob2xkZXIKKy8vIGZvciB0aGUgc3Bs
aXQgb3V0IG9mIHRoZSBEYXRhYmFzZUNvbnRleHQgYmFja2VuZCB0byBiZSBkb25lIGxhdGVyLiBU
aGlzCisvLyBwbGFjZSBob2xkZXIgaXMgbmVlZGVkIHRvIGFsbG93IG90aGVyIGNvZGUgdGhhdCBu
ZWVkIHRvIHJlZmVyZW5jZSB0aGUKKy8vIERhdGFiYXNlQmFja2VuZENvbnRleHQgdG8gZG8gc28g
YmVmb3JlIHRoZSBwcm9wZXIgYmFja2VuZCBzcGxpdCBpcworLy8gYXZhaWxhYmxlLiBUaGlzIHNo
b3VsZCBiZSByZXBsYWNlZCB3aXRoIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gbGF0ZXIuCisK
K2NsYXNzIERhdGFiYXNlQmFja2VuZENvbnRleHQgOiBwdWJsaWMgRGF0YWJhc2VDb250ZXh0IHsK
K3B1YmxpYzoKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OyB9CisgICAgU2Vj
dXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjZW5kaWYgLy8g
RGF0YWJhc2VCYWNrZW5kQ29udGV4dF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZFN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kU3luYy5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFj
a2VuZFN5bmMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJEYXRhYmFzZUJhY2tlbmRTeW5jLmgiCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNF
KQorCisjaW5jbHVkZSAiRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0RhdGFiYXNlQmFja2VuZFN5bmM6OkRhdGFiYXNlQmFja2VuZFN5bmMoUGFzc1Jl
ZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiBkYXRhYmFzZUNvbnRleHQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlz
cGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKKyAgICA6IERhdGFiYXNlU3lu
YyhkYXRhYmFzZUNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVz
dGltYXRlZFNpemUpCit7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kU3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kU3luYy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRT
eW5jLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEYXRhYmFzZUJhY2tlbmRTeW5jX2gK
KyNkZWZpbmUgRGF0YWJhc2VCYWNrZW5kU3luY19oCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNF
KQorCisjaW5jbHVkZSAiRGF0YWJhc2VTeW5jLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gbWxhbSB4OCBjbGFzcyBEYXRhYmFz
ZUJhY2tlbmRDb250ZXh0OworY2xhc3MgRGF0YWJhc2VTZXJ2ZXI7CisKKy8vIEZJWE1FOiBUaGlz
IGltcGxlbWVudGF0aW9uIG9mIERhdGFiYXNlQmFja2VuZFN5bmMgaXMgb25seSBhIHBsYWNlIGhv
bGRlcgorLy8gZm9yIHRoZSBzcGxpdCBvdXQgb2YgdGhlIERhdGFiYXNlU3luYyBiYWNrZW5kIHRv
IGJlIGRvbmUgbGF0ZXIuIFRoaXMKKy8vIHBsYWNlIGhvbGRlciBpcyBuZWVkZWQgdG8gYWxsb3cg
b3RoZXIgY29kZSB0aGF0IG5lZWQgdG8gcmVmZXJlbmNlIHRoZQorLy8gRGF0YWJhc2VCYWNrZW5k
U3luYyB0byBkbyBzbyBiZWZvcmUgdGhlIHByb3BlciBiYWNrZW5kIHNwbGl0IGlzCisvLyBhdmFp
bGFibGUuIFRoaXMgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggdGhlIGFjdHVhbCBpbXBsZW1lbnRh
dGlvbiBsYXRlci4KKworY2xhc3MgRGF0YWJhc2VCYWNrZW5kU3luYyA6IHB1YmxpYyBEYXRhYmFz
ZVN5bmMgeworcHJpdmF0ZToKKyAgICBEYXRhYmFzZUJhY2tlbmRTeW5jKFBhc3NSZWZQdHI8RGF0
YWJhc2VCYWNrZW5kQ29udGV4dD4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBl
eHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcg
ZXN0aW1hdGVkU2l6ZSk7CisKKyAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2VTZXJ2ZXI7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNF
KQorCisjZW5kaWYgLy8gRGF0YWJhc2VCYWNrZW5kU3luY19oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuY3BwCShy
ZXZpc2lvbiAxNDExODEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNs
dWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJEYXRh
YmFzZS5oIgorI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZENvbnRleHQuaCIKICNpbmNsdWRlICJE
YXRhYmFzZU1hbmFnZXIuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRhc2suaCIKICNpbmNsdWRlICJE
YXRhYmFzZVRocmVhZC5oIgpAQCAtNTUsNyArNTYsNyBAQCBEYXRhYmFzZUNvbnRleHQ6OkRhdGFi
YXNlQ29udGV4dChTY3JpcHRFCiAKICAgICAvLyBGb3IgZGVidWcgYWNjb3VudGluZyBvbmx5LiBX
ZSBtdXN0IGRvIHRoaXMgYmVmb3JlIHdlIHJlZ2lzdGVyIHRoZQogICAgIC8vIGluc3RhbmNlLiBU
aGUgYXNzZXJ0aW9ucyBhc3N1bWUgdGhpcy4KLSAgICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIo
KS5kaWRDb25zdHJ1Y3REYXRhYmFzZUNvbnRleHQoKTsgCisgICAgRGF0YWJhc2VNYW5hZ2VyOjpt
YW5hZ2VyKCkuZGlkQ29uc3RydWN0RGF0YWJhc2VDb250ZXh0KCk7CiAKICAgICBEYXRhYmFzZU1h
bmFnZXI6Om1hbmFnZXIoKS5yZWdpc3RlckRhdGFiYXNlQ29udGV4dCh0aGlzKTsKIH0KQEAgLTk3
LDYgKzk4LDE1IEBAIHZvaWQgRGF0YWJhc2VDb250ZXh0OjpzdG9wKCkKICAgICBzdG9wRGF0YWJh
c2VzKCk7CiB9CiAKK1Bhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4gRGF0YWJhc2VD
b250ZXh0OjpiYWNrZW5kKCkKK3sKKyAgICByZWYoKTsKKyAgICBEYXRhYmFzZUJhY2tlbmRDb250
ZXh0KiBiYWNrZW5kOworICAgIGJhY2tlbmQgPSByZWludGVycHJldF9jYXN0PERhdGFiYXNlQmFj
a2VuZENvbnRleHQqPih0aGlzKTsKKyAgICBSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4g
YmFja2VuZFJlZiA9IGFkb3B0UmVmKGJhY2tlbmQpOworICAgIHJldHVybiBiYWNrZW5kUmVmLnJl
bGVhc2UoKTsKK30KKwogRGF0YWJhc2VUaHJlYWQqIERhdGFiYXNlQ29udGV4dDo6ZGF0YWJhc2VU
aHJlYWQoKQogewogICAgIGlmICghbV9kYXRhYmFzZVRocmVhZCAmJiAhbV9oYXNPcGVuRGF0YWJh
c2VzKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
Q29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VDb250ZXh0LmgJKHJldmlzaW9uIDE0MTE4MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDYgKzM4LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRGF0YWJhc2U7Citj
bGFzcyBEYXRhYmFzZUJhY2tlbmRDb250ZXh0OwogY2xhc3MgRGF0YWJhc2VUYXNrU3luY2hyb25p
emVyOwogY2xhc3MgRGF0YWJhc2VUaHJlYWQ7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OwpAQCAtNTAsMTQgKzUxLDE1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY29udGV4dERl
c3Ryb3llZCgpOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CiAKLSAgICBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgeyByZXR1cm4gbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0OyB9CisgICAgLy8gbWxhbSB4OCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgeyByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
OyB9CisgICAgUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiBiYWNrZW5kKCk7CiAg
ICAgRGF0YWJhc2VUaHJlYWQqIGRhdGFiYXNlVGhyZWFkKCk7CiAKICAgICB2b2lkIHNldEhhc09w
ZW5EYXRhYmFzZXMoKSB7IG1faGFzT3BlbkRhdGFiYXNlcyA9IHRydWU7IH0KICAgICBib29sIGhh
c09wZW5EYXRhYmFzZXMoKSB7IHJldHVybiBtX2hhc09wZW5EYXRhYmFzZXM7IH0KIAogICAgIC8v
IFdoZW4gdGhlIGRhdGFiYXNlIGNsZWFudXAgaXMgZG9uZSwgY2xlYW51cFN5bmMgd2lsbCBiZSBz
aWduYWxsZWQuCi0gICAgYm9vbCBzdG9wRGF0YWJhc2VzKERhdGFiYXNlVGFza1N5bmNocm9uaXpl
ciopOworICAgIGJvb2wgc3RvcERhdGFiYXNlcyhEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIGNs
ZWFudXBTeW5jKTsKIAogICAgIGJvb2wgYWxsb3dEYXRhYmFzZUFjY2VzcygpIGNvbnN0OwogICAg
IHZvaWQgZGF0YWJhc2VFeGNlZWRlZFF1b3RhKGNvbnN0IFN0cmluZyYgbmFtZSwgRGF0YWJhc2VE
ZXRhaWxzKTsKQEAgLTcyLDYgKzc0LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNSZWdpc3Rl
cmVkOwogICAgIGJvb2wgbV9oYXNSZXF1ZXN0ZWRUZXJtaW5hdGlvbjsKIAorICAgIGZyaWVuZCBj
bGFzcyBEYXRhYmFzZUJhY2tlbmRDb250ZXh0OwogICAgIGZyaWVuZCBjbGFzcyBEYXRhYmFzZU1h
bmFnZXI7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlRXJyb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlRXJyb3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VFcnJvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgRGF0YWJhc2VFcnJvcl9oCisjZGVmaW5lIERhdGFiYXNlRXJyb3JfaAorCisjaWYgRU5B
QkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUgPHd0Zi9UeXBlU2FmZUVudW0uaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgRGF0YWJhc2VFcnJvckRlZiB7CisgICAgZW51bSBF
bnVtcyB7CisgICAgICAgIE5vbmUgPSAwLAorICAgICAgICBDYW5ub3RPcGVuRGF0YWJhc2UsCisg
ICAgICAgIERhdGFiYXNlSXNCZWluZ0RlbGV0ZWQsCisgICAgICAgIERhdGFiYXNlU2l6ZUV4Y2Vl
ZGVkUXVvdGEsCisgICAgICAgIERhdGFiYXNlU2l6ZU92ZXJmbG93ZWQKKyAgICB9OworfTsKKwor
dHlwZWRlZiBUeXBlU2FmZUVudW08RGF0YWJhc2VFcnJvckRlZiwgRGF0YWJhc2VFcnJvckRlZjo6
Tm9uZT4gRGF0YWJhc2VFcnJvcjsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIERhdGFiYXNlRXJyb3JfaApJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTQxMTgxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwx
NCArMjgsMTggQEAKIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJBYnN0
cmFjdERhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJEYXRhYmFz
ZUJhY2tlbmQuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRBc3luYy5oIgorI2luY2x1ZGUg
IkRhdGFiYXNlQmFja2VuZENvbnRleHQuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRTeW5j
LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VDYWxsYmFjay5oIgogI2luY2x1ZGUgIkRhdGFiYXNlQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkRhdGFiYXNlU3luYy5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVGFz
ay5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRhdGFiYXNlSW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIK
IApAQCAtNDMsNyArNDcsNyBAQAogI2luY2x1ZGUgIkRhdGFiYXNlU3RyYXRlZ3kuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKICNlbHNlCi0jaW5jbHVkZSAiREJCYWNrZW5kU2Vy
dmVyLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VTZXJ2ZXIuaCIKICNlbmRpZgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC03MCw3ICs3NCw3IEBAIERhdGFiYXNlTWFuYWdlcjo6RGF0YWJhc2VNYW5h
Z2VyKCkKICNpZiBVU0UoUExBVEZPUk1fU1RSQVRFR0lFUykKICAgICBtX3NlcnZlciA9IHBsYXRm
b3JtU3RyYXRlZ2llcygpLT5kYXRhYmFzZVN0cmF0ZWd5KCktPmdldERhdGFiYXNlU2VydmVyKCk7
CiAjZWxzZQotICAgIG1fc2VydmVyID0gbmV3IERCQmFja2VuZDo6U2VydmVyOworICAgIG1fc2Vy
dmVyID0gbmV3IERhdGFiYXNlU2VydmVyOwogI2VuZGlmCiAgICAgQVNTRVJUKG1fc2VydmVyKTsg
Ly8gV2Ugc2hvdWxkIGFsd2F5cyBoYXZlIGEgc2VydmVyIHRvIHdvcmsgd2l0aC4KIH0KQEAgLTE5
OCwzMCArMjAyLDUyIEBAIHZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpkaWREZXN0cnVjdERhdGFiYXMK
IAogUGFzc1JlZlB0cjxEYXRhYmFzZT4gRGF0YWJhc2VNYW5hZ2VyOjpvcGVuRGF0YWJhc2UoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKICAgICBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLAot
ICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxi
YWNrPiBjcmVhdGlvbkNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlKQorICAgIHVuc2lnbmVkIGxv
bmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNh
bGxiYWNrLAorICAgIERhdGFiYXNlRXJyb3ImIGVycm9yKQogeworICAgIFNjcmlwdENvbnRyb2xs
ZXI6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKICAgICBSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBk
YXRhYmFzZUNvbnRleHQgPSBkYXRhYmFzZUNvbnRleHRGb3IoY29udGV4dCk7CisgICAgUmVmUHRy
PERhdGFiYXNlQmFja2VuZENvbnRleHQ+IGJhY2tlbmRDb250ZXh0ID0gZGF0YWJhc2VDb250ZXh0
LT5iYWNrZW5kKCk7CisgICAgQVNTRVJUKGVycm9yID09IERhdGFiYXNlRXJyb3I6Ok5vbmUpOwog
Ci0gICAgaWYgKCFjYW5Fc3RhYmxpc2hEYXRhYmFzZShjb250ZXh0LCBuYW1lLCBkaXNwbGF5TmFt
ZSwgZXN0aW1hdGVkU2l6ZSkpIHsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJEYXRhYmFzZSAl
cyBmb3Igb3JpZ2luICVzIG5vdCBhbGxvd2VkIHRvIGJlIGVzdGFibGlzaGVkIiwgbmFtZS5hc2Np
aSgpLmRhdGEoKSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKS5hc2NpaSgp
LmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxEYXRhYmFz
ZT4gZGF0YWJhc2UgPSBhZG9wdFJlZihuZXcgRGF0YWJhc2UoZGF0YWJhc2VDb250ZXh0LCBuYW1l
LCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSk7Ci0KKyAgICBi
b29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlID0gIWNyZWF0aW9uQ2FsbGJhY2s7CiAgICAgU3Ry
aW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAoIWRhdGFiYXNlLT5vcGVuQW5kVmVyaWZ5VmVyc2lv
bighY3JlYXRpb25DYWxsYmFjaywgZSwgZXJyb3JNZXNzYWdlKSkgewotICAgICAgICBkYXRhYmFz
ZS0+bG9nRXJyb3JNZXNzYWdlKGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIHJlbW92ZU9wZW5EYXRh
YmFzZShkYXRhYmFzZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybiAwOworICAgIFJlZlB0cjxEYXRh
YmFzZUJhY2tlbmRBc3luYz4gYmFja2VuZCA9IG1fc2VydmVyLT5vcGVuRGF0YWJhc2VBc3luYyhi
YWNrZW5kQ29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1h
dGVkU2l6ZSwgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGVycm9yLCBlcnJvck1lc3NhZ2UpOwor
ICAgIGlmICghYmFja2VuZCkgeworICAgICAgICBBU1NFUlQoZXJyb3IgIT0gRGF0YWJhc2VFcnJv
cjo6Tm9uZSk7CisgICAgICAgIGlmIChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpEYXRhYmFzZUlz
QmVpbmdEZWxldGVkIHx8IGVycm9yID09IERhdGFiYXNlRXJyb3I6OkRhdGFiYXNlU2l6ZU92ZXJm
bG93ZWQpCisgICAgICAgICAgICBnb3RvIGNhbm5vdENyZWF0ZURhdGFiYXNlOworICAgICAgICBp
ZiAoZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6RGF0YWJhc2VTaXplRXhjZWVkZWRRdW90YSkgewor
ICAgICAgICAgICAgLy8gTm90aWZ5IHRoZSBjbGllbnQgdGhhdCB3ZSd2ZSBleGNlZWRlZCB0aGUg
ZGF0YWJhc2UgcXVvdGEuCisgICAgICAgICAgICAvLyBUaGUgY2xpZW50IG1heSB3YW50IHRvIGlu
Y3JlYXNlIHRoZSBxdW90YSwgYW5kIHdlJ2xsIGdpdmUgaXQKKyAgICAgICAgICAgIC8vIG9uZSBt
b3JlIHRyeSBhZnRlciBpZiB0aGF0IGlzIHRoZSBjYXNlLgorICAgICAgICAgICAgZGF0YWJhc2VD
b250ZXh0LT5kYXRhYmFzZUV4Y2VlZGVkUXVvdGEobmFtZSwgRGF0YWJhc2VEZXRhaWxzKG5hbWUu
aXNvbGF0ZWRDb3B5KCksIGRpc3BsYXlOYW1lLmlzb2xhdGVkQ29weSgpLCBlc3RpbWF0ZWRTaXpl
LCAwKSk7CisKKyAgICAgICAgICAgIC8vIFJldHJ5IG9wZW5pbmcgdGhlIGRhdGFiYXNlIGlmIHBv
c3NpYmxlLgorICAgICAgICAgICAgYmFja2VuZCA9IG1fc2VydmVyLT5yZXRyeU9wZW5EYXRhYmFz
ZUFzeW5jKGJhY2tlbmRDb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1l
LCBlc3RpbWF0ZWRTaXplLCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZXJyb3IsIGVycm9yTWVz
c2FnZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWJhY2tlbmQpIHsKKyAgICAgICAgICAg
IEFTU0VSVChlcnJvciAhPSBEYXRhYmFzZUVycm9yOjpOb25lKTsKKworICAgICAgICAgICAgaWYg
KGVycm9yID09IERhdGFiYXNlRXJyb3I6OkNhbm5vdE9wZW5EYXRhYmFzZSkgeworICAgICAgICAg
ICAgICAgIGxvZ0Vycm9yTWVzc2FnZShjb250ZXh0LCBlcnJvck1lc3NhZ2UpOworICAgICAgICAg
ICAgICAgIHJldHVybiAwOyAvLyBGYWlsZWQgdG8gb3BlbiB0aGUgZGF0YWJhc2UuCisgICAgICAg
ICAgICB9CisKK2Nhbm5vdENyZWF0ZURhdGFiYXNlOgorICAgICAgICAgICAgTE9HKFN0b3JhZ2VB
UEksICJEYXRhYmFzZSAlcyBmb3Igb3JpZ2luICVzIG5vdCBhbGxvd2VkIHRvIGJlIGVzdGFibGlz
aGVkIiwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9T
dHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICByZXR1cm4gMDsgLy8gRmFpbGVk
IHRvIG9wZW4gdGhlIGRhdGFiYXNlLgorICAgICAgICB9CiAgICAgfQogCi0gICAgc2V0RGF0YWJh
c2VEZXRhaWxzKGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIG5hbWUsIGRpc3BsYXlOYW1lLCBl
c3RpbWF0ZWRTaXplKTsKLSAgICBkYXRhYmFzZUNvbnRleHQtPnNldEhhc09wZW5EYXRhYmFzZXMo
KTsKKyAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEgYmFja2VuZCwgd2UgY2FuIGNyZWF0ZSB0aGUg
ZnJvbnRlbmQgZGIgZm9yIGl0OgorICAgIFJlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UgPSBEYXRh
YmFzZTo6Y3JlYXRlKGNvbnRleHQsIGJhY2tlbmQpOwogCisgICAgZGF0YWJhc2VDb250ZXh0LT5z
ZXRIYXNPcGVuRGF0YWJhc2VzKCk7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRP
cGVuRGF0YWJhc2UoY29udGV4dCwgZGF0YWJhc2UsIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCkt
Pmhvc3QoKSwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uKTsKIAotICAgIGlmIChkYXRhYmFzZS0+aXNO
ZXcoKSAmJiBjcmVhdGlvbkNhbGxiYWNrLmdldCgpKSB7CisgICAgaWYgKGJhY2tlbmQtPmlzTmV3
KCkgJiYgY3JlYXRpb25DYWxsYmFjay5nZXQoKSkgewogICAgICAgICBMT0coU3RvcmFnZUFQSSwg
IlNjaGVkdWxpbmcgRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayBmb3IgZGF0YWJhc2UgJXBc
biIsIGRhdGFiYXNlLmdldCgpKTsKICAgICAgICAgZGF0YWJhc2UtPm1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC0+cG9zdFRhc2soRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzazo6Y3JlYXRlKGRh
dGFiYXNlLCBjcmVhdGlvbkNhbGxiYWNrKSk7CiAgICAgfQpAQCAtMjMxLDI4ICsyNTcsNDcgQEAg
UGFzc1JlZlB0cjxEYXRhYmFzZT4gRGF0YWJhc2VNYW5hZ2VyOjpvcAogCiBQYXNzUmVmUHRyPERh
dGFiYXNlU3luYz4gRGF0YWJhc2VNYW5hZ2VyOjpvcGVuRGF0YWJhc2VTeW5jKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsCiAgICAgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwKLSAgICB1bnNp
Z25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3Jl
YXRpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgdW5zaWduZWQgbG9uZyBlc3Rp
bWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ss
IERhdGFiYXNlRXJyb3ImIGVycm9yKQogewogICAgIFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGRh
dGFiYXNlQ29udGV4dCA9IGRhdGFiYXNlQ29udGV4dEZvcihjb250ZXh0KTsKKyAgICBSZWZQdHI8
RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4gYmFja2VuZENvbnRleHQgPSBkYXRhYmFzZUNvbnRleHQt
PmJhY2tlbmQoKTsKICAgICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwogCi0g
ICAgaWYgKCFjYW5Fc3RhYmxpc2hEYXRhYmFzZShjb250ZXh0LCBuYW1lLCBkaXNwbGF5TmFtZSwg
ZXN0aW1hdGVkU2l6ZSkpIHsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJEYXRhYmFzZSAlcyBm
b3Igb3JpZ2luICVzIG5vdCBhbGxvd2VkIHRvIGJlIGVzdGFibGlzaGVkIiwgbmFtZS5hc2NpaSgp
LmRhdGEoKSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKS5hc2NpaSgpLmRh
dGEoKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxEYXRhYmFzZVN5
bmM+IGRhdGFiYXNlID0gYWRvcHRSZWYobmV3IERhdGFiYXNlU3luYyhkYXRhYmFzZUNvbnRleHQs
IG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKTsKLQor
ICAgIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UgPSAhY3JlYXRpb25DYWxsYmFjazsKICAg
ICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIGlmICghZGF0YWJhc2UtPnBlcmZvcm1PcGVuQW5k
VmVyaWZ5KCFjcmVhdGlvbkNhbGxiYWNrLCBlYywgZXJyb3JNZXNzYWdlKSkgewotICAgICAgICBk
YXRhYmFzZS0+bG9nRXJyb3JNZXNzYWdlKGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIHJlbW92ZU9w
ZW5EYXRhYmFzZShkYXRhYmFzZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybiAwOworICAgIFJlZlB0
cjxEYXRhYmFzZUJhY2tlbmRTeW5jPiBiYWNrZW5kID0gbV9zZXJ2ZXItPm9wZW5EYXRhYmFzZVN5
bmMoYmFja2VuZENvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVz
dGltYXRlZFNpemUsIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBlcnJvciwgZXJyb3JNZXNzYWdl
KTsKKyAgICBpZiAoIWJhY2tlbmQpIHsKKyAgICAgICAgQVNTRVJUKGVycm9yICE9IERhdGFiYXNl
RXJyb3I6Ok5vbmUpOworICAgICAgICBpZiAoZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6RGF0YWJh
c2VJc0JlaW5nRGVsZXRlZCB8fCBlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpEYXRhYmFzZVNpemVP
dmVyZmxvd2VkKQorICAgICAgICAgICAgZ290byBjYW5ub3RDcmVhdGVEYXRhYmFzZTsKKyAgICAg
ICAgaWYgKGVycm9yID09IERhdGFiYXNlRXJyb3I6OkRhdGFiYXNlU2l6ZUV4Y2VlZGVkUXVvdGEp
IHsKKyAgICAgICAgICAgIC8vIE5vdGlmeSB0aGUgY2xpZW50IHRoYXQgd2UndmUgZXhjZWVkZWQg
dGhlIGRhdGFiYXNlIHF1b3RhLgorICAgICAgICAgICAgLy8gVGhlIGNsaWVudCBtYXkgd2FudCB0
byBpbmNyZWFzZSB0aGUgcXVvdGEsIGFuZCB3ZSdsbCBnaXZlIGl0CisgICAgICAgICAgICAvLyBv
bmUgbW9yZSB0cnkgYWZ0ZXIgaWYgdGhhdCBpcyB0aGUgY2FzZS4KKyAgICAgICAgICAgIGRhdGFi
YXNlQ29udGV4dC0+ZGF0YWJhc2VFeGNlZWRlZFF1b3RhKG5hbWUsIERhdGFiYXNlRGV0YWlscyhu
YW1lLmlzb2xhdGVkQ29weSgpLCBkaXNwbGF5TmFtZS5pc29sYXRlZENvcHkoKSwgZXN0aW1hdGVk
U2l6ZSwgMCkpOworCisgICAgICAgICAgICAvLyBSZXRyeSBvcGVuaW5nIHRoZSBkYXRhYmFzZSBp
ZiBwb3NzaWJsZS4KKyAgICAgICAgICAgIGJhY2tlbmQgPSBtX3NlcnZlci0+cmV0cnlPcGVuRGF0
YWJhc2VTeW5jKGJhY2tlbmRDb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlO
YW1lLCBlc3RpbWF0ZWRTaXplLCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZXJyb3IsIGVycm9y
TWVzc2FnZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWJhY2tlbmQpIHsKKyAgICAgICAg
ICAgIEFTU0VSVChlcnJvciAhPSBEYXRhYmFzZUVycm9yOjpOb25lKTsKKworICAgICAgICAgICAg
aWYgKGVycm9yID09IERhdGFiYXNlRXJyb3I6OkNhbm5vdE9wZW5EYXRhYmFzZSkgeworICAgICAg
ICAgICAgICAgIGxvZ0Vycm9yTWVzc2FnZShjb250ZXh0LCBlcnJvck1lc3NhZ2UpOworICAgICAg
ICAgICAgICAgIHJldHVybiAwOyAvLyBGYWlsZWQgdG8gb3BlbiB0aGUgZGF0YWJhc2UuCisgICAg
ICAgICAgICB9CisKK2Nhbm5vdENyZWF0ZURhdGFiYXNlOgorICAgICAgICAgICAgTE9HKFN0b3Jh
Z2VBUEksICJEYXRhYmFzZSAlcyBmb3Igb3JpZ2luICVzIG5vdCBhbGxvd2VkIHRvIGJlIGVzdGFi
bGlzaGVkIiwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+
dG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICByZXR1cm4gMDsgLy8gRmFp
bGVkIHRvIG9wZW4gdGhlIGRhdGFiYXNlLgorICAgICAgICB9CiAgICAgfQogCi0gICAgc2V0RGF0
YWJhc2VEZXRhaWxzKGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIG5hbWUsIGRpc3BsYXlOYW1l
LCBlc3RpbWF0ZWRTaXplKTsKKyAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEgYmFja2VuZCwgd2Ug
Y2FuIGNyZWF0ZSB0aGUgZnJvbnRlbmQgZGIgZm9yIGl0OgorICAgIFJlZlB0cjxEYXRhYmFzZVN5
bmM+IGRhdGFiYXNlID0gRGF0YWJhc2VTeW5jOjpjcmVhdGUoY29udGV4dCwgYmFja2VuZCk7CiAK
LSAgICBpZiAoZGF0YWJhc2UtPmlzTmV3KCkgJiYgY3JlYXRpb25DYWxsYmFjay5nZXQoKSkgewor
ICAgIGlmIChiYWNrZW5kLT5pc05ldygpICYmIGNyZWF0aW9uQ2FsbGJhY2suZ2V0KCkpIHsKICAg
ICAgICAgTE9HKFN0b3JhZ2VBUEksICJJbnZva2luZyB0aGUgY3JlYXRpb24gY2FsbGJhY2sgZm9y
IGRhdGFiYXNlICVwXG4iLCBkYXRhYmFzZS5nZXQoKSk7CiAgICAgICAgIGNyZWF0aW9uQ2FsbGJh
Y2stPmhhbmRsZUV2ZW50KGRhdGFiYXNlLmdldCgpKTsKICAgICB9CkBAIC0yNjUsNyArMzEwLDcg
QEAgYm9vbCBEYXRhYmFzZU1hbmFnZXI6Omhhc09wZW5EYXRhYmFzZXMoUwogICAgIFJlZlB0cjxE
YXRhYmFzZUNvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCA9IGV4aXN0aW5nRGF0YWJhc2VDb250ZXh0
Rm9yKGNvbnRleHQpOwogICAgIGlmICghZGF0YWJhc2VDb250ZXh0KQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgcmV0dXJuIGRhdGFiYXNlQ29udGV4dC0+bV9oYXNPcGVuRGF0YWJhc2VzOwor
ICAgIHJldHVybiBkYXRhYmFzZUNvbnRleHQtPmhhc09wZW5EYXRhYmFzZXMoKTsKIH0KIAogdm9p
ZCBEYXRhYmFzZU1hbmFnZXI6OnN0b3BEYXRhYmFzZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIpCkBAIC0zMzgs
NyArMzgzLDcgQEAgdm9pZCBEYXRhYmFzZU1hbmFnZXI6OnNjaGVkdWxlTm90aWZ5RGF0YQogICAg
IG1fc2VydmVyLT5zY2hlZHVsZU5vdGlmeURhdGFiYXNlQ2hhbmdlZChvcmlnaW4sIG5hbWUpOwog
fQogCi12b2lkIERhdGFiYXNlTWFuYWdlcjo6ZGF0YWJhc2VDaGFuZ2VkKEFic3RyYWN0RGF0YWJh
c2UqIGRhdGFiYXNlKQordm9pZCBEYXRhYmFzZU1hbmFnZXI6OmRhdGFiYXNlQ2hhbmdlZChEYXRh
YmFzZUJhY2tlbmQqIGRhdGFiYXNlKQogewogICAgIG1fc2VydmVyLT5kYXRhYmFzZUNoYW5nZWQo
ZGF0YWJhc2UpOwogfQpAQCAtMzUzLDMzICszOTgsMjAgQEAgdm9pZCBEYXRhYmFzZU1hbmFnZXI6
OmNsb3NlRGF0YWJhc2VzSW1tZQogdm9pZCBEYXRhYmFzZU1hbmFnZXI6OmludGVycnVwdEFsbERh
dGFiYXNlc0ZvckNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKICAg
ICBSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBkYXRhYmFzZUNvbnRleHQgPSBleGlzdGluZ0RhdGFi
YXNlQ29udGV4dEZvcihjb250ZXh0KTsKLSAgICBpZiAoZGF0YWJhc2VDb250ZXh0KQotICAgICAg
ICBtX3NlcnZlci0+aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb250ZXh0KTsKLX0K
LQotYm9vbCBEYXRhYmFzZU1hbmFnZXI6OmNhbkVzdGFibGlzaERhdGFiYXNlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBk
aXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQotewotICAgIHJldHVybiBt
X3NlcnZlci0+Y2FuRXN0YWJsaXNoRGF0YWJhc2UoY29udGV4dCwgbmFtZSwgZGlzcGxheU5hbWUs
IGVzdGltYXRlZFNpemUpOwotfQotCi12b2lkIERhdGFiYXNlTWFuYWdlcjo6YWRkT3BlbkRhdGFi
YXNlKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQotewotICAgIG1fc2VydmVyLT5hZGRPcGVu
RGF0YWJhc2UoZGF0YWJhc2UpOwotfQotCi12b2lkIERhdGFiYXNlTWFuYWdlcjo6cmVtb3ZlT3Bl
bkRhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQotewotICAgIG1fc2VydmVyLT5y
ZW1vdmVPcGVuRGF0YWJhc2UoZGF0YWJhc2UpOworICAgIGlmIChkYXRhYmFzZUNvbnRleHQpIHsK
KyAgICAgICAgUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+IGJhY2tlbmRDb250ZXh0ID0g
ZGF0YWJhc2VDb250ZXh0LT5iYWNrZW5kKCk7CisgICAgICAgIG1fc2VydmVyLT5pbnRlcnJ1cHRB
bGxEYXRhYmFzZXNGb3JDb250ZXh0KGRhdGFiYXNlQ29udGV4dC0+YmFja2VuZCgpLmdldCgpKTsK
KyAgICB9CiB9CiAKLXZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpzZXREYXRhYmFzZURldGFpbHMoU2Vj
dXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRp
c3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCit1bnNpZ25lZCBsb25nIGxv
bmcgRGF0YWJhc2VNYW5hZ2VyOjpnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3QgRGF0YWJhc2VC
YWNrZW5kKiBkYXRhYmFzZSkKIHsKLSAgICBtX3NlcnZlci0+c2V0RGF0YWJhc2VEZXRhaWxzKG9y
aWdpbiwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpOworICAgIHJldHVybiBtX3Nl
cnZlci0+Z2V0TWF4U2l6ZUZvckRhdGFiYXNlKGRhdGFiYXNlKTsKIH0KIAotdW5zaWduZWQgbG9u
ZyBsb25nIERhdGFiYXNlTWFuYWdlcjo6Z2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IEFic3Ry
YWN0RGF0YWJhc2UqIGRhdGFiYXNlKQordm9pZCBEYXRhYmFzZU1hbmFnZXI6OmxvZ0Vycm9yTWVz
c2FnZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCiB7Ci0gICAgcmV0dXJuIG1fc2VydmVyLT5nZXRNYXhTaXplRm9yRGF0YWJhc2UoZGF0YWJh
c2UpOworICAgIGNvbnRleHQtPmFkZENvbnNvbGVNZXNzYWdlKE90aGVyTWVzc2FnZVNvdXJjZSwg
RXJyb3JNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VNYW5hZ2VyLmgJKHJldmlzaW9uIDE0MTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDgg
KzI4LDkgQEAKIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJBYnN0cmFj
dERhdGFiYXNlU2VydmVyLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VCYXNpY1R5cGVzLmgiCisjaW5j
bHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VFcnJvci5oIgogI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtMzksNiArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEFic3RyYWN0RGF0YWJhc2VTZXJ2ZXI7CiBjbGFzcyBEYXRhYmFzZTsKK2Ns
YXNzIERhdGFiYXNlQmFja2VuZDsKIGNsYXNzIERhdGFiYXNlQ2FsbGJhY2s7CiBjbGFzcyBEYXRh
YmFzZUNvbnRleHQ7CiBjbGFzcyBEYXRhYmFzZU1hbmFnZXJDbGllbnQ7CkBAIC03Nyw4ICs3OSw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZERlc3RydWN0RGF0YWJhc2VDb250ZXh0KCkgeyB9CiAj
ZW5kaWYKIAotICAgIFBhc3NSZWZQdHI8RGF0YWJhc2U+IG9wZW5EYXRhYmFzZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVk
VmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0
ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IG9wZW5EYXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZl
cnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVk
U2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpOworICAg
IFBhc3NSZWZQdHI8RGF0YWJhc2U+IG9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29u
c3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNz
UmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+LCBEYXRhYmFzZUVycm9yJik7CisgICAgUGFzc1JlZlB0
cjxEYXRhYmFzZVN5bmM+IG9wZW5EYXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0
IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1Jl
ZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiwgRGF0YWJhc2VFcnJvciYpOwogCiAgICAgYm9vbCBoYXNP
cGVuRGF0YWJhc2VzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKICAgICB2b2lkIHN0b3BEYXRh
YmFzZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIERhdGFiYXNlVGFza1N5bmNocm9uaXplciop
OwpAQCAtMTAzLDcgKzEwNSw3IEBAIHB1YmxpYzoKICAgICAvLyBGcm9tIGEgc2Vjb25kYXJ5IHRo
cmVhZCwgbXVzdCBiZSB0aHJlYWQgc2FmZSB3aXRoIGl0cyBkYXRhCiAgICAgdm9pZCBzY2hlZHVs
ZU5vdGlmeURhdGFiYXNlQ2hhbmdlZChTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFt
ZSk7CiAKLSAgICB2b2lkIGRhdGFiYXNlQ2hhbmdlZChBYnN0cmFjdERhdGFiYXNlKik7CisgICAg
dm9pZCBkYXRhYmFzZUNoYW5nZWQoRGF0YWJhc2VCYWNrZW5kKik7CiAKICNlbHNlIC8vIFBMQVRG
T1JNKENIUk9NSVVNKQogICAgIHZvaWQgY2xvc2VEYXRhYmFzZXNJbW1lZGlhdGVseShjb25zdCBT
dHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSk7CkBAIC0xMTEsMTIg
KzExMyw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgaW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29u
dGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKLSAgICBib29sIGNhbkVzdGFibGlzaERh
dGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7Ci0gICAg
dm9pZCBhZGRPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSopOwotICAgIHZvaWQgcmVtb3Zl
T3BlbkRhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqKTsKLQotICAgIHZvaWQgc2V0RGF0YWJhc2VE
ZXRhaWxzKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwotICAgIHVuc2lnbmVk
IGxvbmcgbG9uZyBnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3QgQWJzdHJhY3REYXRhYmFzZSop
OworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3QgRGF0
YWJhc2VCYWNrZW5kKik7CiAKIHByaXZhdGU6CiAgICAgRGF0YWJhc2VNYW5hZ2VyKCk7CkBAIC0x
MjYsNiArMTIzLDggQEAgcHJpdmF0ZToKICAgICAvLyBpdCBhbHJlYWR5IGV4aXN0IHByZXZpb3Vz
bHkuIE90aGVyd2lzZSwgaXQgcmV0dXJucyAwLgogICAgIFBhc3NSZWZQdHI8RGF0YWJhc2VDb250
ZXh0PiBleGlzdGluZ0RhdGFiYXNlQ29udGV4dEZvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7
CiAKKyAgICBzdGF0aWMgdm9pZCBsb2dFcnJvck1lc3NhZ2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisKICAgICBBYnN0cmFjdERhdGFiYXNlU2VydmVy
KiBtX3NlcnZlcjsKICAgICBEYXRhYmFzZU1hbmFnZXJDbGllbnQqIG1fY2xpZW50OwogICAgIGJv
b2wgbV9kYXRhYmFzZUlzQXZhaWxhYmxlOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZVNlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVNlcnZlci5jcHAJKHJldmlzaW9uIDE0MDIw
MSkJKGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EQkJhY2tlbmRTZXJ2
ZXIuY3BwOjE0MDIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJEQkJhY2tlbmRTZXJ2ZXIuaCIKKworI2lmIEVOQUJMRShTUUxfREFUQUJB
U0UpCisKKyNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKKyNpbmNsdWRlIDx3dGYvVW51c2Vk
UGFyYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIERCQmFja2VuZCB7CisK
K3ZvaWQgU2VydmVyOjppbml0aWFsaXplKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoKQorewor
I2lmICFQTEFURk9STShDSFJPTUlVTSkKKyAgICBEYXRhYmFzZVRyYWNrZXI6OmluaXRpYWxpemVU
cmFja2VyKGRhdGFiYXNlUGF0aCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShkYXRhYmFzZVBh
dGgpOworI2VuZGlmCit9CisKK3ZvaWQgU2VydmVyOjpzZXRDbGllbnQoRGF0YWJhc2VNYW5hZ2Vy
Q2xpZW50KiBjbGllbnQpCit7CisjaWYgIVBMQVRGT1JNKENIUk9NSVVNKQorICAgIERhdGFiYXNl
VHJhY2tlcjo6dHJhY2tlcigpLnNldENsaWVudChjbGllbnQpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oY2xpZW50KTsKKyNlbmRpZgorfQorCitTdHJpbmcgU2VydmVyOjpkYXRhYmFzZURpcmVj
dG9yeVBhdGgoKSBjb25zdAoreworI2lmICFQTEFURk9STShDSFJPTUlVTSkKKyAgICByZXR1cm4g
RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGF0YWJhc2VEaXJlY3RvcnlQYXRoKCk7CisjZWxz
ZQorICAgIHJldHVybiAiIjsKKyNlbmRpZgorfQorCit2b2lkIFNlcnZlcjo6c2V0RGF0YWJhc2VE
aXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyNpZiAhUExBVEZPUk0oQ0hST01J
VU0pCisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0RGF0YWJhc2VEaXJlY3RvcnlQ
YXRoKHBhdGgpOworI2VuZGlmCit9CisKK1N0cmluZyBTZXJ2ZXI6OmZ1bGxQYXRoRm9yRGF0YWJh
c2UoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0
ZUlmRG9lc05vdEV4aXN0KQoreworICAgIHJldHVybiBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIo
KS5mdWxsUGF0aEZvckRhdGFiYXNlKG9yaWdpbiwgbmFtZSwgY3JlYXRlSWZEb2VzTm90RXhpc3Qp
OworfQorCisjaWYgIVBMQVRGT1JNKENIUk9NSVVNKQorYm9vbCBTZXJ2ZXI6Omhhc0VudHJ5Rm9y
T3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit7CisgICAgcmV0dXJuIERhdGFiYXNlVHJh
Y2tlcjo6dHJhY2tlcigpLmhhc0VudHJ5Rm9yT3JpZ2luKG9yaWdpbik7Cit9CisKK3ZvaWQgU2Vy
dmVyOjpvcmlnaW5zKFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4mIHJlc3VsdCkKK3sK
KyAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5vcmlnaW5zKHJlc3VsdCk7Cit9CisKK2Jv
b2wgU2VydmVyOjpkYXRhYmFzZU5hbWVzRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4s
IFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpCit7CisgICAgcmV0dXJuIERhdGFiYXNlVHJhY2tlcjo6
dHJhY2tlcigpLmRhdGFiYXNlTmFtZXNGb3JPcmlnaW4ob3JpZ2luLCByZXN1bHQpOworfQorCitE
YXRhYmFzZURldGFpbHMgU2VydmVyOjpkZXRhaWxzRm9yTmFtZUFuZE9yaWdpbihjb25zdCBTdHJp
bmcmIG5hbWUsIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit7CisgICAgcmV0dXJuIERhdGFiYXNl
VHJhY2tlcjo6dHJhY2tlcigpLmRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKG5hbWUsIG9yaWdpbik7
Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBTZXJ2ZXI6OnVzYWdlRm9yT3JpZ2luKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4pCit7CisgICAgcmV0dXJuIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigp
LnVzYWdlRm9yT3JpZ2luKG9yaWdpbik7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBTZXJ2ZXI6
OnF1b3RhRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit7CisgICAgcmV0dXJuIERh
dGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnF1b3RhRm9yT3JpZ2luKG9yaWdpbik7Cit9CisKK3Zv
aWQgU2VydmVyOjpzZXRRdW90YShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCB1bnNpZ25lZCBsb25n
IGxvbmcgcXVvdGFTaXplKQoreworICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldFF1
b3RhKG9yaWdpbiwgcXVvdGFTaXplKTsKK30KKwordm9pZCBTZXJ2ZXI6OmRlbGV0ZUFsbERhdGFi
YXNlcygpCit7CisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlQWxsRGF0YWJh
c2VzKCk7Cit9CisKK2Jvb2wgU2VydmVyOjpkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9y
aWdpbikKK3sKKyAgICByZXR1cm4gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGVsZXRlT3Jp
Z2luKG9yaWdpbik7Cit9CisKK2Jvb2wgU2VydmVyOjpkZWxldGVEYXRhYmFzZShTZWN1cml0eU9y
aWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgcmV0dXJuIERhdGFiYXNl
VHJhY2tlcjo6dHJhY2tlcigpLmRlbGV0ZURhdGFiYXNlKG9yaWdpbiwgbmFtZSk7Cit9CisKKy8v
IEZyb20gYSBzZWNvbmRhcnkgdGhyZWFkLCBtdXN0IGJlIHRocmVhZCBzYWZlIHdpdGggaXRzIGRh
dGEKK3ZvaWQgU2VydmVyOjpzY2hlZHVsZU5vdGlmeURhdGFiYXNlQ2hhbmdlZChTZWN1cml0eU9y
aWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgRGF0YWJhc2VUcmFja2Vy
Ojp0cmFja2VyKCkuc2NoZWR1bGVOb3RpZnlEYXRhYmFzZUNoYW5nZWQob3JpZ2luLCBuYW1lKTsK
K30KKwordm9pZCBTZXJ2ZXI6OmRhdGFiYXNlQ2hhbmdlZChBYnN0cmFjdERhdGFiYXNlKiBkYXRh
YmFzZSkKK3sKKyAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5kYXRhYmFzZUNoYW5nZWQo
ZGF0YWJhc2UpOworfQorCisjZWxzZSAvLyBQTEFURk9STShDSFJPTUlVTSkKK3ZvaWQgU2VydmVy
OjpjbG9zZURhdGFiYXNlc0ltbWVkaWF0ZWx5KGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmll
ciwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigp
LmNsb3NlRGF0YWJhc2VzSW1tZWRpYXRlbHkob3JpZ2luSWRlbnRpZmllciwgbmFtZSk7Cit9Cisj
ZW5kaWYgLy8gUExBVEZPUk0oQ0hST01JVU0pCisKK3ZvaWQgU2VydmVyOjppbnRlcnJ1cHRBbGxE
YXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQp
Cit7CisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuaW50ZXJydXB0QWxsRGF0YWJhc2Vz
Rm9yQ29udGV4dChjb250ZXh0KTsKK30KKworYm9vbCBTZXJ2ZXI6OmNhbkVzdGFibGlzaERhdGFi
YXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQor
eworICAgIHJldHVybiBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5jYW5Fc3RhYmxpc2hEYXRh
YmFzZShjb250ZXh0LCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7Cit9CisKK3Zv
aWQgU2VydmVyOjphZGRPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCit7
CisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuYWRkT3BlbkRhdGFiYXNlKGRhdGFiYXNl
KTsKK30KKwordm9pZCBTZXJ2ZXI6OnJlbW92ZU9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNl
KiBkYXRhYmFzZSkKK3sKKyAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5yZW1vdmVPcGVu
RGF0YWJhc2UoZGF0YWJhc2UpOworfQorCit2b2lkIFNlcnZlcjo6c2V0RGF0YWJhc2VEZXRhaWxz
KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQoreworICAgIERhdGFi
YXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldERhdGFiYXNlRGV0YWlscyhvcmlnaW4sIG5hbWUsIGRp
c3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsKK30KKwordW5zaWduZWQgbG9uZyBsb25nIFNlcnZl
cjo6Z2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNl
KQoreworICAgIHJldHVybiBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5nZXRNYXhTaXplRm9y
RGF0YWJhc2UoZGF0YWJhc2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBEQkJhY2tlbmQKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
U2VydmVyLmNwcAkocmV2aXNpb24gMTQwMjAxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZVNlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDE3ICsy
NCwxOSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEQkJhY2tlbmRT
ZXJ2ZXIuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVNlcnZlci5oIgogCiAjaWYgRU5BQkxFKFNRTF9E
QVRBQkFTRSkKIAorI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZEFzeW5jLmgiCisjaW5jbHVkZSAi
RGF0YWJhc2VCYWNrZW5kQ29udGV4dC5oIgorI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZFN5bmMu
aCIKICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFy
YW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIERCQmFja2VuZCB7CiAKLXZv
aWQgU2VydmVyOjppbml0aWFsaXplKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoKQordm9pZCBE
YXRhYmFzZVNlcnZlcjo6aW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCkKIHsK
ICNpZiAhUExBVEZPUk0oQ0hST01JVU0pCiAgICAgRGF0YWJhc2VUcmFja2VyOjppbml0aWFsaXpl
VHJhY2tlcihkYXRhYmFzZVBhdGgpOwpAQCAtNDMsNyArNDUsNyBAQCB2b2lkIFNlcnZlcjo6aW5p
dGlhbGl6ZShjb25zdCBTdHJpbmcmIGRhCiAjZW5kaWYKIH0KIAotdm9pZCBTZXJ2ZXI6OnNldENs
aWVudChEYXRhYmFzZU1hbmFnZXJDbGllbnQqIGNsaWVudCkKK3ZvaWQgRGF0YWJhc2VTZXJ2ZXI6
OnNldENsaWVudChEYXRhYmFzZU1hbmFnZXJDbGllbnQqIGNsaWVudCkKIHsKICNpZiAhUExBVEZP
Uk0oQ0hST01JVU0pCiAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0Q2xpZW50KGNs
aWVudCk7CkBAIC01Miw3ICs1NCw3IEBAIHZvaWQgU2VydmVyOjpzZXRDbGllbnQoRGF0YWJhc2VN
YW5hZ2VyQ2wKICNlbmRpZgogfQogCi1TdHJpbmcgU2VydmVyOjpkYXRhYmFzZURpcmVjdG9yeVBh
dGgoKSBjb25zdAorU3RyaW5nIERhdGFiYXNlU2VydmVyOjpkYXRhYmFzZURpcmVjdG9yeVBhdGgo
KSBjb25zdAogewogI2lmICFQTEFURk9STShDSFJPTUlVTSkKICAgICByZXR1cm4gRGF0YWJhc2VU
cmFja2VyOjp0cmFja2VyKCkuZGF0YWJhc2VEaXJlY3RvcnlQYXRoKCk7CkBAIC02MSwxMTggKzYz
LDE1NyBAQCBTdHJpbmcgU2VydmVyOjpkYXRhYmFzZURpcmVjdG9yeVBhdGgoKSBjCiAjZW5kaWYK
IH0KIAotdm9pZCBTZXJ2ZXI6OnNldERhdGFiYXNlRGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcm
IHBhdGgpCit2b2lkIERhdGFiYXNlU2VydmVyOjpzZXREYXRhYmFzZURpcmVjdG9yeVBhdGgoY29u
c3QgU3RyaW5nJiBwYXRoKQogewogI2lmICFQTEFURk9STShDSFJPTUlVTSkKICAgICBEYXRhYmFz
ZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXREYXRhYmFzZURpcmVjdG9yeVBhdGgocGF0aCk7CiAjZW5k
aWYKIH0KIAotU3RyaW5nIFNlcnZlcjo6ZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1cml0eU9yaWdp
biogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgY3JlYXRlSWZEb2VzTm90RXhpc3Qp
CitTdHJpbmcgRGF0YWJhc2VTZXJ2ZXI6OmZ1bGxQYXRoRm9yRGF0YWJhc2UoU2VjdXJpdHlPcmln
aW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0
KQogewogICAgIHJldHVybiBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5mdWxsUGF0aEZvckRh
dGFiYXNlKG9yaWdpbiwgbmFtZSwgY3JlYXRlSWZEb2VzTm90RXhpc3QpOwogfQogCiAjaWYgIVBM
QVRGT1JNKENIUk9NSVVNKQotYm9vbCBTZXJ2ZXI6Omhhc0VudHJ5Rm9yT3JpZ2luKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4pCitib29sIERhdGFiYXNlU2VydmVyOjpoYXNFbnRyeUZvck9yaWdpbihT
ZWN1cml0eU9yaWdpbiogb3JpZ2luKQogewogICAgIHJldHVybiBEYXRhYmFzZVRyYWNrZXI6OnRy
YWNrZXIoKS5oYXNFbnRyeUZvck9yaWdpbihvcmlnaW4pOwogfQogCi12b2lkIFNlcnZlcjo6b3Jp
Z2lucyhWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+JiByZXN1bHQpCit2b2lkIERhdGFi
YXNlU2VydmVyOjpvcmlnaW5zKFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4mIHJlc3Vs
dCkKIHsKICAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5vcmlnaW5zKHJlc3VsdCk7CiB9
CiAKLWJvb2wgU2VydmVyOjpkYXRhYmFzZU5hbWVzRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBv
cmlnaW4sIFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpCitib29sIERhdGFiYXNlU2VydmVyOjpkYXRh
YmFzZU5hbWVzRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFZlY3RvcjxTdHJpbmc+
JiByZXN1bHQpCiB7CiAgICAgcmV0dXJuIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRhdGFi
YXNlTmFtZXNGb3JPcmlnaW4ob3JpZ2luLCByZXN1bHQpOwogfQogCi1EYXRhYmFzZURldGFpbHMg
U2VydmVyOjpkZXRhaWxzRm9yTmFtZUFuZE9yaWdpbihjb25zdCBTdHJpbmcmIG5hbWUsIFNlY3Vy
aXR5T3JpZ2luKiBvcmlnaW4pCitEYXRhYmFzZURldGFpbHMgRGF0YWJhc2VTZXJ2ZXI6OmRldGFp
bHNGb3JOYW1lQW5kT3JpZ2luKGNvbnN0IFN0cmluZyYgbmFtZSwgU2VjdXJpdHlPcmlnaW4qIG9y
aWdpbikKIHsKICAgICByZXR1cm4gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGV0YWlsc0Zv
ck5hbWVBbmRPcmlnaW4obmFtZSwgb3JpZ2luKTsKIH0KIAotdW5zaWduZWQgbG9uZyBsb25nIFNl
cnZlcjo6dXNhZ2VGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK3Vuc2lnbmVkIGxv
bmcgbG9uZyBEYXRhYmFzZVNlcnZlcjo6dXNhZ2VGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9y
aWdpbikKIHsKICAgICByZXR1cm4gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkudXNhZ2VGb3JP
cmlnaW4ob3JpZ2luKTsKIH0KIAotdW5zaWduZWQgbG9uZyBsb25nIFNlcnZlcjo6cXVvdGFGb3JP
cmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK3Vuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFz
ZVNlcnZlcjo6cXVvdGFGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIHsKICAgICBy
ZXR1cm4gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucXVvdGFGb3JPcmlnaW4ob3JpZ2luKTsK
IH0KIAotdm9pZCBTZXJ2ZXI6OnNldFF1b3RhKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIHVuc2ln
bmVkIGxvbmcgbG9uZyBxdW90YVNpemUpCit2b2lkIERhdGFiYXNlU2VydmVyOjpzZXRRdW90YShT
ZWN1cml0eU9yaWdpbiogb3JpZ2luLCB1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGFTaXplKQogewog
ICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldFF1b3RhKG9yaWdpbiwgcXVvdGFTaXpl
KTsKIH0KIAotdm9pZCBTZXJ2ZXI6OmRlbGV0ZUFsbERhdGFiYXNlcygpCit2b2lkIERhdGFiYXNl
U2VydmVyOjpkZWxldGVBbGxEYXRhYmFzZXMoKQogewogICAgIERhdGFiYXNlVHJhY2tlcjo6dHJh
Y2tlcigpLmRlbGV0ZUFsbERhdGFiYXNlcygpOwogfQogCi1ib29sIFNlcnZlcjo6ZGVsZXRlT3Jp
Z2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCitib29sIERhdGFiYXNlU2VydmVyOjpkZWxldGVP
cmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIHsKICAgICByZXR1cm4gRGF0YWJhc2VUcmFj
a2VyOjp0cmFja2VyKCkuZGVsZXRlT3JpZ2luKG9yaWdpbik7CiB9CiAKLWJvb2wgU2VydmVyOjpk
ZWxldGVEYXRhYmFzZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUp
Citib29sIERhdGFiYXNlU2VydmVyOjpkZWxldGVEYXRhYmFzZShTZWN1cml0eU9yaWdpbiogb3Jp
Z2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgcmV0dXJuIERhdGFiYXNlVHJhY2tlcjo6
dHJhY2tlcigpLmRlbGV0ZURhdGFiYXNlKG9yaWdpbiwgbmFtZSk7CiB9CiAKIC8vIEZyb20gYSBz
ZWNvbmRhcnkgdGhyZWFkLCBtdXN0IGJlIHRocmVhZCBzYWZlIHdpdGggaXRzIGRhdGEKLXZvaWQg
U2VydmVyOjpzY2hlZHVsZU5vdGlmeURhdGFiYXNlQ2hhbmdlZChTZWN1cml0eU9yaWdpbiogb3Jp
Z2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIERhdGFiYXNlU2VydmVyOjpzY2hlZHVsZU5v
dGlmeURhdGFiYXNlQ2hhbmdlZChTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcm
IG5hbWUpCiB7CiAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2NoZWR1bGVOb3RpZnlE
YXRhYmFzZUNoYW5nZWQob3JpZ2luLCBuYW1lKTsKIH0KIAotdm9pZCBTZXJ2ZXI6OmRhdGFiYXNl
Q2hhbmdlZChBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKK3ZvaWQgRGF0YWJhc2VTZXJ2ZXI6
OmRhdGFiYXNlQ2hhbmdlZChEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQogewogICAgIERhdGFi
YXNlVHJhY2tlcjo6dHJhY2tlcigpLmRhdGFiYXNlQ2hhbmdlZChkYXRhYmFzZSk7CiB9CiAKICNl
bHNlIC8vIFBMQVRGT1JNKENIUk9NSVVNKQotdm9pZCBTZXJ2ZXI6OmNsb3NlRGF0YWJhc2VzSW1t
ZWRpYXRlbHkoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5h
bWUpCit2b2lkIERhdGFiYXNlU2VydmVyOjpjbG9zZURhdGFiYXNlc0ltbWVkaWF0ZWx5KGNvbnN0
IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIERh
dGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmNsb3NlRGF0YWJhc2VzSW1tZWRpYXRlbHkob3JpZ2lu
SWRlbnRpZmllciwgbmFtZSk7CiB9CiAjZW5kaWYgLy8gUExBVEZPUk0oQ0hST01JVU0pCiAKLXZv
aWQgU2VydmVyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit2b2lkIERhdGFiYXNlU2VydmVyOjppbnRlcnJ1cHRB
bGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IERhdGFiYXNlQmFja2VuZENvbnRleHQqIGNvbnRl
eHQpCiB7CiAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuaW50ZXJydXB0QWxsRGF0YWJh
c2VzRm9yQ29udGV4dChjb250ZXh0KTsKIH0KIAotYm9vbCBTZXJ2ZXI6OmNhbkVzdGFibGlzaERh
dGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXpl
KQorUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRBc3luYz4gRGF0YWJhc2VTZXJ2ZXI6Om9wZW5E
YXRhYmFzZUFzeW5jKFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiYgYmFja2VuZENvbnRl
eHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNv
bnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgYm9v
bCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciAmZXJyb3IsIFN0cmluZyYg
ZXJyb3JNZXNzYWdlKQogewotICAgIHJldHVybiBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5j
YW5Fc3RhYmxpc2hEYXRhYmFzZShjb250ZXh0LCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVk
U2l6ZSk7CisgICAgUmVmUHRyPERhdGFiYXNlQmFja2VuZEFzeW5jPiBkYXRhYmFzZTsKKyAgICBp
ZiAoRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuY2FuRXN0YWJsaXNoRGF0YWJhc2UoYmFja2Vu
ZENvbnRleHQuZ2V0KCksIG5hbWUsIGVzdGltYXRlZFNpemUsIGVycm9yKSkKKyAgICAgICAgZGF0
YWJhc2UgPSBjcmVhdGVEYXRhYmFzZUFzeW5jKGJhY2tlbmRDb250ZXh0LCBuYW1lLCBleHBlY3Rl
ZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBzZXRWZXJzaW9uSW5OZXdEYXRh
YmFzZSwgZXJyb3IsIGVycm9yTWVzc2FnZSk7CisgICAgcmV0dXJuIGRhdGFiYXNlLnJlbGVhc2Uo
KTsKIH0KIAotdm9pZCBTZXJ2ZXI6OmFkZE9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKiBk
YXRhYmFzZSkKK1Bhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQXN5bmM+IERhdGFiYXNlU2VydmVy
OjpyZXRyeU9wZW5EYXRhYmFzZUFzeW5jKFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiYg
YmFja2VuZENvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3Rl
ZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1h
dGVkU2l6ZSwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciAmZXJy
b3IsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQogewotICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tl
cigpLmFkZE9wZW5EYXRhYmFzZShkYXRhYmFzZSk7CisgICAgUmVmUHRyPERhdGFiYXNlQmFja2Vu
ZEFzeW5jPiBkYXRhYmFzZTsKKyAgICBpZiAoRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucmV0
cnlDYW5Fc3RhYmxpc2hEYXRhYmFzZShiYWNrZW5kQ29udGV4dC5nZXQoKSwgbmFtZSwgZXN0aW1h
dGVkU2l6ZSwgZXJyb3IpKQorICAgICAgICBkYXRhYmFzZSA9IGNyZWF0ZURhdGFiYXNlQXN5bmMo
YmFja2VuZENvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGlt
YXRlZFNpemUsIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBlcnJvciwgZXJyb3JNZXNzYWdlKTsK
KyAgICByZXR1cm4gZGF0YWJhc2UucmVsZWFzZSgpOwogfQogCi12b2lkIFNlcnZlcjo6cmVtb3Zl
T3BlbkRhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQorUGFzc1JlZlB0cjxEYXRh
YmFzZUJhY2tlbmRBc3luYz4gRGF0YWJhc2VTZXJ2ZXI6OmNyZWF0ZURhdGFiYXNlQXN5bmMoUmVm
UHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+JiBiYWNrZW5kQ29udGV4dCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNw
bGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBib29sIHNldFZlcnNpb25Jbk5l
d0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yICZlcnJvciwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7
Ci0gICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKGRhdGFi
YXNlKTsKKyAgICBSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQXN5bmM+IGRhdGFiYXNlOworICAgIGRh
dGFiYXNlID0gYWRvcHRSZWYobmV3IERhdGFiYXNlQmFja2VuZEFzeW5jKGJhY2tlbmRDb250ZXh0
LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSk7Cisg
ICAgaWYgKCFkYXRhYmFzZS0+b3BlbkFuZFZlcmlmeVZlcnNpb24oc2V0VmVyc2lvbkluTmV3RGF0
YWJhc2UsIGVycm9yLCBlcnJvck1lc3NhZ2UpKSB7CisjaWZkZWYgbWxhbV9PTERfQUREX1JFTU9W
RSAvLyBtbGFtIHg2CisgICAgICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnJlbW92ZU9w
ZW5EYXRhYmFzZShkYXRhYmFzZS5nZXQoKSk7CisjZW5kaWYgLy8gbWxhbSB4NiAqLworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0RGF0
YWJhc2VEZXRhaWxzKGJhY2tlbmRDb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBuYW1lLCBkaXNw
bGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7CisgICAgcmV0dXJuIGRhdGFiYXNlLnJlbGVhc2UoKTsK
IH0KIAotdm9pZCBTZXJ2ZXI6OnNldERhdGFiYXNlRGV0YWlscyhTZWN1cml0eU9yaWdpbiogb3Jp
Z2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2ln
bmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKK1Bhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kU3luYz4g
RGF0YWJhc2VTZXJ2ZXI6Om9wZW5EYXRhYmFzZVN5bmMoUmVmUHRyPERhdGFiYXNlQmFja2VuZENv
bnRleHQ+JiBiYWNrZW5kQ29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9u
ZyBlc3RpbWF0ZWRTaXplLCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVy
cm9yICZlcnJvciwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgRGF0YWJhc2VUcmFja2Vy
Ojp0cmFja2VyKCkuc2V0RGF0YWJhc2VEZXRhaWxzKG9yaWdpbiwgbmFtZSwgZGlzcGxheU5hbWUs
IGVzdGltYXRlZFNpemUpOworICAgIFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRTeW5jPiBkYXRhYmFz
ZTsKKyAgICBpZiAoRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuY2FuRXN0YWJsaXNoRGF0YWJh
c2UoYmFja2VuZENvbnRleHQuZ2V0KCksIG5hbWUsIGVzdGltYXRlZFNpemUsIGVycm9yKSkKKyAg
ICAgICAgZGF0YWJhc2UgPSBjcmVhdGVEYXRhYmFzZVN5bmMoYmFja2VuZENvbnRleHQsIG5hbWUs
IGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIHNldFZlcnNpb25J
bk5ld0RhdGFiYXNlLCBlcnJvciwgZXJyb3JNZXNzYWdlKTsKKyAgICByZXR1cm4gZGF0YWJhc2Uu
cmVsZWFzZSgpOwogfQogCi11bnNpZ25lZCBsb25nIGxvbmcgU2VydmVyOjpnZXRNYXhTaXplRm9y
RGF0YWJhc2UoY29uc3QgQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCitQYXNzUmVmUHRyPERh
dGFiYXNlQmFja2VuZFN5bmM+IERhdGFiYXNlU2VydmVyOjpyZXRyeU9wZW5EYXRhYmFzZVN5bmMo
UmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+JiBiYWNrZW5kQ29udGV4dCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBk
aXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBib29sIHNldFZlcnNpb25J
bk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yICZlcnJvciwgU3RyaW5nJiBlcnJvck1lc3NhZ2Up
Cit7CisgICAgUmVmUHRyPERhdGFiYXNlQmFja2VuZFN5bmM+IGRhdGFiYXNlOworICAgIGlmIChE
YXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5yZXRyeUNhbkVzdGFibGlzaERhdGFiYXNlKGJhY2tl
bmRDb250ZXh0LmdldCgpLCBuYW1lLCBlc3RpbWF0ZWRTaXplLCBlcnJvcikpCisgICAgICAgIGRh
dGFiYXNlID0gY3JlYXRlRGF0YWJhc2VTeW5jKGJhY2tlbmRDb250ZXh0LCBuYW1lLCBleHBlY3Rl
ZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBzZXRWZXJzaW9uSW5OZXdEYXRh
YmFzZSwgZXJyb3IsIGVycm9yTWVzc2FnZSk7CisgICAgcmV0dXJuIGRhdGFiYXNlLnJlbGVhc2Uo
KTsKK30KKworUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRTeW5jPiBEYXRhYmFzZVNlcnZlcjo6
Y3JlYXRlRGF0YWJhc2VTeW5jKFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiYgYmFja2Vu
ZENvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNp
b24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciAmZXJyb3IsIFN0
cmluZyYgZXJyb3JNZXNzYWdlKQoreworICAgIFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRTeW5jPiBk
YXRhYmFzZTsKKyAgICBkYXRhYmFzZSA9IGFkb3B0UmVmKG5ldyBEYXRhYmFzZUJhY2tlbmRTeW5j
KGJhY2tlbmRDb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3Rp
bWF0ZWRTaXplKSk7CisgICAgaWYgKCFkYXRhYmFzZS0+cGVyZm9ybU9wZW5BbmRWZXJpZnkoc2V0
VmVyc2lvbkluTmV3RGF0YWJhc2UsIGVycm9yLCBlcnJvck1lc3NhZ2UpKSB7CisjaWZkZWYgbWxh
bV9PTERfQUREX1JFTU9WRSAvLyBtbGFtIHg2CisgICAgICAgIERhdGFiYXNlVHJhY2tlcjo6dHJh
Y2tlcigpLnJlbW92ZU9wZW5EYXRhYmFzZShkYXRhYmFzZS5nZXQoKSk7CisjZW5kaWYgLy8gbWxh
bSB4NiAqLworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgRGF0YWJhc2VUcmFja2VyOjp0
cmFja2VyKCkuc2V0RGF0YWJhc2VEZXRhaWxzKGJhY2tlbmRDb250ZXh0LT5zZWN1cml0eU9yaWdp
bigpLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7CisgICAgcmV0dXJuIGRhdGFi
YXNlLnJlbGVhc2UoKTsKK30KKwordW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlU2VydmVyOjpn
ZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3QgRGF0YWJhc2VCYWNrZW5kKiBkYXRhYmFzZSkKIHsK
ICAgICByZXR1cm4gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZ2V0TWF4U2l6ZUZvckRhdGFi
YXNlKGRhdGFiYXNlKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgREJCYWNrZW5kCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVNlcnZlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIu
aAkocmV2aXNpb24gMTQwMjAxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RCQmFja2VuZFNlcnZlci5oOjE0MDIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREJCYWNrZW5kU2VydmVyX2gKKyNkZWZpbmUgREJCYWNrZW5kU2VydmVyX2gKKworI2lmIEVO
QUJMRShTUUxfREFUQUJBU0UpCisKKyNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlU2VydmVyLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEQkJhY2tlbmQgeworCitjbGFzcyBT
ZXJ2ZXI6IHB1YmxpYyBBYnN0cmFjdERhdGFiYXNlU2VydmVyIHsKK3B1YmxpYzoKKyAgICBTZXJ2
ZXIoKSB7IH07CisgICAgdmlydHVhbCB+U2VydmVyKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
aW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0Q2xpZW50KERhdGFiYXNlTWFuYWdlckNsaWVudCopOworICAgIHZpcnR1YWwgU3RyaW5n
IGRhdGFiYXNlRGlyZWN0b3J5UGF0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXREYXRh
YmFzZURpcmVjdG9yeVBhdGgoY29uc3QgU3RyaW5nJik7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBm
dWxsUGF0aEZvckRhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBi
b29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KTsKKworI2lmICFQTEFURk9STShDSFJPTUlVTSkKKyAg
ICB2aXJ0dWFsIGJvb2wgaGFzRW50cnlGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qKTsKKyAgICB2
aXJ0dWFsIHZvaWQgb3JpZ2lucyhWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+JiByZXN1
bHQpOworICAgIHZpcnR1YWwgYm9vbCBkYXRhYmFzZU5hbWVzRm9yT3JpZ2luKFNlY3VyaXR5T3Jp
Z2luKiwgVmVjdG9yPFN0cmluZz4mIHJlc3VsdCk7CisgICAgdmlydHVhbCBEYXRhYmFzZURldGFp
bHMgZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4oY29uc3QgU3RyaW5nJiwgU2VjdXJpdHlPcmlnaW4q
KTsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHVzYWdlRm9yT3JpZ2luKFNlY3Vy
aXR5T3JpZ2luKik7CisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGFGb3JPcmln
aW4oU2VjdXJpdHlPcmlnaW4qKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRRdW90YShTZWN1cml0
eU9yaWdpbiosIHVuc2lnbmVkIGxvbmcgbG9uZyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
QWxsRGF0YWJhc2VzKCk7CisgICAgdmlydHVhbCBib29sIGRlbGV0ZU9yaWdpbihTZWN1cml0eU9y
aWdpbiopOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVEYXRhYmFzZShTZWN1cml0eU9yaWdpbios
IGNvbnN0IFN0cmluZyYgbmFtZSk7CisKKyAgICAvLyBGcm9tIGEgc2Vjb25kYXJ5IHRocmVhZCwg
bXVzdCBiZSB0aHJlYWQgc2FmZSB3aXRoIGl0cyBkYXRhCisgICAgdmlydHVhbCB2b2lkIHNjaGVk
dWxlTm90aWZ5RGF0YWJhc2VDaGFuZ2VkKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBu
YW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGF0YWJhc2VDaGFuZ2VkKEFic3RyYWN0RGF0YWJhc2Uq
KTsKKworI2Vsc2UgLy8gUExBVEZPUk0oQ0hST01JVU0pCisgICAgdmlydHVhbCB2b2lkIGNsb3Nl
RGF0YWJhc2VzSW1tZWRpYXRlbHkoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIG5hbWUpOworI2VuZGlmIC8vIFBMQVRGT1JNKENIUk9NSVVNKQorCisgICAgdmly
dHVhbCB2b2lkIGludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoY29uc3QgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCopOworCisgICAgdmlydHVhbCBib29sIGNhbkVzdGFibGlzaERhdGFiYXNl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CisgICAgdmlydHVh
bCB2b2lkIGFkZE9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKik7CisgICAgdmlydHVhbCB2
b2lkIHJlbW92ZU9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKik7CisKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0RGF0YWJhc2VEZXRhaWxzKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNp
emUpOworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIGdldE1heFNpemVGb3JEYXRhYmFz
ZShjb25zdCBBYnN0cmFjdERhdGFiYXNlKik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBEQkJhY2tl
bmQKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJB
U0UpCisKKyNlbmRpZiAvLyBEQkJhY2tlbmRTZXJ2ZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVNlcnZlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuaAkocmV2aXNpb24g
MTQwMjAxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVNl
cnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywyMCArMjMsMTkgQEAKICAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAogICovCiAKLSNpZm5kZWYgREJCYWNrZW5kU2VydmVyX2gKLSNkZWZpbmUgREJCYWNrZW5kU2Vy
dmVyX2gKKyNpZm5kZWYgRGF0YWJhc2VTZXJ2ZXJfaAorI2RlZmluZSBEYXRhYmFzZVNlcnZlcl9o
CiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFz
ZVNlcnZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgREJCYWNrZW5kIHsK
IAotY2xhc3MgU2VydmVyOiBwdWJsaWMgQWJzdHJhY3REYXRhYmFzZVNlcnZlciB7CitjbGFzcyBE
YXRhYmFzZVNlcnZlcjogcHVibGljIEFic3RyYWN0RGF0YWJhc2VTZXJ2ZXIgewogcHVibGljOgot
ICAgIFNlcnZlcigpIHsgfTsKLSAgICB2aXJ0dWFsIH5TZXJ2ZXIoKSB7IH0KKyAgICBEYXRhYmFz
ZVNlcnZlcigpIHsgfTsKKyAgICB2aXJ0dWFsIH5EYXRhYmFzZVNlcnZlcigpIHsgfQogCiAgICAg
dmlydHVhbCB2b2lkIGluaXRpYWxpemUoY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgpOwogCkBA
IC00Niw2ICs0NSwxNCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFN0cmluZyBmdWxsUGF0aEZv
ckRhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0
ZUlmRG9lc05vdEV4aXN0KTsKIAorICAgIC8vIE9wZW5pbmcgYW4gYXN5bmMgZGF0YWJhc2U6Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZEFzeW5jPiBvcGVuRGF0YWJhc2VB
c3luYyhSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4mLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1l
LCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJh
c2UsIERhdGFiYXNlRXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZEFzeW5jPiByZXRyeU9wZW5EYXRhYmFzZUFzeW5jKFJl
ZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiYsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2ln
bmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0
YWJhc2VFcnJvciYsIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKKworICAgIC8vIE9wZW5pbmcgYW4g
c3luYyBkYXRhYmFzZToKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kU3lu
Yz4gb3BlbkRhdGFiYXNlU3luYyhSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4mLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJp
bmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIGJvb2wgc2V0VmVy
c2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZFN5bmM+IHJldHJ5T3BlbkRh
dGFiYXNlU3luYyhSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4mLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3Bs
YXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIGJvb2wgc2V0VmVyc2lvbkluTmV3
RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CisKICNpZiAh
UExBVEZPUk0oQ0hST01JVU0pCiAgICAgdmlydHVhbCBib29sIGhhc0VudHJ5Rm9yT3JpZ2luKFNl
Y3VyaXR5T3JpZ2luKik7CiAgICAgdmlydHVhbCB2b2lkIG9yaWdpbnMoVmVjdG9yPFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gPiYgcmVzdWx0KTsKQEAgLTYzLDI1ICs3MCwyMyBAQCBwdWJsaWM6CiAK
ICAgICAvLyBGcm9tIGEgc2Vjb25kYXJ5IHRocmVhZCwgbXVzdCBiZSB0aHJlYWQgc2FmZSB3aXRo
IGl0cyBkYXRhCiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlTm90aWZ5RGF0YWJhc2VDaGFuZ2Vk
KFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGF0YWJhc2VDaGFuZ2VkKEFic3RyYWN0RGF0YWJhc2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGF0
YWJhc2VDaGFuZ2VkKERhdGFiYXNlQmFja2VuZCopOwogCiAjZWxzZSAvLyBQTEFURk9STShDSFJP
TUlVTSkKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VEYXRhYmFzZXNJbW1lZGlhdGVseShjb25zdCBT
dHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAjZW5kaWYgLy8g
UExBVEZPUk0oQ0hST01JVU0pCiAKLSAgICB2aXJ0dWFsIHZvaWQgaW50ZXJydXB0QWxsRGF0YWJh
c2VzRm9yQ29udGV4dChjb25zdCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgdmlydHVh
bCB2b2lkIGludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoY29uc3QgRGF0YWJhc2VCYWNr
ZW5kQ29udGV4dCopOwogCi0gICAgdmlydHVhbCBib29sIGNhbkVzdGFibGlzaERhdGFiYXNlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
ZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7Ci0gICAgdmlydHVhbCB2
b2lkIGFkZE9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKik7Ci0gICAgdmlydHVhbCB2b2lk
IHJlbW92ZU9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKik7CisgICAgdmlydHVhbCB1bnNp
Z25lZCBsb25nIGxvbmcgZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IERhdGFiYXNlQmFja2Vu
ZCopOwogCi0gICAgdmlydHVhbCB2b2lkIHNldERhdGFiYXNlRGV0YWlscyhTZWN1cml0eU9yaWdp
biosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWdu
ZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBn
ZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3QgQWJzdHJhY3REYXRhYmFzZSopOworcHJvdGVjdGVk
OgorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRBc3luYz4gY3JlYXRlRGF0
YWJhc2VBc3luYyhSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4mLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3Bs
YXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIGJvb2wgc2V0VmVyc2lvbkluTmV3
RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZFN5bmM+IGNyZWF0ZURhdGFiYXNlU3luYyhS
ZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4mLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNp
Z25lZCBsb25nIGVzdGltYXRlZFNpemUsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERh
dGFiYXNlRXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiB9OwogCi19IC8vIG5hbWVzcGFj
ZSBEQkJhY2tlbmQKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShT
UUxfREFUQUJBU0UpCiAKLSNlbmRpZiAvLyBEQkJhY2tlbmRTZXJ2ZXJfaAorI2VuZGlmIC8vIERh
dGFiYXNlU2VydmVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VTeW5jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlU3luYy5jcHAJKHJldmlzaW9uIDE0MTE4MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzMsOSArMzMsMTIgQEAKIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKKyNpbmNs
dWRlICJEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmgiCisjaW5jbHVkZSAiRGF0YWJhc2VCYWNrZW5k
U3luYy5oIgogI2luY2x1ZGUgIkRhdGFiYXNlQ2FsbGJhY2suaCIKICNpbmNsdWRlICJEYXRhYmFz
ZUNvbnRleHQuaCIKICNpbmNsdWRlICJEYXRhYmFzZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJEYXRh
YmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiU1FMRXhjZXB0
aW9uLmgiCiAjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25TeW5jLmgiCkBAIC00OCwyMCArNTEsMjUg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1EYXRhYmFzZVN5bmM6OkRhdGFiYXNlU3luYyhQ
YXNzUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAorLy8gRklYTUU6IFRoZSBEYXRh
YmFzZU1hbmFnZXIgbmVlZHMgdG8gY3JlYXRlIGEgRGF0YWJhc2VTeW5jIGluc3RhbmNlIGZyb20g
aXRzIGJhY2tlbmQuCisvLyBUaGlzIGZhY3RvcnkgbWV0aG9kIGlzIGEgdGVtcG9yYXJ5IHdvcmth
cm91bmQgdG8gdGhhdCBEYXRhYmFzZU1hbmFnZXIgbmVlZC4KKy8vIFdoZW4gdGhlIGJhY2tlbmQg
aGFzIGFjdHVhbGx5IGJlZW4gc3BsaXQgb3V0IGZyb20gdGhlIERhdGFiYXNlU3luYywgd2Ugc2hv
dWxkIGJlCisvLyB1c2luZyB0aGUgdXBkYXRlZCBEYXRhYmFzZSBjb25zdHJ1Y3RvciBpbnN0ZWFk
IG9mIHRoaXMgd29ya2Fyb3VuZCwgYW5kIHRoaXMKKy8vIG1ldGhvZCBzaG91bGQgYmUgZGVsZXRl
ZC4KK1Bhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBEYXRhYmFzZVN5bmM6OmNyZWF0ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRTeW5jPiBiYWNrZW5k
KQoreworICAgIHJldHVybiBiYWNrZW5kOworfQorCitEYXRhYmFzZVN5bmM6OkRhdGFiYXNlU3lu
YyhQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxv
bmcgZXN0aW1hdGVkU2l6ZSkKLSAgICA6IEFic3RyYWN0RGF0YWJhc2UoZGF0YWJhc2VDb250ZXh0
LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBTeW5j
RGF0YWJhc2UpCisgICAgOiBEYXRhYmFzZUJhY2tlbmQoZGF0YWJhc2VDb250ZXh0LCBuYW1lLCBl
eHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBTeW5jRGF0YWJhc2Up
CiB7CiB9CiAKIERhdGFiYXNlU3luYzo6fkRhdGFiYXNlU3luYygpCiB7CiAgICAgQVNTRVJUKG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwotCi0gICAgaWYgKG9w
ZW5lZCgpKSB7Ci0gICAgICAgIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLnJlbW92ZU9wZW5E
YXRhYmFzZSh0aGlzKTsKLSAgICAgICAgY2xvc2VEYXRhYmFzZSgpOwotICAgIH0KIH0KIAogdm9p
ZCBEYXRhYmFzZVN5bmM6OmNoYW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBj
b25zdCBTdHJpbmcmIG5ld1ZlcnNpb24sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2Fs
bGJhY2s+IGNoYW5nZVZlcnNpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xODMs
NyArMTkxLDYgQEAgdm9pZCBEYXRhYmFzZVN5bmM6OmNsb3NlSW1tZWRpYXRlbHkoKQogICAgICAg
ICByZXR1cm47CiAKICAgICBsb2dFcnJvck1lc3NhZ2UoImZvcmNpYmx5IGNsb3NpbmcgZGF0YWJh
c2UiKTsKLSAgICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5yZW1vdmVPcGVuRGF0YWJhc2Uo
dGhpcyk7CiAgICAgY2xvc2VEYXRhYmFzZSgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmgJKHJldmlzaW9uIDE0MTE4
MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogI2lmIEVOQUJMRShTUUxfREFUQUJB
U0UpCiAKLSNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VC
YWNrZW5kLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VCYXNpY1R5cGVzLmgiCiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTQ0LDEzICs0
NCwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIERhdGFiYXNlQmFja2VuZFN5
bmM7CiBjbGFzcyBEYXRhYmFzZUNhbGxiYWNrOwogY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jOwog
Y2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsK
IAogLy8gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3Mgc2hvdWxkIGJlIGNyZWF0ZWQgYW5kIHVzZWQg
b25seSBvbiB0aGUgd29ya2VyJ3MgY29udGV4dCB0aHJlYWQuCi1jbGFzcyBEYXRhYmFzZVN5bmMg
OiBwdWJsaWMgQWJzdHJhY3REYXRhYmFzZSB7CitjbGFzcyBEYXRhYmFzZVN5bmMgOiBwdWJsaWMg
RGF0YWJhc2VCYWNrZW5kIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5EYXRhYmFzZVN5bmMoKTsK
IApAQCAtNzMsMTMgKzc0LDE3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRGF0
YWJhc2VTeW5jKFBhc3NSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKKyAgICBEYXRhYmFzZVN5bmMoUGFzc1Jl
ZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBk
aXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKKyAgICBEYXRhYmFzZVN5
bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kU3lu
Yz4pOyAvLyBGSVhNRTogbm90IGltcGxlbWVudGVkICYgdXNlZCB5ZXQuCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kU3luYz4pOworCiAgICAgdm9pZCBydW5UcmFuc2FjdGlv
bihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgYm9vbCByZWFkT25seSwg
RXhjZXB0aW9uQ29kZSYpOwogCiAgICAgU3RyaW5nIG1fbGFzdEVycm9yTWVzc2FnZTsKIAogICAg
IGZyaWVuZCBjbGFzcyBEYXRhYmFzZU1hbmFnZXI7CisgICAgZnJpZW5kIGNsYXNzIERhdGFiYXNl
QmFja2VuZFN5bmM7IC8vIEZJWE1FOiByZW1vdmUgdGhpcyB3aGVuIHRoZSBiYWNrZW5kIGhhcyBi
ZWVuIHNwbGl0IG91dC4KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUYXNrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGFzay5jcHAJ
KHJldmlzaW9uIDE0MTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VUYXNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsMTAgKzk4LDEwIEBAIHZvaWQg
RGF0YWJhc2VUYXNrOjpwZXJmb3JtVGFzaygpCiAvLyAqKiogRGF0YWJhc2VPcGVuVGFzayAqKioK
IC8vIE9wZW5zIHRoZSBkYXRhYmFzZSBmaWxlIGFuZCB2ZXJpZmllcyB0aGUgdmVyc2lvbiBtYXRj
aGVzIHRoZSBleHBlY3RlZCB2ZXJzaW9uLgogCi1EYXRhYmFzZTo6RGF0YWJhc2VPcGVuVGFzazo6
RGF0YWJhc2VPcGVuVGFzayhEYXRhYmFzZSogZGF0YWJhc2UsIGJvb2wgc2V0VmVyc2lvbkluTmV3
RGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyLCBFeGNlcHRp
b25Db2RlJiBjb2RlLCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgYm9vbCYgc3VjY2VzcykKK0RhdGFi
YXNlOjpEYXRhYmFzZU9wZW5UYXNrOjpEYXRhYmFzZU9wZW5UYXNrKERhdGFiYXNlKiBkYXRhYmFz
ZSwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVy
KiBzeW5jaHJvbml6ZXIsIERhdGFiYXNlRXJyb3ImIGVycm9yLCBTdHJpbmcmIGVycm9yTWVzc2Fn
ZSwgYm9vbCYgc3VjY2VzcykKICAgICA6IERhdGFiYXNlVGFzayhkYXRhYmFzZSwgc3luY2hyb25p
emVyKQogICAgICwgbV9zZXRWZXJzaW9uSW5OZXdEYXRhYmFzZShzZXRWZXJzaW9uSW5OZXdEYXRh
YmFzZSkKLSAgICAsIG1fY29kZShjb2RlKQorICAgICwgbV9lcnJvcihlcnJvcikKICAgICAsIG1f
ZXJyb3JNZXNzYWdlKGVycm9yTWVzc2FnZSkKICAgICAsIG1fc3VjY2VzcyhzdWNjZXNzKQogewpA
QCAtMTExLDcgKzExMSw3IEBAIERhdGFiYXNlOjpEYXRhYmFzZU9wZW5UYXNrOjpEYXRhYmFzZU9w
ZW4KIHZvaWQgRGF0YWJhc2U6OkRhdGFiYXNlT3BlblRhc2s6OmRvUGVyZm9ybVRhc2soKQogewog
ICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgbV9zdWNjZXNzID0gZGF0YWJhc2UoKS0+cGVy
Zm9ybU9wZW5BbmRWZXJpZnkobV9zZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgbV9jb2RlLCBlcnJv
ck1lc3NhZ2UpOworICAgIG1fc3VjY2VzcyA9IGRhdGFiYXNlKCktPnBlcmZvcm1PcGVuQW5kVmVy
aWZ5KG1fc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIG1fZXJyb3IsIGVycm9yTWVzc2FnZSk7CiAg
ICAgaWYgKCFtX3N1Y2Nlc3MpCiAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdl
Lmlzb2xhdGVkQ29weSgpOwogfQpAQCAtMTMzLDcgKzEzMyw3IEBAIERhdGFiYXNlOjpEYXRhYmFz
ZUNsb3NlVGFzazo6RGF0YWJhc2VDbG8KIAogdm9pZCBEYXRhYmFzZTo6RGF0YWJhc2VDbG9zZVRh
c2s6OmRvUGVyZm9ybVRhc2soKQogewotICAgIGRhdGFiYXNlKCktPmNsb3NlKCk7CisgICAgZGF0
YWJhc2UoKS0+Y2xvc2UxKCk7CiB9CiAKICNpZiAhTE9HX0RJU0FCTEVECkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGFzay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUYXNrLmgJKHJldmlz
aW9uIDE0MTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgIkRh
dGFiYXNlLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VCYXNpY1R5cGVzLmgiCisjaW5jbHVkZSAiRGF0
YWJhc2VFcnJvci5oIgogI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uLmgiCiAjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC05OSwxMyArMTAwLDEz
IEBAIHByaXZhdGU6CiAKIGNsYXNzIERhdGFiYXNlOjpEYXRhYmFzZU9wZW5UYXNrIDogcHVibGlj
IERhdGFiYXNlVGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8RGF0YWJhc2VP
cGVuVGFzaz4gY3JlYXRlKERhdGFiYXNlKiBkYiwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFz
ZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIsIEV4Y2VwdGlvbkNvZGUm
IGNvZGUsIFN0cmluZyYgZXJyb3JNZXNzYWdlLCBib29sJiBzdWNjZXNzKQorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPERhdGFiYXNlT3BlblRhc2s+IGNyZWF0ZShEYXRhYmFzZSogZGIsIGJvb2wgc2V0
VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25p
emVyLCBEYXRhYmFzZUVycm9yJiBlcnJvciwgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGJvb2wmIHN1
Y2Nlc3MpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERhdGFiYXNlT3BlblRh
c2soZGIsIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBzeW5jaHJvbml6ZXIsIGNvZGUsIGVycm9y
TWVzc2FnZSwgc3VjY2VzcykpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERhdGFiYXNl
T3BlblRhc2soZGIsIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBzeW5jaHJvbml6ZXIsIGVycm9y
LCBlcnJvck1lc3NhZ2UsIHN1Y2Nlc3MpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRGF0YWJh
c2VPcGVuVGFzayhEYXRhYmFzZSosIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFi
YXNlVGFza1N5bmNocm9uaXplciosIEV4Y2VwdGlvbkNvZGUmLCBTdHJpbmcmIGVycm9yTWVzc2Fn
ZSwgYm9vbCYgc3VjY2Vzcyk7CisgICAgRGF0YWJhc2VPcGVuVGFzayhEYXRhYmFzZSosIGJvb2wg
c2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciosIERhdGFi
YXNlRXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgYm9vbCYgc3VjY2Vzcyk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgZG9QZXJmb3JtVGFzaygpOwogI2lmICFMT0dfRElTQUJMRUQKQEAgLTExMyw3
ICsxMTQsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBib29sIG1fc2V0VmVyc2lvbkluTmV3
RGF0YWJhc2U7Ci0gICAgRXhjZXB0aW9uQ29kZSYgbV9jb2RlOworICAgIERhdGFiYXNlRXJyb3Im
IG1fZXJyb3I7CiAgICAgU3RyaW5nJiBtX2Vycm9yTWVzc2FnZTsKICAgICBib29sJiBtX3N1Y2Nl
c3M7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZVRocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZVRocmVhZC5jcHAJKHJldmlzaW9uIDE0MTE4MSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjYsNyArMTI2LDcgQEAgdm9pZCBEYXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQo
KQogICAgICAgICBvcGVuU2V0Q29weS5zd2FwKG1fb3BlbkRhdGFiYXNlU2V0KTsKICAgICAgICAg
RGF0YWJhc2VTZXQ6Oml0ZXJhdG9yIGVuZCA9IG9wZW5TZXRDb3B5LmVuZCgpOwogICAgICAgICBm
b3IgKERhdGFiYXNlU2V0OjppdGVyYXRvciBpdCA9IG9wZW5TZXRDb3B5LmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgICAgICgqaXQpLT5jbG9zZSgpOworICAgICAgICAgICAgKCpp
dCktPmNsb3NlMSgpOwogICAgIH0KIAogICAgIC8vIERldGFjaCB0aGUgdGhyZWFkIHNvIGl0cyBy
ZXNvdXJjZXMgYXJlIG5vIGxvbmdlciBvZiBhbnkgY29uY2VybiB0byBhbnlvbmUgZWxzZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VUcmFja2VyLmNwcAkocmV2aXNpb24gMTQxMTgxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwx
NyArMzEsMTYgQEAKIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJBYnN0
cmFjdERhdGFiYXNlLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xp
ZW50LmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VDb250ZXh0LmgiCisjaW5jbHVkZSAiRGF0YWJhc2VC
YWNrZW5kLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5oIgogI2luY2x1ZGUg
IkRhdGFiYXNlTWFuYWdlci5oIgogI2luY2x1ZGUgIkRhdGFiYXNlTWFuYWdlckNsaWVudC5oIgog
I2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1
ZGUgIk9yaWdpblF1b3RhTWFuYWdlci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbkhhc2guaCIKICNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVt
LmgiCkBAIC0xMDksMjQgKzEwOCwzNiBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6b3BlblRyYWNr
ZXJEYXRhYmFzCiAgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKIAogICAg
IGlmIChtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
bjsgLy8gQWxyZWFkeSBvcGVuLiBOb3RoaW5nIG1vcmUgdG8gZG8uCiAKKyAgICAvLyBJZiBjcmVh
dGVJZkRvZXNOb3RFeGlzdCBpcyBmYWxzZSwgU1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJh
c2VGaWxlRXhpc3RzKCkKKyAgICAvLyB3aWxsIHJldHVybiBmYWxzZSBpZiB0aGUgZGF0YWJhc2Ug
ZmlsZSBkb2VzIG5vdCBleGlzdC4KKyAgICAvLyBJZiBjcmVhdGVJZkRvZXNOb3RFeGlzdCBpcyB0
cnVlLCBTUUxpdGVGaWxlU3lzdGVtOjplbnN1cmVEYXRhYmFzZUZpbGVFeGlzdHMoKQorICAgIC8v
IHdpbGwgYXR0ZW1wdCB0byBjcmVhdGUgdGhlIHBhdGggdG8gdGhlIGRhdGFiYXNlIGZpbGUgaWYg
aXQgZG9lcyBub3QKKyAgICAvLyBleGlzdHMgeWV0LiBJdCdsbCByZXR1cm4gdHJ1ZSBpZiB0aGUg
cGF0aCBhbHJlYWR5IGV4aXN0cywgb3IgaWYgaXQKKyAgICAvLyBzdWNjZXNzZnVsbHkgY3JlYXRl
cyB0aGUgcGF0aC4gRWxzZSwgaXQgd2lsbCByZXR1cm4gZmFsc2UuCiAgICAgU3RyaW5nIGRhdGFi
YXNlUGF0aCA9IHRyYWNrZXJEYXRhYmFzZVBhdGgoKTsKICAgICBpZiAoIVNRTGl0ZUZpbGVTeXN0
ZW06OmVuc3VyZURhdGFiYXNlRmlsZUV4aXN0cyhkYXRhYmFzZVBhdGgsIGNyZWF0ZUlmRG9lc05v
dEV4aXN0KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gT3BlbiB0aGUgZGF0YWJhc2UgdW5j
b25kaXRpb25hbGx5LiBJZiBvbmUgZG9lcyBub3QgZXhpc3RzIGFscmVhZHksIG9wZW4KKyAgICAv
LyBhIG5ldyBvbmUuCiAgICAgaWYgKCFtX2RhdGFiYXNlLm9wZW4oZGF0YWJhc2VQYXRoKSkgewog
ICAgICAgICAvLyBGSVhNRTogV2hhdCBkbyBkbyBoZXJlPwogICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byBvcGVuIGRhdGFiYXNlUGF0aCAlcy4iLCBkYXRhYmFzZVBhdGguYXNjaWkoKS5kYXRh
KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fZGF0YWJhc2UuZGlzYWJsZVRocmVh
ZGluZ0NoZWNrcygpOworCisgICAgLy8gRW5zdXJlIHRoYXQgdGhlICdPcmlnaW5zJyB0YWJsZSBl
eGlzdHMuIENyZWF0ZSBpdCBpZiBpdCBkb2Vzbid0IGV4aXN0IHlldC4KICAgICBpZiAoIW1fZGF0
YWJhc2UudGFibGVFeGlzdHMoIk9yaWdpbnMiKSkgewogICAgICAgICBpZiAoIW1fZGF0YWJhc2Uu
ZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBPcmlnaW5zIChvcmlnaW4gVEVYVCBVTklRVUUg
T04gQ09ORkxJQ1QgUkVQTEFDRSwgcXVvdGEgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBG
QUlMKTsiKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IGFuZCBoZXJlCiAgICAgICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgT3JpZ2lucyB0YWJsZSIpOwogICAgICAgICB9CiAg
ICAgfQorCisgICAgLy8gRW5zdXJlIHRoYXQgdGhlICdEYXRhYmFzZXMnIHRhYmxlIGV4aXN0cy4g
Q3JlYXRlIGl0IGlmIGl0IGRvZXNuJ3QgZXhpc3QgeWV0LgogICAgIGlmICghbV9kYXRhYmFzZS50
YWJsZUV4aXN0cygiRGF0YWJhc2VzIikpIHsKICAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1
dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgRGF0YWJhc2VzIChndWlkIElOVEVHRVIgUFJJTUFSWSBL
RVkgQVVUT0lOQ1JFTUVOVCwgb3JpZ2luIFRFWFQsIG5hbWUgVEVYVCwgZGlzcGxheU5hbWUgVEVY
VCwgZXN0aW1hdGVkU2l6ZSBJTlRFR0VSLCBwYXRoIFRFWFQpOyIpKSB7CiAgICAgICAgICAgICAv
LyBGSVhNRTogYW5kIGhlcmUKQEAgLTEzNSw0OCArMTQ2LDkwIEBAIHZvaWQgRGF0YWJhc2VUcmFj
a2VyOjpvcGVuVHJhY2tlckRhdGFiYXMKICAgICB9CiB9CiAKLWJvb2wgRGF0YWJhc2VUcmFja2Vy
OjpjYW5Fc3RhYmxpc2hEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxv
bmcgZXN0aW1hdGVkU2l6ZSkKK2Jvb2wgRGF0YWJhc2VUcmFja2VyOjpoYXNBZGVxdWF0ZVF1b3Rh
Rm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVk
U2l6ZSwgRGF0YWJhc2VFcnJvciYgZXJyKQoreworICAgIC8vIFNpbmNlIHdlJ3JlIGltbWluZW50
bHkgb3BlbmluZyBhIGRhdGFiYXNlIHdpdGhpbiB0aGlzIGNvbnRleHQncyBvcmlnaW4sCisgICAg
Ly8gbWFrZSBzdXJlIHRoaXMgb3JpZ2luIGlzIGJlaW5nIHRyYWNrZWQgYnkgdGhlIFF1b3RhVHJh
Y2tlcgorICAgIC8vIGJ5IGZldGNoaW5nIGl0cyBjdXJyZW50IHVzYWdlIG5vdy4KKyAgICB1bnNp
Z25lZCBsb25nIGxvbmcgdXNhZ2UgPSB1c2FnZUZvck9yaWdpbk5vTG9jayhvcmlnaW4pOworCisg
ICAgLy8gSWYgdGhlIGRhdGFiYXNlIHdpbGwgZml0LCBhbGxvdyBpdHMgY3JlYXRpb24uCisgICAg
dW5zaWduZWQgbG9uZyBsb25nIHJlcXVpcmVtZW50ID0gdXNhZ2UgKyBtYXgoMVVMLCBlc3RpbWF0
ZWRTaXplKTsKKyAgICBpZiAocmVxdWlyZW1lbnQgPCB1c2FnZSkgeworICAgICAgICBlcnIgPSBE
YXRhYmFzZUVycm9yOjpEYXRhYmFzZVNpemVPdmVyZmxvd2VkOworICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIFRoZSBlc3RpbWF0ZWQgc2l6ZSBpcyBzbyBiaWcgaXQgY2F1c2VzIGFuIG92ZXJmbG93
OyBkb24ndCBhbGxvdyBjcmVhdGlvbi4KKyAgICB9CisgICAgaWYgKHJlcXVpcmVtZW50IDw9IHF1
b3RhRm9yT3JpZ2luTm9Mb2NrKG9yaWdpbikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
ZXJyID0gRGF0YWJhc2VFcnJvcjo6RGF0YWJhc2VTaXplRXhjZWVkZWRRdW90YTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgRGF0YWJhc2VUcmFja2VyOjpjYW5Fc3RhYmxpc2hEYXRhYmFz
ZShEYXRhYmFzZUJhY2tlbmRDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgRGF0YWJhc2VFcnJvciYgZXJyb3IpCiB7CisgICAg
TXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisgICAgTG9ja2VyPE9y
aWdpblF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigp
KTsKICAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gY29udGV4dC0+c2VjdXJpdHlPcmlnaW4o
KTsKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgcmVxdWlyZW1lbnQ7Ci0gICAgewotICAgICAgICBN
dXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKLSAgICAgICAgTG9ja2Vy
PE9yaWdpblF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdl
cigpKTsKIAotICAgICAgICBpZiAoIWNhbkNyZWF0ZURhdGFiYXNlKG9yaWdpbiwgbmFtZSkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzRGVsZXRpbmdEYXRhYmFzZU9yT3Jp
Z2luRm9yKG9yaWdpbiwgbmFtZSkpIHsKKyAgICAgICAgZXJyb3IgPSBEYXRhYmFzZUVycm9yOjpE
YXRhYmFzZUlzQmVpbmdEZWxldGVkOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgcmVjb3JkQ3JlYXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOworCisgICAgLy8gSWYgYSBk
YXRhYmFzZSBhbHJlYWR5IGV4aXN0cywgaWdub3JlIHRoZSBwYXNzZWQtaW4gZXN0aW1hdGVkIHNp
emUgYW5kIHNheSBpdCdzIE9LLgorICAgIGlmIChoYXNFbnRyeUZvckRhdGFiYXNlKG9yaWdpbiwg
bmFtZSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGhhc0FkZXF1YXRlUXVvdGFG
b3JPcmlnaW4ob3JpZ2luLCBlc3RpbWF0ZWRTaXplLCBlcnJvcikpIHsKKyAgICAgICAgQVNTRVJU
KGVycm9yID09IERhdGFiYXNlRXJyb3I6Ok5vbmUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CiAKLSAgICAgICAgcmVjb3JkQ3JlYXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOworICAg
IC8vIElmIHdlIGdldCBoZXJlLCB0aGVuIHdlIGRvIG5vdCBoYXZlIGVub3VnaCBxdW90YSBmb3Ig
b25lIG9mIHRoZQorICAgIC8vIGZvbGxvd2luZyByZWFzb25zIGFzIGluZGljYXRlZCBieSB0aGUg
c2V0IGVycm9yOgorICAgIC8vCisgICAgLy8gSWYgdGhlIGVycm9yIGlzIERBVEFCQVNFX1NJWkVf
T1ZFUkZMT1dFRCwgdGhlbiB0aGlzIG1lYW5zIHRoZSByZXF1ZXN0ZWQKKyAgICAvLyBlc3RpbWF0
ZWRTaXplIGlmIHNvIHVucmVhc29uYWJseSBsYXJnZSB0aGF0IGl0IGNhbiBjYXVzZSBhbiBvdmVy
ZmxvdyBpbgorICAgIC8vIHRoZSB1c2FnZSBidWRnZXQgY29tcHV0YXRpb24uIEluIHRoYXQgY2Fz
ZSwgdGhlcmUncyBub3RoaW5nIG1vcmUgd2UgY2FuCisgICAgLy8gZG8sIGFuZCB0aGVyZSdzIG5v
IG5lZWQgZm9yIGEgcmV0cnkuIEhlbmNlLCB3ZSBzaG91bGQgaW5kaWNhdGUgdGhhdAorICAgIC8v
IHdlJ3JlIGRvbmUgd2l0aCBvdXIgYXR0ZW1wdCB0byBjcmVhdGUgdGhlIGRhdGFiYXNlOgorICAg
IC8vCisgICAgLy8gSWYgdGhlIGVycm9yIGlzIERBVEFCQVNFX1NJWkVfRVhDRUVERURfUVVPVEEs
IHRoZW4gd2UnbGwgZ2l2ZSB0aGUgY2xpZW50CisgICAgLy8gYSBjaGFuY2UgdG8gdXBkYXRlIHRo
ZSBxdW90YSBhbmQgY2FsbCByZXRyeUNhbkVzdGFibGlzaERhdGFiYXNlKCkgdG8gdHJ5CisgICAg
Ly8gYWdhaW4uIEhlbmNlLCB3ZSBkb24ndCBjYWxsIGRvbmVDcmVhdGluZ0RhdGFiYXNlKCkgeWV0
IGluIHRoYXQgY2FzZS4KKworICAgIGlmIChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpEYXRhYmFz
ZVNpemVPdmVyZmxvd2VkKQorICAgICAgICBkb25lQ3JlYXRpbmdEYXRhYmFzZShvcmlnaW4sIG5h
bWUpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUKGVycm9yID09IERhdGFiYXNlRXJyb3I6OkRh
dGFiYXNlU2l6ZUV4Y2VlZGVkUXVvdGEpOwogCi0gICAgICAgIC8vIFNpbmNlIHdlJ3JlIGltbWlu
ZW50bHkgb3BlbmluZyBhIGRhdGFiYXNlIHdpdGhpbiB0aGlzIGNvbnRleHQncyBvcmlnaW4sIG1h
a2Ugc3VyZSB0aGlzIG9yaWdpbiBpcyBiZWluZyB0cmFja2VkIGJ5IHRoZSBRdW90YVRyYWNrZXIK
LSAgICAgICAgLy8gYnkgZmV0Y2hpbmcgaXRzIGN1cnJlbnQgdXNhZ2Ugbm93LgotICAgICAgICB1
bnNpZ25lZCBsb25nIGxvbmcgdXNhZ2UgPSB1c2FnZUZvck9yaWdpbk5vTG9jayhvcmlnaW4pOwot
Ci0gICAgICAgIC8vIElmIGEgZGF0YWJhc2UgYWxyZWFkeSBleGlzdHMsIGlnbm9yZSB0aGUgcGFz
c2VkLWluIGVzdGltYXRlZCBzaXplIGFuZCBzYXkgaXQncyBPSy4KLSAgICAgICAgaWYgKGhhc0Vu
dHJ5Rm9yRGF0YWJhc2Uob3JpZ2luLCBuYW1lKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgICAgIC8vIElmIHRoZSBkYXRhYmFzZSB3aWxsIGZpdCwgYWxsb3cgaXRzIGNyZWF0aW9u
LgotICAgICAgICByZXF1aXJlbWVudCA9IHVzYWdlICsgbWF4KDFVTCwgZXN0aW1hdGVkU2l6ZSk7
Ci0gICAgICAgIGlmIChyZXF1aXJlbWVudCA8IHVzYWdlKSB7Ci0gICAgICAgICAgICBkb25lQ3Jl
YXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBJZiB0aGUgZXN0aW1hdGVkIHNpemUgaXMgc28gYmlnIGl0IGNhdXNlcyBhbiBvdmVyZmxvdywg
ZG9uJ3QgYWxsb3cgY3JlYXRpb24uCi0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlcXVpcmVtZW50
IDw9IHF1b3RhRm9yT3JpZ2luTm9Mb2NrKG9yaWdpbikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICAvLyBHaXZlIHRoZSBjaHJvbWUgY2xpZW50IGEgY2hhbmNlIHRvIGlu
Y3JlYXNlIHRoZSBxdW90YS4KLSAgICAvLyBEcm9wIGFsbCBsb2NrcyBiZWZvcmUgY2FsbGluZyBv
dXQ7IHdlIGRvbid0IGtub3cgd2hhdCB0aGV5J2xsIGRvLgotICAgIFJlZlB0cjxEYXRhYmFzZUNv
bnRleHQ+IGRhdGFiYXNlQ29udGV4dCA9IERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmRhdGFi
YXNlQ29udGV4dEZvcihjb250ZXh0KTsKLSAgICBkYXRhYmFzZUNvbnRleHQtPmRhdGFiYXNlRXhj
ZWVkZWRRdW90YShuYW1lLCBEYXRhYmFzZURldGFpbHMobmFtZS5pc29sYXRlZENvcHkoKSwgZGlz
cGxheU5hbWUuaXNvbGF0ZWRDb3B5KCksIGVzdGltYXRlZFNpemUsIDApKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CiAKKy8vIE5vdGU6IGEgdGhvdWdodCBhYm91dCBwZXJmb3JtYW5jZTogaGFzQWRl
cXVhdGVRdW90YUZvck9yaWdpbigpIHdhcyBhbHNvCisvLyBjYWxsZWQgaW4gY2FuRXN0YWJsaXNo
RGF0YWJhc2UoKSwgYW5kIGhlbmNlLCB3ZSdyZSByZXBlYXRpbmcgc29tZSB3b3JrIHdpdGhpbgor
Ly8gaGFzQWRlcXVhdGVRdW90YUZvck9yaWdpbigpLiBIb3dldmVyLCByZXRyeUNhbkVzdGFibGlz
aERhdGFiYXNlKCkgc2hvdWxkIG9ubHkKKy8vIGJlIGNhbGxlZCBpbiB0aGUgcmFyZSBldmVuIGlm
IGNhbkVzdGFibGlzaERhdGFiYXNlKCkgZmFpbHMuIFNpbmNlIGl0IGlzIHJhcmUsCisvLyB3ZSBz
aG91bGQgbm90IGJvdGhlciBvcHRpbWl6aW5nIGl0LiBJdCBpcyBtb3JlIGJlbmVmaWNpYWwgdG8g
a2VlcAorLy8gaGFzQWRlcXVhdGVRdW90YUZvck9yaWdpbigpIHNpbXBsZSBhbmQgY29ycmVjdCAo
aS5lLiBidWcgZnJlZSksIGFuZCBqdXN0CisvLyByZS11c2UgaXQuCitib29sIERhdGFiYXNlVHJh
Y2tlcjo6cmV0cnlDYW5Fc3RhYmxpc2hEYXRhYmFzZShEYXRhYmFzZUJhY2tlbmRDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwg
RGF0YWJhc2VFcnJvciYgZXJyb3IpCit7CisgICAgZXJyb3IgPSBEYXRhYmFzZUVycm9yOjpOb25l
OyAvLyBSZXNldCB0aGUgZXJyb3IgY29kZSBiZWZvcmUgcmV0cnlpbmcuIAogICAgIE11dGV4TG9j
a2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworICAgIExvY2tlcjxPcmlnaW5RdW90
YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tlcihvcmlnaW5RdW90YU1hbmFnZXIoKSk7CisgICAg
U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCk7CiAKICAg
ICAvLyBJZiB0aGUgZGF0YWJhc2Ugd2lsbCBmaXQgbm93LCBhbGxvdyBpdHMgY3JlYXRpb24uCi0g
ICAgaWYgKHJlcXVpcmVtZW50IDw9IHF1b3RhRm9yT3JpZ2luTm9Mb2NrKG9yaWdpbikpCisgICAg
aWYgKGhhc0FkZXF1YXRlUXVvdGFGb3JPcmlnaW4ob3JpZ2luLCBlc3RpbWF0ZWRTaXplLCBlcnJv
cikpIHsKKyAgICAgICAgQVNTRVJUKGVycm9yID09IERhdGFiYXNlRXJyb3I6Ok5vbmUpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKKyAgICBBU1NFUlQoZXJyb3IgPT0gRGF0YWJhc2VF
cnJvcjo6RGF0YWJhc2VTaXplRXhjZWVkZWRRdW90YSk7CiAgICAgZG9uZUNyZWF0aW5nRGF0YWJh
c2Uob3JpZ2luLCBuYW1lKTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTIwMSw3ICsyNTQsOSBA
QCBib29sIERhdGFiYXNlVHJhY2tlcjo6aGFzRW50cnlGb3JEYXRhYmFzCiAgICAgQVNTRVJUKCFt
X2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKICAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNl
KTsKICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBObyB0cmFja2VyIGRhdGFiYXNlLiBFZmZlY3RpdmVs
eSwgbm8gZW50cnkgZm9yIHRoZSBkYi4KKworICAgIC8vIFdlJ3ZlIGdvdCBhIHRyYWNrZXIgZGF0
YWJhc2UuIFNldCB1cCBhIHF1ZXJ5IHRvIGFzayBhYm91dCB0aGUgZGIgb2YgaW50ZXJlc3Q6CiAg
ICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIGd1aWQgRlJP
TSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5hbWU9PzsiKTsKIAogICAgIGlmIChzdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQpAQCAtMjEzLDcgKzI2OCw3IEBAIGJvb2wg
RGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvckRhdGFiYXMKICAgICByZXR1cm4gc3RhdGVtZW50
LnN0ZXAoKSA9PSBTUUxSZXN1bHRSb3c7CiB9CiAKLXVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFz
ZVRyYWNrZXI6OmdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBBYnN0cmFjdERhdGFiYXNlKiBk
YXRhYmFzZSkKK3Vuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OmdldE1heFNpemVG
b3JEYXRhYmFzZShjb25zdCBEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQogewogICAgIC8vIFRo
ZSBtYXhpbXVtIHNpemUgZm9yIGEgZGF0YWJhc2UgaXMgdGhlIGZ1bGwgcXVvdGEgZm9yIGl0cyBv
cmlnaW4sIG1pbnVzIHRoZSBjdXJyZW50IHVzYWdlIHdpdGhpbiB0aGUgb3JpZ2luLAogICAgIC8v
IHBsdXMgdGhlIGN1cnJlbnQgdXNhZ2Ugb2YgdGhlIGdpdmVuIGRhdGFiYXNlCkBAIC0yMjMsMTUg
KzI3OCwxNSBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjpnZXRNCiAgICAg
cmV0dXJuIHF1b3RhRm9yT3JpZ2luTm9Mb2NrKG9yaWdpbikgLSBvcmlnaW5RdW90YU1hbmFnZXIo
KS5kaXNrVXNhZ2Uob3JpZ2luKSArIFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNp
emUoZGF0YWJhc2UtPmZpbGVOYW1lKCkpOwogfQogCi12b2lkIERhdGFiYXNlVHJhY2tlcjo6ZGF0
YWJhc2VDaGFuZ2VkKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQordm9pZCBEYXRhYmFzZVRy
YWNrZXI6OmRhdGFiYXNlQ2hhbmdlZChEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQogewogICAg
IExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tlcihvcmlnaW5RdW90
YU1hbmFnZXIoKSk7CiAgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkubWFya0RhdGFiYXNlKGRhdGFi
YXNlKTsKIH0KIAotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmludGVycnVwdEFsbERhdGFiYXNlc0Zv
ckNvbnRleHQoY29uc3QgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK3ZvaWQgRGF0
YWJhc2VUcmFja2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IERhdGFi
YXNlQmFja2VuZENvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxBYnN0cmFj
dERhdGFiYXNlPiA+IG9wZW5EYXRhYmFzZXM7CisgICAgVmVjdG9yPFJlZlB0cjxEYXRhYmFzZUJh
Y2tlbmQ+ID4gb3BlbkRhdGFiYXNlczsKICAgICB7CiAgICAgICAgIE11dGV4TG9ja2VyIG9wZW5E
YXRhYmFzZU1hcExvY2sobV9vcGVuRGF0YWJhc2VNYXBHdWFyZCk7CiAKQEAgLTI0NywxNCArMzAy
LDE0IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjppbnRlcnJ1cHRBbGxEYXRhYmEKICAgICAgICAg
ICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IGRiTmFtZU1hcEl0LT52YWx1ZTsKICAgICAg
ICAgICAgIERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBkYlNldEVuZEl0ID0gZGF0YWJhc2VT
ZXQtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChEYXRhYmFzZVNldDo6Y29uc3RfaXRlcmF0b3Ig
ZGJTZXRJdCA9IGRhdGFiYXNlU2V0LT5iZWdpbigpOyBkYlNldEl0ICE9IGRiU2V0RW5kSXQ7ICsr
ZGJTZXRJdCkgewotICAgICAgICAgICAgICAgIGlmICgoKmRiU2V0SXQpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkgPT0gY29udGV4dCkKKyAgICAgICAgICAgICAgICBpZiAoKCpkYlNldEl0KS0+
ZGF0YWJhc2VDb250ZXh0KCkgPT0gY29udGV4dCkKICAgICAgICAgICAgICAgICAgICAgb3BlbkRh
dGFiYXNlcy5hcHBlbmQoKmRiU2V0SXQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQogCi0gICAgVmVjdG9yPFJlZlB0cjxBYnN0cmFjdERhdGFiYXNlPiA+Ojpjb25zdF9pdGVyYXRv
ciBvcGVuRGF0YWJhc2VzRW5kSXQgPSBvcGVuRGF0YWJhc2VzLmVuZCgpOwotICAgIGZvciAoVmVj
dG9yPFJlZlB0cjxBYnN0cmFjdERhdGFiYXNlPiA+Ojpjb25zdF9pdGVyYXRvciBvcGVuRGF0YWJh
c2VzSXQgPSBvcGVuRGF0YWJhc2VzLmJlZ2luKCk7IG9wZW5EYXRhYmFzZXNJdCAhPSBvcGVuRGF0
YWJhc2VzRW5kSXQ7ICsrb3BlbkRhdGFiYXNlc0l0KQorICAgIFZlY3RvcjxSZWZQdHI8RGF0YWJh
c2VCYWNrZW5kPiA+Ojpjb25zdF9pdGVyYXRvciBvcGVuRGF0YWJhc2VzRW5kSXQgPSBvcGVuRGF0
YWJhc2VzLmVuZCgpOworICAgIGZvciAoVmVjdG9yPFJlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+ID46
OmNvbnN0X2l0ZXJhdG9yIG9wZW5EYXRhYmFzZXNJdCA9IG9wZW5EYXRhYmFzZXMuYmVnaW4oKTsg
b3BlbkRhdGFiYXNlc0l0ICE9IG9wZW5EYXRhYmFzZXNFbmRJdDsgKytvcGVuRGF0YWJhc2VzSXQp
CiAgICAgICAgICgqb3BlbkRhdGFiYXNlc0l0KS0+aW50ZXJydXB0KCk7CiB9CiAKQEAgLTM2MCwx
MCArNDE1LDExIEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpvcmlnaW5zKFZlY3RvcjxSZWYKIGJv
b2wgRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZU5hbWVzRm9yT3JpZ2luTm9Mb2NrKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4sIFZlY3RvcjxTdHJpbmc+JiByZXN1bHRWZWN0b3IpCiB7CiAgICAgQVNT
RVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKLSAgICBvcGVuVHJhY2tlckRhdGFiYXNl
KGZhbHNlKTsKKyAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNlKTsgLy8gRG9uJ3QgY3JlYXRl
IG9uZSBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlz
T3BlbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICAvLyBTZXR1cCBhbiBTUUwgcXVl
cnkgdG8gZmV0Y2ggdGhlIGRhdGFiYXNlcyBmb3IgdGhlIHNwZWNpZmllZCBvcmlnaW46CiAgICAg
U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIG5hbWUgRlJPTSBE
YXRhYmFzZXMgd2hlcmUgb3JpZ2luPT87Iik7CiAKICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxSZXN1bHRPaykKQEAgLTM3MSw2ICs0MjcsNyBAQCBib29sIERhdGFiYXNlVHJhY2tl
cjo6ZGF0YWJhc2VOYW1lc0Zvck9yCiAKICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2lu
LT5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKKyAgICAvLyBFeGVjdXRlIHRoZSBxdWVyeSBhbmQg
ZmV0Y2ggZWFjaCByZWxldmFudCBkYiBpbnRvIHRoZSByZXN1bHQ6CiAgICAgaW50IHJlc3VsdDsK
ICAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCkpID09IFNRTFJlc3VsdFJvdykK
ICAgICAgICAgcmVzdWx0VmVjdG9yLmFwcGVuZChzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSk7
CkBAIC00OTIsNyArNTQ5LDcgQEAgdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6
dXNhZwogICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKHBh
dGgpOwogfQogCi12b2lkIERhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKEFic3RyYWN0
RGF0YWJhc2UqIGRhdGFiYXNlKQordm9pZCBEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFz
ZShEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQogewogICAgIGlmICghZGF0YWJhc2UpCiAgICAg
ICAgIHJldHVybjsKQEAgLTUzMSw3ICs1ODgsMTMgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmFk
ZE9wZW5EYXRhYmFzZShBYgogICAgIGRvbmVDcmVhdGluZ0RhdGFiYXNlKGRhdGFiYXNlLT5zZWN1
cml0eU9yaWdpbigpLCBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpKTsKIH0KIAotdm9pZCBE
YXRhYmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKiBkYXRh
YmFzZSkKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpkb25lQ3JlYXRpbmdEYXRhYmFzZShEYXRhYmFz
ZUJhY2tlbmQqIGRhdGFiYXNlKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2Rh
dGFiYXNlR3VhcmQpOworICAgIGRvbmVDcmVhdGluZ0RhdGFiYXNlKGRhdGFiYXNlLT5zZWN1cml0
eU9yaWdpbigpLCBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpKTsKK30KKwordm9pZCBEYXRh
YmFzZVRyYWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZShEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNl
KQogewogICAgIGlmICghZGF0YWJhc2UpCiAgICAgICAgIHJldHVybjsKQEAgLTU3OCw3ICs2NDEs
NyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlT3BlbkRhdGFiYXNlCiAgICAgfQogfQog
Ci12b2lkIERhdGFiYXNlVHJhY2tlcjo6Z2V0T3BlbkRhdGFiYXNlcyhTZWN1cml0eU9yaWdpbiog
b3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhhc2hTZXQ8UmVmUHRyPEFic3RyYWN0RGF0YWJh
c2U+ID4qIGRhdGFiYXNlcykKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpnZXRPcGVuRGF0YWJhc2Vz
KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgSGFzaFNldDxSZWZQ
dHI8RGF0YWJhc2VCYWNrZW5kPiA+KiBkYXRhYmFzZXMpCiB7CiAgICAgTXV0ZXhMb2NrZXIgb3Bl
bkRhdGFiYXNlTWFwTG9jayhtX29wZW5EYXRhYmFzZU1hcEd1YXJkKTsKICAgICBpZiAoIW1fb3Bl
bkRhdGFiYXNlTWFwKQpAQCAtNjE0LDcgKzY3Nyw5IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRh
YmFzZVRyYWNrZXI6OnVzYWcKICAgICAgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkuYWRkRGF0YWJh
c2Uob3JpZ2luLCBuYW1lc1tpXSwgZnVsbFBhdGhGb3JEYXRhYmFzZU5vTG9jayhvcmlnaW4sIG5h
bWVzW2ldLCBmYWxzZSkpOwogCiAgICAgaWYgKCFvcmlnaW5RdW90YU1hbmFnZXIoKS50cmFja3NP
cmlnaW4ob3JpZ2luKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAwOyAvLyBT
dGlsbCBubyBkYidzIGZvciB0aGlzIG9yaWdpbi4gSGVuY2UsIHRvdGFsIHVzYWdlIGlzIDAuCisK
KyAgICAvLyBDb21wdXRlIHRoZSB0b3RhbCBkaXNrIHVzYWdlIG9mIGFsbCBkYidzIGZyb20gdGhl
IHNwZWNpZmllZCBvcmlnaW46CiAgICAgcmV0dXJuIG9yaWdpblF1b3RhTWFuYWdlcigpLmRpc2tV
c2FnZShvcmlnaW4pOwogfQogCkBAIC04MTYsMTEgKzg4MSwxMSBAQCBib29sIERhdGFiYXNlVHJh
Y2tlcjo6ZGVsZXRlT3JpZ2luKFNlY3VyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRGF0
YWJhc2VUcmFja2VyOjpjYW5DcmVhdGVEYXRhYmFzZShTZWN1cml0eU9yaWdpbiAqb3JpZ2luLCBj
b25zdCBTdHJpbmcmIG5hbWUpCitib29sIERhdGFiYXNlVHJhY2tlcjo6aXNEZWxldGluZ0RhdGFi
YXNlT3JPcmlnaW5Gb3IoU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1l
KQogewogICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7CiAgICAgLy8gQ2Fu
J3QgY3JlYXRlIGEgZGF0YWJhc2Ugd2hpbGUgc29tZW9uZSBlbHNlIGlzIGRlbGV0aW5nIGl0OyB0
aGVyZSdzIGEgcmlzayBvZiBsZWF2aW5nIHVudHJhY2tlZCBkYXRhYmFzZSBkZWJyaXMgb24gdGhl
IGRpc2suCi0gICAgcmV0dXJuICFkZWxldGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSkgJiYgIWRl
bGV0aW5nT3JpZ2luKG9yaWdpbik7CisgICAgcmV0dXJuIGlzRGVsZXRpbmdEYXRhYmFzZShvcmln
aW4sIG5hbWUpIHx8IGlzRGVsZXRpbmdPcmlnaW4ob3JpZ2luKTsKIH0KIAogdm9pZCBEYXRhYmFz
ZVRyYWNrZXI6OnJlY29yZENyZWF0aW5nRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiwg
Y29uc3QgU3RyaW5nJiBuYW1lKQpAQCAtODY1LDcgKzkzMCw3IEBAIGJvb2wgRGF0YWJhc2VUcmFj
a2VyOjpjcmVhdGluZ0RhdGFiYXNlKFMKIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpjYW5EZWxldGVE
YXRhYmFzZShTZWN1cml0eU9yaWdpbiAqb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAg
ICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKLSAgICByZXR1cm4gIWNyZWF0
aW5nRGF0YWJhc2Uob3JpZ2luLCBuYW1lKSAmJiAhZGVsZXRpbmdEYXRhYmFzZShvcmlnaW4sIG5h
bWUpOworICAgIHJldHVybiAhY3JlYXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpICYmICFpc0Rl
bGV0aW5nRGF0YWJhc2Uob3JpZ2luLCBuYW1lKTsKIH0KIAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6
OnJlY29yZERlbGV0aW5nRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiwgY29uc3QgU3Ry
aW5nJiBuYW1lKQpAQCAtODk3LDcgKzk2Miw3IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpkb25l
RGVsZXRpbmdEYXRhYmEKICAgICB9CiB9CiAKLWJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGlu
Z0RhdGFiYXNlKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKK2Jv
b2wgRGF0YWJhc2VUcmFja2VyOjppc0RlbGV0aW5nRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4gKm9y
aWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJk
LnRyeUxvY2soKSk7CiAgICAgTmFtZVNldCogbmFtZVNldCA9IG1fYmVpbmdEZWxldGVkLmdldChv
cmlnaW4pOwpAQCAtOTA3LDEwICs5NzIsMTAgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0
aW5nRGF0YWJhc2UoUwogYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmNhbkRlbGV0ZU9yaWdpbihTZWN1
cml0eU9yaWdpbiAqb3JpZ2luKQogewogICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxv
Y2soKSk7Ci0gICAgcmV0dXJuICEoZGVsZXRpbmdPcmlnaW4ob3JpZ2luKSB8fCBtX2JlaW5nQ3Jl
YXRlZC5nZXQob3JpZ2luKSk7CisgICAgcmV0dXJuICEoaXNEZWxldGluZ09yaWdpbihvcmlnaW4p
IHx8IG1fYmVpbmdDcmVhdGVkLmdldChvcmlnaW4pKTsKIH0KIAotYm9vbCBEYXRhYmFzZVRyYWNr
ZXI6OmRlbGV0aW5nT3JpZ2luKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4pCitib29sIERhdGFiYXNl
VHJhY2tlcjo6aXNEZWxldGluZ09yaWdpbihTZWN1cml0eU9yaWdpbiAqb3JpZ2luKQogewogICAg
IEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7CiAgICAgcmV0dXJuIG1fb3JpZ2lu
c0JlaW5nRGVsZXRlZC5jb250YWlucyhvcmlnaW4pOwpAQCAtOTE5LDE0ICs5ODQsMTQgQEAgYm9v
bCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0aW5nT3JpZ2luKFNlYwogdm9pZCBEYXRhYmFzZVRyYWNr
ZXI6OnJlY29yZERlbGV0aW5nT3JpZ2luKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4pCiB7CiAgICAg
QVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKLSAgICBBU1NFUlQoIWRlbGV0aW5n
T3JpZ2luKG9yaWdpbikpOworICAgIEFTU0VSVCghaXNEZWxldGluZ09yaWdpbihvcmlnaW4pKTsK
ICAgICBtX29yaWdpbnNCZWluZ0RlbGV0ZWQuYWRkKG9yaWdpbi0+aXNvbGF0ZWRDb3B5KCkpOwog
fQogCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6ZG9uZURlbGV0aW5nT3JpZ2luKFNlY3VyaXR5T3Jp
Z2luICpvcmlnaW4pCiB7CiAgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsK
LSAgICBBU1NFUlQoZGVsZXRpbmdPcmlnaW4ob3JpZ2luKSk7CisgICAgQVNTRVJUKGlzRGVsZXRp
bmdPcmlnaW4ob3JpZ2luKSk7CiAgICAgbV9vcmlnaW5zQmVpbmdEZWxldGVkLnJlbW92ZShvcmln
aW4pOwogfQogCkBAIC05OTYsMTEgKzEwNjEsMTEgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRl
bGV0ZURhdGFiYXNlRmlsZQogI2lmbmRlZiBOREVCVUcKICAgICB7CiAgICAgICAgIE11dGV4TG9j
a2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwotICAgICAgICBBU1NFUlQoZGVsZXRp
bmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpIHx8IGRlbGV0aW5nT3JpZ2luKG9yaWdpbikpOworICAg
ICAgICBBU1NFUlQoaXNEZWxldGluZ0RhdGFiYXNlT3JPcmlnaW5Gb3Iob3JpZ2luLCBuYW1lKSk7
CiAgICAgfQogI2VuZGlmCiAKLSAgICBWZWN0b3I8UmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+ID4g
ZGVsZXRlZERhdGFiYXNlczsKKyAgICBWZWN0b3I8UmVmUHRyPERhdGFiYXNlQmFja2VuZD4gPiBk
ZWxldGVkRGF0YWJhc2VzOwogCiAgICAgLy8gTWFrZSBzdXJlIG5vdCB0byBob2xkIHRoZSBhbnkg
bG9ja3Mgd2hlbiBjYWxsaW5nCiAgICAgLy8gRGF0YWJhc2U6Om1hcmtBc0RlbGV0ZWRBbmRDbG9z
ZSgpLCBzaW5jZSB0aGF0IGNhbiBjYXVzZSBhIGRlYWRsb2NrCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmgJKHJldmlz
aW9uIDE0MTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VUcmFja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2lmIEVOQUJM
RShTUUxfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJEYXRhYmFzZUVycm9yLmgiCiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0hhc2guaD4KQEAgLTQ0LDggKzQ1LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBBYnN0cmFjdERhdGFiYXNlOwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dDsKK2NsYXNzIERhdGFiYXNlQmFja2VuZDsKK2NsYXNzIERhdGFiYXNlQmFja2VuZENvbnRleHQ7
CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIAogc3RydWN0IFNlY3VyaXR5T3JpZ2luSGFzaDsKQEAg
LTcwLDIyICs3MSwyNyBAQCBwdWJsaWM6CiAgICAgLy8gbV9kYXRhYmFzZUd1YXJkIGFuZCBtX29w
ZW5EYXRhYmFzZU1hcEd1YXJkIGN1cnJlbnRseSBkb24ndCBvdmVybGFwLgogICAgIC8vIG5vdGlm
aWNhdGlvbk11dGV4KCkgaXMgY3VycmVudGx5IGluZGVwZW5kZW50IG9mIHRoZSBvdGhlciBsb2Nr
cy4KIAotICAgIGJvb2wgY2FuRXN0YWJsaXNoRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWdu
ZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKKyAgICBib29sIGNhbkVzdGFibGlzaERhdGFiYXNlKERh
dGFiYXNlQmFja2VuZENvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIHVuc2lnbmVkIGxvbmcg
ZXN0aW1hdGVkU2l6ZSwgRGF0YWJhc2VFcnJvciYpOworICAgIGJvb2wgcmV0cnlDYW5Fc3RhYmxp
c2hEYXRhYmFzZShEYXRhYmFzZUJhY2tlbmRDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCB1
bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIERhdGFiYXNlRXJyb3ImKTsKKwogICAgIHZvaWQg
c2V0RGF0YWJhc2VEZXRhaWxzKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwog
ICAgIFN0cmluZyBmdWxsUGF0aEZvckRhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0ID0gdHJ1ZSk7CiAKLSAgICB2b2lk
IGFkZE9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKik7Ci0gICAgdm9pZCByZW1vdmVPcGVu
RGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSopOwotICAgIHZvaWQgZ2V0T3BlbkRhdGFiYXNlcyhT
ZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhhc2hTZXQ8UmVmUHRy
PEFic3RyYWN0RGF0YWJhc2U+ID4qIGRhdGFiYXNlcyk7CisgICAgdm9pZCBkb25lQ3JlYXRpbmdE
YXRhYmFzZShEYXRhYmFzZUJhY2tlbmQqKTsKKyAgICB2b2lkIGFkZE9wZW5EYXRhYmFzZShEYXRh
YmFzZUJhY2tlbmQqKTsKKyAgICB2b2lkIHJlbW92ZU9wZW5EYXRhYmFzZShEYXRhYmFzZUJhY2tl
bmQqKTsKKyAgICB2b2lkIGdldE9wZW5EYXRhYmFzZXMoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBT
dHJpbmcmIG5hbWUsIEhhc2hTZXQ8UmVmUHRyPERhdGFiYXNlQmFja2VuZD4gPiogZGF0YWJhc2Vz
KTsKIAotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3Qg
QWJzdHJhY3REYXRhYmFzZSopOwotICAgIHZvaWQgZGF0YWJhc2VDaGFuZ2VkKEFic3RyYWN0RGF0
YWJhc2UqKTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNv
bnN0IERhdGFiYXNlQmFja2VuZCopOworICAgIHZvaWQgZGF0YWJhc2VDaGFuZ2VkKERhdGFiYXNl
QmFja2VuZCopOwogCi0gICAgdm9pZCBpbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNv
bnN0IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICB2b2lkIGludGVycnVwdEFsbERhdGFi
YXNlc0ZvckNvbnRleHQoY29uc3QgRGF0YWJhc2VCYWNrZW5kQ29udGV4dCopOwogCiBwcml2YXRl
OgogICAgIGV4cGxpY2l0IERhdGFiYXNlVHJhY2tlcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0
aCk7CiAKKyAgICBib29sIGhhc0FkZXF1YXRlUXVvdGFGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4q
LCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIERhdGFiYXNlRXJyb3ImKTsKKwogI2lmICFQ
TEFURk9STShDSFJPTUlVTSkKIHB1YmxpYzoKICAgICB2b2lkIHNldERhdGFiYXNlRGlyZWN0b3J5
UGF0aChjb25zdCBTdHJpbmcmKTsKQEAgLTEzMSw3ICsxMzcsNyBAQCBwcml2YXRlOgogCiAgICAg
Ym9vbCBkZWxldGVEYXRhYmFzZUZpbGUoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5h
bWUpOwogCi0gICAgdHlwZWRlZiBIYXNoU2V0PEFic3RyYWN0RGF0YWJhc2UqPiBEYXRhYmFzZVNl
dDsKKyAgICB0eXBlZGVmIEhhc2hTZXQ8RGF0YWJhc2VCYWNrZW5kKj4gRGF0YWJhc2VTZXQ7CiAg
ICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgRGF0YWJhc2VTZXQqPiBEYXRhYmFzZU5hbWVNYXA7
CiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIERhdGFiYXNlTmFt
ZU1hcCosIFNlY3VyaXR5T3JpZ2luSGFzaD4gRGF0YWJhc2VPcmlnaW5NYXA7CiAKQEAgLTE1NSwx
OCArMTYxLDE4IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoU2V0PFN0cmluZz4gTmFtZVNl
dDsKICAgICBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIE5hbWVTZXQqLCBTZWN1cml0
eU9yaWdpbkhhc2g+IG1fYmVpbmdEZWxldGVkOwogICAgIEhhc2hTZXQ8UmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiwgU2VjdXJpdHlPcmlnaW5IYXNoPiBtX29yaWdpbnNCZWluZ0RlbGV0ZWQ7Ci0gICAg
Ym9vbCBjYW5DcmVhdGVEYXRhYmFzZShTZWN1cml0eU9yaWdpbiAqb3JpZ2luLCBjb25zdCBTdHJp
bmcmIG5hbWUpOwotICAgIHZvaWQgcmVjb3JkQ3JlYXRpbmdEYXRhYmFzZShTZWN1cml0eU9yaWdp
biAqb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIHZvaWQgZG9uZUNyZWF0aW5nRGF0
YWJhc2UoU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBi
b29sIGNyZWF0aW5nRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiwgY29uc3QgU3RyaW5n
JiBuYW1lKTsKLSAgICBib29sIGNhbkRlbGV0ZURhdGFiYXNlKFNlY3VyaXR5T3JpZ2luICpvcmln
aW4sIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9pZCByZWNvcmREZWxldGluZ0RhdGFiYXNl
KFNlY3VyaXR5T3JpZ2luICpvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9pZCBk
b25lRGVsZXRpbmdEYXRhYmFzZShTZWN1cml0eU9yaWdpbiAqb3JpZ2luLCBjb25zdCBTdHJpbmcm
IG5hbWUpOwotICAgIGJvb2wgZGVsZXRpbmdEYXRhYmFzZShTZWN1cml0eU9yaWdpbiAqb3JpZ2lu
LCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIGJvb2wgY2FuRGVsZXRlT3JpZ2luKFNlY3VyaXR5
T3JpZ2luICpvcmlnaW4pOwotICAgIGJvb2wgZGVsZXRpbmdPcmlnaW4oU2VjdXJpdHlPcmlnaW4g
Km9yaWdpbik7Ci0gICAgdm9pZCByZWNvcmREZWxldGluZ09yaWdpbihTZWN1cml0eU9yaWdpbiAq
b3JpZ2luKTsKLSAgICB2b2lkIGRvbmVEZWxldGluZ09yaWdpbihTZWN1cml0eU9yaWdpbiAqb3Jp
Z2luKTsKKyAgICBib29sIGlzRGVsZXRpbmdEYXRhYmFzZU9yT3JpZ2luRm9yKFNlY3VyaXR5T3Jp
Z2luKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICB2b2lkIHJlY29yZENyZWF0aW5nRGF0YWJh
c2UoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIHZvaWQgZG9uZUNy
ZWF0aW5nRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAg
IGJvb2wgY3JlYXRpbmdEYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFt
ZSk7CisgICAgYm9vbCBjYW5EZWxldGVEYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0
cmluZyYgbmFtZSk7CisgICAgdm9pZCByZWNvcmREZWxldGluZ0RhdGFiYXNlKFNlY3VyaXR5T3Jp
Z2luKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICB2b2lkIGRvbmVEZWxldGluZ0RhdGFiYXNl
KFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBib29sIGlzRGVsZXRp
bmdEYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgYm9v
bCBjYW5EZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qKTsKKyAgICBib29sIGlzRGVsZXRpbmdP
cmlnaW4oU2VjdXJpdHlPcmlnaW4qKTsKKyAgICB2b2lkIHJlY29yZERlbGV0aW5nT3JpZ2luKFNl
Y3VyaXR5T3JpZ2luKik7CisgICAgdm9pZCBkb25lRGVsZXRpbmdPcmlnaW4oU2VjdXJpdHlPcmln
aW4qKTsKIAogICAgIHN0YXRpYyB2b2lkIHNjaGVkdWxlRm9yTm90aWZpY2F0aW9uKCk7CiAgICAg
c3RhdGljIHZvaWQgbm90aWZ5RGF0YWJhc2VzQ2hhbmdlZCh2b2lkKik7CkBAIC0xNzUsMTIgKzE4
MSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbG9zZURhdGFiYXNlc0ltbWVkaWF0ZWx5KGNvbnN0
IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogcHJpdmF0
ZToKLSAgICB0eXBlZGVmIEhhc2hTZXQ8QWJzdHJhY3REYXRhYmFzZSo+IERhdGFiYXNlU2V0Owor
ICAgIHR5cGVkZWYgSGFzaFNldDxEYXRhYmFzZUJhY2tlbmQqPiBEYXRhYmFzZVNldDsKICAgICB0
eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBEYXRhYmFzZVNldCo+IERhdGFiYXNlTmFtZU1hcDsKICAg
ICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBEYXRhYmFzZU5hbWVNYXAqPiBEYXRhYmFzZU9yaWdp
bk1hcDsKICAgICBjbGFzcyBDbG9zZU9uZURhdGFiYXNlSW1tZWRpYXRlbHlUYXNrOwogCi0gICAg
dm9pZCBjbG9zZU9uZURhdGFiYXNlSW1tZWRpYXRlbHkoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVu
dGlmaWVyLCBjb25zdCBTdHJpbmcmIG5hbWUsIEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKTsK
KyAgICB2b2lkIGNsb3NlT25lRGF0YWJhc2VJbW1lZGlhdGVseShjb25zdCBTdHJpbmcmIG9yaWdp
bklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwgRGF0YWJhc2VCYWNrZW5kKik7CiAKICAg
ICBNdXRleCBtX29wZW5EYXRhYmFzZU1hcEd1YXJkOwogICAgIG11dGFibGUgT3duUHRyPERhdGFi
YXNlT3JpZ2luTWFwPiBtX29wZW5EYXRhYmFzZU1hcDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblF1b3RhTWFuYWdlci5jcHAJ
KHJldmlzaW9uIDE0MTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
T3JpZ2luUXVvdGFNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAog
CiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2Uu
aCIKKyNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmQuaCIKICNpbmNsdWRlICJPcmlnaW5Vc2FnZVJl
Y29yZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMTIsNyArMTEyLDcgQEAgdm9pZCBP
cmlnaW5RdW90YU1hbmFnZXI6OnJlbW92ZU9yaWdpbihTZQogICAgIH0KIH0KIAotdm9pZCBPcmln
aW5RdW90YU1hbmFnZXI6Om1hcmtEYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkK
K3ZvaWQgT3JpZ2luUXVvdGFNYW5hZ2VyOjptYXJrRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kKiBk
YXRhYmFzZSkKIHsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIEFTU0VSVChtX3VzYWdlUmVj
b3JkR3VhcmRMb2NrZWQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9PcmlnaW5RdW90YU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL09yaWdpblF1b3RhTWFuYWdlci5oCShyZXZpc2lvbiAxNDExODEpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblF1b3RhTWFuYWdlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgQWJzdHJhY3REYXRhYmFzZTsKK2NsYXNzIERhdGFiYXNlQmFja2VuZDsKIGNsYXNz
IE9yaWdpblVzYWdlUmVjb3JkOwogCiBjbGFzcyBPcmlnaW5RdW90YU1hbmFnZXIgewpAQCAtNTYs
NyArNTYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVEYXRhYmFzZShTZWN1cml0eU9yaWdp
biosIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZGVudGlmaWVyKTsKICAgICB2b2lkIHJlbW92ZU9y
aWdpbihTZWN1cml0eU9yaWdpbiopOwogCi0gICAgdm9pZCBtYXJrRGF0YWJhc2UoQWJzdHJhY3RE
YXRhYmFzZSopOyAvLyBNYXJrIGRpcnRpbmVzcyBvZiBhIHNwZWNpZmljIGRhdGFiYXNlLgorICAg
IHZvaWQgbWFya0RhdGFiYXNlKERhdGFiYXNlQmFja2VuZCopOyAvLyBNYXJrIGRpcnRpbmVzcyBv
ZiBhIHNwZWNpZmljIGRhdGFiYXNlLgogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkaXNrVXNhZ2Uo
U2VjdXJpdHlPcmlnaW4qKSBjb25zdDsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uY3BwCShyZXZp
c2lvbiAxNDExODEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRy
YW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogCiAjaW5jbHVk
ZSAiRGF0YWJhc2UuaCIKICNpbmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIuaCIKLSNpbmNsdWRl
ICJEYXRhYmFzZUNvbnRleHQuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAJKHJldmlz
aW9uIDE0MTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJh
bnNhY3Rpb25DbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywyNiArMzMsMjYgQEAKIAog
I2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgi
Ci0jaW5jbHVkZSAiRGF0YWJhc2VDb250ZXh0LmgiCisjaW5jbHVkZSAiRGF0YWJhc2VCYWNrZW5k
LmgiCisjaW5jbHVkZSAiRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5oIgogI2luY2x1ZGUgIkRhdGFi
YXNlTWFuYWdlci5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNs
dWRlICJTZWN1cml0eU9yaWdpbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgU1FM
VHJhbnNhY3Rpb25DbGllbnQ6OmRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24oQWJzdHJhY3REYXRh
YmFzZSogZGF0YWJhc2UpCit2b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRDb21taXRXcml0
ZVRyYW5zYWN0aW9uKERhdGFiYXNlQmFja2VuZCogZGF0YWJhc2UpCiB7CiAgICAgRGF0YWJhc2VN
YW5hZ2VyOjptYW5hZ2VyKCkuc2NoZWR1bGVOb3RpZnlEYXRhYmFzZUNoYW5nZWQoCiAgICAgICAg
IGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpLCBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigp
KTsKIH0KIAotdm9pZCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhlY3V0ZVN0YXRlbWVudChB
YnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKK3ZvaWQgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRp
ZEV4ZWN1dGVTdGF0ZW1lbnQoRGF0YWJhc2VCYWNrZW5kKiBkYXRhYmFzZSkKIHsKICAgICBEYXRh
YmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5kYXRhYmFzZUNoYW5nZWQoZGF0YWJhc2UpOwogfQogCi1i
b29sIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRFeGNlZWRRdW90YShBYnN0cmFjdERhdGFiYXNl
KiBkYXRhYmFzZSkKK2Jvb2wgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4Y2VlZFF1b3RhKERh
dGFiYXNlQmFja2VuZCogZGF0YWJhc2UpCiB7CiAgICAgQVNTRVJUKGRhdGFiYXNlLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICB1bnNpZ25lZCBsb25n
IGxvbmcgY3VycmVudFF1b3RhID0gRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkucXVvdGFGb3JP
cmlnaW4oZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGllbnQu
aAkocmV2aXNpb24gMTQxMTgxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQWJzdHJhY3REYXRhYmFzZTsKK2NsYXNz
IERhdGFiYXNlQmFja2VuZDsKIAogLy8gQSBjbGllbnQgdG8gdGhlIFNRTFRyYW5zYWN0aW9uIGNs
YXNzLiBBbGxvd3MgU1FMVHJhbnNhY3Rpb24gdG8gbm90aWZ5IGludGVyZXN0ZWQKIC8vIHBhcnRp
ZXMgdGhhdCBjZXJ0YWluIHRoaW5ncyBoYXZlIGhhcHBlbmVkIGluIGEgdHJhbnNhY3Rpb24uCkBA
IC00Niw5ICs0Niw5IEBAIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ2xpZW50IHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShTUUxUcmFuc2FjdGlvbkNsaWVudCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgogICAgIFNRTFRyYW5zYWN0aW9uQ2xpZW50KCkgeyB9Ci0gICAgdm9pZCBk
aWRDb21taXRXcml0ZVRyYW5zYWN0aW9uKEFic3RyYWN0RGF0YWJhc2UqKTsKLSAgICB2b2lkIGRp
ZEV4ZWN1dGVTdGF0ZW1lbnQoQWJzdHJhY3REYXRhYmFzZSopOwotICAgIGJvb2wgZGlkRXhjZWVk
UXVvdGEoQWJzdHJhY3REYXRhYmFzZSopOworICAgIHZvaWQgZGlkQ29tbWl0V3JpdGVUcmFuc2Fj
dGlvbihEYXRhYmFzZUJhY2tlbmQqKTsKKyAgICB2b2lkIGRpZEV4ZWN1dGVTdGF0ZW1lbnQoRGF0
YWJhc2VCYWNrZW5kKik7CisgICAgYm9vbCBkaWRFeGNlZWRRdW90YShEYXRhYmFzZUJhY2tlbmQq
KTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
VHJhbnNhY3Rpb25TeW5jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5jcHAJKHJldmlzaW9uIDE0MTE4MSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2lmIEVOQUJMRShTUUxfREFUQUJB
U0UpCiAKICNpbmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIuaCIKLSNpbmNsdWRlICJEYXRhYmFz
ZUNvbnRleHQuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiRGF0YWJhc2VTeW5jLmgiCiAjaW5jbHVkZSAiU1FMRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAi
U1FMUmVzdWx0U2V0LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L1dvcmtlckNvbnRleHRXZWJEYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9Xb3JrZXJDb250ZXh0V2ViRGF0YWJhc2UuY3BwCShyZXZp
c2lvbiAxNDExODEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1dvcmtl
ckNvbnRleHRXZWJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDIzICs0MywzMyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBQYXNzUmVmUHRyPERhdGFiYXNlPiBXb3JrZXJDb250ZXh0
V2ViRGF0YWJhc2U6Om9wZW5EYXRhYmFzZShXb3JrZXJDb250ZXh0KiBjb250ZXh0LCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5
TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2Fs
bGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIERhdGFi
YXNlTWFuYWdlciYgZGJNYW5hZ2VyID0gRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCk7Ci0gICAg
aWYgKCFjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZShjb250ZXh0
LT50b3BPcmlnaW4oKSkgfHwgIWRiTWFuYWdlci5pc0F2YWlsYWJsZSgpKSB7CisgICAgUmVmUHRy
PERhdGFiYXNlPiBkYXRhYmFzZTsKKyAgICBEYXRhYmFzZUVycm9yIGVycm9yOworICAgIGlmIChk
Yk1hbmFnZXIuaXNBdmFpbGFibGUoKSAmJiBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5jYW5B
Y2Nlc3NEYXRhYmFzZShjb250ZXh0LT50b3BPcmlnaW4oKSkpCisgICAgICAgIGRhdGFiYXNlID0g
ZGJNYW5hZ2VyLm9wZW5EYXRhYmFzZShjb250ZXh0LCBuYW1lLCB2ZXJzaW9uLCBkaXNwbGF5TmFt
ZSwgZXN0aW1hdGVkU2l6ZSwgY3JlYXRpb25DYWxsYmFjaywgZXJyb3IpOworCisgICAgaWYgKGVy
cm9yID09IERhdGFiYXNlRXJyb3I6OkNhbm5vdE9wZW5EYXRhYmFzZSkKKyAgICAgICAgZWMgPSBJ
TlZBTElEX1NUQVRFX0VSUjsKKyAgICBpZiAoIWRhdGFiYXNlICYmICFlYykKICAgICAgICAgZWMg
PSBTRUNVUklUWV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KIAotICAgIHJldHVybiBk
Yk1hbmFnZXIub3BlbkRhdGFiYXNlKGNvbnRleHQsIG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1l
LCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrLCBlYyk7CisgICAgcmV0dXJuIGRhdGFi
YXNlLnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IFdvcmtlckNvbnRl
eHRXZWJEYXRhYmFzZTo6b3BlbkRhdGFiYXNlU3luYyhXb3JrZXJDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29uc3QgU3RyaW5nJiBk
aXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFi
YXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IERhdGFiYXNlTWFuYWdlciYgZGJNYW5hZ2VyID0gRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCk7
Ci0gICAgaWYgKCFjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZShj
b250ZXh0LT50b3BPcmlnaW4oKSkgfHwgIWRiTWFuYWdlci5pc0F2YWlsYWJsZSgpKSB7CisgICAg
UmVmUHRyPERhdGFiYXNlU3luYz4gZGF0YWJhc2U7CisgICAgRGF0YWJhc2VFcnJvciBlcnJvcjsK
KyAgICBpZiAoZGJNYW5hZ2VyLmlzQXZhaWxhYmxlKCkgJiYgY29udGV4dC0+c2VjdXJpdHlPcmln
aW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoY29udGV4dC0+dG9wT3JpZ2luKCkpKQorICAgICAgICBk
YXRhYmFzZSA9IGRiTWFuYWdlci5vcGVuRGF0YWJhc2VTeW5jKGNvbnRleHQsIG5hbWUsIHZlcnNp
b24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrLCBlcnJvcik7
CisKKyAgICBpZiAoZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6Q2Fubm90T3BlbkRhdGFiYXNlKQor
ICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgIGlmICghZGF0YWJhc2UgJiYgIWVj
KQogICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQog
Ci0gICAgcmV0dXJuIGRiTWFuYWdlci5vcGVuRGF0YWJhc2VTeW5jKGNvbnRleHQsIG5hbWUsIHZl
cnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrLCBlYyk7
CisgICAgcmV0dXJuIGRhdGFiYXNlLnJlbGVhc2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9E
YXRhYmFzZU9ic2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZU9ic2VydmVyLmgJKHJldmlzaW9uIDE0MTE4MSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VP
YnNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgQWJzdHJhY3REYXRhYmFzZTsKK2NsYXNzIERhdGFiYXNlQmFja2Vu
ZDsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKIC8vIFRoZSBpbXBsZW1lbnRhdGlv
biBvZiB0aGlzIGNsYXNzIGlzIGluIHRoZSBXZWJLaXQgQVBJIChDaHJvbWl1bSBzb3VyY2UgdHJl
ZSkKQEAgLTQ1LDE2ICs0NSwxNiBAQCBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xh
c3MgRGF0YWJhc2VPYnNlcnZlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgY2FuRXN0YWJs
aXNoRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYsIHVuc2lnbmVkIGxvbmcpOwotICAgIHN0YXRpYyB2b2lkIGRhdGFiYXNlT3BlbmVk
KEFic3RyYWN0RGF0YWJhc2UqKTsKLSAgICBzdGF0aWMgdm9pZCBkYXRhYmFzZU1vZGlmaWVkKEFi
c3RyYWN0RGF0YWJhc2UqKTsKLSAgICBzdGF0aWMgdm9pZCBkYXRhYmFzZUNsb3NlZChBYnN0cmFj
dERhdGFiYXNlKik7Ci0KLSAgICBzdGF0aWMgdm9pZCByZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQo
QWJzdHJhY3REYXRhYmFzZSosIGludCBjYWxsc2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50
IHNxbGl0ZUVycm9yQ29kZSk7Ci0gICAgc3RhdGljIHZvaWQgcmVwb3J0Q2hhbmdlVmVyc2lvblJl
c3VsdChBYnN0cmFjdERhdGFiYXNlKiwgaW50IGNhbGxzaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2Rl
LCBpbnQgc3FsaXRlRXJyb3JDb2RlKTsKLSAgICBzdGF0aWMgdm9pZCByZXBvcnRTdGFydFRyYW5z
YWN0aW9uUmVzdWx0KEFic3RyYWN0RGF0YWJhc2UqLCBpbnQgY2FsbHNpdGUsIGludCB3ZWJTcWxF
cnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpOwotICAgIHN0YXRpYyB2b2lkIHJlcG9ydENv
bW1pdFRyYW5zYWN0aW9uUmVzdWx0KEFic3RyYWN0RGF0YWJhc2UqLCBpbnQgY2FsbHNpdGUsIGlu
dCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpOwotICAgIHN0YXRpYyB2b2lk
IHJlcG9ydEV4ZWN1dGVTdGF0ZW1lbnRSZXN1bHQoQWJzdHJhY3REYXRhYmFzZSosIGludCBjYWxs
c2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSk7Ci0gICAgc3Rh
dGljIHZvaWQgcmVwb3J0VmFjdXVtRGF0YWJhc2VSZXN1bHQoQWJzdHJhY3REYXRhYmFzZSosIGlu
dCBzcWxpdGVFcnJvckNvZGUpOworICAgIHN0YXRpYyB2b2lkIGRhdGFiYXNlT3BlbmVkKERhdGFi
YXNlQmFja2VuZCopOworICAgIHN0YXRpYyB2b2lkIGRhdGFiYXNlTW9kaWZpZWQoRGF0YWJhc2VC
YWNrZW5kKik7CisgICAgc3RhdGljIHZvaWQgZGF0YWJhc2VDbG9zZWQoRGF0YWJhc2VCYWNrZW5k
Kik7CisKKyAgICBzdGF0aWMgdm9pZCByZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQoRGF0YWJhc2VC
YWNrZW5kKiwgaW50IGNhbGxzaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJy
b3JDb2RlKTsKKyAgICBzdGF0aWMgdm9pZCByZXBvcnRDaGFuZ2VWZXJzaW9uUmVzdWx0KERhdGFi
YXNlQmFja2VuZCosIGludCBjYWxsc2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0
ZUVycm9yQ29kZSk7CisgICAgc3RhdGljIHZvaWQgcmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3Vs
dChEYXRhYmFzZUJhY2tlbmQqLCBpbnQgY2FsbHNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGlu
dCBzcWxpdGVFcnJvckNvZGUpOworICAgIHN0YXRpYyB2b2lkIHJlcG9ydENvbW1pdFRyYW5zYWN0
aW9uUmVzdWx0KERhdGFiYXNlQmFja2VuZCosIGludCBjYWxsc2l0ZSwgaW50IHdlYlNxbEVycm9y
Q29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSk7CisgICAgc3RhdGljIHZvaWQgcmVwb3J0RXhlY3V0
ZVN0YXRlbWVudFJlc3VsdChEYXRhYmFzZUJhY2tlbmQqLCBpbnQgY2FsbHNpdGUsIGludCB3ZWJT
cWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpOworICAgIHN0YXRpYyB2b2lkIHJlcG9y
dFZhY3V1bURhdGFiYXNlUmVzdWx0KERhdGFiYXNlQmFja2VuZCosIGludCBzcWxpdGVFcnJvckNv
ZGUpOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9j
aHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJv
bWl1bS5jcHAJKHJldmlzaW9uIDE0MTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw3ICszMyw3IEBACiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCi0jaW5j
bHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgorI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZC5oIgog
I2luY2x1ZGUgIkRhdGFiYXNlT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJRdW90YVRyYWNrZXIuaCIK
ICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCkBAIC03MSw3ICs3MSw3IEBAIFN0
cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9yRGF0YWIKICAgICByZXR1cm4gb3JpZ2lu
LT5kYXRhYmFzZUlkZW50aWZpZXIoKSArICIvIiArIG5hbWUgKyAiIyI7CiB9CiAKLXZvaWQgRGF0
YWJhc2VUcmFja2VyOjphZGRPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2Up
Cit2b2lkIERhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKERhdGFiYXNlQmFja2VuZCog
ZGF0YWJhc2UpCiB7CiAgICAgQVNTRVJUKGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCktPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICBNdXRleExvY2tlciBvcGVuRGF0YWJhc2VNYXBM
b2NrKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOwpAQCAtOTksNyArOTksNyBAQCB2b2lkIERhdGFi
YXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKEFiCiAKIGNsYXNzIE5vdGlmeURhdGFiYXNlT2Jz
ZXJ2ZXJPbkNsb3NlVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxOb3RpZnlEYXRhYmFzZU9ic2VydmVyT25D
bG9zZVRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+IGRhdGFiYXNlKQor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPE5vdGlmeURhdGFiYXNlT2JzZXJ2ZXJPbkNsb3NlVGFzaz4g
Y3JlYXRlKFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBkYXRhYmFzZSkKICAgICB7CiAgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgTm90aWZ5RGF0YWJhc2VPYnNlcnZlck9uQ2xvc2VUYXNr
KGRhdGFiYXNlKSk7CiAgICAgfQpAQCAtMTE1LDE1ICsxMTUsMTUgQEAgcHVibGljOgogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBOb3RpZnlEYXRhYmFzZU9ic2VydmVyT25DbG9zZVRhc2soUGFzc1Jl
ZlB0cjxBYnN0cmFjdERhdGFiYXNlPiBkYXRhYmFzZSkKKyAgICBOb3RpZnlEYXRhYmFzZU9ic2Vy
dmVyT25DbG9zZVRhc2soUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+IGRhdGFiYXNlKQogICAg
ICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxB
YnN0cmFjdERhdGFiYXNlPiBtX2RhdGFiYXNlOworICAgIFJlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+
IG1fZGF0YWJhc2U7CiB9OwogCi12b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlT3BlbkRhdGFi
YXNlKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQordm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJl
bW92ZU9wZW5EYXRhYmFzZShEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQogewogICAgIFN0cmlu
ZyBvcmlnaW5JZGVudGlmaWVyID0gZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCktPmRhdGFiYXNl
SWRlbnRpZmllcigpOwogICAgIE11dGV4TG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2sobV9vcGVu
RGF0YWJhc2VNYXBHdWFyZCk7CkBAIC0xNTcsNyArMTU3LDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNr
ZXI6OnJlbW92ZU9wZW5EYXRhYmFzZQogICAgICAgICBEYXRhYmFzZU9ic2VydmVyOjpkYXRhYmFz
ZUNsb3NlZChkYXRhYmFzZSk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNr
ZXI6OmdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFz
ZSkKK3Vuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OmdldE1heFNpemVGb3JEYXRh
YmFzZShjb25zdCBEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQogewogICAgIHVuc2lnbmVkIGxv
bmcgbG9uZyBzcGFjZUF2YWlsYWJsZSA9IDA7CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIGRhdGFi
YXNlU2l6ZSA9IDA7CkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6Omlu
dGVycnVwdEFsbERhdGFiYQogCiBjbGFzcyBEYXRhYmFzZVRyYWNrZXI6OkNsb3NlT25lRGF0YWJh
c2VJbW1lZGlhdGVseVRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q2xvc2VPbmVEYXRhYmFzZUltbWVkaWF0
ZWx5VGFzaz4gY3JlYXRlKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKKyAgICBzdGF0aWMgUGFzc093
blB0cjxDbG9zZU9uZURhdGFiYXNlSW1tZWRpYXRlbHlUYXNrPiBjcmVhdGUoY29uc3QgU3RyaW5n
JiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5hbWUsIERhdGFiYXNlQmFja2VuZCog
ZGF0YWJhc2UpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENsb3NlT25lRGF0
YWJhc2VJbW1lZGlhdGVseVRhc2sob3JpZ2luSWRlbnRpZmllciwgbmFtZSwgZGF0YWJhc2UpKTsK
ICAgICB9CkBAIC0yMDIsNyArMjAyLDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAg
ICBDbG9zZU9uZURhdGFiYXNlSW1tZWRpYXRlbHlUYXNrKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBuYW1lLCBBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkK
KyAgICBDbG9zZU9uZURhdGFiYXNlSW1tZWRpYXRlbHlUYXNrKGNvbnN0IFN0cmluZyYgb3JpZ2lu
SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuYW1lLCBEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNl
KQogICAgICAgICA6IG1fb3JpZ2luSWRlbnRpZmllcihvcmlnaW5JZGVudGlmaWVyLmlzb2xhdGVk
Q29weSgpKQogICAgICAgICAsIG1fbmFtZShuYW1lLmlzb2xhdGVkQ29weSgpKQogICAgICAgICAs
IG1fZGF0YWJhc2UoZGF0YWJhc2UpCkBAIC0yMTEsNyArMjExLDcgQEAgcHJpdmF0ZToKIAogICAg
IFN0cmluZyBtX29yaWdpbklkZW50aWZpZXI7CiAgICAgU3RyaW5nIG1fbmFtZTsKLSAgICBBYnN0
cmFjdERhdGFiYXNlKiBtX2RhdGFiYXNlOyAgLy8gSW50ZW50aW9uYWxseSBhIHJhdyBwb2ludGVy
LgorICAgIERhdGFiYXNlQmFja2VuZCogbV9kYXRhYmFzZTsgLy8gSW50ZW50aW9uYWxseSBhIHJh
dyBwb2ludGVyLgogfTsKIAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmNsb3NlRGF0YWJhc2VzSW1t
ZWRpYXRlbHkoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5h
bWUpIHsKQEAgLTIzNCw3ICsyMzQsNyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6Y2xvc2VEYXRh
YmFzZXNJbW1lCiAgICAgICAgICgqaXQpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnBvc3RU
YXNrKENsb3NlT25lRGF0YWJhc2VJbW1lZGlhdGVseVRhc2s6OmNyZWF0ZShvcmlnaW5JZGVudGlm
aWVyLCBuYW1lLCAqaXQpKTsKIH0KIAotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmNsb3NlT25lRGF0
YWJhc2VJbW1lZGlhdGVseShjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0
cmluZyYgbmFtZSwgQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCit2b2lkIERhdGFiYXNlVHJh
Y2tlcjo6Y2xvc2VPbmVEYXRhYmFzZUltbWVkaWF0ZWx5KGNvbnN0IFN0cmluZyYgb3JpZ2luSWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBuYW1lLCBEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQog
ewogICAgIC8vIEZpcnN0IHdlIGhhdmUgdG8gY29uZmlybSB0aGUgJ2RhdGFiYXNlJyBpcyBzdGls
bCBpbiBvdXIgY29sbGVjdGlvbi4KICAgICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL2Nocm9taXVtL1NRTFRyYW5zYWN0aW9uQ2xpZW50Q2hyb21pdW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0v
U1FMVHJhbnNhY3Rpb25DbGllbnRDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDE0MTE4MSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vU1FMVHJhbnNhY3Rpb25D
bGllbnRDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogI2lm
IEVOQUJMRShTUUxfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCisj
aW5jbHVkZSAiRGF0YWJhc2VCYWNrZW5kLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VPYnNlcnZlci5o
IgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKIApAQCAtNDEsNyArNDEsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE5vdGlmeURhdGFiYXNlQ2hhbmdlZFRhc2sg
OiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NPd25QdHI8Tm90aWZ5RGF0YWJhc2VDaGFuZ2VkVGFzaz4gY3JlYXRlKEFic3RyYWN0
RGF0YWJhc2UgKmRhdGFiYXNlKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPE5vdGlmeURhdGFiYXNl
Q2hhbmdlZFRhc2s+IGNyZWF0ZShEYXRhYmFzZUJhY2tlbmQgKmRhdGFiYXNlKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBOb3RpZnlEYXRhYmFzZUNoYW5nZWRUYXNrKGRhdGFi
YXNlKSk7CiAgICAgfQpAQCAtNTIsMTUgKzUyLDE1IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZh
dGU6Ci0gICAgTm90aWZ5RGF0YWJhc2VDaGFuZ2VkVGFzayhQYXNzUmVmUHRyPEFic3RyYWN0RGF0
YWJhc2U+IGRhdGFiYXNlKQorICAgIE5vdGlmeURhdGFiYXNlQ2hhbmdlZFRhc2soUGFzc1JlZlB0
cjxEYXRhYmFzZUJhY2tlbmQ+IGRhdGFiYXNlKQogICAgICAgICA6IG1fZGF0YWJhc2UoZGF0YWJh
c2UpCiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxBYnN0cmFjdERhdGFiYXNlPiBtX2RhdGFi
YXNlOworICAgIFJlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+IG1fZGF0YWJhc2U7CiB9OwogCi12b2lk
IFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRDb21taXRXcml0ZVRyYW5zYWN0aW9uKEFic3RyYWN0
RGF0YWJhc2UqIGRhdGFiYXNlKQordm9pZCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkQ29tbWl0
V3JpdGVUcmFuc2FjdGlvbihEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQogewogICAgIGlmICgh
ZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpIHsK
ICAgICAgICAgZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soTm90
aWZ5RGF0YWJhc2VDaGFuZ2VkVGFzazo6Y3JlYXRlKGRhdGFiYXNlKSk7CkBAIC03MCwxMyArNzAs
MTMgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkQ29tbWl0V3JpdAogICAgIFdlYkNv
cmU6OkRhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlTW9kaWZpZWQoZGF0YWJhc2UpOwogfQogCi12
b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRFeGVjdXRlU3RhdGVtZW50KEFic3RyYWN0RGF0
YWJhc2UqIGRhdGFiYXNlKQordm9pZCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhlY3V0ZVN0
YXRlbWVudChEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQogewogICAgIC8vIFRoaXMgbWV0aG9k
IGlzIGNhbGxlZCBhZnRlciBleGVjdXRpbmcgZXZlcnkgc3RhdGVtZW50IHRoYXQgY2hhbmdlcyB0
aGUgREIuCiAgICAgLy8gQ2hyb21pdW0gZG9lc24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGF0IHRo
YXQgcG9pbnQuCiB9CiAKLWJvb2wgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4Y2VlZFF1b3Rh
KEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQorYm9vbCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6
ZGlkRXhjZWVkUXVvdGEoRGF0YWJhc2VCYWNrZW5kKiBkYXRhYmFzZSkKIHsKICAgICAvLyBDaHJv
bWl1bSBkb2VzIG5vdCBhbGxvdyB1c2VycyB0byBtYW51YWxseSBjaGFuZ2UgdGhlIHF1b3RhIGZv
ciBhbiBvcmlnaW4gKGZvciBub3csIGF0IGxlYXN0KS4KICAgICAvLyBEb24ndCBkbyBhbnl0aGlu
Zy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDE0MTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzY4OSwxOCArMzY4OSwy
NyBAQAogCQk5N0IzOEUyNzE1MUM0MjcxMDA0NjIyRTkgLyogRE9NV2luZG93Tm90aWZpY2F0aW9u
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCMzhF
MjQxNTFDNDI2NDAwNDYyMkU5IC8qIERPTVdpbmRvd05vdGlmaWNhdGlvbnMuaCAqLzsgfTsKIAkJ
OTdCMzhFMjgxNTFDNDI3MzAwNDYyMkU5IC8qIERPTVdpbmRvd05vdGlmaWNhdGlvbnMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCMzhFMjMxNTFD
NDI2NDAwNDYyMkU5IC8qIERPTVdpbmRvd05vdGlmaWNhdGlvbnMuY3BwICovOyB9OwogCQk5N0I4
RkZEMTE2QUU3Rjk2MDAzODM4OEQgLyogQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCOEZGQ0Yx
NkFFN0Y5MjAwMzgzODhEIC8qIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaCAqLzsg
fTsKLQkJOTdCQzY5REExNTA1RjA3NjAwMUI3NEFDIC8qIEFic3RyYWN0RGF0YWJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5RDYxNTA1
RjA3NjAwMUI3NEFDIC8qIEFic3RyYWN0RGF0YWJhc2UuY3BwICovOyB9OwotCQk5N0JDNjlEQjE1
MDVGMDc2MDAxQjc0QUMgLyogQWJzdHJhY3REYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5RDcxNTA1RjA3NjAwMUI3NEFDIC8qIEFi
c3RyYWN0RGF0YWJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk5N0JDNjlEQzE1MDVGMDc2MDAxQjc0QUMgLyogQ2hhbmdlVmVyc2lvbldyYXBw
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdC
QzY5RDgxNTA1RjA3NjAwMUI3NEFDIC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmNwcCAqLzsgfTsK
IAkJOTdCQzY5REQxNTA1RjA3NjAwMUI3NEFDIC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNjlEOTE1MDVG
MDc2MDAxQjc0QUMgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuaCAqLzsgfTsKIAkJOTdCQzZBMjAx
NTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2OURFMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFz
ZS5jcHAgKi87IH07CiAJCTk3QkM2QTIxMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5REYxNTA1
RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlLmggKi87IH07CiAJCTk3QkM2QTIzMTUwNUYwODEwMDFC
NzRBQyAvKiBEYXRhYmFzZUF1dGhvcml6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5RTExNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNl
QXV0aG9yaXplci5jcHAgKi87IH07CiAJCTk3QkM2QTI0MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRh
YmFzZUF1dGhvcml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk3QkM2OUUyMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUF1dGhvcml6ZXIuaCAq
LzsgfTsKKwkJOTdCQzY5REExNTA1RjA3NjAwMUI3NEFDIC8qIERhdGFiYXNlQmFja2VuZC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNjlENjE1
MDVGMDc2MDAxQjc0QUMgLyogRGF0YWJhc2VCYWNrZW5kLmNwcCAqLzsgfTsKKwkJOTdCQzY5REIx
NTA1RjA3NjAwMUI3NEFDIC8qIERhdGFiYXNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5RDcxNTA1RjA3NjAwMUI3NEFDIC8qIERh
dGFiYXNlQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCUZFMTZDRkQzMTY5RDFERUQwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmRBc3lu
Yy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTE2
Q0ZDRjE2OUQxREVDMDBEM0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kQXN5bmMuY3BwICovOyB9Owor
CQlGRTE2Q0ZENDE2OUQxREVEMDBEM0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kQXN5bmMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMTZDRkQwMTY5RDFE
RUMwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmRBc3luYy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFNkY2QUFGMTY5RTA1NzUwMEZDMzBBMiAv
KiBEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZFNkY2QUFEMTY5RTA1NzUwMEZDMzBBMiAvKiBEYXRhYmFzZUJh
Y2tlbmRDb250ZXh0LmNwcCAqLzsgfTsKKwkJRkU2RjZBQjAxNjlFMDU3NTAwRkMzMEEyIC8qIERh
dGFiYXNlQmFja2VuZENvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFNkY2QUFFMTY5RTA1NzUwMEZDMzBBMiAvKiBEYXRhYmFzZUJhY2tlbmRD
b250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJRkUxNkNGRDUxNjlEMURFRDAwRDNBMEM3IC8qIERhdGFiYXNlQmFja2VuZFN5bmMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxNkNGRDExNjlE
MURFQzAwRDNBMEM3IC8qIERhdGFiYXNlQmFja2VuZFN5bmMuY3BwICovOyB9OworCQlGRTE2Q0ZE
NjE2OUQxREVEMDBEM0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kU3luYy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxNkNGRDIxNjlEMURFQzAwRDNBMEM3
IC8qIERhdGFiYXNlQmFja2VuZFN5bmMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk5N0JDNkEyNTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VD
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTdCQzY5RTMxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQ2FsbGJhY2suaCAqLzsgfTsKIAkJ
OTdCQzZBMjcxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQ29udGV4dC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNjlFNTE1MDVGMDgxMDAx
Qjc0QUMgLyogRGF0YWJhc2VDb250ZXh0LmNwcCAqLzsgfTsKIAkJOTdCQzZBMjgxNTA1RjA4MTAw
MUI3NEFDIC8qIERhdGFiYXNlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5RTYxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQ29u
dGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTk3QkM2QTI5MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZURldGFpbHMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2OUU3MTUwNUYwODEwMDFC
NzRBQyAvKiBEYXRhYmFzZURldGFpbHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlGRTA5REI0OTE2OUUyRDZFMDA2MjI1NTcgLyogRGF0YWJhc2VF
cnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUw
OURCNDYxNjlFMkQ2RTAwNjIyNTU3IC8qIERhdGFiYXNlRXJyb3IuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRUIyNkQyODE2N0E4RjJBMDBGREQy
NkIgLyogRGF0YWJhc2VTZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkVCMjZEMjcxNjdBOEYyQTAwRkREMjZCIC8qIERhdGFiYXNlU2VydmVy
LmNwcCAqLzsgfTsKKwkJRkVBRjY2NTQxNjc5NzAzMjAwNjJEMEM1IC8qIERhdGFiYXNlU2VydmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUFGNjY1
MzE2Nzk3MDA3MDA2MkQwQzUgLyogRGF0YWJhc2VTZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5N0JDNkEyQTE1MDVGMDgxMDAxQjc0QUMg
LyogRGF0YWJhc2VTeW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk3QkM2OUU4MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVN5bmMuY3BwICov
OyB9OwogCQk5N0JDNkEyQjE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VTeW5jLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNjlFOTE1MDVGMDgx
MDAxQjc0QUMgLyogRGF0YWJhc2VTeW5jLmggKi87IH07CiAJCTk3QkM2QTJEMTUwNUYwODEwMDFC
NzRBQyAvKiBEYXRhYmFzZVRhc2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTdCQzY5RUIxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVGFzay5j
cHAgKi87IH07CkBAIC02NzQyLDggKzY3NTEsNiBAQAogCQlGRTgwREE2NjBFOUM0NzAzMDAwRDZG
NzUgLyogSlNHZW9wb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkU4MERBNjIwRTlDNDcwMzAwMEQ2Rjc1IC8qIEpTR2VvcG9zaXRpb24uaCAq
LzsgfTsKIAkJRkU4MERBNzEwRTlDNDcyRjAwMEQ2Rjc1IC8qIEpTUG9zaXRpb25FcnJvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwREE2RDBF
OUM0NzJGMDAwRDZGNzUgLyogSlNQb3NpdGlvbkVycm9yLmNwcCAqLzsgfTsKIAkJRkU4MERBNzIw
RTlDNDcyRjAwMEQ2Rjc1IC8qIEpTUG9zaXRpb25FcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4MERBNkUwRTlDNDcyRjAwMEQ2Rjc1IC8qIEpT
UG9zaXRpb25FcnJvci5oICovOyB9OwotCQlGRUFGNjY1NDE2Nzk3MDMyMDA2MkQwQzUgLyogREJC
YWNrZW5kU2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRUFGNjY1MzE2Nzk3MDA3MDA2MkQwQzUgLyogREJCYWNrZW5kU2VydmVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRkVCMjZEMjgxNjdB
OEYyQTAwRkREMjZCIC8qIERCQmFja2VuZFNlcnZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUIyNkQyNzE2N0E4RjJBMDBGREQyNkIgLyogREJC
YWNrZW5kU2VydmVyLmNwcCAqLzsgfTsKIAkJRkVERUY4NDExNjc5NzEwODAwMEU0NDRBIC8qIERh
dGFiYXNlU3RyYXRlZ3kuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkVERUY4M0YxNjc5NzEwODAwMEU0NDRBIC8qIERhdGFiYXNlU3RyYXRlZ3kuY3Bw
ICovOyB9OwogCQlGRURFRjg0MjE2Nzk3MTA4MDAwRTQ0NEEgLyogRGF0YWJhc2VTdHJhdGVneS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVERUY4NDAx
Njc5NzEwODAwMEU0NDRBIC8qIERhdGFiYXNlU3RyYXRlZ3kuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRjk0NUVDQjE2MUY3RjM2MDA5NzFCQzgg
LyogUHNldWRvRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRjk0NUVDOTE2MUY3RjM2MDA5NzFCQzggLyogUHNldWRvRWxlbWVudC5jcHAg
Ki87IH07CkBAIC0xMTA5MCw4ICsxMTA5Nyw2IEBACiAJCTk3QjM4RTI0MTUxQzQyNjQwMDQ2MjJF
OSAvKiBET01XaW5kb3dOb3RpZmljYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERPTVdpbmRvd05vdGlmaWNhdGlvbnMuaDsgcGF0aCA9IE1vZHVsZXMvbm90aWZpY2F0
aW9ucy9ET01XaW5kb3dOb3RpZmljYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTk3QjM4RTI1MTUxQzQyNjQwMDQ2MjJFOSAvKiBET01XaW5kb3dOb3RpZmljYXRpb25zLmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBET01XaW5kb3dOb3RpZmljYXRpb25zLmlkbDsgcGF0
aCA9IE1vZHVsZXMvbm90aWZpY2F0aW9ucy9ET01XaW5kb3dOb3RpZmljYXRpb25zLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTdCOEZGQ0YxNkFFN0Y5MjAwMzgzODhEIC8qIENo
YXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk5N0JDNjlENjE1MDVGMDc2MDAxQjc0QUMgLyogQWJzdHJhY3REYXRh
YmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBYnN0cmFjdERh
dGFiYXNlLmNwcDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk3QkM2OUQ3MTUwNUYwNzYwMDFCNzRB
QyAvKiBBYnN0cmFjdERhdGFiYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEFic3RyYWN0RGF0YWJhc2UuaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3RE
YXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5N0JDNjlEODE1MDVGMDc2
MDAxQjc0QUMgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwOyBwYXRoID0gTW9kdWxl
cy93ZWJkYXRhYmFzZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk3QkM2OUQ5MTUwNUYwNzYwMDFCNzRBQyAvKiBDaGFuZ2VWZXJzaW9uV3Jh
cHBlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDaGFuZ2VWZXJzaW9uV3Jh
cHBlci5oOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5N0JDNjlERTE1MDVGMDgxMDAxQjc0QUMg
LyogRGF0YWJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRGF0
YWJhc2UuY3BwOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTA5OSw2ICsxMTEwNCw4IEBACiAJCTk3QkM2OUUw
MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0g
RGF0YWJhc2UuaWRsOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3QkM2OUUxMTUwNUYwODEwMDFCNzRBQyAvKiBE
YXRhYmFzZUF1dGhvcml6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gRGF0YWJhc2VBdXRob3JpemVyLmNwcDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VBdXRob3JpemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTdCQzY5
RTIxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQXV0aG9yaXplci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBEYXRhYmFzZUF1dGhvcml6ZXIuaDsgcGF0aCA9IE1vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VBdXRob3JpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTk3QkM2OUQ2MTUwNUYwNzYwMDFCNzRBQyAvKiBEYXRhYmFzZUJhY2tlbmQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRGF0YWJhc2VCYWNrZW5kLmNwcDsg
cGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTdCQzY5RDcxNTA1RjA3NjAwMUI3NEFDIC8qIERhdGFiYXNl
QmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEYXRhYmFzZUJhY2tl
bmQuaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3QkM2OUUzMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRh
YmFzZUNhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERhdGFiYXNl
Q2FsbGJhY2suaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDYWxsYmFjay5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5N0JDNjlFNDE1MDVGMDgxMDAxQjc0QUMg
LyogRGF0YWJhc2VDYWxsYmFjay5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRGF0YWJhc2VD
YWxsYmFjay5pZGw7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ2FsbGJhY2su
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5N0JDNjlFNTE1MDVGMDgxMDAxQjc0
QUMgLyogRGF0YWJhc2VDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERhdGFiYXNlQ29udGV4dC5jcHA7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDM5Niw3
ICsxNDQwMywxNCBAQAogCQlGREY3RTlDMTEzQUMyMURCMDBBNTFFQUMgLyogSlNBdWRpb0J1ZmZl
ckNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXVk
aW9CdWZmZXJDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZERjdF
OUMyMTNBQzIxREIwMEE1MUVBQyAvKiBKU0F1ZGlvQnVmZmVyQ2FsbGJhY2suaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBdWRpb0J1ZmZlckNhbGxiYWNrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTE1RkE5MTY3OTg4Q0QwMDI0OTEzNCAvKiBBYnN0cmFj
dERhdGFiYXNlU2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFic3Ry
YWN0RGF0YWJhc2VTZXJ2ZXIuaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3RE
YXRhYmFzZVNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTE2Q0ZDRjE2
OUQxREVDMDBEM0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kQXN5bmMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRGF0YWJhc2VCYWNrZW5kQXN5bmMuY3BwOyBwYXRoID0g
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRBc3luYy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZFMTZDRkQwMTY5RDFERUMwMEQzQTBDNyAvKiBEYXRhYmFzZUJh
Y2tlbmRBc3luYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEYXRhYmFzZUJh
Y2tlbmRBc3luYy5oOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRB
c3luYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTZGNkFBRDE2OUUwNTc1MDBG
QzMwQTIgLyogRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmNwcDsgcGF0aCA9IE1vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZFNkY2QUFFMTY5RTA1NzUwMEZDMzBBMiAvKiBEYXRhYmFzZUJhY2tl
bmRDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERhdGFiYXNlQmFj
a2VuZENvbnRleHQuaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5k
Q29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTE2Q0ZEMTE2OUQxREVD
MDBEM0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kU3luYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBEYXRhYmFzZUJhY2tlbmRTeW5jLmNwcDsgcGF0aCA9IE1vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kU3luYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZFMTZDRkQyMTY5RDFERUMwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmRTeW5j
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERhdGFiYXNlQmFja2VuZFN5bmMu
aDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kU3luYy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTMzNzFBMDE2N0MxMUQ0MDBFREI3NTIgLyogRGF0
YWJhc2VCYXNpY1R5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERhdGFi
YXNlQmFzaWNUeXBlcy5oOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhc2lj
VHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUwOURCNDYxNjlFMkQ2RTAw
NjIyNTU3IC8qIERhdGFiYXNlRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRGF0YWJhc2VFcnJvci5oOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUVy
cm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNDU2RjE2MTY3N0Q3NEUwMDVF
RERGOSAvKiBEYXRhYmFzZU1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gRGF0YWJhc2VNYW5hZ2VyLmNwcDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU0NTZG
MTcxNjc3RDc0RTAwNUVEREY5IC8qIERhdGFiYXNlTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBEYXRhYmFzZU1hbmFnZXIuaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZF
NkZENDg1MEY2NzZFNTcwMDA5Mjg3MyAvKiBDb29yZGluYXRlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb29yZGluYXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTQ0MTEsOCArMTQ0MjUsOCBAQAogCQlGRTgwREE2MjBFOUM0NzAzMDAwRDZGNzUgLyog
SlNHZW9wb3NpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlb3Bv
c2l0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFODBEQTZEMEU5QzQ3MkYw
MDBENkY3NSAvKiBKU1Bvc2l0aW9uRXJyb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNQb3NpdGlvbkVycm9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkU4MERBNkUwRTlDNDcyRjAwMEQ2Rjc1IC8qIEpTUG9zaXRpb25FcnJvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1Bvc2l0aW9uRXJyb3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkVBRjY2NTMxNjc5NzAwNzAwNjJEMEM1IC8qIERCQmFja2Vu
ZFNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEQkJhY2tlbmRTZXJ2
ZXIuaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvREJCYWNrZW5kU2VydmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZFQjI2RDI3MTY3QThGMkEwMEZERDI2QiAvKiBEQkJh
Y2tlbmRTZXJ2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREJC
YWNrZW5kU2VydmVyLmNwcDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvREJCYWNrZW5kU2Vy
dmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkVBRjY2NTMxNjc5NzAwNzAw
NjJEMEM1IC8qIERhdGFiYXNlU2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERhdGFiYXNlU2VydmVyLmg7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
U2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFQjI2RDI3MTY3QThGMkEw
MEZERDI2QiAvKiBEYXRhYmFzZVNlcnZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBEYXRhYmFzZVNlcnZlci5jcHA7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlU2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVERUY4
M0YxNjc5NzEwODAwMEU0NDRBIC8qIERhdGFiYXNlU3RyYXRlZ3kuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0YWJhc2VTdHJhdGVneS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZFREVGODQwMTY3OTcxMDgwMDBFNDQ0QSAvKiBEYXRhYmFzZVN0
cmF0ZWd5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFiYXNlU3RyYXRl
Z3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkY5NDVFQzkxNjFGN0YzNjAwOTcx
QkM4IC8qIFBzZXVkb0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUHNldWRvRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
ODQ5Myw4ICsxODUwNyw2IEBACiAJCTk3QkM2OUQ1MTUwNUYwNTQwMDFCNzRBQyAvKiB3ZWJkYXRh
YmFzZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJOTdC
QzY5RDYxNTA1RjA3NjAwMUI3NEFDIC8qIEFic3RyYWN0RGF0YWJhc2UuY3BwICovLAotCQkJCTk3
QkM2OUQ3MTUwNUYwNzYwMDFCNzRBQyAvKiBBYnN0cmFjdERhdGFiYXNlLmggKi8sCiAJCQkJRkUx
MTVGQTkxNjc5ODhDRDAwMjQ5MTM0IC8qIEFic3RyYWN0RGF0YWJhc2VTZXJ2ZXIuaCAqLywKIAkJ
CQk5N0JDNjlEODE1MDVGMDc2MDAxQjc0QUMgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwICov
LAogCQkJCTk3QkM2OUQ5MTUwNUYwNzYwMDFCNzRBQyAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5o
ICovLApAQCAtMTg1MDMsMTUgKzE4NTE1LDI2IEBACiAJCQkJOTdCQzY5RTAxNTA1RjA4MTAwMUI3
NEFDIC8qIERhdGFiYXNlLmlkbCAqLywKIAkJCQk5N0JDNjlFMTE1MDVGMDgxMDAxQjc0QUMgLyog
RGF0YWJhc2VBdXRob3JpemVyLmNwcCAqLywKIAkJCQk5N0JDNjlFMjE1MDVGMDgxMDAxQjc0QUMg
LyogRGF0YWJhc2VBdXRob3JpemVyLmggKi8sCisJCQkJOTdCQzY5RDYxNTA1RjA3NjAwMUI3NEFD
IC8qIERhdGFiYXNlQmFja2VuZC5jcHAgKi8sCisJCQkJOTdCQzY5RDcxNTA1RjA3NjAwMUI3NEFD
IC8qIERhdGFiYXNlQmFja2VuZC5oICovLAorCQkJCUZFMTZDRkNGMTY5RDFERUMwMEQzQTBDNyAv
KiBEYXRhYmFzZUJhY2tlbmRBc3luYy5jcHAgKi8sCisJCQkJRkUxNkNGRDAxNjlEMURFQzAwRDNB
MEM3IC8qIERhdGFiYXNlQmFja2VuZEFzeW5jLmggKi8sCisJCQkJRkU2RjZBQUQxNjlFMDU3NTAw
RkMzMEEyIC8qIERhdGFiYXNlQmFja2VuZENvbnRleHQuY3BwICovLAorCQkJCUZFNkY2QUFFMTY5
RTA1NzUwMEZDMzBBMiAvKiBEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmggKi8sCisJCQkJRkUxNkNG
RDExNjlEMURFQzAwRDNBMEM3IC8qIERhdGFiYXNlQmFja2VuZFN5bmMuY3BwICovLAorCQkJCUZF
MTZDRkQyMTY5RDFERUMwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmRTeW5jLmggKi8sCiAJCQkJ
RkUzMzcxQTAxNjdDMTFENDAwRURCNzUyIC8qIERhdGFiYXNlQmFzaWNUeXBlcy5oICovLAogCQkJ
CTk3QkM2OUUzMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUNhbGxiYWNrLmggKi8sCiAJCQkJ
OTdCQzY5RTQxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQ2FsbGJhY2suaWRsICovLAogCQkJ
CTk3QkM2OUU1MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUNvbnRleHQuY3BwICovLAogCQkJ
CTk3QkM2OUU2MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUNvbnRleHQuaCAqLywKIAkJCQk5
N0JDNjlFNzE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VEZXRhaWxzLmggKi8sCisJCQkJRkUw
OURCNDYxNjlFMkQ2RTAwNjIyNTU3IC8qIERhdGFiYXNlRXJyb3IuaCAqLywKIAkJCQlGRTQ1NkYx
NjE2NzdENzRFMDA1RURERjkgLyogRGF0YWJhc2VNYW5hZ2VyLmNwcCAqLywKIAkJCQlGRTQ1NkYx
NzE2NzdENzRFMDA1RURERjkgLyogRGF0YWJhc2VNYW5hZ2VyLmggKi8sCiAJCQkJOTdCQzY5RjEx
NTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlTWFuYWdlckNsaWVudC5oICovLAorCQkJCUZFQjI2
RDI3MTY3QThGMkEwMEZERDI2QiAvKiBEYXRhYmFzZVNlcnZlci5jcHAgKi8sCisJCQkJRkVBRjY2
NTMxNjc5NzAwNzAwNjJEMEM1IC8qIERhdGFiYXNlU2VydmVyLmggKi8sCiAJCQkJOTdCQzY5RTgx
NTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlU3luYy5jcHAgKi8sCiAJCQkJOTdCQzY5RTkxNTA1
RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlU3luYy5oICovLAogCQkJCTk3QkM2OUVBMTUwNUYwODEw
MDFCNzRBQyAvKiBEYXRhYmFzZVN5bmMuaWRsICovLApAQCAtMTg1MjEsOCArMTg1NDQsNiBAQAog
CQkJCTk3QkM2OUVFMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRocmVhZC5oICovLAogCQkJ
CTk3QkM2OUVGMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRyYWNrZXIuY3BwICovLAogCQkJ
CTk3QkM2OUYwMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRyYWNrZXIuaCAqLywKLQkJCQlG
RUIyNkQyNzE2N0E4RjJBMDBGREQyNkIgLyogREJCYWNrZW5kU2VydmVyLmNwcCAqLywKLQkJCQlG
RUFGNjY1MzE2Nzk3MDA3MDA2MkQwQzUgLyogREJCYWNrZW5kU2VydmVyLmggKi8sCiAJCQkJQThD
Q0JCNDYxNTFGODMxNjAwQUI3Q0U5IC8qIERPTVdpbmRvd1dlYkRhdGFiYXNlLmNwcCAqLywKIAkJ
CQlBOENDQkI0NzE1MUY4MzE2MDBBQjdDRTkgLyogRE9NV2luZG93V2ViRGF0YWJhc2UuaCAqLywK
IAkJCQlBOENDQkI0RTE1MUY4MzVBMDBBQjdDRTkgLyogRE9NV2luZG93V2ViRGF0YWJhc2UuaWRs
ICovLApAQCAtMjMyODgsMTIgKzIzMzA5LDE4IEBACiAJCQkJQTgwRTZEMEIwQTE5ODlDQTAwN0ZC
OEM1IC8qIERhc2hib2FyZFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCQzZBMjExNTA1
RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDNkEyNDE1
MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VBdXRob3JpemVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk5N0JDNjlEQjE1MDVGMDc2MDAxQjc0QUMgLyogRGF0YWJhc2VCYWNrZW5kLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlGRTE2Q0ZENDE2OUQxREVEMDBEM0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kQXN5
bmMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFNkY2QUIwMTY5RTA1NzUwMEZDMzBBMiAvKiBEYXRh
YmFzZUJhY2tlbmRDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTE2Q0ZENjE2OUQxREVE
MDBEM0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kU3luYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUz
MzcxQTIxNjdDMTFENDAwRURCNzUyIC8qIERhdGFiYXNlQmFzaWNUeXBlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTdCQzZBMjUxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQ2FsbGJhY2suaCBp
biBIZWFkZXJzICovLAogCQkJCTk3QkM2QTI4MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUNv
bnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2QTI5MTUwNUYwODEwMDFCNzRBQyAvKiBE
YXRhYmFzZURldGFpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFMDlEQjQ5MTY5RTJENkUwMDYy
MjU1NyAvKiBEYXRhYmFzZUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTQ1NkYxOTE2NzdE
NzRFMDA1RURERjkgLyogRGF0YWJhc2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JD
NkEzMzE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VNYW5hZ2VyQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQlGRUFGNjY1NDE2Nzk3MDMyMDA2MkQwQzUgLyogRGF0YWJhc2VTZXJ2ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUZFREVGODQyMTY3OTcxMDgwMDBFNDQ0QSAvKiBEYXRhYmFzZVN0
cmF0ZWd5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDNkEyQjE1MDVGMDgxMDAxQjc0QUMgLyog
RGF0YWJhc2VTeW5jLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDNkEyRTE1MDVGMDgxMDAxQjc0
QUMgLyogRGF0YWJhc2VUYXNrLmggaW4gSGVhZGVycyAqLywKQEAgLTIzMzE0LDcgKzIzMzQxLDYg
QEAKIAkJCQlGNTVCM0RCQTEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZVRpbWVMb2NhbElucHV0VHlw
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDU4NjFDODYxNjE5NEE3NDAwMDEwRjNBIC8qIERhdGVU
aW1lTnVtZXJpY0ZpZWxkRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDU4NjFDODgxNjE5
NEE3NDAwMDEwRjNBIC8qIERhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLAotCQkJCUZFQUY2NjU0MTY3OTcwMzIwMDYyRDBDNSAvKiBEQkJhY2tlbmRTZXJ2ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTQ1RkVBNUQwMTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEMyMjhBMTExRDU3MjJFMDBENUE3RDMgLyogRGVjb2RlZERh
dGFEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0VDQ0ZDM0IxNDE5NzNENTAw
MkEwQUMxIC8qIERlY29kZUVzY2FwZVNlcXVlbmNlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjY1
NCw3ICsyNjY4MCw2IEBACiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxk
QWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKLQkJCQk5N0JDNjlEQTE1MDVG
MDc2MDAxQjc0QUMgLyogQWJzdHJhY3REYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0
MUUxQjFEMDBGRjU5ODY5MDA1NzZCM0IgLyogQWJzdHJhY3RXb3JrZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEYyOUMxNkUxMzAwQzJFMjAwMkQ3OTRFIC8qIEFjY2Vzc2liaWxpdHlBbGxJbk9u
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3NkNERDJGMjExMDNEQTY2MDA2ODA1MjEgLyogQWNj
ZXNzaWJpbGl0eU1lbnVMaXN0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjY5MzMsOCArMjY5NTgs
MTMgQEAKIAkJCQlBMjk1MzJDRjE1REQ1RTE3MDA0NjlFQkMgLyogQ3VzdG9tRmlsdGVyVmFsaWRh
dGVkUHJvZ3JhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0JDNkEyMDE1MDVGMDgxMDAxQjc0
QUMgLyogRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzZBMjMxNTA1RjA4MTAw
MUI3NEFDIC8qIERhdGFiYXNlQXV0aG9yaXplci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5N0JD
NjlEQTE1MDVGMDc2MDAxQjc0QUMgLyogRGF0YWJhc2VCYWNrZW5kLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUZFMTZDRkQzMTY5RDFERUQwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmRBc3luYy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlGRTZGNkFBRjE2OUUwNTc1MDBGQzMwQTIgLyogRGF0YWJh
c2VCYWNrZW5kQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRTE2Q0ZENTE2OUQxREVE
MDBEM0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kU3luYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
N0JDNkEyNzE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VDb250ZXh0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUZFNDU2RjE4MTY3N0Q3NEUwMDVFRERGOSAvKiBEYXRhYmFzZU1hbmFnZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJRkVCMjZEMjgxNjdBOEYyQTAwRkREMjZCIC8qIERhdGFiYXNl
U2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFREVGODQxMTY3OTcxMDgwMDBFNDQ0QSAv
KiBEYXRhYmFzZVN0cmF0ZWd5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM2QTJBMTUwNUYw
ODEwMDFCNzRBQyAvKiBEYXRhYmFzZVN5bmMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzZB
MkQxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVGFzay5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTI2OTUzLDcgKzI2OTgzLDYgQEAKIAkJCQlGNTVCM0RCOTEyNTFGMTJEMDAzRUYyNjkgLyogRGF0
ZVRpbWVMb2NhbElucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NTg2MUM4NTE2MTk0
QTc0MDAwMTBGM0EgLyogRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTQ1ODYxQzg3MTYxOTRBNzQwMDAxMEYzQSAvKiBEYXRlVGltZVN5bWJvbGljRmll
bGRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZFQjI2RDI4MTY3QThGMkEwMEZERDI2
QiAvKiBEQkJhY2tlbmRTZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDVGRUE1Q0YxNTZE
REU4QzAwNjU0MTAxIC8qIERlY2ltYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThDMjI4QTIx
MUQ1NzIyRTAwRDVBN0QzIC8qIERlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNDE2MkE0NTAxMDExNDVBRTAwREZGM0VEIC8qIERlZGljYXRlZFdvcmtlckNv
bnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9E
YXRhYmFzZVN0cmF0ZWd5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9EYXRhYmFzZVN0cmF0ZWd5LmNwcAkocmV2aXNpb24gMTQxMTgxKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vRGF0YWJhc2VTdHJhdGVneS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEz
ICsyOSwxMyBAQAogI2lmIFVTRShQTEFURk9STV9TVFJBVEVHSUVTKQogI2lmIEVOQUJMRShTUUxf
REFUQUJBU0UpCiAKLSNpbmNsdWRlICJEQkJhY2tlbmRTZXJ2ZXIuaCIKKyNpbmNsdWRlICJEYXRh
YmFzZVNlcnZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEFic3RyYWN0RGF0YWJhc2VT
ZXJ2ZXIqIERhdGFiYXNlU3RyYXRlZ3k6OmdldERhdGFiYXNlU2VydmVyKCkKIHsKLSAgICByZXR1
cm4gbmV3IERCQmFja2VuZDo6U2VydmVyOworICAgIHJldHVybiBuZXcgRGF0YWJhc2VTZXJ2ZXI7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186093</attachid>
            <date>2013-02-01 11:45:42 -0800</date>
            <delta_ts>2013-02-05 18:18:25 -0800</delta_ts>
            <desc>work in progress 2</desc>
            <filename>bug-107475.patch</filename>
            <type>text/plain</type>
            <size>114875</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTYxNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MiBAQAorMjAxMy0wMi0wMSAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgb3BlbkRhdGFiYXNlKCkg
YmV0d2VlbiBmcm9udCBhbmQgYmFjayBlbmQgd29yay4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzQ3NS4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBDTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChBYnN0cmFjdERhdGFiYXNlU2VydmVyKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmRhdGFiYXNlL0RPTVdpbmRvd1dlYkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRPTVdpbmRvd1dlYkRhdGFiYXNlOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
OjpEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6b3BlbkFuZFZlcmlmeVZl
cnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OmNsb3NlMSk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkpOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
RGF0YWJhc2UpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZDo6RGF0YWJhc2VCYWNrZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZDo6fkRhdGFiYXNlQmFja2VuZCk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmQ6OmNsb3NlRGF0YWJhc2UpOgorICAg
ICAgICAoRG9uZUNyZWF0aW5nRGF0YWJhc2VPbkV4aXRDYWxsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9uZUNyZWF0aW5nRGF0YWJhc2VPbkV4aXRDYWxsZXI6OkRvbmVDcmVhdGluZ0RhdGFiYXNl
T25FeGl0Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRvbmVDcmVhdGluZ0RhdGFiYXNlT25F
eGl0Q2FsbGVyOjp+RG9uZUNyZWF0aW5nRGF0YWJhc2VPbkV4aXRDYWxsZXIpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmQ6OnBlcmZvcm1PcGVu
QW5kVmVyaWZ5KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2Vu
ZC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tl
bmQ6OmRhdGFiYXNlQ29udGV4dCk6CisgICAgICAgIChEYXRhYmFzZUJhY2tlbmQpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kQXN5
bmM6OkRhdGFiYXNlQmFja2VuZEFzeW5jKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlQmFja2VuZEFzeW5jLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChEYXRhYmFzZUJhY2tlbmRBc3luYyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZUJhY2tlbmRDb250ZXh0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZENvbnRleHQ6OnNlY3VyaXR5T3JpZ2lu
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZENvbnRleHQu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERhdGFiYXNlQmFja2VuZENv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kQ29udGV4dDo6c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZUJhY2tlbmRTeW5jLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlQmFja2VuZFN5bmM6OkRhdGFiYXNlQmFja2VuZFN5bmMpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kU3luYy5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRGF0YWJhc2VCYWNrZW5kU3luYyk6CisgICAgICAg
ICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2VDb250ZXh0OjpEYXRhYmFzZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2VDb250ZXh0OjpiYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0Lmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKERhdGFiYXNlQ29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VN
YW5hZ2VyOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2Vy
OjpvcGVuRGF0YWJhc2VTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6
aGFzT3BlbkRhdGFiYXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6Omlu
dGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VNYW5hZ2VyOjpnZXRNYXhTaXplRm9yRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VNYW5hZ2VyOjpsb2dFcnJvck1lc3NhZ2UpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERh
dGFiYXNlTWFuYWdlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVNl
cnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVNlcnZlcjo6aW50ZXJydXB0QWxs
RGF0YWJhc2VzRm9yQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVNlcnZlcjo6
b3BlbkRhdGFiYXNlQXN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTZXJ2ZXI6OnJl
dHJ5T3BlbkRhdGFiYXNlQXN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTZXJ2ZXI6
OmNyZWF0ZURhdGFiYXNlQXN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTZXJ2ZXI6
Om9wZW5EYXRhYmFzZVN5bmMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZVNlcnZlcjo6cmV0cnlPcGVuRGF0YWJhc2VTeW5jKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlU2VydmVyOjpjcmVhdGVEYXRhYmFzZVN5bmMpOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlU3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlU3luYzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
U3luYzo6RGF0YWJhc2VTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6fkRh
dGFiYXNlU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6OmNsb3NlSW1tZWRp
YXRlbHkpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmg6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERhdGFiYXNlU3luYyk6CisgICAgICAgICogTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRhc2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2U6OkRhdGFiYXNlT3BlblRhc2s6OkRhdGFiYXNlT3BlblRhc2spOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2U6OkRhdGFiYXNlT3BlblRhc2s6OmRvUGVyZm9ybVRhc2spOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2U6OkRhdGFiYXNlQ2xvc2VUYXNrOjpkb1BlcmZvcm1UYXNrKToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGFzay5oOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2U6OkRhdGFiYXNlT3BlblRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChE
YXRhYmFzZTo6RGF0YWJhc2VPcGVuVGFzayk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6
ZGF0YWJhc2VUaHJlYWQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VU
cmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6b3BlblRyYWNr
ZXJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Omhhc0FkZXF1
YXRlUXVvdGFGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZVRyYWNrZXI6OmNhbkVzdGFibGlzaERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlVHJhY2tlcjo6cmV0cnlDYW5Fc3RhYmxpc2hEYXRhYmFzZSk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yRGF0YWJhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VOYW1lc0Zv
ck9yaWdpbk5vTG9jayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRvbmVD
cmVhdGluZ0RhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6YWRk
T3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dXNhZ2VG
b3JPcmlnaW5Ob0xvY2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjppc0Rl
bGV0aW5nRGF0YWJhc2VPck9yaWdpbkZvcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRy
YWNrZXI6OmNhbkRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJh
Y2tlcjo6aXNEZWxldGluZ0RhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJh
Y2tlcjo6Y2FuRGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6aXNEZWxldGluZ09yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6
OnJlY29yZERlbGV0aW5nT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6ZG9uZURlbGV0aW5nT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6ZGVsZXRlRGF0YWJhc2VGaWxlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlVHJhY2tlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEYXRhYmFzZVRy
YWNrZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uY3Bw
OgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3Bw
OgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jLmNwcDoK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1dvcmtlckNvbnRleHRXZWJEYXRhYmFzZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0V2ViRGF0YWJhc2U6Om9wZW5EYXRh
YmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0V2ViRGF0YWJhc2U6Om9wZW5E
YXRhYmFzZVN5bmMpOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAq
IFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2o6CisgICAgICAgICogV2ViQ29yZS52Y3hw
cm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKwogMjAxMy0wMi0wMSAgSnVsaWVuIENoYWZmcmFpeCAgPGpjaGFm
ZnJhaXhAd2Via2l0Lm9yZz4KIAogICAgICAgICBbQ1NTIEdyaWQgTGF5b3V0XSBjb21wdXRlUHJl
ZmVycmVkTG9naWNhbFdpZHRocyBkb2Vzbid0IGhhbmRsZSBtaW5tYXggdHJhY2tzCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTQxNjAyKQorKysgU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTk1MCw2ICs5NTAsOSBAQCBzZXQoV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAKICAgICBNb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAKICAgICBNb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlQmFja2VuZC5jcHAKKyAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlQmFja2VuZEFzeW5jLmNwcAorICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNr
ZW5kQ29udGV4dC5jcHAKKyAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZFN5
bmMuY3BwCiAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuY3BwCiAgICAg
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwCiAgICAgTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVNlcnZlci5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQkocmV2aXNpb24gMTQxNjAyKQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQkod29ya2luZyBjb3B5KQpAQCAtMjEwMCw2ICsyMTAwLDEyIEBAIHdlYmNvcmVfbW9kdWxl
c19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlQXV0aG9yaXplci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlQmFja2VuZC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VCYWNrZW5kLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VCYWNrZW5kQXN5bmMuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlQmFja2VuZEFzeW5jLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5jcHAgXAorCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5oIFwKKwlTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZFN5bmMuY3BwIFwKKwlT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZFN5bmMuaCBc
CiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhc2ljVHlwZXMu
aCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNhbGxiYWNr
LmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0
LmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDE0MTYwMikKKysrIFNvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTE0NDMsNiArMTQ0Myw5IEBAIEhFQURF
UlMgKz0gXAogICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VBdXRob3JpemVyLmggXAog
ICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaCBcCiAgICAgTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZUJhY2tlbmQuaCBcCisgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZUJhY2tlbmRBc3luYy5oIFwKKyAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2Vu
ZENvbnRleHQuaCBcCisgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRTeW5j
LmggXAogICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDYWxsYmFjay5oIFwKICAgICBN
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlRXJyb3IuaCBcCiAgICAgTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZU1hbmFnZXIuaCBcCkBAIC0zMDM3LDYgKzMwNDAsOSBAQCB1c2U/KFBMVUdJ
Tl9CQUNLRU5EX1hMSUIpIHsKIGVuYWJsZT8oU1FMX0RBVEFCQVNFKSB7CiAgICAgU09VUkNFUyAr
PSBcCiAgICAgICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3Bw
IFwKKyAgICAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRBc3luYy5jcHAg
XAorICAgICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZENvbnRleHQuY3Bw
IFwKKyAgICAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRTeW5jLmNwcCBc
CiAgICAgICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcCBcCiAgICAg
ICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUYXNrLmNwcCBcCiAgICAgICAgIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJ
KHJldmlzaW9uIDE0MTYwMikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2lu
ZyBjb3B5KQpAQCAtOTk5LDEwICs5OTksMTggQEAKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VBdXRob3JpemVyLmgnLAogICAgICAgICAgICAgJ01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZUJhY2tlbmRBc3luYy5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRDb250ZXh0LmNwcCcsCisgICAgICAgICAgICAnTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRDb250ZXh0LmgnLAorICAgICAgICAgICAg
J01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kU3luYy5jcHAnLAorICAgICAgICAg
ICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kU3luYy5oJywKICAgICAgICAg
ICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ2FsbGJhY2suaCcsCiAgICAgICAgICAg
ICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuY3BwJywKICAgICAgICAgICAg
ICdNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ29udGV4dC5oJywKICAgICAgICAgICAgICdN
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHAnLAorICAgICAgICAgICAgJ01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmgnLAogICAgICAgICAgICAgJ01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuY3BwJywKICAgICAgICAgICAgICdNb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmgnLAogICAgICAgICAgICAgJ01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2VTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2VTZXJ2ZXIuaAko
cmV2aXNpb24gMTQxNjAyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9B
YnN0cmFjdERhdGFiYXNlU2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgi
CisjaW5jbHVkZSAiRGF0YWJhc2VFcnJvci5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBA
IC0zNiw4ICszNywxMCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEYXRhYmFzZUJh
Y2tlbmQ7CitjbGFzcyBEYXRhYmFzZUJhY2tlbmRBc3luYzsKK2NsYXNzIERhdGFiYXNlQmFja2Vu
ZENvbnRleHQ7CitjbGFzcyBEYXRhYmFzZUJhY2tlbmRTeW5jOwogY2xhc3MgRGF0YWJhc2VNYW5h
Z2VyQ2xpZW50OwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNlY3VyaXR5
T3JpZ2luOwogCiBjbGFzcyBBYnN0cmFjdERhdGFiYXNlU2VydmVyIHsKQEAgLTUwLDYgKzUzLDE0
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgU3RyaW5nIGZ1bGxQYXRoRm9yRGF0YWJhc2UoU2Vj
dXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgY3JlYXRlSWZEb2VzTm90RXhp
c3QgPSB0cnVlKSA9IDA7CiAKKyAgICAvLyBPcGVuaW5nIGFuIGFzeW5jIGRhdGFiYXNlOgorICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRBc3luYz4gb3BlbkRhdGFiYXNlQXN5
bmMoUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+JiwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwg
dW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNl
LCBEYXRhYmFzZUVycm9yJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpID0gMDsKKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQXN5bmM+IHJldHJ5T3BlbkRhdGFiYXNlQXN5bmMo
UmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+JiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5z
aWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBE
YXRhYmFzZUVycm9yJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpID0gMDsgICAgCisKKyAgICAvLyBP
cGVuaW5nIGEgc3luYyBkYXRhYmFzZToKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RGF0YWJhc2VC
YWNrZW5kU3luYz4gb3BlbkRhdGFiYXNlU3luYyhSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4
dD4mLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBj
b25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIGJv
b2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImLCBTdHJpbmcmIGVycm9y
TWVzc2FnZSkgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRTeW5j
PiByZXRyeU9wZW5EYXRhYmFzZVN5bmMoUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+Jiwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3Qg
U3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBib29sIHNl
dFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiwgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UpID0gMDsKKwogI2lmICFQTEFURk9STShDSFJPTUlVTSkKICAgICB2aXJ0dWFsIGJvb2wgaGFz
RW50cnlGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG9y
aWdpbnMoVmVjdG9yPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gPiYgcmVzdWx0KSA9IDA7CkBAIC03
MywxMyArODQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlRGF0YWJhc2VzSW1t
ZWRpYXRlbHkoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5h
bWUpID0gMDsKICNlbmRpZiAvLyBQTEFURk9STShDSFJPTUlVTSkKIAotICAgIHZpcnR1YWwgdm9p
ZCBpbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgY2FuRXN0YWJsaXNoRGF0YWJhc2UoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBk
aXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGFkZE9wZW5EYXRhYmFzZShEYXRhYmFzZUJhY2tlbmQqKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlbW92ZU9wZW5EYXRhYmFzZShEYXRhYmFzZUJhY2tlbmQqKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoY29uc3QgRGF0YWJhc2VC
YWNrZW5kQ29udGV4dCopID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhYmFzZURldGFp
bHMoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlz
cGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkgPSAwOwogICAgIHZpcnR1YWwg
dW5zaWduZWQgbG9uZyBsb25nIGdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBEYXRhYmFzZUJh
Y2tlbmQqKSA9IDA7CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRE9NV2luZG93V2ViRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93V2ViRGF0YWJhc2UuY3BwCShy
ZXZpc2lvbiAxNDE2MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RP
TVdpbmRvd1dlYkRhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOSArNDcsMTIgQEAg
UGFzc1JlZlB0cjxEYXRhYmFzZT4gRE9NV2luZG93V2ViRGF0YWJhcwogCiAgICAgUmVmUHRyPERh
dGFiYXNlPiBkYXRhYmFzZSA9IDA7CiAgICAgRGF0YWJhc2VNYW5hZ2VyJiBkYk1hbmFnZXIgPSBE
YXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKTsKKyAgICBEYXRhYmFzZUVycm9yIGVycm9yID0gRGF0
YWJhc2VFcnJvcjo6Tm9uZTsKICAgICBpZiAoZGJNYW5hZ2VyLmlzQXZhaWxhYmxlKCkgJiYgd2lu
ZG93LT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZSh3aW5k
b3ctPmRvY3VtZW50KCktPnRvcE9yaWdpbigpKSkKLSAgICAgICAgZGF0YWJhc2UgPSBkYk1hbmFn
ZXIub3BlbkRhdGFiYXNlKHdpbmRvdy0+ZG9jdW1lbnQoKSwgbmFtZSwgdmVyc2lvbiwgZGlzcGxh
eU5hbWUsIGVzdGltYXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJhY2ssIGVjKTsKKyAgICAgICAgZGF0
YWJhc2UgPSBkYk1hbmFnZXIub3BlbkRhdGFiYXNlKHdpbmRvdy0+ZG9jdW1lbnQoKSwgbmFtZSwg
dmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJhY2ssIGVy
cm9yKTsKIAorICAgIGlmIChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpDYW5ub3RPcGVuRGF0YWJh
c2UpCisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgaWYgKCFkYXRhYmFzZSAm
JiAhZWMpCiAgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAkocmV2aXNpb24gMTQxNjAy
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDExICszMywxNCBAQAogCiAjaW5jbHVkZSAiQ2hhbmdlVmVyc2lv
bldyYXBwZXIuaCIKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKKyNpbmNsdWRlICJEYXRh
YmFzZUJhY2tlbmRBc3luYy5oIgorI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZENvbnRleHQuaCIK
ICNpbmNsdWRlICJEYXRhYmFzZUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VDb250ZXh0
LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUYXNr
LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVRyYWNr
ZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgpAQCAtNDgsNyArNTEsNiBAQAogI2luY2x1ZGUgIlNRTFRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2suaCIKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJTY3JpcHRD
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1
ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiVm9pZENhbGxiYWNrLmgiCkBAIC02NSw3
ICs2NywxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURhdGFiYXNlOjpEYXRhYmFzZShQ
YXNzUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3Bs
YXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCisvLyBGSVhNRTogVGhlIERhdGFi
YXNlTWFuYWdlciBuZWVkcyB0byBjcmVhdGUgYSBEYXRhYmFzZSBpbnN0YW5jZSBmcm9tIGl0cyBi
YWNrZW5kLgorLy8gVGhpcyBmYWN0b3J5IG1ldGhvZCBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5k
IHRvIHRoYXQgRGF0YWJhc2VNYW5hZ2VyIG5lZWQuCisvLyBXaGVuIHRoZSBiYWNrZW5kIGhhcyBh
Y3R1YWxseSBiZWVuIHNwbGl0IG91dCBmcm9tIHRoZSBEYXRhYmFzZSwgd2Ugc2hvdWxkIGJlCisv
LyB1c2luZyB0aGUgdXBkYXRlZCBEYXRhYmFzZSBjb25zdHJ1Y3RvciBpbnN0ZWFkIG9mIHRoaXMg
d29ya2Fyb3VuZCwgYW5kIHRoaXMKKy8vIG1ldGhvZCBzaG91bGQgYmUgZGVsZXRlZC4KK1Bhc3NS
ZWZQdHI8RGF0YWJhc2U+IERhdGFiYXNlOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQXN5bmM+IGJhY2tlbmQpCit7CisgICAgcmV0dXJu
IGJhY2tlbmQ7Cit9CisKK0RhdGFiYXNlOjpEYXRhYmFzZShQYXNzUmVmUHRyPERhdGFiYXNlQmFj
a2VuZENvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWdu
ZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQogICAgIDogRGF0YWJhc2VCYWNrZW5kKGRhdGFiYXNlQ29u
dGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwg
QXN5bmNEYXRhYmFzZSkKICAgICAsIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzKGZhbHNlKQogICAg
ICwgbV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVkKHRydWUpCkBAIC03Myw3ICs4NSw2IEBAIERh
dGFiYXNlOjpEYXRhYmFzZShQYXNzUmVmUHRyPERhdGFiYXNlQ28KIHsKICAgICBtX2RhdGFiYXNl
VGhyZWFkU2VjdXJpdHlPcmlnaW4gPSBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi0+aXNv
bGF0ZWRDb3B5KCk7CiAKLSAgICBTY3JpcHRDb250cm9sbGVyOjppbml0aWFsaXplVGhyZWFkaW5n
KCk7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2VDb250ZXh0LT5kYXRhYmFzZVRocmVhZCgpKTsKIH0K
IApAQCAtMTIwLDE0ICsxMzEsMTQgQEAgU3RyaW5nIERhdGFiYXNlOjp2ZXJzaW9uKCkgY29uc3QK
ICAgICByZXR1cm4gRGF0YWJhc2VCYWNrZW5kOjp2ZXJzaW9uKCk7CiB9CiAKLWJvb2wgRGF0YWJh
c2U6Om9wZW5BbmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4
Y2VwdGlvbkNvZGUmIGUsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQorYm9vbCBEYXRhYmFzZTo6b3Bl
bkFuZFZlcmlmeVZlcnNpb24oYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VF
cnJvciYgZXJyb3IsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQogewogICAgIERhdGFiYXNlVGFza1N5
bmNocm9uaXplciBzeW5jaHJvbml6ZXI7CiAgICAgaWYgKCFkYXRhYmFzZUNvbnRleHQoKS0+ZGF0
YWJhc2VUaHJlYWQoKSB8fCBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+dGVy
bWluYXRpb25SZXF1ZXN0ZWQoJnN5bmNocm9uaXplcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIE93blB0cjxEYXRhYmFzZU9wZW5UYXNr
PiB0YXNrID0gRGF0YWJhc2VPcGVuVGFzazo6Y3JlYXRlKHRoaXMsIHNldFZlcnNpb25Jbk5ld0Rh
dGFiYXNlLCAmc3luY2hyb25pemVyLCBlLCBlcnJvck1lc3NhZ2UsIHN1Y2Nlc3MpOworICAgIE93
blB0cjxEYXRhYmFzZU9wZW5UYXNrPiB0YXNrID0gRGF0YWJhc2VPcGVuVGFzazo6Y3JlYXRlKHRo
aXMsIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCAmc3luY2hyb25pemVyLCBlcnJvciwgZXJyb3JN
ZXNzYWdlLCBzdWNjZXNzKTsKICAgICBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQo
KS0+c2NoZWR1bGVJbW1lZGlhdGVUYXNrKHRhc2sucmVsZWFzZSgpKTsKICAgICBzeW5jaHJvbml6
ZXIud2FpdEZvclRhc2tDb21wbGV0aW9uKCk7CiAKQEAgLTE1Myw3ICsxNjQsNyBAQCB2b2lkIERh
dGFiYXNlOjptYXJrQXNEZWxldGVkQW5kQ2xvc2UoKQogICAgIHN5bmNocm9uaXplci53YWl0Rm9y
VGFza0NvbXBsZXRpb24oKTsKIH0KIAotdm9pZCBEYXRhYmFzZTo6Y2xvc2UoKQordm9pZCBEYXRh
YmFzZTo6Y2xvc2UxKCkKIHsKICAgICBBU1NFUlQoZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNl
VGhyZWFkKCkpOwogICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gZGF0YWJhc2VDb250ZXh0
KCktPmRhdGFiYXNlVGhyZWFkKCktPmdldFRocmVhZElEKCkpOwpAQCAtMTcxLDcgKzE4Miw2IEBA
IHZvaWQgRGF0YWJhc2U6OmNsb3NlKCkKICAgICBSZWZQdHI8RGF0YWJhc2U+IHByb3RlY3QgPSB0
aGlzOwogICAgIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRh
YmFzZUNsb3NlZCh0aGlzKTsKICAgICBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQo
KS0+dW5zY2hlZHVsZURhdGFiYXNlVGFza3ModGhpcyk7Ci0gICAgRGF0YWJhc2VNYW5hZ2VyOjpt
YW5hZ2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKHRoaXMpOwogfQogCiB2b2lkIERhdGFiYXNlOjpj
bG9zZUltbWVkaWF0ZWx5KCkKQEAgLTE4OSw5ICsxOTksOSBAQCB1bnNpZ25lZCBsb25nIGxvbmcg
RGF0YWJhc2U6Om1heGltdW1TaXplCiAgICAgcmV0dXJuIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdl
cigpLmdldE1heFNpemVGb3JEYXRhYmFzZSh0aGlzKTsKIH0KIAotYm9vbCBEYXRhYmFzZTo6cGVy
Zm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRXhjZXB0aW9u
Q29kZSYgZSwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCitib29sIERhdGFiYXNlOjpwZXJmb3JtT3Bl
bkFuZFZlcmlmeShib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiBl
cnJvciwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgaWYgKERhdGFiYXNlQmFja2VuZDo6
cGVyZm9ybU9wZW5BbmRWZXJpZnkoc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGUsIGVycm9yTWVz
c2FnZSkpIHsKKyAgICBpZiAoRGF0YWJhc2VCYWNrZW5kOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShz
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZXJyb3IsIGVycm9yTWVzc2FnZSkpIHsKICAgICAgICAg
aWYgKGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpKQogICAgICAgICAgICAgZGF0
YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlT3Blbih0aGlz
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2UuaAkocmV2aXNpb24gMTQxNjAyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMsMTQgQEAKIAogI2lu
Y2x1ZGUgIkRhdGFiYXNlQmFja2VuZC5oIgogI2luY2x1ZGUgIkRhdGFiYXNlQmFzaWNUeXBlcy5o
IgorI2luY2x1ZGUgIkRhdGFiYXNlRXJyb3IuaCIKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIERhdGFiYXNlQmFja2VuZEFzeW5jOwogY2xh
c3MgRGF0YWJhc2VDYWxsYmFjazsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogY2xhc3MgU1FMVHJh
bnNhY3Rpb247CkBAIC02OCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbWFy
a0FzRGVsZXRlZEFuZENsb3NlKCk7CiAgICAgYm9vbCBkZWxldGVkKCkgY29uc3QgeyByZXR1cm4g
bV9kZWxldGVkOyB9CiAKLSAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCBjbG9zZTEoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgY2xvc2VJbW1lZGlhdGVseSgpOwogCiAgICAgdW5zaWduZWQgbG9uZyBs
b25nIGRhdGFiYXNlU2l6ZSgpIGNvbnN0OwpAQCAtODYsMTMgKzg4LDE2IEBAIHByaXZhdGU6CiAg
ICAgY2xhc3MgRGF0YWJhc2VUcmFuc2FjdGlvblRhc2s7CiAgICAgY2xhc3MgRGF0YWJhc2VUYWJs
ZU5hbWVzVGFzazsKIAotICAgIERhdGFiYXNlKFBhc3NSZWZQdHI8RGF0YWJhc2VDb250ZXh0Piwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKKyAgICBE
YXRhYmFzZShQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAogICAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CisgICAg
RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNr
ZW5kQXN5bmM+KTsgLy8gRklYTUU6IG5vdCBpbXBsZW1lbnRlZCAmIHVzZWQgeWV0LgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQXN5bmM+KTsKKwogICAgIHZvaWQgcnVuVHJhbnNh
Y3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+LAogICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1Jl
ZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2Fj
dGlvbldyYXBwZXI+LCBib29sIHJlYWRPbmx5KTsKIAotICAgIGJvb2wgb3BlbkFuZFZlcmlmeVZl
cnNpb24oYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYsIFN0cmlu
ZyYgZXJyb3JNZXNzYWdlKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnko
Ym9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYsIFN0cmluZyYgZXJy
b3JNZXNzYWdlKTsKKyAgICBib29sIG9wZW5BbmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lv
bkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7Cisg
ICAgdmlydHVhbCBib29sIHBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2V0VmVyc2lvbkluTmV3
RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiAKICAgICB2
b2lkIGluUHJvZ3Jlc3NUcmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIHZvaWQgc2NoZWR1bGVU
cmFuc2FjdGlvbigpOwpAQCAtMTA5LDYgKzExNCw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2Rl
bGV0ZWQ7CiAKICAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2VNYW5hZ2VyOworICAgIGZyaWVuZCBj
bGFzcyBEYXRhYmFzZVNlcnZlcjsgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHdoZW4gdGhlIGJhY2tl
bmQgaGFzIGJlZW4gc3BsaXQgb3V0LgorICAgIGZyaWVuZCBjbGFzcyBEYXRhYmFzZUJhY2tlbmRB
c3luYzsgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHdoZW4gdGhlIGJhY2tlbmQgaGFzIGJlZW4gc3Bs
aXQgb3V0LgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmNwcAko
cmV2aXNpb24gMTQxNjAyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZUJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiwxMCBAQAogI2lm
IEVOQUJMRShTUUxfREFUQUJBU0UpCiAKICNpbmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIuaCIK
KyNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VD
b250ZXh0LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiRGF0YWJh
c2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKQEAgLTUzLDYgKzU1LDM1IEBACiAj
aW5jbHVkZSAiRGF0YWJhc2VPYnNlcnZlci5oIiAvLyBGb3IgZXJyb3IgcmVwb3J0aW5nLgogI2Vu
ZGlmCiAKKy8vIFJlZ2lzdGVyaW5nICJvcGVuZWQiIGRhdGFiYXNlcyB3aXRoIHRoZSBEYXRhYmFz
ZVRyYWNrZXIKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KKy8vIFRoZSBEYXRhYmFzZVRyYWNrZXIgbWFpbnRhaW5zIGEgbGlzdCBvZiBk
YXRhYmFzZXMgdGhhdCBoYXZlIGJlZW4KKy8vICJvcGVuZWQiIHNvIHRoYXQgdGhlIGNsaWVudCBj
YW4gY2FsbCBpbnRlcnJ1cHQgb3IgZGVsZXRlIGV2ZXJ5IGRhdGFiYXNlCisvLyBhc3NvY2lhdGVk
IHdpdGggYSBEYXRhYmFzZUJhY2tlbmRDb250ZXh0LgorLy8KKy8vIFdlIHdpbGwgb25seSBjYWxs
IERhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKCkgdG8gYWRkIHRoZSBkYXRhYmFzZQor
Ly8gdG8gdGhlIHRyYWNrZXIgYXMgb3BlbmVkIHdoZW4gd2UndmUgc3VjY2VlZGVkIGluIG9wZW5p
bmcgdGhlIGRhdGFiYXNlCisvLyBhbmQgd2lsbCBzZXQgbV9vcGVuZWQgdG8gdHJ1ZS4gU2ltaWxh
cmx5LCB3ZSBvbmx5IGNhbGwKKy8vIERhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlT3BlbkRhdGFiYXNl
KCkgdG8gcmVtb3ZlIHRoZSBkYXRhYmFzZSBmcm9tIHRoZQorLy8gdHJhY2tlciB3aGVuIHdlIHNl
dCBtX29wZW5lZCB0byBmYWxzZSBpbiBjbG9zZURhdGFiYXNlKCkuIFRoaXMgc2V0cyB1cAorLy8g
YSBzaW1wbGUgc3ltbWV0cnkgYmV0d2VlbiBvcGVuIGFuZCBjbG9zZSBvcGVyYXRpb25zLCBhbmQg
YSBkaXJlY3QKKy8vIGNvcnJlbGF0aW9uIHRvIGFkZGluZyBhbmQgcmVtb3ZpbmcgZGF0YWJhc2Vz
IGZyb20gdGhlIHRyYWNrZXIncyBsaXN0LAorLy8gdGh1cyBlbnN1cmluZyB0aGF0IHdlIGhhdmUg
YSBjb3JyZWN0IGxpc3QgZm9yIHRoZSBpbnRlcnJ1cHQgYW5kCisvLyBkZWxldGUgb3BlcmF0aW9u
cyB0byB3b3JrIG9uLgorLy8KKy8vIFRoZSBvbmx5IGRhdGFiYXNlcyBpbnN0YW5jZXMgbm90IHRy
YWNrZWQgYnkgdGhlIHRyYWNrZXIncyBvcGVuIGRhdGFiYXNlCisvLyBsaXN0IGFyZSB0aGUgb25l
cyB0aGF0IGhhdmUgbm90IGJlZW4gYWRkZWQgeWV0LCBvciB0aGUgb25lcyB0aGF0IHdlCisvLyBh
dHRlbXB0ZWQgYW4gb3BlbiBvbiBidXQgZmFpbGVkIHRvLiBTdWNoIGluc3RhbmNlcyBvbmx5IGV4
aXN0IGluIHRoZQorLy8gRGF0YWJhc2VTZXJ2ZXIncyBmYWN0b3J5IG1ldGhvZHMgZm9yIGNyZWF0
aW5nIERhdGFiYXNlQmFja2VuZHMuCisvLworLy8gVGhlIGZhY3RvcnkgbWV0aG9kcyB3aWxsIGVp
dGhlciBjYWxsIG9wZW5BbmRWZXJpZnlWZXJzaW9uKCkgb3IKKy8vIHBlcmZvcm1PcGVuQW5kVmVy
aWZ5KCkuIFRoZXNlIG1ldGhvZHMgd2lsbCBhZGQgdGhlIG5ld2x5IGluc3RhbnRpYXRlZAorLy8g
RGF0YWJhc2VCYWNrZW5kIGlmIHRoZXkgc3VjY2VlZCBpbiBvcGVuaW5nIHRoZSByZXF1ZXN0ZWQg
ZGF0YWJhc2UuCisvLyBJbiB0aGUgY2FzZSBvZiBmYWlsdXJlIHRvIG9wZW4gdGhlIGRhdGFiYXNl
LCB0aGUgZmFjdG9yeSBtZXRob2RzIHdpbGwKKy8vIHNpbXBseSBkaXNjYXJkIHRoZSBuZXdseSBp
bnN0YW50aWF0ZWQgRGF0YWJhc2VCYWNrZW5kIHdoZW4gdGhleSByZXR1cm4uCisvLyBUaGUgcmVm
IGNvdW50aW5nIG1lY2hhbmltcyB3aWxsIGF1dG9tYXRpY2FsbHkgZGVzdHJ1Y3QgdGhlIHVuLWFk
ZGVkCisvLyAoYW5kIHVuLXJldHVybmVkKSBkYXRhYmFzZXMgaW5zdGFuY2VzLgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25LZXlbXSA9ICJXZWJLaXRE
YXRhYmFzZVZlcnNpb25LZXkiOwpAQCAtMTc0LDcgKzIwNSw3IEBAIGNvbnN0IGNoYXIqIERhdGFi
YXNlQmFja2VuZDo6ZGF0YWJhc2VJbmYKICAgICByZXR1cm4gaW5mb1RhYmxlTmFtZTsKIH0KIAot
RGF0YWJhc2VCYWNrZW5kOjpEYXRhYmFzZUJhY2tlbmQoUGFzc1JlZlB0cjxEYXRhYmFzZUNvbnRl
eHQ+IGRhdGFiYXNlQ29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4
cGVjdGVkVmVyc2lvbiwKK0RhdGFiYXNlQmFja2VuZDo6RGF0YWJhc2VCYWNrZW5kKFBhc3NSZWZQ
dHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAogICAgIGNvbnN0IFN0cmluZyYg
ZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgRGF0YWJhc2VUeXBlIGRh
dGFiYXNlVHlwZSkKICAgICA6IG1fZGF0YWJhc2VDb250ZXh0KGRhdGFiYXNlQ29udGV4dCkKICAg
ICAsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChtX2RhdGFiYXNlQ29udGV4dC0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKQpAQCAtMTg4LDcgKzIxOSw3IEBAIERhdGFiYXNlQmFja2VuZDo6RGF0
YWJhc2VCYWNrZW5kKFBhc3NSZWYKICAgICAsIG1faXNTeW5jRGF0YWJhc2UoZGF0YWJhc2VUeXBl
ID09IFN5bmNEYXRhYmFzZSkKIHsKICAgICBBU1NFUlQobV9kYXRhYmFzZUNvbnRleHQtPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIG1fY29udGV4dFRo
cmVhZFNlY3VyaXR5T3JpZ2luID0gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5zZWN1cml0eU9y
aWdpbigpLT5pc29sYXRlZENvcHkoKTsKKyAgICBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdp
biA9IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKTsKIAogICAgIG1f
ZGF0YWJhc2VBdXRob3JpemVyID0gRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGUoaW5mb1RhYmxl
TmFtZSk7CiAKQEAgLTIwOCwxMiArMjM5LDEyIEBAIERhdGFiYXNlQmFja2VuZDo6RGF0YWJhc2VC
YWNrZW5kKFBhc3NSZWYKICAgICB9CiAKICAgICBtX2ZpbGVuYW1lID0gRGF0YWJhc2VNYW5hZ2Vy
OjptYW5hZ2VyKCkuZnVsbFBhdGhGb3JEYXRhYmFzZShzZWN1cml0eU9yaWdpbigpLCBtX25hbWUp
OwotICAgIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmFkZE9wZW5EYXRhYmFzZSh0aGlzKTsK
IH0KIAogRGF0YWJhc2VCYWNrZW5kOjp+RGF0YWJhc2VCYWNrZW5kKCkKIHsKLSAgICBBU1NFUlQo
IW1fb3BlbmVkKTsKKyAgICBpZiAob3BlbmVkKCkpCisgICAgICAgIGNsb3NlRGF0YWJhc2UoKTsK
IH0KIAogdm9pZCBEYXRhYmFzZUJhY2tlbmQ6OmNsb3NlRGF0YWJhc2UoKQpAQCAtMjIzLDYgKzI1
NCw4IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kOjpjbG9zZURhdGFiYXNlKCkKIAogICAgIG1fc3Fs
aXRlRGF0YWJhc2UuY2xvc2UoKTsKICAgICBtX29wZW5lZCA9IGZhbHNlOworICAgIC8vIFNlZSBj
b21tZW50IGF0IHRoZSB0b3AgdGhpcyBmaWxlIHJlZ2FyZGluZyBjYWxsaW5nIHJlbW92ZU9wZW5E
YXRhYmFzZSgpLgorICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnJlbW92ZU9wZW5EYXRh
YmFzZSh0aGlzKTsKICAgICB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgo
KSk7CiAKQEAgLTI0NiwxNiArMjc5LDQzIEBAIFN0cmluZyBEYXRhYmFzZUJhY2tlbmQ6OnZlcnNp
b24oKSBjb25zdAogICAgIHJldHVybiBnZXRDYWNoZWRWZXJzaW9uKCk7CiB9CiAKLWJvb2wgRGF0
YWJhc2VCYWNrZW5kOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNob3VsZFNldFZlcnNpb25J
bk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiBlYywgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCitj
bGFzcyBEb25lQ3JlYXRpbmdEYXRhYmFzZU9uRXhpdENhbGxlciB7CitwdWJsaWM6CisgICAgRG9u
ZUNyZWF0aW5nRGF0YWJhc2VPbkV4aXRDYWxsZXIoRGF0YWJhc2VCYWNrZW5kKiBkYXRhYmFzZSwg
RGF0YWJhc2VFcnJvciYgZXJyb3IpCisgICAgICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKKyAg
ICAgICAgLCBtX2Vycm9yKGVycm9yKQorICAgIHsKKyAgICB9CisgICAgfkRvbmVDcmVhdGluZ0Rh
dGFiYXNlT25FeGl0Q2FsbGVyKCkKKyAgICB7CisjaWYgIVBMQVRGT1JNKENIUk9NSVVNKQorICAg
ICAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5kb25lQ3JlYXRpbmdEYXRhYmFzZShtX2Rh
dGFiYXNlKTsKKyNlbHNlCisgICAgICAgIGlmIChtX2Vycm9yICE9IERhdGFiYXNlRXJyb3I6Ok5v
bmUpCisgICAgICAgICAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5mYWlsZWRUb09wZW5E
YXRhYmFzZShtX2RhdGFiYXNlKTsKKyNlbmRpZgorICAgICAgICAgICAgCisgICAgfQorcHJpdmF0
ZToKKyAgICBEYXRhYmFzZUJhY2tlbmQqIG1fZGF0YWJhc2U7CisgICAgRGF0YWJhc2VFcnJvciYg
bV9lcnJvcjsKK307CisKK2Jvb2wgRGF0YWJhc2VCYWNrZW5kOjpwZXJmb3JtT3BlbkFuZFZlcmlm
eShib29sIHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiBlcnJv
ciwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7CisgICAgRG9uZUNyZWF0aW5nRGF0YWJhc2VPbkV4
aXRDYWxsZXIgb25FeGl0Q2FsbGVyKHRoaXMsIGVycm9yKTsKICAgICBBU1NFUlQoZXJyb3JNZXNz
YWdlLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKGVycm9yID09IERhdGFiYXNlRXJyb3I6Ok5vbmUp
OyAvLyBCZXR0ZXIgbm90IGhhdmUgYW55IGVycm9ycyBhbHJlYWR5LgogCiAgICAgY29uc3QgaW50
IG1heFNxbGl0ZUJ1c3lXYWl0VGltZSA9IDMwMDAwOwogCisjaWYgUExBVEZPUk0oQ0hST01JVU0p
CisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucHJlcGFyZVRvT3BlbkRhdGFiYXNlKHRo
aXMpOworI2VuZGlmCiAgICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLm9wZW4obV9maWxlbmFtZSwg
dHJ1ZSkpIHsKICAgICAgICAgcmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KDEsIElOVkFMSURfU1RB
VEVfRVJSLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpKTsKICAgICAgICAgZXJyb3JNZXNz
YWdlID0gZm9ybWF0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSIsIG1fc3Fs
aXRlRGF0YWJhc2UubGFzdEVycm9yKCksIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OwotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICBlcnJvciA9IERhdGFi
YXNlRXJyb3I6OkNhbm5vdE9wZW5EYXRhYmFzZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KICAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2UudHVybk9uSW5jcmVtZW50YWxBdXRvVmFjdXVt
KCkpCkBAIC0yOTcsNyArMzU3LDcgQEAgYm9vbCBEYXRhYmFzZUJhY2tlbmQ6OnBlcmZvcm1PcGVu
QW5kVmVyaQogICAgICAgICAgICAgaWYgKCF0cmFuc2FjdGlvbi5pblByb2dyZXNzKCkpIHsKICAg
ICAgICAgICAgICAgICByZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQoMiwgSU5WQUxJRF9TVEFURV9F
UlIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCkpOwogICAgICAgICAgICAgICAgIGVycm9y
TWVzc2FnZSA9IGZvcm1hdEVycm9yTWVzc2FnZSgidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UsIGZh
aWxlZCB0byBzdGFydCB0cmFuc2FjdGlvbiIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCks
IG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgICAgIGVjID0g
SU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBEYXRhYmFzZUVycm9y
OjpDYW5ub3RPcGVuRGF0YWJhc2U7CiAgICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5j
bG9zZSgpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KQEAg
LTMwOSw3ICszNjksNyBAQCBib29sIERhdGFiYXNlQmFja2VuZDo6cGVyZm9ybU9wZW5BbmRWZXJp
CiAgICAgICAgICAgICAgICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJD
UkVBVEUgVEFCTEUgIiArIHRhYmxlTmFtZSArICIgKGtleSBURVhUIE5PVCBOVUxMIE9OIENPTkZM
SUNUIEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsdmFsdWUgVEVYVCBOT1QgTlVMTCBP
TiBDT05GTElDVCBGQUlMKTsiKSkgewogICAgICAgICAgICAgICAgICAgICByZXBvcnRPcGVuRGF0
YWJhc2VSZXN1bHQoMywgSU5WQUxJRF9TVEFURV9FUlIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVy
cm9yKCkpOwogICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBmb3JtYXRFcnJvck1l
c3NhZ2UoInVuYWJsZSB0byBvcGVuIGRhdGFiYXNlLCBmYWlsZWQgdG8gY3JlYXRlICdpbmZvJyB0
YWJsZSIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCksIG1fc3FsaXRlRGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwotICAgICAgICAgICAgICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJS
OworICAgICAgICAgICAgICAgICAgICBlcnJvciA9IERhdGFiYXNlRXJyb3I6OkNhbm5vdE9wZW5E
YXRhYmFzZTsKICAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ucm9sbGJhY2soKTsKICAg
ICAgICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMTcsNyArMzc3LDcgQEAgYm9vbCBEYXRhYmFzZUJh
Y2tlbmQ6OnBlcmZvcm1PcGVuQW5kVmVyaQogICAgICAgICAgICAgfSBlbHNlIGlmICghZ2V0VmVy
c2lvbkZyb21EYXRhYmFzZShjdXJyZW50VmVyc2lvbiwgZmFsc2UpKSB7CiAgICAgICAgICAgICAg
ICAgcmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KDQsIElOVkFMSURfU1RBVEVfRVJSLCBtX3NxbGl0
ZURhdGFiYXNlLmxhc3RFcnJvcigpKTsKICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBm
b3JtYXRFcnJvck1lc3NhZ2UoInVuYWJsZSB0byBvcGVuIGRhdGFiYXNlLCBmYWlsZWQgdG8gcmVh
ZCBjdXJyZW50IHZlcnNpb24iLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpLCBtX3NxbGl0
ZURhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgICAgICBlYyA9IElOVkFMSURf
U1RBVEVfRVJSOworICAgICAgICAgICAgICAgIGVycm9yID0gRGF0YWJhc2VFcnJvcjo6Q2Fubm90
T3BlbkRhdGFiYXNlOwogICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLnJvbGxiYWNrKCk7CiAg
ICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTMzMCw3ICszOTAsNyBAQCBib29sIERhdGFiYXNlQmFja2VuZDo6
cGVyZm9ybU9wZW5BbmRWZXJpCiAgICAgICAgICAgICAgICAgaWYgKCFzZXRWZXJzaW9uSW5EYXRh
YmFzZShtX2V4cGVjdGVkVmVyc2lvbiwgZmFsc2UpKSB7CiAgICAgICAgICAgICAgICAgICAgIHJl
cG9ydE9wZW5EYXRhYmFzZVJlc3VsdCg1LCBJTlZBTElEX1NUQVRFX0VSUiwgbV9zcWxpdGVEYXRh
YmFzZS5sYXN0RXJyb3IoKSk7CiAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGZv
cm1hdEVycm9yTWVzc2FnZSgidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UsIGZhaWxlZCB0byB3cml0
ZSBjdXJyZW50IHZlcnNpb24iLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpLCBtX3NxbGl0
ZURhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgICAgICAgICAgZWMgPSBJTlZB
TElEX1NUQVRFX0VSUjsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBEYXRhYmFzZUVycm9y
OjpDYW5ub3RPcGVuRGF0YWJhc2U7CiAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLnJv
bGxiYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzUyLDcgKzQxMiw3IEBAIGJv
b2wgRGF0YWJhc2VCYWNrZW5kOjpwZXJmb3JtT3BlbkFuZFZlcmkKICAgICBpZiAoKCFtX25ldyB8
fCBzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSkgJiYgbV9leHBlY3RlZFZlcnNpb24ubGVu
Z3RoKCkgJiYgbV9leHBlY3RlZFZlcnNpb24gIT0gY3VycmVudFZlcnNpb24pIHsKICAgICAgICAg
cmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KDYsIElOVkFMSURfU1RBVEVfRVJSLCAwKTsKICAgICAg
ICAgZXJyb3JNZXNzYWdlID0gInVuYWJsZSB0byBvcGVuIGRhdGFiYXNlLCB2ZXJzaW9uIG1pc21h
dGNoLCAnIiArIG1fZXhwZWN0ZWRWZXJzaW9uICsgIicgZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJl
bnRWZXJzaW9uIG9mICciICsgY3VycmVudFZlcnNpb24gKyAiJyI7Ci0gICAgICAgIGVjID0gSU5W
QUxJRF9TVEFURV9FUlI7CisgICAgICAgIGVycm9yID0gRGF0YWJhc2VFcnJvcjo6Q2Fubm90T3Bl
bkRhdGFiYXNlOwogICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CkBAIC0zNjAsNiArNDIwLDggQEAgYm9vbCBEYXRhYmFzZUJhY2tl
bmQ6OnBlcmZvcm1PcGVuQW5kVmVyaQogICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7
CiAgICAgbV9zcWxpdGVEYXRhYmFzZS5zZXRBdXRob3JpemVyKG1fZGF0YWJhc2VBdXRob3JpemVy
KTsKIAorICAgIC8vIFNlZSBjb21tZW50IGF0IHRoZSB0b3AgdGhpcyBmaWxlIHJlZ2FyZGluZyBj
YWxsaW5nIGFkZE9wZW5EYXRhYmFzZSgpLgorICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigp
LmFkZE9wZW5EYXRhYmFzZSh0aGlzKTsKICAgICBtX29wZW5lZCA9IHRydWU7CiAKICAgICBpZiAo
bV9uZXcgJiYgIXNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlKQpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZC5oCShy
ZXZpc2lvbiAxNDE2MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNs
dWRlICJEYXRhYmFzZUJhc2ljVHlwZXMuaCIKICNpbmNsdWRlICJEYXRhYmFzZURldGFpbHMuaCIK
KyNpbmNsdWRlICJEYXRhYmFzZUVycm9yLmgiCiAjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIK
ICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTQ2
LDcgKzQ3LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRGF0YWJhc2VBdXRob3Jp
emVyOwotY2xhc3MgRGF0YWJhc2VDb250ZXh0OworY2xhc3MgRGF0YWJhc2VCYWNrZW5kQ29udGV4
dDsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsK
IApAQCAtODcsNyArODgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG1hcmtBc0RlbGV0
ZWRBbmRDbG9zZSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VJbW1lZGlhdGVseSgpID0g
MDsKIAotICAgIERhdGFiYXNlQ29udGV4dCogZGF0YWJhc2VDb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhYmFzZUNvbnRleHQuZ2V0KCk7IH0KKyAgICBEYXRhYmFzZUJhY2tlbmRDb250ZXh0
KiBkYXRhYmFzZUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlQ29udGV4dC5nZXQo
KTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIENoYW5nZVZlcnNpb25XcmFwcGVy
OwpAQCAtMTAxLDEyICsxMDIsMTIgQEAgcHJvdGVjdGVkOgogICAgICAgICBTeW5jRGF0YWJhc2UK
ICAgICB9OwogCi0gICAgRGF0YWJhc2VCYWNrZW5kKFBhc3NSZWZQdHI8RGF0YWJhc2VDb250ZXh0
PiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKKyAg
ICBEYXRhYmFzZUJhY2tlbmQoUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKICAgICAgICAg
Y29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBE
YXRhYmFzZVR5cGUpOwogCiAgICAgdm9pZCBjbG9zZURhdGFiYXNlKCk7CiAKLSAgICB2aXJ0dWFs
IGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRh
YmFzZSwgRXhjZXB0aW9uQ29kZSYsIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKKyAgICB2aXJ0dWFs
IGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRh
YmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKIAogICAgIGJvb2wg
Z2V0VmVyc2lvbkZyb21EYXRhYmFzZShTdHJpbmcmIHZlcnNpb24sIGJvb2wgc2hvdWxkQ2FjaGVW
ZXJzaW9uID0gdHJ1ZSk7CiAgICAgYm9vbCBzZXRWZXJzaW9uSW5EYXRhYmFzZShjb25zdCBTdHJp
bmcmIHZlcnNpb24sIGJvb2wgc2hvdWxkQ2FjaGVWZXJzaW9uID0gdHJ1ZSk7CkBAIC0xMjgsNyAr
MTI5LDcgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkYXRhYmFzZUluZm9U
YWJsZU5hbWUoKTsKIAogICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gbV9jb250ZXh0VGhyZWFk
U2VjdXJpdHlPcmlnaW47Ci0gICAgUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gbV9kYXRhYmFzZUNv
bnRleHQ7IC8vIEFzc29jaWF0ZWQgd2l0aCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuCisgICAg
UmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+IG1fZGF0YWJhc2VDb250ZXh0OyAvLyBBc3Nv
Y2lhdGVkIHdpdGggbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LgogICAgIFJlZlB0cjxTY3JpcHRF
eGVjdXRpb25Db250ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKICAgICBTdHJpbmcg
bV9uYW1lOwpAQCAtMTUwLDYgKzE1MSw4IEBAIHByaXZhdGU6CiAgICAgU1FMaXRlRGF0YWJhc2Ug
bV9zcWxpdGVEYXRhYmFzZTsKIAogICAgIFJlZlB0cjxEYXRhYmFzZUF1dGhvcml6ZXI+IG1fZGF0
YWJhc2VBdXRob3JpemVyOworCisgICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlU2VydmVyOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRBc3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRBc3luYy5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
QmFja2VuZEFzeW5jLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRGF0YWJhc2VCYWNrZW5kQXN5bmMuaCIKKworI2lmIEVOQUJMRShTUUxfREFU
QUJBU0UpCisKKyNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworRGF0YWJhc2VCYWNrZW5kQXN5bmM6OkRhdGFiYXNlQmFja2VuZEFzeW5j
KFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0LCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJp
bmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCisgICAgOiBEYXRh
YmFzZShkYXRhYmFzZUNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUs
IGVzdGltYXRlZFNpemUpCit7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEFzeW5jLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFj
a2VuZEFzeW5jLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEYXRhYmFzZUJhY2tlbmRB
c3luY19oCisjZGVmaW5lIERhdGFiYXNlQmFja2VuZEFzeW5jX2gKKworI2lmIEVOQUJMRShTUUxf
REFUQUJBU0UpCisKKyNpbmNsdWRlICJEYXRhYmFzZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERhdGFiYXNlU2VydmVy
OworCisvLyBGSVhNRTogVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBEYXRhYmFzZUJhY2tlbmRBc3lu
YyBpcyBvbmx5IGEgcGxhY2UgaG9sZGVyCisvLyBmb3IgdGhlIHNwbGl0IG91dCBvZiB0aGUgRGF0
YWJhc2UgYmFja2VuZCB0byBiZSBkb25lIGxhdGVyLiBUaGlzCisvLyBwbGFjZSBob2xkZXIgaXMg
bmVlZGVkIHRvIGFsbG93IG90aGVyIGNvZGUgdGhhdCBuZWVkIHRvIHJlZmVyZW5jZSB0aGUKKy8v
IERhdGFiYXNlQmFja2VuZEFzeW5jIHRvIGRvIHNvIGJlZm9yZSB0aGUgcHJvcGVyIGJhY2tlbmQg
c3BsaXQgaXMKKy8vIGF2YWlsYWJsZS4gVGhpcyBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCB0aGUg
YWN0dWFsIGltcGxlbWVudGF0aW9uIGxhdGVyLgorCitjbGFzcyBEYXRhYmFzZUJhY2tlbmRBc3lu
YyA6IHB1YmxpYyBEYXRhYmFzZSB7Citwcml2YXRlOgorICAgIERhdGFiYXNlQmFja2VuZEFzeW5j
KFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4sIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUs
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CisKKyAgICBmcmllbmQgY2xhc3MgRGF0YWJh
c2VTZXJ2ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoU1FMX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gRGF0YWJhc2VCYWNrZW5kQXN5bmNfaApJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRDb250
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlQmFja2VuZENvbnRleHQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRDb250ZXh0LmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VCYWNr
ZW5kQ29udGV4dC5oIgorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTZWN1cml0
eU9yaWdpbiogRGF0YWJhc2VCYWNrZW5kQ29udGV4dDo6c2VjdXJpdHlPcmlnaW4oKSBjb25zdAor
eworICAgIHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFU
QUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
QmFja2VuZENvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZENvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRGF0YWJhc2VCYWNrZW5kQ29udGV4dF9oCisjZGVm
aW5lIERhdGFiYXNlQmFja2VuZENvbnRleHRfaAorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkK
KworI2luY2x1ZGUgIkRhdGFiYXNlQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKKwor
Ly8gRklYTUU6IFRoaXMgaW1wbGVtZW50YXRpb24gb2YgRGF0YWJhc2VCYWNrZW5kQ29udGV4dCBp
cyBvbmx5IGEgcGxhY2UgaG9sZGVyCisvLyBmb3IgdGhlIHNwbGl0IG91dCBvZiB0aGUgRGF0YWJh
c2VDb250ZXh0IGJhY2tlbmQgdG8gYmUgZG9uZSBsYXRlci4gVGhpcworLy8gcGxhY2UgaG9sZGVy
IGlzIG5lZWRlZCB0byBhbGxvdyBvdGhlciBjb2RlIHRoYXQgbmVlZCB0byByZWZlcmVuY2UgdGhl
CisvLyBEYXRhYmFzZUJhY2tlbmRDb250ZXh0IHRvIGRvIHNvIGJlZm9yZSB0aGUgcHJvcGVyIGJh
Y2tlbmQgc3BsaXQgaXMKKy8vIGF2YWlsYWJsZS4gVGhpcyBzaG91bGQgYmUgcmVwbGFjZWQgd2l0
aCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGxhdGVyLgorCitjbGFzcyBEYXRhYmFzZUJhY2tl
bmRDb250ZXh0IDogcHVibGljIERhdGFiYXNlQ29udGV4dCB7CitwdWJsaWM6CisgICAgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsgfQorICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0
eU9yaWdpbigpIGNvbnN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIERhdGFiYXNlQmFja2VuZENvbnRl
eHRfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJh
Y2tlbmRTeW5jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlQmFja2VuZFN5bmMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRTeW5jLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VCYWNr
ZW5kU3luYy5oIgorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkRhdGFi
YXNlQmFja2VuZENvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitEYXRhYmFzZUJh
Y2tlbmRTeW5jOjpEYXRhYmFzZUJhY2tlbmRTeW5jKFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5k
Q29udGV4dD4gZGF0YWJhc2VDb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUpCisgICAgOiBEYXRhYmFzZVN5bmMoZGF0YWJhc2VDb250ZXh0LCBu
YW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKQoreworfQor
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJB
U0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFj
a2VuZFN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlQmFja2VuZFN5bmMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kU3luYy5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgRGF0YWJhc2VCYWNrZW5kU3luY19oCisjZGVmaW5lIERhdGFiYXNlQmFj
a2VuZFN5bmNfaAorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkRhdGFi
YXNlU3luYy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIERhdGFiYXNlU2VydmVyOworCisvLyBGSVhNRTogVGhpcyBpbXBs
ZW1lbnRhdGlvbiBvZiBEYXRhYmFzZUJhY2tlbmRTeW5jIGlzIG9ubHkgYSBwbGFjZSBob2xkZXIK
Ky8vIGZvciB0aGUgc3BsaXQgb3V0IG9mIHRoZSBEYXRhYmFzZVN5bmMgYmFja2VuZCB0byBiZSBk
b25lIGxhdGVyLiBUaGlzCisvLyBwbGFjZSBob2xkZXIgaXMgbmVlZGVkIHRvIGFsbG93IG90aGVy
IGNvZGUgdGhhdCBuZWVkIHRvIHJlZmVyZW5jZSB0aGUKKy8vIERhdGFiYXNlQmFja2VuZFN5bmMg
dG8gZG8gc28gYmVmb3JlIHRoZSBwcm9wZXIgYmFja2VuZCBzcGxpdCBpcworLy8gYXZhaWxhYmxl
LiBUaGlzIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24g
bGF0ZXIuCisKK2NsYXNzIERhdGFiYXNlQmFja2VuZFN5bmMgOiBwdWJsaWMgRGF0YWJhc2VTeW5j
IHsKK3ByaXZhdGU6CisgICAgRGF0YWJhc2VCYWNrZW5kU3luYyhQYXNzUmVmUHRyPERhdGFiYXNl
QmFja2VuZENvbnRleHQ+LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0
ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGlt
YXRlZFNpemUpOworCisgICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlU2VydmVyOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKwor
I2VuZGlmIC8vIERhdGFiYXNlQmFja2VuZFN5bmNfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmNwcAkocmV2aXNp
b24gMTQxNjAyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZUNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAi
Q2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2Uu
aCIKKyNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmgiCiAjaW5jbHVkZSAiRGF0YWJh
c2VNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgiCiAjaW5jbHVkZSAiRGF0YWJh
c2VUaHJlYWQuaCIKQEAgLTEwOSw3ICsxMTAsNyBAQCBEYXRhYmFzZUNvbnRleHQ6OkRhdGFiYXNl
Q29udGV4dChTY3JpcHRFCiAKICAgICAvLyBGb3IgZGVidWcgYWNjb3VudGluZyBvbmx5LiBXZSBt
dXN0IGRvIHRoaXMgYmVmb3JlIHdlIHJlZ2lzdGVyIHRoZQogICAgIC8vIGluc3RhbmNlLiBUaGUg
YXNzZXJ0aW9ucyBhc3N1bWUgdGhpcy4KLSAgICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5k
aWRDb25zdHJ1Y3REYXRhYmFzZUNvbnRleHQoKTsgCisgICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5h
Z2VyKCkuZGlkQ29uc3RydWN0RGF0YWJhc2VDb250ZXh0KCk7CiAKICAgICBEYXRhYmFzZU1hbmFn
ZXI6Om1hbmFnZXIoKS5yZWdpc3RlckRhdGFiYXNlQ29udGV4dCh0aGlzKTsKIH0KQEAgLTE1MSw2
ICsxNTIsMTUgQEAgdm9pZCBEYXRhYmFzZUNvbnRleHQ6OnN0b3AoKQogICAgIHN0b3BEYXRhYmFz
ZXMoKTsKIH0KIAorUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiBEYXRhYmFzZUNv
bnRleHQ6OmJhY2tlbmQoKQoreworICAgIHJlZigpOworICAgIERhdGFiYXNlQmFja2VuZENvbnRl
eHQqIGJhY2tlbmQ7CisgICAgYmFja2VuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGF0YWJhc2VCYWNr
ZW5kQ29udGV4dCo+KHRoaXMpOworICAgIFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiBi
YWNrZW5kUmVmID0gYWRvcHRSZWYoYmFja2VuZCk7CisgICAgcmV0dXJuIGJhY2tlbmRSZWYucmVs
ZWFzZSgpOworfQorCiBEYXRhYmFzZVRocmVhZCogRGF0YWJhc2VDb250ZXh0OjpkYXRhYmFzZVRo
cmVhZCgpCiB7CiAgICAgaWYgKCFtX2RhdGFiYXNlVGhyZWFkICYmICFtX2hhc09wZW5EYXRhYmFz
ZXMpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VD
b250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZUNvbnRleHQuaAkocmV2aXNpb24gMTQxNjAyKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNiArMzgsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEYXRhYmFzZTsKK2Ns
YXNzIERhdGFiYXNlQmFja2VuZENvbnRleHQ7CiBjbGFzcyBEYXRhYmFzZVRhc2tTeW5jaHJvbml6
ZXI7CiBjbGFzcyBEYXRhYmFzZVRocmVhZDsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7
CkBAIC01MCwxNCArNTEsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0RGVz
dHJveWVkKCk7CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKIAotICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSB7IHJldHVybiBtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ7IH0KKyAgICBQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+IGJh
Y2tlbmQoKTsKICAgICBEYXRhYmFzZVRocmVhZCogZGF0YWJhc2VUaHJlYWQoKTsKIAogICAgIHZv
aWQgc2V0SGFzT3BlbkRhdGFiYXNlcygpIHsgbV9oYXNPcGVuRGF0YWJhc2VzID0gdHJ1ZTsgfQog
ICAgIGJvb2wgaGFzT3BlbkRhdGFiYXNlcygpIHsgcmV0dXJuIG1faGFzT3BlbkRhdGFiYXNlczsg
fQogCiAgICAgLy8gV2hlbiB0aGUgZGF0YWJhc2UgY2xlYW51cCBpcyBkb25lLCBjbGVhbnVwU3lu
YyB3aWxsIGJlIHNpZ25hbGxlZC4KLSAgICBib29sIHN0b3BEYXRhYmFzZXMoRGF0YWJhc2VUYXNr
U3luY2hyb25pemVyKik7CisgICAgYm9vbCBzdG9wRGF0YWJhc2VzKERhdGFiYXNlVGFza1N5bmNo
cm9uaXplciogY2xlYW51cFN5bmMpOwogCiAgICAgYm9vbCBhbGxvd0RhdGFiYXNlQWNjZXNzKCkg
Y29uc3Q7CiAgICAgdm9pZCBkYXRhYmFzZUV4Y2VlZGVkUXVvdGEoY29uc3QgU3RyaW5nJiBuYW1l
LCBEYXRhYmFzZURldGFpbHMpOwpAQCAtNzIsNiArNzMsNyBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9pc1JlZ2lzdGVyZWQ7CiAgICAgYm9vbCBtX2hhc1JlcXVlc3RlZFRlcm1pbmF0aW9uOwogCisg
ICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlQmFja2VuZENvbnRleHQ7CiAgICAgZnJpZW5kIGNsYXNz
IERhdGFiYXNlTWFuYWdlcjsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHAJKHJldmlzaW9uIDE0MTYw
MikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDE2IEBACiAKICNpbmNsdWRlICJEYXRh
YmFzZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZC5oIgorI2luY2x1ZGUgIkRhdGFiYXNl
QmFja2VuZEFzeW5jLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkRhdGFiYXNlQmFja2VuZFN5bmMuaCIKICNpbmNsdWRlICJEYXRhYmFzZUNhbGxiYWNr
LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VTeW5j
LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRGF0YWJh
c2VJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU2Ny
aXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogCkBAIC0xOTgsMzAgKzIwMiw1NSBAQCB2b2lkIERh
dGFiYXNlTWFuYWdlcjo6ZGlkRGVzdHJ1Y3REYXRhYmFzCiAKIFBhc3NSZWZQdHI8RGF0YWJhc2U+
IERhdGFiYXNlTWFuYWdlcjo6b3BlbkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsCiAgICAgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVy
c2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwKLSAgICB1bnNpZ25lZCBsb25nIGVzdGlt
YXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaywg
RXhjZXB0aW9uQ29kZSYgZSkKKyAgICB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NS
ZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaywKKyAgICBEYXRhYmFzZUVy
cm9yJiBlcnJvcikKIHsKKyAgICBTY3JpcHRDb250cm9sbGVyOjppbml0aWFsaXplVGhyZWFkaW5n
KCk7CiAgICAgUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0ID0gZGF0YWJh
c2VDb250ZXh0Rm9yKGNvbnRleHQpOworICAgIFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0
PiBiYWNrZW5kQ29udGV4dCA9IGRhdGFiYXNlQ29udGV4dC0+YmFja2VuZCgpOworICAgIEFTU0VS
VChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpOb25lKTsKIAotICAgIGlmICghY2FuRXN0YWJsaXNo
RGF0YWJhc2UoY29udGV4dCwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKSB7Ci0g
ICAgICAgIExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2UgJXMgZm9yIG9yaWdpbiAlcyBub3QgYWxs
b3dlZCB0byBiZSBlc3RhYmxpc2hlZCIsIG5hbWUuYXNjaWkoKS5kYXRhKCksIGNvbnRleHQtPnNl
Y3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlID0gYWRvcHRSZWYo
bmV3IERhdGFiYXNlKGRhdGFiYXNlQ29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNw
bGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpOwotCisgICAgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRh
YmFzZSA9ICFjcmVhdGlvbkNhbGxiYWNrOwogICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAg
aWYgKCFkYXRhYmFzZS0+b3BlbkFuZFZlcmlmeVZlcnNpb24oIWNyZWF0aW9uQ2FsbGJhY2ssIGUs
IGVycm9yTWVzc2FnZSkpIHsKLSAgICAgICAgZGF0YWJhc2UtPmxvZ0Vycm9yTWVzc2FnZShlcnJv
ck1lc3NhZ2UpOwotICAgICAgICByZW1vdmVPcGVuRGF0YWJhc2UoZGF0YWJhc2UuZ2V0KCkpOwot
ICAgICAgICByZXR1cm4gMDsKKyAgICBSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQXN5bmM+IGJhY2tl
bmQgPSBtX3NlcnZlci0+b3BlbkRhdGFiYXNlQXN5bmMoYmFja2VuZENvbnRleHQsIG5hbWUsIGV4
cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIHNldFZlcnNpb25Jbk5l
d0RhdGFiYXNlLCBlcnJvciwgZXJyb3JNZXNzYWdlKTsKKyAgICBpZiAoIWJhY2tlbmQpIHsKKyAg
ICAgICAgQVNTRVJUKGVycm9yICE9IERhdGFiYXNlRXJyb3I6Ok5vbmUpOworICAgICAgICBpZiAo
ZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6RGF0YWJhc2VJc0JlaW5nRGVsZXRlZCB8fCBlcnJvciA9
PSBEYXRhYmFzZUVycm9yOjpEYXRhYmFzZVNpemVPdmVyZmxvd2VkKQorICAgICAgICAgICAgZ290
byBjYW5ub3RDcmVhdGVEYXRhYmFzZTsKKyAgICAgICAgaWYgKGVycm9yID09IERhdGFiYXNlRXJy
b3I6OkRhdGFiYXNlU2l6ZUV4Y2VlZGVkUXVvdGEpIHsKKyAgICAgICAgICAgIC8vIE5vdGlmeSB0
aGUgY2xpZW50IHRoYXQgd2UndmUgZXhjZWVkZWQgdGhlIGRhdGFiYXNlIHF1b3RhLgorICAgICAg
ICAgICAgLy8gVGhlIGNsaWVudCBtYXkgd2FudCB0byBpbmNyZWFzZSB0aGUgcXVvdGEsIGFuZCB3
ZSdsbCBnaXZlIGl0CisgICAgICAgICAgICAvLyBvbmUgbW9yZSB0cnkgYWZ0ZXIgaWYgdGhhdCBp
cyB0aGUgY2FzZS4KKyAgICAgICAgICAgIGRhdGFiYXNlQ29udGV4dC0+ZGF0YWJhc2VFeGNlZWRl
ZFF1b3RhKG5hbWUsIERhdGFiYXNlRGV0YWlscyhuYW1lLmlzb2xhdGVkQ29weSgpLCBkaXNwbGF5
TmFtZS5pc29sYXRlZENvcHkoKSwgZXN0aW1hdGVkU2l6ZSwgMCkpOworCisgICAgICAgICAgICAv
LyBSZXNldCB0aGUgZXJyb3IgYmVmb3JlIHJldHJ5aW5nLgorICAgICAgICAgICAgZXJyb3IgPSBE
YXRhYmFzZUVycm9yOjpOb25lOworCisgICAgICAgICAgICAvLyBSZXRyeSBvcGVuaW5nIHRoZSBk
YXRhYmFzZSBpZiBwb3NzaWJsZS4KKyAgICAgICAgICAgIGJhY2tlbmQgPSBtX3NlcnZlci0+cmV0
cnlPcGVuRGF0YWJhc2VBc3luYyhiYWNrZW5kQ29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9u
LCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGVy
cm9yLCBlcnJvck1lc3NhZ2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFiYWNrZW5kKSB7
CisgICAgICAgICAgICBBU1NFUlQoZXJyb3IgIT0gRGF0YWJhc2VFcnJvcjo6Tm9uZSk7CisKKyAg
ICAgICAgICAgIGlmIChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpDYW5ub3RPcGVuRGF0YWJhc2Up
IHsKKyAgICAgICAgICAgICAgICBsb2dFcnJvck1lc3NhZ2UoY29udGV4dCwgZXJyb3JNZXNzYWdl
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsgLy8gRmFpbGVkIHRvIG9wZW4gdGhlIGRhdGFi
YXNlLgorICAgICAgICAgICAgfQorCitjYW5ub3RDcmVhdGVEYXRhYmFzZToKKyAgICAgICAgICAg
IExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2UgJXMgZm9yIG9yaWdpbiAlcyBub3QgYWxsb3dlZCB0
byBiZSBlc3RhYmxpc2hlZCIsIG5hbWUuYXNjaWkoKS5kYXRhKCksIGNvbnRleHQtPnNlY3VyaXR5
T3JpZ2luKCktPnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJu
IDA7IC8vIEZhaWxlZCB0byBvcGVuIHRoZSBkYXRhYmFzZS4KKyAgICAgICAgfQogICAgIH0KIAot
ICAgIHNldERhdGFiYXNlRGV0YWlscyhjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBuYW1lLCBk
aXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7Ci0gICAgZGF0YWJhc2VDb250ZXh0LT5zZXRIYXNP
cGVuRGF0YWJhc2VzKCk7CisgICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIGJhY2tlbmQsIHdlIGNh
biBjcmVhdGUgdGhlIGZyb250ZW5kIGRiIGZvciBpdDoKKyAgICBSZWZQdHI8RGF0YWJhc2U+IGRh
dGFiYXNlID0gRGF0YWJhc2U6OmNyZWF0ZShjb250ZXh0LCBiYWNrZW5kKTsKIAorICAgIGRhdGFi
YXNlQ29udGV4dC0+c2V0SGFzT3BlbkRhdGFiYXNlcygpOwogICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkT3BlbkRhdGFiYXNlKGNvbnRleHQsIGRhdGFiYXNlLCBjb250ZXh0LT5zZWN1
cml0eU9yaWdpbigpLT5ob3N0KCksIG5hbWUsIGV4cGVjdGVkVmVyc2lvbik7CiAKLSAgICBpZiAo
ZGF0YWJhc2UtPmlzTmV3KCkgJiYgY3JlYXRpb25DYWxsYmFjay5nZXQoKSkgeworICAgIGlmIChi
YWNrZW5kLT5pc05ldygpICYmIGNyZWF0aW9uQ2FsbGJhY2suZ2V0KCkpIHsKICAgICAgICAgTE9H
KFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2sgZm9y
IGRhdGFiYXNlICVwXG4iLCBkYXRhYmFzZS5nZXQoKSk7CiAgICAgICAgIGRhdGFiYXNlLT5tX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rh
c2s6OmNyZWF0ZShkYXRhYmFzZSwgY3JlYXRpb25DYWxsYmFjaykpOwogICAgIH0KQEAgLTIzMSwy
OCArMjYwLDUwIEBAIFBhc3NSZWZQdHI8RGF0YWJhc2U+IERhdGFiYXNlTWFuYWdlcjo6b3AKIAog
UGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IERhdGFiYXNlTWFuYWdlcjo6b3BlbkRhdGFiYXNlU3lu
YyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAogICAgIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5h
bWUsCi0gICAgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNl
Q2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIHVuc2ln
bmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVh
dGlvbkNhbGxiYWNrLCBEYXRhYmFzZUVycm9yJiBlcnJvcikKIHsKICAgICBSZWZQdHI8RGF0YWJh
c2VDb250ZXh0PiBkYXRhYmFzZUNvbnRleHQgPSBkYXRhYmFzZUNvbnRleHRGb3IoY29udGV4dCk7
CisgICAgUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+IGJhY2tlbmRDb250ZXh0ID0gZGF0
YWJhc2VDb250ZXh0LT5iYWNrZW5kKCk7CiAgICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRo
cmVhZCgpKTsKIAotICAgIGlmICghY2FuRXN0YWJsaXNoRGF0YWJhc2UoY29udGV4dCwgbmFtZSwg
ZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKSB7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAi
RGF0YWJhc2UgJXMgZm9yIG9yaWdpbiAlcyBub3QgYWxsb3dlZCB0byBiZSBlc3RhYmxpc2hlZCIs
IG5hbWUuYXNjaWkoKS5kYXRhKCksIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQ
dHI8RGF0YWJhc2VTeW5jPiBkYXRhYmFzZSA9IGFkb3B0UmVmKG5ldyBEYXRhYmFzZVN5bmMoZGF0
YWJhc2VDb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0
ZWRTaXplKSk7Ci0KKyAgICBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlID0gIWNyZWF0aW9u
Q2FsbGJhY2s7CiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAoIWRhdGFiYXNlLT5w
ZXJmb3JtT3BlbkFuZFZlcmlmeSghY3JlYXRpb25DYWxsYmFjaywgZWMsIGVycm9yTWVzc2FnZSkp
IHsKLSAgICAgICAgZGF0YWJhc2UtPmxvZ0Vycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpOwotICAg
ICAgICByZW1vdmVPcGVuRGF0YWJhc2UoZGF0YWJhc2UuZ2V0KCkpOwotICAgICAgICByZXR1cm4g
MDsKKyAgICBSZWZQdHI8RGF0YWJhc2VCYWNrZW5kU3luYz4gYmFja2VuZCA9IG1fc2VydmVyLT5v
cGVuRGF0YWJhc2VTeW5jKGJhY2tlbmRDb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRp
c3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZXJyb3Is
IGVycm9yTWVzc2FnZSk7CisgICAgaWYgKCFiYWNrZW5kKSB7CisgICAgICAgIEFTU0VSVChlcnJv
ciAhPSBEYXRhYmFzZUVycm9yOjpOb25lKTsKKyAgICAgICAgaWYgKGVycm9yID09IERhdGFiYXNl
RXJyb3I6OkRhdGFiYXNlSXNCZWluZ0RlbGV0ZWQgfHwgZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6
RGF0YWJhc2VTaXplT3ZlcmZsb3dlZCkKKyAgICAgICAgICAgIGdvdG8gY2Fubm90Q3JlYXRlRGF0
YWJhc2U7CisgICAgICAgIGlmIChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpEYXRhYmFzZVNpemVF
eGNlZWRlZFF1b3RhKSB7CisgICAgICAgICAgICAvLyBOb3RpZnkgdGhlIGNsaWVudCB0aGF0IHdl
J3ZlIGV4Y2VlZGVkIHRoZSBkYXRhYmFzZSBxdW90YS4KKyAgICAgICAgICAgIC8vIFRoZSBjbGll
bnQgbWF5IHdhbnQgdG8gaW5jcmVhc2UgdGhlIHF1b3RhLCBhbmQgd2UnbGwgZ2l2ZSBpdAorICAg
ICAgICAgICAgLy8gb25lIG1vcmUgdHJ5IGFmdGVyIGlmIHRoYXQgaXMgdGhlIGNhc2UuCisgICAg
ICAgICAgICBkYXRhYmFzZUNvbnRleHQtPmRhdGFiYXNlRXhjZWVkZWRRdW90YShuYW1lLCBEYXRh
YmFzZURldGFpbHMobmFtZS5pc29sYXRlZENvcHkoKSwgZGlzcGxheU5hbWUuaXNvbGF0ZWRDb3B5
KCksIGVzdGltYXRlZFNpemUsIDApKTsKKworICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGVycm9y
IGJlZm9yZSByZXRyeWluZy4KKyAgICAgICAgICAgIGVycm9yID0gRGF0YWJhc2VFcnJvcjo6Tm9u
ZTsKKworICAgICAgICAgICAgLy8gUmV0cnkgb3BlbmluZyB0aGUgZGF0YWJhc2UgaWYgcG9zc2li
bGUuCisgICAgICAgICAgICBiYWNrZW5kID0gbV9zZXJ2ZXItPnJldHJ5T3BlbkRhdGFiYXNlU3lu
YyhiYWNrZW5kQ29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0
aW1hdGVkU2l6ZSwgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGVycm9yLCBlcnJvck1lc3NhZ2Up
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFiYWNrZW5kKSB7CisgICAgICAgICAgICBBU1NF
UlQoZXJyb3IgIT0gRGF0YWJhc2VFcnJvcjo6Tm9uZSk7CisKKyAgICAgICAgICAgIGlmIChlcnJv
ciA9PSBEYXRhYmFzZUVycm9yOjpDYW5ub3RPcGVuRGF0YWJhc2UpIHsKKyAgICAgICAgICAgICAg
ICBsb2dFcnJvck1lc3NhZ2UoY29udGV4dCwgZXJyb3JNZXNzYWdlKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsgLy8gRmFpbGVkIHRvIG9wZW4gdGhlIGRhdGFiYXNlLgorICAgICAgICAgICAg
fQorCitjYW5ub3RDcmVhdGVEYXRhYmFzZToKKyAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAi
RGF0YWJhc2UgJXMgZm9yIG9yaWdpbiAlcyBub3QgYWxsb3dlZCB0byBiZSBlc3RhYmxpc2hlZCIs
IG5hbWUuYXNjaWkoKS5kYXRhKCksIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIDA7IC8vIEZhaWxlZCB0byBv
cGVuIHRoZSBkYXRhYmFzZS4KKyAgICAgICAgfQogICAgIH0KIAotICAgIHNldERhdGFiYXNlRGV0
YWlscyhjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1h
dGVkU2l6ZSk7CisgICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIGJhY2tlbmQsIHdlIGNhbiBjcmVh
dGUgdGhlIGZyb250ZW5kIGRiIGZvciBpdDoKKyAgICBSZWZQdHI8RGF0YWJhc2VTeW5jPiBkYXRh
YmFzZSA9IERhdGFiYXNlU3luYzo6Y3JlYXRlKGNvbnRleHQsIGJhY2tlbmQpOwogCi0gICAgaWYg
KGRhdGFiYXNlLT5pc05ldygpICYmIGNyZWF0aW9uQ2FsbGJhY2suZ2V0KCkpIHsKKyAgICBpZiAo
YmFja2VuZC0+aXNOZXcoKSAmJiBjcmVhdGlvbkNhbGxiYWNrLmdldCgpKSB7CiAgICAgICAgIExP
RyhTdG9yYWdlQVBJLCAiSW52b2tpbmcgdGhlIGNyZWF0aW9uIGNhbGxiYWNrIGZvciBkYXRhYmFz
ZSAlcFxuIiwgZGF0YWJhc2UuZ2V0KCkpOwogICAgICAgICBjcmVhdGlvbkNhbGxiYWNrLT5oYW5k
bGVFdmVudChkYXRhYmFzZS5nZXQoKSk7CiAgICAgfQpAQCAtMjY1LDcgKzMxNiw3IEBAIGJvb2wg
RGF0YWJhc2VNYW5hZ2VyOjpoYXNPcGVuRGF0YWJhc2VzKFMKICAgICBSZWZQdHI8RGF0YWJhc2VD
b250ZXh0PiBkYXRhYmFzZUNvbnRleHQgPSBleGlzdGluZ0RhdGFiYXNlQ29udGV4dEZvcihjb250
ZXh0KTsKICAgICBpZiAoIWRhdGFiYXNlQ29udGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiBkYXRhYmFzZUNvbnRleHQtPm1faGFzT3BlbkRhdGFiYXNlczsKKyAgICByZXR1
cm4gZGF0YWJhc2VDb250ZXh0LT5oYXNPcGVuRGF0YWJhc2VzKCk7CiB9CiAKIHZvaWQgRGF0YWJh
c2VNYW5hZ2VyOjpzdG9wRGF0YWJhc2VzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IERhdGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyKQpAQCAtMzUzLDMzICs0MDQs
MjAgQEAgdm9pZCBEYXRhYmFzZU1hbmFnZXI6OmNsb3NlRGF0YWJhc2VzSW1tZQogdm9pZCBEYXRh
YmFzZU1hbmFnZXI6OmludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKIHsKICAgICBSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBkYXRh
YmFzZUNvbnRleHQgPSBleGlzdGluZ0RhdGFiYXNlQ29udGV4dEZvcihjb250ZXh0KTsKLSAgICBp
ZiAoZGF0YWJhc2VDb250ZXh0KQotICAgICAgICBtX3NlcnZlci0+aW50ZXJydXB0QWxsRGF0YWJh
c2VzRm9yQ29udGV4dChjb250ZXh0KTsKLX0KLQotYm9vbCBEYXRhYmFzZU1hbmFnZXI6OmNhbkVz
dGFibGlzaERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3Rp
bWF0ZWRTaXplKQotewotICAgIHJldHVybiBtX3NlcnZlci0+Y2FuRXN0YWJsaXNoRGF0YWJhc2Uo
Y29udGV4dCwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpOwotfQotCi12b2lkIERh
dGFiYXNlTWFuYWdlcjo6YWRkT3BlbkRhdGFiYXNlKERhdGFiYXNlQmFja2VuZCogZGF0YWJhc2Up
Ci17Ci0gICAgbV9zZXJ2ZXItPmFkZE9wZW5EYXRhYmFzZShkYXRhYmFzZSk7Ci19Ci0KLXZvaWQg
RGF0YWJhc2VNYW5hZ2VyOjpyZW1vdmVPcGVuRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kKiBkYXRh
YmFzZSkKLXsKLSAgICBtX3NlcnZlci0+cmVtb3ZlT3BlbkRhdGFiYXNlKGRhdGFiYXNlKTsKKyAg
ICBpZiAoZGF0YWJhc2VDb250ZXh0KSB7CisgICAgICAgIFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRD
b250ZXh0PiBiYWNrZW5kQ29udGV4dCA9IGRhdGFiYXNlQ29udGV4dC0+YmFja2VuZCgpOworICAg
ICAgICBtX3NlcnZlci0+aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChkYXRhYmFzZUNv
bnRleHQtPmJhY2tlbmQoKS5nZXQoKSk7CisgICAgfQogfQogCi12b2lkIERhdGFiYXNlTWFuYWdl
cjo6c2V0RGF0YWJhc2VEZXRhaWxzKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0
ZWRTaXplKQordW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlTWFuYWdlcjo6Z2V0TWF4U2l6ZUZv
ckRhdGFiYXNlKGNvbnN0IERhdGFiYXNlQmFja2VuZCogZGF0YWJhc2UpCiB7Ci0gICAgbV9zZXJ2
ZXItPnNldERhdGFiYXNlRGV0YWlscyhvcmlnaW4sIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0
ZWRTaXplKTsKKyAgICByZXR1cm4gbV9zZXJ2ZXItPmdldE1heFNpemVGb3JEYXRhYmFzZShkYXRh
YmFzZSk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZU1hbmFnZXI6OmdldE1heFNp
emVGb3JEYXRhYmFzZShjb25zdCBEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQordm9pZCBEYXRh
YmFzZU1hbmFnZXI6OmxvZ0Vycm9yTWVzc2FnZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgcmV0dXJuIG1fc2VydmVyLT5nZXRN
YXhTaXplRm9yRGF0YWJhc2UoZGF0YWJhc2UpOworICAgIGNvbnRleHQtPmFkZENvbnNvbGVNZXNz
YWdlKE90aGVyTWVzc2FnZVNvdXJjZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmgJKHJldmlzaW9uIDE0MTYwMikK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDkgQEAKIAogI2lmIEVOQUJMRShTUUxfREFUQUJB
U0UpCiAKLSNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlU2VydmVyLmgiCiAjaW5jbHVkZSAiRGF0
YWJhc2VCYXNpY1R5cGVzLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgiCisjaW5jbHVk
ZSAiRGF0YWJhc2VFcnJvci5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtMzksNiAr
NDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFic3RyYWN0RGF0YWJhc2VTZXJ2
ZXI7CiBjbGFzcyBEYXRhYmFzZTsKK2NsYXNzIERhdGFiYXNlQmFja2VuZDsKIGNsYXNzIERhdGFi
YXNlQ2FsbGJhY2s7CiBjbGFzcyBEYXRhYmFzZUNvbnRleHQ7CiBjbGFzcyBEYXRhYmFzZU1hbmFn
ZXJDbGllbnQ7CkBAIC03Nyw4ICs3OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZERlc3RydWN0
RGF0YWJhc2VDb250ZXh0KCkgeyB9CiAjZW5kaWYKIAotICAgIFBhc3NSZWZQdHI8RGF0YWJhc2U+
IG9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFt
ZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJh
Y2s+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IG9wZW5E
YXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUs
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNr
PiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8RGF0YWJhc2U+IG9wZW5EYXRhYmFz
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQg
bG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+LCBEYXRhYmFz
ZUVycm9yJik7CisgICAgUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IG9wZW5EYXRhYmFzZVN5bmMo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxv
bmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiwgRGF0YWJhc2VF
cnJvciYpOwogCiAgICAgYm9vbCBoYXNPcGVuRGF0YWJhc2VzKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqKTsKICAgICB2b2lkIHN0b3BEYXRhYmFzZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIERh
dGFiYXNlVGFza1N5bmNocm9uaXplciopOwpAQCAtMTExLDExICsxMTMsNiBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCopOwogCi0gICAgYm9vbCBjYW5Fc3RhYmxpc2hEYXRhYmFzZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1l
LCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwotICAgIHZvaWQgYWRkT3BlbkRhdGFiYXNl
KERhdGFiYXNlQmFja2VuZCopOwotICAgIHZvaWQgcmVtb3ZlT3BlbkRhdGFiYXNlKERhdGFiYXNl
QmFja2VuZCopOwotCi0gICAgdm9pZCBzZXREYXRhYmFzZURldGFpbHMoU2VjdXJpdHlPcmlnaW4q
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVk
IGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIGdldE1heFNpemVG
b3JEYXRhYmFzZShjb25zdCBEYXRhYmFzZUJhY2tlbmQqKTsKIAogcHJpdmF0ZToKQEAgLTEyNiw2
ICsxMjMsOCBAQCBwcml2YXRlOgogICAgIC8vIGl0IGFscmVhZHkgZXhpc3QgcHJldmlvdXNseS4g
T3RoZXJ3aXNlLCBpdCByZXR1cm5zIDAuCiAgICAgUGFzc1JlZlB0cjxEYXRhYmFzZUNvbnRleHQ+
IGV4aXN0aW5nRGF0YWJhc2VDb250ZXh0Rm9yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAor
ICAgIHN0YXRpYyB2b2lkIGxvZ0Vycm9yTWVzc2FnZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKwogICAgIEFic3RyYWN0RGF0YWJhc2VTZXJ2ZXIqIG1f
c2VydmVyOwogICAgIERhdGFiYXNlTWFuYWdlckNsaWVudCogbV9jbGllbnQ7CiAgICAgYm9vbCBt
X2RhdGFiYXNlSXNBdmFpbGFibGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmNwcAkocmV2aXNpb24gMTQxNjAyKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVNlcnZlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDkgQEAKIAogI2lmIEVOQUJMRShTUUxfREFUQUJB
U0UpCiAKKyNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRBc3luYy5oIgorI2luY2x1ZGUgIkRhdGFi
YXNlQmFja2VuZENvbnRleHQuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRTeW5jLmgiCiAj
aW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+
CiAKQEAgLTE0MSwyOSArMTQ0LDYxIEBAIHZvaWQgRGF0YWJhc2VTZXJ2ZXI6OmNsb3NlRGF0YWJh
c2VzSW1tZWQKIH0KICNlbmRpZiAvLyBQTEFURk9STShDSFJPTUlVTSkKIAotdm9pZCBEYXRhYmFz
ZVNlcnZlcjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0KQordm9pZCBEYXRhYmFzZVNlcnZlcjo6aW50ZXJydXB0QWxs
RGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBEYXRhYmFzZUJhY2tlbmRDb250ZXh0KiBjb250ZXh0
KQogewogICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmludGVycnVwdEFsbERhdGFiYXNl
c0ZvckNvbnRleHQoY29udGV4dCk7CiB9CiAKLWJvb2wgRGF0YWJhc2VTZXJ2ZXI6OmNhbkVzdGFi
bGlzaERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0
ZWRTaXplKQorUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRBc3luYz4gRGF0YWJhc2VTZXJ2ZXI6
Om9wZW5EYXRhYmFzZUFzeW5jKFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiYgYmFja2Vu
ZENvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNp
b24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciAmZXJyb3IsIFN0
cmluZyYgZXJyb3JNZXNzYWdlKQogewotICAgIHJldHVybiBEYXRhYmFzZVRyYWNrZXI6OnRyYWNr
ZXIoKS5jYW5Fc3RhYmxpc2hEYXRhYmFzZShjb250ZXh0LCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0
aW1hdGVkU2l6ZSk7CisgICAgUmVmUHRyPERhdGFiYXNlQmFja2VuZEFzeW5jPiBkYXRhYmFzZTsK
KyAgICBpZiAoRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuY2FuRXN0YWJsaXNoRGF0YWJhc2Uo
YmFja2VuZENvbnRleHQuZ2V0KCksIG5hbWUsIGVzdGltYXRlZFNpemUsIGVycm9yKSkKKyAgICAg
ICAgZGF0YWJhc2UgPSBjcmVhdGVEYXRhYmFzZUFzeW5jKGJhY2tlbmRDb250ZXh0LCBuYW1lLCBl
eHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBzZXRWZXJzaW9uSW5O
ZXdEYXRhYmFzZSwgZXJyb3IsIGVycm9yTWVzc2FnZSk7CisgICAgcmV0dXJuIGRhdGFiYXNlLnJl
bGVhc2UoKTsKIH0KIAotdm9pZCBEYXRhYmFzZVNlcnZlcjo6YWRkT3BlbkRhdGFiYXNlKERhdGFi
YXNlQmFja2VuZCogZGF0YWJhc2UpCitQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZEFzeW5jPiBE
YXRhYmFzZVNlcnZlcjo6cmV0cnlPcGVuRGF0YWJhc2VBc3luYyhSZWZQdHI8RGF0YWJhc2VCYWNr
ZW5kQ29udGV4dD4mIGJhY2tlbmRDb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25l
ZCBsb25nIGVzdGltYXRlZFNpemUsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFi
YXNlRXJyb3IgJmVycm9yLCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKIHsKLSAgICBEYXRhYmFzZVRy
YWNrZXI6OnRyYWNrZXIoKS5hZGRPcGVuRGF0YWJhc2UoZGF0YWJhc2UpOworICAgIFJlZlB0cjxE
YXRhYmFzZUJhY2tlbmRBc3luYz4gZGF0YWJhc2U7CisgICAgaWYgKERhdGFiYXNlVHJhY2tlcjo6
dHJhY2tlcigpLnJldHJ5Q2FuRXN0YWJsaXNoRGF0YWJhc2UoYmFja2VuZENvbnRleHQuZ2V0KCks
IG5hbWUsIGVzdGltYXRlZFNpemUsIGVycm9yKSkKKyAgICAgICAgZGF0YWJhc2UgPSBjcmVhdGVE
YXRhYmFzZUFzeW5jKGJhY2tlbmRDb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3Bs
YXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZXJyb3IsIGVy
cm9yTWVzc2FnZSk7CisgICAgcmV0dXJuIGRhdGFiYXNlLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBE
YXRhYmFzZVNlcnZlcjo6cmVtb3ZlT3BlbkRhdGFiYXNlKERhdGFiYXNlQmFja2VuZCogZGF0YWJh
c2UpCitQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZEFzeW5jPiBEYXRhYmFzZVNlcnZlcjo6Y3Jl
YXRlRGF0YWJhc2VBc3luYyhSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4mIGJhY2tlbmRD
b250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9u
LCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUs
IGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3IgJmVycm9yLCBTdHJp
bmcmIGVycm9yTWVzc2FnZSkKIHsKLSAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5yZW1v
dmVPcGVuRGF0YWJhc2UoZGF0YWJhc2UpOworICAgIFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRBc3lu
Yz4gZGF0YWJhc2U7CisgICAgZGF0YWJhc2UgPSBhZG9wdFJlZihuZXcgRGF0YWJhc2VCYWNrZW5k
QXN5bmMoYmFja2VuZENvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUs
IGVzdGltYXRlZFNpemUpKTsKKyAgICBpZiAoIWRhdGFiYXNlLT5vcGVuQW5kVmVyaWZ5VmVyc2lv
bihzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZXJyb3IsIGVycm9yTWVzc2FnZSkpCisgICAgICAg
IHJldHVybiAwOworICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldERhdGFiYXNlRGV0
YWlscyhiYWNrZW5kQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgbmFtZSwgZGlzcGxheU5hbWUs
IGVzdGltYXRlZFNpemUpOworICAgIHJldHVybiBkYXRhYmFzZS5yZWxlYXNlKCk7CiB9CiAKLXZv
aWQgRGF0YWJhc2VTZXJ2ZXI6OnNldERhdGFiYXNlRGV0YWlscyhTZWN1cml0eU9yaWdpbiogb3Jp
Z2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2ln
bmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKK1Bhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kU3luYz4g
RGF0YWJhc2VTZXJ2ZXI6Om9wZW5EYXRhYmFzZVN5bmMoUmVmUHRyPERhdGFiYXNlQmFja2VuZENv
bnRleHQ+JiBiYWNrZW5kQ29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9u
ZyBlc3RpbWF0ZWRTaXplLCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVy
cm9yICZlcnJvciwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgRGF0YWJhc2VUcmFja2Vy
Ojp0cmFja2VyKCkuc2V0RGF0YWJhc2VEZXRhaWxzKG9yaWdpbiwgbmFtZSwgZGlzcGxheU5hbWUs
IGVzdGltYXRlZFNpemUpOworICAgIFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRTeW5jPiBkYXRhYmFz
ZTsKKyAgICBpZiAoRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuY2FuRXN0YWJsaXNoRGF0YWJh
c2UoYmFja2VuZENvbnRleHQuZ2V0KCksIG5hbWUsIGVzdGltYXRlZFNpemUsIGVycm9yKSkKKyAg
ICAgICAgZGF0YWJhc2UgPSBjcmVhdGVEYXRhYmFzZVN5bmMoYmFja2VuZENvbnRleHQsIG5hbWUs
IGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIHNldFZlcnNpb25J
bk5ld0RhdGFiYXNlLCBlcnJvciwgZXJyb3JNZXNzYWdlKTsKKyAgICByZXR1cm4gZGF0YWJhc2Uu
cmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZFN5bmM+IERhdGFiYXNl
U2VydmVyOjpyZXRyeU9wZW5EYXRhYmFzZVN5bmMoUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRl
eHQ+JiBiYWNrZW5kQ29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4
cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBl
c3RpbWF0ZWRTaXplLCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9y
ICZlcnJvciwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCit7CisgICAgUmVmUHRyPERhdGFiYXNlQmFj
a2VuZFN5bmM+IGRhdGFiYXNlOworICAgIGlmIChEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5y
ZXRyeUNhbkVzdGFibGlzaERhdGFiYXNlKGJhY2tlbmRDb250ZXh0LmdldCgpLCBuYW1lLCBlc3Rp
bWF0ZWRTaXplLCBlcnJvcikpCisgICAgICAgIGRhdGFiYXNlID0gY3JlYXRlRGF0YWJhc2VTeW5j
KGJhY2tlbmRDb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3Rp
bWF0ZWRTaXplLCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZXJyb3IsIGVycm9yTWVzc2FnZSk7
CisgICAgcmV0dXJuIGRhdGFiYXNlLnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxEYXRhYmFz
ZUJhY2tlbmRTeW5jPiBEYXRhYmFzZVNlcnZlcjo6Y3JlYXRlRGF0YWJhc2VTeW5jKFJlZlB0cjxE
YXRhYmFzZUJhY2tlbmRDb250ZXh0PiYgYmFja2VuZENvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5h
bWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRh
YmFzZSwgRGF0YWJhc2VFcnJvciAmZXJyb3IsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQoreworICAg
IFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRTeW5jPiBkYXRhYmFzZTsKKyAgICBkYXRhYmFzZSA9IGFk
b3B0UmVmKG5ldyBEYXRhYmFzZUJhY2tlbmRTeW5jKGJhY2tlbmRDb250ZXh0LCBuYW1lLCBleHBl
Y3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSk7CisgICAgaWYgKCFkYXRh
YmFzZS0+cGVyZm9ybU9wZW5BbmRWZXJpZnkoc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGVycm9y
LCBlcnJvck1lc3NhZ2UpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBEYXRhYmFzZVRyYWNrZXI6
OnRyYWNrZXIoKS5zZXREYXRhYmFzZURldGFpbHMoYmFja2VuZENvbnRleHQtPnNlY3VyaXR5T3Jp
Z2luKCksIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsKKyAgICByZXR1cm4gZGF0
YWJhc2UucmVsZWFzZSgpOwogfQogCiB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VTZXJ2ZXI6
OmdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVNlcnZlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VTZXJ2ZXIuaAkocmV2aXNpb24gMTQxNjAyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZVNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSwx
NCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFN0cmluZyBmdWxsUGF0aEZvckRhdGFiYXNlKFNl
Y3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmRG9lc05vdEV4
aXN0KTsKIAorICAgIC8vIE9wZW5pbmcgYW4gYXN5bmMgZGF0YWJhc2U6CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZEFzeW5jPiBvcGVuRGF0YWJhc2VBc3luYyhSZWZQdHI8
RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4mLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNl
RXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPERh
dGFiYXNlQmFja2VuZEFzeW5jPiByZXRyeU9wZW5EYXRhYmFzZUFzeW5jKFJlZlB0cjxEYXRhYmFz
ZUJhY2tlbmRDb250ZXh0PiYsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBl
Y3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0
aW1hdGVkU2l6ZSwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYs
IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKKworICAgIC8vIE9wZW5pbmcgYW4gc3luYyBkYXRhYmFz
ZToKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kU3luYz4gb3BlbkRhdGFi
YXNlU3luYyhSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4mLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlO
YW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0
YWJhc2UsIERhdGFiYXNlRXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZFN5bmM+IHJldHJ5T3BlbkRhdGFiYXNlU3luYyhS
ZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4mLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNp
Z25lZCBsb25nIGVzdGltYXRlZFNpemUsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERh
dGFiYXNlRXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CisKICNpZiAhUExBVEZPUk0oQ0hS
T01JVU0pCiAgICAgdmlydHVhbCBib29sIGhhc0VudHJ5Rm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2lu
Kik7CiAgICAgdmlydHVhbCB2b2lkIG9yaWdpbnMoVmVjdG9yPFJlZlB0cjxTZWN1cml0eU9yaWdp
bj4gPiYgcmVzdWx0KTsKQEAgLTY4LDE0ICs3NiwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGNsb3NlRGF0YWJhc2VzSW1tZWRpYXRlbHkoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlm
aWVyLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogI2VuZGlmIC8vIFBMQVRGT1JNKENIUk9NSVVNKQog
Ci0gICAgdmlydHVhbCB2b2lkIGludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoY29uc3Qg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwotCi0gICAgdmlydHVhbCBib29sIGNhbkVzdGFibGlz
aERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7Ci0g
ICAgdmlydHVhbCB2b2lkIGFkZE9wZW5EYXRhYmFzZShEYXRhYmFzZUJhY2tlbmQqKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlT3BlbkRhdGFiYXNlKERhdGFiYXNlQmFja2VuZCopOworICAgIHZp
cnR1YWwgdm9pZCBpbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IERhdGFiYXNl
QmFja2VuZENvbnRleHQqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhYmFzZURldGFpbHMo
U2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxh
eU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAgICAgdmlydHVhbCB1bnNpZ25l
ZCBsb25nIGxvbmcgZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IERhdGFiYXNlQmFja2VuZCop
OworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZEFz
eW5jPiBjcmVhdGVEYXRhYmFzZUFzeW5jKFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiYs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0
IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgYm9vbCBz
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYgZXJyb3JNZXNz
YWdlKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kU3luYz4gY3JlYXRl
RGF0YWJhc2VTeW5jKFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiYsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlz
cGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgYm9vbCBzZXRWZXJzaW9uSW5O
ZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5jcHAJKHJldmlzaW9uIDE0MTYwMikKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzMsOSArMzMsMTIgQEAKIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0Up
CiAKKyNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmgiCisjaW5jbHVkZSAiRGF0YWJh
c2VCYWNrZW5kU3luYy5oIgogI2luY2x1ZGUgIkRhdGFiYXNlQ2FsbGJhY2suaCIKICNpbmNsdWRl
ICJEYXRhYmFzZUNvbnRleHQuaCIKICNpbmNsdWRlICJEYXRhYmFzZU1hbmFnZXIuaCIKKyNpbmNs
dWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAi
U1FMRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25TeW5jLmgiCkBAIC00OCw3
ICs1MSwxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURhdGFiYXNlU3luYzo6RGF0YWJh
c2VTeW5jKFBhc3NSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBkYXRhYmFzZUNvbnRleHQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCisvLyBGSVhNRTog
VGhlIERhdGFiYXNlTWFuYWdlciBuZWVkcyB0byBjcmVhdGUgYSBEYXRhYmFzZVN5bmMgaW5zdGFu
Y2UgZnJvbSBpdHMgYmFja2VuZC4KKy8vIFRoaXMgZmFjdG9yeSBtZXRob2QgaXMgYSB0ZW1wb3Jh
cnkgd29ya2Fyb3VuZCB0byB0aGF0IERhdGFiYXNlTWFuYWdlciBuZWVkLgorLy8gV2hlbiB0aGUg
YmFja2VuZCBoYXMgYWN0dWFsbHkgYmVlbiBzcGxpdCBvdXQgZnJvbSB0aGUgRGF0YWJhc2VTeW5j
LCB3ZSBzaG91bGQgYmUKKy8vIHVzaW5nIHRoZSB1cGRhdGVkIERhdGFiYXNlIGNvbnN0cnVjdG9y
IGluc3RlYWQgb2YgdGhpcyB3b3JrYXJvdW5kLCBhbmQgdGhpcworLy8gbWV0aG9kIHNob3VsZCBi
ZSBkZWxldGVkLgorUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IERhdGFiYXNlU3luYzo6Y3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZFN5bmM+
IGJhY2tlbmQpCit7CisgICAgcmV0dXJuIGJhY2tlbmQ7Cit9CisKK0RhdGFiYXNlU3luYzo6RGF0
YWJhc2VTeW5jKFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4gZGF0YWJhc2VDb250
ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5z
aWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQogICAgIDogRGF0YWJhc2VCYWNrZW5kKGRhdGFiYXNl
Q29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6
ZSwgU3luY0RhdGFiYXNlKQogewpAQCAtNTcsMTEgKzcwLDYgQEAgRGF0YWJhc2VTeW5jOjpEYXRh
YmFzZVN5bmMoUGFzc1JlZlB0cjxEYQogRGF0YWJhc2VTeW5jOjp+RGF0YWJhc2VTeW5jKCkKIHsK
ICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7
Ci0KLSAgICBpZiAob3BlbmVkKCkpIHsKLSAgICAgICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2Vy
KCkucmVtb3ZlT3BlbkRhdGFiYXNlKHRoaXMpOwotICAgICAgICBjbG9zZURhdGFiYXNlKCk7Ci0g
ICAgfQogfQogCiB2b2lkIERhdGFiYXNlU3luYzo6Y2hhbmdlVmVyc2lvbihjb25zdCBTdHJpbmcm
IG9sZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgbmV3VmVyc2lvbiwgUGFzc1JlZlB0cjxTUUxUcmFu
c2FjdGlvblN5bmNDYWxsYmFjaz4gY2hhbmdlVmVyc2lvbkNhbGxiYWNrLCBFeGNlcHRpb25Db2Rl
JiBlYykKQEAgLTE4Myw3ICsxOTEsNiBAQCB2b2lkIERhdGFiYXNlU3luYzo6Y2xvc2VJbW1lZGlh
dGVseSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGxvZ0Vycm9yTWVzc2FnZSgiZm9yY2libHkg
Y2xvc2luZyBkYXRhYmFzZSIpOwotICAgIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLnJlbW92
ZU9wZW5EYXRhYmFzZSh0aGlzKTsKICAgICBjbG9zZURhdGFiYXNlKCk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuaAko
cmV2aXNpb24gMTQxNjAyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZVN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIERhdGFiYXNlQmFja2VuZFN5bmM7CiBjbGFzcyBEYXRhYmFz
ZUNhbGxiYWNrOwogY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jOwogY2xhc3MgU1FMVHJhbnNhY3Rp
b25TeW5jQ2FsbGJhY2s7CkBAIC03MywxMyArNzQsMTcgQEAgcHVibGljOgogICAgIH0KIAogcHJp
dmF0ZToKLSAgICBEYXRhYmFzZVN5bmMoUGFzc1JlZlB0cjxEYXRhYmFzZUNvbnRleHQ+LCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAorICAgIERhdGFi
YXNlU3luYyhQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAogICAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwor
ICAgIERhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxEYXRh
YmFzZUJhY2tlbmRTeW5jPik7IC8vIEZJWE1FOiBub3QgaW1wbGVtZW50ZWQgJiB1c2VkIHlldC4K
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IGNyZWF0ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRTeW5jPik7CisKICAgICB2b2lk
IHJ1blRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBi
b29sIHJlYWRPbmx5LCBFeGNlcHRpb25Db2RlJik7CiAKICAgICBTdHJpbmcgbV9sYXN0RXJyb3JN
ZXNzYWdlOwogCiAgICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlTWFuYWdlcjsKKyAgICBmcmllbmQg
Y2xhc3MgRGF0YWJhc2VCYWNrZW5kU3luYzsgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHdoZW4gdGhl
IGJhY2tlbmQgaGFzIGJlZW4gc3BsaXQgb3V0LgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRhc2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VUYXNrLmNwcAkocmV2aXNpb24gMTQxNjAyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRhc2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCwxMCAr
OTgsMTAgQEAgdm9pZCBEYXRhYmFzZVRhc2s6OnBlcmZvcm1UYXNrKCkKIC8vICoqKiBEYXRhYmFz
ZU9wZW5UYXNrICoqKgogLy8gT3BlbnMgdGhlIGRhdGFiYXNlIGZpbGUgYW5kIHZlcmlmaWVzIHRo
ZSB2ZXJzaW9uIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHZlcnNpb24uCiAKLURhdGFiYXNlOjpEYXRh
YmFzZU9wZW5UYXNrOjpEYXRhYmFzZU9wZW5UYXNrKERhdGFiYXNlKiBkYXRhYmFzZSwgYm9vbCBz
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJv
bml6ZXIsIEV4Y2VwdGlvbkNvZGUmIGNvZGUsIFN0cmluZyYgZXJyb3JNZXNzYWdlLCBib29sJiBz
dWNjZXNzKQorRGF0YWJhc2U6OkRhdGFiYXNlT3BlblRhc2s6OkRhdGFiYXNlT3BlblRhc2soRGF0
YWJhc2UqIGRhdGFiYXNlLCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZVRh
c2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwgRGF0YWJhc2VFcnJvciYgZXJyb3IsIFN0cmlu
ZyYgZXJyb3JNZXNzYWdlLCBib29sJiBzdWNjZXNzKQogICAgIDogRGF0YWJhc2VUYXNrKGRhdGFi
YXNlLCBzeW5jaHJvbml6ZXIpCiAgICAgLCBtX3NldFZlcnNpb25Jbk5ld0RhdGFiYXNlKHNldFZl
cnNpb25Jbk5ld0RhdGFiYXNlKQotICAgICwgbV9jb2RlKGNvZGUpCisgICAgLCBtX2Vycm9yKGVy
cm9yKQogICAgICwgbV9lcnJvck1lc3NhZ2UoZXJyb3JNZXNzYWdlKQogICAgICwgbV9zdWNjZXNz
KHN1Y2Nlc3MpCiB7CkBAIC0xMTEsNyArMTExLDcgQEAgRGF0YWJhc2U6OkRhdGFiYXNlT3BlblRh
c2s6OkRhdGFiYXNlT3Blbgogdm9pZCBEYXRhYmFzZTo6RGF0YWJhc2VPcGVuVGFzazo6ZG9QZXJm
b3JtVGFzaygpCiB7CiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBtX3N1Y2Nlc3MgPSBk
YXRhYmFzZSgpLT5wZXJmb3JtT3BlbkFuZFZlcmlmeShtX3NldFZlcnNpb25Jbk5ld0RhdGFiYXNl
LCBtX2NvZGUsIGVycm9yTWVzc2FnZSk7CisgICAgbV9zdWNjZXNzID0gZGF0YWJhc2UoKS0+cGVy
Zm9ybU9wZW5BbmRWZXJpZnkobV9zZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgbV9lcnJvciwgZXJy
b3JNZXNzYWdlKTsKICAgICBpZiAoIW1fc3VjY2VzcykKICAgICAgICAgbV9lcnJvck1lc3NhZ2Ug
PSBlcnJvck1lc3NhZ2UuaXNvbGF0ZWRDb3B5KCk7CiB9CkBAIC0xMzMsNyArMTMzLDcgQEAgRGF0
YWJhc2U6OkRhdGFiYXNlQ2xvc2VUYXNrOjpEYXRhYmFzZUNsbwogCiB2b2lkIERhdGFiYXNlOjpE
YXRhYmFzZUNsb3NlVGFzazo6ZG9QZXJmb3JtVGFzaygpCiB7Ci0gICAgZGF0YWJhc2UoKS0+Y2xv
c2UoKTsKKyAgICBkYXRhYmFzZSgpLT5jbG9zZTEoKTsKIH0KIAogI2lmICFMT0dfRElTQUJMRUQK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUYXNrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZVRhc2suaAkocmV2aXNpb24gMTQxNjAyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRhc2suaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
CiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIKICNpbmNsdWRlICJEYXRhYmFzZUJhc2ljVHlwZXMuaCIK
KyNpbmNsdWRlICJEYXRhYmFzZUVycm9yLmgiCiAjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb24uaCIK
ICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KQEAg
LTk5LDEzICsxMDAsMTMgQEAgcHJpdmF0ZToKIAogY2xhc3MgRGF0YWJhc2U6OkRhdGFiYXNlT3Bl
blRhc2sgOiBwdWJsaWMgRGF0YWJhc2VUYXNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093
blB0cjxEYXRhYmFzZU9wZW5UYXNrPiBjcmVhdGUoRGF0YWJhc2UqIGRiLCBib29sIHNldFZlcnNp
b25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwg
RXhjZXB0aW9uQ29kZSYgY29kZSwgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGJvb2wmIHN1Y2Nlc3Mp
CisgICAgc3RhdGljIFBhc3NPd25QdHI8RGF0YWJhc2VPcGVuVGFzaz4gY3JlYXRlKERhdGFiYXNl
KiBkYiwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25p
emVyKiBzeW5jaHJvbml6ZXIsIERhdGFiYXNlRXJyb3ImIGVycm9yLCBTdHJpbmcmIGVycm9yTWVz
c2FnZSwgYm9vbCYgc3VjY2VzcykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
RGF0YWJhc2VPcGVuVGFzayhkYiwgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIHN5bmNocm9uaXpl
ciwgY29kZSwgZXJyb3JNZXNzYWdlLCBzdWNjZXNzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgRGF0YWJhc2VPcGVuVGFzayhkYiwgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIHN5bmNo
cm9uaXplciwgZXJyb3IsIGVycm9yTWVzc2FnZSwgc3VjY2VzcykpOwogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBEYXRhYmFzZU9wZW5UYXNrKERhdGFiYXNlKiwgYm9vbCBzZXRWZXJzaW9uSW5OZXdE
YXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiwgRXhjZXB0aW9uQ29kZSYsIFN0cmlu
ZyYgZXJyb3JNZXNzYWdlLCBib29sJiBzdWNjZXNzKTsKKyAgICBEYXRhYmFzZU9wZW5UYXNrKERh
dGFiYXNlKiwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hy
b25pemVyKiwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYgZXJyb3JNZXNzYWdlLCBib29sJiBzdWNj
ZXNzKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkb1BlcmZvcm1UYXNrKCk7CiAjaWYgIUxPR19ESVNB
QkxFRApAQCAtMTEzLDcgKzExNCw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIGJvb2wgbV9z
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZTsKLSAgICBFeGNlcHRpb25Db2RlJiBtX2NvZGU7CisgICAg
RGF0YWJhc2VFcnJvciYgbV9lcnJvcjsKICAgICBTdHJpbmcmIG1fZXJyb3JNZXNzYWdlOwogICAg
IGJvb2wmIG1fc3VjY2VzczsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcAkocmV2aXNpb24gMTQxNjAyKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNiw3ICsxMjYsNyBAQCB2b2lkIERhdGFiYXNlVGhyZWFkOjpk
YXRhYmFzZVRocmVhZCgpCiAgICAgICAgIG9wZW5TZXRDb3B5LnN3YXAobV9vcGVuRGF0YWJhc2VT
ZXQpOwogICAgICAgICBEYXRhYmFzZVNldDo6aXRlcmF0b3IgZW5kID0gb3BlblNldENvcHkuZW5k
KCk7CiAgICAgICAgIGZvciAoRGF0YWJhc2VTZXQ6Oml0ZXJhdG9yIGl0ID0gb3BlblNldENvcHku
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgKCppdCktPmNsb3NlKCk7Cisg
ICAgICAgICAgICAoKml0KS0+Y2xvc2UxKCk7CiAgICAgfQogCiAgICAgLy8gRGV0YWNoIHRoZSB0
aHJlYWQgc28gaXRzIHJlc291cmNlcyBhcmUgbm8gbG9uZ2VyIG9mIGFueSBjb25jZXJuIHRvIGFu
eW9uZSBlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlVHJhY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCShyZXZpc2lvbiAxNDE2MDIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDE0ICszNCwxMyBAQAogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUg
IkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZC5oIgotI2luY2x1ZGUg
IkRhdGFiYXNlQ29udGV4dC5oIgorI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZENvbnRleHQuaCIK
ICNpbmNsdWRlICJEYXRhYmFzZU1hbmFnZXIuaCIKICNpbmNsdWRlICJEYXRhYmFzZU1hbmFnZXJD
bGllbnQuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKICNpbmNsdWRlICJPcmlnaW5RdW90YU1hbmFnZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0j
aW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3Jp
Z2luLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5IYXNoLmgiCiAjaW5jbHVkZSAiU1FMaXRl
RmlsZVN5c3RlbS5oIgpAQCAtMTA5LDI0ICsxMDgsMzYgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6
Om9wZW5UcmFja2VyRGF0YWJhcwogICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2so
KSk7CiAKICAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm47IC8vIEFscmVhZHkgb3Blbi4gTm90aGluZyBtb3JlIHRvIGRvLgogCisgICAg
Ly8gSWYgY3JlYXRlSWZEb2VzTm90RXhpc3QgaXMgZmFsc2UsIFNRTGl0ZUZpbGVTeXN0ZW06OmVu
c3VyZURhdGFiYXNlRmlsZUV4aXN0cygpCisgICAgLy8gd2lsbCByZXR1cm4gZmFsc2UgaWYgdGhl
IGRhdGFiYXNlIGZpbGUgZG9lcyBub3QgZXhpc3QuCisgICAgLy8gSWYgY3JlYXRlSWZEb2VzTm90
RXhpc3QgaXMgdHJ1ZSwgU1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3Rz
KCkKKyAgICAvLyB3aWxsIGF0dGVtcHQgdG8gY3JlYXRlIHRoZSBwYXRoIHRvIHRoZSBkYXRhYmFz
ZSBmaWxlIGlmIGl0IGRvZXMgbm90CisgICAgLy8gZXhpc3RzIHlldC4gSXQnbGwgcmV0dXJuIHRy
dWUgaWYgdGhlIHBhdGggYWxyZWFkeSBleGlzdHMsIG9yIGlmIGl0CisgICAgLy8gc3VjY2Vzc2Z1
bGx5IGNyZWF0ZXMgdGhlIHBhdGguIEVsc2UsIGl0IHdpbGwgcmV0dXJuIGZhbHNlLgogICAgIFN0
cmluZyBkYXRhYmFzZVBhdGggPSB0cmFja2VyRGF0YWJhc2VQYXRoKCk7CiAgICAgaWYgKCFTUUxp
dGVGaWxlU3lzdGVtOjplbnN1cmVEYXRhYmFzZUZpbGVFeGlzdHMoZGF0YWJhc2VQYXRoLCBjcmVh
dGVJZkRvZXNOb3RFeGlzdCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIE9wZW4gdGhlIGRh
dGFiYXNlIHVuY29uZGl0aW9uYWxseS4gSWYgb25lIGRvZXMgbm90IGV4aXN0cyBhbHJlYWR5LCBv
cGVuCisgICAgLy8gYSBuZXcgb25lLgogICAgIGlmICghbV9kYXRhYmFzZS5vcGVuKGRhdGFiYXNl
UGF0aCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdoYXQgZG8gZG8gaGVyZT8KICAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gb3BlbiBkYXRhYmFzZVBhdGggJXMuIiwgZGF0YWJhc2VQYXRoLmFz
Y2lpKCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2RhdGFiYXNlLmRp
c2FibGVUaHJlYWRpbmdDaGVja3MoKTsKKworICAgIC8vIEVuc3VyZSB0aGF0IHRoZSAnT3JpZ2lu
cycgdGFibGUgZXhpc3RzLiBDcmVhdGUgaXQgaWYgaXQgZG9lc24ndCBleGlzdCB5ZXQuCiAgICAg
aWYgKCFtX2RhdGFiYXNlLnRhYmxlRXhpc3RzKCJPcmlnaW5zIikpIHsKICAgICAgICAgaWYgKCFt
X2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgT3JpZ2lucyAob3JpZ2luIFRF
WFQgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIHF1b3RhIElOVEVHRVIgTk9UIE5VTEwgT04g
Q09ORkxJQ1QgRkFJTCk7IikpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBhbmQgaGVyZQogICAg
ICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIE9yaWdpbnMgdGFibGUiKTsKICAg
ICAgICAgfQogICAgIH0KKworICAgIC8vIEVuc3VyZSB0aGF0IHRoZSAnRGF0YWJhc2VzJyB0YWJs
ZSBleGlzdHMuIENyZWF0ZSBpdCBpZiBpdCBkb2Vzbid0IGV4aXN0IHlldC4KICAgICBpZiAoIW1f
ZGF0YWJhc2UudGFibGVFeGlzdHMoIkRhdGFiYXNlcyIpKSB7CiAgICAgICAgIGlmICghbV9kYXRh
YmFzZS5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIERhdGFiYXNlcyAoZ3VpZCBJTlRFR0VS
IFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsIG9yaWdpbiBURVhULCBuYW1lIFRFWFQsIGRpc3Bs
YXlOYW1lIFRFWFQsIGVzdGltYXRlZFNpemUgSU5URUdFUiwgcGF0aCBURVhUKTsiKSkgewogICAg
ICAgICAgICAgLy8gRklYTUU6IGFuZCBoZXJlCkBAIC0xMzUsNDggKzE0Niw5MCBAQCB2b2lkIERh
dGFiYXNlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzCiAgICAgfQogfQogCi1ib29sIERhdGFi
YXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1
bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCitib29sIERhdGFiYXNlVHJhY2tlcjo6aGFzQWRl
cXVhdGVRdW90YUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luLCB1bnNpZ25lZCBsb25n
IGVzdGltYXRlZFNpemUsIERhdGFiYXNlRXJyb3ImIGVycikKK3sKKyAgICAvLyBTaW5jZSB3ZSdy
ZSBpbW1pbmVudGx5IG9wZW5pbmcgYSBkYXRhYmFzZSB3aXRoaW4gdGhpcyBjb250ZXh0J3Mgb3Jp
Z2luLAorICAgIC8vIG1ha2Ugc3VyZSB0aGlzIG9yaWdpbiBpcyBiZWluZyB0cmFja2VkIGJ5IHRo
ZSBRdW90YVRyYWNrZXIKKyAgICAvLyBieSBmZXRjaGluZyBpdHMgY3VycmVudCB1c2FnZSBub3cu
CisgICAgdW5zaWduZWQgbG9uZyBsb25nIHVzYWdlID0gdXNhZ2VGb3JPcmlnaW5Ob0xvY2sob3Jp
Z2luKTsKKworICAgIC8vIElmIHRoZSBkYXRhYmFzZSB3aWxsIGZpdCwgYWxsb3cgaXRzIGNyZWF0
aW9uLgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyByZXF1aXJlbWVudCA9IHVzYWdlICsgbWF4KDFV
TCwgZXN0aW1hdGVkU2l6ZSk7CisgICAgaWYgKHJlcXVpcmVtZW50IDwgdXNhZ2UpIHsKKyAgICAg
ICAgZXJyID0gRGF0YWJhc2VFcnJvcjo6RGF0YWJhc2VTaXplT3ZlcmZsb3dlZDsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOyAvLyBUaGUgZXN0aW1hdGVkIHNpemUgaXMgc28gYmlnIGl0IGNhdXNlcyBh
biBvdmVyZmxvdzsgZG9uJ3QgYWxsb3cgY3JlYXRpb24uCisgICAgfQorICAgIGlmIChyZXF1aXJl
bWVudCA8PSBxdW90YUZvck9yaWdpbk5vTG9jayhvcmlnaW4pKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIGVyciA9IERhdGFiYXNlRXJyb3I6OkRhdGFiYXNlU2l6ZUV4Y2VlZGVkUXVvdGE7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIERhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJs
aXNoRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5n
JiBuYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIERhdGFiYXNlRXJyb3ImIGVycm9y
KQogeworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworICAg
IExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tlcihvcmlnaW5RdW90
YU1hbmFnZXIoKSk7CiAgICAgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IGNvbnRleHQtPnNlY3Vy
aXR5T3JpZ2luKCk7Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIHJlcXVpcmVtZW50OwotICAgIHsK
LSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7Ci0gICAg
ICAgIExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tlcihvcmlnaW5R
dW90YU1hbmFnZXIoKSk7CiAKLSAgICAgICAgaWYgKCFjYW5DcmVhdGVEYXRhYmFzZShvcmlnaW4s
IG5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpc0RlbGV0aW5nRGF0
YWJhc2VPck9yaWdpbkZvcihvcmlnaW4sIG5hbWUpKSB7CisgICAgICAgIGVycm9yID0gRGF0YWJh
c2VFcnJvcjo6RGF0YWJhc2VJc0JlaW5nRGVsZXRlZDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHJlY29yZENyZWF0aW5nRGF0YWJhc2Uob3JpZ2luLCBuYW1lKTsKIAotICAg
ICAgICByZWNvcmRDcmVhdGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7CisgICAgLy8gSWYgYSBk
YXRhYmFzZSBhbHJlYWR5IGV4aXN0cywgaWdub3JlIHRoZSBwYXNzZWQtaW4gZXN0aW1hdGVkIHNp
emUgYW5kIHNheSBpdCdzIE9LLgorICAgIGlmIChoYXNFbnRyeUZvckRhdGFiYXNlKG9yaWdpbiwg
bmFtZSkpCisgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIC8vIFNpbmNlIHdlJ3JlIGlt
bWluZW50bHkgb3BlbmluZyBhIGRhdGFiYXNlIHdpdGhpbiB0aGlzIGNvbnRleHQncyBvcmlnaW4s
IG1ha2Ugc3VyZSB0aGlzIG9yaWdpbiBpcyBiZWluZyB0cmFja2VkIGJ5IHRoZSBRdW90YVRyYWNr
ZXIKLSAgICAgICAgLy8gYnkgZmV0Y2hpbmcgaXRzIGN1cnJlbnQgdXNhZ2Ugbm93LgotICAgICAg
ICB1bnNpZ25lZCBsb25nIGxvbmcgdXNhZ2UgPSB1c2FnZUZvck9yaWdpbk5vTG9jayhvcmlnaW4p
OwotCi0gICAgICAgIC8vIElmIGEgZGF0YWJhc2UgYWxyZWFkeSBleGlzdHMsIGlnbm9yZSB0aGUg
cGFzc2VkLWluIGVzdGltYXRlZCBzaXplIGFuZCBzYXkgaXQncyBPSy4KLSAgICAgICAgaWYgKGhh
c0VudHJ5Rm9yRGF0YWJhc2Uob3JpZ2luLCBuYW1lKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgICAgIC8vIElmIHRoZSBkYXRhYmFzZSB3aWxsIGZpdCwgYWxsb3cgaXRzIGNyZWF0
aW9uLgotICAgICAgICByZXF1aXJlbWVudCA9IHVzYWdlICsgbWF4KDFVTCwgZXN0aW1hdGVkU2l6
ZSk7Ci0gICAgICAgIGlmIChyZXF1aXJlbWVudCA8IHVzYWdlKSB7Ci0gICAgICAgICAgICBkb25l
Q3JlYXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OyAvLyBJZiB0aGUgZXN0aW1hdGVkIHNpemUgaXMgc28gYmlnIGl0IGNhdXNlcyBhbiBvdmVyZmxv
dywgZG9uJ3QgYWxsb3cgY3JlYXRpb24uCi0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlcXVpcmVt
ZW50IDw9IHF1b3RhRm9yT3JpZ2luTm9Mb2NrKG9yaWdpbikpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBHaXZlIHRoZSBjaHJvbWUgY2xpZW50IGEgY2hhbmNlIHRv
IGluY3JlYXNlIHRoZSBxdW90YS4KLSAgICAvLyBEcm9wIGFsbCBsb2NrcyBiZWZvcmUgY2FsbGlu
ZyBvdXQ7IHdlIGRvbid0IGtub3cgd2hhdCB0aGV5J2xsIGRvLgotICAgIFJlZlB0cjxEYXRhYmFz
ZUNvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCA9IERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmRh
dGFiYXNlQ29udGV4dEZvcihjb250ZXh0KTsKLSAgICBkYXRhYmFzZUNvbnRleHQtPmRhdGFiYXNl
RXhjZWVkZWRRdW90YShuYW1lLCBEYXRhYmFzZURldGFpbHMobmFtZS5pc29sYXRlZENvcHkoKSwg
ZGlzcGxheU5hbWUuaXNvbGF0ZWRDb3B5KCksIGVzdGltYXRlZFNpemUsIDApKTsKKyAgICBpZiAo
aGFzQWRlcXVhdGVRdW90YUZvck9yaWdpbihvcmlnaW4sIGVzdGltYXRlZFNpemUsIGVycm9yKSkg
eworICAgICAgICBBU1NFUlQoZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6Tm9uZSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KIAorICAgIC8vIElmIHdlIGdldCBoZXJlLCB0aGVuIHdlIGRv
IG5vdCBoYXZlIGVub3VnaCBxdW90YSBmb3Igb25lIG9mIHRoZQorICAgIC8vIGZvbGxvd2luZyBy
ZWFzb25zIGFzIGluZGljYXRlZCBieSB0aGUgc2V0IGVycm9yOgorICAgIC8vCisgICAgLy8gSWYg
dGhlIGVycm9yIGlzIERBVEFCQVNFX1NJWkVfT1ZFUkZMT1dFRCwgdGhlbiB0aGlzIG1lYW5zIHRo
ZSByZXF1ZXN0ZWQKKyAgICAvLyBlc3RpbWF0ZWRTaXplIGlmIHNvIHVucmVhc29uYWJseSBsYXJn
ZSB0aGF0IGl0IGNhbiBjYXVzZSBhbiBvdmVyZmxvdyBpbgorICAgIC8vIHRoZSB1c2FnZSBidWRn
ZXQgY29tcHV0YXRpb24uIEluIHRoYXQgY2FzZSwgdGhlcmUncyBub3RoaW5nIG1vcmUgd2UgY2Fu
CisgICAgLy8gZG8sIGFuZCB0aGVyZSdzIG5vIG5lZWQgZm9yIGEgcmV0cnkuIEhlbmNlLCB3ZSBz
aG91bGQgaW5kaWNhdGUgdGhhdAorICAgIC8vIHdlJ3JlIGRvbmUgd2l0aCBvdXIgYXR0ZW1wdCB0
byBjcmVhdGUgdGhlIGRhdGFiYXNlOgorICAgIC8vCisgICAgLy8gSWYgdGhlIGVycm9yIGlzIERB
VEFCQVNFX1NJWkVfRVhDRUVERURfUVVPVEEsIHRoZW4gd2UnbGwgZ2l2ZSB0aGUgY2xpZW50Cisg
ICAgLy8gYSBjaGFuY2UgdG8gdXBkYXRlIHRoZSBxdW90YSBhbmQgY2FsbCByZXRyeUNhbkVzdGFi
bGlzaERhdGFiYXNlKCkgdG8gdHJ5CisgICAgLy8gYWdhaW4uIEhlbmNlLCB3ZSBkb24ndCBjYWxs
IGRvbmVDcmVhdGluZ0RhdGFiYXNlKCkgeWV0IGluIHRoYXQgY2FzZS4KKworICAgIGlmIChlcnJv
ciA9PSBEYXRhYmFzZUVycm9yOjpEYXRhYmFzZVNpemVPdmVyZmxvd2VkKQorICAgICAgICBkb25l
Q3JlYXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJU
KGVycm9yID09IERhdGFiYXNlRXJyb3I6OkRhdGFiYXNlU2l6ZUV4Y2VlZGVkUXVvdGEpOworCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBOb3RlOiBhIHRob3VnaHQgYWJvdXQgcGVyZm9ybWFu
Y2U6IGhhc0FkZXF1YXRlUXVvdGFGb3JPcmlnaW4oKSB3YXMgYWxzbworLy8gY2FsbGVkIGluIGNh
bkVzdGFibGlzaERhdGFiYXNlKCksIGFuZCBoZW5jZSwgd2UncmUgcmVwZWF0aW5nIHNvbWUgd29y
ayB3aXRoaW4KKy8vIGhhc0FkZXF1YXRlUXVvdGFGb3JPcmlnaW4oKS4gSG93ZXZlciwgcmV0cnlD
YW5Fc3RhYmxpc2hEYXRhYmFzZSgpIHNob3VsZCBvbmx5CisvLyBiZSBjYWxsZWQgaW4gdGhlIHJh
cmUgZXZlbiBpZiBjYW5Fc3RhYmxpc2hEYXRhYmFzZSgpIGZhaWxzLiBTaW5jZSBpdCBpcyByYXJl
LAorLy8gd2Ugc2hvdWxkIG5vdCBib3RoZXIgb3B0aW1pemluZyBpdC4gSXQgaXMgbW9yZSBiZW5l
ZmljaWFsIHRvIGtlZXAKKy8vIGhhc0FkZXF1YXRlUXVvdGFGb3JPcmlnaW4oKSBzaW1wbGUgYW5k
IGNvcnJlY3QgKGkuZS4gYnVnIGZyZWUpLCBhbmQganVzdAorLy8gcmUtdXNlIGl0LgorYm9vbCBE
YXRhYmFzZVRyYWNrZXI6OnJldHJ5Q2FuRXN0YWJsaXNoRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5k
Q29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCB1bnNpZ25lZCBsb25nIGVzdGlt
YXRlZFNpemUsIERhdGFiYXNlRXJyb3ImIGVycm9yKQoreworICAgIGVycm9yID0gRGF0YWJhc2VF
cnJvcjo6Tm9uZTsgLy8gUmVzZXQgdGhlIGVycm9yIGNvZGUgYmVmb3JlIHJldHJ5aW5nLiAKICAg
ICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICBMb2NrZXI8
T3JpZ2luUXVvdGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2Vy
KCkpOworICAgIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBjb250ZXh0LT5zZWN1cml0eU9yaWdp
bigpOwogCiAgICAgLy8gSWYgdGhlIGRhdGFiYXNlIHdpbGwgZml0IG5vdywgYWxsb3cgaXRzIGNy
ZWF0aW9uLgotICAgIGlmIChyZXF1aXJlbWVudCA8PSBxdW90YUZvck9yaWdpbk5vTG9jayhvcmln
aW4pKQorICAgIGlmIChoYXNBZGVxdWF0ZVF1b3RhRm9yT3JpZ2luKG9yaWdpbiwgZXN0aW1hdGVk
U2l6ZSwgZXJyb3IpKSB7CisgICAgICAgIEFTU0VSVChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpO
b25lKTsKICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCisgICAgQVNTRVJUKGVycm9yID09
IERhdGFiYXNlRXJyb3I6OkRhdGFiYXNlU2l6ZUV4Y2VlZGVkUXVvdGEpOwogICAgIGRvbmVDcmVh
dGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMDEs
NyArMjU0LDkgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yRGF0YWJhcwogICAg
IEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7CiAgICAgb3BlblRyYWNrZXJEYXRh
YmFzZShmYWxzZSk7CiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gTm8gdHJhY2tlciBkYXRhYmFzZS4g
RWZmZWN0aXZlbHksIG5vIGVudHJ5IGZvciB0aGUgZGIuCisKKyAgICAvLyBXZSd2ZSBnb3QgYSB0
cmFja2VyIGRhdGFiYXNlLiBTZXQgdXAgYSBxdWVyeSB0byBhc2sgYWJvdXQgdGhlIGRiIG9mIGlu
dGVyZXN0OgogICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVD
VCBndWlkIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT87Iik7CiAKICAg
ICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKQEAgLTIyOSw3ICsyODQs
NyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VDaGFuZ2VkKERhCiAgICAgb3JpZ2lu
UXVvdGFNYW5hZ2VyKCkubWFya0RhdGFiYXNlKGRhdGFiYXNlKTsKIH0KIAotdm9pZCBEYXRhYmFz
ZVRyYWNrZXI6OmludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoY29uc3QgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCkKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjppbnRlcnJ1cHRB
bGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IERhdGFiYXNlQmFja2VuZENvbnRleHQqIGNvbnRl
eHQpCiB7CiAgICAgVmVjdG9yPFJlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+ID4gb3BlbkRhdGFiYXNl
czsKICAgICB7CkBAIC0yNDcsNyArMzAyLDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmludGVy
cnVwdEFsbERhdGFiYQogICAgICAgICAgICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gZGJO
YW1lTWFwSXQtPnZhbHVlOwogICAgICAgICAgICAgRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9y
IGRiU2V0RW5kSXQgPSBkYXRhYmFzZVNldC0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKERhdGFi
YXNlU2V0Ojpjb25zdF9pdGVyYXRvciBkYlNldEl0ID0gZGF0YWJhc2VTZXQtPmJlZ2luKCk7IGRi
U2V0SXQgIT0gZGJTZXRFbmRJdDsgKytkYlNldEl0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCgq
ZGJTZXRJdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA9PSBjb250ZXh0KQorICAgICAgICAg
ICAgICAgIGlmICgoKmRiU2V0SXQpLT5kYXRhYmFzZUNvbnRleHQoKSA9PSBjb250ZXh0KQogICAg
ICAgICAgICAgICAgICAgICBvcGVuRGF0YWJhc2VzLmFwcGVuZCgqZGJTZXRJdCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTM2MCwxMCArNDE1LDExIEBAIHZvaWQgRGF0YWJhc2VUcmFj
a2VyOjpvcmlnaW5zKFZlY3RvcjxSZWYKIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZU5h
bWVzRm9yT3JpZ2luTm9Mb2NrKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFZlY3RvcjxTdHJpbmc+
JiByZXN1bHRWZWN0b3IpCiB7CiAgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygp
KTsKLSAgICBvcGVuVHJhY2tlckRhdGFiYXNlKGZhbHNlKTsKKyAgICBvcGVuVHJhY2tlckRhdGFi
YXNlKGZhbHNlKTsgLy8gRG9uJ3QgY3JlYXRlIG9uZSBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhp
c3QuCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKKyAgICAvLyBTZXR1cCBhbiBTUUwgcXVlcnkgdG8gZmV0Y2ggdGhlIGRhdGFiYXNlcyBmb3Ig
dGhlIHNwZWNpZmllZCBvcmlnaW46CiAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2Rh
dGFiYXNlLCAiU0VMRUNUIG5hbWUgRlJPTSBEYXRhYmFzZXMgd2hlcmUgb3JpZ2luPT87Iik7CiAK
ICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKQEAgLTM3MSw2ICs0
MjcsNyBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VOYW1lc0Zvck9yCiAKICAgICBz
dGF0ZW1lbnQuYmluZFRleHQoMSwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CiAKKyAg
ICAvLyBFeGVjdXRlIHRoZSBxdWVyeSBhbmQgZmV0Y2ggZWFjaCByZWxldmFudCBkYiBpbnRvIHRo
ZSByZXN1bHQ6CiAgICAgaW50IHJlc3VsdDsKICAgICB3aGlsZSAoKHJlc3VsdCA9IHN0YXRlbWVu
dC5zdGVwKCkpID09IFNRTFJlc3VsdFJvdykKICAgICAgICAgcmVzdWx0VmVjdG9yLmFwcGVuZChz
dGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSk7CkBAIC00OTIsNiArNTQ5LDEyIEBAIHVuc2lnbmVk
IGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OnVzYWcKICAgICByZXR1cm4gU1FMaXRlRmlsZVN5
c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShwYXRoKTsKIH0KIAordm9pZCBEYXRhYmFzZVRyYWNr
ZXI6OmRvbmVDcmVhdGluZ0RhdGFiYXNlKERhdGFiYXNlQmFja2VuZCogZGF0YWJhc2UpCit7Cisg
ICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisgICAgZG9uZUNy
ZWF0aW5nRGF0YWJhc2UoZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCksIGRhdGFiYXNlLT5zdHJp
bmdJZGVudGlmaWVyKCkpOworfQorCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFi
YXNlKERhdGFiYXNlQmFja2VuZCogZGF0YWJhc2UpCiB7CiAgICAgaWYgKCFkYXRhYmFzZSkKQEAg
LTUyNiw5ICs1ODksNiBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKERh
CiAgICAgICAgICAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5hZGREYXRhYmFzZShkYXRhYmFzZS0+
c2VjdXJpdHlPcmlnaW4oKSwgZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKSwgZGF0YWJhc2Ut
PmZpbGVOYW1lKCkpOwogICAgICAgICB9CiAgICAgfQotCi0gICAgTXV0ZXhMb2NrZXIgbG9ja0Rh
dGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7Ci0gICAgZG9uZUNyZWF0aW5nRGF0YWJhc2UoZGF0YWJh
c2UtPnNlY3VyaXR5T3JpZ2luKCksIGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCkpOwogfQog
CiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlT3BlbkRhdGFiYXNlKERhdGFiYXNlQmFja2Vu
ZCogZGF0YWJhc2UpCkBAIC02MTQsNyArNjc0LDkgQEAgdW5zaWduZWQgbG9uZyBsb25nIERhdGFi
YXNlVHJhY2tlcjo6dXNhZwogICAgICAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5hZGREYXRhYmFz
ZShvcmlnaW4sIG5hbWVzW2ldLCBmdWxsUGF0aEZvckRhdGFiYXNlTm9Mb2NrKG9yaWdpbiwgbmFt
ZXNbaV0sIGZhbHNlKSk7CiAKICAgICBpZiAoIW9yaWdpblF1b3RhTWFuYWdlcigpLnRyYWNrc09y
aWdpbihvcmlnaW4pKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIDA7IC8vIFN0
aWxsIG5vIGRiJ3MgZm9yIHRoaXMgb3JpZ2luLiBIZW5jZSwgdG90YWwgdXNhZ2UgaXMgMC4KKwor
ICAgIC8vIENvbXB1dGUgdGhlIHRvdGFsIGRpc2sgdXNhZ2Ugb2YgYWxsIGRiJ3MgZnJvbSB0aGUg
c3BlY2lmaWVkIG9yaWdpbjoKICAgICByZXR1cm4gb3JpZ2luUXVvdGFNYW5hZ2VyKCkuZGlza1Vz
YWdlKG9yaWdpbik7CiB9CiAKQEAgLTgxNiwxMSArODc4LDExIEBAIGJvb2wgRGF0YWJhc2VUcmFj
a2VyOjpkZWxldGVPcmlnaW4oU2VjdXIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBEYXRh
YmFzZVRyYWNrZXI6OmNhbkNyZWF0ZURhdGFiYXNlKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4sIGNv
bnN0IFN0cmluZyYgbmFtZSkKK2Jvb2wgRGF0YWJhc2VUcmFja2VyOjppc0RlbGV0aW5nRGF0YWJh
c2VPck9yaWdpbkZvcihTZWN1cml0eU9yaWdpbiAqb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUp
CiB7CiAgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKICAgICAvLyBDYW4n
dCBjcmVhdGUgYSBkYXRhYmFzZSB3aGlsZSBzb21lb25lIGVsc2UgaXMgZGVsZXRpbmcgaXQ7IHRo
ZXJlJ3MgYSByaXNrIG9mIGxlYXZpbmcgdW50cmFja2VkIGRhdGFiYXNlIGRlYnJpcyBvbiB0aGUg
ZGlzay4KLSAgICByZXR1cm4gIWRlbGV0aW5nRGF0YWJhc2Uob3JpZ2luLCBuYW1lKSAmJiAhZGVs
ZXRpbmdPcmlnaW4ob3JpZ2luKTsKKyAgICByZXR1cm4gaXNEZWxldGluZ0RhdGFiYXNlKG9yaWdp
biwgbmFtZSkgfHwgaXNEZWxldGluZ09yaWdpbihvcmlnaW4pOwogfQogCiB2b2lkIERhdGFiYXNl
VHJhY2tlcjo6cmVjb3JkQ3JlYXRpbmdEYXRhYmFzZShTZWN1cml0eU9yaWdpbiAqb3JpZ2luLCBj
b25zdCBTdHJpbmcmIG5hbWUpCkBAIC04NjUsNyArOTI3LDcgQEAgYm9vbCBEYXRhYmFzZVRyYWNr
ZXI6OmNyZWF0aW5nRGF0YWJhc2UoUwogYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmNhbkRlbGV0ZURh
dGFiYXNlKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAg
ICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOwotICAgIHJldHVybiAhY3JlYXRp
bmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpICYmICFkZWxldGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFt
ZSk7CisgICAgcmV0dXJuICFjcmVhdGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSkgJiYgIWlzRGVs
ZXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6
cmVjb3JkRGVsZXRpbmdEYXRhYmFzZShTZWN1cml0eU9yaWdpbiAqb3JpZ2luLCBjb25zdCBTdHJp
bmcmIG5hbWUpCkBAIC04OTcsNyArOTU5LDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmRvbmVE
ZWxldGluZ0RhdGFiYQogICAgIH0KIH0KIAotYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0aW5n
RGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKQorYm9v
bCBEYXRhYmFzZVRyYWNrZXI6OmlzRGVsZXRpbmdEYXRhYmFzZShTZWN1cml0eU9yaWdpbiAqb3Jp
Z2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQu
dHJ5TG9jaygpKTsKICAgICBOYW1lU2V0KiBuYW1lU2V0ID0gbV9iZWluZ0RlbGV0ZWQuZ2V0KG9y
aWdpbik7CkBAIC05MDcsMTAgKzk2OSwxMCBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRp
bmdEYXRhYmFzZShTCiBib29sIERhdGFiYXNlVHJhY2tlcjo6Y2FuRGVsZXRlT3JpZ2luKFNlY3Vy
aXR5T3JpZ2luICpvcmlnaW4pCiB7CiAgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9j
aygpKTsKLSAgICByZXR1cm4gIShkZWxldGluZ09yaWdpbihvcmlnaW4pIHx8IG1fYmVpbmdDcmVh
dGVkLmdldChvcmlnaW4pKTsKKyAgICByZXR1cm4gIShpc0RlbGV0aW5nT3JpZ2luKG9yaWdpbikg
fHwgbV9iZWluZ0NyZWF0ZWQuZ2V0KG9yaWdpbikpOwogfQogCi1ib29sIERhdGFiYXNlVHJhY2tl
cjo6ZGVsZXRpbmdPcmlnaW4oU2VjdXJpdHlPcmlnaW4gKm9yaWdpbikKK2Jvb2wgRGF0YWJhc2VU
cmFja2VyOjppc0RlbGV0aW5nT3JpZ2luKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4pCiB7CiAgICAg
QVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKICAgICByZXR1cm4gbV9vcmlnaW5z
QmVpbmdEZWxldGVkLmNvbnRhaW5zKG9yaWdpbik7CkBAIC05MTksMTQgKzk4MSwxNCBAQCBib29s
IERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRpbmdPcmlnaW4oU2VjCiB2b2lkIERhdGFiYXNlVHJhY2tl
cjo6cmVjb3JkRGVsZXRpbmdPcmlnaW4oU2VjdXJpdHlPcmlnaW4gKm9yaWdpbikKIHsKICAgICBB
U1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOwotICAgIEFTU0VSVCghZGVsZXRpbmdP
cmlnaW4ob3JpZ2luKSk7CisgICAgQVNTRVJUKCFpc0RlbGV0aW5nT3JpZ2luKG9yaWdpbikpOwog
ICAgIG1fb3JpZ2luc0JlaW5nRGVsZXRlZC5hZGQob3JpZ2luLT5pc29sYXRlZENvcHkoKSk7CiB9
CiAKIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpkb25lRGVsZXRpbmdPcmlnaW4oU2VjdXJpdHlPcmln
aW4gKm9yaWdpbikKIHsKICAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOwot
ICAgIEFTU0VSVChkZWxldGluZ09yaWdpbihvcmlnaW4pKTsKKyAgICBBU1NFUlQoaXNEZWxldGlu
Z09yaWdpbihvcmlnaW4pKTsKICAgICBtX29yaWdpbnNCZWluZ0RlbGV0ZWQucmVtb3ZlKG9yaWdp
bik7CiB9CiAKQEAgLTk5Niw3ICsxMDU4LDcgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0
ZURhdGFiYXNlRmlsZQogI2lmbmRlZiBOREVCVUcKICAgICB7CiAgICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwotICAgICAgICBBU1NFUlQoZGVsZXRpbmdE
YXRhYmFzZShvcmlnaW4sIG5hbWUpIHx8IGRlbGV0aW5nT3JpZ2luKG9yaWdpbikpOworICAgICAg
ICBBU1NFUlQoaXNEZWxldGluZ0RhdGFiYXNlT3JPcmlnaW5Gb3Iob3JpZ2luLCBuYW1lKSk7CiAg
ICAgfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VUcmFja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuaAkocmV2aXNpb24gMTQxNjAyKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNiArMzEsNyBAQAogCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAorI2lu
Y2x1ZGUgIkRhdGFiYXNlRXJyb3IuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgpAQCAt
NDUsNyArNDYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEYXRhYmFzZUJhY2tl
bmQ7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworY2xhc3MgRGF0YWJhc2VCYWNrZW5k
Q29udGV4dDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogCiBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5I
YXNoOwpAQCAtNzAsNyArNzEsOSBAQCBwdWJsaWM6CiAgICAgLy8gbV9kYXRhYmFzZUd1YXJkIGFu
ZCBtX29wZW5EYXRhYmFzZU1hcEd1YXJkIGN1cnJlbnRseSBkb24ndCBvdmVybGFwLgogICAgIC8v
IG5vdGlmaWNhdGlvbk11dGV4KCkgaXMgY3VycmVudGx5IGluZGVwZW5kZW50IG9mIHRoZSBvdGhl
ciBsb2Nrcy4KIAotICAgIGJvb2wgY2FuRXN0YWJsaXNoRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwg
dW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKKyAgICBib29sIGNhbkVzdGFibGlzaERhdGFi
YXNlKERhdGFiYXNlQmFja2VuZENvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIHVuc2lnbmVk
IGxvbmcgZXN0aW1hdGVkU2l6ZSwgRGF0YWJhc2VFcnJvciYpOworICAgIGJvb2wgcmV0cnlDYW5F
c3RhYmxpc2hEYXRhYmFzZShEYXRhYmFzZUJhY2tlbmRDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBu
YW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIERhdGFiYXNlRXJyb3ImKTsKKwogICAg
IHZvaWQgc2V0RGF0YWJhc2VEZXRhaWxzKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNp
emUpOwogICAgIFN0cmluZyBmdWxsUGF0aEZvckRhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwgY29u
c3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0ID0gdHJ1ZSk7CiAKQEAg
LTgxLDExICs4NCwxMyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIGdldE1heFNp
emVGb3JEYXRhYmFzZShjb25zdCBEYXRhYmFzZUJhY2tlbmQqKTsKICAgICB2b2lkIGRhdGFiYXNl
Q2hhbmdlZChEYXRhYmFzZUJhY2tlbmQqKTsKIAotICAgIHZvaWQgaW50ZXJydXB0QWxsRGF0YWJh
c2VzRm9yQ29udGV4dChjb25zdCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgdm9pZCBp
bnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IERhdGFiYXNlQmFja2VuZENvbnRl
eHQqKTsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBEYXRhYmFzZVRyYWNrZXIoY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZVBhdGgpOwogCisgICAgYm9vbCBoYXNBZGVxdWF0ZVF1b3RhRm9yT3JpZ2lu
KFNlY3VyaXR5T3JpZ2luKiwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBEYXRhYmFzZUVy
cm9yJik7CisKICNpZiAhUExBVEZPUk0oQ0hST01JVU0pCiBwdWJsaWM6CiAgICAgdm9pZCBzZXRE
YXRhYmFzZURpcmVjdG9yeVBhdGgoY29uc3QgU3RyaW5nJik7CkBAIC0xMTIsNiArMTE3LDggQEAg
cHVibGljOgogCiAgICAgYm9vbCBoYXNFbnRyeUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiopOwog
CisgICAgdm9pZCBkb25lQ3JlYXRpbmdEYXRhYmFzZShEYXRhYmFzZUJhY2tlbmQqKTsKKwogcHJp
dmF0ZToKICAgICBib29sIGhhc0VudHJ5Rm9yT3JpZ2luTm9Mb2NrKFNlY3VyaXR5T3JpZ2luKiBv
cmlnaW4pOwogICAgIFN0cmluZyBmdWxsUGF0aEZvckRhdGFiYXNlTm9Mb2NrKFNlY3VyaXR5T3Jp
Z2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KTsKQEAg
LTE1NSwyMiArMTYyLDIyIEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoU2V0PFN0cmluZz4g
TmFtZVNldDsKICAgICBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIE5hbWVTZXQqLCBT
ZWN1cml0eU9yaWdpbkhhc2g+IG1fYmVpbmdEZWxldGVkOwogICAgIEhhc2hTZXQ8UmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiwgU2VjdXJpdHlPcmlnaW5IYXNoPiBtX29yaWdpbnNCZWluZ0RlbGV0ZWQ7
Ci0gICAgYm9vbCBjYW5DcmVhdGVEYXRhYmFzZShTZWN1cml0eU9yaWdpbiAqb3JpZ2luLCBjb25z
dCBTdHJpbmcmIG5hbWUpOwotICAgIHZvaWQgcmVjb3JkQ3JlYXRpbmdEYXRhYmFzZShTZWN1cml0
eU9yaWdpbiAqb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIHZvaWQgZG9uZUNyZWF0
aW5nRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKTsK
LSAgICBib29sIGNyZWF0aW5nRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiwgY29uc3Qg
U3RyaW5nJiBuYW1lKTsKLSAgICBib29sIGNhbkRlbGV0ZURhdGFiYXNlKFNlY3VyaXR5T3JpZ2lu
ICpvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9pZCByZWNvcmREZWxldGluZ0Rh
dGFiYXNlKFNlY3VyaXR5T3JpZ2luICpvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAg
dm9pZCBkb25lRGVsZXRpbmdEYXRhYmFzZShTZWN1cml0eU9yaWdpbiAqb3JpZ2luLCBjb25zdCBT
dHJpbmcmIG5hbWUpOwotICAgIGJvb2wgZGVsZXRpbmdEYXRhYmFzZShTZWN1cml0eU9yaWdpbiAq
b3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIGJvb2wgY2FuRGVsZXRlT3JpZ2luKFNl
Y3VyaXR5T3JpZ2luICpvcmlnaW4pOwotICAgIGJvb2wgZGVsZXRpbmdPcmlnaW4oU2VjdXJpdHlP
cmlnaW4gKm9yaWdpbik7Ci0gICAgdm9pZCByZWNvcmREZWxldGluZ09yaWdpbihTZWN1cml0eU9y
aWdpbiAqb3JpZ2luKTsKLSAgICB2b2lkIGRvbmVEZWxldGluZ09yaWdpbihTZWN1cml0eU9yaWdp
biAqb3JpZ2luKTsKKyAgICBib29sIGlzRGVsZXRpbmdEYXRhYmFzZU9yT3JpZ2luRm9yKFNlY3Vy
aXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICB2b2lkIHJlY29yZENyZWF0aW5n
RGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIHZvaWQg
ZG9uZUNyZWF0aW5nRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUp
OworICAgIGJvb2wgY3JlYXRpbmdEYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmlu
ZyYgbmFtZSk7CisgICAgYm9vbCBjYW5EZWxldGVEYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNv
bnN0IFN0cmluZyYgbmFtZSk7CisgICAgdm9pZCByZWNvcmREZWxldGluZ0RhdGFiYXNlKFNlY3Vy
aXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICB2b2lkIGRvbmVEZWxldGluZ0Rh
dGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBib29sIGlz
RGVsZXRpbmdEYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSk7Cisg
ICAgYm9vbCBjYW5EZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qKTsKKyAgICBib29sIGlzRGVs
ZXRpbmdPcmlnaW4oU2VjdXJpdHlPcmlnaW4qKTsKKyAgICB2b2lkIHJlY29yZERlbGV0aW5nT3Jp
Z2luKFNlY3VyaXR5T3JpZ2luKik7CisgICAgdm9pZCBkb25lRGVsZXRpbmdPcmlnaW4oU2VjdXJp
dHlPcmlnaW4qKTsKIAogICAgIHN0YXRpYyB2b2lkIHNjaGVkdWxlRm9yTm90aWZpY2F0aW9uKCk7
CiAgICAgc3RhdGljIHZvaWQgbm90aWZ5RGF0YWJhc2VzQ2hhbmdlZCh2b2lkKik7Ci0jZWxzZQor
I2Vsc2UgLy8gUExBVEZPUk0oQ0hST01JVU0pCiBwdWJsaWM6CiAgICAgdm9pZCBjbG9zZURhdGFi
YXNlc0ltbWVkaWF0ZWx5KGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiBuYW1lKTsKIApAQCAtMTg0LDcgKzE5MSw3IEBAIHByaXZhdGU6CiAKICAgICBNdXRleCBt
X29wZW5EYXRhYmFzZU1hcEd1YXJkOwogICAgIG11dGFibGUgT3duUHRyPERhdGFiYXNlT3JpZ2lu
TWFwPiBtX29wZW5EYXRhYmFzZU1hcDsKLSNlbmRpZiAvLyAhUExBVEZPUk0oQ0hST01JVU0pCisj
ZW5kaWYgLy8gUExBVEZPUk0oQ0hST01JVU0pCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TFRyYW5zYWN0aW9uLmNwcAkocmV2aXNpb24gMTQxNjAyKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDcgKzMzLDcgQEAKIAogI2luY2x1ZGUgIkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VB
dXRob3JpemVyLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VDb250ZXh0LmgiCisjaW5jbHVkZSAiRGF0
YWJhc2VCYWNrZW5kQ29udGV4dC5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCiAjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNh
Y3Rpb25DbGllbnQuY3BwCShyZXZpc2lvbiAxNDE2MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNyArMzQsNyBAQAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKICNpbmNsdWRlICJE
YXRhYmFzZUJhY2tlbmQuaCIKLSNpbmNsdWRlICJEYXRhYmFzZUNvbnRleHQuaCIKKyNpbmNsdWRl
ICJEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VNYW5hZ2VyLmgi
CiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRy
YW5zYWN0aW9uU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmMuY3BwCShyZXZpc2lvbiAxNDE2MDIpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNF
KQogCiAjaW5jbHVkZSAiRGF0YWJhc2VBdXRob3JpemVyLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VD
b250ZXh0LmgiCisjaW5jbHVkZSAiRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5oIgogI2luY2x1ZGUg
IkRhdGFiYXNlU3luYy5oIgogI2luY2x1ZGUgIlNRTEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIlNR
TFJlc3VsdFNldC5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9X
b3JrZXJDb250ZXh0V2ViRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvV29ya2VyQ29udGV4dFdlYkRhdGFiYXNlLmNwcAkocmV2aXNp
b24gMTQxNjAyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9Xb3JrZXJD
b250ZXh0V2ViRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywyMyArNDMsMzMgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogUGFzc1JlZlB0cjxEYXRhYmFzZT4gV29ya2VyQ29udGV4dFdl
YkRhdGFiYXNlOjpvcGVuRGF0YWJhc2UoV29ya2VyQ29udGV4dCogY29udGV4dCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5h
bWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxi
YWNrPiBjcmVhdGlvbkNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBEYXRhYmFz
ZU1hbmFnZXImIGRiTWFuYWdlciA9IERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpOwotICAgIGlm
ICghY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoY29udGV4dC0+
dG9wT3JpZ2luKCkpIHx8ICFkYk1hbmFnZXIuaXNBdmFpbGFibGUoKSkgeworICAgIFJlZlB0cjxE
YXRhYmFzZT4gZGF0YWJhc2U7CisgICAgRGF0YWJhc2VFcnJvciBlcnJvciA9IERhdGFiYXNlRXJy
b3I6Ok5vbmU7CisgICAgaWYgKGRiTWFuYWdlci5pc0F2YWlsYWJsZSgpICYmIGNvbnRleHQtPnNl
Y3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKGNvbnRleHQtPnRvcE9yaWdpbigpKSkK
KyAgICAgICAgZGF0YWJhc2UgPSBkYk1hbmFnZXIub3BlbkRhdGFiYXNlKGNvbnRleHQsIG5hbWUs
IHZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrLCBl
cnJvcik7CisKKyAgICBpZiAoZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6Q2Fubm90T3BlbkRhdGFi
YXNlKQorICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgIGlmICghZGF0YWJhc2Ug
JiYgIWVjKQogICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQogCi0gICAgcmV0dXJuIGRiTWFuYWdlci5vcGVuRGF0YWJhc2UoY29udGV4dCwgbmFtZSwg
dmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJhY2ssIGVj
KTsKKyAgICByZXR1cm4gZGF0YWJhc2UucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPERhdGFi
YXNlU3luYz4gV29ya2VyQ29udGV4dFdlYkRhdGFiYXNlOjpvcGVuRGF0YWJhc2VTeW5jKFdvcmtl
ckNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJz
aW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNp
emUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaywgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgRGF0YWJhc2VNYW5hZ2VyJiBkYk1hbmFnZXIgPSBEYXRhYmFz
ZU1hbmFnZXI6Om1hbmFnZXIoKTsKLSAgICBpZiAoIWNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCkt
PmNhbkFjY2Vzc0RhdGFiYXNlKGNvbnRleHQtPnRvcE9yaWdpbigpKSB8fCAhZGJNYW5hZ2VyLmlz
QXZhaWxhYmxlKCkpIHsKKyAgICBSZWZQdHI8RGF0YWJhc2VTeW5jPiBkYXRhYmFzZTsKKyAgICBE
YXRhYmFzZUVycm9yIGVycm9yID0gIERhdGFiYXNlRXJyb3I6Ok5vbmU7CisgICAgaWYgKGRiTWFu
YWdlci5pc0F2YWlsYWJsZSgpICYmIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vz
c0RhdGFiYXNlKGNvbnRleHQtPnRvcE9yaWdpbigpKSkKKyAgICAgICAgZGF0YWJhc2UgPSBkYk1h
bmFnZXIub3BlbkRhdGFiYXNlU3luYyhjb250ZXh0LCBuYW1lLCB2ZXJzaW9uLCBkaXNwbGF5TmFt
ZSwgZXN0aW1hdGVkU2l6ZSwgY3JlYXRpb25DYWxsYmFjaywgZXJyb3IpOworCisgICAgaWYgKGVy
cm9yID09IERhdGFiYXNlRXJyb3I6OkNhbm5vdE9wZW5EYXRhYmFzZSkKKyAgICAgICAgZWMgPSBJ
TlZBTElEX1NUQVRFX0VSUjsKKyAgICBpZiAoIWRhdGFiYXNlICYmICFlYykKICAgICAgICAgZWMg
PSBTRUNVUklUWV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KIAotICAgIHJldHVybiBk
Yk1hbmFnZXIub3BlbkRhdGFiYXNlU3luYyhjb250ZXh0LCBuYW1lLCB2ZXJzaW9uLCBkaXNwbGF5
TmFtZSwgZXN0aW1hdGVkU2l6ZSwgY3JlYXRpb25DYWxsYmFjaywgZWMpOworICAgIHJldHVybiBk
YXRhYmFzZS5yZWxlYXNlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiAx
NDE2MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjUzNDksNiArMjUzNDksMzAgQEAKIAkJCQkJPgogCQkJCTwvRmls
ZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2Vc
RGF0YWJhc2VCYWNrZW5kQXN5bmMuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxEYXRhYmFzZUJhY2tl
bmRBc3luYy5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZl
UGF0aD0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmNwcCIK
KwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1v
ZHVsZXNcd2ViZGF0YWJhc2VcRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5oIgorCQkJCQk+CisJCQkJ
PC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x3ZWJkYXRh
YmFzZVxEYXRhYmFzZUJhY2tlbmRTeW5jLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8
RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcRGF0YWJhc2VC
YWNrZW5kU3luYy5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0
aXZlUGF0aD0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxEYXRhYmFzZUNhbGxiYWNrLmgiCiAJCQkJ
CT4KIAkJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2Vi
Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE0MTYwMikKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE4NTMsNiAr
MTg1Myw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNl
XERhdGFiYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2Vi
ZGF0YWJhc2VcRGF0YWJhc2VBdXRob3JpemVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcRGF0YWJhc2VCYWNrZW5kLmNwcCIgLz4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcRGF0YWJhc2VCYWNrZW5k
QXN5bmMuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRh
YmFzZVxEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcRGF0YWJhc2VCYWNrZW5kU3luYy5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXERhdGFiYXNlQ29u
dGV4dC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFi
YXNlXERhdGFiYXNlTWFuYWdlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxN
b2R1bGVzXHdlYmRhdGFiYXNlXERhdGFiYXNlU2VydmVyLmNwcCIgLz4KQEAgLTY0MDEsNiArNjQw
NCw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXERh
dGFiYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFi
YXNlXERhdGFiYXNlQXV0aG9yaXplci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
TW9kdWxlc1x3ZWJkYXRhYmFzZVxEYXRhYmFzZUJhY2tlbmQuaCIgLz4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcRGF0YWJhc2VCYWNrZW5kQXN5bmMuaCIg
Lz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcRGF0YWJh
c2VCYWNrZW5kQ29udGV4dC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxl
c1x3ZWJkYXRhYmFzZVxEYXRhYmFzZUJhY2tlbmRTeW5jLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXERhdGFiYXNlQ2FsbGJhY2suaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcRGF0YWJhc2VDb250
ZXh0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNl
XERhdGFiYXNlRXJyb3IuaCIgLz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE0MTYwMikK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVy
cwkod29ya2luZyBjb3B5KQpAQCAtMTgzNiw2ICsxODM2LDE1IEBACiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXERhdGFiYXNlQmFja2VuZC5jcHAiPgogICAg
ICAgPEZpbHRlcj5Nb2R1bGVzXHdlYmRhdGFiYXNlPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXERhdGFiYXNl
QmFja2VuZEFzeW5jLmNwcCI+CisgICAgICA8RmlsdGVyPk1vZHVsZXNcd2ViZGF0YWJhc2U8L0Zp
bHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVs
ZXNcd2ViZGF0YWJhc2VcRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5jcHAiPgorICAgICAgPEZpbHRl
cj5Nb2R1bGVzXHdlYmRhdGFiYXNlPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXERhdGFiYXNlQmFja2VuZFN5
bmMuY3BwIj4KKyAgICAgIDxGaWx0ZXI+TW9kdWxlc1x3ZWJkYXRhYmFzZTwvRmlsdGVyPgorICAg
IDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRh
YmFzZVxEYXRhYmFzZUNvbnRleHQuY3BwIj4KICAgICAgIDxGaWx0ZXI+TW9kdWxlc1x3ZWJkYXRh
YmFzZTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtODQ0Nyw2ICs4NDU2LDE1IEBACiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXERhdGFiYXNlQmFj
a2VuZC5oIj4KICAgICAgIDxGaWx0ZXI+TW9kdWxlc1x3ZWJkYXRhYmFzZTwvRmlsdGVyPgogICAg
IDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRh
YmFzZVxEYXRhYmFzZUJhY2tlbmRBc3luYy5oIj4KKyAgICAgIDxGaWx0ZXI+TW9kdWxlc1x3ZWJk
YXRhYmFzZTwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmgiPgorICAg
ICAgPEZpbHRlcj5Nb2R1bGVzXHdlYmRhdGFiYXNlPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXERhdGFiYXNl
QmFja2VuZFN5bmMuaCI+CisgICAgICA8RmlsdGVyPk1vZHVsZXNcd2ViZGF0YWJhc2U8L0ZpbHRl
cj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNc
d2ViZGF0YWJhc2VcRGF0YWJhc2VDYWxsYmFjay5oIj4KICAgICAgIDxGaWx0ZXI+TW9kdWxlc1x3
ZWJkYXRhYmFzZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTQx
NjAyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0zNjk4LDYgKzM2OTgsMTIgQEAKIAkJOTdCQzZBMjExNTA1RjA4
MTAwMUI3NEFDIC8qIERhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5N0JDNjlERjE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2UuaCAqLzsg
fTsKIAkJOTdCQzZBMjMxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQXV0aG9yaXplci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNjlFMTE1
MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VBdXRob3JpemVyLmNwcCAqLzsgfTsKIAkJOTdCQzZB
MjQxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQXV0aG9yaXplci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5RTIxNTA1RjA4MTAwMUI3NEFD
IC8qIERhdGFiYXNlQXV0aG9yaXplci5oICovOyB9OworCQlGRTE2Q0ZEMzE2OUQxREVEMDBEM0Ew
QzcgLyogRGF0YWJhc2VCYWNrZW5kQXN5bmMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxNkNGQ0YxNjlEMURFQzAwRDNBMEM3IC8qIERhdGFiYXNl
QmFja2VuZEFzeW5jLmNwcCAqLzsgfTsKKwkJRkUxNkNGRDQxNjlEMURFRDAwRDNBMEM3IC8qIERh
dGFiYXNlQmFja2VuZEFzeW5jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTE2Q0ZEMDE2OUQxREVDMDBEM0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kQXN5
bmMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlG
RTZGNkFBRjE2OUUwNTc1MDBGQzMwQTIgLyogRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTZGNkFBRDE2OUUw
NTc1MDBGQzMwQTIgLyogRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5jcHAgKi87IH07CisJCUZFNkY2
QUIwMTY5RTA1NzUwMEZDMzBBMiAvKiBEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTZGNkFBRTE2OUUwNTc1MDBG
QzMwQTIgLyogRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFMTZDRkQ1MTY5RDFERUQwMEQzQTBDNyAvKiBE
YXRhYmFzZUJhY2tlbmRTeW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFMTZDRkQxMTY5RDFERUMwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmRT
eW5jLmNwcCAqLzsgfTsKKwkJRkUxNkNGRDYxNjlEMURFRDAwRDNBMEM3IC8qIERhdGFiYXNlQmFj
a2VuZFN5bmMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZFMTZDRkQyMTY5RDFERUMwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmRTeW5jLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTdCQzZBMjUxNTA1
RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2OUUzMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRh
YmFzZUNhbGxiYWNrLmggKi87IH07CiAJCTk3QkM2QTI3MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRh
YmFzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTdCQzY5RTUxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQ29udGV4dC5jcHAgKi87
IH07CiAJCTk3QkM2QTI4MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUNvbnRleHQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2OUU2MTUwNUYw
ODEwMDFCNzRBQyAvKiBEYXRhYmFzZUNvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQ0MDEsNyArMTQ0MDcsMTQgQEAKIAkJRkRGN0U5
QzIxM0FDMjFEQjAwQTUxRUFDIC8qIEpTQXVkaW9CdWZmZXJDYWxsYmFjay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0F1ZGlvQnVmZmVyQ2FsbGJhY2suaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwOURCNDYxNjlFMkQ2RTAwNjIyNTU3IC8qIERhdGFiYXNl
RXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGF0YWJhc2VFcnJvci5o
OyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUVycm9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZFMTE1RkE5MTY3OTg4Q0QwMDI0OTEzNCAvKiBBYnN0cmFjdERh
dGFiYXNlU2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFic3RyYWN0
RGF0YWJhc2VTZXJ2ZXIuaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRh
YmFzZVNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTE2Q0ZDRjE2OUQx
REVDMDBEM0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kQXN5bmMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gRGF0YWJhc2VCYWNrZW5kQXN5bmMuY3BwOyBwYXRoID0gTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRBc3luYy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZFMTZDRkQwMTY5RDFERUMwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tl
bmRBc3luYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEYXRhYmFzZUJhY2tl
bmRBc3luYy5oOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRBc3lu
Yy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTZGNkFBRDE2OUUwNTc1MDBGQzMw
QTIgLyogRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmNwcDsgcGF0aCA9IE1vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZFNkY2QUFFMTY5RTA1NzUwMEZDMzBBMiAvKiBEYXRhYmFzZUJhY2tlbmRD
b250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERhdGFiYXNlQmFja2Vu
ZENvbnRleHQuaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQ29u
dGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTE2Q0ZEMTE2OUQxREVDMDBE
M0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kU3luYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBEYXRhYmFzZUJhY2tlbmRTeW5jLmNwcDsgcGF0aCA9IE1vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kU3luYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZFMTZDRkQyMTY5RDFERUMwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmRTeW5jLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERhdGFiYXNlQmFja2VuZFN5bmMuaDsg
cGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kU3luYy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGRTMzNzFBMDE2N0MxMUQ0MDBFREI3NTIgLyogRGF0YWJh
c2VCYXNpY1R5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERhdGFiYXNl
QmFzaWNUeXBlcy5oOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhc2ljVHlw
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUwOURCNDYxNjlFMkQ2RTAwNjIy
NTU3IC8qIERhdGFiYXNlRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
RGF0YWJhc2VFcnJvci5oOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUVycm9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNDU2RjE2MTY3N0Q3NEUwMDVFRERG
OSAvKiBEYXRhYmFzZU1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gRGF0YWJhc2VNYW5hZ2VyLmNwcDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU0NTZGMTcx
Njc3RDc0RTAwNUVEREY5IC8qIERhdGFiYXNlTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBEYXRhYmFzZU1hbmFnZXIuaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNkZE
NDg1MEY2NzZFNTcwMDA5Mjg3MyAvKiBDb29yZGluYXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb29yZGluYXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTg1MDcsNiArMTg1MjAsMTIgQEAKIAkJCQk5N0JDNjlFMjE1MDVGMDgxMDAxQjc0QUMgLyog
RGF0YWJhc2VBdXRob3JpemVyLmggKi8sCiAJCQkJOTdCQzY5RDYxNTA1RjA3NjAwMUI3NEFDIC8q
IERhdGFiYXNlQmFja2VuZC5jcHAgKi8sCiAJCQkJOTdCQzY5RDcxNTA1RjA3NjAwMUI3NEFDIC8q
IERhdGFiYXNlQmFja2VuZC5oICovLAorCQkJCUZFMTZDRkNGMTY5RDFERUMwMEQzQTBDNyAvKiBE
YXRhYmFzZUJhY2tlbmRBc3luYy5jcHAgKi8sCisJCQkJRkUxNkNGRDAxNjlEMURFQzAwRDNBMEM3
IC8qIERhdGFiYXNlQmFja2VuZEFzeW5jLmggKi8sCisJCQkJRkU2RjZBQUQxNjlFMDU3NTAwRkMz
MEEyIC8qIERhdGFiYXNlQmFja2VuZENvbnRleHQuY3BwICovLAorCQkJCUZFNkY2QUFFMTY5RTA1
NzUwMEZDMzBBMiAvKiBEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmggKi8sCisJCQkJRkUxNkNGRDEx
NjlEMURFQzAwRDNBMEM3IC8qIERhdGFiYXNlQmFja2VuZFN5bmMuY3BwICovLAorCQkJCUZFMTZD
RkQyMTY5RDFERUMwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmRTeW5jLmggKi8sCiAJCQkJRkUz
MzcxQTAxNjdDMTFENDAwRURCNzUyIC8qIERhdGFiYXNlQmFzaWNUeXBlcy5oICovLAogCQkJCTk3
QkM2OUUzMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUNhbGxiYWNrLmggKi8sCiAJCQkJOTdC
QzY5RTQxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQ2FsbGJhY2suaWRsICovLApAQCAtMjMy
OTUsNiArMjMzMTQsOSBAQAogCQkJCTk3QkM2QTIxMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCQzZBMjQxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFi
YXNlQXV0aG9yaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCQzY5REIxNTA1RjA3NjAwMUI3
NEFDIC8qIERhdGFiYXNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkUxNkNGRDQxNjlE
MURFRDAwRDNBMEM3IC8qIERhdGFiYXNlQmFja2VuZEFzeW5jLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlGRTZGNkFCMDE2OUUwNTc1MDBGQzMwQTIgLyogRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRkUxNkNGRDYxNjlEMURFRDAwRDNBMEM3IC8qIERhdGFiYXNlQmFj
a2VuZFN5bmMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzM3MUEyMTY3QzExRDQwMEVEQjc1MiAv
KiBEYXRhYmFzZUJhc2ljVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2QTI1MTUwNUYw
ODEwMDFCNzRBQyAvKiBEYXRhYmFzZUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JD
NkEyODE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VDb250ZXh0LmggaW4gSGVhZGVycyAqLywK
QEAgLTI2OTQyLDYgKzI2OTY0LDkgQEAKIAkJCQk5N0JDNkEyMDE1MDVGMDgxMDAxQjc0QUMgLyog
RGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzZBMjMxNTA1RjA4MTAwMUI3NEFD
IC8qIERhdGFiYXNlQXV0aG9yaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0JDNjlEQTE1
MDVGMDc2MDAxQjc0QUMgLyogRGF0YWJhc2VCYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUZFMTZDRkQzMTY5RDFERUQwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmRBc3luYy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlGRTZGNkFBRjE2OUUwNTc1MDBGQzMwQTIgLyogRGF0YWJhc2VCYWNr
ZW5kQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRTE2Q0ZENTE2OUQxREVEMDBEM0Ew
QzcgLyogRGF0YWJhc2VCYWNrZW5kU3luYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0JDNkEy
NzE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUZFNDU2RjE4MTY3N0Q3NEUwMDVFRERGOSAvKiBEYXRhYmFzZU1hbmFnZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkVCMjZEMjgxNjdBOEYyQTAwRkREMjZCIC8qIERhdGFiYXNlU2VydmVy
LmNwcCBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186740</attachid>
            <date>2013-02-05 18:18:25 -0800</date>
            <delta_ts>2013-02-05 18:38:15 -0800</delta_ts>
            <desc>work in progress 3: time to test on the EWS bots.</desc>
            <filename>bug-107475.patch</filename>
            <type>text/plain</type>
            <size>37769</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFz
ZVNlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oCShyZXZpc2lvbiAxNDE5NTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2VTZXJ2ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNyArMjgsOSBAQAogCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkK
IAorI2luY2x1ZGUgIkRhdGFiYXNlQmFzaWNUeXBlcy5oIgogI2luY2x1ZGUgIkRhdGFiYXNlRGV0
YWlscy5oIgorI2luY2x1ZGUgIkRhdGFiYXNlRXJyb3IuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgpAQCAtMzYsOSArMzgsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEYXRh
YmFzZUJhY2tlbmQ7Ci1jbGFzcyBEYXRhYmFzZUJhY2tlbmRBc3luYzsKIGNsYXNzIERhdGFiYXNl
QmFja2VuZENvbnRleHQ7Ci1jbGFzcyBEYXRhYmFzZUJhY2tlbmRTeW5jOwogY2xhc3MgRGF0YWJh
c2VNYW5hZ2VyQ2xpZW50OwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKQEAgLTUyLDYgKzUyLDEz
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgU3RyaW5nIGZ1bGxQYXRoRm9yRGF0YWJhc2UoU2Vj
dXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgY3JlYXRlSWZEb2VzTm90RXhp
c3QgPSB0cnVlKSA9IDA7CiAKKyAgICBlbnVtIE9wZW5BdHRlbXB0eworICAgICAgICBGaXJzdFRy
eVRvT3BlbkRhdGFiYXNlLAorICAgICAgICBSZXRyeU9wZW5EYXRhYmFzZQorICAgIH07CisKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBvcGVuRGF0YWJhc2UoUmVmUHRy
PERhdGFiYXNlQmFja2VuZENvbnRleHQ+JiwgRGF0YWJhc2VUeXBlLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlO
YW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0
YWJhc2UsIERhdGFiYXNlRXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgT3BlbkF0dGVtcHQg
PSBGaXJzdFRyeVRvT3BlbkRhdGFiYXNlKSA9IDA7CisKICNpZiAhUExBVEZPUk0oQ0hST01JVU0p
CiAgICAgdmlydHVhbCBib29sIGhhc0VudHJ5Rm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKikgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBvcmlnaW5zKFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
ID4mIHJlc3VsdCkgPSAwOwpAQCAtNzcsOSArODQsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IHZvaWQgaW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBEYXRhYmFzZUJhY2tl
bmRDb250ZXh0KikgPSAwOwogCi0gICAgdmlydHVhbCBib29sIGNhbkVzdGFibGlzaERhdGFiYXNl
KERhdGFiYXNlQmFja2VuZENvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkgPSAwOwotCi0gICAg
dmlydHVhbCB2b2lkIHNldERhdGFiYXNlRGV0YWlscyhTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3Rp
bWF0ZWRTaXplKSA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgZ2V0TWF4U2l6
ZUZvckRhdGFiYXNlKGNvbnN0IERhdGFiYXNlQmFja2VuZCopID0gMDsKIAogcHJvdGVjdGVkOgpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dXZWJEYXRh
YmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9ET01XaW5kb3dXZWJEYXRhYmFzZS5jcHAJKHJldmlzaW9uIDE0MTk1NikKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93V2ViRGF0YWJhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSw3ICs1MSw2IEBAIFBhc3NSZWZQdHI8RGF0YWJhc2U+IERPTVdpbmRv
d1dlYkRhdGFiYXMKICAgICBpZiAoZGJNYW5hZ2VyLmlzQXZhaWxhYmxlKCkgJiYgd2luZG93LT5k
b2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZSh3aW5kb3ctPmRv
Y3VtZW50KCktPnRvcE9yaWdpbigpKSkKICAgICAgICAgZGF0YWJhc2UgPSBkYk1hbmFnZXIub3Bl
bkRhdGFiYXNlKHdpbmRvdy0+ZG9jdW1lbnQoKSwgbmFtZSwgdmVyc2lvbiwgZGlzcGxheU5hbWUs
IGVzdGltYXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJhY2ssIGVycm9yKTsKIAotICAgIEFTU0VSVChl
cnJvciA9PSBEYXRhYmFzZUVycm9yOjpOb25lIHx8IGVycm9yID09IERhdGFiYXNlRXJyb3I6OkNh
bm5vdE9wZW5EYXRhYmFzZSk7CiAgICAgaWYgKGVycm9yID09IERhdGFiYXNlRXJyb3I6OkNhbm5v
dE9wZW5EYXRhYmFzZSkKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICBpZiAo
IWRhdGFiYXNlICYmICFlYykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAxNDE5NTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYs
NiArNjYsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitQYXNzUmVmUHRyPERhdGFiYXNl
PiBEYXRhYmFzZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPERh
dGFiYXNlQmFja2VuZD4gYmFja2VuZCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGF0YWJh
c2UqPihiYWNrZW5kLmdldCgpKTsKK30KKwogRGF0YWJhc2U6OkRhdGFiYXNlKFBhc3NSZWZQdHI8
RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0LAogICAgIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlz
cGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKICAgICA6IERhdGFiYXNlQmFz
ZShkYXRhYmFzZUNvbnRleHQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKQEAgLTEzMywyMyAr
MTM4LDYgQEAgU3RyaW5nIERhdGFiYXNlOjp2ZXJzaW9uKCkgY29uc3QKICAgICByZXR1cm4gRGF0
YWJhc2VCYWNrZW5kOjp2ZXJzaW9uKCk7CiB9CiAKLWJvb2wgRGF0YWJhc2U6Om9wZW5BbmRWZXJp
ZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImIGVy
cm9yLCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKLXsKLSAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6
ZXIgc3luY2hyb25pemVyOwotICAgIGlmICghZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhy
ZWFkKCkgfHwgZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnRlcm1pbmF0aW9u
UmVxdWVzdGVkKCZzeW5jaHJvbml6ZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSNpZiBQ
TEFURk9STShDSFJPTUlVTSkKLSAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5wcmVwYXJl
VG9PcGVuRGF0YWJhc2UodGhpcyk7Ci0jZW5kaWYKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsK
LSAgICBPd25QdHI8RGF0YWJhc2VPcGVuVGFzaz4gdGFzayA9IERhdGFiYXNlT3BlblRhc2s6OmNy
ZWF0ZSh0aGlzLCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgJnN5bmNocm9uaXplciwgZXJyb3Is
IGVycm9yTWVzc2FnZSwgc3VjY2Vzcyk7Ci0gICAgZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNl
VGhyZWFkKCktPnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0YXNrLnJlbGVhc2UoKSk7Ci0gICAgc3lu
Y2hyb25pemVyLndhaXRGb3JUYXNrQ29tcGxldGlvbigpOwotCi0gICAgcmV0dXJuIHN1Y2Nlc3M7
Ci19Ci0KIHZvaWQgRGF0YWJhc2U6Om1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpCiB7CiAgICAgaWYg
KG1fZGVsZXRlZCB8fCAhZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCkpCkBAIC0y
MDQsMTggKzE5Miw2IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZTo6bWF4aW11bVNpemUK
ICAgICByZXR1cm4gRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuZ2V0TWF4U2l6ZUZvckRhdGFi
YXNlKHRoaXMpOwogfQogCi1ib29sIERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29s
IHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiBlcnJvciwgU3RyaW5nJiBl
cnJvck1lc3NhZ2UpCi17Ci0gICAgaWYgKERhdGFiYXNlQmFja2VuZDo6cGVyZm9ybU9wZW5BbmRW
ZXJpZnkoc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGVycm9yLCBlcnJvck1lc3NhZ2UpKSB7Ci0g
ICAgICAgIGlmIChkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKSkKLSAgICAgICAg
ICAgIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZU9w
ZW4odGhpcyk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCiB2b2lkIERhdGFiYXNlOjpjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0cmluZyYgb2xk
VmVyc2lvbiwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNz
UmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3ND
YWxsYmFjaykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlLmgJKHJldmlzaW9uIDE0MTk1NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtODgsMTMgKzg4LDExIEBAIHBy
aXZhdGU6CiAgICAgRGF0YWJhc2UoUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0Piwg
Y29uc3QgU3RyaW5nJiBuYW1lLAogICAgICAgICBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lv
biwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXpl
KTsKICAgICBQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZEFzeW5jPiBiYWNrZW5kKCk7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2U+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+KTsKIAogICAgIHZvaWQgcnVuVHJhbnNhY3Rp
b24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFu
c2FjdGlvbkVycm9yQ2FsbGJhY2s+LAogICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0
cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlv
bldyYXBwZXI+LCBib29sIHJlYWRPbmx5KTsKIAotICAgIGJvb2wgb3BlbkFuZFZlcmlmeVZlcnNp
b24oYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYg
ZXJyb3JNZXNzYWdlKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9v
bCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYgZXJyb3JN
ZXNzYWdlKTsKLQogICAgIHZvaWQgaW5Qcm9ncmVzc1RyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAg
ICAgdm9pZCBzY2hlZHVsZVRyYW5zYWN0aW9uKCk7CiAKQEAgLTExMCw2ICsxMDgsNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9kZWxldGVkOwogCiAgICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlTWFu
YWdlcjsKKyAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2VTZXJ2ZXI7IC8vIEZJWE1FOiByZW1vdmUg
dGhpcyB3aGVuIHRoZSBiYWNrZW5kIGhhcyBiZWVuIHNwbGl0IG91dC4KICAgICBmcmllbmQgY2xh
c3MgRGF0YWJhc2VCYWNrZW5kQXN5bmM7IC8vIEZJWE1FOiByZW1vdmUgdGhpcyB3aGVuIHRoZSBi
YWNrZW5kIGhhcyBiZWVuIHNwbGl0IG91dC4KIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuaAkocmV2aXNpb24g
MTQxOTU2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJh
Y2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMyw3IEBAIHByb3RlY3RlZDoKIAog
ICAgIHZvaWQgY2xvc2VEYXRhYmFzZSgpOwogCisgICAgdmlydHVhbCBib29sIG9wZW5BbmRWZXJp
ZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImLCBT
dHJpbmcmIGVycm9yTWVzc2FnZSkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtT3BlbkFu
ZFZlcmlmeShib29sIHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9y
JiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogCiAgICAgYm9vbCBnZXRWZXJzaW9uRnJvbURhdGFi
YXNlKFN0cmluZyYgdmVyc2lvbiwgYm9vbCBzaG91bGRDYWNoZVZlcnNpb24gPSB0cnVlKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5
bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VCYWNrZW5kQXN5bmMuY3BwCShyZXZpc2lvbiAxNDE5NTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEFzeW5jLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNiArMjksOSBAQAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKICNp
bmNsdWRlICJEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUYXNr
LmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVRyYWNr
ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNyw2ICs0MCwzNCBAQCBEYXRhYmFz
ZUJhY2tlbmRBc3luYzo6RGF0YWJhc2VCYWNrZW5kQXN5CiB7CiB9CiAKK2Jvb2wgRGF0YWJhc2VC
YWNrZW5kQXN5bmM6Om9wZW5BbmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0
YWJhc2UsIERhdGFiYXNlRXJyb3ImIGVycm9yLCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKK3sKKyAg
ICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIgc3luY2hyb25pemVyOworICAgIGlmICghZGF0YWJh
c2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCkgfHwgZGF0YWJhc2VDb250ZXh0KCktPmRhdGFi
YXNlVGhyZWFkKCktPnRlcm1pbmF0aW9uUmVxdWVzdGVkKCZzeW5jaHJvbml6ZXIpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBEYXRhYmFzZVRy
YWNrZXI6OnRyYWNrZXIoKS5wcmVwYXJlVG9PcGVuRGF0YWJhc2UodGhpcyk7CisjZW5kaWYKKyAg
ICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBPd25QdHI8RGF0YWJhc2VPcGVuVGFzaz4gdGFz
ayA9IERhdGFiYXNlT3BlblRhc2s6OmNyZWF0ZSh0aGlzLCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFz
ZSwgJnN5bmNocm9uaXplciwgZXJyb3IsIGVycm9yTWVzc2FnZSwgc3VjY2Vzcyk7CisgICAgZGF0
YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0
YXNrLnJlbGVhc2UoKSk7CisgICAgc3luY2hyb25pemVyLndhaXRGb3JUYXNrQ29tcGxldGlvbigp
OworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK2Jvb2wgRGF0YWJhc2VCYWNrZW5kQXN5bmM6
OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFi
YXNlRXJyb3ImIGVycm9yLCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKK3sKKyAgICBpZiAoRGF0YWJh
c2VCYWNrZW5kOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwg
ZXJyb3IsIGVycm9yTWVzc2FnZSkpIHsKKyAgICAgICAgaWYgKGRhdGFiYXNlQ29udGV4dCgpLT5k
YXRhYmFzZVRocmVhZCgpKQorICAgICAgICAgICAgZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNl
VGhyZWFkKCktPnJlY29yZERhdGFiYXNlT3Blbih0aGlzKTsKKworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJh
Y2tlbmRBc3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuaAkocmV2aXNpb24gMTQxOTU2KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRBc3luYy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MywxMSArNDMsMTkgQEAgY2xhc3MgRGF0YWJhc2VTZXJ2ZXI7CiAvLyBh
dmFpbGFibGUuIFRoaXMgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggdGhlIGFjdHVhbCBpbXBsZW1l
bnRhdGlvbiBsYXRlci4KIAogY2xhc3MgRGF0YWJhc2VCYWNrZW5kQXN5bmMgOiBwdWJsaWMgRGF0
YWJhc2VCYWNrZW5kIHsKLXByb3RlY3RlZDoKK3B1YmxpYzoKICAgICBEYXRhYmFzZUJhY2tlbmRB
c3luYyhQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+LCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlO
YW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwogCi0gICAgZnJpZW5kIGNsYXNzIERh
dGFiYXNlTWFuYWdlcjsgLy8gRklYTUU6IHJlbW92ZSB0aGlzIG9uY2Ugd2UgaGF2ZSBpc29sYXRl
ZCB0aGlzIHRvIHRoZSBiYWNrZW5kLgotICAgIGZyaWVuZCBjbGFzcyBEYXRhYmFzZVNlcnZlcjsK
KyAgICB2aXJ0dWFsIGJvb2wgb3BlbkFuZFZlcmlmeVZlcnNpb24oYm9vbCBzZXRWZXJzaW9uSW5O
ZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKKyAgICB2
aXJ0dWFsIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRh
YmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKKworcHJpdmF0ZToK
KyAgICBjbGFzcyBEYXRhYmFzZU9wZW5UYXNrOworICAgIGNsYXNzIERhdGFiYXNlQ2xvc2VUYXNr
OworICAgIGNsYXNzIERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrOworICAgIGNsYXNzIERhdGFiYXNl
VGFibGVOYW1lc1Rhc2s7CisKKyAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2U7CiAKIHByaXZhdGU6
CiAgICAgY2xhc3MgRGF0YWJhc2VPcGVuVGFzazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kU3luYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRTeW5jLmNwcAko
cmV2aXNpb24gMTQxOTU2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZUJhY2tlbmRTeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKICNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRDb250
ZXh0LmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNTEsNiArNTIsMTQgQEAgRGF0YWJhc2VCYWNrZW5kU3luYzo6fkRhdGFiYXNlQmFj
a2VuZFN5bgogICAgICAgICBjbG9zZURhdGFiYXNlKCk7CiB9CiAKK2Jvb2wgRGF0YWJhc2VCYWNr
ZW5kU3luYzo6b3BlbkFuZFZlcmlmeVZlcnNpb24oYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFz
ZSwgRGF0YWJhc2VFcnJvciYgZXJyb3IsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQoreworI2lmIFBM
QVRGT1JNKENIUk9NSVVNKQorICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnByZXBhcmVU
b09wZW5EYXRhYmFzZSh0aGlzKTsKKyNlbmRpZgorICAgIHJldHVybiBwZXJmb3JtT3BlbkFuZFZl
cmlmeShzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZXJyb3IsIGVycm9yTWVzc2FnZSk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0Up
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2Vu
ZFN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlQmFja2VuZFN5bmMuaAkocmV2aXNpb24gMTQxOTU2KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRTeW5jLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDEzICs0MywxMCBAQCBjbGFzcyBEYXRhYmFzZVNlcnZlcjsKIAogY2xhc3MgRGF0
YWJhc2VCYWNrZW5kU3luYyA6IHB1YmxpYyBEYXRhYmFzZUJhY2tlbmQgewogcHVibGljOgotICAg
IHZpcnR1YWwgfkRhdGFiYXNlQmFja2VuZFN5bmMoKTsKLQotcHJvdGVjdGVkOgogICAgIERhdGFi
YXNlQmFja2VuZFN5bmMoUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5n
JiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKKyAgICB2aXJ0dWFs
IH5EYXRhYmFzZUJhY2tlbmRTeW5jKCk7CiAKLSAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2VNYW5h
Z2VyOyAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgb25jZSB3ZSBoYXZlIGlzb2xhdGVkIHRoaXMgdG8g
dGhlIGJhY2tlbmQuCi0gICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlU2VydmVyOworICAgIHZpcnR1
YWwgYm9vbCBvcGVuQW5kVmVyaWZ5VmVyc2lvbihib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNl
LCBEYXRhYmFzZUVycm9yJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZUVycm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZUVycm9yLmgJKHJldmlzaW9uIDE0MTk1NikKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VFcnJvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw3ICszNyw4IEBAIEVOVU1fQ0xBU1MoRGF0YWJhc2VFcnJvcikgewogICAgIENhbm5vdE9w
ZW5EYXRhYmFzZSwKICAgICBEYXRhYmFzZUlzQmVpbmdEZWxldGVkLAogICAgIERhdGFiYXNlU2l6
ZUV4Y2VlZGVkUXVvdGEsCi0gICAgRGF0YWJhc2VTaXplT3ZlcmZsb3dlZAorICAgIERhdGFiYXNl
U2l6ZU92ZXJmbG93ZWQsCisgICAgR2VuZXJpY1NlY3VyaXR5RXJyb3IKIH0gRU5VTV9DTEFTU19F
TkQoRGF0YWJhc2VFcnJvcik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdl
ci5jcHAJKHJldmlzaW9uIDE0MTk1NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBA
QAogCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJh
c2VTZXJ2ZXIuaCIKICNpbmNsdWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlQmFj
a2VuZC5oIgogI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZEFzeW5jLmgiCkBAIC0yMTAsMjUgKzIx
MSw0NyBAQCBQYXNzUmVmUHRyPERhdGFiYXNlPiBEYXRhYmFzZU1hbmFnZXI6Om9wCiAgICAgUmVm
UHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+IGJhY2tlbmRDb250ZXh0ID0gZGF0YWJhc2VDb250
ZXh0LT5iYWNrZW5kKCk7CiAgICAgQVNTRVJUKGVycm9yID09IERhdGFiYXNlRXJyb3I6Ok5vbmUp
OwogCi0gICAgaWYgKCFtX3NlcnZlci0+Y2FuRXN0YWJsaXNoRGF0YWJhc2UoYmFja2VuZENvbnRl
eHQuZ2V0KCksIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSkgewotICAgICAgICBM
T0coU3RvcmFnZUFQSSwgIkRhdGFiYXNlICVzIGZvciBvcmlnaW4gJXMgbm90IGFsbG93ZWQgdG8g
YmUgZXN0YWJsaXNoZWQiLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBjb250ZXh0LT5zZWN1cml0eU9y
aWdpbigpLT50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotCisgICAgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSA9ICFjcmVhdGlvbkNhbGxi
YWNrOwogICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgUmVmUHRyPERhdGFiYXNlPiBkYXRh
YmFzZSA9IGFkb3B0UmVmKG5ldyBEYXRhYmFzZShiYWNrZW5kQ29udGV4dCwgbmFtZSwgZXhwZWN0
ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpOwotCi0gICAgaWYgKCFkYXRh
YmFzZS0+b3BlbkFuZFZlcmlmeVZlcnNpb24oIWNyZWF0aW9uQ2FsbGJhY2ssIGVycm9yLCBlcnJv
ck1lc3NhZ2UpKSB7Ci0gICAgICAgIGxvZ0Vycm9yTWVzc2FnZShjb250ZXh0LCBlcnJvck1lc3Nh
Z2UpOwotICAgICAgICByZXR1cm4gMDsKKyAgICBSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBiYWNr
ZW5kID0gbV9zZXJ2ZXItPm9wZW5EYXRhYmFzZShiYWNrZW5kQ29udGV4dCwgRGF0YWJhc2VUeXBl
OjpBc3luYywgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6
ZSwgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGVycm9yLCBlcnJvck1lc3NhZ2UpOworICAgIGlm
ICghYmFja2VuZCkgeworICAgICAgICBBU1NFUlQoZXJyb3IgIT0gRGF0YWJhc2VFcnJvcjo6Tm9u
ZSk7CisgICAgICAgIGlmIChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpEYXRhYmFzZUlzQmVpbmdE
ZWxldGVkIHx8IGVycm9yID09IERhdGFiYXNlRXJyb3I6OkRhdGFiYXNlU2l6ZU92ZXJmbG93ZWQp
CisgICAgICAgICAgICBnb3RvIGNhbm5vdENyZWF0ZURhdGFiYXNlOworICAgICAgICBpZiAoZXJy
b3IgPT0gRGF0YWJhc2VFcnJvcjo6RGF0YWJhc2VTaXplRXhjZWVkZWRRdW90YSkgeworICAgICAg
ICAgICAgLy8gTm90aWZ5IHRoZSBjbGllbnQgdGhhdCB3ZSd2ZSBleGNlZWRlZCB0aGUgZGF0YWJh
c2UgcXVvdGEuCisgICAgICAgICAgICAvLyBUaGUgY2xpZW50IG1heSB3YW50IHRvIGluY3JlYXNl
IHRoZSBxdW90YSwgYW5kIHdlJ2xsIGdpdmUgaXQKKyAgICAgICAgICAgIC8vIG9uZSBtb3JlIHRy
eSBhZnRlciBpZiB0aGF0IGlzIHRoZSBjYXNlLgorICAgICAgICAgICAgZGF0YWJhc2VDb250ZXh0
LT5kYXRhYmFzZUV4Y2VlZGVkUXVvdGEobmFtZSwgRGF0YWJhc2VEZXRhaWxzKG5hbWUuaXNvbGF0
ZWRDb3B5KCksIGRpc3BsYXlOYW1lLmlzb2xhdGVkQ29weSgpLCBlc3RpbWF0ZWRTaXplLCAwKSk7
CisKKyAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBlcnJvciBiZWZvcmUgcmV0cnlpbmcuCisgICAg
ICAgICAgICBlcnJvciA9IERhdGFiYXNlRXJyb3I6Ok5vbmU7CisKKyAgICAgICAgICAgIC8vIFJl
dHJ5IG9wZW5pbmcgdGhlIGRhdGFiYXNlIGlmIHBvc3NpYmxlLgorICAgICAgICAgICAgYmFja2Vu
ZCA9IG1fc2VydmVyLT5vcGVuRGF0YWJhc2UoYmFja2VuZENvbnRleHQsIERhdGFiYXNlVHlwZTo6
QXN5bmMsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUs
IHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBlcnJvciwgZXJyb3JNZXNzYWdlLCBBYnN0cmFjdERh
dGFiYXNlU2VydmVyOjpSZXRyeU9wZW5EYXRhYmFzZSk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIWJhY2tlbmQpIHsKKyAgICAgICAgICAgIEFTU0VSVChlcnJvciAhPSBEYXRhYmFzZUVycm9y
OjpOb25lKTsKKworICAgICAgICAgICAgaWYgKGVycm9yID09IERhdGFiYXNlRXJyb3I6OkNhbm5v
dE9wZW5EYXRhYmFzZSkgeworICAgICAgICAgICAgICAgIGxvZ0Vycm9yTWVzc2FnZShjb250ZXh0
LCBlcnJvck1lc3NhZ2UpOworICAgICAgICAgICAgICAgIHJldHVybiAwOyAvLyBGYWlsZWQgdG8g
b3BlbiB0aGUgZGF0YWJhc2UuCisgICAgICAgICAgICB9CisKK2Nhbm5vdENyZWF0ZURhdGFiYXNl
OgorICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJEYXRhYmFzZSAlcyBmb3Igb3JpZ2luICVz
IG5vdCBhbGxvd2VkIHRvIGJlIGVzdGFibGlzaGVkIiwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgY29u
dGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAg
ICAgICAgICByZXR1cm4gMDsgLy8gRmFpbGVkIHRvIG9wZW4gdGhlIGRhdGFiYXNlLgorICAgICAg
ICB9CiAgICAgfQogCi0gICAgbV9zZXJ2ZXItPnNldERhdGFiYXNlRGV0YWlscyhjb250ZXh0LT5z
ZWN1cml0eU9yaWdpbigpLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7Ci0gICAg
ZGF0YWJhc2VDb250ZXh0LT5zZXRIYXNPcGVuRGF0YWJhc2VzKCk7CisgICAgLy8gTm93IHRoYXQg
d2UgaGF2ZSBhIGJhY2tlbmQsIHdlIGNhbiBjcmVhdGUgdGhlIGZyb250ZW5kIGRiIGZvciBpdDoK
KyAgICBSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlID0gRGF0YWJhc2U6OmNyZWF0ZShjb250ZXh0
LCBiYWNrZW5kKTsKIAorICAgIGRhdGFiYXNlQ29udGV4dC0+c2V0SGFzT3BlbkRhdGFiYXNlcygp
OwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkT3BlbkRhdGFiYXNlKGNvbnRleHQs
IGRhdGFiYXNlLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5ob3N0KCksIG5hbWUsIGV4cGVj
dGVkVmVyc2lvbik7CiAKLSAgICBpZiAoZGF0YWJhc2UtPmlzTmV3KCkgJiYgY3JlYXRpb25DYWxs
YmFjay5nZXQoKSkgeworICAgIGlmIChiYWNrZW5kLT5pc05ldygpICYmIGNyZWF0aW9uQ2FsbGJh
Y2suZ2V0KCkpIHsKICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIERhdGFiYXNl
Q3JlYXRpb25DYWxsYmFja1Rhc2sgZm9yIGRhdGFiYXNlICVwXG4iLCBkYXRhYmFzZS5nZXQoKSk7
CiAgICAgICAgIGRhdGFiYXNlLT5tX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKERh
dGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2s6OmNyZWF0ZShkYXRhYmFzZSwgY3JlYXRpb25DYWxs
YmFjaykpOwogICAgIH0KQEAgLTI0NSwyMiArMjY4LDQ0IEBAIFBhc3NSZWZQdHI8RGF0YWJhc2VT
eW5jPiBEYXRhYmFzZU1hbmFnZXIKICAgICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhyZWFk
KCkpOwogICAgIEFTU0VSVChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpOb25lKTsKIAotICAgIGlm
ICghbV9zZXJ2ZXItPmNhbkVzdGFibGlzaERhdGFiYXNlKGJhY2tlbmRDb250ZXh0LmdldCgpLCBu
YW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpIHsKLSAgICAgICAgTE9HKFN0b3JhZ2VB
UEksICJEYXRhYmFzZSAlcyBmb3Igb3JpZ2luICVzIG5vdCBhbGxvd2VkIHRvIGJlIGVzdGFibGlz
aGVkIiwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9T
dHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQorICAg
IGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UgPSAhY3JlYXRpb25DYWxsYmFjazsKICAgICBT
dHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIFJlZlB0cjxEYXRhYmFzZVN5bmM+IGRhdGFiYXNlID0g
YWRvcHRSZWYobmV3IERhdGFiYXNlU3luYyhiYWNrZW5kQ29udGV4dCwgbmFtZSwgZXhwZWN0ZWRW
ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpOwotCi0gICAgaWYgKCFkYXRhYmFz
ZS0+b3BlbkFuZFZlcmlmeVZlcnNpb24oIWNyZWF0aW9uQ2FsbGJhY2ssIGVycm9yLCBlcnJvck1l
c3NhZ2UpKSB7Ci0gICAgICAgIGxvZ0Vycm9yTWVzc2FnZShjb250ZXh0LCBlcnJvck1lc3NhZ2Up
OwotICAgICAgICByZXR1cm4gMDsKKyAgICBSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBiYWNrZW5k
ID0gbV9zZXJ2ZXItPm9wZW5EYXRhYmFzZShiYWNrZW5kQ29udGV4dCwgRGF0YWJhc2VUeXBlOjpT
eW5jLCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBz
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZXJyb3IsIGVycm9yTWVzc2FnZSk7CisgICAgaWYgKCFi
YWNrZW5kKSB7CisgICAgICAgIEFTU0VSVChlcnJvciAhPSBEYXRhYmFzZUVycm9yOjpOb25lKTsK
KyAgICAgICAgaWYgKGVycm9yID09IERhdGFiYXNlRXJyb3I6OkRhdGFiYXNlSXNCZWluZ0RlbGV0
ZWQgfHwgZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6RGF0YWJhc2VTaXplT3ZlcmZsb3dlZCkKKyAg
ICAgICAgICAgIGdvdG8gY2Fubm90Q3JlYXRlRGF0YWJhc2U7CisgICAgICAgIGlmIChlcnJvciA9
PSBEYXRhYmFzZUVycm9yOjpEYXRhYmFzZVNpemVFeGNlZWRlZFF1b3RhKSB7CisgICAgICAgICAg
ICAvLyBOb3RpZnkgdGhlIGNsaWVudCB0aGF0IHdlJ3ZlIGV4Y2VlZGVkIHRoZSBkYXRhYmFzZSBx
dW90YS4KKyAgICAgICAgICAgIC8vIFRoZSBjbGllbnQgbWF5IHdhbnQgdG8gaW5jcmVhc2UgdGhl
IHF1b3RhLCBhbmQgd2UnbGwgZ2l2ZSBpdAorICAgICAgICAgICAgLy8gb25lIG1vcmUgdHJ5IGFm
dGVyIGlmIHRoYXQgaXMgdGhlIGNhc2UuCisgICAgICAgICAgICBkYXRhYmFzZUNvbnRleHQtPmRh
dGFiYXNlRXhjZWVkZWRRdW90YShuYW1lLCBEYXRhYmFzZURldGFpbHMobmFtZS5pc29sYXRlZENv
cHkoKSwgZGlzcGxheU5hbWUuaXNvbGF0ZWRDb3B5KCksIGVzdGltYXRlZFNpemUsIDApKTsKKwor
ICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGVycm9yIGJlZm9yZSByZXRyeWluZy4KKyAgICAgICAg
ICAgIGVycm9yID0gRGF0YWJhc2VFcnJvcjo6Tm9uZTsKKworICAgICAgICAgICAgLy8gUmV0cnkg
b3BlbmluZyB0aGUgZGF0YWJhc2UgaWYgcG9zc2libGUuCisgICAgICAgICAgICBiYWNrZW5kID0g
bV9zZXJ2ZXItPm9wZW5EYXRhYmFzZShiYWNrZW5kQ29udGV4dCwgRGF0YWJhc2VUeXBlOjpTeW5j
LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBzZXRW
ZXJzaW9uSW5OZXdEYXRhYmFzZSwgZXJyb3IsIGVycm9yTWVzc2FnZSwgQWJzdHJhY3REYXRhYmFz
ZVNlcnZlcjo6UmV0cnlPcGVuRGF0YWJhc2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFi
YWNrZW5kKSB7CisgICAgICAgICAgICBBU1NFUlQoZXJyb3IgIT0gRGF0YWJhc2VFcnJvcjo6Tm9u
ZSk7CisKKyAgICAgICAgICAgIGlmIChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpDYW5ub3RPcGVu
RGF0YWJhc2UpIHsKKyAgICAgICAgICAgICAgICBsb2dFcnJvck1lc3NhZ2UoY29udGV4dCwgZXJy
b3JNZXNzYWdlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsgLy8gRmFpbGVkIHRvIG9wZW4g
dGhlIGRhdGFiYXNlLgorICAgICAgICAgICAgfQorCitjYW5ub3RDcmVhdGVEYXRhYmFzZToKKyAg
ICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2UgJXMgZm9yIG9yaWdpbiAlcyBub3Qg
YWxsb3dlZCB0byBiZSBlc3RhYmxpc2hlZCIsIG5hbWUuYXNjaWkoKS5kYXRhKCksIGNvbnRleHQt
PnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAg
ICAgcmV0dXJuIDA7IC8vIEZhaWxlZCB0byBvcGVuIHRoZSBkYXRhYmFzZS4KKyAgICAgICAgfQog
ICAgIH0KIAotICAgIG1fc2VydmVyLT5zZXREYXRhYmFzZURldGFpbHMoY29udGV4dC0+c2VjdXJp
dHlPcmlnaW4oKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpOworICAgIC8vIE5v
dyB0aGF0IHdlIGhhdmUgYSBiYWNrZW5kLCB3ZSBjYW4gY3JlYXRlIHRoZSBmcm9udGVuZCBkYiBm
b3IgaXQ6CisgICAgUmVmUHRyPERhdGFiYXNlU3luYz4gZGF0YWJhc2UgPSBEYXRhYmFzZVN5bmM6
OmNyZWF0ZShjb250ZXh0LCBiYWNrZW5kKTsKIAotICAgIGlmIChkYXRhYmFzZS0+aXNOZXcoKSAm
JiBjcmVhdGlvbkNhbGxiYWNrLmdldCgpKSB7CisgICAgaWYgKGJhY2tlbmQtPmlzTmV3KCkgJiYg
Y3JlYXRpb25DYWxsYmFjay5nZXQoKSkgewogICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkludm9r
aW5nIHRoZSBjcmVhdGlvbiBjYWxsYmFjayBmb3IgZGF0YWJhc2UgJXBcbiIsIGRhdGFiYXNlLmdl
dCgpKTsKICAgICAgICAgY3JlYXRpb25DYWxsYmFjay0+aGFuZGxlRXZlbnQoZGF0YWJhc2UuZ2V0
KCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuaAkocmV2aXNpb24gMTQxOTU2KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAotI2luY2x1
ZGUgIkFic3RyYWN0RGF0YWJhc2VTZXJ2ZXIuaCIKICNpbmNsdWRlICJEYXRhYmFzZUJhc2ljVHlw
ZXMuaCIKICNpbmNsdWRlICJEYXRhYmFzZURldGFpbHMuaCIKICNpbmNsdWRlICJEYXRhYmFzZUVy
cm9yLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
U2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlU2VydmVyLmNwcAkocmV2aXNpb24gMTQxOTU2KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVNlcnZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDkgKzI4LDExIEBACiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCisjaW5jbHVk
ZSAiRGF0YWJhc2UuaCIKICNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRBc3luYy5oIgogI2luY2x1
ZGUgIkRhdGFiYXNlQmFja2VuZENvbnRleHQuaCIKICNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRT
eW5jLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VTeW5jLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUcmFj
a2VyLmgiCiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKQEAgLTE0OSwxNCArMTUxLDQw
IEBAIHZvaWQgRGF0YWJhc2VTZXJ2ZXI6OmludGVycnVwdEFsbERhdGFiYXMKICAgICBEYXRhYmFz
ZVRyYWNrZXI6OnRyYWNrZXIoKS5pbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnRl
eHQpOwogfQogCi1ib29sIERhdGFiYXNlU2VydmVyOjpjYW5Fc3RhYmxpc2hEYXRhYmFzZShEYXRh
YmFzZUJhY2tlbmRDb250ZXh0KiBiYWNrZW5kQ29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCitQ
YXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZD4gRGF0YWJhc2VTZXJ2ZXI6Om9wZW5EYXRhYmFzZShS
ZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4mIGJhY2tlbmRDb250ZXh0LCBEYXRhYmFzZVR5
cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lv
biwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXpl
LCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yICZlcnJvciwgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UsIE9wZW5BdHRlbXB0IGF0dGVtcHQpCiB7Ci0gICAgcmV0dXJuIERh
dGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmNhbkVzdGFibGlzaERhdGFiYXNlKGJhY2tlbmRDb250
ZXh0LCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7Ci19CisgICAgUmVmUHRyPERh
dGFiYXNlQmFja2VuZD4gZGF0YWJhc2U7CisgICAgYm9vbCBzdWNjZXNzOworICAgIAorICAgIHN3
aXRjaCAoYXR0ZW1wdCkgeworICAgIGNhc2UgRmlyc3RUcnlUb09wZW5EYXRhYmFzZToKKyAgICAg
ICAgc3VjY2VzcyA9IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmNhbkVzdGFibGlzaERhdGFi
YXNlKGJhY2tlbmRDb250ZXh0LmdldCgpLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6
ZSwgZXJyb3IpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJldHJ5T3BlbkRhdGFiYXNlOgor
ICAgICAgICBzdWNjZXNzID0gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucmV0cnlDYW5Fc3Rh
Ymxpc2hEYXRhYmFzZShiYWNrZW5kQ29udGV4dC5nZXQoKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVz
dGltYXRlZFNpemUsIGVycm9yKTsKKyAgICB9CisKKyAgICBpZiAoc3VjY2VzcykKKyAgICAgICAg
ZGF0YWJhc2UgPSBjcmVhdGVEYXRhYmFzZShiYWNrZW5kQ29udGV4dCwgdHlwZSwgbmFtZSwgZXhw
ZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgc2V0VmVyc2lvbkluTmV3
RGF0YWJhc2UsIGVycm9yLCBlcnJvck1lc3NhZ2UpOworICAgIHJldHVybiBkYXRhYmFzZS5yZWxl
YXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBEYXRhYmFzZVNlcnZlcjo6
Y3JlYXRlRGF0YWJhc2UoUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+JiBiYWNrZW5kQ29u
dGV4dCwgRGF0YWJhc2VUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxv
bmcgZXN0aW1hdGVkU2l6ZSwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VF
cnJvciYgZXJyb3IsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQoreworICAgIFJlZlB0cjxEYXRhYmFz
ZUJhY2tlbmQ+IGRhdGFiYXNlOworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgRGF0YWJh
c2VUeXBlOjpBc3luYzoKKyAgICAgICAgZGF0YWJhc2UgPSBhZG9wdFJlZihuZXcgRGF0YWJhc2Uo
YmFja2VuZENvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGlt
YXRlZFNpemUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEYXRhYmFzZVR5cGU6OlN5bmM6
CisgICAgICAgIGRhdGFiYXNlID0gYWRvcHRSZWYobmV3IERhdGFiYXNlU3luYyhiYWNrZW5kQ29u
dGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkp
OworICAgIH0KIAotdm9pZCBEYXRhYmFzZVNlcnZlcjo6c2V0RGF0YWJhc2VEZXRhaWxzKFNlY3Vy
aXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNw
bGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQotewotICAgIERhdGFiYXNlVHJh
Y2tlcjo6dHJhY2tlcigpLnNldERhdGFiYXNlRGV0YWlscyhvcmlnaW4sIG5hbWUsIGRpc3BsYXlO
YW1lLCBlc3RpbWF0ZWRTaXplKTsKKyAgICBpZiAoIWRhdGFiYXNlLT5vcGVuQW5kVmVyaWZ5VmVy
c2lvbihzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZXJyb3IsIGVycm9yTWVzc2FnZSkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0RGF0YWJh
c2VEZXRhaWxzKGJhY2tlbmRDb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBuYW1lLCBkaXNwbGF5
TmFtZSwgZXN0aW1hdGVkU2l6ZSk7CisgICAgcmV0dXJuIGRhdGFiYXNlLnJlbGVhc2UoKTsKIH0K
IAogdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlU2VydmVyOjpnZXRNYXhTaXplRm9yRGF0YWJh
c2UoY29uc3QgRGF0YWJhc2VCYWNrZW5kKiBkYXRhYmFzZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmgJKHJldmlzaW9u
IDE0MTk1NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VT
ZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsOCBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIFN0cmluZyBmdWxsUGF0aEZvckRhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KTsKIAorICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+IG9wZW5EYXRhYmFzZShSZWZQdHI8RGF0YWJhc2VC
YWNrZW5kQ29udGV4dD4mLCBEYXRhYmFzZVR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2ln
bmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0
YWJhc2VFcnJvciYsIFN0cmluZyYgZXJyb3JNZXNzYWdlLCBPcGVuQXR0ZW1wdCk7CisKICNpZiAh
UExBVEZPUk0oQ0hST01JVU0pCiAgICAgdmlydHVhbCBib29sIGhhc0VudHJ5Rm9yT3JpZ2luKFNl
Y3VyaXR5T3JpZ2luKik7CiAgICAgdmlydHVhbCB2b2lkIG9yaWdpbnMoVmVjdG9yPFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gPiYgcmVzdWx0KTsKQEAgLTcwLDEwICs3MiwxMCBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgaW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBE
YXRhYmFzZUJhY2tlbmRDb250ZXh0Kik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgY2FuRXN0YWJsaXNo
RGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKLQot
ICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhYmFzZURldGFpbHMoU2VjdXJpdHlPcmlnaW4qLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcg
ZXN0aW1hdGVkU2l6ZSk7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgZ2V0TWF4U2l6
ZUZvckRhdGFiYXNlKGNvbnN0IERhdGFiYXNlQmFja2VuZCopOworCitwcm90ZWN0ZWQ6CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZD4gY3JlYXRlRGF0YWJhc2UoUmVmUHRy
PERhdGFiYXNlQmFja2VuZENvbnRleHQ+JiwgRGF0YWJhc2VUeXBlLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlO
YW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0
YWJhc2UsIERhdGFiYXNlRXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuY3BwCShyZXZpc2lvbiAxNDE5NTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUxLDYgKzUxLDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorUGFzc1Jl
ZlB0cjxEYXRhYmFzZVN5bmM+IERhdGFiYXNlU3luYzo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZD4gYmFja2VuZCkKK3sKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8RGF0YWJhc2VTeW5jKj4oYmFja2VuZC5nZXQoKSk7Cit9CisKIERhdGFi
YXNlU3luYzo6RGF0YWJhc2VTeW5jKFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4g
ZGF0YWJhc2VDb250ZXh0LAogICAgIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBl
eHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcg
ZXN0aW1hdGVkU2l6ZSkKICAgICA6IERhdGFiYXNlQmFzZShkYXRhYmFzZUNvbnRleHQtPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSkKQEAgLTE1NCwxNCArMTU5LDYgQEAgdm9pZCBEYXRhYmFzZVN5
bmM6OnJ1blRyYW5zYWN0aW9uKFBhc3NSZQogICAgIHNldExhc3RFcnJvck1lc3NhZ2UoIiIpOwog
fQogCi1ib29sIERhdGFiYXNlU3luYzo6b3BlbkFuZFZlcmlmeVZlcnNpb24oYm9vbCBzZXRWZXJz
aW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYgZXJyb3IsIFN0cmluZyYgZXJyb3JNZXNz
YWdlKQotewotI2lmIFBMQVRGT1JNKENIUk9NSVVNKQotICAgIERhdGFiYXNlVHJhY2tlcjo6dHJh
Y2tlcigpLnByZXBhcmVUb09wZW5EYXRhYmFzZSh0aGlzKTsKLSNlbmRpZgotICAgIHJldHVybiBw
ZXJmb3JtT3BlbkFuZFZlcmlmeShzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZXJyb3IsIGVycm9y
TWVzc2FnZSk7Ci19Ci0KIHZvaWQgRGF0YWJhc2VTeW5jOjptYXJrQXNEZWxldGVkQW5kQ2xvc2Uo
KQogewogICAgIC8vIEZJWE1FOiBuZWVkIHRvIGRvIHNvbWV0aGluZyBzaW1pbGFyIHRvIGNsb3Nl
SW1tZWRpYXRlbHkoKSwgYnV0IGluIGEgc3luYyB3YXkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuaAkocmV2aXNpb24gMTQxOTU2
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuaAko
d29ya2luZyBjb3B5KQpAQCAtNzcsMTUgKzc3LDE0IEBAIHByaXZhdGU6CiAgICAgRGF0YWJhc2VT
eW5jKFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4sIGNvbnN0IFN0cmluZyYgbmFt
ZSwKICAgICAgICAgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYg
ZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAgICAgUGFzc1JlZlB0
cjxEYXRhYmFzZUJhY2tlbmRTeW5jPiBiYWNrZW5kKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
RGF0YWJhc2VTeW5jPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
RGF0YWJhc2VCYWNrZW5kPik7CiAKICAgICB2b2lkIHJ1blRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBib29sIHJlYWRPbmx5LCBFeGNlcHRpb25Db2Rl
Jik7CiAKLSAgICBib29sIG9wZW5BbmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3
RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7Ci0KICAgICBT
dHJpbmcgbV9sYXN0RXJyb3JNZXNzYWdlOwogCiAgICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlTWFu
YWdlcjsKLSAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2VCYWNrZW5kU3luYzsgLy8gRklYTUU6IHJl
bW92ZSB0aGlzIHdoZW4gdGhlIGJhY2tlbmQgaGFzIGJlZW4gc3BsaXQgb3V0LgorICAgIGZyaWVu
ZCBjbGFzcyBEYXRhYmFzZVNlcnZlcjsgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHdoZW4gdGhlIGJh
Y2tlbmQgaGFzIGJlZW4gc3BsaXQgb3V0LgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VUcmFja2VyLmNwcAkocmV2aXNpb24gMTQxOTU2KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDIsNDcgKzE0Miw5NSBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFz
CiAgICAgfQogfQogCi1ib29sIERhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2Uo
RGF0YWJhc2VCYWNrZW5kQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCitib29s
IERhdGFiYXNlVHJhY2tlcjo6aGFzQWRlcXVhdGVRdW90YUZvck9yaWdpbihTZWN1cml0eU9yaWdp
biogb3JpZ2luLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIERhdGFiYXNlRXJyb3ImIGVy
cikKIHsKLSAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gY29udGV4dC0+c2VjdXJpdHlPcmln
aW4oKTsKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgcmVxdWlyZW1lbnQ7Ci0gICAgewotICAgICAg
ICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKLSAgICAgICAgTG9j
a2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFu
YWdlcigpKTsKKyAgICAvLyBTaW5jZSB3ZSdyZSBpbW1pbmVudGx5IG9wZW5pbmcgYSBkYXRhYmFz
ZSB3aXRoaW4gdGhpcyBjb250ZXh0J3Mgb3JpZ2luLAorICAgIC8vIG1ha2Ugc3VyZSB0aGlzIG9y
aWdpbiBpcyBiZWluZyB0cmFja2VkIGJ5IHRoZSBRdW90YVRyYWNrZXIKKyAgICAvLyBieSBmZXRj
aGluZyBpdHMgY3VycmVudCB1c2FnZSBub3cuCisgICAgdW5zaWduZWQgbG9uZyBsb25nIHVzYWdl
ID0gdXNhZ2VGb3JPcmlnaW5Ob0xvY2sob3JpZ2luKTsKKworICAgIC8vIElmIHRoZSBkYXRhYmFz
ZSB3aWxsIGZpdCwgYWxsb3cgaXRzIGNyZWF0aW9uLgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBy
ZXF1aXJlbWVudCA9IHVzYWdlICsgbWF4KDFVTCwgZXN0aW1hdGVkU2l6ZSk7CisgICAgaWYgKHJl
cXVpcmVtZW50IDwgdXNhZ2UpIHsKKyAgICAgICAgZXJyID0gRGF0YWJhc2VFcnJvcjo6RGF0YWJh
c2VTaXplT3ZlcmZsb3dlZDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUaGUgZXN0aW1hdGVk
IHNpemUgaXMgc28gYmlnIGl0IGNhdXNlcyBhbiBvdmVyZmxvdzsgZG9uJ3QgYWxsb3cgY3JlYXRp
b24uCisgICAgfQorICAgIGlmIChyZXF1aXJlbWVudCA8PSBxdW90YUZvck9yaWdpbk5vTG9jayhv
cmlnaW4pKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICBpZiAoaXNEZWxldGluZ0Rh
dGFiYXNlT3JPcmlnaW5Gb3Iob3JpZ2luLCBuYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBlcnIgPSBEYXRhYmFzZUVycm9yOjpEYXRhYmFzZVNpemVFeGNlZWRlZFF1b3RhOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmNhbkVzdGFibGlz
aERhdGFiYXNlKERhdGFiYXNlQmFja2VuZENvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplLCBEYXRhYmFzZUVycm9yJiBlcnJvcikKK3sKKyAgICBVTlVTRURfUEFSQU0oZGlzcGxheU5h
bWUpOyAvLyBDaHJvbWl1bSB3YW50cyB0aGUgZGlzcGxheU5hbWUuIFdlIGRvbid0LgorICAgIGVy
cm9yID0gRGF0YWJhc2VFcnJvcjo6Tm9uZTsKKworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFz
ZShtX2RhdGFiYXNlR3VhcmQpOworICAgIExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3Rh
TWFuYWdlckxvY2tlcihvcmlnaW5RdW90YU1hbmFnZXIoKSk7CisgICAgU2VjdXJpdHlPcmlnaW4q
IG9yaWdpbiA9IGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCk7CiAKLSAgICAgICAgcmVjb3JkQ3Jl
YXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOworICAgIGlmIChpc0RlbGV0aW5nRGF0YWJhc2VP
ck9yaWdpbkZvcihvcmlnaW4sIG5hbWUpKSB7CisgICAgICAgIGVycm9yID0gRGF0YWJhc2VFcnJv
cjo6RGF0YWJhc2VJc0JlaW5nRGVsZXRlZDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
IAotICAgICAgICAvLyBTaW5jZSB3ZSdyZSBpbW1pbmVudGx5IG9wZW5pbmcgYSBkYXRhYmFzZSB3
aXRoaW4gdGhpcyBjb250ZXh0J3Mgb3JpZ2luLCBtYWtlIHN1cmUgdGhpcyBvcmlnaW4gaXMgYmVp
bmcgdHJhY2tlZCBieSB0aGUgUXVvdGFUcmFja2VyCi0gICAgICAgIC8vIGJ5IGZldGNoaW5nIGl0
cyBjdXJyZW50IHVzYWdlIG5vdy4KLSAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHVzYWdlID0g
dXNhZ2VGb3JPcmlnaW5Ob0xvY2sob3JpZ2luKTsKKyAgICByZWNvcmRDcmVhdGluZ0RhdGFiYXNl
KG9yaWdpbiwgbmFtZSk7CiAKLSAgICAgICAgLy8gSWYgYSBkYXRhYmFzZSBhbHJlYWR5IGV4aXN0
cywgaWdub3JlIHRoZSBwYXNzZWQtaW4gZXN0aW1hdGVkIHNpemUgYW5kIHNheSBpdCdzIE9LLgot
ICAgICAgICBpZiAoaGFzRW50cnlGb3JEYXRhYmFzZShvcmlnaW4sIG5hbWUpKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgLy8gSWYgYSBkYXRhYmFzZSBhbHJlYWR5IGV4aXN0cywgaWdu
b3JlIHRoZSBwYXNzZWQtaW4gZXN0aW1hdGVkIHNpemUgYW5kIHNheSBpdCdzIE9LLgorICAgIGlm
IChoYXNFbnRyeUZvckRhdGFiYXNlKG9yaWdpbiwgbmFtZSkpCisgICAgICAgIHJldHVybiB0cnVl
OwogCi0gICAgICAgIC8vIElmIHRoZSBkYXRhYmFzZSB3aWxsIGZpdCwgYWxsb3cgaXRzIGNyZWF0
aW9uLgotICAgICAgICByZXF1aXJlbWVudCA9IHVzYWdlICsgbWF4KDFVTCwgZXN0aW1hdGVkU2l6
ZSk7Ci0gICAgICAgIGlmIChyZXF1aXJlbWVudCA8IHVzYWdlKSB7Ci0gICAgICAgICAgICBkb25l
Q3JlYXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OyAvLyBJZiB0aGUgZXN0aW1hdGVkIHNpemUgaXMgc28gYmlnIGl0IGNhdXNlcyBhbiBvdmVyZmxv
dywgZG9uJ3QgYWxsb3cgY3JlYXRpb24uCi0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlcXVpcmVt
ZW50IDw9IHF1b3RhRm9yT3JpZ2luTm9Mb2NrKG9yaWdpbikpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBpZiAoaGFzQWRlcXVhdGVRdW90YUZvck9yaWdpbihvcmlnaW4sIGVzdGltYXRl
ZFNpemUsIGVycm9yKSkgeworICAgICAgICBBU1NFUlQoZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6
Tm9uZSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIC8vIEdpdmUgdGhlIGNo
cm9tZSBjbGllbnQgYSBjaGFuY2UgdG8gaW5jcmVhc2UgdGhlIHF1b3RhLgotICAgIC8vIERyb3Ag
YWxsIGxvY2tzIGJlZm9yZSBjYWxsaW5nIG91dDsgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZXknbGwg
ZG8uCi0gICAgY29udGV4dC0+ZGF0YWJhc2VFeGNlZWRlZFF1b3RhKG5hbWUsIERhdGFiYXNlRGV0
YWlscyhuYW1lLmlzb2xhdGVkQ29weSgpLCBkaXNwbGF5TmFtZS5pc29sYXRlZENvcHkoKSwgZXN0
aW1hdGVkU2l6ZSwgMCkpOworICAgIC8vIElmIHdlIGdldCBoZXJlLCB0aGVuIHdlIGRvIG5vdCBo
YXZlIGVub3VnaCBxdW90YSBmb3Igb25lIG9mIHRoZQorICAgIC8vIGZvbGxvd2luZyByZWFzb25z
IGFzIGluZGljYXRlZCBieSB0aGUgc2V0IGVycm9yOgorICAgIC8vCisgICAgLy8gSWYgdGhlIGVy
cm9yIGlzIERBVEFCQVNFX1NJWkVfT1ZFUkZMT1dFRCwgdGhlbiB0aGlzIG1lYW5zIHRoZSByZXF1
ZXN0ZWQKKyAgICAvLyBlc3RpbWF0ZWRTaXplIGlmIHNvIHVucmVhc29uYWJseSBsYXJnZSB0aGF0
IGl0IGNhbiBjYXVzZSBhbiBvdmVyZmxvdyBpbgorICAgIC8vIHRoZSB1c2FnZSBidWRnZXQgY29t
cHV0YXRpb24uIEluIHRoYXQgY2FzZSwgdGhlcmUncyBub3RoaW5nIG1vcmUgd2UgY2FuCisgICAg
Ly8gZG8sIGFuZCB0aGVyZSdzIG5vIG5lZWQgZm9yIGEgcmV0cnkuIEhlbmNlLCB3ZSBzaG91bGQg
aW5kaWNhdGUgdGhhdAorICAgIC8vIHdlJ3JlIGRvbmUgd2l0aCBvdXIgYXR0ZW1wdCB0byBjcmVh
dGUgdGhlIGRhdGFiYXNlOgorICAgIC8vCisgICAgLy8gSWYgdGhlIGVycm9yIGlzIERBVEFCQVNF
X1NJWkVfRVhDRUVERURfUVVPVEEsIHRoZW4gd2UnbGwgZ2l2ZSB0aGUgY2xpZW50CisgICAgLy8g
YSBjaGFuY2UgdG8gdXBkYXRlIHRoZSBxdW90YSBhbmQgY2FsbCByZXRyeUNhbkVzdGFibGlzaERh
dGFiYXNlKCkgdG8gdHJ5CisgICAgLy8gYWdhaW4uIEhlbmNlLCB3ZSBkb24ndCBjYWxsIGRvbmVD
cmVhdGluZ0RhdGFiYXNlKCkgeWV0IGluIHRoYXQgY2FzZS4KKworICAgIGlmIChlcnJvciA9PSBE
YXRhYmFzZUVycm9yOjpEYXRhYmFzZVNpemVPdmVyZmxvd2VkKQorICAgICAgICBkb25lQ3JlYXRp
bmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUKGVycm9y
ID09IERhdGFiYXNlRXJyb3I6OkRhdGFiYXNlU2l6ZUV4Y2VlZGVkUXVvdGEpOworCisgICAgcmV0
dXJuIGZhbHNlOworfQorCisvLyBOb3RlOiBhIHRob3VnaHQgYWJvdXQgcGVyZm9ybWFuY2U6IGhh
c0FkZXF1YXRlUXVvdGFGb3JPcmlnaW4oKSB3YXMgYWxzbworLy8gY2FsbGVkIGluIGNhbkVzdGFi
bGlzaERhdGFiYXNlKCksIGFuZCBoZW5jZSwgd2UncmUgcmVwZWF0aW5nIHNvbWUgd29yayB3aXRo
aW4KKy8vIGhhc0FkZXF1YXRlUXVvdGFGb3JPcmlnaW4oKS4gSG93ZXZlciwgcmV0cnlDYW5Fc3Rh
Ymxpc2hEYXRhYmFzZSgpIHNob3VsZCBvbmx5CisvLyBiZSBjYWxsZWQgaW4gdGhlIHJhcmUgZXZl
biBpZiBjYW5Fc3RhYmxpc2hEYXRhYmFzZSgpIGZhaWxzLiBTaW5jZSBpdCBpcyByYXJlLAorLy8g
d2Ugc2hvdWxkIG5vdCBib3RoZXIgb3B0aW1pemluZyBpdC4gSXQgaXMgbW9yZSBiZW5lZmljaWFs
IHRvIGtlZXAKKy8vIGhhc0FkZXF1YXRlUXVvdGFGb3JPcmlnaW4oKSBzaW1wbGUgYW5kIGNvcnJl
Y3QgKGkuZS4gYnVnIGZyZWUpLCBhbmQganVzdAorLy8gcmUtdXNlIGl0LgorYm9vbCBEYXRhYmFz
ZVRyYWNrZXI6OnJldHJ5Q2FuRXN0YWJsaXNoRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kQ29udGV4
dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1l
LCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIERhdGFiYXNlRXJyb3ImIGVycm9yKQorewor
ICAgIFVOVVNFRF9QQVJBTShkaXNwbGF5TmFtZSk7IC8vIENocm9taXVtIHdhbnRzIHRoZSBkaXNw
bGF5TmFtZS4gV2UgZG9uJ3QuCisgICAgZXJyb3IgPSBEYXRhYmFzZUVycm9yOjpOb25lOwogCiAg
ICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisgICAgTG9ja2Vy
PE9yaWdpblF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdl
cigpKTsKKyAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gY29udGV4dC0+c2VjdXJpdHlPcmln
aW4oKTsKIAogICAgIC8vIElmIHRoZSBkYXRhYmFzZSB3aWxsIGZpdCBub3csIGFsbG93IGl0cyBj
cmVhdGlvbi4KLSAgICBpZiAocmVxdWlyZW1lbnQgPD0gcXVvdGFGb3JPcmlnaW5Ob0xvY2sob3Jp
Z2luKSkKKyAgICBpZiAoaGFzQWRlcXVhdGVRdW90YUZvck9yaWdpbihvcmlnaW4sIGVzdGltYXRl
ZFNpemUsIGVycm9yKSkgeworICAgICAgICBBU1NFUlQoZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6
Tm9uZSk7CiAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAorICAgIEFTU0VSVChlcnJvciA9
PSBEYXRhYmFzZUVycm9yOjpEYXRhYmFzZVNpemVFeGNlZWRlZFF1b3RhKTsKICAgICBkb25lQ3Jl
YXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwogCiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJh
Y2tlci5oCShyZXZpc2lvbiAxNDE5NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlVHJhY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiRGF0YWJhc2VFcnJvci5o
IgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC03MCw3ICs3MSw5IEBAIHB1YmxpYzoK
ICAgICAvLyBtX2RhdGFiYXNlR3VhcmQgYW5kIG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQgY3VycmVu
dGx5IGRvbid0IG92ZXJsYXAuCiAgICAgLy8gbm90aWZpY2F0aW9uTXV0ZXgoKSBpcyBjdXJyZW50
bHkgaW5kZXBlbmRlbnQgb2YgdGhlIG90aGVyIGxvY2tzLgogCi0gICAgYm9vbCBjYW5Fc3RhYmxp
c2hEYXRhYmFzZShEYXRhYmFzZUJhY2tlbmRDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwor
ICAgIGJvb2wgY2FuRXN0YWJsaXNoRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kQ29udGV4dCosIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9u
ZyBlc3RpbWF0ZWRTaXplLCBEYXRhYmFzZUVycm9yJik7CisgICAgYm9vbCByZXRyeUNhbkVzdGFi
bGlzaERhdGFiYXNlKERhdGFiYXNlQmFja2VuZENvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwg
RGF0YWJhc2VFcnJvciYpOworCiAgICAgdm9pZCBzZXREYXRhYmFzZURldGFpbHMoU2VjdXJpdHlP
cmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAgICAgU3RyaW5nIGZ1bGxQYXRoRm9yRGF0YWJh
c2UoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgY3JlYXRlSWZEb2Vz
Tm90RXhpc3QgPSB0cnVlKTsKIApAQCAtODYsNiArODksOCBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIGV4cGxpY2l0IERhdGFiYXNlVHJhY2tlcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCk7
CiAKKyAgICBib29sIGhhc0FkZXF1YXRlUXVvdGFGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qLCB1
bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIERhdGFiYXNlRXJyb3ImKTsKKwogI2lmICFQTEFU
Rk9STShDSFJPTUlVTSkKIHB1YmxpYzoKICAgICB2b2lkIHNldERhdGFiYXNlRGlyZWN0b3J5UGF0
aChjb25zdCBTdHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvV29ya2VyQ29udGV4dFdlYkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1dvcmtlckNvbnRleHRXZWJEYXRhYmFzZS5jcHAJKHJl
dmlzaW9uIDE0MTk1NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvV29y
a2VyQ29udGV4dFdlYkRhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNiBA
QCBQYXNzUmVmUHRyPERhdGFiYXNlPiBXb3JrZXJDb250ZXh0V2ViRGF0CiAgICAgaWYgKGRiTWFu
YWdlci5pc0F2YWlsYWJsZSgpICYmIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vz
c0RhdGFiYXNlKGNvbnRleHQtPnRvcE9yaWdpbigpKSkKICAgICAgICAgZGF0YWJhc2UgPSBkYk1h
bmFnZXIub3BlbkRhdGFiYXNlKGNvbnRleHQsIG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1lLCBl
c3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrLCBlcnJvcik7CiAKLSAgICBBU1NFUlQoZXJy
b3IgPT0gRGF0YWJhc2VFcnJvcjo6Tm9uZSB8fCBlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpDYW5u
b3RPcGVuRGF0YWJhc2UpOwogICAgIGlmIChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpDYW5ub3RP
cGVuRGF0YWJhc2UpCiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgaWYgKCFk
YXRhYmFzZSAmJiAhZWMpCkBAIC02NSw3ICs2NCw2IEBAIFBhc3NSZWZQdHI8RGF0YWJhc2VTeW5j
PiBXb3JrZXJDb250ZXh0V2UKICAgICBpZiAoZGJNYW5hZ2VyLmlzQXZhaWxhYmxlKCkgJiYgY29u
dGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoY29udGV4dC0+dG9wT3Jp
Z2luKCkpKQogICAgICAgICBkYXRhYmFzZSA9IGRiTWFuYWdlci5vcGVuRGF0YWJhc2VTeW5jKGNv
bnRleHQsIG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlv
bkNhbGxiYWNrLCBlcnJvcik7CiAKLSAgICBBU1NFUlQoZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6
Tm9uZSB8fCBlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpDYW5ub3RPcGVuRGF0YWJhc2UpOwogICAg
IGlmIChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpDYW5ub3RPcGVuRGF0YWJhc2UpCiAgICAgICAg
IGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgaWYgKCFkYXRhYmFzZSAmJiAhZWMpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJh
Y2tlckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcAkocmV2aXNpb24g
MTQxOTU2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9E
YXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcg
QEAKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
SGFzaC5oIgogI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNTcsMTAgKzU4LDE4IEBAIERhdGFiYXNlVHJhY2tlcjo6
RGF0YWJhc2VUcmFja2VyKGNvbnN0IFMKICAgICBTUUxpdGVGaWxlU3lzdGVtOjpyZWdpc3RlclNR
TGl0ZVZGUygpOwogfQogCi1ib29sIERhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNoRGF0YWJh
c2UoRGF0YWJhc2VCYWNrZW5kQ29udGV4dCogZGF0YWJhc2VDb250ZXh0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVk
U2l6ZSkKK2Jvb2wgRGF0YWJhc2VUcmFja2VyOjpjYW5Fc3RhYmxpc2hEYXRhYmFzZShEYXRhYmFz
ZUJhY2tlbmRDb250ZXh0KiBkYXRhYmFzZUNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBEYXRh
YmFzZUVycm9yJiBlcnJvcikKIHsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0ID0gZGF0YWJhc2VDb250ZXh0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7Ci0gICAgcmV0dXJuIERhdGFiYXNlT2JzZXJ2ZXI6OmNhbkVzdGFibGlzaERhdGFiYXNlKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQsIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsK
KyAgICBib29sIHN1Y2Nlc3MgPSBEYXRhYmFzZU9ic2VydmVyOjpjYW5Fc3RhYmxpc2hEYXRhYmFz
ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6
ZSk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICBlcnJvciA9IERhdGFiYXNlRXJyb3I6Okdl
bmVyaWNTZWN1cml0eUVycm9yOworICAgIHJldHVybiBzdWNjZXNzOworfQorCitib29sIERhdGFi
YXNlVHJhY2tlcjo6cmV0cnlDYW5Fc3RhYmxpc2hEYXRhYmFzZShEYXRhYmFzZUJhY2tlbmRDb250
ZXh0KiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgbG9uZywgRGF0YWJh
c2VFcnJvciYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgRGF0YWJh
c2VUcmFja2VyOjpzZXREYXRhYmFzZURldGFpbHMoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBsb25nKQo=
</data>
<flag name="commit-queue"
          id="206304"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186759</attachid>
            <date>2013-02-05 22:32:57 -0800</date>
            <delta_ts>2013-02-05 22:44:52 -0800</delta_ts>
            <desc>work in progress 4: let&apos;s check the ews bots again.</desc>
            <filename>bug-107475.patch</filename>
            <type>text/plain</type>
            <size>43880</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTk2OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDEzLTAyLTA1ICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBvcGVuRGF0YWJhc2UoKSBi
ZXR3ZWVuIGZyb250IGFuZCBiYWNrIGVuZCB3b3JrLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3NDc1LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93V2ViRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NV2luZG93V2ViRGF0YWJhc2U6Om9wZW5EYXRhYmFzZSk6CisgICAgICAgICogTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6
Y3JlYXRlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmg6CisgICAg
ICAgIChEYXRhYmFzZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJh
Y2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kOjpwZXJmb3JtT3Bl
bkFuZFZlcmlmeSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tl
bmQuaDoKKyAgICAgICAgKERhdGFiYXNlQmFja2VuZCk6CisgICAgICAgICogTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRBc3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZUJhY2tlbmRBc3luYzo6b3BlbkFuZFZlcmlmeVZlcnNpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2VCYWNrZW5kQXN5bmM6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEFzeW5jLmg6CisgICAgICAgIChE
YXRhYmFzZUJhY2tlbmRBc3luYyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZUJhY2tlbmRTeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZFN5
bmM6Om9wZW5BbmRWZXJpZnlWZXJzaW9uKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlQmFja2VuZFN5bmMuaDoKKyAgICAgICAgKERhdGFiYXNlQmFja2VuZFN5bmMpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VFcnJvci5oOgorICAgICAgICAo
V2ViQ29yZTo6RU5VTV9DTEFTUyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpleGNl
cHRpb25Db2RlRm9yRGF0YWJhc2VFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1h
bmFnZXI6Om9wZW5EYXRhYmFzZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VN
YW5hZ2VyOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2Vy
OjpvcGVuRGF0YWJhc2VTeW5jKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlTWFuYWdlci5oOgorICAgICAgICAoRGF0YWJhc2VNYW5hZ2VyKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlU2VydmVyOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VT
ZXJ2ZXI6OmNyZWF0ZURhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlU2VydmVyLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5
bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpjcmVhdGUpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmg6CisgICAgICAgIChEYXRhYmFz
ZVN5bmMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6aGFzQWRlcXVhdGVRdW90YUZv
ck9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmNhbkVzdGFibGlz
aERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6cmV0cnlDYW5F
c3RhYmxpc2hEYXRhYmFzZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZVRyYWNrZXIuaDoKKyAgICAgICAgKERhdGFiYXNlVHJhY2tlcik6CisgICAgICAgICogTW9kdWxl
cy93ZWJkYXRhYmFzZS9Xb3JrZXJDb250ZXh0V2ViRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyQ29udGV4dFdlYkRhdGFiYXNlOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyQ29udGV4dFdlYkRhdGFiYXNlOjpvcGVuRGF0YWJhc2VTeW5jKToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNo
RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpyZXRyeUNhbkVz
dGFibGlzaERhdGFiYXNlKToKKwogMjAxMy0wMi0wNSAgVnNldm9sb2QgVmxhc292ICA8dnNldmlr
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgZW5kaW5nIHNsYXNo
ZXMgYXV0b21hdGljYWxseSB0byBmaWxlIG1hcHBpbmdzLgpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlU2VydmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlU2Vy
dmVyLmgJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsy
OCw5IEBACiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiRGF0YWJhc2VC
YXNpY1R5cGVzLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgiCisjaW5jbHVkZSAiRGF0
YWJhc2VFcnJvci5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC0zNiw5ICszOCw3IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERhdGFiYXNlQmFja2VuZDsKLWNsYXNzIERh
dGFiYXNlQmFja2VuZEFzeW5jOwogY2xhc3MgRGF0YWJhc2VCYWNrZW5kQ29udGV4dDsKLWNsYXNz
IERhdGFiYXNlQmFja2VuZFN5bmM7CiBjbGFzcyBEYXRhYmFzZU1hbmFnZXJDbGllbnQ7CiBjbGFz
cyBTZWN1cml0eU9yaWdpbjsKIApAQCAtNTIsNiArNTIsMTMgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBTdHJpbmcgZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCA9IHRydWUpID0gMDsKIAorICAg
IGVudW0gT3BlbkF0dGVtcHQgeworICAgICAgICBGaXJzdFRyeVRvT3BlbkRhdGFiYXNlLAorICAg
ICAgICBSZXRyeU9wZW5EYXRhYmFzZQorICAgIH07CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
RGF0YWJhc2VCYWNrZW5kPiBvcGVuRGF0YWJhc2UoUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRl
eHQ+JiwgRGF0YWJhc2VUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhw
ZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3Im
LCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgT3BlbkF0dGVtcHQgPSBGaXJzdFRyeVRvT3BlbkRhdGFi
YXNlKSA9IDA7CisKICNpZiAhUExBVEZPUk0oQ0hST01JVU0pCiAgICAgdmlydHVhbCBib29sIGhh
c0VudHJ5Rm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBv
cmlnaW5zKFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4mIHJlc3VsdCkgPSAwOwpAQCAt
NzcsOSArODQsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgaW50ZXJydXB0QWxsRGF0
YWJhc2VzRm9yQ29udGV4dChjb25zdCBEYXRhYmFzZUJhY2tlbmRDb250ZXh0KikgPSAwOwogCi0g
ICAgdmlydHVhbCBib29sIGNhbkVzdGFibGlzaERhdGFiYXNlKERhdGFiYXNlQmFja2VuZENvbnRl
eHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2ln
bmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNldERhdGFi
YXNlRGV0YWlscyhTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKSA9IDA7CiAgICAg
dmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IERh
dGFiYXNlQmFja2VuZCopID0gMDsKIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dXZWJEYXRhYmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dXZWJEYXRhYmFz
ZS5jcHAJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRE9NV2luZG93V2ViRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMSAr
NTEsOCBAQCBQYXNzUmVmUHRyPERhdGFiYXNlPiBET01XaW5kb3dXZWJEYXRhYmFzCiAgICAgaWYg
KGRiTWFuYWdlci5pc0F2YWlsYWJsZSgpICYmIHdpbmRvdy0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlP
cmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2Uod2luZG93LT5kb2N1bWVudCgpLT50b3BPcmlnaW4o
KSkpCiAgICAgICAgIGRhdGFiYXNlID0gZGJNYW5hZ2VyLm9wZW5EYXRhYmFzZSh3aW5kb3ctPmRv
Y3VtZW50KCksIG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBjcmVh
dGlvbkNhbGxiYWNrLCBlcnJvcik7CiAKLSAgICBBU1NFUlQoZXJyb3IgPT0gRGF0YWJhc2VFcnJv
cjo6Tm9uZSB8fCBlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpDYW5ub3RPcGVuRGF0YWJhc2UpOwot
ICAgIGlmIChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpDYW5ub3RPcGVuRGF0YWJhc2UpCi0gICAg
ICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgaWYgKCFkYXRhYmFzZSAmJiAhZWMpCi0g
ICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgIEFTU0VSVChkYXRhYmFzZSB8fCBlcnJvciAh
PSBEYXRhYmFzZUVycm9yOjpOb25lKTsKKyAgICBlYyA9IERhdGFiYXNlTWFuYWdlcjo6ZXhjZXB0
aW9uQ29kZUZvckRhdGFiYXNlRXJyb3IoZXJyb3IpOwogCiAgICAgcmV0dXJuIGRhdGFiYXNlOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZS5jcHAJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2NiwxMSBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK1Bhc3NSZWZQdHI8RGF0YWJhc2U+IERhdGFiYXNlOjpjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBi
YWNrZW5kKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRhYmFzZSo+KGJhY2tlbmQuZ2V0
KCkpOworfQorCiBEYXRhYmFzZTo6RGF0YWJhc2UoUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRD
b250ZXh0PiBkYXRhYmFzZUNvbnRleHQsCiAgICAgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWdu
ZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQogICAgIDogRGF0YWJhc2VCYXNlKGRhdGFiYXNlQ29udGV4
dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQpAQCAtMTMzLDIzICsxMzgsNiBAQCBTdHJpbmcg
RGF0YWJhc2U6OnZlcnNpb24oKSBjb25zdAogICAgIHJldHVybiBEYXRhYmFzZUJhY2tlbmQ6OnZl
cnNpb24oKTsKIH0KIAotYm9vbCBEYXRhYmFzZTo6b3BlbkFuZFZlcmlmeVZlcnNpb24oYm9vbCBz
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYgZXJyb3IsIFN0cmluZyYgZXJy
b3JNZXNzYWdlKQotewotICAgIERhdGFiYXNlVGFza1N5bmNocm9uaXplciBzeW5jaHJvbml6ZXI7
Ci0gICAgaWYgKCFkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKSB8fCBkYXRhYmFz
ZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+dGVybWluYXRpb25SZXF1ZXN0ZWQoJnN5bmNo
cm9uaXplcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotI2lmIFBMQVRGT1JNKENIUk9NSVVN
KQotICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnByZXBhcmVUb09wZW5EYXRhYmFzZSh0
aGlzKTsKLSNlbmRpZgotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIE93blB0cjxEYXRh
YmFzZU9wZW5UYXNrPiB0YXNrID0gRGF0YWJhc2VPcGVuVGFzazo6Y3JlYXRlKHRoaXMsIHNldFZl
cnNpb25Jbk5ld0RhdGFiYXNlLCAmc3luY2hyb25pemVyLCBlcnJvciwgZXJyb3JNZXNzYWdlLCBz
dWNjZXNzKTsKLSAgICBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+c2NoZWR1
bGVJbW1lZGlhdGVUYXNrKHRhc2sucmVsZWFzZSgpKTsKLSAgICBzeW5jaHJvbml6ZXIud2FpdEZv
clRhc2tDb21wbGV0aW9uKCk7Ci0KLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQogdm9pZCBEYXRh
YmFzZTo6bWFya0FzRGVsZXRlZEFuZENsb3NlKCkKIHsKICAgICBpZiAobV9kZWxldGVkIHx8ICFk
YXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKSkKQEAgLTIwNCwxOCArMTkyLDYgQEAg
dW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlOjptYXhpbXVtU2l6ZQogICAgIHJldHVybiBEYXRh
YmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5nZXRNYXhTaXplRm9yRGF0YWJhc2UodGhpcyk7CiB9CiAK
LWJvb2wgRGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2V0VmVyc2lvbkluTmV3
RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImIGVycm9yLCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKLXsK
LSAgICBpZiAoRGF0YWJhc2VCYWNrZW5kOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShzZXRWZXJzaW9u
SW5OZXdEYXRhYmFzZSwgZXJyb3IsIGVycm9yTWVzc2FnZSkpIHsKLSAgICAgICAgaWYgKGRhdGFi
YXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpKQotICAgICAgICAgICAgZGF0YWJhc2VDb250
ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlT3Blbih0aGlzKTsKLQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQg
RGF0YWJhc2U6OmNoYW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBT
dHJpbmcmIG5ld1ZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaAkocmV2aXNp
b24gMTQxOTY1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMyArODgsMTEgQEAgcHJpdmF0ZToKICAgICBEYXRh
YmFzZShQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+LCBjb25zdCBTdHJpbmcmIG5h
bWUsCiAgICAgICAgIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcm
IGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwogICAgIFBhc3NSZWZQ
dHI8RGF0YWJhc2VCYWNrZW5kQXN5bmM+IGJhY2tlbmQoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxEYXRhYmFzZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPERh
dGFiYXNlQmFja2VuZD4pOwogCiAgICAgdm9pZCBydW5UcmFuc2FjdGlvbihQYXNzUmVmUHRyPFNR
TFRyYW5zYWN0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxs
YmFjaz4sCiAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4g
c3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4sIGJvb2wg
cmVhZE9ubHkpOwogCi0gICAgYm9vbCBvcGVuQW5kVmVyaWZ5VmVyc2lvbihib29sIHNldFZlcnNp
b25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwot
ICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNldFZlcnNpb25Jbk5l
d0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwotCiAgICAg
dm9pZCBpblByb2dyZXNzVHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB2b2lkIHNjaGVkdWxl
VHJhbnNhY3Rpb24oKTsKIApAQCAtMTEwLDYgKzEwOCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X2RlbGV0ZWQ7CiAKICAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2VNYW5hZ2VyOworICAgIGZyaWVu
ZCBjbGFzcyBEYXRhYmFzZVNlcnZlcjsgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHdoZW4gdGhlIGJh
Y2tlbmQgaGFzIGJlZW4gc3BsaXQgb3V0LgogICAgIGZyaWVuZCBjbGFzcyBEYXRhYmFzZUJhY2tl
bmRBc3luYzsgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHdoZW4gdGhlIGJhY2tlbmQgaGFzIGJlZW4g
c3BsaXQgb3V0LgogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZUJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmNwcAkocmV2aXNpb24gMTQxOTY1KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMTQsNyArMzE0LDcgQEAgYm9vbCBEYXRhYmFzZUJhY2tlbmQ6OnBl
cmZvcm1PcGVuQW5kVmVyaQogICAgIERvbmVDcmVhdGluZ0RhdGFiYXNlT25FeGl0Q2FsbGVyIG9u
RXhpdENhbGxlcih0aGlzKTsKICAgICBBU1NFUlQoZXJyb3JNZXNzYWdlLmlzRW1wdHkoKSk7CiAg
ICAgQVNTRVJUKGVycm9yID09IERhdGFiYXNlRXJyb3I6Ok5vbmUpOyAvLyBCZXR0ZXIgbm90IGhh
dmUgYW55IGVycm9ycyBhbHJlYWR5LgotICAgIGVycm9yID0gRGF0YWJhc2VFcnJvcjo6Q2Fubm90
T3BlbkRhdGFiYXNlOyAvLyBQcmVzdW1lZCBmYWlsdXJlLiBXZSdsbCBjbGVhciBpdCBpZiB3ZSBz
dWNjZWVkIGJlbG93LgorICAgIGVycm9yID0gRGF0YWJhc2VFcnJvcjo6SW52YWxpZERhdGFiYXNl
U3RhdGU7IC8vIFByZXN1bWVkIGZhaWx1cmUuIFdlJ2xsIGNsZWFyIGl0IGlmIHdlIHN1Y2NlZWQg
YmVsb3cuCiAKICAgICBjb25zdCBpbnQgbWF4U3FsaXRlQnVzeVdhaXRUaW1lID0gMzAwMDA7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5k
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZUJhY2tlbmQuaAkocmV2aXNpb24gMTQxOTY1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYg
KzEwMyw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgY2xvc2VEYXRhYmFzZSgpOwogCisgICAg
dmlydHVhbCBib29sIG9wZW5BbmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0
YWJhc2UsIERhdGFiYXNlRXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgPSAwOwogICAgIHZp
cnR1YWwgYm9vbCBwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNob3VsZFNldFZlcnNpb25Jbk5l
d0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogCiAgICAg
Ym9vbCBnZXRWZXJzaW9uRnJvbURhdGFiYXNlKFN0cmluZyYgdmVyc2lvbiwgYm9vbCBzaG91bGRD
YWNoZVZlcnNpb24gPSB0cnVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuY3BwCShyZXZpc2lv
biAxNDE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
QmFja2VuZEFzeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOSBAQAogI2lmIEVO
QUJMRShTUUxfREFUQUJBU0UpCiAKICNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRDb250ZXh0Lmgi
CisjaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIK
KyNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC0zNyw2ICs0MCwzNCBAQCBEYXRhYmFzZUJhY2tlbmRBc3luYzo6RGF0YWJhc2VCYWNrZW5kQXN5
CiB7CiB9CiAKK2Jvb2wgRGF0YWJhc2VCYWNrZW5kQXN5bmM6Om9wZW5BbmRWZXJpZnlWZXJzaW9u
KGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImIGVycm9yLCBTdHJp
bmcmIGVycm9yTWVzc2FnZSkKK3sKKyAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIgc3luY2hy
b25pemVyOworICAgIGlmICghZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCkgfHwg
ZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnRlcm1pbmF0aW9uUmVxdWVzdGVk
KCZzeW5jaHJvbml6ZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBQTEFURk9STShD
SFJPTUlVTSkKKyAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5wcmVwYXJlVG9PcGVuRGF0
YWJhc2UodGhpcyk7CisjZW5kaWYKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBPd25Q
dHI8RGF0YWJhc2VPcGVuVGFzaz4gdGFzayA9IERhdGFiYXNlT3BlblRhc2s6OmNyZWF0ZSh0aGlz
LCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgJnN5bmNocm9uaXplciwgZXJyb3IsIGVycm9yTWVz
c2FnZSwgc3VjY2Vzcyk7CisgICAgZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCkt
PnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0YXNrLnJlbGVhc2UoKSk7CisgICAgc3luY2hyb25pemVy
LndhaXRGb3JUYXNrQ29tcGxldGlvbigpOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK2Jv
b2wgRGF0YWJhc2VCYWNrZW5kQXN5bmM6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2V0VmVy
c2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImIGVycm9yLCBTdHJpbmcmIGVycm9yTWVz
c2FnZSkKK3sKKyAgICBpZiAoRGF0YWJhc2VCYWNrZW5kOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShz
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZXJyb3IsIGVycm9yTWVzc2FnZSkpIHsKKyAgICAgICAg
aWYgKGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpKQorICAgICAgICAgICAgZGF0
YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlT3Blbih0aGlz
KTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRBc3luYy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuaAkocmV2
aXNpb24gMTQxOTY1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZUJhY2tlbmRBc3luYy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMSArNDMsMTEgQEAgY2xh
c3MgRGF0YWJhc2VTZXJ2ZXI7CiAvLyBhdmFpbGFibGUuIFRoaXMgc2hvdWxkIGJlIHJlcGxhY2Vk
IHdpdGggdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBsYXRlci4KIAogY2xhc3MgRGF0YWJhc2VC
YWNrZW5kQXN5bmMgOiBwdWJsaWMgRGF0YWJhc2VCYWNrZW5kIHsKLXByb3RlY3RlZDoKK3B1Ymxp
YzoKICAgICBEYXRhYmFzZUJhY2tlbmRBc3luYyhQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZENv
bnRleHQ+LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9u
LCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUp
OwogCi0gICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlTWFuYWdlcjsgLy8gRklYTUU6IHJlbW92ZSB0
aGlzIG9uY2Ugd2UgaGF2ZSBpc29sYXRlZCB0aGlzIHRvIHRoZSBiYWNrZW5kLgotICAgIGZyaWVu
ZCBjbGFzcyBEYXRhYmFzZVNlcnZlcjsKKyAgICB2aXJ0dWFsIGJvb2wgb3BlbkFuZFZlcmlmeVZl
cnNpb24oYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmlu
ZyYgZXJyb3JNZXNzYWdlKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnko
Ym9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYgZXJy
b3JNZXNzYWdlKTsKIAogcHJpdmF0ZToKICAgICBjbGFzcyBEYXRhYmFzZU9wZW5UYXNrOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRTeW5j
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlQmFja2VuZFN5bmMuY3BwCShyZXZpc2lvbiAxNDE5NjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZFN5bmMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAogI2luY2x1
ZGUgIkRhdGFiYXNlQmFja2VuZENvbnRleHQuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MSw2ICs1MiwxNCBAQCBEYXRhYmFzZUJh
Y2tlbmRTeW5jOjp+RGF0YWJhc2VCYWNrZW5kU3luCiAgICAgICAgIGNsb3NlRGF0YWJhc2UoKTsK
IH0KIAorYm9vbCBEYXRhYmFzZUJhY2tlbmRTeW5jOjpvcGVuQW5kVmVyaWZ5VmVyc2lvbihib29s
IHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiBlcnJvciwgU3RyaW5nJiBl
cnJvck1lc3NhZ2UpCit7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgRGF0YWJhc2VUcmFj
a2VyOjp0cmFja2VyKCkucHJlcGFyZVRvT3BlbkRhdGFiYXNlKHRoaXMpOworI2VuZGlmCisgICAg
cmV0dXJuIHBlcmZvcm1PcGVuQW5kVmVyaWZ5KHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBlcnJv
ciwgZXJyb3JNZXNzYWdlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kU3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kU3luYy5oCShyZXZpc2lvbiAx
NDE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFj
a2VuZFN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTAgKzQ1LDExIEBAIGNsYXNzIERhdGFi
YXNlQmFja2VuZFN5bmMgOiBwdWJsaWMgRGF0YWIKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5EYXRh
YmFzZUJhY2tlbmRTeW5jKCk7CiAKKyAgICB2aXJ0dWFsIGJvb2wgb3BlbkFuZFZlcmlmeVZlcnNp
b24oYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYg
ZXJyb3JNZXNzYWdlKTsKKwogcHJvdGVjdGVkOgogICAgIERhdGFiYXNlQmFja2VuZFN5bmMoUGFz
c1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5z
aWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKIAotICAgIGZyaWVuZCBjbGFzcyBEYXRhYmFzZU1h
bmFnZXI7IC8vIEZJWE1FOiByZW1vdmUgdGhpcyBvbmNlIHdlIGhhdmUgaXNvbGF0ZWQgdGhpcyB0
byB0aGUgYmFja2VuZC4KICAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2VTZXJ2ZXI7CiB9OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlRXJyb3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
RXJyb3IuaAkocmV2aXNpb24gMTQxOTY1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZUVycm9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEwICszNCwxMSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEVOVU1fQ0xBU1MoRGF0YWJhc2VFcnJvcikgewogICAg
IE5vbmUgPSAwLAotICAgIENhbm5vdE9wZW5EYXRhYmFzZSwKICAgICBEYXRhYmFzZUlzQmVpbmdE
ZWxldGVkLAogICAgIERhdGFiYXNlU2l6ZUV4Y2VlZGVkUXVvdGEsCi0gICAgRGF0YWJhc2VTaXpl
T3ZlcmZsb3dlZAorICAgIERhdGFiYXNlU2l6ZU92ZXJmbG93ZWQsCisgICAgR2VuZXJpY1NlY3Vy
aXR5RXJyb3IsCisgICAgSW52YWxpZERhdGFiYXNlU3RhdGUKIH0gRU5VTV9DTEFTU19FTkQoRGF0
YWJhc2VFcnJvcik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHAJ
KHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAj
aWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2VTZXJ2
ZXIuaCIKICNpbmNsdWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZC5o
IgogI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZEFzeW5jLmgiCkBAIC0yMDAsMzUgKzIwMSwxMDQg
QEAgdm9pZCBEYXRhYmFzZU1hbmFnZXI6OmRpZERlc3RydWN0RGF0YWJhcwogfQogI2VuZGlmCiAK
K0V4Y2VwdGlvbkNvZGUgRGF0YWJhc2VNYW5hZ2VyOjpleGNlcHRpb25Db2RlRm9yRGF0YWJhc2VF
cnJvcihEYXRhYmFzZUVycm9yIGVycm9yKQoreworICAgIHN3aXRjaCAoZXJyb3IpIHsKKyAgICBj
YXNlIERhdGFiYXNlRXJyb3I6Ok5vbmU6CisgICAgICAgIHJldHVybiAwOworICAgIGNhc2UgRGF0
YWJhc2VFcnJvcjo6RGF0YWJhc2VJc0JlaW5nRGVsZXRlZDoKKyAgICBjYXNlIERhdGFiYXNlRXJy
b3I6OkRhdGFiYXNlU2l6ZUV4Y2VlZGVkUXVvdGE6CisgICAgY2FzZSBEYXRhYmFzZUVycm9yOjpE
YXRhYmFzZVNpemVPdmVyZmxvd2VkOgorICAgIGNhc2UgRGF0YWJhc2VFcnJvcjo6R2VuZXJpY1Nl
Y3VyaXR5RXJyb3I6CisgICAgICAgIHJldHVybiBTRUNVUklUWV9FUlI7CisgICAgY2FzZSBEYXRh
YmFzZUVycm9yOjpJbnZhbGlkRGF0YWJhc2VTdGF0ZToKKyAgICAgICAgcmV0dXJuIElOVkFMSURf
U1RBVEVfRVJSOworICAgIH0KK30KKworUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+IERhdGFi
YXNlTWFuYWdlcjo6b3BlbkRhdGFiYXNlQmFja2VuZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LAorICAgIERhdGFiYXNlVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLAorICAg
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFz
ZSwgRGF0YWJhc2VFcnJvciYgZXJyb3IsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQoreworICAgIEFT
U0VSVChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpOb25lKTsKKworICAgIFJlZlB0cjxEYXRhYmFz
ZUNvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCA9IGRhdGFiYXNlQ29udGV4dEZvcihjb250ZXh0KTsK
KyAgICBSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4gYmFja2VuZENvbnRleHQgPSBkYXRh
YmFzZUNvbnRleHQtPmJhY2tlbmQoKTsKKworICAgIFJlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+IGJh
Y2tlbmQgPSBtX3NlcnZlci0+b3BlbkRhdGFiYXNlKGJhY2tlbmRDb250ZXh0LCB0eXBlLCBuYW1l
LCBleHBlY3RlZFZlcnNpb24sCisgICAgICAgIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBz
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZXJyb3IsIGVycm9yTWVzc2FnZSk7CisKKyAgICBpZiAo
IWJhY2tlbmQpIHsKKyAgICAgICAgQVNTRVJUKGVycm9yICE9IERhdGFiYXNlRXJyb3I6Ok5vbmUp
OworCisgICAgICAgIHN3aXRjaCAoZXJyb3IpIHsKKyAgICAgICAgY2FzZSBEYXRhYmFzZUVycm9y
OjpEYXRhYmFzZUlzQmVpbmdEZWxldGVkOgorICAgICAgICBjYXNlIERhdGFiYXNlRXJyb3I6OkRh
dGFiYXNlU2l6ZU92ZXJmbG93ZWQ6CisgICAgICAgIGNhc2UgRGF0YWJhc2VFcnJvcjo6R2VuZXJp
Y1NlY3VyaXR5RXJyb3I6CisgICAgICAgICAgICBnb3RvIGhhbmRsZUVycm9yOworCisgICAgICAg
IGNhc2UgRGF0YWJhc2VFcnJvcjo6SW52YWxpZERhdGFiYXNlU3RhdGU6CisgICAgICAgICAgICBn
b3RvIGhhbmRsZUludmFsaWREYXRhYmFzZVN0YXRlOworCisgICAgICAgIGNhc2UgRGF0YWJhc2VF
cnJvcjo6RGF0YWJhc2VTaXplRXhjZWVkZWRRdW90YToKKyAgICAgICAgICAgIC8vIE5vdGlmeSB0
aGUgY2xpZW50IHRoYXQgd2UndmUgZXhjZWVkZWQgdGhlIGRhdGFiYXNlIHF1b3RhLgorICAgICAg
ICAgICAgLy8gVGhlIGNsaWVudCBtYXkgd2FudCB0byBpbmNyZWFzZSB0aGUgcXVvdGEsIGFuZCB3
ZSdsbCBnaXZlIGl0CisgICAgICAgICAgICAvLyBvbmUgbW9yZSB0cnkgYWZ0ZXIgaWYgdGhhdCBp
cyB0aGUgY2FzZS4KKyAgICAgICAgICAgIGRhdGFiYXNlQ29udGV4dC0+ZGF0YWJhc2VFeGNlZWRl
ZFF1b3RhKG5hbWUsCisgICAgICAgICAgICAgICAgRGF0YWJhc2VEZXRhaWxzKG5hbWUuaXNvbGF0
ZWRDb3B5KCksIGRpc3BsYXlOYW1lLmlzb2xhdGVkQ29weSgpLCBlc3RpbWF0ZWRTaXplLCAwKSk7
CisKKyAgICAgICAgICAgIGVycm9yID0gRGF0YWJhc2VFcnJvcjo6Tm9uZTsKKworICAgICAgICAg
ICAgYmFja2VuZCA9IG1fc2VydmVyLT5vcGVuRGF0YWJhc2UoYmFja2VuZENvbnRleHQsIHR5cGUs
IG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwKKyAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZSwgZXN0
aW1hdGVkU2l6ZSwgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGVycm9yLCBlcnJvck1lc3NhZ2Us
CisgICAgICAgICAgICAgICAgQWJzdHJhY3REYXRhYmFzZVNlcnZlcjo6UmV0cnlPcGVuRGF0YWJh
c2UpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFiYWNrZW5k
KSB7CisgICAgICAgICAgICBBU1NFUlQoZXJyb3IgIT0gRGF0YWJhc2VFcnJvcjo6Tm9uZSk7CisK
KyAgICAgICAgaGFuZGxlSW52YWxpZERhdGFiYXNlU3RhdGU6CisgICAgICAgICAgICBpZiAoZXJy
b3IgPT0gRGF0YWJhc2VFcnJvcjo6SW52YWxpZERhdGFiYXNlU3RhdGUpIHsKKyAgICAgICAgICAg
ICAgICBsb2dFcnJvck1lc3NhZ2UoY29udGV4dCwgZXJyb3JNZXNzYWdlKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICBoYW5kbGVFcnJvcjoKKyAg
ICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2UgJXMgZm9yIG9yaWdpbiAlcyBub3Qg
YWxsb3dlZCB0byBiZSBlc3RhYmxpc2hlZCIsIG5hbWUuYXNjaWkoKS5kYXRhKCksCisgICAgICAg
ICAgICAgICAgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKS5hc2NpaSgpLmRh
dGEoKSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBiYWNrZW5kLnJlbGVhc2UoKTsKK30KKwogUGFzc1JlZlB0cjxEYXRhYmFzZT4gRGF0YWJh
c2VNYW5hZ2VyOjpvcGVuRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwK
ICAgICBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBj
b25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLAogICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrLAogICAgIERh
dGFiYXNlRXJyb3ImIGVycm9yKQogewogICAgIFNjcmlwdENvbnRyb2xsZXI6OmluaXRpYWxpemVU
aHJlYWRpbmcoKTsKLSAgICBSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBkYXRhYmFzZUNvbnRleHQg
PSBkYXRhYmFzZUNvbnRleHRGb3IoY29udGV4dCk7Ci0gICAgUmVmUHRyPERhdGFiYXNlQmFja2Vu
ZENvbnRleHQ+IGJhY2tlbmRDb250ZXh0ID0gZGF0YWJhc2VDb250ZXh0LT5iYWNrZW5kKCk7CiAg
ICAgQVNTRVJUKGVycm9yID09IERhdGFiYXNlRXJyb3I6Ok5vbmUpOwogCi0gICAgaWYgKCFtX3Nl
cnZlci0+Y2FuRXN0YWJsaXNoRGF0YWJhc2UoYmFja2VuZENvbnRleHQuZ2V0KCksIG5hbWUsIGRp
c3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSkgewotICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkRh
dGFiYXNlICVzIGZvciBvcmlnaW4gJXMgbm90IGFsbG93ZWQgdG8gYmUgZXN0YWJsaXNoZWQiLCBu
YW1lLmFzY2lpKCkuZGF0YSgpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygp
LmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCisgICAgYm9vbCBz
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSA9ICFjcmVhdGlvbkNhbGxiYWNrOwogICAgIFN0cmluZyBl
cnJvck1lc3NhZ2U7Ci0gICAgUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSA9IGFkb3B0UmVmKG5l
dyBEYXRhYmFzZShiYWNrZW5kQ29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5
TmFtZSwgZXN0aW1hdGVkU2l6ZSkpOwotCi0gICAgaWYgKCFkYXRhYmFzZS0+b3BlbkFuZFZlcmlm
eVZlcnNpb24oIWNyZWF0aW9uQ2FsbGJhY2ssIGVycm9yLCBlcnJvck1lc3NhZ2UpKSB7Ci0gICAg
ICAgIGxvZ0Vycm9yTWVzc2FnZShjb250ZXh0LCBlcnJvck1lc3NhZ2UpOworICAgIFJlZlB0cjxE
YXRhYmFzZUJhY2tlbmQ+IGJhY2tlbmQgPSBvcGVuRGF0YWJhc2VCYWNrZW5kKGNvbnRleHQsIERh
dGFiYXNlVHlwZTo6QXN5bmMsIG5hbWUsCisgICAgICAgIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxh
eU5hbWUsIGVzdGltYXRlZFNpemUsIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBlcnJvciwgZXJy
b3JNZXNzYWdlKTsKKyAgICBpZiAoIWJhY2tlbmQpCiAgICAgICAgIHJldHVybiAwOwotICAgIH0K
IAotICAgIG1fc2VydmVyLT5zZXREYXRhYmFzZURldGFpbHMoY29udGV4dC0+c2VjdXJpdHlPcmln
aW4oKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpOwotICAgIGRhdGFiYXNlQ29u
dGV4dC0+c2V0SGFzT3BlbkRhdGFiYXNlcygpOworICAgIFJlZlB0cjxEYXRhYmFzZT4gZGF0YWJh
c2UgPSBEYXRhYmFzZTo6Y3JlYXRlKGNvbnRleHQsIGJhY2tlbmQpOwogCisgICAgUmVmUHRyPERh
dGFiYXNlQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0ID0gZGF0YWJhc2VDb250ZXh0Rm9yKGNvbnRl
eHQpOworICAgIGRhdGFiYXNlQ29udGV4dC0+c2V0SGFzT3BlbkRhdGFiYXNlcygpOwogICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkT3BlbkRhdGFiYXNlKGNvbnRleHQsIGRhdGFiYXNl
LCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5ob3N0KCksIG5hbWUsIGV4cGVjdGVkVmVyc2lv
bik7CiAKLSAgICBpZiAoZGF0YWJhc2UtPmlzTmV3KCkgJiYgY3JlYXRpb25DYWxsYmFjay5nZXQo
KSkgeworICAgIGlmIChiYWNrZW5kLT5pc05ldygpICYmIGNyZWF0aW9uQ2FsbGJhY2suZ2V0KCkp
IHsKICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIERhdGFiYXNlQ3JlYXRpb25D
YWxsYmFja1Rhc2sgZm9yIGRhdGFiYXNlICVwXG4iLCBkYXRhYmFzZS5nZXQoKSk7CiAgICAgICAg
IGRhdGFiYXNlLT5tX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKERhdGFiYXNlQ3Jl
YXRpb25DYWxsYmFja1Rhc2s6OmNyZWF0ZShkYXRhYmFzZSwgY3JlYXRpb25DYWxsYmFjaykpOwog
ICAgIH0KQEAgLTI0MCwyNyArMzEwLDE5IEBAIFBhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBEYXRh
YmFzZU1hbmFnZXIKICAgICBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0
ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLAogICAgIHVuc2lnbmVkIGxvbmcg
ZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxi
YWNrLCBEYXRhYmFzZUVycm9yJiBlcnJvcikKIHsKLSAgICBSZWZQdHI8RGF0YWJhc2VDb250ZXh0
PiBkYXRhYmFzZUNvbnRleHQgPSBkYXRhYmFzZUNvbnRleHRGb3IoY29udGV4dCk7Ci0gICAgUmVm
UHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+IGJhY2tlbmRDb250ZXh0ID0gZGF0YWJhc2VDb250
ZXh0LT5iYWNrZW5kKCk7CiAgICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsK
ICAgICBBU1NFUlQoZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6Tm9uZSk7CiAKLSAgICBpZiAoIW1f
c2VydmVyLT5jYW5Fc3RhYmxpc2hEYXRhYmFzZShiYWNrZW5kQ29udGV4dC5nZXQoKSwgbmFtZSwg
ZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKSB7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAi
RGF0YWJhc2UgJXMgZm9yIG9yaWdpbiAlcyBub3QgYWxsb3dlZCB0byBiZSBlc3RhYmxpc2hlZCIs
IG5hbWUuYXNjaWkoKS5kYXRhKCksIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KKyAgICBib29s
IHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlID0gIWNyZWF0aW9uQ2FsbGJhY2s7CiAgICAgU3RyaW5n
IGVycm9yTWVzc2FnZTsKLSAgICBSZWZQdHI8RGF0YWJhc2VTeW5jPiBkYXRhYmFzZSA9IGFkb3B0
UmVmKG5ldyBEYXRhYmFzZVN5bmMoYmFja2VuZENvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lv
biwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKTsKLQotICAgIGlmICghZGF0YWJhc2UtPm9w
ZW5BbmRWZXJpZnlWZXJzaW9uKCFjcmVhdGlvbkNhbGxiYWNrLCBlcnJvciwgZXJyb3JNZXNzYWdl
KSkgewotICAgICAgICBsb2dFcnJvck1lc3NhZ2UoY29udGV4dCwgZXJyb3JNZXNzYWdlKTsKKyAg
ICBSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBiYWNrZW5kID0gb3BlbkRhdGFiYXNlQmFja2VuZChj
b250ZXh0LCBEYXRhYmFzZVR5cGU6OlN5bmMsIG5hbWUsCisgICAgICAgIGV4cGVjdGVkVmVyc2lv
biwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBl
cnJvciwgZXJyb3JNZXNzYWdlKTsKKyAgICBpZiAoIWJhY2tlbmQpCiAgICAgICAgIHJldHVybiAw
OwotICAgIH0KIAotICAgIG1fc2VydmVyLT5zZXREYXRhYmFzZURldGFpbHMoY29udGV4dC0+c2Vj
dXJpdHlPcmlnaW4oKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpOworICAgIFJl
ZlB0cjxEYXRhYmFzZVN5bmM+IGRhdGFiYXNlID0gRGF0YWJhc2VTeW5jOjpjcmVhdGUoY29udGV4
dCwgYmFja2VuZCk7CiAKLSAgICBpZiAoZGF0YWJhc2UtPmlzTmV3KCkgJiYgY3JlYXRpb25DYWxs
YmFjay5nZXQoKSkgeworICAgIGlmIChiYWNrZW5kLT5pc05ldygpICYmIGNyZWF0aW9uQ2FsbGJh
Y2suZ2V0KCkpIHsKICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJJbnZva2luZyB0aGUgY3JlYXRp
b24gY2FsbGJhY2sgZm9yIGRhdGFiYXNlICVwXG4iLCBkYXRhYmFzZS5nZXQoKSk7CiAgICAgICAg
IGNyZWF0aW9uQ2FsbGJhY2stPmhhbmRsZUV2ZW50KGRhdGFiYXNlLmdldCgpKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VNYW5hZ2VyLmgJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4
LDYgQEAKIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJBYnN0cmFjdERh
dGFiYXNlU2VydmVyLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VCYXNpY1R5cGVzLmgiCiAjaW5jbHVk
ZSAiRGF0YWJhc2VEZXRhaWxzLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VFcnJvci5oIgpAQCAtODAs
NiArNzksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWREZXN0cnVjdERhdGFiYXNlQ29udGV4dCgp
IHsgfQogI2VuZGlmCiAKKyAgICBzdGF0aWMgRXhjZXB0aW9uQ29kZSBleGNlcHRpb25Db2RlRm9y
RGF0YWJhc2VFcnJvcihEYXRhYmFzZUVycm9yKTsKKwogICAgIFBhc3NSZWZQdHI8RGF0YWJhc2U+
IG9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFt
ZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJh
Y2s+LCBEYXRhYmFzZUVycm9yJik7CiAgICAgUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IG9wZW5E
YXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUs
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNr
PiwgRGF0YWJhc2VFcnJvciYpOwogCkBAIC0xMjQsNiArMTI1LDEwIEBAIHByaXZhdGU6CiAgICAg
Ly8gaXQgYWxyZWFkeSBleGlzdCBwcmV2aW91c2x5LiBPdGhlcndpc2UsIGl0IHJldHVybnMgMC4K
ICAgICBQYXNzUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gZXhpc3RpbmdEYXRhYmFzZUNvbnRleHRG
b3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCisgICAgUGFzc1JlZlB0cjxEYXRhYmFzZUJh
Y2tlbmQ+IG9wZW5EYXRhYmFzZUJhY2tlbmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosCisgICAg
ICAgIERhdGFiYXNlVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVj
dGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwKKyAgICAgICAgdW5zaWduZWQg
bG9uZyBlc3RpbWF0ZWRTaXplLCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFz
ZUVycm9yJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOworCiAgICAgc3RhdGljIHZvaWQgbG9nRXJy
b3JNZXNzYWdlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
OwogCiAgICAgQWJzdHJhY3REYXRhYmFzZVNlcnZlciogbV9zZXJ2ZXI7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmNw
cAkocmV2aXNpb24gMTQxOTY1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZVNlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDExIEBACiAK
ICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiRGF0YWJhc2UuaCIKICNpbmNs
dWRlICJEYXRhYmFzZUJhY2tlbmRBc3luYy5oIgogI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZENv
bnRleHQuaCIKICNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRTeW5jLmgiCisjaW5jbHVkZSAiRGF0
YWJhc2VTeW5jLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCiAjaW5jbHVkZSA8d3Rm
L1VudXNlZFBhcmFtLmg+CiAKQEAgLTE0OSwxNCArMTUxLDQwIEBAIHZvaWQgRGF0YWJhc2VTZXJ2
ZXI6OmludGVycnVwdEFsbERhdGFiYXMKICAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5p
bnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnRleHQpOwogfQogCi1ib29sIERhdGFi
YXNlU2VydmVyOjpjYW5Fc3RhYmxpc2hEYXRhYmFzZShEYXRhYmFzZUJhY2tlbmRDb250ZXh0KiBi
YWNrZW5kQ29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlO
YW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCitQYXNzUmVmUHRyPERhdGFiYXNlQmFj
a2VuZD4gRGF0YWJhc2VTZXJ2ZXI6Om9wZW5EYXRhYmFzZShSZWZQdHI8RGF0YWJhc2VCYWNrZW5k
Q29udGV4dD4mIGJhY2tlbmRDb250ZXh0LCBEYXRhYmFzZVR5cGUgdHlwZSwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNw
bGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBib29sIHNldFZlcnNpb25Jbk5l
d0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yICZlcnJvciwgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIE9w
ZW5BdHRlbXB0IGF0dGVtcHQpCiB7Ci0gICAgcmV0dXJuIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tl
cigpLmNhbkVzdGFibGlzaERhdGFiYXNlKGJhY2tlbmRDb250ZXh0LCBuYW1lLCBkaXNwbGF5TmFt
ZSwgZXN0aW1hdGVkU2l6ZSk7Ci19CisgICAgUmVmUHRyPERhdGFiYXNlQmFja2VuZD4gZGF0YWJh
c2U7CisgICAgYm9vbCBzdWNjZXNzOworICAgIAorICAgIHN3aXRjaCAoYXR0ZW1wdCkgeworICAg
IGNhc2UgRmlyc3RUcnlUb09wZW5EYXRhYmFzZToKKyAgICAgICAgc3VjY2VzcyA9IERhdGFiYXNl
VHJhY2tlcjo6dHJhY2tlcigpLmNhbkVzdGFibGlzaERhdGFiYXNlKGJhY2tlbmRDb250ZXh0Lmdl
dCgpLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgZXJyb3IpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFJldHJ5T3BlbkRhdGFiYXNlOgorICAgICAgICBzdWNjZXNzID0gRGF0
YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucmV0cnlDYW5Fc3RhYmxpc2hEYXRhYmFzZShiYWNrZW5k
Q29udGV4dC5nZXQoKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIGVycm9yKTsK
KyAgICB9CisKKyAgICBpZiAoc3VjY2VzcykKKyAgICAgICAgZGF0YWJhc2UgPSBjcmVhdGVEYXRh
YmFzZShiYWNrZW5kQ29udGV4dCwgdHlwZSwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5
TmFtZSwgZXN0aW1hdGVkU2l6ZSwgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGVycm9yLCBlcnJv
ck1lc3NhZ2UpOworICAgIHJldHVybiBkYXRhYmFzZS5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQ
dHI8RGF0YWJhc2VCYWNrZW5kPiBEYXRhYmFzZVNlcnZlcjo6Y3JlYXRlRGF0YWJhc2UoUmVmUHRy
PERhdGFiYXNlQmFja2VuZENvbnRleHQ+JiBiYWNrZW5kQ29udGV4dCwgRGF0YWJhc2VUeXBlIHR5
cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNv
bnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgYm9v
bCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYgZXJyb3IsIFN0cmluZyYg
ZXJyb3JNZXNzYWdlKQoreworICAgIFJlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+IGRhdGFiYXNlOwor
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgRGF0YWJhc2VUeXBlOjpBc3luYzoKKyAgICAg
ICAgZGF0YWJhc2UgPSBhZG9wdFJlZihuZXcgRGF0YWJhc2UoYmFja2VuZENvbnRleHQsIG5hbWUs
IGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBEYXRhYmFzZVR5cGU6OlN5bmM6CisgICAgICAgIGRhdGFiYXNlID0g
YWRvcHRSZWYobmV3IERhdGFiYXNlU3luYyhiYWNrZW5kQ29udGV4dCwgbmFtZSwgZXhwZWN0ZWRW
ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpOworICAgIH0KIAotdm9pZCBEYXRh
YmFzZVNlcnZlcjo6c2V0RGF0YWJhc2VEZXRhaWxzKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9u
ZyBlc3RpbWF0ZWRTaXplKQotewotICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldERh
dGFiYXNlRGV0YWlscyhvcmlnaW4sIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsK
KyAgICBpZiAoIWRhdGFiYXNlLT5vcGVuQW5kVmVyaWZ5VmVyc2lvbihzZXRWZXJzaW9uSW5OZXdE
YXRhYmFzZSwgZXJyb3IsIGVycm9yTWVzc2FnZSkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0RGF0YWJhc2VEZXRhaWxzKGJhY2tlbmRDb250
ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7
CisgICAgcmV0dXJuIGRhdGFiYXNlLnJlbGVhc2UoKTsKIH0KIAogdW5zaWduZWQgbG9uZyBsb25n
IERhdGFiYXNlU2VydmVyOjpnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3QgRGF0YWJhc2VCYWNr
ZW5kKiBkYXRhYmFzZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VTZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmgJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDUsNiArNDUsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFN0cmluZyBmdWxsUGF0
aEZvckRhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNy
ZWF0ZUlmRG9lc05vdEV4aXN0KTsKIAorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxEYXRhYmFzZUJh
Y2tlbmQ+IG9wZW5EYXRhYmFzZShSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4mLCBEYXRh
YmFzZVR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNp
b24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYg
ZXJyb3JNZXNzYWdlLCBPcGVuQXR0ZW1wdCk7CisKICNpZiAhUExBVEZPUk0oQ0hST01JVU0pCiAg
ICAgdmlydHVhbCBib29sIGhhc0VudHJ5Rm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7CiAgICAg
dmlydHVhbCB2b2lkIG9yaWdpbnMoVmVjdG9yPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gPiYgcmVz
dWx0KTsKQEAgLTcwLDEwICs3MiwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgaW50
ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBEYXRhYmFzZUJhY2tlbmRDb250ZXh0
Kik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgY2FuRXN0YWJsaXNoRGF0YWJhc2UoRGF0YWJhc2VCYWNr
ZW5kQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFt
ZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRE
YXRhYmFzZURldGFpbHMoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAgICAg
dmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IERh
dGFiYXNlQmFja2VuZCopOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPERh
dGFiYXNlQmFja2VuZD4gY3JlYXRlRGF0YWJhc2UoUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRl
eHQ+JiwgRGF0YWJhc2VUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhw
ZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3Im
LCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZVN5bmMuY3BwCShyZXZpc2lvbiAxNDE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlU3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDEx
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IERh
dGFiYXNlU3luYzo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPERh
dGFiYXNlQmFja2VuZD4gYmFja2VuZCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGF0YWJh
c2VTeW5jKj4oYmFja2VuZC5nZXQoKSk7Cit9CisKIERhdGFiYXNlU3luYzo6RGF0YWJhc2VTeW5j
KFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0LAogICAg
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0
IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKICAgICA6
IERhdGFiYXNlQmFzZShkYXRhYmFzZUNvbnRleHQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkK
QEAgLTE1NCwxNCArMTU5LDYgQEAgdm9pZCBEYXRhYmFzZVN5bmM6OnJ1blRyYW5zYWN0aW9uKFBh
c3NSZQogICAgIHNldExhc3RFcnJvck1lc3NhZ2UoIiIpOwogfQogCi1ib29sIERhdGFiYXNlU3lu
Yzo6b3BlbkFuZFZlcmlmeVZlcnNpb24oYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0
YWJhc2VFcnJvciYgZXJyb3IsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQotewotI2lmIFBMQVRGT1JN
KENIUk9NSVVNKQotICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnByZXBhcmVUb09wZW5E
YXRhYmFzZSh0aGlzKTsKLSNlbmRpZgotICAgIHJldHVybiBwZXJmb3JtT3BlbkFuZFZlcmlmeShz
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZXJyb3IsIGVycm9yTWVzc2FnZSk7Ci19Ci0KIHZvaWQg
RGF0YWJhc2VTeW5jOjptYXJrQXNEZWxldGVkQW5kQ2xvc2UoKQogewogICAgIC8vIEZJWE1FOiBu
ZWVkIHRvIGRvIHNvbWV0aGluZyBzaW1pbGFyIHRvIGNsb3NlSW1tZWRpYXRlbHkoKSwgYnV0IGlu
IGEgc3luYyB3YXkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VTeW5jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZVN5bmMuaAkocmV2aXNpb24gMTQxOTY1KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtNzcs
MTUgKzc3LDE0IEBAIHByaXZhdGU6CiAgICAgRGF0YWJhc2VTeW5jKFBhc3NSZWZQdHI8RGF0YWJh
c2VCYWNrZW5kQ29udGV4dD4sIGNvbnN0IFN0cmluZyYgbmFtZSwKICAgICAgICAgY29uc3QgU3Ry
aW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVk
IGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAgICAgUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRTeW5j
PiBiYWNrZW5kKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBjcmVhdGUo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPik7CiAK
ICAgICB2b2lkIHJ1blRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2Fs
bGJhY2s+LCBib29sIHJlYWRPbmx5LCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBib29sIG9wZW5B
bmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJy
b3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7Ci0KICAgICBTdHJpbmcgbV9sYXN0RXJyb3JNZXNz
YWdlOwogCiAgICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlTWFuYWdlcjsKLSAgICBmcmllbmQgY2xh
c3MgRGF0YWJhc2VCYWNrZW5kU3luYzsgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHdoZW4gdGhlIGJh
Y2tlbmQgaGFzIGJlZW4gc3BsaXQgb3V0LgorICAgIGZyaWVuZCBjbGFzcyBEYXRhYmFzZVNlcnZl
cjsgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHdoZW4gdGhlIGJhY2tlbmQgaGFzIGJlZW4gc3BsaXQg
b3V0LgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAkocmV2
aXNpb24gMTQxOTY1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVRyYWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNDcgKzE0Miw5OSBAQCB2b2lk
IERhdGFiYXNlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzCiAgICAgfQogfQogCi1ib29sIERh
dGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kQ29udGV4
dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1l
LCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCitib29sIERhdGFiYXNlVHJhY2tlcjo6aGFz
QWRlcXVhdGVRdW90YUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luLCB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUsIERhdGFiYXNlRXJyb3ImIGVycikKIHsKLSAgICBTZWN1cml0eU9y
aWdpbiogb3JpZ2luID0gY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKTsKLSAgICB1bnNpZ25lZCBs
b25nIGxvbmcgcmVxdWlyZW1lbnQ7Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrRGF0
YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKLSAgICAgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdl
cj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKKyAgICAvLyBTaW5j
ZSB3ZSdyZSBpbW1pbmVudGx5IG9wZW5pbmcgYSBkYXRhYmFzZSB3aXRoaW4gdGhpcyBjb250ZXh0
J3Mgb3JpZ2luLAorICAgIC8vIG1ha2Ugc3VyZSB0aGlzIG9yaWdpbiBpcyBiZWluZyB0cmFja2Vk
IGJ5IHRoZSBPcmlnaW5RdW90YU1hbmFnZXIKKyAgICAvLyBieSBmZXRjaGluZyBpdHMgY3VycmVu
dCB1c2FnZSBub3cuIENhbGxpbmcgdXNhZ2VGb3JPcmlnaW4oKSBoYXMgdGhlIHNpZGUKKyAgICAv
LyBlZmZlY3Qgb2YgaW5pdGlhdGluZyB0cmFja2luZyBieSB0aGUgT3JpZ2luUXVvdGFNYW5hZ2Vy
IGlmIHRoZSBvcmlnaW4gaXMKKyAgICAvLyBub3QgYWxyZWFkeSB0cmFja2VkLgorICAgIHVuc2ln
bmVkIGxvbmcgbG9uZyB1c2FnZSA9IHVzYWdlRm9yT3JpZ2luTm9Mb2NrKG9yaWdpbik7CisKKyAg
ICAvLyBJZiB0aGUgZGF0YWJhc2Ugd2lsbCBmaXQsIGFsbG93IGl0cyBjcmVhdGlvbi4KKyAgICB1
bnNpZ25lZCBsb25nIGxvbmcgcmVxdWlyZW1lbnQgPSB1c2FnZSArIG1heCgxVUwsIGVzdGltYXRl
ZFNpemUpOworICAgIGlmIChyZXF1aXJlbWVudCA8IHVzYWdlKSB7CisgICAgICAgIC8vIFRoZSBl
c3RpbWF0ZWQgc2l6ZSBpcyBzbyBiaWcgaXQgY2F1c2VzIGFuIG92ZXJmbG93OyBkb24ndCBhbGxv
dyBjcmVhdGlvbi4KKyAgICAgICAgZXJyID0gRGF0YWJhc2VFcnJvcjo6RGF0YWJhc2VTaXplT3Zl
cmZsb3dlZDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAocmVxdWlyZW1l
bnQgPD0gcXVvdGFGb3JPcmlnaW5Ob0xvY2sob3JpZ2luKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICAgICAgaWYgKGlzRGVsZXRpbmdEYXRhYmFzZU9yT3JpZ2luRm9yKG9yaWdpbiwgbmFt
ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZXJyID0gRGF0YWJhc2VFcnJvcjo6
RGF0YWJhc2VTaXplRXhjZWVkZWRRdW90YTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
RGF0YWJhc2VUcmFja2VyOjpjYW5Fc3RhYmxpc2hEYXRhYmFzZShEYXRhYmFzZUJhY2tlbmRDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5h
bWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgRGF0YWJhc2VFcnJvciYgZXJyb3IpCit7
CisgICAgVU5VU0VEX1BBUkFNKGRpc3BsYXlOYW1lKTsgLy8gQ2hyb21pdW0gd2FudHMgdGhlIGRp
c3BsYXlOYW1lIGJ1dCB3ZSBkb24ndC4KKyAgICBlcnJvciA9IERhdGFiYXNlRXJyb3I6Ok5vbmU7
CisKKyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICBM
b2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFN
YW5hZ2VyKCkpOworICAgIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBjb250ZXh0LT5zZWN1cml0
eU9yaWdpbigpOwogCi0gICAgICAgIHJlY29yZENyZWF0aW5nRGF0YWJhc2Uob3JpZ2luLCBuYW1l
KTsKKyAgICBpZiAoaXNEZWxldGluZ0RhdGFiYXNlT3JPcmlnaW5Gb3Iob3JpZ2luLCBuYW1lKSkg
eworICAgICAgICBlcnJvciA9IERhdGFiYXNlRXJyb3I6OkRhdGFiYXNlSXNCZWluZ0RlbGV0ZWQ7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICAgICAgLy8gU2luY2Ugd2UncmUg
aW1taW5lbnRseSBvcGVuaW5nIGEgZGF0YWJhc2Ugd2l0aGluIHRoaXMgY29udGV4dCdzIG9yaWdp
biwgbWFrZSBzdXJlIHRoaXMgb3JpZ2luIGlzIGJlaW5nIHRyYWNrZWQgYnkgdGhlIFF1b3RhVHJh
Y2tlcgotICAgICAgICAvLyBieSBmZXRjaGluZyBpdHMgY3VycmVudCB1c2FnZSBub3cuCi0gICAg
ICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1c2FnZSA9IHVzYWdlRm9yT3JpZ2luTm9Mb2NrKG9yaWdp
bik7CisgICAgcmVjb3JkQ3JlYXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwogCi0gICAgICAg
IC8vIElmIGEgZGF0YWJhc2UgYWxyZWFkeSBleGlzdHMsIGlnbm9yZSB0aGUgcGFzc2VkLWluIGVz
dGltYXRlZCBzaXplIGFuZCBzYXkgaXQncyBPSy4KLSAgICAgICAgaWYgKGhhc0VudHJ5Rm9yRGF0
YWJhc2Uob3JpZ2luLCBuYW1lKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIC8vIElm
IGEgZGF0YWJhc2UgYWxyZWFkeSBleGlzdHMsIGlnbm9yZSB0aGUgcGFzc2VkLWluIGVzdGltYXRl
ZCBzaXplIGFuZCBzYXkgaXQncyBPSy4KKyAgICBpZiAoaGFzRW50cnlGb3JEYXRhYmFzZShvcmln
aW4sIG5hbWUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICAvLyBJZiB0aGUgZGF0
YWJhc2Ugd2lsbCBmaXQsIGFsbG93IGl0cyBjcmVhdGlvbi4KLSAgICAgICAgcmVxdWlyZW1lbnQg
PSB1c2FnZSArIG1heCgxVUwsIGVzdGltYXRlZFNpemUpOwotICAgICAgICBpZiAocmVxdWlyZW1l
bnQgPCB1c2FnZSkgewotICAgICAgICAgICAgZG9uZUNyZWF0aW5nRGF0YWJhc2Uob3JpZ2luLCBu
YW1lKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gSWYgdGhlIGVzdGltYXRlZCBzaXpl
IGlzIHNvIGJpZyBpdCBjYXVzZXMgYW4gb3ZlcmZsb3csIGRvbid0IGFsbG93IGNyZWF0aW9uLgot
ICAgICAgICB9Ci0gICAgICAgIGlmIChyZXF1aXJlbWVudCA8PSBxdW90YUZvck9yaWdpbk5vTG9j
ayhvcmlnaW4pKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGhhc0FkZXF1YXRl
UXVvdGFGb3JPcmlnaW4ob3JpZ2luLCBlc3RpbWF0ZWRTaXplLCBlcnJvcikpIHsKKyAgICAgICAg
QVNTRVJUKGVycm9yID09IERhdGFiYXNlRXJyb3I6Ok5vbmUpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKLSAgICAvLyBHaXZlIHRoZSBjaHJvbWUgY2xpZW50IGEgY2hhbmNlIHRvIGlu
Y3JlYXNlIHRoZSBxdW90YS4KLSAgICAvLyBEcm9wIGFsbCBsb2NrcyBiZWZvcmUgY2FsbGluZyBv
dXQ7IHdlIGRvbid0IGtub3cgd2hhdCB0aGV5J2xsIGRvLgotICAgIGNvbnRleHQtPmRhdGFiYXNl
RXhjZWVkZWRRdW90YShuYW1lLCBEYXRhYmFzZURldGFpbHMobmFtZS5pc29sYXRlZENvcHkoKSwg
ZGlzcGxheU5hbWUuaXNvbGF0ZWRDb3B5KCksIGVzdGltYXRlZFNpemUsIDApKTsKKyAgICAvLyBJ
ZiB3ZSBnZXQgaGVyZSwgdGhlbiB3ZSBkbyBub3QgaGF2ZSBlbm91Z2ggcXVvdGEgZm9yIG9uZSBv
ZiB0aGUKKyAgICAvLyBmb2xsb3dpbmcgcmVhc29ucyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHNldCBl
cnJvcjoKKyAgICAvLworICAgIC8vIElmIHRoZSBlcnJvciBpcyBEQVRBQkFTRV9TSVpFX09WRVJG
TE9XRUQsIHRoZW4gdGhpcyBtZWFucyB0aGUgcmVxdWVzdGVkCisgICAgLy8gZXN0aW1hdGVkU2l6
ZSBpZiBzbyB1bnJlYXNvbmFibHkgbGFyZ2UgdGhhdCBpdCBjYW4gY2F1c2UgYW4gb3ZlcmZsb3cg
aW4KKyAgICAvLyB0aGUgdXNhZ2UgYnVkZ2V0IGNvbXB1dGF0aW9uLiBJbiB0aGF0IGNhc2UsIHRo
ZXJlJ3Mgbm90aGluZyBtb3JlIHdlIGNhbgorICAgIC8vIGRvLCBhbmQgdGhlcmUncyBubyBuZWVk
IGZvciBhIHJldHJ5LiBIZW5jZSwgd2Ugc2hvdWxkIGluZGljYXRlIHRoYXQKKyAgICAvLyB3ZSdy
ZSBkb25lIHdpdGggb3VyIGF0dGVtcHQgdG8gY3JlYXRlIHRoZSBkYXRhYmFzZToKKyAgICAvLwor
ICAgIC8vIElmIHRoZSBlcnJvciBpcyBEQVRBQkFTRV9TSVpFX0VYQ0VFREVEX1FVT1RBLCB0aGVu
IHdlJ2xsIGdpdmUgdGhlIGNsaWVudAorICAgIC8vIGEgY2hhbmNlIHRvIHVwZGF0ZSB0aGUgcXVv
dGEgYW5kIGNhbGwgcmV0cnlDYW5Fc3RhYmxpc2hEYXRhYmFzZSgpIHRvIHRyeQorICAgIC8vIGFn
YWluLiBIZW5jZSwgd2UgZG9uJ3QgY2FsbCBkb25lQ3JlYXRpbmdEYXRhYmFzZSgpIHlldCBpbiB0
aGF0IGNhc2UuCisKKyAgICBpZiAoZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6RGF0YWJhc2VTaXpl
T3ZlcmZsb3dlZCkKKyAgICAgICAgZG9uZUNyZWF0aW5nRGF0YWJhc2Uob3JpZ2luLCBuYW1lKTsK
KyAgICBlbHNlCisgICAgICAgIEFTU0VSVChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpEYXRhYmFz
ZVNpemVFeGNlZWRlZFF1b3RhKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gTm90ZTog
YSB0aG91Z2h0IGFib3V0IHBlcmZvcm1hbmNlOiBoYXNBZGVxdWF0ZVF1b3RhRm9yT3JpZ2luKCkg
d2FzIGFsc28KKy8vIGNhbGxlZCBpbiBjYW5Fc3RhYmxpc2hEYXRhYmFzZSgpLCBhbmQgaGVuY2Us
IHdlJ3JlIHJlcGVhdGluZyBzb21lIHdvcmsgd2l0aGluCisvLyBoYXNBZGVxdWF0ZVF1b3RhRm9y
T3JpZ2luKCkuIEhvd2V2ZXIsIHJldHJ5Q2FuRXN0YWJsaXNoRGF0YWJhc2UoKSBzaG91bGQgb25s
eQorLy8gYmUgY2FsbGVkIGluIHRoZSByYXJlIGV2ZW4gaWYgY2FuRXN0YWJsaXNoRGF0YWJhc2Uo
KSBmYWlscy4gU2luY2UgaXQgaXMgcmFyZSwKKy8vIHdlIHNob3VsZCBub3QgYm90aGVyIG9wdGlt
aXppbmcgaXQuIEl0IGlzIG1vcmUgYmVuZWZpY2lhbCB0byBrZWVwCisvLyBoYXNBZGVxdWF0ZVF1
b3RhRm9yT3JpZ2luKCkgc2ltcGxlIGFuZCBjb3JyZWN0IChpLmUuIGJ1ZyBmcmVlKSwgYW5kIGp1
c3QKKy8vIHJlLXVzZSBpdC4KK2Jvb2wgRGF0YWJhc2VUcmFja2VyOjpyZXRyeUNhbkVzdGFibGlz
aERhdGFiYXNlKERhdGFiYXNlQmFja2VuZENvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplLCBEYXRhYmFzZUVycm9yJiBlcnJvcikKK3sKKyAgICAvLyBDaHJvbWl1bSB3YW50cyB0aGUg
ZGlzcGxheU5hbWUgYnV0IHdlIGRvbid0LgorICAgIFVOVVNFRF9QQVJBTShkaXNwbGF5TmFtZSk7
CisgICAgZXJyb3IgPSBEYXRhYmFzZUVycm9yOjpOb25lOwogCiAgICAgTXV0ZXhMb2NrZXIgbG9j
a0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdl
cj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKKyAgICBTZWN1cml0
eU9yaWdpbiogb3JpZ2luID0gY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKTsKIAogICAgIC8vIElm
IHRoZSBkYXRhYmFzZSB3aWxsIGZpdCBub3csIGFsbG93IGl0cyBjcmVhdGlvbi4KLSAgICBpZiAo
cmVxdWlyZW1lbnQgPD0gcXVvdGFGb3JPcmlnaW5Ob0xvY2sob3JpZ2luKSkKKyAgICBpZiAoaGFz
QWRlcXVhdGVRdW90YUZvck9yaWdpbihvcmlnaW4sIGVzdGltYXRlZFNpemUsIGVycm9yKSkgewor
ICAgICAgICBBU1NFUlQoZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6Tm9uZSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KIAorICAgIEFTU0VSVChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpE
YXRhYmFzZVNpemVFeGNlZWRlZFF1b3RhKTsKICAgICBkb25lQ3JlYXRpbmdEYXRhYmFzZShvcmln
aW4sIG5hbWUpOwogCiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5oCShyZXZpc2lvbiAx
NDE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJh
Y2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAKICNpZiBFTkFCTEUoU1FM
X0RBVEFCQVNFKQogCisjaW5jbHVkZSAiRGF0YWJhc2VFcnJvci5oIgogI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+CkBAIC03MCw3ICs3MSw5IEBAIHB1YmxpYzoKICAgICAvLyBtX2RhdGFiYXNl
R3VhcmQgYW5kIG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQgY3VycmVudGx5IGRvbid0IG92ZXJsYXAu
CiAgICAgLy8gbm90aWZpY2F0aW9uTXV0ZXgoKSBpcyBjdXJyZW50bHkgaW5kZXBlbmRlbnQgb2Yg
dGhlIG90aGVyIGxvY2tzLgogCi0gICAgYm9vbCBjYW5Fc3RhYmxpc2hEYXRhYmFzZShEYXRhYmFz
ZUJhY2tlbmRDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3Bs
YXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOworICAgIGJvb2wgY2FuRXN0YWJs
aXNoRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBE
YXRhYmFzZUVycm9yJik7CisgICAgYm9vbCByZXRyeUNhbkVzdGFibGlzaERhdGFiYXNlKERhdGFi
YXNlQmFja2VuZENvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlz
cGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgRGF0YWJhc2VFcnJvciYpOwor
CiAgICAgdm9pZCBzZXREYXRhYmFzZURldGFpbHMoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1h
dGVkU2l6ZSk7CiAgICAgU3RyaW5nIGZ1bGxQYXRoRm9yRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4q
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgY3JlYXRlSWZEb2VzTm90RXhpc3QgPSB0cnVlKTsK
IApAQCAtODYsNiArODksOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IERhdGFi
YXNlVHJhY2tlcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCk7CiAKKyAgICBib29sIGhhc0Fk
ZXF1YXRlUXVvdGFGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qLCB1bnNpZ25lZCBsb25nIGVzdGlt
YXRlZFNpemUsIERhdGFiYXNlRXJyb3ImKTsKKwogI2lmICFQTEFURk9STShDSFJPTUlVTSkKIHB1
YmxpYzoKICAgICB2b2lkIHNldERhdGFiYXNlRGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcmKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvV29ya2VyQ29udGV4dFdl
YkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL1dvcmtlckNvbnRleHRXZWJEYXRhYmFzZS5jcHAJKHJldmlzaW9uIDE0MTk2NSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvV29ya2VyQ29udGV4dFdlYkRhdGFi
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTEgKzQ4LDggQEAgUGFzc1JlZlB0cjxEYXRh
YmFzZT4gV29ya2VyQ29udGV4dFdlYkRhdAogICAgIGlmIChkYk1hbmFnZXIuaXNBdmFpbGFibGUo
KSAmJiBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZShjb250ZXh0
LT50b3BPcmlnaW4oKSkpCiAgICAgICAgIGRhdGFiYXNlID0gZGJNYW5hZ2VyLm9wZW5EYXRhYmFz
ZShjb250ZXh0LCBuYW1lLCB2ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgY3Jl
YXRpb25DYWxsYmFjaywgZXJyb3IpOwogCi0gICAgQVNTRVJUKGVycm9yID09IERhdGFiYXNlRXJy
b3I6Ok5vbmUgfHwgZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6Q2Fubm90T3BlbkRhdGFiYXNlKTsK
LSAgICBpZiAoZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6Q2Fubm90T3BlbkRhdGFiYXNlKQotICAg
ICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgIGlmICghZGF0YWJhc2UgJiYgIWVjKQot
ICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICBBU1NFUlQoZGF0YWJhc2UgfHwgZXJyb3Ig
IT0gRGF0YWJhc2VFcnJvcjo6Tm9uZSk7CisgICAgZWMgPSBEYXRhYmFzZU1hbmFnZXI6OmV4Y2Vw
dGlvbkNvZGVGb3JEYXRhYmFzZUVycm9yKGVycm9yKTsKIAogICAgIHJldHVybiBkYXRhYmFzZS5y
ZWxlYXNlKCk7CiB9CkBAIC02NSwxMSArNjIsOCBAQCBQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4g
V29ya2VyQ29udGV4dFdlCiAgICAgaWYgKGRiTWFuYWdlci5pc0F2YWlsYWJsZSgpICYmIGNvbnRl
eHQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKGNvbnRleHQtPnRvcE9yaWdp
bigpKSkKICAgICAgICAgZGF0YWJhc2UgPSBkYk1hbmFnZXIub3BlbkRhdGFiYXNlU3luYyhjb250
ZXh0LCBuYW1lLCB2ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgY3JlYXRpb25D
YWxsYmFjaywgZXJyb3IpOwogCi0gICAgQVNTRVJUKGVycm9yID09IERhdGFiYXNlRXJyb3I6Ok5v
bmUgfHwgZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6Q2Fubm90T3BlbkRhdGFiYXNlKTsKLSAgICBp
ZiAoZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6Q2Fubm90T3BlbkRhdGFiYXNlKQotICAgICAgICBl
YyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgIGlmICghZGF0YWJhc2UgJiYgIWVjKQotICAgICAg
ICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICBBU1NFUlQoZGF0YWJhc2UgfHwgZXJyb3IgIT0gRGF0
YWJhc2VFcnJvcjo6Tm9uZSk7CisgICAgZWMgPSBEYXRhYmFzZU1hbmFnZXI6OmV4Y2VwdGlvbkNv
ZGVGb3JEYXRhYmFzZUVycm9yKGVycm9yKTsKIAogICAgIHJldHVybiBkYXRhYmFzZS5yZWxlYXNl
KCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVt
L0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNw
cAkocmV2aXNpb24gMTQxOTY1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luSGFzaC5oIgogI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKKyNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNTcsMTAgKzU4LDE4IEBAIERhdGFi
YXNlVHJhY2tlcjo6RGF0YWJhc2VUcmFja2VyKGNvbnN0IFMKICAgICBTUUxpdGVGaWxlU3lzdGVt
OjpyZWdpc3RlclNRTGl0ZVZGUygpOwogfQogCi1ib29sIERhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0
YWJsaXNoRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kQ29udGV4dCogZGF0YWJhc2VDb250ZXh0LCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxv
bmcgZXN0aW1hdGVkU2l6ZSkKK2Jvb2wgRGF0YWJhc2VUcmFja2VyOjpjYW5Fc3RhYmxpc2hEYXRh
YmFzZShEYXRhYmFzZUJhY2tlbmRDb250ZXh0KiBkYXRhYmFzZUNvbnRleHQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0
ZWRTaXplLCBEYXRhYmFzZUVycm9yJiBlcnJvcikKIHsKICAgICBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZGF0YWJhc2VDb250ZXh0LT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7Ci0gICAgcmV0dXJuIERhdGFiYXNlT2JzZXJ2ZXI6OmNhbkVzdGFibGlz
aERhdGFiYXNlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3Rp
bWF0ZWRTaXplKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBEYXRhYmFzZU9ic2VydmVyOjpjYW5Fc3Rh
Ymxpc2hEYXRhYmFzZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBuYW1lLCBkaXNwbGF5TmFtZSwg
ZXN0aW1hdGVkU2l6ZSk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICBlcnJvciA9IERhdGFi
YXNlRXJyb3I6OkdlbmVyaWNTZWN1cml0eUVycm9yOworICAgIHJldHVybiBzdWNjZXNzOworfQor
Citib29sIERhdGFiYXNlVHJhY2tlcjo6cmV0cnlDYW5Fc3RhYmxpc2hEYXRhYmFzZShEYXRhYmFz
ZUJhY2tlbmRDb250ZXh0KiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQg
bG9uZywgRGF0YWJhc2VFcnJvciYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
IHZvaWQgRGF0YWJhc2VUcmFja2VyOjpzZXREYXRhYmFzZURldGFpbHMoU2VjdXJpdHlPcmlnaW4q
LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBsb25nKQo=
</data>
<flag name="commit-queue"
          id="206328"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186761</attachid>
            <date>2013-02-05 22:53:56 -0800</date>
            <delta_ts>2013-02-05 23:01:08 -0800</delta_ts>
            <desc>work in progress 5: let&apos;s check those ews bots again. =(</desc>
            <filename>bug-107475.patch</filename>
            <type>text/plain</type>
            <size>44002</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTk2OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDEzLTAyLTA1ICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBvcGVuRGF0YWJhc2UoKSBi
ZXR3ZWVuIGZyb250IGFuZCBiYWNrIGVuZCB3b3JrLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3NDc1LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93V2ViRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NV2luZG93V2ViRGF0YWJhc2U6Om9wZW5EYXRhYmFzZSk6CisgICAgICAgICogTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6
Y3JlYXRlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmg6CisgICAg
ICAgIChEYXRhYmFzZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJh
Y2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kOjpwZXJmb3JtT3Bl
bkFuZFZlcmlmeSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tl
bmQuaDoKKyAgICAgICAgKERhdGFiYXNlQmFja2VuZCk6CisgICAgICAgICogTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRBc3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZUJhY2tlbmRBc3luYzo6b3BlbkFuZFZlcmlmeVZlcnNpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2VCYWNrZW5kQXN5bmM6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEFzeW5jLmg6CisgICAgICAgIChE
YXRhYmFzZUJhY2tlbmRBc3luYyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZUJhY2tlbmRTeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZFN5
bmM6Om9wZW5BbmRWZXJpZnlWZXJzaW9uKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlQmFja2VuZFN5bmMuaDoKKyAgICAgICAgKERhdGFiYXNlQmFja2VuZFN5bmMpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VFcnJvci5oOgorICAgICAgICAo
V2ViQ29yZTo6RU5VTV9DTEFTUyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpleGNl
cHRpb25Db2RlRm9yRGF0YWJhc2VFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1h
bmFnZXI6Om9wZW5EYXRhYmFzZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VN
YW5hZ2VyOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2Vy
OjpvcGVuRGF0YWJhc2VTeW5jKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlTWFuYWdlci5oOgorICAgICAgICAoRGF0YWJhc2VNYW5hZ2VyKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlU2VydmVyOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VT
ZXJ2ZXI6OmNyZWF0ZURhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlU2VydmVyLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5
bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpjcmVhdGUpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmg6CisgICAgICAgIChEYXRhYmFz
ZVN5bmMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6aGFzQWRlcXVhdGVRdW90YUZv
ck9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmNhbkVzdGFibGlz
aERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6cmV0cnlDYW5F
c3RhYmxpc2hEYXRhYmFzZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZVRyYWNrZXIuaDoKKyAgICAgICAgKERhdGFiYXNlVHJhY2tlcik6CisgICAgICAgICogTW9kdWxl
cy93ZWJkYXRhYmFzZS9Xb3JrZXJDb250ZXh0V2ViRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyQ29udGV4dFdlYkRhdGFiYXNlOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyQ29udGV4dFdlYkRhdGFiYXNlOjpvcGVuRGF0YWJhc2VTeW5jKToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNo
RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpyZXRyeUNhbkVz
dGFibGlzaERhdGFiYXNlKToKKwogMjAxMy0wMi0wNSAgVnNldm9sb2QgVmxhc292ICA8dnNldmlr
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgZW5kaW5nIHNsYXNo
ZXMgYXV0b21hdGljYWxseSB0byBmaWxlIG1hcHBpbmdzLgpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlU2VydmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlU2Vy
dmVyLmgJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsy
OCw5IEBACiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiRGF0YWJhc2VC
YXNpY1R5cGVzLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgiCisjaW5jbHVkZSAiRGF0
YWJhc2VFcnJvci5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC0zNiw5ICszOCw3IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERhdGFiYXNlQmFja2VuZDsKLWNsYXNzIERh
dGFiYXNlQmFja2VuZEFzeW5jOwogY2xhc3MgRGF0YWJhc2VCYWNrZW5kQ29udGV4dDsKLWNsYXNz
IERhdGFiYXNlQmFja2VuZFN5bmM7CiBjbGFzcyBEYXRhYmFzZU1hbmFnZXJDbGllbnQ7CiBjbGFz
cyBTZWN1cml0eU9yaWdpbjsKIApAQCAtNTIsNiArNTIsMTMgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBTdHJpbmcgZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCA9IHRydWUpID0gMDsKIAorICAg
IGVudW0gT3BlbkF0dGVtcHQgeworICAgICAgICBGaXJzdFRyeVRvT3BlbkRhdGFiYXNlLAorICAg
ICAgICBSZXRyeU9wZW5EYXRhYmFzZQorICAgIH07CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
RGF0YWJhc2VCYWNrZW5kPiBvcGVuRGF0YWJhc2UoUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRl
eHQ+JiwgRGF0YWJhc2VUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhw
ZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3Im
LCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgT3BlbkF0dGVtcHQgPSBGaXJzdFRyeVRvT3BlbkRhdGFi
YXNlKSA9IDA7CisKICNpZiAhUExBVEZPUk0oQ0hST01JVU0pCiAgICAgdmlydHVhbCBib29sIGhh
c0VudHJ5Rm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBv
cmlnaW5zKFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4mIHJlc3VsdCkgPSAwOwpAQCAt
NzcsOSArODQsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgaW50ZXJydXB0QWxsRGF0
YWJhc2VzRm9yQ29udGV4dChjb25zdCBEYXRhYmFzZUJhY2tlbmRDb250ZXh0KikgPSAwOwogCi0g
ICAgdmlydHVhbCBib29sIGNhbkVzdGFibGlzaERhdGFiYXNlKERhdGFiYXNlQmFja2VuZENvbnRl
eHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2ln
bmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNldERhdGFi
YXNlRGV0YWlscyhTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKSA9IDA7CiAgICAg
dmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IERh
dGFiYXNlQmFja2VuZCopID0gMDsKIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dXZWJEYXRhYmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dXZWJEYXRhYmFz
ZS5jcHAJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRE9NV2luZG93V2ViRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMSAr
NTEsOCBAQCBQYXNzUmVmUHRyPERhdGFiYXNlPiBET01XaW5kb3dXZWJEYXRhYmFzCiAgICAgaWYg
KGRiTWFuYWdlci5pc0F2YWlsYWJsZSgpICYmIHdpbmRvdy0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlP
cmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2Uod2luZG93LT5kb2N1bWVudCgpLT50b3BPcmlnaW4o
KSkpCiAgICAgICAgIGRhdGFiYXNlID0gZGJNYW5hZ2VyLm9wZW5EYXRhYmFzZSh3aW5kb3ctPmRv
Y3VtZW50KCksIG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBjcmVh
dGlvbkNhbGxiYWNrLCBlcnJvcik7CiAKLSAgICBBU1NFUlQoZXJyb3IgPT0gRGF0YWJhc2VFcnJv
cjo6Tm9uZSB8fCBlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpDYW5ub3RPcGVuRGF0YWJhc2UpOwot
ICAgIGlmIChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpDYW5ub3RPcGVuRGF0YWJhc2UpCi0gICAg
ICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgaWYgKCFkYXRhYmFzZSAmJiAhZWMpCi0g
ICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgIEFTU0VSVChkYXRhYmFzZSB8fCBlcnJvciAh
PSBEYXRhYmFzZUVycm9yOjpOb25lKTsKKyAgICBlYyA9IERhdGFiYXNlTWFuYWdlcjo6ZXhjZXB0
aW9uQ29kZUZvckRhdGFiYXNlRXJyb3IoZXJyb3IpOwogCiAgICAgcmV0dXJuIGRhdGFiYXNlOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZS5jcHAJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2NiwxMSBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK1Bhc3NSZWZQdHI8RGF0YWJhc2U+IERhdGFiYXNlOjpjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBi
YWNrZW5kKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRhYmFzZSo+KGJhY2tlbmQuZ2V0
KCkpOworfQorCiBEYXRhYmFzZTo6RGF0YWJhc2UoUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRD
b250ZXh0PiBkYXRhYmFzZUNvbnRleHQsCiAgICAgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWdu
ZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQogICAgIDogRGF0YWJhc2VCYXNlKGRhdGFiYXNlQ29udGV4
dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQpAQCAtMTMzLDIzICsxMzgsNiBAQCBTdHJpbmcg
RGF0YWJhc2U6OnZlcnNpb24oKSBjb25zdAogICAgIHJldHVybiBEYXRhYmFzZUJhY2tlbmQ6OnZl
cnNpb24oKTsKIH0KIAotYm9vbCBEYXRhYmFzZTo6b3BlbkFuZFZlcmlmeVZlcnNpb24oYm9vbCBz
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYgZXJyb3IsIFN0cmluZyYgZXJy
b3JNZXNzYWdlKQotewotICAgIERhdGFiYXNlVGFza1N5bmNocm9uaXplciBzeW5jaHJvbml6ZXI7
Ci0gICAgaWYgKCFkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKSB8fCBkYXRhYmFz
ZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+dGVybWluYXRpb25SZXF1ZXN0ZWQoJnN5bmNo
cm9uaXplcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotI2lmIFBMQVRGT1JNKENIUk9NSVVN
KQotICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnByZXBhcmVUb09wZW5EYXRhYmFzZSh0
aGlzKTsKLSNlbmRpZgotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIE93blB0cjxEYXRh
YmFzZU9wZW5UYXNrPiB0YXNrID0gRGF0YWJhc2VPcGVuVGFzazo6Y3JlYXRlKHRoaXMsIHNldFZl
cnNpb25Jbk5ld0RhdGFiYXNlLCAmc3luY2hyb25pemVyLCBlcnJvciwgZXJyb3JNZXNzYWdlLCBz
dWNjZXNzKTsKLSAgICBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+c2NoZWR1
bGVJbW1lZGlhdGVUYXNrKHRhc2sucmVsZWFzZSgpKTsKLSAgICBzeW5jaHJvbml6ZXIud2FpdEZv
clRhc2tDb21wbGV0aW9uKCk7Ci0KLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQogdm9pZCBEYXRh
YmFzZTo6bWFya0FzRGVsZXRlZEFuZENsb3NlKCkKIHsKICAgICBpZiAobV9kZWxldGVkIHx8ICFk
YXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKSkKQEAgLTIwNCwxOCArMTkyLDYgQEAg
dW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlOjptYXhpbXVtU2l6ZQogICAgIHJldHVybiBEYXRh
YmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5nZXRNYXhTaXplRm9yRGF0YWJhc2UodGhpcyk7CiB9CiAK
LWJvb2wgRGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2V0VmVyc2lvbkluTmV3
RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImIGVycm9yLCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKLXsK
LSAgICBpZiAoRGF0YWJhc2VCYWNrZW5kOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShzZXRWZXJzaW9u
SW5OZXdEYXRhYmFzZSwgZXJyb3IsIGVycm9yTWVzc2FnZSkpIHsKLSAgICAgICAgaWYgKGRhdGFi
YXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpKQotICAgICAgICAgICAgZGF0YWJhc2VDb250
ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlT3Blbih0aGlzKTsKLQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQg
RGF0YWJhc2U6OmNoYW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBT
dHJpbmcmIG5ld1ZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaAkocmV2aXNp
b24gMTQxOTY1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMyArODgsMTEgQEAgcHJpdmF0ZToKICAgICBEYXRh
YmFzZShQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+LCBjb25zdCBTdHJpbmcmIG5h
bWUsCiAgICAgICAgIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcm
IGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwogICAgIFBhc3NSZWZQ
dHI8RGF0YWJhc2VCYWNrZW5kQXN5bmM+IGJhY2tlbmQoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxEYXRhYmFzZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPERh
dGFiYXNlQmFja2VuZD4pOwogCiAgICAgdm9pZCBydW5UcmFuc2FjdGlvbihQYXNzUmVmUHRyPFNR
TFRyYW5zYWN0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxs
YmFjaz4sCiAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4g
c3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4sIGJvb2wg
cmVhZE9ubHkpOwogCi0gICAgYm9vbCBvcGVuQW5kVmVyaWZ5VmVyc2lvbihib29sIHNldFZlcnNp
b25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwot
ICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNldFZlcnNpb25Jbk5l
d0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwotCiAgICAg
dm9pZCBpblByb2dyZXNzVHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB2b2lkIHNjaGVkdWxl
VHJhbnNhY3Rpb24oKTsKIApAQCAtMTEwLDYgKzEwOCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X2RlbGV0ZWQ7CiAKICAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2VNYW5hZ2VyOworICAgIGZyaWVu
ZCBjbGFzcyBEYXRhYmFzZVNlcnZlcjsgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHdoZW4gdGhlIGJh
Y2tlbmQgaGFzIGJlZW4gc3BsaXQgb3V0LgogICAgIGZyaWVuZCBjbGFzcyBEYXRhYmFzZUJhY2tl
bmRBc3luYzsgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHdoZW4gdGhlIGJhY2tlbmQgaGFzIGJlZW4g
c3BsaXQgb3V0LgogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZUJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmNwcAkocmV2aXNpb24gMTQxOTY1KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMTQsNyArMzE0LDcgQEAgYm9vbCBEYXRhYmFzZUJhY2tlbmQ6OnBl
cmZvcm1PcGVuQW5kVmVyaQogICAgIERvbmVDcmVhdGluZ0RhdGFiYXNlT25FeGl0Q2FsbGVyIG9u
RXhpdENhbGxlcih0aGlzKTsKICAgICBBU1NFUlQoZXJyb3JNZXNzYWdlLmlzRW1wdHkoKSk7CiAg
ICAgQVNTRVJUKGVycm9yID09IERhdGFiYXNlRXJyb3I6Ok5vbmUpOyAvLyBCZXR0ZXIgbm90IGhh
dmUgYW55IGVycm9ycyBhbHJlYWR5LgotICAgIGVycm9yID0gRGF0YWJhc2VFcnJvcjo6Q2Fubm90
T3BlbkRhdGFiYXNlOyAvLyBQcmVzdW1lZCBmYWlsdXJlLiBXZSdsbCBjbGVhciBpdCBpZiB3ZSBz
dWNjZWVkIGJlbG93LgorICAgIGVycm9yID0gRGF0YWJhc2VFcnJvcjo6SW52YWxpZERhdGFiYXNl
U3RhdGU7IC8vIFByZXN1bWVkIGZhaWx1cmUuIFdlJ2xsIGNsZWFyIGl0IGlmIHdlIHN1Y2NlZWQg
YmVsb3cuCiAKICAgICBjb25zdCBpbnQgbWF4U3FsaXRlQnVzeVdhaXRUaW1lID0gMzAwMDA7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5k
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZUJhY2tlbmQuaAkocmV2aXNpb24gMTQxOTY1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYg
KzEwMyw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgY2xvc2VEYXRhYmFzZSgpOwogCisgICAg
dmlydHVhbCBib29sIG9wZW5BbmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0
YWJhc2UsIERhdGFiYXNlRXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgPSAwOwogICAgIHZp
cnR1YWwgYm9vbCBwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNob3VsZFNldFZlcnNpb25Jbk5l
d0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogCiAgICAg
Ym9vbCBnZXRWZXJzaW9uRnJvbURhdGFiYXNlKFN0cmluZyYgdmVyc2lvbiwgYm9vbCBzaG91bGRD
YWNoZVZlcnNpb24gPSB0cnVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuY3BwCShyZXZpc2lv
biAxNDE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
QmFja2VuZEFzeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOSBAQAogI2lmIEVO
QUJMRShTUUxfREFUQUJBU0UpCiAKICNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRDb250ZXh0Lmgi
CisjaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIK
KyNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC0zNyw2ICs0MCwzNCBAQCBEYXRhYmFzZUJhY2tlbmRBc3luYzo6RGF0YWJhc2VCYWNrZW5kQXN5
CiB7CiB9CiAKK2Jvb2wgRGF0YWJhc2VCYWNrZW5kQXN5bmM6Om9wZW5BbmRWZXJpZnlWZXJzaW9u
KGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImIGVycm9yLCBTdHJp
bmcmIGVycm9yTWVzc2FnZSkKK3sKKyAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIgc3luY2hy
b25pemVyOworICAgIGlmICghZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCkgfHwg
ZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnRlcm1pbmF0aW9uUmVxdWVzdGVk
KCZzeW5jaHJvbml6ZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBQTEFURk9STShD
SFJPTUlVTSkKKyAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5wcmVwYXJlVG9PcGVuRGF0
YWJhc2UodGhpcyk7CisjZW5kaWYKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBPd25Q
dHI8RGF0YWJhc2VPcGVuVGFzaz4gdGFzayA9IERhdGFiYXNlT3BlblRhc2s6OmNyZWF0ZSh0aGlz
LCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgJnN5bmNocm9uaXplciwgZXJyb3IsIGVycm9yTWVz
c2FnZSwgc3VjY2Vzcyk7CisgICAgZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCkt
PnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0YXNrLnJlbGVhc2UoKSk7CisgICAgc3luY2hyb25pemVy
LndhaXRGb3JUYXNrQ29tcGxldGlvbigpOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK2Jv
b2wgRGF0YWJhc2VCYWNrZW5kQXN5bmM6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2V0VmVy
c2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImIGVycm9yLCBTdHJpbmcmIGVycm9yTWVz
c2FnZSkKK3sKKyAgICBpZiAoRGF0YWJhc2VCYWNrZW5kOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShz
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZXJyb3IsIGVycm9yTWVzc2FnZSkpIHsKKyAgICAgICAg
aWYgKGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpKQorICAgICAgICAgICAgZGF0
YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlT3Blbih0aGlz
KTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRBc3luYy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuaAkocmV2
aXNpb24gMTQxOTY1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZUJhY2tlbmRBc3luYy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMSArNDMsMTEgQEAgY2xh
c3MgRGF0YWJhc2VTZXJ2ZXI7CiAvLyBhdmFpbGFibGUuIFRoaXMgc2hvdWxkIGJlIHJlcGxhY2Vk
IHdpdGggdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBsYXRlci4KIAogY2xhc3MgRGF0YWJhc2VC
YWNrZW5kQXN5bmMgOiBwdWJsaWMgRGF0YWJhc2VCYWNrZW5kIHsKLXByb3RlY3RlZDoKK3B1Ymxp
YzoKICAgICBEYXRhYmFzZUJhY2tlbmRBc3luYyhQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZENv
bnRleHQ+LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9u
LCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUp
OwogCi0gICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlTWFuYWdlcjsgLy8gRklYTUU6IHJlbW92ZSB0
aGlzIG9uY2Ugd2UgaGF2ZSBpc29sYXRlZCB0aGlzIHRvIHRoZSBiYWNrZW5kLgotICAgIGZyaWVu
ZCBjbGFzcyBEYXRhYmFzZVNlcnZlcjsKKyAgICB2aXJ0dWFsIGJvb2wgb3BlbkFuZFZlcmlmeVZl
cnNpb24oYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmlu
ZyYgZXJyb3JNZXNzYWdlKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnko
Ym9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYgZXJy
b3JNZXNzYWdlKTsKIAogcHJpdmF0ZToKICAgICBjbGFzcyBEYXRhYmFzZU9wZW5UYXNrOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRTeW5j
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlQmFja2VuZFN5bmMuY3BwCShyZXZpc2lvbiAxNDE5NjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZFN5bmMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAogI2luY2x1
ZGUgIkRhdGFiYXNlQmFja2VuZENvbnRleHQuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MSw2ICs1MiwxNCBAQCBEYXRhYmFzZUJh
Y2tlbmRTeW5jOjp+RGF0YWJhc2VCYWNrZW5kU3luCiAgICAgICAgIGNsb3NlRGF0YWJhc2UoKTsK
IH0KIAorYm9vbCBEYXRhYmFzZUJhY2tlbmRTeW5jOjpvcGVuQW5kVmVyaWZ5VmVyc2lvbihib29s
IHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiBlcnJvciwgU3RyaW5nJiBl
cnJvck1lc3NhZ2UpCit7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgRGF0YWJhc2VUcmFj
a2VyOjp0cmFja2VyKCkucHJlcGFyZVRvT3BlbkRhdGFiYXNlKHRoaXMpOworI2VuZGlmCisgICAg
cmV0dXJuIHBlcmZvcm1PcGVuQW5kVmVyaWZ5KHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBlcnJv
ciwgZXJyb3JNZXNzYWdlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kU3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kU3luYy5oCShyZXZpc2lvbiAx
NDE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFj
a2VuZFN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTAgKzQ1LDExIEBAIGNsYXNzIERhdGFi
YXNlQmFja2VuZFN5bmMgOiBwdWJsaWMgRGF0YWIKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5EYXRh
YmFzZUJhY2tlbmRTeW5jKCk7CiAKKyAgICB2aXJ0dWFsIGJvb2wgb3BlbkFuZFZlcmlmeVZlcnNp
b24oYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYg
ZXJyb3JNZXNzYWdlKTsKKwogcHJvdGVjdGVkOgogICAgIERhdGFiYXNlQmFja2VuZFN5bmMoUGFz
c1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5z
aWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKIAotICAgIGZyaWVuZCBjbGFzcyBEYXRhYmFzZU1h
bmFnZXI7IC8vIEZJWE1FOiByZW1vdmUgdGhpcyBvbmNlIHdlIGhhdmUgaXNvbGF0ZWQgdGhpcyB0
byB0aGUgYmFja2VuZC4KICAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2VTZXJ2ZXI7CiB9OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlRXJyb3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
RXJyb3IuaAkocmV2aXNpb24gMTQxOTY1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZUVycm9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEwICszNCwxMSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEVOVU1fQ0xBU1MoRGF0YWJhc2VFcnJvcikgewogICAg
IE5vbmUgPSAwLAotICAgIENhbm5vdE9wZW5EYXRhYmFzZSwKICAgICBEYXRhYmFzZUlzQmVpbmdE
ZWxldGVkLAogICAgIERhdGFiYXNlU2l6ZUV4Y2VlZGVkUXVvdGEsCi0gICAgRGF0YWJhc2VTaXpl
T3ZlcmZsb3dlZAorICAgIERhdGFiYXNlU2l6ZU92ZXJmbG93ZWQsCisgICAgR2VuZXJpY1NlY3Vy
aXR5RXJyb3IsCisgICAgSW52YWxpZERhdGFiYXNlU3RhdGUKIH0gRU5VTV9DTEFTU19FTkQoRGF0
YWJhc2VFcnJvcik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHAJ
KHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAj
aWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2VTZXJ2
ZXIuaCIKICNpbmNsdWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZC5o
IgogI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZEFzeW5jLmgiCkBAIC0yMDAsMzUgKzIwMSwxMDYg
QEAgdm9pZCBEYXRhYmFzZU1hbmFnZXI6OmRpZERlc3RydWN0RGF0YWJhcwogfQogI2VuZGlmCiAK
K0V4Y2VwdGlvbkNvZGUgRGF0YWJhc2VNYW5hZ2VyOjpleGNlcHRpb25Db2RlRm9yRGF0YWJhc2VF
cnJvcihEYXRhYmFzZUVycm9yIGVycm9yKQoreworICAgIHN3aXRjaCAoZXJyb3IpIHsKKyAgICBj
YXNlIERhdGFiYXNlRXJyb3I6Ok5vbmU6CisgICAgICAgIHJldHVybiAwOworICAgIGNhc2UgRGF0
YWJhc2VFcnJvcjo6RGF0YWJhc2VJc0JlaW5nRGVsZXRlZDoKKyAgICBjYXNlIERhdGFiYXNlRXJy
b3I6OkRhdGFiYXNlU2l6ZUV4Y2VlZGVkUXVvdGE6CisgICAgY2FzZSBEYXRhYmFzZUVycm9yOjpE
YXRhYmFzZVNpemVPdmVyZmxvd2VkOgorICAgIGNhc2UgRGF0YWJhc2VFcnJvcjo6R2VuZXJpY1Nl
Y3VyaXR5RXJyb3I6CisgICAgICAgIHJldHVybiBTRUNVUklUWV9FUlI7CisgICAgY2FzZSBEYXRh
YmFzZUVycm9yOjpJbnZhbGlkRGF0YWJhc2VTdGF0ZToKKyAgICAgICAgcmV0dXJuIElOVkFMSURf
U1RBVEVfRVJSOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
MDsgLy8gTWFrZSBzb21lIG9sZGVyIGNvbXBpbGVycyBoYXBweS4KK30KKworUGFzc1JlZlB0cjxE
YXRhYmFzZUJhY2tlbmQ+IERhdGFiYXNlTWFuYWdlcjo6b3BlbkRhdGFiYXNlQmFja2VuZChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAorICAgIERhdGFiYXNlVHlwZSB0eXBlLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJp
bmcmIGRpc3BsYXlOYW1lLAorICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgYm9vbCBz
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYgZXJyb3IsIFN0cmluZyYgZXJy
b3JNZXNzYWdlKQoreworICAgIEFTU0VSVChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpOb25lKTsK
KworICAgIFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCA9IGRhdGFiYXNl
Q29udGV4dEZvcihjb250ZXh0KTsKKyAgICBSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4g
YmFja2VuZENvbnRleHQgPSBkYXRhYmFzZUNvbnRleHQtPmJhY2tlbmQoKTsKKworICAgIFJlZlB0
cjxEYXRhYmFzZUJhY2tlbmQ+IGJhY2tlbmQgPSBtX3NlcnZlci0+b3BlbkRhdGFiYXNlKGJhY2tl
bmRDb250ZXh0LCB0eXBlLCBuYW1lLCBleHBlY3RlZFZlcnNpb24sCisgICAgICAgIGRpc3BsYXlO
YW1lLCBlc3RpbWF0ZWRTaXplLCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZXJyb3IsIGVycm9y
TWVzc2FnZSk7CisKKyAgICBpZiAoIWJhY2tlbmQpIHsKKyAgICAgICAgQVNTRVJUKGVycm9yICE9
IERhdGFiYXNlRXJyb3I6Ok5vbmUpOworCisgICAgICAgIHN3aXRjaCAoZXJyb3IpIHsKKyAgICAg
ICAgY2FzZSBEYXRhYmFzZUVycm9yOjpEYXRhYmFzZUlzQmVpbmdEZWxldGVkOgorICAgICAgICBj
YXNlIERhdGFiYXNlRXJyb3I6OkRhdGFiYXNlU2l6ZU92ZXJmbG93ZWQ6CisgICAgICAgIGNhc2Ug
RGF0YWJhc2VFcnJvcjo6R2VuZXJpY1NlY3VyaXR5RXJyb3I6CisgICAgICAgICAgICBnb3RvIGhh
bmRsZUVycm9yOworCisgICAgICAgIGNhc2UgRGF0YWJhc2VFcnJvcjo6SW52YWxpZERhdGFiYXNl
U3RhdGU6CisgICAgICAgICAgICBnb3RvIGhhbmRsZUludmFsaWREYXRhYmFzZVN0YXRlOworCisg
ICAgICAgIGNhc2UgRGF0YWJhc2VFcnJvcjo6RGF0YWJhc2VTaXplRXhjZWVkZWRRdW90YToKKyAg
ICAgICAgICAgIC8vIE5vdGlmeSB0aGUgY2xpZW50IHRoYXQgd2UndmUgZXhjZWVkZWQgdGhlIGRh
dGFiYXNlIHF1b3RhLgorICAgICAgICAgICAgLy8gVGhlIGNsaWVudCBtYXkgd2FudCB0byBpbmNy
ZWFzZSB0aGUgcXVvdGEsIGFuZCB3ZSdsbCBnaXZlIGl0CisgICAgICAgICAgICAvLyBvbmUgbW9y
ZSB0cnkgYWZ0ZXIgaWYgdGhhdCBpcyB0aGUgY2FzZS4KKyAgICAgICAgICAgIGRhdGFiYXNlQ29u
dGV4dC0+ZGF0YWJhc2VFeGNlZWRlZFF1b3RhKG5hbWUsCisgICAgICAgICAgICAgICAgRGF0YWJh
c2VEZXRhaWxzKG5hbWUuaXNvbGF0ZWRDb3B5KCksIGRpc3BsYXlOYW1lLmlzb2xhdGVkQ29weSgp
LCBlc3RpbWF0ZWRTaXplLCAwKSk7CisKKyAgICAgICAgICAgIGVycm9yID0gRGF0YWJhc2VFcnJv
cjo6Tm9uZTsKKworICAgICAgICAgICAgYmFja2VuZCA9IG1fc2VydmVyLT5vcGVuRGF0YWJhc2Uo
YmFja2VuZENvbnRleHQsIHR5cGUsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwKKyAgICAgICAgICAg
ICAgICBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2Us
IGVycm9yLCBlcnJvck1lc3NhZ2UsCisgICAgICAgICAgICAgICAgQWJzdHJhY3REYXRhYmFzZVNl
cnZlcjo6UmV0cnlPcGVuRGF0YWJhc2UpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCFiYWNrZW5kKSB7CisgICAgICAgICAgICBBU1NFUlQoZXJyb3IgIT0gRGF0
YWJhc2VFcnJvcjo6Tm9uZSk7CisKKyAgICAgICAgaGFuZGxlSW52YWxpZERhdGFiYXNlU3RhdGU6
CisgICAgICAgICAgICBpZiAoZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6SW52YWxpZERhdGFiYXNl
U3RhdGUpIHsKKyAgICAgICAgICAgICAgICBsb2dFcnJvck1lc3NhZ2UoY29udGV4dCwgZXJyb3JN
ZXNzYWdlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICBoYW5kbGVFcnJvcjoKKyAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2Ug
JXMgZm9yIG9yaWdpbiAlcyBub3QgYWxsb3dlZCB0byBiZSBlc3RhYmxpc2hlZCIsIG5hbWUuYXNj
aWkoKS5kYXRhKCksCisgICAgICAgICAgICAgICAgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+
dG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBiYWNrZW5kLnJlbGVhc2UoKTsKK30KKwogUGFzc1Jl
ZlB0cjxEYXRhYmFzZT4gRGF0YWJhc2VNYW5hZ2VyOjpvcGVuRGF0YWJhc2UoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwKICAgICBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLAogICAgIHVuc2ln
bmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVh
dGlvbkNhbGxiYWNrLAogICAgIERhdGFiYXNlRXJyb3ImIGVycm9yKQogewogICAgIFNjcmlwdENv
bnRyb2xsZXI6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKLSAgICBSZWZQdHI8RGF0YWJhc2VDb250
ZXh0PiBkYXRhYmFzZUNvbnRleHQgPSBkYXRhYmFzZUNvbnRleHRGb3IoY29udGV4dCk7Ci0gICAg
UmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+IGJhY2tlbmRDb250ZXh0ID0gZGF0YWJhc2VD
b250ZXh0LT5iYWNrZW5kKCk7CiAgICAgQVNTRVJUKGVycm9yID09IERhdGFiYXNlRXJyb3I6Ok5v
bmUpOwogCi0gICAgaWYgKCFtX3NlcnZlci0+Y2FuRXN0YWJsaXNoRGF0YWJhc2UoYmFja2VuZENv
bnRleHQuZ2V0KCksIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSkgewotICAgICAg
ICBMT0coU3RvcmFnZUFQSSwgIkRhdGFiYXNlICVzIGZvciBvcmlnaW4gJXMgbm90IGFsbG93ZWQg
dG8gYmUgZXN0YWJsaXNoZWQiLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBjb250ZXh0LT5zZWN1cml0
eU9yaWdpbigpLT50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotCisgICAgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSA9ICFjcmVhdGlvbkNh
bGxiYWNrOwogICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgUmVmUHRyPERhdGFiYXNlPiBk
YXRhYmFzZSA9IGFkb3B0UmVmKG5ldyBEYXRhYmFzZShiYWNrZW5kQ29udGV4dCwgbmFtZSwgZXhw
ZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpOwotCi0gICAgaWYgKCFk
YXRhYmFzZS0+b3BlbkFuZFZlcmlmeVZlcnNpb24oIWNyZWF0aW9uQ2FsbGJhY2ssIGVycm9yLCBl
cnJvck1lc3NhZ2UpKSB7Ci0gICAgICAgIGxvZ0Vycm9yTWVzc2FnZShjb250ZXh0LCBlcnJvck1l
c3NhZ2UpOworICAgIFJlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+IGJhY2tlbmQgPSBvcGVuRGF0YWJh
c2VCYWNrZW5kKGNvbnRleHQsIERhdGFiYXNlVHlwZTo6QXN5bmMsIG5hbWUsCisgICAgICAgIGV4
cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIHNldFZlcnNpb25Jbk5l
d0RhdGFiYXNlLCBlcnJvciwgZXJyb3JNZXNzYWdlKTsKKyAgICBpZiAoIWJhY2tlbmQpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIH0KIAotICAgIG1fc2VydmVyLT5zZXREYXRhYmFzZURldGFpbHMo
Y29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNp
emUpOwotICAgIGRhdGFiYXNlQ29udGV4dC0+c2V0SGFzT3BlbkRhdGFiYXNlcygpOworICAgIFJl
ZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UgPSBEYXRhYmFzZTo6Y3JlYXRlKGNvbnRleHQsIGJhY2tl
bmQpOwogCisgICAgUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0ID0gZGF0
YWJhc2VDb250ZXh0Rm9yKGNvbnRleHQpOworICAgIGRhdGFiYXNlQ29udGV4dC0+c2V0SGFzT3Bl
bkRhdGFiYXNlcygpOwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkT3BlbkRhdGFi
YXNlKGNvbnRleHQsIGRhdGFiYXNlLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5ob3N0KCks
IG5hbWUsIGV4cGVjdGVkVmVyc2lvbik7CiAKLSAgICBpZiAoZGF0YWJhc2UtPmlzTmV3KCkgJiYg
Y3JlYXRpb25DYWxsYmFjay5nZXQoKSkgeworICAgIGlmIChiYWNrZW5kLT5pc05ldygpICYmIGNy
ZWF0aW9uQ2FsbGJhY2suZ2V0KCkpIHsKICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVs
aW5nIERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2sgZm9yIGRhdGFiYXNlICVwXG4iLCBkYXRh
YmFzZS5nZXQoKSk7CiAgICAgICAgIGRhdGFiYXNlLT5tX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PnBvc3RUYXNrKERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2s6OmNyZWF0ZShkYXRhYmFzZSwg
Y3JlYXRpb25DYWxsYmFjaykpOwogICAgIH0KQEAgLTI0MCwyNyArMzEyLDE5IEBAIFBhc3NSZWZQ
dHI8RGF0YWJhc2VTeW5jPiBEYXRhYmFzZU1hbmFnZXIKICAgICBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1l
LAogICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNh
bGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrLCBEYXRhYmFzZUVycm9yJiBlcnJvcikKIHsKLSAgICBS
ZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBkYXRhYmFzZUNvbnRleHQgPSBkYXRhYmFzZUNvbnRleHRG
b3IoY29udGV4dCk7Ci0gICAgUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+IGJhY2tlbmRD
b250ZXh0ID0gZGF0YWJhc2VDb250ZXh0LT5iYWNrZW5kKCk7CiAgICAgQVNTRVJUKGNvbnRleHQt
PmlzQ29udGV4dFRocmVhZCgpKTsKICAgICBBU1NFUlQoZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6
Tm9uZSk7CiAKLSAgICBpZiAoIW1fc2VydmVyLT5jYW5Fc3RhYmxpc2hEYXRhYmFzZShiYWNrZW5k
Q29udGV4dC5nZXQoKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKSB7Ci0gICAg
ICAgIExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2UgJXMgZm9yIG9yaWdpbiAlcyBub3QgYWxsb3dl
ZCB0byBiZSBlc3RhYmxpc2hlZCIsIG5hbWUuYXNjaWkoKS5kYXRhKCksIGNvbnRleHQtPnNlY3Vy
aXR5T3JpZ2luKCktPnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0KKyAgICBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlID0gIWNyZWF0aW9u
Q2FsbGJhY2s7CiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBSZWZQdHI8RGF0YWJhc2VT
eW5jPiBkYXRhYmFzZSA9IGFkb3B0UmVmKG5ldyBEYXRhYmFzZVN5bmMoYmFja2VuZENvbnRleHQs
IG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKTsKLQot
ICAgIGlmICghZGF0YWJhc2UtPm9wZW5BbmRWZXJpZnlWZXJzaW9uKCFjcmVhdGlvbkNhbGxiYWNr
LCBlcnJvciwgZXJyb3JNZXNzYWdlKSkgewotICAgICAgICBsb2dFcnJvck1lc3NhZ2UoY29udGV4
dCwgZXJyb3JNZXNzYWdlKTsKKyAgICBSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBiYWNrZW5kID0g
b3BlbkRhdGFiYXNlQmFja2VuZChjb250ZXh0LCBEYXRhYmFzZVR5cGU6OlN5bmMsIG5hbWUsCisg
ICAgICAgIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIHNldFZl
cnNpb25Jbk5ld0RhdGFiYXNlLCBlcnJvciwgZXJyb3JNZXNzYWdlKTsKKyAgICBpZiAoIWJhY2tl
bmQpCiAgICAgICAgIHJldHVybiAwOwotICAgIH0KIAotICAgIG1fc2VydmVyLT5zZXREYXRhYmFz
ZURldGFpbHMoY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVz
dGltYXRlZFNpemUpOworICAgIFJlZlB0cjxEYXRhYmFzZVN5bmM+IGRhdGFiYXNlID0gRGF0YWJh
c2VTeW5jOjpjcmVhdGUoY29udGV4dCwgYmFja2VuZCk7CiAKLSAgICBpZiAoZGF0YWJhc2UtPmlz
TmV3KCkgJiYgY3JlYXRpb25DYWxsYmFjay5nZXQoKSkgeworICAgIGlmIChiYWNrZW5kLT5pc05l
dygpICYmIGNyZWF0aW9uQ2FsbGJhY2suZ2V0KCkpIHsKICAgICAgICAgTE9HKFN0b3JhZ2VBUEks
ICJJbnZva2luZyB0aGUgY3JlYXRpb24gY2FsbGJhY2sgZm9yIGRhdGFiYXNlICVwXG4iLCBkYXRh
YmFzZS5nZXQoKSk7CiAgICAgICAgIGNyZWF0aW9uQ2FsbGJhY2stPmhhbmRsZUV2ZW50KGRhdGFi
YXNlLmdldCgpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmgJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAK
LSNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlU2VydmVyLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VC
YXNpY1R5cGVzLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgiCiAjaW5jbHVkZSAiRGF0
YWJhc2VFcnJvci5oIgpAQCAtODAsNiArNzksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWREZXN0
cnVjdERhdGFiYXNlQ29udGV4dCgpIHsgfQogI2VuZGlmCiAKKyAgICBzdGF0aWMgRXhjZXB0aW9u
Q29kZSBleGNlcHRpb25Db2RlRm9yRGF0YWJhc2VFcnJvcihEYXRhYmFzZUVycm9yKTsKKwogICAg
IFBhc3NSZWZQdHI8RGF0YWJhc2U+IG9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29u
c3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNz
UmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+LCBEYXRhYmFzZUVycm9yJik7CiAgICAgUGFzc1JlZlB0
cjxEYXRhYmFzZVN5bmM+IG9wZW5EYXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0
IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1Jl
ZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiwgRGF0YWJhc2VFcnJvciYpOwogCkBAIC0xMjQsNiArMTI1
LDEwIEBAIHByaXZhdGU6CiAgICAgLy8gaXQgYWxyZWFkeSBleGlzdCBwcmV2aW91c2x5LiBPdGhl
cndpc2UsIGl0IHJldHVybnMgMC4KICAgICBQYXNzUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gZXhp
c3RpbmdEYXRhYmFzZUNvbnRleHRGb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCisgICAg
UGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+IG9wZW5EYXRhYmFzZUJhY2tlbmQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosCisgICAgICAgIERhdGFiYXNlVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFt
ZSwKKyAgICAgICAgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBib29sIHNldFZlcnNpb25J
bk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOworCiAg
ICAgc3RhdGljIHZvaWQgbG9nRXJyb3JNZXNzYWdlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogCiAgICAgQWJzdHJhY3REYXRhYmFzZVNlcnZlciogbV9z
ZXJ2ZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
U2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlU2VydmVyLmNwcAkocmV2aXNpb24gMTQxOTY1KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVNlcnZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDkgKzI4LDExIEBACiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCisjaW5jbHVk
ZSAiRGF0YWJhc2UuaCIKICNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRBc3luYy5oIgogI2luY2x1
ZGUgIkRhdGFiYXNlQmFja2VuZENvbnRleHQuaCIKICNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRT
eW5jLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VTeW5jLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUcmFj
a2VyLmgiCiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKQEAgLTE0OSwxNCArMTUxLDQw
IEBAIHZvaWQgRGF0YWJhc2VTZXJ2ZXI6OmludGVycnVwdEFsbERhdGFiYXMKICAgICBEYXRhYmFz
ZVRyYWNrZXI6OnRyYWNrZXIoKS5pbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnRl
eHQpOwogfQogCi1ib29sIERhdGFiYXNlU2VydmVyOjpjYW5Fc3RhYmxpc2hEYXRhYmFzZShEYXRh
YmFzZUJhY2tlbmRDb250ZXh0KiBiYWNrZW5kQ29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCitQ
YXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZD4gRGF0YWJhc2VTZXJ2ZXI6Om9wZW5EYXRhYmFzZShS
ZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4mIGJhY2tlbmRDb250ZXh0LCBEYXRhYmFzZVR5
cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lv
biwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXpl
LCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yICZlcnJvciwgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UsIE9wZW5BdHRlbXB0IGF0dGVtcHQpCiB7Ci0gICAgcmV0dXJuIERh
dGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmNhbkVzdGFibGlzaERhdGFiYXNlKGJhY2tlbmRDb250
ZXh0LCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7Ci19CisgICAgUmVmUHRyPERh
dGFiYXNlQmFja2VuZD4gZGF0YWJhc2U7CisgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7IC8vIE1h
a2Ugc29tZSBvbGRlciBjb21waWxlcnMgaGFwcHkuCisgICAgCisgICAgc3dpdGNoIChhdHRlbXB0
KSB7CisgICAgY2FzZSBGaXJzdFRyeVRvT3BlbkRhdGFiYXNlOgorICAgICAgICBzdWNjZXNzID0g
RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuY2FuRXN0YWJsaXNoRGF0YWJhc2UoYmFja2VuZENv
bnRleHQuZ2V0KCksIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBlcnJvcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUmV0cnlPcGVuRGF0YWJhc2U6CisgICAgICAgIHN1Y2Nl
c3MgPSBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5yZXRyeUNhbkVzdGFibGlzaERhdGFiYXNl
KGJhY2tlbmRDb250ZXh0LmdldCgpLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwg
ZXJyb3IpOworICAgIH0KKworICAgIGlmIChzdWNjZXNzKQorICAgICAgICBkYXRhYmFzZSA9IGNy
ZWF0ZURhdGFiYXNlKGJhY2tlbmRDb250ZXh0LCB0eXBlLCBuYW1lLCBleHBlY3RlZFZlcnNpb24s
IGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZXJy
b3IsIGVycm9yTWVzc2FnZSk7CisgICAgcmV0dXJuIGRhdGFiYXNlLnJlbGVhc2UoKTsKK30KKwor
UGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+IERhdGFiYXNlU2VydmVyOjpjcmVhdGVEYXRhYmFz
ZShSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4mIGJhY2tlbmRDb250ZXh0LCBEYXRhYmFz
ZVR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVy
c2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplLCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiBlcnJvciwg
U3RyaW5nJiBlcnJvck1lc3NhZ2UpCit7CisgICAgUmVmUHRyPERhdGFiYXNlQmFja2VuZD4gZGF0
YWJhc2U7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBEYXRhYmFzZVR5cGU6OkFzeW5j
OgorICAgICAgICBkYXRhYmFzZSA9IGFkb3B0UmVmKG5ldyBEYXRhYmFzZShiYWNrZW5kQ29udGV4
dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIERhdGFiYXNlVHlwZTo6U3luYzoKKyAgICAgICAgZGF0
YWJhc2UgPSBhZG9wdFJlZihuZXcgRGF0YWJhc2VTeW5jKGJhY2tlbmRDb250ZXh0LCBuYW1lLCBl
eHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSk7CisgICAgfQogCi12
b2lkIERhdGFiYXNlU2VydmVyOjpzZXREYXRhYmFzZURldGFpbHMoU2VjdXJpdHlPcmlnaW4qIG9y
aWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNp
Z25lZCBsb25nIGVzdGltYXRlZFNpemUpCi17Ci0gICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2Vy
KCkuc2V0RGF0YWJhc2VEZXRhaWxzKG9yaWdpbiwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRl
ZFNpemUpOworICAgIGlmICghZGF0YWJhc2UtPm9wZW5BbmRWZXJpZnlWZXJzaW9uKHNldFZlcnNp
b25Jbk5ld0RhdGFiYXNlLCBlcnJvciwgZXJyb3JNZXNzYWdlKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXREYXRhYmFzZURldGFpbHMoYmFj
a2VuZENvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0
ZWRTaXplKTsKKyAgICByZXR1cm4gZGF0YWJhc2UucmVsZWFzZSgpOwogfQogCiB1bnNpZ25lZCBs
b25nIGxvbmcgRGF0YWJhc2VTZXJ2ZXI6OmdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBEYXRh
YmFzZUJhY2tlbmQqIGRhdGFiYXNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVNlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuaAkocmV2aXNpb24gMTQxOTY1KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVNlcnZlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSw2ICs0NSw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgU3RyaW5n
IGZ1bGxQYXRoRm9yRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGJvb2wgY3JlYXRlSWZEb2VzTm90RXhpc3QpOwogCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPERh
dGFiYXNlQmFja2VuZD4gb3BlbkRhdGFiYXNlKFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0
PiYsIERhdGFiYXNlVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVj
dGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3Rp
bWF0ZWRTaXplLCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiwg
U3RyaW5nJiBlcnJvck1lc3NhZ2UsIE9wZW5BdHRlbXB0KTsKKwogI2lmICFQTEFURk9STShDSFJP
TUlVTSkKICAgICB2aXJ0dWFsIGJvb2wgaGFzRW50cnlGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4q
KTsKICAgICB2aXJ0dWFsIHZvaWQgb3JpZ2lucyhWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiA+JiByZXN1bHQpOwpAQCAtNzAsMTAgKzcyLDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCBpbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IERhdGFiYXNlQmFja2Vu
ZENvbnRleHQqKTsKIAotICAgIHZpcnR1YWwgYm9vbCBjYW5Fc3RhYmxpc2hEYXRhYmFzZShEYXRh
YmFzZUJhY2tlbmRDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRp
c3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwotCi0gICAgdmlydHVhbCB2
b2lkIHNldERhdGFiYXNlRGV0YWlscyhTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXpl
KTsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBnZXRNYXhTaXplRm9yRGF0YWJhc2Uo
Y29uc3QgRGF0YWJhc2VCYWNrZW5kKik7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBjcmVhdGVEYXRhYmFzZShSZWZQdHI8RGF0YWJhc2VCYWNr
ZW5kQ29udGV4dD4mLCBEYXRhYmFzZVR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVk
IGxvbmcgZXN0aW1hdGVkU2l6ZSwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJh
c2VFcnJvciYsIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VT
eW5jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlU3luYy5jcHAJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEs
NiArNTEsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitQYXNzUmVmUHRyPERhdGFiYXNl
U3luYz4gRGF0YWJhc2VTeW5jOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBiYWNrZW5kKQoreworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxEYXRhYmFzZVN5bmMqPihiYWNrZW5kLmdldCgpKTsKK30KKwogRGF0YWJhc2VTeW5jOjpEYXRh
YmFzZVN5bmMoUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiBkYXRhYmFzZUNvbnRl
eHQsCiAgICAgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lv
biwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXpl
KQogICAgIDogRGF0YWJhc2VCYXNlKGRhdGFiYXNlQ29udGV4dC0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKQpAQCAtMTU0LDE0ICsxNTksNiBAQCB2b2lkIERhdGFiYXNlU3luYzo6cnVuVHJhbnNh
Y3Rpb24oUGFzc1JlCiAgICAgc2V0TGFzdEVycm9yTWVzc2FnZSgiIik7CiB9CiAKLWJvb2wgRGF0
YWJhc2VTeW5jOjpvcGVuQW5kVmVyaWZ5VmVyc2lvbihib29sIHNldFZlcnNpb25Jbk5ld0RhdGFi
YXNlLCBEYXRhYmFzZUVycm9yJiBlcnJvciwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCi17Ci0jaWYg
UExBVEZPUk0oQ0hST01JVU0pCi0gICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucHJlcGFy
ZVRvT3BlbkRhdGFiYXNlKHRoaXMpOwotI2VuZGlmCi0gICAgcmV0dXJuIHBlcmZvcm1PcGVuQW5k
VmVyaWZ5KHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBlcnJvciwgZXJyb3JNZXNzYWdlKTsKLX0K
LQogdm9pZCBEYXRhYmFzZVN5bmM6Om1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpCiB7CiAgICAgLy8g
RklYTUU6IG5lZWQgdG8gZG8gc29tZXRoaW5nIHNpbWlsYXIgdG8gY2xvc2VJbW1lZGlhdGVseSgp
LCBidXQgaW4gYSBzeW5jIHdheQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZVN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5oCShyZXZpc2lvbiAxNDE5NjUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5oCSh3b3JraW5nIGNvcHkp
CkBAIC03NywxNSArNzcsMTQgQEAgcHJpdmF0ZToKICAgICBEYXRhYmFzZVN5bmMoUGFzc1JlZlB0
cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiwgY29uc3QgU3RyaW5nJiBuYW1lLAogICAgICAgICBj
b25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwg
dW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKICAgICBQYXNzUmVmUHRyPERhdGFiYXNlQmFj
a2VuZFN5bmM+IGJhY2tlbmQoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+
IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tl
bmQ+KTsKIAogICAgIHZvaWQgcnVuVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlv
blN5bmNDYWxsYmFjaz4sIGJvb2wgcmVhZE9ubHksIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIGJv
b2wgb3BlbkFuZFZlcmlmeVZlcnNpb24oYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0
YWJhc2VFcnJvciYsIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKLQogICAgIFN0cmluZyBtX2xhc3RF
cnJvck1lc3NhZ2U7CiAKICAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2VNYW5hZ2VyOwotICAgIGZy
aWVuZCBjbGFzcyBEYXRhYmFzZUJhY2tlbmRTeW5jOyAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hl
biB0aGUgYmFja2VuZCBoYXMgYmVlbiBzcGxpdCBvdXQuCisgICAgZnJpZW5kIGNsYXNzIERhdGFi
YXNlU2VydmVyOyAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB0aGUgYmFja2VuZCBoYXMgYmVl
biBzcGxpdCBvdXQuCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIu
Y3BwCShyZXZpc2lvbiAxNDE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlVHJhY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw0NyArMTQyLDk5
IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpvcGVuVHJhY2tlckRhdGFiYXMKICAgICB9CiB9CiAK
LWJvb2wgRGF0YWJhc2VUcmFja2VyOjpjYW5Fc3RhYmxpc2hEYXRhYmFzZShEYXRhYmFzZUJhY2tl
bmRDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlz
cGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKK2Jvb2wgRGF0YWJhc2VUcmFj
a2VyOjpoYXNBZGVxdWF0ZVF1b3RhRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgRGF0YWJhc2VFcnJvciYgZXJyKQogewotICAgIFNl
Y3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpOwotICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyByZXF1aXJlbWVudDsKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwotICAgICAgICBMb2NrZXI8T3JpZ2luUXVv
dGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOworICAg
IC8vIFNpbmNlIHdlJ3JlIGltbWluZW50bHkgb3BlbmluZyBhIGRhdGFiYXNlIHdpdGhpbiB0aGlz
IGNvbnRleHQncyBvcmlnaW4sCisgICAgLy8gbWFrZSBzdXJlIHRoaXMgb3JpZ2luIGlzIGJlaW5n
IHRyYWNrZWQgYnkgdGhlIE9yaWdpblF1b3RhTWFuYWdlcgorICAgIC8vIGJ5IGZldGNoaW5nIGl0
cyBjdXJyZW50IHVzYWdlIG5vdy4gQ2FsbGluZyB1c2FnZUZvck9yaWdpbigpIGhhcyB0aGUgc2lk
ZQorICAgIC8vIGVmZmVjdCBvZiBpbml0aWF0aW5nIHRyYWNraW5nIGJ5IHRoZSBPcmlnaW5RdW90
YU1hbmFnZXIgaWYgdGhlIG9yaWdpbiBpcworICAgIC8vIG5vdCBhbHJlYWR5IHRyYWNrZWQuCisg
ICAgdW5zaWduZWQgbG9uZyBsb25nIHVzYWdlID0gdXNhZ2VGb3JPcmlnaW5Ob0xvY2sob3JpZ2lu
KTsKKworICAgIC8vIElmIHRoZSBkYXRhYmFzZSB3aWxsIGZpdCwgYWxsb3cgaXRzIGNyZWF0aW9u
LgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyByZXF1aXJlbWVudCA9IHVzYWdlICsgbWF4KDFVTCwg
ZXN0aW1hdGVkU2l6ZSk7CisgICAgaWYgKHJlcXVpcmVtZW50IDwgdXNhZ2UpIHsKKyAgICAgICAg
Ly8gVGhlIGVzdGltYXRlZCBzaXplIGlzIHNvIGJpZyBpdCBjYXVzZXMgYW4gb3ZlcmZsb3c7IGRv
bid0IGFsbG93IGNyZWF0aW9uLgorICAgICAgICBlcnIgPSBEYXRhYmFzZUVycm9yOjpEYXRhYmFz
ZVNpemVPdmVyZmxvd2VkOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChy
ZXF1aXJlbWVudCA8PSBxdW90YUZvck9yaWdpbk5vTG9jayhvcmlnaW4pKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKIAotICAgICAgICBpZiAoaXNEZWxldGluZ0RhdGFiYXNlT3JPcmlnaW5Gb3Iob3Jp
Z2luLCBuYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBlcnIgPSBEYXRhYmFz
ZUVycm9yOjpEYXRhYmFzZVNpemVFeGNlZWRlZFF1b3RhOworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmNhbkVzdGFibGlzaERhdGFiYXNlKERhdGFiYXNlQmFj
a2VuZENvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBk
aXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBEYXRhYmFzZUVycm9yJiBl
cnJvcikKK3sKKyAgICBVTlVTRURfUEFSQU0oZGlzcGxheU5hbWUpOyAvLyBDaHJvbWl1bSB3YW50
cyB0aGUgZGlzcGxheU5hbWUgYnV0IHdlIGRvbid0LgorICAgIGVycm9yID0gRGF0YWJhc2VFcnJv
cjo6Tm9uZTsKKworICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQp
OworICAgIExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tlcihvcmln
aW5RdW90YU1hbmFnZXIoKSk7CisgICAgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IGNvbnRleHQt
PnNlY3VyaXR5T3JpZ2luKCk7CiAKLSAgICAgICAgcmVjb3JkQ3JlYXRpbmdEYXRhYmFzZShvcmln
aW4sIG5hbWUpOworICAgIGlmIChpc0RlbGV0aW5nRGF0YWJhc2VPck9yaWdpbkZvcihvcmlnaW4s
IG5hbWUpKSB7CisgICAgICAgIGVycm9yID0gRGF0YWJhc2VFcnJvcjo6RGF0YWJhc2VJc0JlaW5n
RGVsZXRlZDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAotICAgICAgICAvLyBTaW5j
ZSB3ZSdyZSBpbW1pbmVudGx5IG9wZW5pbmcgYSBkYXRhYmFzZSB3aXRoaW4gdGhpcyBjb250ZXh0
J3Mgb3JpZ2luLCBtYWtlIHN1cmUgdGhpcyBvcmlnaW4gaXMgYmVpbmcgdHJhY2tlZCBieSB0aGUg
UXVvdGFUcmFja2VyCi0gICAgICAgIC8vIGJ5IGZldGNoaW5nIGl0cyBjdXJyZW50IHVzYWdlIG5v
dy4KLSAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHVzYWdlID0gdXNhZ2VGb3JPcmlnaW5Ob0xv
Y2sob3JpZ2luKTsKKyAgICByZWNvcmRDcmVhdGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7CiAK
LSAgICAgICAgLy8gSWYgYSBkYXRhYmFzZSBhbHJlYWR5IGV4aXN0cywgaWdub3JlIHRoZSBwYXNz
ZWQtaW4gZXN0aW1hdGVkIHNpemUgYW5kIHNheSBpdCdzIE9LLgotICAgICAgICBpZiAoaGFzRW50
cnlGb3JEYXRhYmFzZShvcmlnaW4sIG5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgLy8gSWYgYSBkYXRhYmFzZSBhbHJlYWR5IGV4aXN0cywgaWdub3JlIHRoZSBwYXNzZWQtaW4g
ZXN0aW1hdGVkIHNpemUgYW5kIHNheSBpdCdzIE9LLgorICAgIGlmIChoYXNFbnRyeUZvckRhdGFi
YXNlKG9yaWdpbiwgbmFtZSkpCisgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIC8vIElm
IHRoZSBkYXRhYmFzZSB3aWxsIGZpdCwgYWxsb3cgaXRzIGNyZWF0aW9uLgotICAgICAgICByZXF1
aXJlbWVudCA9IHVzYWdlICsgbWF4KDFVTCwgZXN0aW1hdGVkU2l6ZSk7Ci0gICAgICAgIGlmIChy
ZXF1aXJlbWVudCA8IHVzYWdlKSB7Ci0gICAgICAgICAgICBkb25lQ3JlYXRpbmdEYXRhYmFzZShv
cmlnaW4sIG5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBJZiB0aGUgZXN0aW1h
dGVkIHNpemUgaXMgc28gYmlnIGl0IGNhdXNlcyBhbiBvdmVyZmxvdywgZG9uJ3QgYWxsb3cgY3Jl
YXRpb24uCi0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlcXVpcmVtZW50IDw9IHF1b3RhRm9yT3Jp
Z2luTm9Mb2NrKG9yaWdpbikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoaGFz
QWRlcXVhdGVRdW90YUZvck9yaWdpbihvcmlnaW4sIGVzdGltYXRlZFNpemUsIGVycm9yKSkgewor
ICAgICAgICBBU1NFUlQoZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6Tm9uZSk7CisgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAotICAgIC8vIEdpdmUgdGhlIGNocm9tZSBjbGllbnQgYSBjaGFu
Y2UgdG8gaW5jcmVhc2UgdGhlIHF1b3RhLgotICAgIC8vIERyb3AgYWxsIGxvY2tzIGJlZm9yZSBj
YWxsaW5nIG91dDsgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZXknbGwgZG8uCi0gICAgY29udGV4dC0+
ZGF0YWJhc2VFeGNlZWRlZFF1b3RhKG5hbWUsIERhdGFiYXNlRGV0YWlscyhuYW1lLmlzb2xhdGVk
Q29weSgpLCBkaXNwbGF5TmFtZS5pc29sYXRlZENvcHkoKSwgZXN0aW1hdGVkU2l6ZSwgMCkpOwor
ICAgIC8vIElmIHdlIGdldCBoZXJlLCB0aGVuIHdlIGRvIG5vdCBoYXZlIGVub3VnaCBxdW90YSBm
b3Igb25lIG9mIHRoZQorICAgIC8vIGZvbGxvd2luZyByZWFzb25zIGFzIGluZGljYXRlZCBieSB0
aGUgc2V0IGVycm9yOgorICAgIC8vCisgICAgLy8gSWYgdGhlIGVycm9yIGlzIERBVEFCQVNFX1NJ
WkVfT1ZFUkZMT1dFRCwgdGhlbiB0aGlzIG1lYW5zIHRoZSByZXF1ZXN0ZWQKKyAgICAvLyBlc3Rp
bWF0ZWRTaXplIGlmIHNvIHVucmVhc29uYWJseSBsYXJnZSB0aGF0IGl0IGNhbiBjYXVzZSBhbiBv
dmVyZmxvdyBpbgorICAgIC8vIHRoZSB1c2FnZSBidWRnZXQgY29tcHV0YXRpb24uIEluIHRoYXQg
Y2FzZSwgdGhlcmUncyBub3RoaW5nIG1vcmUgd2UgY2FuCisgICAgLy8gZG8sIGFuZCB0aGVyZSdz
IG5vIG5lZWQgZm9yIGEgcmV0cnkuIEhlbmNlLCB3ZSBzaG91bGQgaW5kaWNhdGUgdGhhdAorICAg
IC8vIHdlJ3JlIGRvbmUgd2l0aCBvdXIgYXR0ZW1wdCB0byBjcmVhdGUgdGhlIGRhdGFiYXNlOgor
ICAgIC8vCisgICAgLy8gSWYgdGhlIGVycm9yIGlzIERBVEFCQVNFX1NJWkVfRVhDRUVERURfUVVP
VEEsIHRoZW4gd2UnbGwgZ2l2ZSB0aGUgY2xpZW50CisgICAgLy8gYSBjaGFuY2UgdG8gdXBkYXRl
IHRoZSBxdW90YSBhbmQgY2FsbCByZXRyeUNhbkVzdGFibGlzaERhdGFiYXNlKCkgdG8gdHJ5Cisg
ICAgLy8gYWdhaW4uIEhlbmNlLCB3ZSBkb24ndCBjYWxsIGRvbmVDcmVhdGluZ0RhdGFiYXNlKCkg
eWV0IGluIHRoYXQgY2FzZS4KKworICAgIGlmIChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpEYXRh
YmFzZVNpemVPdmVyZmxvd2VkKQorICAgICAgICBkb25lQ3JlYXRpbmdEYXRhYmFzZShvcmlnaW4s
IG5hbWUpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUKGVycm9yID09IERhdGFiYXNlRXJyb3I6
OkRhdGFiYXNlU2l6ZUV4Y2VlZGVkUXVvdGEpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCisv
LyBOb3RlOiBhIHRob3VnaHQgYWJvdXQgcGVyZm9ybWFuY2U6IGhhc0FkZXF1YXRlUXVvdGFGb3JP
cmlnaW4oKSB3YXMgYWxzbworLy8gY2FsbGVkIGluIGNhbkVzdGFibGlzaERhdGFiYXNlKCksIGFu
ZCBoZW5jZSwgd2UncmUgcmVwZWF0aW5nIHNvbWUgd29yayB3aXRoaW4KKy8vIGhhc0FkZXF1YXRl
UXVvdGFGb3JPcmlnaW4oKS4gSG93ZXZlciwgcmV0cnlDYW5Fc3RhYmxpc2hEYXRhYmFzZSgpIHNo
b3VsZCBvbmx5CisvLyBiZSBjYWxsZWQgaW4gdGhlIHJhcmUgZXZlbiBpZiBjYW5Fc3RhYmxpc2hE
YXRhYmFzZSgpIGZhaWxzLiBTaW5jZSBpdCBpcyByYXJlLAorLy8gd2Ugc2hvdWxkIG5vdCBib3Ro
ZXIgb3B0aW1pemluZyBpdC4gSXQgaXMgbW9yZSBiZW5lZmljaWFsIHRvIGtlZXAKKy8vIGhhc0Fk
ZXF1YXRlUXVvdGFGb3JPcmlnaW4oKSBzaW1wbGUgYW5kIGNvcnJlY3QgKGkuZS4gYnVnIGZyZWUp
LCBhbmQganVzdAorLy8gcmUtdXNlIGl0LgorYm9vbCBEYXRhYmFzZVRyYWNrZXI6OnJldHJ5Q2Fu
RXN0YWJsaXNoRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kQ29udGV4dCogY29udGV4dCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUsIERhdGFiYXNlRXJyb3ImIGVycm9yKQoreworICAgIC8vIENocm9taXVtIHdh
bnRzIHRoZSBkaXNwbGF5TmFtZSBidXQgd2UgZG9uJ3QuCisgICAgVU5VU0VEX1BBUkFNKGRpc3Bs
YXlOYW1lKTsKKyAgICBlcnJvciA9IERhdGFiYXNlRXJyb3I6Ok5vbmU7CiAKICAgICBNdXRleExv
Y2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICBMb2NrZXI8T3JpZ2luUXVv
dGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOworICAg
IFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpOwogCiAg
ICAgLy8gSWYgdGhlIGRhdGFiYXNlIHdpbGwgZml0IG5vdywgYWxsb3cgaXRzIGNyZWF0aW9uLgot
ICAgIGlmIChyZXF1aXJlbWVudCA8PSBxdW90YUZvck9yaWdpbk5vTG9jayhvcmlnaW4pKQorICAg
IGlmIChoYXNBZGVxdWF0ZVF1b3RhRm9yT3JpZ2luKG9yaWdpbiwgZXN0aW1hdGVkU2l6ZSwgZXJy
b3IpKSB7CisgICAgICAgIEFTU0VSVChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpOb25lKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCisgICAgQVNTRVJUKGVycm9yID09IERhdGFiYXNl
RXJyb3I6OkRhdGFiYXNlU2l6ZUV4Y2VlZGVkUXVvdGEpOwogICAgIGRvbmVDcmVhdGluZ0RhdGFi
YXNlKG9yaWdpbiwgbmFtZSk7CiAKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmgJKHJl
dmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VUcmFja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2lmIEVO
QUJMRShTUUxfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJEYXRhYmFzZUVycm9yLmgiCiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0hhc2guaD4KQEAgLTcwLDcgKzcxLDkgQEAgcHVibGljOgogICAgIC8vIG1f
ZGF0YWJhc2VHdWFyZCBhbmQgbV9vcGVuRGF0YWJhc2VNYXBHdWFyZCBjdXJyZW50bHkgZG9uJ3Qg
b3ZlcmxhcC4KICAgICAvLyBub3RpZmljYXRpb25NdXRleCgpIGlzIGN1cnJlbnRseSBpbmRlcGVu
ZGVudCBvZiB0aGUgb3RoZXIgbG9ja3MuCiAKLSAgICBib29sIGNhbkVzdGFibGlzaERhdGFiYXNl
KERhdGFiYXNlQmFja2VuZENvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CisgICAgYm9vbCBj
YW5Fc3RhYmxpc2hEYXRhYmFzZShEYXRhYmFzZUJhY2tlbmRDb250ZXh0KiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRl
ZFNpemUsIERhdGFiYXNlRXJyb3ImKTsKKyAgICBib29sIHJldHJ5Q2FuRXN0YWJsaXNoRGF0YWJh
c2UoRGF0YWJhc2VCYWNrZW5kQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBEYXRhYmFzZUVy
cm9yJik7CisKICAgICB2b2lkIHNldERhdGFiYXNlRGV0YWlscyhTZWN1cml0eU9yaWdpbiosIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9u
ZyBlc3RpbWF0ZWRTaXplKTsKICAgICBTdHJpbmcgZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1cml0
eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCA9
IHRydWUpOwogCkBAIC04Niw2ICs4OSw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGlj
aXQgRGF0YWJhc2VUcmFja2VyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoKTsKIAorICAgIGJv
b2wgaGFzQWRlcXVhdGVRdW90YUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiosIHVuc2lnbmVkIGxv
bmcgZXN0aW1hdGVkU2l6ZSwgRGF0YWJhc2VFcnJvciYpOworCiAjaWYgIVBMQVRGT1JNKENIUk9N
SVVNKQogcHVibGljOgogICAgIHZvaWQgc2V0RGF0YWJhc2VEaXJlY3RvcnlQYXRoKGNvbnN0IFN0
cmluZyYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9Xb3JrZXJD
b250ZXh0V2ViRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvV29ya2VyQ29udGV4dFdlYkRhdGFiYXNlLmNwcAkocmV2aXNpb24gMTQx
OTY1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9Xb3JrZXJDb250ZXh0
V2ViRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMSArNDgsOCBAQCBQYXNzUmVm
UHRyPERhdGFiYXNlPiBXb3JrZXJDb250ZXh0V2ViRGF0CiAgICAgaWYgKGRiTWFuYWdlci5pc0F2
YWlsYWJsZSgpICYmIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNl
KGNvbnRleHQtPnRvcE9yaWdpbigpKSkKICAgICAgICAgZGF0YWJhc2UgPSBkYk1hbmFnZXIub3Bl
bkRhdGFiYXNlKGNvbnRleHQsIG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRT
aXplLCBjcmVhdGlvbkNhbGxiYWNrLCBlcnJvcik7CiAKLSAgICBBU1NFUlQoZXJyb3IgPT0gRGF0
YWJhc2VFcnJvcjo6Tm9uZSB8fCBlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpDYW5ub3RPcGVuRGF0
YWJhc2UpOwotICAgIGlmIChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpDYW5ub3RPcGVuRGF0YWJh
c2UpCi0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgaWYgKCFkYXRhYmFzZSAm
JiAhZWMpCi0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgIEFTU0VSVChkYXRhYmFzZSB8
fCBlcnJvciAhPSBEYXRhYmFzZUVycm9yOjpOb25lKTsKKyAgICBlYyA9IERhdGFiYXNlTWFuYWdl
cjo6ZXhjZXB0aW9uQ29kZUZvckRhdGFiYXNlRXJyb3IoZXJyb3IpOwogCiAgICAgcmV0dXJuIGRh
dGFiYXNlLnJlbGVhc2UoKTsKIH0KQEAgLTY1LDExICs2Miw4IEBAIFBhc3NSZWZQdHI8RGF0YWJh
c2VTeW5jPiBXb3JrZXJDb250ZXh0V2UKICAgICBpZiAoZGJNYW5hZ2VyLmlzQXZhaWxhYmxlKCkg
JiYgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoY29udGV4dC0+
dG9wT3JpZ2luKCkpKQogICAgICAgICBkYXRhYmFzZSA9IGRiTWFuYWdlci5vcGVuRGF0YWJhc2VT
eW5jKGNvbnRleHQsIG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBj
cmVhdGlvbkNhbGxiYWNrLCBlcnJvcik7CiAKLSAgICBBU1NFUlQoZXJyb3IgPT0gRGF0YWJhc2VF
cnJvcjo6Tm9uZSB8fCBlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpDYW5ub3RPcGVuRGF0YWJhc2Up
OwotICAgIGlmIChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpDYW5ub3RPcGVuRGF0YWJhc2UpCi0g
ICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgaWYgKCFkYXRhYmFzZSAmJiAhZWMp
Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgIEFTU0VSVChkYXRhYmFzZSB8fCBlcnJv
ciAhPSBEYXRhYmFzZUVycm9yOjpOb25lKTsKKyAgICBlYyA9IERhdGFiYXNlTWFuYWdlcjo6ZXhj
ZXB0aW9uQ29kZUZvckRhdGFiYXNlRXJyb3IoZXJyb3IpOwogCiAgICAgcmV0dXJuIGRhdGFiYXNl
LnJlbGVhc2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
Y2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hy
b21pdW0uY3BwCShyZXZpc2lvbiAxNDE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5j
bHVkZSAiU2VjdXJpdHlPcmlnaW5IYXNoLmgiCiAjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5o
IgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC01NywxMCArNTgsMTgg
QEAgRGF0YWJhc2VUcmFja2VyOjpEYXRhYmFzZVRyYWNrZXIoY29uc3QgUwogICAgIFNRTGl0ZUZp
bGVTeXN0ZW06OnJlZ2lzdGVyU1FMaXRlVkZTKCk7CiB9CiAKLWJvb2wgRGF0YWJhc2VUcmFja2Vy
OjpjYW5Fc3RhYmxpc2hEYXRhYmFzZShEYXRhYmFzZUJhY2tlbmRDb250ZXh0KiBkYXRhYmFzZUNv
bnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5z
aWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQorYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmNhbkVzdGFi
bGlzaERhdGFiYXNlKERhdGFiYXNlQmFja2VuZENvbnRleHQqIGRhdGFiYXNlQ29udGV4dCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25n
IGVzdGltYXRlZFNpemUsIERhdGFiYXNlRXJyb3ImIGVycm9yKQogewogICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBkYXRhYmFzZUNvbnRleHQtPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICByZXR1cm4gRGF0YWJhc2VPYnNlcnZlcjo6Y2Fu
RXN0YWJsaXNoRGF0YWJhc2Uoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgbmFtZSwgZGlzcGxheU5h
bWUsIGVzdGltYXRlZFNpemUpOworICAgIGJvb2wgc3VjY2VzcyA9IERhdGFiYXNlT2JzZXJ2ZXI6
OmNhbkVzdGFibGlzaERhdGFiYXNlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG5hbWUsIGRpc3Bs
YXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIGVycm9y
ID0gRGF0YWJhc2VFcnJvcjo6R2VuZXJpY1NlY3VyaXR5RXJyb3I7CisgICAgcmV0dXJuIHN1Y2Nl
c3M7Cit9CisKK2Jvb2wgRGF0YWJhc2VUcmFja2VyOjpyZXRyeUNhbkVzdGFibGlzaERhdGFiYXNl
KERhdGFiYXNlQmFja2VuZENvbnRleHQqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCB1
bnNpZ25lZCBsb25nLCBEYXRhYmFzZUVycm9yJikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNldERhdGFiYXNlRGV0YWlscyhTZWN1cml0
eU9yaWdpbiosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGxvbmcpCg==
</data>
<flag name="commit-queue"
          id="206332"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186767</attachid>
            <date>2013-02-05 23:42:16 -0800</date>
            <delta_ts>2013-02-06 01:46:36 -0800</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-107475.patch</filename>
            <type>text/plain</type>
            <size>44974</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTk2OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDEzLTAyLTA1ICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBvcGVuRGF0YWJhc2UoKSBi
ZXR3ZWVuIGZyb250IGFuZCBiYWNrIGVuZCB3b3JrLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3NDc1LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93V2ViRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NV2luZG93V2ViRGF0YWJhc2U6Om9wZW5EYXRhYmFzZSk6CisgICAgICAgICogTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6
Y3JlYXRlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmg6CisgICAg
ICAgIChEYXRhYmFzZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJh
Y2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kOjpwZXJmb3JtT3Bl
bkFuZFZlcmlmeSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tl
bmQuaDoKKyAgICAgICAgKERhdGFiYXNlQmFja2VuZCk6CisgICAgICAgICogTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRBc3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZUJhY2tlbmRBc3luYzo6b3BlbkFuZFZlcmlmeVZlcnNpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2VCYWNrZW5kQXN5bmM6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEFzeW5jLmg6CisgICAgICAgIChE
YXRhYmFzZUJhY2tlbmRBc3luYyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZUJhY2tlbmRTeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZFN5
bmM6Om9wZW5BbmRWZXJpZnlWZXJzaW9uKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlQmFja2VuZFN5bmMuaDoKKyAgICAgICAgKERhdGFiYXNlQmFja2VuZFN5bmMpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VFcnJvci5oOgorICAgICAgICAo
V2ViQ29yZTo6RU5VTV9DTEFTUyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpleGNl
cHRpb25Db2RlRm9yRGF0YWJhc2VFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1h
bmFnZXI6Om9wZW5EYXRhYmFzZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VN
YW5hZ2VyOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2Vy
OjpvcGVuRGF0YWJhc2VTeW5jKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlTWFuYWdlci5oOgorICAgICAgICAoRGF0YWJhc2VNYW5hZ2VyKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlU2VydmVyOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VT
ZXJ2ZXI6OmNyZWF0ZURhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlU2VydmVyLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5
bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpjcmVhdGUpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmg6CisgICAgICAgIChEYXRhYmFz
ZVN5bmMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6aGFzQWRlcXVhdGVRdW90YUZv
ck9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmNhbkVzdGFibGlz
aERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6cmV0cnlDYW5F
c3RhYmxpc2hEYXRhYmFzZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZVRyYWNrZXIuaDoKKyAgICAgICAgKERhdGFiYXNlVHJhY2tlcik6CisgICAgICAgICogTW9kdWxl
cy93ZWJkYXRhYmFzZS9Xb3JrZXJDb250ZXh0V2ViRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyQ29udGV4dFdlYkRhdGFiYXNlOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyQ29udGV4dFdlYkRhdGFiYXNlOjpvcGVuRGF0YWJhc2VTeW5jKToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNo
RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpyZXRyeUNhbkVz
dGFibGlzaERhdGFiYXNlKToKKwogMjAxMy0wMi0wNSAgVnNldm9sb2QgVmxhc292ICA8dnNldmlr
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgZW5kaW5nIHNsYXNo
ZXMgYXV0b21hdGljYWxseSB0byBmaWxlIG1hcHBpbmdzLgpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlU2VydmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlU2Vy
dmVyLmgJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsy
OCw5IEBACiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiRGF0YWJhc2VC
YXNpY1R5cGVzLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgiCisjaW5jbHVkZSAiRGF0
YWJhc2VFcnJvci5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC0zNiw5ICszOCw3IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERhdGFiYXNlQmFja2VuZDsKLWNsYXNzIERh
dGFiYXNlQmFja2VuZEFzeW5jOwogY2xhc3MgRGF0YWJhc2VCYWNrZW5kQ29udGV4dDsKLWNsYXNz
IERhdGFiYXNlQmFja2VuZFN5bmM7CiBjbGFzcyBEYXRhYmFzZU1hbmFnZXJDbGllbnQ7CiBjbGFz
cyBTZWN1cml0eU9yaWdpbjsKIApAQCAtNTIsNiArNTIsMTMgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBTdHJpbmcgZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCA9IHRydWUpID0gMDsKIAorICAg
IGVudW0gT3BlbkF0dGVtcHQgeworICAgICAgICBGaXJzdFRyeVRvT3BlbkRhdGFiYXNlLAorICAg
ICAgICBSZXRyeU9wZW5EYXRhYmFzZQorICAgIH07CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
RGF0YWJhc2VCYWNrZW5kPiBvcGVuRGF0YWJhc2UoUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRl
eHQ+JiwgRGF0YWJhc2VUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhw
ZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3Im
LCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgT3BlbkF0dGVtcHQgPSBGaXJzdFRyeVRvT3BlbkRhdGFi
YXNlKSA9IDA7CisKICNpZiAhUExBVEZPUk0oQ0hST01JVU0pCiAgICAgdmlydHVhbCBib29sIGhh
c0VudHJ5Rm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBv
cmlnaW5zKFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4mIHJlc3VsdCkgPSAwOwpAQCAt
NzcsOSArODQsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgaW50ZXJydXB0QWxsRGF0
YWJhc2VzRm9yQ29udGV4dChjb25zdCBEYXRhYmFzZUJhY2tlbmRDb250ZXh0KikgPSAwOwogCi0g
ICAgdmlydHVhbCBib29sIGNhbkVzdGFibGlzaERhdGFiYXNlKERhdGFiYXNlQmFja2VuZENvbnRl
eHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2ln
bmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNldERhdGFi
YXNlRGV0YWlscyhTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKSA9IDA7CiAgICAg
dmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IERh
dGFiYXNlQmFja2VuZCopID0gMDsKIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dXZWJEYXRhYmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dXZWJEYXRhYmFz
ZS5jcHAJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRE9NV2luZG93V2ViRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMyAr
NDgsMTEgQEAgUGFzc1JlZlB0cjxEYXRhYmFzZT4gRE9NV2luZG93V2ViRGF0YWJhcwogICAgIFJl
ZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UgPSAwOwogICAgIERhdGFiYXNlTWFuYWdlciYgZGJNYW5h
Z2VyID0gRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCk7CiAgICAgRGF0YWJhc2VFcnJvciBlcnJv
ciA9IERhdGFiYXNlRXJyb3I6Ok5vbmU7Ci0gICAgaWYgKGRiTWFuYWdlci5pc0F2YWlsYWJsZSgp
ICYmIHdpbmRvdy0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJh
c2Uod2luZG93LT5kb2N1bWVudCgpLT50b3BPcmlnaW4oKSkpCisgICAgaWYgKGRiTWFuYWdlci5p
c0F2YWlsYWJsZSgpICYmIHdpbmRvdy0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2Fu
QWNjZXNzRGF0YWJhc2Uod2luZG93LT5kb2N1bWVudCgpLT50b3BPcmlnaW4oKSkpIHsKICAgICAg
ICAgZGF0YWJhc2UgPSBkYk1hbmFnZXIub3BlbkRhdGFiYXNlKHdpbmRvdy0+ZG9jdW1lbnQoKSwg
bmFtZSwgdmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJh
Y2ssIGVycm9yKTsKLQotICAgIEFTU0VSVChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpOb25lIHx8
IGVycm9yID09IERhdGFiYXNlRXJyb3I6OkNhbm5vdE9wZW5EYXRhYmFzZSk7Ci0gICAgaWYgKGVy
cm9yID09IERhdGFiYXNlRXJyb3I6OkNhbm5vdE9wZW5EYXRhYmFzZSkKLSAgICAgICAgZWMgPSBJ
TlZBTElEX1NUQVRFX0VSUjsKLSAgICBpZiAoIWRhdGFiYXNlICYmICFlYykKKyAgICAgICAgQVNT
RVJUKGRhdGFiYXNlIHx8IGVycm9yICE9IERhdGFiYXNlRXJyb3I6Ok5vbmUpOworICAgICAgICBl
YyA9IERhdGFiYXNlTWFuYWdlcjo6ZXhjZXB0aW9uQ29kZUZvckRhdGFiYXNlRXJyb3IoZXJyb3Ip
OworICAgIH0gZWxzZQogICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKIAogICAgIHJldHVybiBk
YXRhYmFzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2UuY3BwCShyZXZpc2lvbiAxNDE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsMTEg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitQYXNzUmVmUHRyPERhdGFiYXNlPiBEYXRhYmFz
ZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPERhdGFiYXNlQmFj
a2VuZD4gYmFja2VuZCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGF0YWJhc2UqPihiYWNr
ZW5kLmdldCgpKTsKK30KKwogRGF0YWJhc2U6OkRhdGFiYXNlKFBhc3NSZWZQdHI8RGF0YWJhc2VC
YWNrZW5kQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0LAogICAgIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUs
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKICAgICA6IERhdGFiYXNlQmFzZShkYXRhYmFz
ZUNvbnRleHQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKQEAgLTEzMywyMyArMTM4LDYgQEAg
U3RyaW5nIERhdGFiYXNlOjp2ZXJzaW9uKCkgY29uc3QKICAgICByZXR1cm4gRGF0YWJhc2VCYWNr
ZW5kOjp2ZXJzaW9uKCk7CiB9CiAKLWJvb2wgRGF0YWJhc2U6Om9wZW5BbmRWZXJpZnlWZXJzaW9u
KGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImIGVycm9yLCBTdHJp
bmcmIGVycm9yTWVzc2FnZSkKLXsKLSAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIgc3luY2hy
b25pemVyOwotICAgIGlmICghZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCkgfHwg
ZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnRlcm1pbmF0aW9uUmVxdWVzdGVk
KCZzeW5jaHJvbml6ZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSNpZiBQTEFURk9STShD
SFJPTUlVTSkKLSAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5wcmVwYXJlVG9PcGVuRGF0
YWJhc2UodGhpcyk7Ci0jZW5kaWYKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBPd25Q
dHI8RGF0YWJhc2VPcGVuVGFzaz4gdGFzayA9IERhdGFiYXNlT3BlblRhc2s6OmNyZWF0ZSh0aGlz
LCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgJnN5bmNocm9uaXplciwgZXJyb3IsIGVycm9yTWVz
c2FnZSwgc3VjY2Vzcyk7Ci0gICAgZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCkt
PnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0YXNrLnJlbGVhc2UoKSk7Ci0gICAgc3luY2hyb25pemVy
LndhaXRGb3JUYXNrQ29tcGxldGlvbigpOwotCi0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KIHZv
aWQgRGF0YWJhc2U6Om1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpCiB7CiAgICAgaWYgKG1fZGVsZXRl
ZCB8fCAhZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCkpCkBAIC0yMDQsMTggKzE5
Miw2IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZTo6bWF4aW11bVNpemUKICAgICByZXR1
cm4gRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKHRoaXMp
OwogfQogCi1ib29sIERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNldFZlcnNp
b25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiBlcnJvciwgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UpCi17Ci0gICAgaWYgKERhdGFiYXNlQmFja2VuZDo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoc2V0
VmVyc2lvbkluTmV3RGF0YWJhc2UsIGVycm9yLCBlcnJvck1lc3NhZ2UpKSB7Ci0gICAgICAgIGlm
IChkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKSkKLSAgICAgICAgICAgIGRhdGFi
YXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZU9wZW4odGhpcyk7
Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
CiB2b2lkIERhdGFiYXNlOjpjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0cmluZyYgb2xkVmVyc2lvbiwg
Y29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
YXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNR
TFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmgJ
KHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtODgsMTMgKzg4LDExIEBAIHByaXZhdGU6CiAg
ICAgRGF0YWJhc2UoUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiwgY29uc3QgU3Ry
aW5nJiBuYW1lLAogICAgICAgICBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3Qg
U3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKICAgICBQ
YXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZEFzeW5jPiBiYWNrZW5kKCk7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8RGF0YWJhc2U+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxEYXRhYmFzZUJhY2tlbmQ+KTsKIAogICAgIHZvaWQgcnVuVHJhbnNhY3Rpb24oUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2s+LAogICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2Fs
bGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+
LCBib29sIHJlYWRPbmx5KTsKIAotICAgIGJvb2wgb3BlbkFuZFZlcmlmeVZlcnNpb24oYm9vbCBz
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYgZXJyb3JNZXNz
YWdlKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzZXRWZXJz
aW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsK
LQogICAgIHZvaWQgaW5Qcm9ncmVzc1RyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgdm9pZCBz
Y2hlZHVsZVRyYW5zYWN0aW9uKCk7CiAKQEAgLTExMCw2ICsxMDgsNyBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9kZWxldGVkOwogCiAgICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlTWFuYWdlcjsKKyAg
ICBmcmllbmQgY2xhc3MgRGF0YWJhc2VTZXJ2ZXI7IC8vIEZJWE1FOiByZW1vdmUgdGhpcyB3aGVu
IHRoZSBiYWNrZW5kIGhhcyBiZWVuIHNwbGl0IG91dC4KICAgICBmcmllbmQgY2xhc3MgRGF0YWJh
c2VCYWNrZW5kQXN5bmM7IC8vIEZJWE1FOiByZW1vdmUgdGhpcyB3aGVuIHRoZSBiYWNrZW5kIGhh
cyBiZWVuIHNwbGl0IG91dC4KIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZC5jcHAJKHJldmlzaW9uIDE0MTk2
NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE0LDcgKzMxNCw3IEBAIGJvb2wgRGF0YWJhc2VCYWNr
ZW5kOjpwZXJmb3JtT3BlbkFuZFZlcmkKICAgICBEb25lQ3JlYXRpbmdEYXRhYmFzZU9uRXhpdENh
bGxlciBvbkV4aXRDYWxsZXIodGhpcyk7CiAgICAgQVNTRVJUKGVycm9yTWVzc2FnZS5pc0VtcHR5
KCkpOwogICAgIEFTU0VSVChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpOb25lKTsgLy8gQmV0dGVy
IG5vdCBoYXZlIGFueSBlcnJvcnMgYWxyZWFkeS4KLSAgICBlcnJvciA9IERhdGFiYXNlRXJyb3I6
OkNhbm5vdE9wZW5EYXRhYmFzZTsgLy8gUHJlc3VtZWQgZmFpbHVyZS4gV2UnbGwgY2xlYXIgaXQg
aWYgd2Ugc3VjY2VlZCBiZWxvdy4KKyAgICBlcnJvciA9IERhdGFiYXNlRXJyb3I6OkludmFsaWRE
YXRhYmFzZVN0YXRlOyAvLyBQcmVzdW1lZCBmYWlsdXJlLiBXZSdsbCBjbGVhciBpdCBpZiB3ZSBz
dWNjZWVkIGJlbG93LgogCiAgICAgY29uc3QgaW50IG1heFNxbGl0ZUJ1c3lXYWl0VGltZSA9IDMw
MDAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
QmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VCYWNrZW5kLmgJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEwMyw2ICsxMDMsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGNsb3NlRGF0YWJhc2UoKTsK
IAorICAgIHZpcnR1YWwgYm9vbCBvcGVuQW5kVmVyaWZ5VmVyc2lvbihib29sIHNldFZlcnNpb25J
bk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzaG91bGRTZXRWZXJz
aW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsK
IAogICAgIGJvb2wgZ2V0VmVyc2lvbkZyb21EYXRhYmFzZShTdHJpbmcmIHZlcnNpb24sIGJvb2wg
c2hvdWxkQ2FjaGVWZXJzaW9uID0gdHJ1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEFzeW5jLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEFzeW5jLmNwcAko
cmV2aXNpb24gMTQxOTY1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZUJhY2tlbmRBc3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkgQEAK
ICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAiRGF0YWJhc2VCYWNrZW5kQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVGFzay5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVGhy
ZWFkLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtMzcsNiArNDAsMzQgQEAgRGF0YWJhc2VCYWNrZW5kQXN5bmM6OkRhdGFiYXNlQmFj
a2VuZEFzeQogewogfQogCitib29sIERhdGFiYXNlQmFja2VuZEFzeW5jOjpvcGVuQW5kVmVyaWZ5
VmVyc2lvbihib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiBlcnJv
ciwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCit7CisgICAgRGF0YWJhc2VUYXNrU3luY2hyb25pemVy
IHN5bmNocm9uaXplcjsKKyAgICBpZiAoIWRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVh
ZCgpIHx8IGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT50ZXJtaW5hdGlvblJl
cXVlc3RlZCgmc3luY2hyb25pemVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgUExB
VEZPUk0oQ0hST01JVU0pCisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucHJlcGFyZVRv
T3BlbkRhdGFiYXNlKHRoaXMpOworI2VuZGlmCisgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Cisg
ICAgT3duUHRyPERhdGFiYXNlT3BlblRhc2s+IHRhc2sgPSBEYXRhYmFzZU9wZW5UYXNrOjpjcmVh
dGUodGhpcywgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsICZzeW5jaHJvbml6ZXIsIGVycm9yLCBl
cnJvck1lc3NhZ2UsIHN1Y2Nlc3MpOworICAgIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRo
cmVhZCgpLT5zY2hlZHVsZUltbWVkaWF0ZVRhc2sodGFzay5yZWxlYXNlKCkpOworICAgIHN5bmNo
cm9uaXplci53YWl0Rm9yVGFza0NvbXBsZXRpb24oKTsKKworICAgIHJldHVybiBzdWNjZXNzOwor
fQorCitib29sIERhdGFiYXNlQmFja2VuZEFzeW5jOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29s
IHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiBlcnJvciwgU3RyaW5nJiBl
cnJvck1lc3NhZ2UpCit7CisgICAgaWYgKERhdGFiYXNlQmFja2VuZDo6cGVyZm9ybU9wZW5BbmRW
ZXJpZnkoc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGVycm9yLCBlcnJvck1lc3NhZ2UpKSB7Cisg
ICAgICAgIGlmIChkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKSkKKyAgICAgICAg
ICAgIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZU9w
ZW4odGhpcyk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEFzeW5j
LmgJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTEgKzQzLDEx
IEBAIGNsYXNzIERhdGFiYXNlU2VydmVyOwogLy8gYXZhaWxhYmxlLiBUaGlzIHNob3VsZCBiZSBy
ZXBsYWNlZCB3aXRoIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gbGF0ZXIuCiAKIGNsYXNzIERh
dGFiYXNlQmFja2VuZEFzeW5jIDogcHVibGljIERhdGFiYXNlQmFja2VuZCB7Ci1wcm90ZWN0ZWQ6
CitwdWJsaWM6CiAgICAgRGF0YWJhc2VCYWNrZW5kQXN5bmMoUGFzc1JlZlB0cjxEYXRhYmFzZUJh
Y2tlbmRDb250ZXh0PiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVk
VmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0
ZWRTaXplKTsKIAotICAgIGZyaWVuZCBjbGFzcyBEYXRhYmFzZU1hbmFnZXI7IC8vIEZJWE1FOiBy
ZW1vdmUgdGhpcyBvbmNlIHdlIGhhdmUgaXNvbGF0ZWQgdGhpcyB0byB0aGUgYmFja2VuZC4KLSAg
ICBmcmllbmQgY2xhc3MgRGF0YWJhc2VTZXJ2ZXI7CisgICAgdmlydHVhbCBib29sIG9wZW5BbmRW
ZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3Im
LCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CisgICAgdmlydHVhbCBib29sIHBlcmZvcm1PcGVuQW5k
VmVyaWZ5KGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImLCBTdHJp
bmcmIGVycm9yTWVzc2FnZSk7CiAKIHByaXZhdGU6CiAgICAgY2xhc3MgRGF0YWJhc2VPcGVuVGFz
azsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNr
ZW5kU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZUJhY2tlbmRTeW5jLmNwcAkocmV2aXNpb24gMTQxOTY1KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRTeW5jLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAK
ICNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmgiCisjaW5jbHVkZSAiRGF0YWJhc2VU
cmFja2VyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTEsNiArNTIsMTQgQEAgRGF0
YWJhc2VCYWNrZW5kU3luYzo6fkRhdGFiYXNlQmFja2VuZFN5bgogICAgICAgICBjbG9zZURhdGFi
YXNlKCk7CiB9CiAKK2Jvb2wgRGF0YWJhc2VCYWNrZW5kU3luYzo6b3BlbkFuZFZlcmlmeVZlcnNp
b24oYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYgZXJyb3IsIFN0
cmluZyYgZXJyb3JNZXNzYWdlKQoreworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgIERhdGFi
YXNlVHJhY2tlcjo6dHJhY2tlcigpLnByZXBhcmVUb09wZW5EYXRhYmFzZSh0aGlzKTsKKyNlbmRp
ZgorICAgIHJldHVybiBwZXJmb3JtT3BlbkFuZFZlcmlmeShzZXRWZXJzaW9uSW5OZXdEYXRhYmFz
ZSwgZXJyb3IsIGVycm9yTWVzc2FnZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZFN5bmMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZFN5bmMuaAkocmV2
aXNpb24gMTQxOTY1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZUJhY2tlbmRTeW5jLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEwICs0NSwxMSBAQCBjbGFz
cyBEYXRhYmFzZUJhY2tlbmRTeW5jIDogcHVibGljIERhdGFiCiBwdWJsaWM6CiAgICAgdmlydHVh
bCB+RGF0YWJhc2VCYWNrZW5kU3luYygpOwogCisgICAgdmlydHVhbCBib29sIG9wZW5BbmRWZXJp
ZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImLCBT
dHJpbmcmIGVycm9yTWVzc2FnZSk7CisKIHByb3RlY3RlZDoKICAgICBEYXRhYmFzZUJhY2tlbmRT
eW5jKFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4sIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5h
bWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAKLSAgICBmcmllbmQgY2xhc3MgRGF0
YWJhc2VNYW5hZ2VyOyAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgb25jZSB3ZSBoYXZlIGlzb2xhdGVk
IHRoaXMgdG8gdGhlIGJhY2tlbmQuCiAgICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlU2VydmVyOwog
fTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUVy
cm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZUVycm9yLmgJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VFcnJvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCAr
MzQsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBFTlVNX0NMQVNTKERhdGFiYXNlRXJyb3Ip
IHsKICAgICBOb25lID0gMCwKLSAgICBDYW5ub3RPcGVuRGF0YWJhc2UsCiAgICAgRGF0YWJhc2VJ
c0JlaW5nRGVsZXRlZCwKICAgICBEYXRhYmFzZVNpemVFeGNlZWRlZFF1b3RhLAotICAgIERhdGFi
YXNlU2l6ZU92ZXJmbG93ZWQKKyAgICBEYXRhYmFzZVNpemVPdmVyZmxvd2VkLAorICAgIEdlbmVy
aWNTZWN1cml0eUVycm9yLAorICAgIEludmFsaWREYXRhYmFzZVN0YXRlCiB9IEVOVU1fQ0xBU1Nf
RU5EKERhdGFiYXNlRXJyb3IpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFn
ZXIuY3BwCShyZXZpc2lvbiAxNDE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcg
QEAKIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJBYnN0cmFjdERhdGFi
YXNlU2VydmVyLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIKICNpbmNsdWRlICJEYXRhYmFzZUJh
Y2tlbmQuaCIKICNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRBc3luYy5oIgpAQCAtMjAwLDM5ICsy
MDEsMTExIEBAIHZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpkaWREZXN0cnVjdERhdGFiYXMKIH0KICNl
bmRpZgogCitFeGNlcHRpb25Db2RlIERhdGFiYXNlTWFuYWdlcjo6ZXhjZXB0aW9uQ29kZUZvckRh
dGFiYXNlRXJyb3IoRGF0YWJhc2VFcnJvciBlcnJvcikKK3sKKyAgICBzd2l0Y2ggKGVycm9yKSB7
CisgICAgY2FzZSBEYXRhYmFzZUVycm9yOjpOb25lOgorICAgICAgICByZXR1cm4gMDsKKyAgICBj
YXNlIERhdGFiYXNlRXJyb3I6OkRhdGFiYXNlSXNCZWluZ0RlbGV0ZWQ6CisgICAgY2FzZSBEYXRh
YmFzZUVycm9yOjpEYXRhYmFzZVNpemVFeGNlZWRlZFF1b3RhOgorICAgIGNhc2UgRGF0YWJhc2VF
cnJvcjo6RGF0YWJhc2VTaXplT3ZlcmZsb3dlZDoKKyAgICBjYXNlIERhdGFiYXNlRXJyb3I6Okdl
bmVyaWNTZWN1cml0eUVycm9yOgorICAgICAgICByZXR1cm4gU0VDVVJJVFlfRVJSOworICAgIGNh
c2UgRGF0YWJhc2VFcnJvcjo6SW52YWxpZERhdGFiYXNlU3RhdGU6CisgICAgICAgIHJldHVybiBJ
TlZBTElEX1NUQVRFX0VSUjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIDA7IC8vIE1ha2Ugc29tZSBvbGRlciBjb21waWxlcnMgaGFwcHkuCit9CisKK1Bhc3NS
ZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBEYXRhYmFzZU1hbmFnZXI6Om9wZW5EYXRhYmFzZUJhY2tl
bmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKKyAgICBEYXRhYmFzZVR5cGUgdHlw
ZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29u
c3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwKKyAgICB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUs
IGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImIGVycm9yLCBTdHJp
bmcmIGVycm9yTWVzc2FnZSkKK3sKKyAgICBBU1NFUlQoZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6
Tm9uZSk7CisKKyAgICBSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBkYXRhYmFzZUNvbnRleHQgPSBk
YXRhYmFzZUNvbnRleHRGb3IoY29udGV4dCk7CisgICAgUmVmUHRyPERhdGFiYXNlQmFja2VuZENv
bnRleHQ+IGJhY2tlbmRDb250ZXh0ID0gZGF0YWJhc2VDb250ZXh0LT5iYWNrZW5kKCk7CisKKyAg
ICBSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBiYWNrZW5kID0gbV9zZXJ2ZXItPm9wZW5EYXRhYmFz
ZShiYWNrZW5kQ29udGV4dCwgdHlwZSwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLAorICAgICAgICBk
aXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGVycm9y
LCBlcnJvck1lc3NhZ2UpOworCisgICAgaWYgKCFiYWNrZW5kKSB7CisgICAgICAgIEFTU0VSVChl
cnJvciAhPSBEYXRhYmFzZUVycm9yOjpOb25lKTsKKworICAgICAgICBzd2l0Y2ggKGVycm9yKSB7
CisgICAgICAgIGNhc2UgRGF0YWJhc2VFcnJvcjo6RGF0YWJhc2VJc0JlaW5nRGVsZXRlZDoKKyAg
ICAgICAgY2FzZSBEYXRhYmFzZUVycm9yOjpEYXRhYmFzZVNpemVPdmVyZmxvd2VkOgorICAgICAg
ICBjYXNlIERhdGFiYXNlRXJyb3I6OkdlbmVyaWNTZWN1cml0eUVycm9yOgorICAgICAgICAgICAg
Z290byBoYW5kbGVFcnJvcjsKKworICAgICAgICBjYXNlIERhdGFiYXNlRXJyb3I6OkludmFsaWRE
YXRhYmFzZVN0YXRlOgorICAgICAgICAgICAgZ290byBoYW5kbGVJbnZhbGlkRGF0YWJhc2VTdGF0
ZTsKKworICAgICAgICBjYXNlIERhdGFiYXNlRXJyb3I6OkRhdGFiYXNlU2l6ZUV4Y2VlZGVkUXVv
dGE6CisgICAgICAgICAgICAvLyBOb3RpZnkgdGhlIGNsaWVudCB0aGF0IHdlJ3ZlIGV4Y2VlZGVk
IHRoZSBkYXRhYmFzZSBxdW90YS4KKyAgICAgICAgICAgIC8vIFRoZSBjbGllbnQgbWF5IHdhbnQg
dG8gaW5jcmVhc2UgdGhlIHF1b3RhLCBhbmQgd2UnbGwgZ2l2ZSBpdAorICAgICAgICAgICAgLy8g
b25lIG1vcmUgdHJ5IGFmdGVyIGlmIHRoYXQgaXMgdGhlIGNhc2UuCisgICAgICAgICAgICBkYXRh
YmFzZUNvbnRleHQtPmRhdGFiYXNlRXhjZWVkZWRRdW90YShuYW1lLAorICAgICAgICAgICAgICAg
IERhdGFiYXNlRGV0YWlscyhuYW1lLmlzb2xhdGVkQ29weSgpLCBkaXNwbGF5TmFtZS5pc29sYXRl
ZENvcHkoKSwgZXN0aW1hdGVkU2l6ZSwgMCkpOworCisgICAgICAgICAgICBlcnJvciA9IERhdGFi
YXNlRXJyb3I6Ok5vbmU7CisKKyAgICAgICAgICAgIGJhY2tlbmQgPSBtX3NlcnZlci0+b3BlbkRh
dGFiYXNlKGJhY2tlbmRDb250ZXh0LCB0eXBlLCBuYW1lLCBleHBlY3RlZFZlcnNpb24sCisgICAg
ICAgICAgICAgICAgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIHNldFZlcnNpb25Jbk5ld0Rh
dGFiYXNlLCBlcnJvciwgZXJyb3JNZXNzYWdlLAorICAgICAgICAgICAgICAgIEFic3RyYWN0RGF0
YWJhc2VTZXJ2ZXI6OlJldHJ5T3BlbkRhdGFiYXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICghYmFja2VuZCkgeworICAgICAgICAgICAgQVNTRVJUKGVycm9y
ICE9IERhdGFiYXNlRXJyb3I6Ok5vbmUpOworCisgICAgICAgIGhhbmRsZUludmFsaWREYXRhYmFz
ZVN0YXRlOgorICAgICAgICAgICAgaWYgKGVycm9yID09IERhdGFiYXNlRXJyb3I6OkludmFsaWRE
YXRhYmFzZVN0YXRlKSB7CisgICAgICAgICAgICAgICAgbG9nRXJyb3JNZXNzYWdlKGNvbnRleHQs
IGVycm9yTWVzc2FnZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgaGFuZGxlRXJyb3I6CisgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkRh
dGFiYXNlICVzIGZvciBvcmlnaW4gJXMgbm90IGFsbG93ZWQgdG8gYmUgZXN0YWJsaXNoZWQiLCBu
YW1lLmFzY2lpKCkuZGF0YSgpLAorICAgICAgICAgICAgICAgIGNvbnRleHQtPnNlY3VyaXR5T3Jp
Z2luKCktPnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gYmFja2VuZC5yZWxlYXNlKCk7Cit9CisK
IFBhc3NSZWZQdHI8RGF0YWJhc2U+IERhdGFiYXNlTWFuYWdlcjo6b3BlbkRhdGFiYXNlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCiAgICAgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwKICAg
ICB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFj
az4gY3JlYXRpb25DYWxsYmFjaywKICAgICBEYXRhYmFzZUVycm9yJiBlcnJvcikKIHsKICAgICBT
Y3JpcHRDb250cm9sbGVyOjppbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0gICAgUmVmUHRyPERhdGFi
YXNlQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0ID0gZGF0YWJhc2VDb250ZXh0Rm9yKGNvbnRleHQp
OwotICAgIFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiBiYWNrZW5kQ29udGV4dCA9IGRh
dGFiYXNlQ29udGV4dC0+YmFja2VuZCgpOwogICAgIEFTU0VSVChlcnJvciA9PSBEYXRhYmFzZUVy
cm9yOjpOb25lKTsKIAotICAgIGlmICghbV9zZXJ2ZXItPmNhbkVzdGFibGlzaERhdGFiYXNlKGJh
Y2tlbmRDb250ZXh0LmdldCgpLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpIHsK
LSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJEYXRhYmFzZSAlcyBmb3Igb3JpZ2luICVzIG5vdCBh
bGxvd2VkIHRvIGJlIGVzdGFibGlzaGVkIiwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgY29udGV4dC0+
c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLQorICAgIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UgPSAhY3Jl
YXRpb25DYWxsYmFjazsKICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIFJlZlB0cjxEYXRh
YmFzZT4gZGF0YWJhc2UgPSBhZG9wdFJlZihuZXcgRGF0YWJhc2UoYmFja2VuZENvbnRleHQsIG5h
bWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKTsKLQotICAg
IGlmICghZGF0YWJhc2UtPm9wZW5BbmRWZXJpZnlWZXJzaW9uKCFjcmVhdGlvbkNhbGxiYWNrLCBl
cnJvciwgZXJyb3JNZXNzYWdlKSkgewotICAgICAgICBsb2dFcnJvck1lc3NhZ2UoY29udGV4dCwg
ZXJyb3JNZXNzYWdlKTsKKyAgICBSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBiYWNrZW5kID0gb3Bl
bkRhdGFiYXNlQmFja2VuZChjb250ZXh0LCBEYXRhYmFzZVR5cGU6OkFzeW5jLCBuYW1lLAorICAg
ICAgICBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBzZXRWZXJz
aW9uSW5OZXdEYXRhYmFzZSwgZXJyb3IsIGVycm9yTWVzc2FnZSk7CisgICAgaWYgKCFiYWNrZW5k
KQogICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAKLSAgICBtX3NlcnZlci0+c2V0RGF0YWJhc2VE
ZXRhaWxzKGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3Rp
bWF0ZWRTaXplKTsKLSAgICBkYXRhYmFzZUNvbnRleHQtPnNldEhhc09wZW5EYXRhYmFzZXMoKTsK
KyAgICBSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlID0gRGF0YWJhc2U6OmNyZWF0ZShjb250ZXh0
LCBiYWNrZW5kKTsKIAorICAgIFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGRhdGFiYXNlQ29udGV4
dCA9IGRhdGFiYXNlQ29udGV4dEZvcihjb250ZXh0KTsKKyAgICBkYXRhYmFzZUNvbnRleHQtPnNl
dEhhc09wZW5EYXRhYmFzZXMoKTsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE9w
ZW5EYXRhYmFzZShjb250ZXh0LCBkYXRhYmFzZSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+
aG9zdCgpLCBuYW1lLCBleHBlY3RlZFZlcnNpb24pOwogCi0gICAgaWYgKGRhdGFiYXNlLT5pc05l
dygpICYmIGNyZWF0aW9uQ2FsbGJhY2suZ2V0KCkpIHsKKyAgICBpZiAoYmFja2VuZC0+aXNOZXco
KSAmJiBjcmVhdGlvbkNhbGxiYWNrLmdldCgpKSB7CiAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAi
U2NoZWR1bGluZyBEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrIGZvciBkYXRhYmFzZSAlcFxu
IiwgZGF0YWJhc2UuZ2V0KCkpOwogICAgICAgICBkYXRhYmFzZS0+bV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LT5wb3N0VGFzayhEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrOjpjcmVhdGUoZGF0
YWJhc2UsIGNyZWF0aW9uQ2FsbGJhY2spKTsKICAgICB9CiAKKyAgICBBU1NFUlQoZGF0YWJhc2Up
OwogICAgIHJldHVybiBkYXRhYmFzZS5yZWxlYXNlKCk7CiB9CiAKQEAgLTI0MCwzMSArMzEzLDI0
IEBAIFBhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBEYXRhYmFzZU1hbmFnZXIKICAgICBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcm
IGRpc3BsYXlOYW1lLAogICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0
cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrLCBEYXRhYmFzZUVycm9yJiBlcnJv
cikKIHsKLSAgICBSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBkYXRhYmFzZUNvbnRleHQgPSBkYXRh
YmFzZUNvbnRleHRGb3IoY29udGV4dCk7Ci0gICAgUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRl
eHQ+IGJhY2tlbmRDb250ZXh0ID0gZGF0YWJhc2VDb250ZXh0LT5iYWNrZW5kKCk7CiAgICAgQVNT
RVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICBBU1NFUlQoZXJyb3IgPT0gRGF0
YWJhc2VFcnJvcjo6Tm9uZSk7CiAKLSAgICBpZiAoIW1fc2VydmVyLT5jYW5Fc3RhYmxpc2hEYXRh
YmFzZShiYWNrZW5kQ29udGV4dC5nZXQoKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNp
emUpKSB7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2UgJXMgZm9yIG9yaWdpbiAl
cyBub3QgYWxsb3dlZCB0byBiZSBlc3RhYmxpc2hlZCIsIG5hbWUuYXNjaWkoKS5kYXRhKCksIGNv
bnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0KKyAgICBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNl
ID0gIWNyZWF0aW9uQ2FsbGJhY2s7CiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBSZWZQ
dHI8RGF0YWJhc2VTeW5jPiBkYXRhYmFzZSA9IGFkb3B0UmVmKG5ldyBEYXRhYmFzZVN5bmMoYmFj
a2VuZENvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRl
ZFNpemUpKTsKLQotICAgIGlmICghZGF0YWJhc2UtPm9wZW5BbmRWZXJpZnlWZXJzaW9uKCFjcmVh
dGlvbkNhbGxiYWNrLCBlcnJvciwgZXJyb3JNZXNzYWdlKSkgewotICAgICAgICBsb2dFcnJvck1l
c3NhZ2UoY29udGV4dCwgZXJyb3JNZXNzYWdlKTsKKyAgICBSZWZQdHI8RGF0YWJhc2VCYWNrZW5k
PiBiYWNrZW5kID0gb3BlbkRhdGFiYXNlQmFja2VuZChjb250ZXh0LCBEYXRhYmFzZVR5cGU6OlN5
bmMsIG5hbWUsCisgICAgICAgIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRl
ZFNpemUsIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBlcnJvciwgZXJyb3JNZXNzYWdlKTsKKyAg
ICBpZiAoIWJhY2tlbmQpCiAgICAgICAgIHJldHVybiAwOwotICAgIH0KIAotICAgIG1fc2VydmVy
LT5zZXREYXRhYmFzZURldGFpbHMoY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgbmFtZSwgZGlz
cGxheU5hbWUsIGVzdGltYXRlZFNpemUpOworICAgIFJlZlB0cjxEYXRhYmFzZVN5bmM+IGRhdGFi
YXNlID0gRGF0YWJhc2VTeW5jOjpjcmVhdGUoY29udGV4dCwgYmFja2VuZCk7CiAKLSAgICBpZiAo
ZGF0YWJhc2UtPmlzTmV3KCkgJiYgY3JlYXRpb25DYWxsYmFjay5nZXQoKSkgeworICAgIGlmIChi
YWNrZW5kLT5pc05ldygpICYmIGNyZWF0aW9uQ2FsbGJhY2suZ2V0KCkpIHsKICAgICAgICAgTE9H
KFN0b3JhZ2VBUEksICJJbnZva2luZyB0aGUgY3JlYXRpb24gY2FsbGJhY2sgZm9yIGRhdGFiYXNl
ICVwXG4iLCBkYXRhYmFzZS5nZXQoKSk7CiAgICAgICAgIGNyZWF0aW9uQ2FsbGJhY2stPmhhbmRs
ZUV2ZW50KGRhdGFiYXNlLmdldCgpKTsKICAgICB9CiAKKyAgICBBU1NFUlQoZGF0YWJhc2UpOwog
ICAgIHJldHVybiBkYXRhYmFzZS5yZWxlYXNlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuaAkocmV2aXNp
b24gMTQxOTY1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxF
KFNRTF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2VTZXJ2ZXIuaCIKICNp
bmNsdWRlICJEYXRhYmFzZUJhc2ljVHlwZXMuaCIKICNpbmNsdWRlICJEYXRhYmFzZURldGFpbHMu
aCIKICNpbmNsdWRlICJEYXRhYmFzZUVycm9yLmgiCkBAIC04MCw2ICs3OSw4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGRpZERlc3RydWN0RGF0YWJhc2VDb250ZXh0KCkgeyB9CiAjZW5kaWYKIAorICAg
IHN0YXRpYyBFeGNlcHRpb25Db2RlIGV4Y2VwdGlvbkNvZGVGb3JEYXRhYmFzZUVycm9yKERhdGFi
YXNlRXJyb3IpOworCiAgICAgUGFzc1JlZlB0cjxEYXRhYmFzZT4gb3BlbkRhdGFiYXNlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhw
ZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4sIERhdGFiYXNlRXJyb3Im
KTsKICAgICBQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gb3BlbkRhdGFiYXNlU3luYyhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVj
dGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3Rp
bWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+LCBEYXRhYmFzZUVycm9yJik7
CiAKQEAgLTEyNCw2ICsxMjUsMTAgQEAgcHJpdmF0ZToKICAgICAvLyBpdCBhbHJlYWR5IGV4aXN0
IHByZXZpb3VzbHkuIE90aGVyd2lzZSwgaXQgcmV0dXJucyAwLgogICAgIFBhc3NSZWZQdHI8RGF0
YWJhc2VDb250ZXh0PiBleGlzdGluZ0RhdGFiYXNlQ29udGV4dEZvcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0Kik7CiAKKyAgICBQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZD4gb3BlbkRhdGFiYXNl
QmFja2VuZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwKKyAgICAgICAgRGF0YWJhc2VUeXBlLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBT
dHJpbmcmIGRpc3BsYXlOYW1lLAorICAgICAgICB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUs
IGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImLCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSk7CisKICAgICBzdGF0aWMgdm9pZCBsb2dFcnJvck1lc3NhZ2UoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAKICAgICBBYnN0cmFjdERh
dGFiYXNlU2VydmVyKiBtX3NlcnZlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxNDE5NjUp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsMTEgQEAKIAogI2lmIEVOQUJMRShTUUxfREFU
QUJBU0UpCiAKKyNpbmNsdWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlQmFja2Vu
ZEFzeW5jLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5oIgogI2luY2x1ZGUg
IkRhdGFiYXNlQmFja2VuZFN5bmMuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVN5bmMuaCIKICNpbmNs
dWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIApA
QCAtMTQ5LDE0ICsxNTEsNDAgQEAgdm9pZCBEYXRhYmFzZVNlcnZlcjo6aW50ZXJydXB0QWxsRGF0
YWJhcwogICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmludGVycnVwdEFsbERhdGFiYXNl
c0ZvckNvbnRleHQoY29udGV4dCk7CiB9CiAKLWJvb2wgRGF0YWJhc2VTZXJ2ZXI6OmNhbkVzdGFi
bGlzaERhdGFiYXNlKERhdGFiYXNlQmFja2VuZENvbnRleHQqIGJhY2tlbmRDb250ZXh0LCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcg
ZXN0aW1hdGVkU2l6ZSkKK1Bhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBEYXRhYmFzZVNlcnZl
cjo6b3BlbkRhdGFiYXNlKFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiYgYmFja2VuZENv
bnRleHQsIERhdGFiYXNlVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNl
RXJyb3IgJmVycm9yLCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgT3BlbkF0dGVtcHQgYXR0ZW1wdCkK
IHsKLSAgICByZXR1cm4gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuY2FuRXN0YWJsaXNoRGF0
YWJhc2UoYmFja2VuZENvbnRleHQsIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsK
LX0KKyAgICBSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBkYXRhYmFzZTsKKyAgICBib29sIHN1Y2Nl
c3MgPSBmYWxzZTsgLy8gTWFrZSBzb21lIG9sZGVyIGNvbXBpbGVycyBoYXBweS4KKyAgICAKKyAg
ICBzd2l0Y2ggKGF0dGVtcHQpIHsKKyAgICBjYXNlIEZpcnN0VHJ5VG9PcGVuRGF0YWJhc2U6Cisg
ICAgICAgIHN1Y2Nlc3MgPSBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5jYW5Fc3RhYmxpc2hE
YXRhYmFzZShiYWNrZW5kQ29udGV4dC5nZXQoKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRl
ZFNpemUsIGVycm9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXRyeU9wZW5EYXRhYmFz
ZToKKyAgICAgICAgc3VjY2VzcyA9IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnJldHJ5Q2Fu
RXN0YWJsaXNoRGF0YWJhc2UoYmFja2VuZENvbnRleHQuZ2V0KCksIG5hbWUsIGRpc3BsYXlOYW1l
LCBlc3RpbWF0ZWRTaXplLCBlcnJvcik7CisgICAgfQorCisgICAgaWYgKHN1Y2Nlc3MpCisgICAg
ICAgIGRhdGFiYXNlID0gY3JlYXRlRGF0YWJhc2UoYmFja2VuZENvbnRleHQsIHR5cGUsIG5hbWUs
IGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIHNldFZlcnNpb25J
bk5ld0RhdGFiYXNlLCBlcnJvciwgZXJyb3JNZXNzYWdlKTsKKyAgICByZXR1cm4gZGF0YWJhc2Uu
cmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZD4gRGF0YWJhc2VTZXJ2
ZXI6OmNyZWF0ZURhdGFiYXNlKFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiYgYmFja2Vu
ZENvbnRleHQsIERhdGFiYXNlVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25l
ZCBsb25nIGVzdGltYXRlZFNpemUsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFi
YXNlRXJyb3ImIGVycm9yLCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8RGF0
YWJhc2VCYWNrZW5kPiBkYXRhYmFzZTsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIERh
dGFiYXNlVHlwZTo6QXN5bmM6CisgICAgICAgIGRhdGFiYXNlID0gYWRvcHRSZWYobmV3IERhdGFi
YXNlKGJhY2tlbmRDb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBl
c3RpbWF0ZWRTaXplKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGF0YWJhc2VUeXBlOjpT
eW5jOgorICAgICAgICBkYXRhYmFzZSA9IGFkb3B0UmVmKG5ldyBEYXRhYmFzZVN5bmMoYmFja2Vu
ZENvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNp
emUpKTsKKyAgICB9CiAKLXZvaWQgRGF0YWJhc2VTZXJ2ZXI6OnNldERhdGFiYXNlRGV0YWlscyhT
ZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
ZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKLXsKLSAgICBEYXRhYmFz
ZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXREYXRhYmFzZURldGFpbHMob3JpZ2luLCBuYW1lLCBkaXNw
bGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7CisgICAgaWYgKCFkYXRhYmFzZS0+b3BlbkFuZFZlcmlm
eVZlcnNpb24oc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGVycm9yLCBlcnJvck1lc3NhZ2UpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldERh
dGFiYXNlRGV0YWlscyhiYWNrZW5kQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgbmFtZSwgZGlz
cGxheU5hbWUsIGVzdGltYXRlZFNpemUpOworICAgIHJldHVybiBkYXRhYmFzZS5yZWxlYXNlKCk7
CiB9CiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVNlcnZlcjo6Z2V0TWF4U2l6ZUZvckRh
dGFiYXNlKGNvbnN0IERhdGFiYXNlQmFja2VuZCogZGF0YWJhc2UpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVNlcnZlci5oCShyZXZp
c2lvbiAxNDE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlU2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDggQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBTdHJpbmcgZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNv
bnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCk7CiAKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBvcGVuRGF0YWJhc2UoUmVmUHRyPERhdGFi
YXNlQmFja2VuZENvbnRleHQ+JiwgRGF0YWJhc2VUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1
bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2Us
IERhdGFiYXNlRXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgT3BlbkF0dGVtcHQpOworCiAj
aWYgIVBMQVRGT1JNKENIUk9NSVVNKQogICAgIHZpcnR1YWwgYm9vbCBoYXNFbnRyeUZvck9yaWdp
bihTZWN1cml0eU9yaWdpbiopOwogICAgIHZpcnR1YWwgdm9pZCBvcmlnaW5zKFZlY3RvcjxSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+ID4mIHJlc3VsdCk7CkBAIC03MCwxMCArNzIsMTAgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIGludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoY29u
c3QgRGF0YWJhc2VCYWNrZW5kQ29udGV4dCopOwogCi0gICAgdmlydHVhbCBib29sIGNhbkVzdGFi
bGlzaERhdGFiYXNlKERhdGFiYXNlQmFja2VuZENvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YWJhc2VEZXRhaWxzKFNlY3VyaXR5T3JpZ2luKiwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUpOwogICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIGdldE1h
eFNpemVGb3JEYXRhYmFzZShjb25zdCBEYXRhYmFzZUJhY2tlbmQqKTsKKworcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+IGNyZWF0ZURhdGFiYXNlKFJl
ZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiYsIERhdGFiYXNlVHlwZSwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNw
bGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBib29sIHNldFZlcnNpb25Jbk5l
d0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmNwcAkocmV2aXNpb24gMTQxOTY1KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSw2ICs1MSwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK1Bh
c3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBEYXRhYmFzZVN5bmM6OmNyZWF0ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+IGJhY2tlbmQpCit7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PERhdGFiYXNlU3luYyo+KGJhY2tlbmQuZ2V0KCkpOworfQorCiBE
YXRhYmFzZVN5bmM6OkRhdGFiYXNlU3luYyhQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRl
eHQ+IGRhdGFiYXNlQ29udGV4dCwKICAgICBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUpCiAgICAgOiBEYXRhYmFzZUJhc2UoZGF0YWJhc2VDb250ZXh0LT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCkBAIC0xNTQsMTQgKzE1OSw2IEBAIHZvaWQgRGF0YWJh
c2VTeW5jOjpydW5UcmFuc2FjdGlvbihQYXNzUmUKICAgICBzZXRMYXN0RXJyb3JNZXNzYWdlKCIi
KTsKIH0KIAotYm9vbCBEYXRhYmFzZVN5bmM6Om9wZW5BbmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0
VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImIGVycm9yLCBTdHJpbmcmIGVycm9y
TWVzc2FnZSkKLXsKLSNpZiBQTEFURk9STShDSFJPTUlVTSkKLSAgICBEYXRhYmFzZVRyYWNrZXI6
OnRyYWNrZXIoKS5wcmVwYXJlVG9PcGVuRGF0YWJhc2UodGhpcyk7Ci0jZW5kaWYKLSAgICByZXR1
cm4gcGVyZm9ybU9wZW5BbmRWZXJpZnkoc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGVycm9yLCBl
cnJvck1lc3NhZ2UpOwotfQotCiB2b2lkIERhdGFiYXNlU3luYzo6bWFya0FzRGVsZXRlZEFuZENs
b3NlKCkKIHsKICAgICAvLyBGSVhNRTogbmVlZCB0byBkbyBzb21ldGhpbmcgc2ltaWxhciB0byBj
bG9zZUltbWVkaWF0ZWx5KCksIGJ1dCBpbiBhIHN5bmMgd2F5CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmgJKHJldmlzaW9uIDE0
MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5j
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDE1ICs3NywxNCBAQCBwcml2YXRlOgogICAgIERhdGFi
YXNlU3luYyhQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+LCBjb25zdCBTdHJpbmcm
IG5hbWUsCiAgICAgICAgIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJp
bmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwogICAgIFBhc3NS
ZWZQdHI8RGF0YWJhc2VCYWNrZW5kU3luYz4gYmFja2VuZCgpOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPERhdGFiYXNlU3luYz4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPERhdGFiYXNlQmFja2VuZD4pOwogCiAgICAgdm9pZCBydW5UcmFuc2FjdGlvbihQYXNzUmVm
UHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgYm9vbCByZWFkT25seSwgRXhjZXB0aW9u
Q29kZSYpOwogCi0gICAgYm9vbCBvcGVuQW5kVmVyaWZ5VmVyc2lvbihib29sIHNldFZlcnNpb25J
bk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwotCiAg
ICAgU3RyaW5nIG1fbGFzdEVycm9yTWVzc2FnZTsKIAogICAgIGZyaWVuZCBjbGFzcyBEYXRhYmFz
ZU1hbmFnZXI7Ci0gICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlQmFja2VuZFN5bmM7IC8vIEZJWE1F
OiByZW1vdmUgdGhpcyB3aGVuIHRoZSBiYWNrZW5kIGhhcyBiZWVuIHNwbGl0IG91dC4KKyAgICBm
cmllbmQgY2xhc3MgRGF0YWJhc2VTZXJ2ZXI7IC8vIEZJWE1FOiByZW1vdmUgdGhpcyB3aGVuIHRo
ZSBiYWNrZW5kIGhhcyBiZWVuIHNwbGl0IG91dC4KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFj
a2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlVHJhY2tlci5jcHAJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQyLDQ3ICsxNDIsOTkgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6Om9wZW5UcmFja2VyRGF0
YWJhcwogICAgIH0KIH0KIAotYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmNhbkVzdGFibGlzaERhdGFi
YXNlKERhdGFiYXNlQmFja2VuZENvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQor
Ym9vbCBEYXRhYmFzZVRyYWNrZXI6Omhhc0FkZXF1YXRlUXVvdGFGb3JPcmlnaW4oU2VjdXJpdHlP
cmlnaW4qIG9yaWdpbiwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBEYXRhYmFzZUVycm9y
JiBlcnIpCiB7Ci0gICAgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IGNvbnRleHQtPnNlY3VyaXR5
T3JpZ2luKCk7Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIHJlcXVpcmVtZW50OwotICAgIHsKLSAg
ICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7Ci0gICAgICAg
IExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tlcihvcmlnaW5RdW90
YU1hbmFnZXIoKSk7CisgICAgLy8gU2luY2Ugd2UncmUgaW1taW5lbnRseSBvcGVuaW5nIGEgZGF0
YWJhc2Ugd2l0aGluIHRoaXMgY29udGV4dCdzIG9yaWdpbiwKKyAgICAvLyBtYWtlIHN1cmUgdGhp
cyBvcmlnaW4gaXMgYmVpbmcgdHJhY2tlZCBieSB0aGUgT3JpZ2luUXVvdGFNYW5hZ2VyCisgICAg
Ly8gYnkgZmV0Y2hpbmcgaXRzIGN1cnJlbnQgdXNhZ2Ugbm93LiBDYWxsaW5nIHVzYWdlRm9yT3Jp
Z2luKCkgaGFzIHRoZSBzaWRlCisgICAgLy8gZWZmZWN0IG9mIGluaXRpYXRpbmcgdHJhY2tpbmcg
YnkgdGhlIE9yaWdpblF1b3RhTWFuYWdlciBpZiB0aGUgb3JpZ2luIGlzCisgICAgLy8gbm90IGFs
cmVhZHkgdHJhY2tlZC4KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgdXNhZ2UgPSB1c2FnZUZvck9y
aWdpbk5vTG9jayhvcmlnaW4pOworCisgICAgLy8gSWYgdGhlIGRhdGFiYXNlIHdpbGwgZml0LCBh
bGxvdyBpdHMgY3JlYXRpb24uCisgICAgdW5zaWduZWQgbG9uZyBsb25nIHJlcXVpcmVtZW50ID0g
dXNhZ2UgKyBtYXgoMVVMLCBlc3RpbWF0ZWRTaXplKTsKKyAgICBpZiAocmVxdWlyZW1lbnQgPCB1
c2FnZSkgeworICAgICAgICAvLyBUaGUgZXN0aW1hdGVkIHNpemUgaXMgc28gYmlnIGl0IGNhdXNl
cyBhbiBvdmVyZmxvdzsgZG9uJ3QgYWxsb3cgY3JlYXRpb24uCisgICAgICAgIGVyciA9IERhdGFi
YXNlRXJyb3I6OkRhdGFiYXNlU2l6ZU92ZXJmbG93ZWQ7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgaWYgKHJlcXVpcmVtZW50IDw9IHF1b3RhRm9yT3JpZ2luTm9Mb2NrKG9yaWdp
bikpCisgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIGlmIChpc0RlbGV0aW5nRGF0YWJh
c2VPck9yaWdpbkZvcihvcmlnaW4sIG5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGVyciA9IERhdGFiYXNlRXJyb3I6OkRhdGFiYXNlU2l6ZUV4Y2VlZGVkUXVvdGE7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIERhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNoRGF0
YWJhc2UoRGF0YWJhc2VCYWNrZW5kQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUs
IERhdGFiYXNlRXJyb3ImIGVycm9yKQoreworICAgIFVOVVNFRF9QQVJBTShkaXNwbGF5TmFtZSk7
IC8vIENocm9taXVtIHdhbnRzIHRoZSBkaXNwbGF5TmFtZSBidXQgd2UgZG9uJ3QuCisgICAgZXJy
b3IgPSBEYXRhYmFzZUVycm9yOjpOb25lOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNl
KG1fZGF0YWJhc2VHdWFyZCk7CisgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVvdGFN
YW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKKyAgICBTZWN1cml0eU9yaWdpbiog
b3JpZ2luID0gY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKTsKIAotICAgICAgICByZWNvcmRDcmVh
dGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7CisgICAgaWYgKGlzRGVsZXRpbmdEYXRhYmFzZU9y
T3JpZ2luRm9yKG9yaWdpbiwgbmFtZSkpIHsKKyAgICAgICAgZXJyb3IgPSBEYXRhYmFzZUVycm9y
OjpEYXRhYmFzZUlzQmVpbmdEZWxldGVkOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQog
Ci0gICAgICAgIC8vIFNpbmNlIHdlJ3JlIGltbWluZW50bHkgb3BlbmluZyBhIGRhdGFiYXNlIHdp
dGhpbiB0aGlzIGNvbnRleHQncyBvcmlnaW4sIG1ha2Ugc3VyZSB0aGlzIG9yaWdpbiBpcyBiZWlu
ZyB0cmFja2VkIGJ5IHRoZSBRdW90YVRyYWNrZXIKLSAgICAgICAgLy8gYnkgZmV0Y2hpbmcgaXRz
IGN1cnJlbnQgdXNhZ2Ugbm93LgotICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdXNhZ2UgPSB1
c2FnZUZvck9yaWdpbk5vTG9jayhvcmlnaW4pOworICAgIHJlY29yZENyZWF0aW5nRGF0YWJhc2Uo
b3JpZ2luLCBuYW1lKTsKIAotICAgICAgICAvLyBJZiBhIGRhdGFiYXNlIGFscmVhZHkgZXhpc3Rz
LCBpZ25vcmUgdGhlIHBhc3NlZC1pbiBlc3RpbWF0ZWQgc2l6ZSBhbmQgc2F5IGl0J3MgT0suCi0g
ICAgICAgIGlmIChoYXNFbnRyeUZvckRhdGFiYXNlKG9yaWdpbiwgbmFtZSkpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBJZiBhIGRhdGFiYXNlIGFscmVhZHkgZXhpc3RzLCBpZ25v
cmUgdGhlIHBhc3NlZC1pbiBlc3RpbWF0ZWQgc2l6ZSBhbmQgc2F5IGl0J3MgT0suCisgICAgaWYg
KGhhc0VudHJ5Rm9yRGF0YWJhc2Uob3JpZ2luLCBuYW1lKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICAgICAgLy8gSWYgdGhlIGRhdGFiYXNlIHdpbGwgZml0LCBhbGxvdyBpdHMgY3JlYXRp
b24uCi0gICAgICAgIHJlcXVpcmVtZW50ID0gdXNhZ2UgKyBtYXgoMVVMLCBlc3RpbWF0ZWRTaXpl
KTsKLSAgICAgICAgaWYgKHJlcXVpcmVtZW50IDwgdXNhZ2UpIHsKLSAgICAgICAgICAgIGRvbmVD
cmVhdGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIElmIHRoZSBlc3RpbWF0ZWQgc2l6ZSBpcyBzbyBiaWcgaXQgY2F1c2VzIGFuIG92ZXJmbG93
LCBkb24ndCBhbGxvdyBjcmVhdGlvbi4KLSAgICAgICAgfQotICAgICAgICBpZiAocmVxdWlyZW1l
bnQgPD0gcXVvdGFGb3JPcmlnaW5Ob0xvY2sob3JpZ2luKSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgIGlmIChoYXNBZGVxdWF0ZVF1b3RhRm9yT3JpZ2luKG9yaWdpbiwgZXN0aW1hdGVk
U2l6ZSwgZXJyb3IpKSB7CisgICAgICAgIEFTU0VSVChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpO
b25lKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgLy8gR2l2ZSB0aGUgY2hy
b21lIGNsaWVudCBhIGNoYW5jZSB0byBpbmNyZWFzZSB0aGUgcXVvdGEuCi0gICAgLy8gRHJvcCBh
bGwgbG9ja3MgYmVmb3JlIGNhbGxpbmcgb3V0OyB3ZSBkb24ndCBrbm93IHdoYXQgdGhleSdsbCBk
by4KLSAgICBjb250ZXh0LT5kYXRhYmFzZUV4Y2VlZGVkUXVvdGEobmFtZSwgRGF0YWJhc2VEZXRh
aWxzKG5hbWUuaXNvbGF0ZWRDb3B5KCksIGRpc3BsYXlOYW1lLmlzb2xhdGVkQ29weSgpLCBlc3Rp
bWF0ZWRTaXplLCAwKSk7CisgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHRoZW4gd2UgZG8gbm90IGhh
dmUgZW5vdWdoIHF1b3RhIGZvciBvbmUgb2YgdGhlCisgICAgLy8gZm9sbG93aW5nIHJlYXNvbnMg
YXMgaW5kaWNhdGVkIGJ5IHRoZSBzZXQgZXJyb3I6CisgICAgLy8KKyAgICAvLyBJZiB0aGUgZXJy
b3IgaXMgREFUQUJBU0VfU0laRV9PVkVSRkxPV0VELCB0aGVuIHRoaXMgbWVhbnMgdGhlIHJlcXVl
c3RlZAorICAgIC8vIGVzdGltYXRlZFNpemUgaWYgc28gdW5yZWFzb25hYmx5IGxhcmdlIHRoYXQg
aXQgY2FuIGNhdXNlIGFuIG92ZXJmbG93IGluCisgICAgLy8gdGhlIHVzYWdlIGJ1ZGdldCBjb21w
dXRhdGlvbi4gSW4gdGhhdCBjYXNlLCB0aGVyZSdzIG5vdGhpbmcgbW9yZSB3ZSBjYW4KKyAgICAv
LyBkbywgYW5kIHRoZXJlJ3Mgbm8gbmVlZCBmb3IgYSByZXRyeS4gSGVuY2UsIHdlIHNob3VsZCBp
bmRpY2F0ZSB0aGF0CisgICAgLy8gd2UncmUgZG9uZSB3aXRoIG91ciBhdHRlbXB0IHRvIGNyZWF0
ZSB0aGUgZGF0YWJhc2U6CisgICAgLy8KKyAgICAvLyBJZiB0aGUgZXJyb3IgaXMgREFUQUJBU0Vf
U0laRV9FWENFRURFRF9RVU9UQSwgdGhlbiB3ZSdsbCBnaXZlIHRoZSBjbGllbnQKKyAgICAvLyBh
IGNoYW5jZSB0byB1cGRhdGUgdGhlIHF1b3RhIGFuZCBjYWxsIHJldHJ5Q2FuRXN0YWJsaXNoRGF0
YWJhc2UoKSB0byB0cnkKKyAgICAvLyBhZ2Fpbi4gSGVuY2UsIHdlIGRvbid0IGNhbGwgZG9uZUNy
ZWF0aW5nRGF0YWJhc2UoKSB5ZXQgaW4gdGhhdCBjYXNlLgorCisgICAgaWYgKGVycm9yID09IERh
dGFiYXNlRXJyb3I6OkRhdGFiYXNlU2l6ZU92ZXJmbG93ZWQpCisgICAgICAgIGRvbmVDcmVhdGlu
Z0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlQoZXJyb3Ig
PT0gRGF0YWJhc2VFcnJvcjo6RGF0YWJhc2VTaXplRXhjZWVkZWRRdW90YSk7CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKKy8vIE5vdGU6IGEgdGhvdWdodCBhYm91dCBwZXJmb3JtYW5jZTogaGFz
QWRlcXVhdGVRdW90YUZvck9yaWdpbigpIHdhcyBhbHNvCisvLyBjYWxsZWQgaW4gY2FuRXN0YWJs
aXNoRGF0YWJhc2UoKSwgYW5kIGhlbmNlLCB3ZSdyZSByZXBlYXRpbmcgc29tZSB3b3JrIHdpdGhp
bgorLy8gaGFzQWRlcXVhdGVRdW90YUZvck9yaWdpbigpLiBIb3dldmVyLCByZXRyeUNhbkVzdGFi
bGlzaERhdGFiYXNlKCkgc2hvdWxkIG9ubHkKKy8vIGJlIGNhbGxlZCBpbiB0aGUgcmFyZSBldmVu
IGlmIGNhbkVzdGFibGlzaERhdGFiYXNlKCkgZmFpbHMuIFNpbmNlIGl0IGlzIHJhcmUsCisvLyB3
ZSBzaG91bGQgbm90IGJvdGhlciBvcHRpbWl6aW5nIGl0LiBJdCBpcyBtb3JlIGJlbmVmaWNpYWwg
dG8ga2VlcAorLy8gaGFzQWRlcXVhdGVRdW90YUZvck9yaWdpbigpIHNpbXBsZSBhbmQgY29ycmVj
dCAoaS5lLiBidWcgZnJlZSksIGFuZCBqdXN0CisvLyByZS11c2UgaXQuCitib29sIERhdGFiYXNl
VHJhY2tlcjo6cmV0cnlDYW5Fc3RhYmxpc2hEYXRhYmFzZShEYXRhYmFzZUJhY2tlbmRDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUs
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgRGF0YWJhc2VFcnJvciYgZXJyb3IpCit7Cisg
ICAgLy8gQ2hyb21pdW0gd2FudHMgdGhlIGRpc3BsYXlOYW1lIGJ1dCB3ZSBkb24ndC4KKyAgICBV
TlVTRURfUEFSQU0oZGlzcGxheU5hbWUpOworICAgIGVycm9yID0gRGF0YWJhc2VFcnJvcjo6Tm9u
ZTsKIAogICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOworICAg
IExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tlcihvcmlnaW5RdW90
YU1hbmFnZXIoKSk7CisgICAgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IGNvbnRleHQtPnNlY3Vy
aXR5T3JpZ2luKCk7CiAKICAgICAvLyBJZiB0aGUgZGF0YWJhc2Ugd2lsbCBmaXQgbm93LCBhbGxv
dyBpdHMgY3JlYXRpb24uCi0gICAgaWYgKHJlcXVpcmVtZW50IDw9IHF1b3RhRm9yT3JpZ2luTm9M
b2NrKG9yaWdpbikpCisgICAgaWYgKGhhc0FkZXF1YXRlUXVvdGFGb3JPcmlnaW4ob3JpZ2luLCBl
c3RpbWF0ZWRTaXplLCBlcnJvcikpIHsKKyAgICAgICAgQVNTRVJUKGVycm9yID09IERhdGFiYXNl
RXJyb3I6Ok5vbmUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKKyAgICBBU1NFUlQo
ZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6RGF0YWJhc2VTaXplRXhjZWVkZWRRdW90YSk7CiAgICAg
ZG9uZUNyZWF0aW5nRGF0YWJhc2Uob3JpZ2luLCBuYW1lKTsKIAogICAgIHJldHVybiBmYWxzZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2Vy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVRyYWNrZXIuaAkocmV2aXNpb24gMTQxOTY1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiAr
MzEsNyBAQAogCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIkRhdGFiYXNl
RXJyb3IuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgpAQCAtNzAsNyArNzEsOSBAQCBw
dWJsaWM6CiAgICAgLy8gbV9kYXRhYmFzZUd1YXJkIGFuZCBtX29wZW5EYXRhYmFzZU1hcEd1YXJk
IGN1cnJlbnRseSBkb24ndCBvdmVybGFwLgogICAgIC8vIG5vdGlmaWNhdGlvbk11dGV4KCkgaXMg
Y3VycmVudGx5IGluZGVwZW5kZW50IG9mIHRoZSBvdGhlciBsb2Nrcy4KIAotICAgIGJvb2wgY2Fu
RXN0YWJsaXNoRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kQ29udGV4dCosIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplKTsKKyAgICBib29sIGNhbkVzdGFibGlzaERhdGFiYXNlKERhdGFiYXNlQmFja2VuZENvbnRl
eHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2ln
bmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgRGF0YWJhc2VFcnJvciYpOworICAgIGJvb2wgcmV0cnlD
YW5Fc3RhYmxpc2hEYXRhYmFzZShEYXRhYmFzZUJhY2tlbmRDb250ZXh0KiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRl
ZFNpemUsIERhdGFiYXNlRXJyb3ImKTsKKwogICAgIHZvaWQgc2V0RGF0YWJhc2VEZXRhaWxzKFNl
Y3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlO
YW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwogICAgIFN0cmluZyBmdWxsUGF0aEZv
ckRhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0
ZUlmRG9lc05vdEV4aXN0ID0gdHJ1ZSk7CiAKQEAgLTg2LDYgKzg5LDggQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBleHBsaWNpdCBEYXRhYmFzZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZVBhdGgpOwogCisgICAgYm9vbCBoYXNBZGVxdWF0ZVF1b3RhRm9yT3JpZ2luKFNlY3VyaXR5T3Jp
Z2luKiwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBEYXRhYmFzZUVycm9yJik7CisKICNp
ZiAhUExBVEZPUk0oQ0hST01JVU0pCiBwdWJsaWM6CiAgICAgdm9pZCBzZXREYXRhYmFzZURpcmVj
dG9yeVBhdGgoY29uc3QgU3RyaW5nJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL1dvcmtlckNvbnRleHRXZWJEYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9Xb3JrZXJDb250ZXh0V2ViRGF0YWJhc2Uu
Y3BwCShyZXZpc2lvbiAxNDE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL1dvcmtlckNvbnRleHRXZWJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEz
ICs0NSwxMSBAQCBQYXNzUmVmUHRyPERhdGFiYXNlPiBXb3JrZXJDb250ZXh0V2ViRGF0CiAgICAg
RGF0YWJhc2VNYW5hZ2VyJiBkYk1hbmFnZXIgPSBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKTsK
ICAgICBSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlOwogICAgIERhdGFiYXNlRXJyb3IgZXJyb3Ig
PSBEYXRhYmFzZUVycm9yOjpOb25lOwotICAgIGlmIChkYk1hbmFnZXIuaXNBdmFpbGFibGUoKSAm
JiBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZShjb250ZXh0LT50
b3BPcmlnaW4oKSkpCisgICAgaWYgKGRiTWFuYWdlci5pc0F2YWlsYWJsZSgpICYmIGNvbnRleHQt
PnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKGNvbnRleHQtPnRvcE9yaWdpbigp
KSkgewogICAgICAgICBkYXRhYmFzZSA9IGRiTWFuYWdlci5vcGVuRGF0YWJhc2UoY29udGV4dCwg
bmFtZSwgdmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJh
Y2ssIGVycm9yKTsKLQotICAgIEFTU0VSVChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpOb25lIHx8
IGVycm9yID09IERhdGFiYXNlRXJyb3I6OkNhbm5vdE9wZW5EYXRhYmFzZSk7Ci0gICAgaWYgKGVy
cm9yID09IERhdGFiYXNlRXJyb3I6OkNhbm5vdE9wZW5EYXRhYmFzZSkKLSAgICAgICAgZWMgPSBJ
TlZBTElEX1NUQVRFX0VSUjsKLSAgICBpZiAoIWRhdGFiYXNlICYmICFlYykKKyAgICAgICAgQVNT
RVJUKGRhdGFiYXNlIHx8IGVycm9yICE9IERhdGFiYXNlRXJyb3I6Ok5vbmUpOworICAgICAgICBl
YyA9IERhdGFiYXNlTWFuYWdlcjo6ZXhjZXB0aW9uQ29kZUZvckRhdGFiYXNlRXJyb3IoZXJyb3Ip
OworICAgIH0gZWxzZQogICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKIAogICAgIHJldHVybiBk
YXRhYmFzZS5yZWxlYXNlKCk7CkBAIC02MiwxMyArNjAsMTIgQEAgUGFzc1JlZlB0cjxEYXRhYmFz
ZVN5bmM+IFdvcmtlckNvbnRleHRXZQogICAgIERhdGFiYXNlTWFuYWdlciYgZGJNYW5hZ2VyID0g
RGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCk7CiAgICAgUmVmUHRyPERhdGFiYXNlU3luYz4gZGF0
YWJhc2U7CiAgICAgRGF0YWJhc2VFcnJvciBlcnJvciA9ICBEYXRhYmFzZUVycm9yOjpOb25lOwot
ICAgIGlmIChkYk1hbmFnZXIuaXNBdmFpbGFibGUoKSAmJiBjb250ZXh0LT5zZWN1cml0eU9yaWdp
bigpLT5jYW5BY2Nlc3NEYXRhYmFzZShjb250ZXh0LT50b3BPcmlnaW4oKSkpCisgICAgaWYgKGRi
TWFuYWdlci5pc0F2YWlsYWJsZSgpICYmIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFj
Y2Vzc0RhdGFiYXNlKGNvbnRleHQtPnRvcE9yaWdpbigpKSkgewogICAgICAgICBkYXRhYmFzZSA9
IGRiTWFuYWdlci5vcGVuRGF0YWJhc2VTeW5jKGNvbnRleHQsIG5hbWUsIHZlcnNpb24sIGRpc3Bs
YXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrLCBlcnJvcik7CiAKLSAgICBB
U1NFUlQoZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6Tm9uZSB8fCBlcnJvciA9PSBEYXRhYmFzZUVy
cm9yOjpDYW5ub3RPcGVuRGF0YWJhc2UpOwotICAgIGlmIChlcnJvciA9PSBEYXRhYmFzZUVycm9y
OjpDYW5ub3RPcGVuRGF0YWJhc2UpCi0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0g
ICAgaWYgKCFkYXRhYmFzZSAmJiAhZWMpCisgICAgICAgIEFTU0VSVChkYXRhYmFzZSB8fCBlcnJv
ciAhPSBEYXRhYmFzZUVycm9yOjpOb25lKTsKKyAgICAgICAgZWMgPSBEYXRhYmFzZU1hbmFnZXI6
OmV4Y2VwdGlvbkNvZGVGb3JEYXRhYmFzZUVycm9yKGVycm9yKTsKKyAgICB9IGVsc2UKICAgICAg
ICAgZWMgPSBTRUNVUklUWV9FUlI7CiAKICAgICByZXR1cm4gZGF0YWJhc2UucmVsZWFzZSgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFz
ZVRyYWNrZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAJKHJldmlz
aW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21p
dW0vRGF0YWJhc2VUcmFja2VyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0
MSw3IEBACiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbkhhc2guaCIKICNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTU3LDEwICs1OCwxOSBAQCBEYXRhYmFzZVRyYWNr
ZXI6OkRhdGFiYXNlVHJhY2tlcihjb25zdCBTCiAgICAgU1FMaXRlRmlsZVN5c3RlbTo6cmVnaXN0
ZXJTUUxpdGVWRlMoKTsKIH0KIAotYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmNhbkVzdGFibGlzaERh
dGFiYXNlKERhdGFiYXNlQmFja2VuZENvbnRleHQqIGRhdGFiYXNlQ29udGV4dCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGlt
YXRlZFNpemUpCitib29sIERhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2UoRGF0
YWJhc2VCYWNrZW5kQ29udGV4dCogZGF0YWJhc2VDb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwg
RGF0YWJhc2VFcnJvciYgZXJyb3IpCiB7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCA9IGRhdGFiYXNlQ29udGV4dC0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOwotICAgIHJldHVybiBEYXRhYmFzZU9ic2VydmVyOjpjYW5Fc3RhYmxpc2hEYXRhYmFz
ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6
ZSk7CisgICAgYm9vbCBzdWNjZXNzID0gRGF0YWJhc2VPYnNlcnZlcjo6Y2FuRXN0YWJsaXNoRGF0
YWJhc2Uoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRl
ZFNpemUpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgZXJyb3IgPSBEYXRhYmFzZUVycm9y
OjpHZW5lcmljU2VjdXJpdHlFcnJvcjsKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworYm9vbCBE
YXRhYmFzZVRyYWNrZXI6OnJldHJ5Q2FuRXN0YWJsaXNoRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5k
Q29udGV4dCosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGxvbmcsIERh
dGFiYXNlRXJyb3ImKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBm
YWxzZTsKIH0KIAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNldERhdGFiYXNlRGV0YWlscyhTZWN1
cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGxvbmcp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186791</attachid>
            <date>2013-02-06 01:46:36 -0800</date>
            <delta_ts>2013-02-06 13:41:44 -0800</delta_ts>
            <desc>the patch with comments fixed up.</desc>
            <filename>bug-107475.patch</filename>
            <type>text/plain</type>
            <size>47840</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTk2OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk3IEBACisyMDEzLTAyLTA1ICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBvcGVuRGF0YWJhc2UoKSBi
ZXR3ZWVuIGZyb250IGFuZCBiYWNrIGVuZCB3b3JrLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3NDc1LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBtYWluIHdvcmsgb2Ygc3BsaXR0aW5nIERhdGFi
YXNlTWFuYWdlcjo6b3BlbkRhdGFiYXNlKCkgaXMgaW4KKyAgICAgICAgcmVmYWN0b3JpbmcgaG93
IERhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2UoKSB3b3Jrcy4gSXQgdXNlZAor
ICAgICAgICB0byBjaGVjayBmb3IgYWRlcXVhdGUgc3BhY2UgcXVvdGEsIGFuZCBpZiB0aGUgY2hl
Y2sgZmFpbHMsIGl0IHdvdWxkIGNhbGwKKyAgICAgICAgYmFjayBpbnRvIHRoZSBjbGllbnQgZnJv
bSBpbnNpZGUgY2FuRXN0YWJsaXNoRGF0YWJhc2UoKS4gVGhlIGNhbGwgYmFjaworICAgICAgICBh
bGxvd3MgdGhlIGNsaWVudCB0byB1cGRhdGUgdGhlIHF1b3RhIChpZiBhcHByb3ByaWF0ZSkuIFRo
ZXJlYWZ0ZXIsCisgICAgICAgIGNhbkVzdGFibGlzaERhdGFiYXNlKCkgd2lsbCByZXRyeSBpdHMg
cXVvdGEgY2hlY2suCisKKyAgICAgICAgSW4gYSB3ZWJraXQyIHdvcmxkLCB3ZSdsbCB3YW50IHRv
IG1pbmltaXplIHRoZSB0cmFmZmljIGJldHdlZW4gdGhlCisgICAgICAgIGNsaWVudCAoc2NyaXB0
IHNpZGUpIGFuZCB0aGUgc2VydmVyIChzcWxpdGUgZGIgc2lkZSksIGFuZCBpZGVhbGx5LCB3ZQor
ICAgICAgICBkb24ndCB3YW50IHRoZSBzZXJ2ZXIgdG8gY2FsbCBiYWNrIHRvIHRoZSBjbGllbnQu
IE5vdGU6IHRoZQorICAgICAgICBEYXRhYmFzZVRyYWNrZXIgYmVsb25ncyBvbiB0aGUgc2VydmVy
IHNpZGUuCisKKyAgICAgICAgVG8gYWNoaWV2ZSB0aGlzLCB3ZSBzcGxpdCBjYW5Fc3RhYmxpc2hE
YXRhYmFzZSgpIGludG8gMiBwYXJ0czogdGhlCisgICAgICAgIGNoZWNrcyBiZWZvcmUgdGhlIGNh
bGwgYmFjayB0byB0aGUgY2xpZW50LCBhbmQgdGhlIGNoZWNrcyBhZnRlci4KKyAgICAgICAgVGhl
IGZpcnN0IHBhcnQgd2lsbCByZXRhaW4gdGhlIG5hbWUgY2FuRXN0YWJsaXNoRGF0YWJhc2UoKSwg
YW5kIHRoZQorICAgICAgICBzZWNvbmQgcGFydCB3aWxsIGJlIG5hbWVkIHJldHJ5Q2FuRXN0YWJs
aXNoRGF0YWJhc2UoKS4KKyAgICAgICAgV2UgYWxzbyBhZGRlZCBhIERhdGFiYXNlU2VydmVyOjpv
cGVuRGF0YWJhc2UoKSBmdW5jdGlvbiB0aGF0IGNhbiBiZQorICAgICAgICBjYWxsZWQgd2l0aCBh
IHJldHJ5IGZsYWcuCisKKyAgICAgICAgVGhlIGNsaWVudCBzaWRlIERhdGFiYXNlTWFuYWdlcjo6
b3BlbkRhdGFiYXNlKCkgd2lsbCBjYWxsCisgICAgICAgIERhdGFiYXNlU2VydmVyOjpvcGVuRGF0
YWJhc2UoKSwgd2hpY2ggdGhlbiBjYWxscyBjYW5Fc3RhYmxpc2hEYXRhYmFzZSgpCisgICAgICAg
IHRvIGRvIGl0cyBxdW90YSBjaGVjay4gSWYgdGhlcmUgaXMgZW5vdWdoIHF1b3RhLAorICAgICAg
ICBEYXRhYmFzZVNlcnZlcjo6b3BlbkRhdGFiYXNlKCkgd2lsbCBwcm9jZWVkIHRvIG9wZW4gdGhl
IGJhY2tlbmQgZGF0YWJhc2UKKyAgICAgICAgd2l0aG91dCByZXR1cm4gdG8gdGhlIGNsaWVudCBm
aXJzdC4gVGhlIG9wZW5lZCBkYXRhYmFzZSB3aWxsIGJlIHJldHVybmVkCisgICAgICAgIHRvIHRo
ZSBjbGllbnQuCisKKyAgICAgICAgSWYgRGF0YWJhc2VTZXJ2ZXI6Om9wZW5EYXRhYmFzZSgpIGZp
bmRzIGluYWRlcXVhdGUgcXVvdGEgdGhlIGZpcnN0IHRpbWUsCisgICAgICAgIGl0IHdpbGwgcmV0
dXJuIHdpdGggYSBEYXRhYmFzZVNpemVFeGNlZWRlZFF1b3RhIGVycm9yLiBUaGUgRGF0YWJhc2VN
YW5hZ2VyCisgICAgICAgIChvbiB0aGUgY2xpZW50IHNpZGUpIHdpbGwgY2hlY2sgZm9yIHRoaXMg
ZXJyb3IgYW5kIGNhbGwgYmFjayB0byBpdHMgY2xpZW50CisgICAgICAgIGZvciBhbiBvcHBvcnR1
bml0eSB0byBpbmNyZWFzZSB0aGUgcXVvdGEuIFRoZXJlYWZ0ZXIsIHRoZSBEYXRhYmFzZU1hbmFn
ZXIKKyAgICAgICAgd2lsbCBjYWxsIERhdGFiYXNlU2VydmVyOjpvcGVuRGF0YWJhc2UoKSBhZ2Fp
bi4gVGhpcyB0aW1lLAorICAgICAgICBEYXRhYmFzZVNlcnZlcjo6b3BlbkRhdGFiYXNlKCkgd2ls
bCBjYWxsIHJldHJ5Q2FuRXN0YWJsaXNoRGF0YWJhc2UoKSB0bworICAgICAgICBjaGVjayB0aGUg
cXVvdGEsIGFuZCB0aGVuIG9wZW4gdGhlIGJhY2tlbmQgZGF0YWJhc2UgaWYgdGhlcmUgaXMgZW5v
dWdoCisgICAgICAgIHF1b3RhLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAq
IE1vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93V2ViRGF0YWJhc2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RE9NV2luZG93V2ViRGF0YWJhc2U6Om9wZW5EYXRhYmFzZSk6CisgICAgICAgICog
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZTo6Y3JlYXRlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmg6
CisgICAgICAgIChEYXRhYmFzZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZUJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kOjpwZXJm
b3JtT3BlbkFuZFZlcmlmeSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZUJhY2tlbmQuaDoKKyAgICAgICAgKERhdGFiYXNlQmFja2VuZCk6CisgICAgICAgICogTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRBc3luYy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZUJhY2tlbmRBc3luYzo6b3BlbkFuZFZlcmlmeVZlcnNpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kQXN5bmM6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEFzeW5jLmg6CisgICAg
ICAgIChEYXRhYmFzZUJhY2tlbmRBc3luYyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZUJhY2tlbmRTeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFj
a2VuZFN5bmM6Om9wZW5BbmRWZXJpZnlWZXJzaW9uKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlQmFja2VuZFN5bmMuaDoKKyAgICAgICAgKERhdGFiYXNlQmFja2VuZFN5
bmMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VFcnJvci5oOgorICAg
ICAgICAoV2ViQ29yZTo6RU5VTV9DTEFTUyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2Vy
OjpleGNlcHRpb25Db2RlRm9yRGF0YWJhc2VFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZU1hbmFnZXI6Om9wZW5EYXRhYmFzZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VNYW5hZ2VyOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VN
YW5hZ2VyOjpvcGVuRGF0YWJhc2VTeW5jKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlTWFuYWdlci5oOgorICAgICAgICAoRGF0YWJhc2VNYW5hZ2VyKToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlU2VydmVyOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VTZXJ2ZXI6OmNyZWF0ZURhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlU2VydmVyLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVN5bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpjcmVhdGUpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmg6CisgICAgICAgIChE
YXRhYmFzZVN5bmMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFj
a2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6aGFzQWRlcXVhdGVR
dW90YUZvck9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmNhbkVz
dGFibGlzaERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6cmV0
cnlDYW5Fc3RhYmxpc2hEYXRhYmFzZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZVRyYWNrZXIuaDoKKyAgICAgICAgKERhdGFiYXNlVHJhY2tlcik6CisgICAgICAgICog
TW9kdWxlcy93ZWJkYXRhYmFzZS9Xb3JrZXJDb250ZXh0V2ViRGF0YWJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dFdlYkRhdGFiYXNlOjpvcGVuRGF0YWJhc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dFdlYkRhdGFiYXNlOjpvcGVuRGF0YWJhc2VTeW5j
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tl
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0
YWJsaXNoRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpyZXRy
eUNhbkVzdGFibGlzaERhdGFiYXNlKToKKwogMjAxMy0wMi0wNSAgVnNldm9sb2QgVmxhc292ICA8
dnNldmlrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgZW5kaW5n
IHNsYXNoZXMgYXV0b21hdGljYWxseSB0byBmaWxlIG1hcHBpbmdzLgpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlU2VydmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFi
YXNlU2VydmVyLmgJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw3ICsyOCw5IEBACiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiRGF0
YWJhc2VCYXNpY1R5cGVzLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgiCisjaW5jbHVk
ZSAiRGF0YWJhc2VFcnJvci5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC0zNiw5ICsz
OCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERhdGFiYXNlQmFja2VuZDsKLWNs
YXNzIERhdGFiYXNlQmFja2VuZEFzeW5jOwogY2xhc3MgRGF0YWJhc2VCYWNrZW5kQ29udGV4dDsK
LWNsYXNzIERhdGFiYXNlQmFja2VuZFN5bmM7CiBjbGFzcyBEYXRhYmFzZU1hbmFnZXJDbGllbnQ7
CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIApAQCAtNTIsNiArNTIsMTMgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBTdHJpbmcgZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNv
bnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCA9IHRydWUpID0gMDsK
IAorICAgIGVudW0gT3BlbkF0dGVtcHQgeworICAgICAgICBGaXJzdFRyeVRvT3BlbkRhdGFiYXNl
LAorICAgICAgICBSZXRyeU9wZW5EYXRhYmFzZQorICAgIH07CisKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBvcGVuRGF0YWJhc2UoUmVmUHRyPERhdGFiYXNlQmFja2Vu
ZENvbnRleHQ+JiwgRGF0YWJhc2VUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNl
RXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgT3BlbkF0dGVtcHQgPSBGaXJzdFRyeVRvT3Bl
bkRhdGFiYXNlKSA9IDA7CisKICNpZiAhUExBVEZPUk0oQ0hST01JVU0pCiAgICAgdmlydHVhbCBi
b29sIGhhc0VudHJ5Rm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKikgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBvcmlnaW5zKFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4mIHJlc3VsdCkgPSAw
OwpAQCAtNzcsOSArODQsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgaW50ZXJydXB0
QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBEYXRhYmFzZUJhY2tlbmRDb250ZXh0KikgPSAw
OwogCi0gICAgdmlydHVhbCBib29sIGNhbkVzdGFibGlzaERhdGFiYXNlKERhdGFiYXNlQmFja2Vu
ZENvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUs
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNl
dERhdGFiYXNlRGV0YWlscyhTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKSA9IDA7
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNv
bnN0IERhdGFiYXNlQmFja2VuZCopID0gMDsKIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dXZWJEYXRhYmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dXZWJE
YXRhYmFzZS5jcHAJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRE9NV2luZG93V2ViRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OCwxMyArNDgsMTEgQEAgUGFzc1JlZlB0cjxEYXRhYmFzZT4gRE9NV2luZG93V2ViRGF0YWJhcwog
ICAgIFJlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UgPSAwOwogICAgIERhdGFiYXNlTWFuYWdlciYg
ZGJNYW5hZ2VyID0gRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCk7CiAgICAgRGF0YWJhc2VFcnJv
ciBlcnJvciA9IERhdGFiYXNlRXJyb3I6Ok5vbmU7Ci0gICAgaWYgKGRiTWFuYWdlci5pc0F2YWls
YWJsZSgpICYmIHdpbmRvdy0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNz
RGF0YWJhc2Uod2luZG93LT5kb2N1bWVudCgpLT50b3BPcmlnaW4oKSkpCisgICAgaWYgKGRiTWFu
YWdlci5pc0F2YWlsYWJsZSgpICYmIHdpbmRvdy0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4o
KS0+Y2FuQWNjZXNzRGF0YWJhc2Uod2luZG93LT5kb2N1bWVudCgpLT50b3BPcmlnaW4oKSkpIHsK
ICAgICAgICAgZGF0YWJhc2UgPSBkYk1hbmFnZXIub3BlbkRhdGFiYXNlKHdpbmRvdy0+ZG9jdW1l
bnQoKSwgbmFtZSwgdmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIGNyZWF0aW9u
Q2FsbGJhY2ssIGVycm9yKTsKLQotICAgIEFTU0VSVChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpO
b25lIHx8IGVycm9yID09IERhdGFiYXNlRXJyb3I6OkNhbm5vdE9wZW5EYXRhYmFzZSk7Ci0gICAg
aWYgKGVycm9yID09IERhdGFiYXNlRXJyb3I6OkNhbm5vdE9wZW5EYXRhYmFzZSkKLSAgICAgICAg
ZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICBpZiAoIWRhdGFiYXNlICYmICFlYykKKyAgICAg
ICAgQVNTRVJUKGRhdGFiYXNlIHx8IGVycm9yICE9IERhdGFiYXNlRXJyb3I6Ok5vbmUpOworICAg
ICAgICBlYyA9IERhdGFiYXNlTWFuYWdlcjo6ZXhjZXB0aW9uQ29kZUZvckRhdGFiYXNlRXJyb3Io
ZXJyb3IpOworICAgIH0gZWxzZQogICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKIAogICAgIHJl
dHVybiBkYXRhYmFzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAxNDE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiAr
NjYsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitQYXNzUmVmUHRyPERhdGFiYXNlPiBE
YXRhYmFzZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPERhdGFi
YXNlQmFja2VuZD4gYmFja2VuZCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGF0YWJhc2Uq
PihiYWNrZW5kLmdldCgpKTsKK30KKwogRGF0YWJhc2U6OkRhdGFiYXNlKFBhc3NSZWZQdHI8RGF0
YWJhc2VCYWNrZW5kQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0LAogICAgIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxh
eU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKICAgICA6IERhdGFiYXNlQmFzZShk
YXRhYmFzZUNvbnRleHQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKQEAgLTEzMywyMyArMTM4
LDYgQEAgU3RyaW5nIERhdGFiYXNlOjp2ZXJzaW9uKCkgY29uc3QKICAgICByZXR1cm4gRGF0YWJh
c2VCYWNrZW5kOjp2ZXJzaW9uKCk7CiB9CiAKLWJvb2wgRGF0YWJhc2U6Om9wZW5BbmRWZXJpZnlW
ZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImIGVycm9y
LCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKLXsKLSAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIg
c3luY2hyb25pemVyOwotICAgIGlmICghZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFk
KCkgfHwgZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnRlcm1pbmF0aW9uUmVx
dWVzdGVkKCZzeW5jaHJvbml6ZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSNpZiBQTEFU
Rk9STShDSFJPTUlVTSkKLSAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5wcmVwYXJlVG9P
cGVuRGF0YWJhc2UodGhpcyk7Ci0jZW5kaWYKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAg
ICBPd25QdHI8RGF0YWJhc2VPcGVuVGFzaz4gdGFzayA9IERhdGFiYXNlT3BlblRhc2s6OmNyZWF0
ZSh0aGlzLCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgJnN5bmNocm9uaXplciwgZXJyb3IsIGVy
cm9yTWVzc2FnZSwgc3VjY2Vzcyk7Ci0gICAgZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhy
ZWFkKCktPnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0YXNrLnJlbGVhc2UoKSk7Ci0gICAgc3luY2hy
b25pemVyLndhaXRGb3JUYXNrQ29tcGxldGlvbigpOwotCi0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19
Ci0KIHZvaWQgRGF0YWJhc2U6Om1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpCiB7CiAgICAgaWYgKG1f
ZGVsZXRlZCB8fCAhZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCkpCkBAIC0yMDQs
MTggKzE5Miw2IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZTo6bWF4aW11bVNpemUKICAg
ICByZXR1cm4gRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuZ2V0TWF4U2l6ZUZvckRhdGFiYXNl
KHRoaXMpOwogfQogCi1ib29sIERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNl
dFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiBlcnJvciwgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UpCi17Ci0gICAgaWYgKERhdGFiYXNlQmFja2VuZDo6cGVyZm9ybU9wZW5BbmRWZXJp
Znkoc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGVycm9yLCBlcnJvck1lc3NhZ2UpKSB7Ci0gICAg
ICAgIGlmIChkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKSkKLSAgICAgICAgICAg
IGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZU9wZW4o
dGhpcyk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCiB2b2lkIERhdGFiYXNlOjpjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0cmluZyYgb2xkVmVy
c2lvbiwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVm
UHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxs
YmFjaykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlLmgJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtODgsMTMgKzg4LDExIEBAIHByaXZh
dGU6CiAgICAgRGF0YWJhc2UoUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiwgY29u
c3QgU3RyaW5nJiBuYW1lLAogICAgICAgICBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwg
Y29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsK
ICAgICBQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZEFzeW5jPiBiYWNrZW5kKCk7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RGF0YWJhc2U+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+KTsKIAogICAgIHZvaWQgcnVuVHJhbnNhY3Rpb24o
UGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2s+LAogICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxW
b2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldy
YXBwZXI+LCBib29sIHJlYWRPbmx5KTsKIAotICAgIGJvb2wgb3BlbkFuZFZlcmlmeVZlcnNpb24o
Ym9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYgZXJy
b3JNZXNzYWdlKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBz
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYgZXJyb3JNZXNz
YWdlKTsKLQogICAgIHZvaWQgaW5Qcm9ncmVzc1RyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAg
dm9pZCBzY2hlZHVsZVRyYW5zYWN0aW9uKCk7CiAKQEAgLTExMCw2ICsxMDgsNyBAQCBwcml2YXRl
OgogICAgIGJvb2wgbV9kZWxldGVkOwogCiAgICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlTWFuYWdl
cjsKKyAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2VTZXJ2ZXI7IC8vIEZJWE1FOiByZW1vdmUgdGhp
cyB3aGVuIHRoZSBiYWNrZW5kIGhhcyBiZWVuIHNwbGl0IG91dC4KICAgICBmcmllbmQgY2xhc3Mg
RGF0YWJhc2VCYWNrZW5kQXN5bmM7IC8vIEZJWE1FOiByZW1vdmUgdGhpcyB3aGVuIHRoZSBiYWNr
ZW5kIGhhcyBiZWVuIHNwbGl0IG91dC4KIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZC5jcHAJKHJldmlzaW9u
IDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VC
YWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE0LDcgKzMxNCw3IEBAIGJvb2wgRGF0YWJh
c2VCYWNrZW5kOjpwZXJmb3JtT3BlbkFuZFZlcmkKICAgICBEb25lQ3JlYXRpbmdEYXRhYmFzZU9u
RXhpdENhbGxlciBvbkV4aXRDYWxsZXIodGhpcyk7CiAgICAgQVNTRVJUKGVycm9yTWVzc2FnZS5p
c0VtcHR5KCkpOwogICAgIEFTU0VSVChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpOb25lKTsgLy8g
QmV0dGVyIG5vdCBoYXZlIGFueSBlcnJvcnMgYWxyZWFkeS4KLSAgICBlcnJvciA9IERhdGFiYXNl
RXJyb3I6OkNhbm5vdE9wZW5EYXRhYmFzZTsgLy8gUHJlc3VtZWQgZmFpbHVyZS4gV2UnbGwgY2xl
YXIgaXQgaWYgd2Ugc3VjY2VlZCBiZWxvdy4KKyAgICBlcnJvciA9IERhdGFiYXNlRXJyb3I6Oklu
dmFsaWREYXRhYmFzZVN0YXRlOyAvLyBQcmVzdW1lZCBmYWlsdXJlLiBXZSdsbCBjbGVhciBpdCBp
ZiB3ZSBzdWNjZWVkIGJlbG93LgogCiAgICAgY29uc3QgaW50IG1heFNxbGl0ZUJ1c3lXYWl0VGlt
ZSA9IDMwMDAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlQmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmgJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMyw2ICsxMDMsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGNsb3NlRGF0YWJh
c2UoKTsKIAorICAgIHZpcnR1YWwgYm9vbCBvcGVuQW5kVmVyaWZ5VmVyc2lvbihib29sIHNldFZl
cnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2Up
ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzaG91bGRT
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYgZXJyb3JNZXNz
YWdlKTsKIAogICAgIGJvb2wgZ2V0VmVyc2lvbkZyb21EYXRhYmFzZShTdHJpbmcmIHZlcnNpb24s
IGJvb2wgc2hvdWxkQ2FjaGVWZXJzaW9uID0gdHJ1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEFzeW5jLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEFzeW5j
LmNwcAkocmV2aXNpb24gMTQxOTY1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZUJhY2tlbmRBc3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5
LDkgQEAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAiRGF0YWJhc2VCYWNr
ZW5kQ29udGV4dC5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVGFzay5oIgorI2luY2x1ZGUgIkRhdGFi
YXNlVGhyZWFkLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtMzcsNiArNDAsMzQgQEAgRGF0YWJhc2VCYWNrZW5kQXN5bmM6OkRhdGFi
YXNlQmFja2VuZEFzeQogewogfQogCitib29sIERhdGFiYXNlQmFja2VuZEFzeW5jOjpvcGVuQW5k
VmVyaWZ5VmVyc2lvbihib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9y
JiBlcnJvciwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCit7CisgICAgRGF0YWJhc2VUYXNrU3luY2hy
b25pemVyIHN5bmNocm9uaXplcjsKKyAgICBpZiAoIWRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFz
ZVRocmVhZCgpIHx8IGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT50ZXJtaW5h
dGlvblJlcXVlc3RlZCgmc3luY2hyb25pemVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisj
aWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucHJl
cGFyZVRvT3BlbkRhdGFiYXNlKHRoaXMpOworI2VuZGlmCisgICAgYm9vbCBzdWNjZXNzID0gZmFs
c2U7CisgICAgT3duUHRyPERhdGFiYXNlT3BlblRhc2s+IHRhc2sgPSBEYXRhYmFzZU9wZW5UYXNr
OjpjcmVhdGUodGhpcywgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsICZzeW5jaHJvbml6ZXIsIGVy
cm9yLCBlcnJvck1lc3NhZ2UsIHN1Y2Nlc3MpOworICAgIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRh
YmFzZVRocmVhZCgpLT5zY2hlZHVsZUltbWVkaWF0ZVRhc2sodGFzay5yZWxlYXNlKCkpOworICAg
IHN5bmNocm9uaXplci53YWl0Rm9yVGFza0NvbXBsZXRpb24oKTsKKworICAgIHJldHVybiBzdWNj
ZXNzOworfQorCitib29sIERhdGFiYXNlQmFja2VuZEFzeW5jOjpwZXJmb3JtT3BlbkFuZFZlcmlm
eShib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiBlcnJvciwgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UpCit7CisgICAgaWYgKERhdGFiYXNlQmFja2VuZDo6cGVyZm9ybU9w
ZW5BbmRWZXJpZnkoc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGVycm9yLCBlcnJvck1lc3NhZ2Up
KSB7CisgICAgICAgIGlmIChkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKSkKKyAg
ICAgICAgICAgIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRh
YmFzZU9wZW4odGhpcyk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0
dXJuIGZhbHNlOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2Vu
ZEFzeW5jLmgJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTEg
KzQzLDExIEBAIGNsYXNzIERhdGFiYXNlU2VydmVyOwogLy8gYXZhaWxhYmxlLiBUaGlzIHNob3Vs
ZCBiZSByZXBsYWNlZCB3aXRoIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gbGF0ZXIuCiAKIGNs
YXNzIERhdGFiYXNlQmFja2VuZEFzeW5jIDogcHVibGljIERhdGFiYXNlQmFja2VuZCB7Ci1wcm90
ZWN0ZWQ6CitwdWJsaWM6CiAgICAgRGF0YWJhc2VCYWNrZW5kQXN5bmMoUGFzc1JlZlB0cjxEYXRh
YmFzZUJhY2tlbmRDb250ZXh0PiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4
cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBl
c3RpbWF0ZWRTaXplKTsKIAotICAgIGZyaWVuZCBjbGFzcyBEYXRhYmFzZU1hbmFnZXI7IC8vIEZJ
WE1FOiByZW1vdmUgdGhpcyBvbmNlIHdlIGhhdmUgaXNvbGF0ZWQgdGhpcyB0byB0aGUgYmFja2Vu
ZC4KLSAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2VTZXJ2ZXI7CisgICAgdmlydHVhbCBib29sIG9w
ZW5BbmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNl
RXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CisgICAgdmlydHVhbCBib29sIHBlcmZvcm1P
cGVuQW5kVmVyaWZ5KGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3Im
LCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiAKIHByaXZhdGU6CiAgICAgY2xhc3MgRGF0YWJhc2VP
cGVuVGFzazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VCYWNrZW5kU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRTeW5jLmNwcAkocmV2aXNpb24gMTQxOTY1KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRTeW5jLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShTUUxfREFUQUJB
U0UpCiAKICNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmgiCisjaW5jbHVkZSAiRGF0
YWJhc2VUcmFja2VyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTEsNiArNTIsMTQg
QEAgRGF0YWJhc2VCYWNrZW5kU3luYzo6fkRhdGFiYXNlQmFja2VuZFN5bgogICAgICAgICBjbG9z
ZURhdGFiYXNlKCk7CiB9CiAKK2Jvb2wgRGF0YWJhc2VCYWNrZW5kU3luYzo6b3BlbkFuZFZlcmlm
eVZlcnNpb24oYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYgZXJy
b3IsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQoreworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAg
IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnByZXBhcmVUb09wZW5EYXRhYmFzZSh0aGlzKTsK
KyNlbmRpZgorICAgIHJldHVybiBwZXJmb3JtT3BlbkFuZFZlcmlmeShzZXRWZXJzaW9uSW5OZXdE
YXRhYmFzZSwgZXJyb3IsIGVycm9yTWVzc2FnZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZFN5bmMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZFN5bmMu
aAkocmV2aXNpb24gMTQxOTY1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZUJhY2tlbmRTeW5jLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEwICs0NSwxMSBA
QCBjbGFzcyBEYXRhYmFzZUJhY2tlbmRTeW5jIDogcHVibGljIERhdGFiCiBwdWJsaWM6CiAgICAg
dmlydHVhbCB+RGF0YWJhc2VCYWNrZW5kU3luYygpOwogCisgICAgdmlydHVhbCBib29sIG9wZW5B
bmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJy
b3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CisKIHByb3RlY3RlZDoKICAgICBEYXRhYmFzZUJh
Y2tlbmRTeW5jKFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4sIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlz
cGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAKLSAgICBmcmllbmQgY2xh
c3MgRGF0YWJhc2VNYW5hZ2VyOyAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgb25jZSB3ZSBoYXZlIGlz
b2xhdGVkIHRoaXMgdG8gdGhlIGJhY2tlbmQuCiAgICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlU2Vy
dmVyOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZUVycm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZUVycm9yLmgJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VFcnJvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCwxMCArMzQsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBFTlVNX0NMQVNTKERhdGFiYXNl
RXJyb3IpIHsKICAgICBOb25lID0gMCwKLSAgICBDYW5ub3RPcGVuRGF0YWJhc2UsCiAgICAgRGF0
YWJhc2VJc0JlaW5nRGVsZXRlZCwKICAgICBEYXRhYmFzZVNpemVFeGNlZWRlZFF1b3RhLAotICAg
IERhdGFiYXNlU2l6ZU92ZXJmbG93ZWQKKyAgICBEYXRhYmFzZVNpemVPdmVyZmxvd2VkLAorICAg
IEdlbmVyaWNTZWN1cml0eUVycm9yLAorICAgIEludmFsaWREYXRhYmFzZVN0YXRlCiB9IEVOVU1f
Q0xBU1NfRU5EKERhdGFiYXNlRXJyb3IpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNDE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJBYnN0cmFj
dERhdGFiYXNlU2VydmVyLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIKICNpbmNsdWRlICJEYXRh
YmFzZUJhY2tlbmQuaCIKICNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRBc3luYy5oIgpAQCAtMjAw
LDM5ICsyMDEsMTExIEBAIHZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpkaWREZXN0cnVjdERhdGFiYXMK
IH0KICNlbmRpZgogCitFeGNlcHRpb25Db2RlIERhdGFiYXNlTWFuYWdlcjo6ZXhjZXB0aW9uQ29k
ZUZvckRhdGFiYXNlRXJyb3IoRGF0YWJhc2VFcnJvciBlcnJvcikKK3sKKyAgICBzd2l0Y2ggKGVy
cm9yKSB7CisgICAgY2FzZSBEYXRhYmFzZUVycm9yOjpOb25lOgorICAgICAgICByZXR1cm4gMDsK
KyAgICBjYXNlIERhdGFiYXNlRXJyb3I6OkRhdGFiYXNlSXNCZWluZ0RlbGV0ZWQ6CisgICAgY2Fz
ZSBEYXRhYmFzZUVycm9yOjpEYXRhYmFzZVNpemVFeGNlZWRlZFF1b3RhOgorICAgIGNhc2UgRGF0
YWJhc2VFcnJvcjo6RGF0YWJhc2VTaXplT3ZlcmZsb3dlZDoKKyAgICBjYXNlIERhdGFiYXNlRXJy
b3I6OkdlbmVyaWNTZWN1cml0eUVycm9yOgorICAgICAgICByZXR1cm4gU0VDVVJJVFlfRVJSOwor
ICAgIGNhc2UgRGF0YWJhc2VFcnJvcjo6SW52YWxpZERhdGFiYXNlU3RhdGU6CisgICAgICAgIHJl
dHVybiBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIDA7IC8vIE1ha2Ugc29tZSBvbGRlciBjb21waWxlcnMgaGFwcHkuCit9CisK
K1Bhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBEYXRhYmFzZU1hbmFnZXI6Om9wZW5EYXRhYmFz
ZUJhY2tlbmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKKyAgICBEYXRhYmFzZVR5
cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lv
biwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwKKyAgICB1bnNpZ25lZCBsb25nIGVzdGltYXRl
ZFNpemUsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImIGVycm9y
LCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKK3sKKyAgICBBU1NFUlQoZXJyb3IgPT0gRGF0YWJhc2VF
cnJvcjo6Tm9uZSk7CisKKyAgICBSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBkYXRhYmFzZUNvbnRl
eHQgPSBkYXRhYmFzZUNvbnRleHRGb3IoY29udGV4dCk7CisgICAgUmVmUHRyPERhdGFiYXNlQmFj
a2VuZENvbnRleHQ+IGJhY2tlbmRDb250ZXh0ID0gZGF0YWJhc2VDb250ZXh0LT5iYWNrZW5kKCk7
CisKKyAgICBSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBiYWNrZW5kID0gbV9zZXJ2ZXItPm9wZW5E
YXRhYmFzZShiYWNrZW5kQ29udGV4dCwgdHlwZSwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLAorICAg
ICAgICBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2Us
IGVycm9yLCBlcnJvck1lc3NhZ2UpOworCisgICAgaWYgKCFiYWNrZW5kKSB7CisgICAgICAgIEFT
U0VSVChlcnJvciAhPSBEYXRhYmFzZUVycm9yOjpOb25lKTsKKworICAgICAgICBzd2l0Y2ggKGVy
cm9yKSB7CisgICAgICAgIGNhc2UgRGF0YWJhc2VFcnJvcjo6RGF0YWJhc2VJc0JlaW5nRGVsZXRl
ZDoKKyAgICAgICAgY2FzZSBEYXRhYmFzZUVycm9yOjpEYXRhYmFzZVNpemVPdmVyZmxvd2VkOgor
ICAgICAgICBjYXNlIERhdGFiYXNlRXJyb3I6OkdlbmVyaWNTZWN1cml0eUVycm9yOgorICAgICAg
ICAgICAgZ290byBoYW5kbGVFcnJvcjsKKworICAgICAgICBjYXNlIERhdGFiYXNlRXJyb3I6Oklu
dmFsaWREYXRhYmFzZVN0YXRlOgorICAgICAgICAgICAgZ290byBoYW5kbGVJbnZhbGlkRGF0YWJh
c2VTdGF0ZTsKKworICAgICAgICBjYXNlIERhdGFiYXNlRXJyb3I6OkRhdGFiYXNlU2l6ZUV4Y2Vl
ZGVkUXVvdGE6CisgICAgICAgICAgICAvLyBOb3RpZnkgdGhlIGNsaWVudCB0aGF0IHdlJ3ZlIGV4
Y2VlZGVkIHRoZSBkYXRhYmFzZSBxdW90YS4KKyAgICAgICAgICAgIC8vIFRoZSBjbGllbnQgbWF5
IHdhbnQgdG8gaW5jcmVhc2UgdGhlIHF1b3RhLCBhbmQgd2UnbGwgZ2l2ZSBpdAorICAgICAgICAg
ICAgLy8gb25lIG1vcmUgdHJ5IGFmdGVyIGlmIHRoYXQgaXMgdGhlIGNhc2UuCisgICAgICAgICAg
ICBkYXRhYmFzZUNvbnRleHQtPmRhdGFiYXNlRXhjZWVkZWRRdW90YShuYW1lLAorICAgICAgICAg
ICAgICAgIERhdGFiYXNlRGV0YWlscyhuYW1lLmlzb2xhdGVkQ29weSgpLCBkaXNwbGF5TmFtZS5p
c29sYXRlZENvcHkoKSwgZXN0aW1hdGVkU2l6ZSwgMCkpOworCisgICAgICAgICAgICBlcnJvciA9
IERhdGFiYXNlRXJyb3I6Ok5vbmU7CisKKyAgICAgICAgICAgIGJhY2tlbmQgPSBtX3NlcnZlci0+
b3BlbkRhdGFiYXNlKGJhY2tlbmRDb250ZXh0LCB0eXBlLCBuYW1lLCBleHBlY3RlZFZlcnNpb24s
CisgICAgICAgICAgICAgICAgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIHNldFZlcnNpb25J
bk5ld0RhdGFiYXNlLCBlcnJvciwgZXJyb3JNZXNzYWdlLAorICAgICAgICAgICAgICAgIEFic3Ry
YWN0RGF0YWJhc2VTZXJ2ZXI6OlJldHJ5T3BlbkRhdGFiYXNlKTsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICghYmFja2VuZCkgeworICAgICAgICAgICAgQVNTRVJU
KGVycm9yICE9IERhdGFiYXNlRXJyb3I6Ok5vbmUpOworCisgICAgICAgIGhhbmRsZUludmFsaWRE
YXRhYmFzZVN0YXRlOgorICAgICAgICAgICAgaWYgKGVycm9yID09IERhdGFiYXNlRXJyb3I6Oklu
dmFsaWREYXRhYmFzZVN0YXRlKSB7CisgICAgICAgICAgICAgICAgbG9nRXJyb3JNZXNzYWdlKGNv
bnRleHQsIGVycm9yTWVzc2FnZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgaGFuZGxlRXJyb3I6CisgICAgICAgICAgICBMT0coU3RvcmFnZUFQ
SSwgIkRhdGFiYXNlICVzIGZvciBvcmlnaW4gJXMgbm90IGFsbG93ZWQgdG8gYmUgZXN0YWJsaXNo
ZWQiLCBuYW1lLmFzY2lpKCkuZGF0YSgpLAorICAgICAgICAgICAgICAgIGNvbnRleHQtPnNlY3Vy
aXR5T3JpZ2luKCktPnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gYmFja2VuZC5yZWxlYXNlKCk7
Cit9CisKIFBhc3NSZWZQdHI8RGF0YWJhc2U+IERhdGFiYXNlTWFuYWdlcjo6b3BlbkRhdGFiYXNl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCiAgICAgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFt
ZSwKICAgICB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VD
YWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaywKICAgICBEYXRhYmFzZUVycm9yJiBlcnJvcikKIHsK
ICAgICBTY3JpcHRDb250cm9sbGVyOjppbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0gICAgUmVmUHRy
PERhdGFiYXNlQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0ID0gZGF0YWJhc2VDb250ZXh0Rm9yKGNv
bnRleHQpOwotICAgIFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiBiYWNrZW5kQ29udGV4
dCA9IGRhdGFiYXNlQ29udGV4dC0+YmFja2VuZCgpOwogICAgIEFTU0VSVChlcnJvciA9PSBEYXRh
YmFzZUVycm9yOjpOb25lKTsKIAotICAgIGlmICghbV9zZXJ2ZXItPmNhbkVzdGFibGlzaERhdGFi
YXNlKGJhY2tlbmRDb250ZXh0LmdldCgpLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6
ZSkpIHsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJEYXRhYmFzZSAlcyBmb3Igb3JpZ2luICVz
IG5vdCBhbGxvd2VkIHRvIGJlIGVzdGFibGlzaGVkIiwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgY29u
dGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLQorICAgIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2Ug
PSAhY3JlYXRpb25DYWxsYmFjazsKICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIFJlZlB0
cjxEYXRhYmFzZT4gZGF0YWJhc2UgPSBhZG9wdFJlZihuZXcgRGF0YWJhc2UoYmFja2VuZENvbnRl
eHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKTsK
LQotICAgIGlmICghZGF0YWJhc2UtPm9wZW5BbmRWZXJpZnlWZXJzaW9uKCFjcmVhdGlvbkNhbGxi
YWNrLCBlcnJvciwgZXJyb3JNZXNzYWdlKSkgewotICAgICAgICBsb2dFcnJvck1lc3NhZ2UoY29u
dGV4dCwgZXJyb3JNZXNzYWdlKTsKKyAgICBSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBiYWNrZW5k
ID0gb3BlbkRhdGFiYXNlQmFja2VuZChjb250ZXh0LCBEYXRhYmFzZVR5cGU6OkFzeW5jLCBuYW1l
LAorICAgICAgICBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBz
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZXJyb3IsIGVycm9yTWVzc2FnZSk7CisgICAgaWYgKCFi
YWNrZW5kKQogICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAKLSAgICBtX3NlcnZlci0+c2V0RGF0
YWJhc2VEZXRhaWxzKGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIG5hbWUsIGRpc3BsYXlOYW1l
LCBlc3RpbWF0ZWRTaXplKTsKLSAgICBkYXRhYmFzZUNvbnRleHQtPnNldEhhc09wZW5EYXRhYmFz
ZXMoKTsKKyAgICBSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlID0gRGF0YWJhc2U6OmNyZWF0ZShj
b250ZXh0LCBiYWNrZW5kKTsKIAorICAgIFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGRhdGFiYXNl
Q29udGV4dCA9IGRhdGFiYXNlQ29udGV4dEZvcihjb250ZXh0KTsKKyAgICBkYXRhYmFzZUNvbnRl
eHQtPnNldEhhc09wZW5EYXRhYmFzZXMoKTsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZE9wZW5EYXRhYmFzZShjb250ZXh0LCBkYXRhYmFzZSwgY29udGV4dC0+c2VjdXJpdHlPcmln
aW4oKS0+aG9zdCgpLCBuYW1lLCBleHBlY3RlZFZlcnNpb24pOwogCi0gICAgaWYgKGRhdGFiYXNl
LT5pc05ldygpICYmIGNyZWF0aW9uQ2FsbGJhY2suZ2V0KCkpIHsKKyAgICBpZiAoYmFja2VuZC0+
aXNOZXcoKSAmJiBjcmVhdGlvbkNhbGxiYWNrLmdldCgpKSB7CiAgICAgICAgIExPRyhTdG9yYWdl
QVBJLCAiU2NoZWR1bGluZyBEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrIGZvciBkYXRhYmFz
ZSAlcFxuIiwgZGF0YWJhc2UuZ2V0KCkpOwogICAgICAgICBkYXRhYmFzZS0+bV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5wb3N0VGFzayhEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrOjpjcmVh
dGUoZGF0YWJhc2UsIGNyZWF0aW9uQ2FsbGJhY2spKTsKICAgICB9CiAKKyAgICBBU1NFUlQoZGF0
YWJhc2UpOwogICAgIHJldHVybiBkYXRhYmFzZS5yZWxlYXNlKCk7CiB9CiAKQEAgLTI0MCwzMSAr
MzEzLDI0IEBAIFBhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBEYXRhYmFzZU1hbmFnZXIKICAgICBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBT
dHJpbmcmIGRpc3BsYXlOYW1lLAogICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFz
c1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrLCBEYXRhYmFzZUVycm9y
JiBlcnJvcikKIHsKLSAgICBSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBkYXRhYmFzZUNvbnRleHQg
PSBkYXRhYmFzZUNvbnRleHRGb3IoY29udGV4dCk7Ci0gICAgUmVmUHRyPERhdGFiYXNlQmFja2Vu
ZENvbnRleHQ+IGJhY2tlbmRDb250ZXh0ID0gZGF0YWJhc2VDb250ZXh0LT5iYWNrZW5kKCk7CiAg
ICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICBBU1NFUlQoZXJyb3Ig
PT0gRGF0YWJhc2VFcnJvcjo6Tm9uZSk7CiAKLSAgICBpZiAoIW1fc2VydmVyLT5jYW5Fc3RhYmxp
c2hEYXRhYmFzZShiYWNrZW5kQ29udGV4dC5nZXQoKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGlt
YXRlZFNpemUpKSB7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2UgJXMgZm9yIG9y
aWdpbiAlcyBub3QgYWxsb3dlZCB0byBiZSBlc3RhYmxpc2hlZCIsIG5hbWUuYXNjaWkoKS5kYXRh
KCksIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkp
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KKyAgICBib29sIHNldFZlcnNpb25Jbk5ld0Rh
dGFiYXNlID0gIWNyZWF0aW9uQ2FsbGJhY2s7CiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAg
ICBSZWZQdHI8RGF0YWJhc2VTeW5jPiBkYXRhYmFzZSA9IGFkb3B0UmVmKG5ldyBEYXRhYmFzZVN5
bmMoYmFja2VuZENvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVz
dGltYXRlZFNpemUpKTsKLQotICAgIGlmICghZGF0YWJhc2UtPm9wZW5BbmRWZXJpZnlWZXJzaW9u
KCFjcmVhdGlvbkNhbGxiYWNrLCBlcnJvciwgZXJyb3JNZXNzYWdlKSkgewotICAgICAgICBsb2dF
cnJvck1lc3NhZ2UoY29udGV4dCwgZXJyb3JNZXNzYWdlKTsKKyAgICBSZWZQdHI8RGF0YWJhc2VC
YWNrZW5kPiBiYWNrZW5kID0gb3BlbkRhdGFiYXNlQmFja2VuZChjb250ZXh0LCBEYXRhYmFzZVR5
cGU6OlN5bmMsIG5hbWUsCisgICAgICAgIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVz
dGltYXRlZFNpemUsIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBlcnJvciwgZXJyb3JNZXNzYWdl
KTsKKyAgICBpZiAoIWJhY2tlbmQpCiAgICAgICAgIHJldHVybiAwOwotICAgIH0KIAotICAgIG1f
c2VydmVyLT5zZXREYXRhYmFzZURldGFpbHMoY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgbmFt
ZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpOworICAgIFJlZlB0cjxEYXRhYmFzZVN5bmM+
IGRhdGFiYXNlID0gRGF0YWJhc2VTeW5jOjpjcmVhdGUoY29udGV4dCwgYmFja2VuZCk7CiAKLSAg
ICBpZiAoZGF0YWJhc2UtPmlzTmV3KCkgJiYgY3JlYXRpb25DYWxsYmFjay5nZXQoKSkgeworICAg
IGlmIChiYWNrZW5kLT5pc05ldygpICYmIGNyZWF0aW9uQ2FsbGJhY2suZ2V0KCkpIHsKICAgICAg
ICAgTE9HKFN0b3JhZ2VBUEksICJJbnZva2luZyB0aGUgY3JlYXRpb24gY2FsbGJhY2sgZm9yIGRh
dGFiYXNlICVwXG4iLCBkYXRhYmFzZS5nZXQoKSk7CiAgICAgICAgIGNyZWF0aW9uQ2FsbGJhY2st
PmhhbmRsZUV2ZW50KGRhdGFiYXNlLmdldCgpKTsKICAgICB9CiAKKyAgICBBU1NFUlQoZGF0YWJh
c2UpOwogICAgIHJldHVybiBkYXRhYmFzZS5yZWxlYXNlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuaAko
cmV2aXNpb24gMTQxOTY1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYg
RU5BQkxFKFNRTF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2VTZXJ2ZXIu
aCIKICNpbmNsdWRlICJEYXRhYmFzZUJhc2ljVHlwZXMuaCIKICNpbmNsdWRlICJEYXRhYmFzZURl
dGFpbHMuaCIKICNpbmNsdWRlICJEYXRhYmFzZUVycm9yLmgiCkBAIC04MCw2ICs3OSw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIGRpZERlc3RydWN0RGF0YWJhc2VDb250ZXh0KCkgeyB9CiAjZW5kaWYK
IAorICAgIHN0YXRpYyBFeGNlcHRpb25Db2RlIGV4Y2VwdGlvbkNvZGVGb3JEYXRhYmFzZUVycm9y
KERhdGFiYXNlRXJyb3IpOworCiAgICAgUGFzc1JlZlB0cjxEYXRhYmFzZT4gb3BlbkRhdGFiYXNl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4sIERhdGFiYXNl
RXJyb3ImKTsKICAgICBQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gb3BlbkRhdGFiYXNlU3luYyhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9u
ZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+LCBEYXRhYmFzZUVy
cm9yJik7CiAKQEAgLTEyNCw2ICsxMjUsMTAgQEAgcHJpdmF0ZToKICAgICAvLyBpdCBhbHJlYWR5
IGV4aXN0IHByZXZpb3VzbHkuIE90aGVyd2lzZSwgaXQgcmV0dXJucyAwLgogICAgIFBhc3NSZWZQ
dHI8RGF0YWJhc2VDb250ZXh0PiBleGlzdGluZ0RhdGFiYXNlQ29udGV4dEZvcihTY3JpcHRFeGVj
dXRpb25Db250ZXh0Kik7CiAKKyAgICBQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZD4gb3BlbkRh
dGFiYXNlQmFja2VuZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwKKyAgICAgICAgRGF0YWJhc2VU
eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBj
b25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLAorICAgICAgICB1bnNpZ25lZCBsb25nIGVzdGltYXRl
ZFNpemUsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImLCBTdHJp
bmcmIGVycm9yTWVzc2FnZSk7CisKICAgICBzdGF0aWMgdm9pZCBsb2dFcnJvck1lc3NhZ2UoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAKICAgICBBYnN0
cmFjdERhdGFiYXNlU2VydmVyKiBtX3NlcnZlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuY3BwCShyZXZpc2lvbiAx
NDE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2Vy
dmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsMTEgQEAKIAogI2lmIEVOQUJMRShT
UUxfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNl
QmFja2VuZEFzeW5jLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIkRhdGFiYXNlQmFja2VuZFN5bmMuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVN5bmMuaCIK
ICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0u
aD4KIApAQCAtMTQ5LDE0ICsxNTEsNDUgQEAgdm9pZCBEYXRhYmFzZVNlcnZlcjo6aW50ZXJydXB0
QWxsRGF0YWJhcwogICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmludGVycnVwdEFsbERh
dGFiYXNlc0ZvckNvbnRleHQoY29udGV4dCk7CiB9CiAKLWJvb2wgRGF0YWJhc2VTZXJ2ZXI6OmNh
bkVzdGFibGlzaERhdGFiYXNlKERhdGFiYXNlQmFja2VuZENvbnRleHQqIGJhY2tlbmRDb250ZXh0
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVk
IGxvbmcgZXN0aW1hdGVkU2l6ZSkKLXsKLSAgICByZXR1cm4gRGF0YWJhc2VUcmFja2VyOjp0cmFj
a2VyKCkuY2FuRXN0YWJsaXNoRGF0YWJhc2UoYmFja2VuZENvbnRleHQsIG5hbWUsIGRpc3BsYXlO
YW1lLCBlc3RpbWF0ZWRTaXplKTsKLX0KK1Bhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBEYXRh
YmFzZVNlcnZlcjo6b3BlbkRhdGFiYXNlKFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiYg
YmFja2VuZENvbnRleHQsCisgICAgRGF0YWJhc2VUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5h
bWUsCisgICAgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBib29sIHNldFZlcnNpb25Jbk5l
d0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yICZlcnJvciwgU3RyaW5nJiBlcnJvck1lc3NhZ2UsCisg
ICAgT3BlbkF0dGVtcHQgYXR0ZW1wdCkKK3sKKyAgICBSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBk
YXRhYmFzZTsKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsgLy8gTWFrZSBzb21lIG9sZGVyIGNv
bXBpbGVycyBoYXBweS4KKyAgICAKKyAgICBzd2l0Y2ggKGF0dGVtcHQpIHsKKyAgICBjYXNlIEZp
cnN0VHJ5VG9PcGVuRGF0YWJhc2U6CisgICAgICAgIHN1Y2Nlc3MgPSBEYXRhYmFzZVRyYWNrZXI6
OnRyYWNrZXIoKS5jYW5Fc3RhYmxpc2hEYXRhYmFzZShiYWNrZW5kQ29udGV4dC5nZXQoKSwgbmFt
ZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIGVycm9yKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBSZXRyeU9wZW5EYXRhYmFzZToKKyAgICAgICAgc3VjY2VzcyA9IERhdGFiYXNlVHJh
Y2tlcjo6dHJhY2tlcigpLnJldHJ5Q2FuRXN0YWJsaXNoRGF0YWJhc2UoYmFja2VuZENvbnRleHQu
Z2V0KCksIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBlcnJvcik7CisgICAgfQor
CisgICAgaWYgKHN1Y2Nlc3MpCisgICAgICAgIGRhdGFiYXNlID0gY3JlYXRlRGF0YWJhc2UoYmFj
a2VuZENvbnRleHQsIHR5cGUsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVz
dGltYXRlZFNpemUsIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBlcnJvciwgZXJyb3JNZXNzYWdl
KTsKKyAgICByZXR1cm4gZGF0YWJhc2UucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPERhdGFi
YXNlQmFja2VuZD4gRGF0YWJhc2VTZXJ2ZXI6OmNyZWF0ZURhdGFiYXNlKFJlZlB0cjxEYXRhYmFz
ZUJhY2tlbmRDb250ZXh0PiYgYmFja2VuZENvbnRleHQsCisgICAgRGF0YWJhc2VUeXBlIHR5cGUs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0
IFN0cmluZyYgZGlzcGxheU5hbWUsCisgICAgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBi
b29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiBlcnJvciwgU3RyaW5n
JiBlcnJvck1lc3NhZ2UpCit7CisgICAgUmVmUHRyPERhdGFiYXNlQmFja2VuZD4gZGF0YWJhc2U7
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBEYXRhYmFzZVR5cGU6OkFzeW5jOgorICAg
ICAgICBkYXRhYmFzZSA9IGFkb3B0UmVmKG5ldyBEYXRhYmFzZShiYWNrZW5kQ29udGV4dCwgbmFt
ZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIERhdGFiYXNlVHlwZTo6U3luYzoKKyAgICAgICAgZGF0YWJhc2Ug
PSBhZG9wdFJlZihuZXcgRGF0YWJhc2VTeW5jKGJhY2tlbmRDb250ZXh0LCBuYW1lLCBleHBlY3Rl
ZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSk7CisgICAgfQogCi12b2lkIERh
dGFiYXNlU2VydmVyOjpzZXREYXRhYmFzZURldGFpbHMoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUpCi17Ci0gICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0
RGF0YWJhc2VEZXRhaWxzKG9yaWdpbiwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUp
OworICAgIGlmICghZGF0YWJhc2UtPm9wZW5BbmRWZXJpZnlWZXJzaW9uKHNldFZlcnNpb25Jbk5l
d0RhdGFiYXNlLCBlcnJvciwgZXJyb3JNZXNzYWdlKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXREYXRhYmFzZURldGFpbHMoYmFja2VuZENv
bnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXpl
KTsKKyAgICByZXR1cm4gZGF0YWJhc2UucmVsZWFzZSgpOwogfQogCiB1bnNpZ25lZCBsb25nIGxv
bmcgRGF0YWJhc2VTZXJ2ZXI6OmdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBEYXRhYmFzZUJh
Y2tlbmQqIGRhdGFiYXNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZVNlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuaAkocmV2aXNpb24gMTQxOTY1KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVNlcnZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw2ICs0NSw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgU3RyaW5nIGZ1bGxQ
YXRoRm9yRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wg
Y3JlYXRlSWZEb2VzTm90RXhpc3QpOwogCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPERhdGFiYXNl
QmFja2VuZD4gb3BlbkRhdGFiYXNlKFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiYsIERh
dGFiYXNlVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVy
c2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplLCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiwgU3RyaW5n
JiBlcnJvck1lc3NhZ2UsIE9wZW5BdHRlbXB0KTsKKwogI2lmICFQTEFURk9STShDSFJPTUlVTSkK
ICAgICB2aXJ0dWFsIGJvb2wgaGFzRW50cnlGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qKTsKICAg
ICB2aXJ0dWFsIHZvaWQgb3JpZ2lucyhWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+JiBy
ZXN1bHQpOwpAQCAtNzAsMTAgKzcyLDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBp
bnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IERhdGFiYXNlQmFja2VuZENvbnRl
eHQqKTsKIAotICAgIHZpcnR1YWwgYm9vbCBjYW5Fc3RhYmxpc2hEYXRhYmFzZShEYXRhYmFzZUJh
Y2tlbmRDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlO
YW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwotCi0gICAgdmlydHVhbCB2b2lkIHNl
dERhdGFiYXNlRGV0YWlscyhTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3Qg
RGF0YWJhc2VCYWNrZW5kKik7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
RGF0YWJhc2VCYWNrZW5kPiBjcmVhdGVEYXRhYmFzZShSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29u
dGV4dD4mLCBEYXRhYmFzZVR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBl
eHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcg
ZXN0aW1hdGVkU2l6ZSwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJv
ciYsIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlU3luYy5jcHAJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEs
MTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4g
RGF0YWJhc2VTeW5jOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
RGF0YWJhc2VCYWNrZW5kPiBiYWNrZW5kKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRh
YmFzZVN5bmMqPihiYWNrZW5kLmdldCgpKTsKK30KKwogRGF0YWJhc2VTeW5jOjpEYXRhYmFzZVN5
bmMoUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiBkYXRhYmFzZUNvbnRleHQsCiAg
ICAgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29u
c3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQogICAg
IDogRGF0YWJhc2VCYXNlKGRhdGFiYXNlQ29udGV4dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KQpAQCAtMTU0LDE0ICsxNTksNiBAQCB2b2lkIERhdGFiYXNlU3luYzo6cnVuVHJhbnNhY3Rpb24o
UGFzc1JlCiAgICAgc2V0TGFzdEVycm9yTWVzc2FnZSgiIik7CiB9CiAKLWJvb2wgRGF0YWJhc2VT
eW5jOjpvcGVuQW5kVmVyaWZ5VmVyc2lvbihib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBE
YXRhYmFzZUVycm9yJiBlcnJvciwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCi17Ci0jaWYgUExBVEZP
Uk0oQ0hST01JVU0pCi0gICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucHJlcGFyZVRvT3Bl
bkRhdGFiYXNlKHRoaXMpOwotI2VuZGlmCi0gICAgcmV0dXJuIHBlcmZvcm1PcGVuQW5kVmVyaWZ5
KHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBlcnJvciwgZXJyb3JNZXNzYWdlKTsKLX0KLQogdm9p
ZCBEYXRhYmFzZVN5bmM6Om1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpCiB7CiAgICAgLy8gRklYTUU6
IG5lZWQgdG8gZG8gc29tZXRoaW5nIHNpbWlsYXIgdG8gY2xvc2VJbW1lZGlhdGVseSgpLCBidXQg
aW4gYSBzeW5jIHdheQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZVN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlU3luYy5oCShyZXZpc2lvbiAxNDE5NjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5oCSh3b3JraW5nIGNvcHkpCkBAIC03
NywxNSArNzcsMTQgQEAgcHJpdmF0ZToKICAgICBEYXRhYmFzZVN5bmMoUGFzc1JlZlB0cjxEYXRh
YmFzZUJhY2tlbmRDb250ZXh0PiwgY29uc3QgU3RyaW5nJiBuYW1lLAogICAgICAgICBjb25zdCBT
dHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWdu
ZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKICAgICBQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZFN5
bmM+IGJhY2tlbmQoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IGNyZWF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+KTsK
IAogICAgIHZvaWQgcnVuVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmND
YWxsYmFjaz4sIGJvb2wgcmVhZE9ubHksIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIGJvb2wgb3Bl
bkFuZFZlcmlmeVZlcnNpb24oYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VF
cnJvciYsIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKLQogICAgIFN0cmluZyBtX2xhc3RFcnJvck1l
c3NhZ2U7CiAKICAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2VNYW5hZ2VyOwotICAgIGZyaWVuZCBj
bGFzcyBEYXRhYmFzZUJhY2tlbmRTeW5jOyAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB0aGUg
YmFja2VuZCBoYXMgYmVlbiBzcGxpdCBvdXQuCisgICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlU2Vy
dmVyOyAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB0aGUgYmFja2VuZCBoYXMgYmVlbiBzcGxp
dCBvdXQuCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCShy
ZXZpc2lvbiAxNDE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlVHJhY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw0NyArMTQyLDEwNyBAQCB2
b2lkIERhdGFiYXNlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzCiAgICAgfQogfQogCi1ib29s
IERhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kQ29u
dGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlO
YW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCitib29sIERhdGFiYXNlVHJhY2tlcjo6
aGFzQWRlcXVhdGVRdW90YUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luLCB1bnNpZ25l
ZCBsb25nIGVzdGltYXRlZFNpemUsIERhdGFiYXNlRXJyb3ImIGVycikKIHsKLSAgICBTZWN1cml0
eU9yaWdpbiogb3JpZ2luID0gY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKTsKLSAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgcmVxdWlyZW1lbnQ7Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2Nr
RGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKLSAgICAgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFu
YWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKKyAgICAvLyBT
aW5jZSB3ZSdyZSBpbW1pbmVudGx5IG9wZW5pbmcgYSBkYXRhYmFzZSB3aXRoaW4gdGhpcyBjb250
ZXh0J3Mgb3JpZ2luLAorICAgIC8vIG1ha2Ugc3VyZSB0aGlzIG9yaWdpbiBpcyBiZWluZyB0cmFj
a2VkIGJ5IHRoZSBPcmlnaW5RdW90YU1hbmFnZXIKKyAgICAvLyBieSBmZXRjaGluZyBpdHMgY3Vy
cmVudCB1c2FnZSBub3cuIENhbGxpbmcgdXNhZ2VGb3JPcmlnaW4oKSBoYXMgdGhlIHNpZGUKKyAg
ICAvLyBlZmZlY3Qgb2YgaW5pdGlhdGluZyB0cmFja2luZyBieSB0aGUgT3JpZ2luUXVvdGFNYW5h
Z2VyIGlmIHRoZSBvcmlnaW4gaXMKKyAgICAvLyBub3QgYWxyZWFkeSB0cmFja2VkLgorICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyB1c2FnZSA9IHVzYWdlRm9yT3JpZ2luTm9Mb2NrKG9yaWdpbik7CisK
KyAgICAvLyBJZiB0aGUgZGF0YWJhc2Ugd2lsbCBmaXQsIGFsbG93IGl0cyBjcmVhdGlvbi4KKyAg
ICB1bnNpZ25lZCBsb25nIGxvbmcgcmVxdWlyZW1lbnQgPSB1c2FnZSArIG1heCgxVUwsIGVzdGlt
YXRlZFNpemUpOworICAgIGlmIChyZXF1aXJlbWVudCA8IHVzYWdlKSB7CisgICAgICAgIC8vIFRo
ZSBlc3RpbWF0ZWQgc2l6ZSBpcyBzbyBiaWcgaXQgY2F1c2VzIGFuIG92ZXJmbG93OyBkb24ndCBh
bGxvdyBjcmVhdGlvbi4KKyAgICAgICAgZXJyID0gRGF0YWJhc2VFcnJvcjo6RGF0YWJhc2VTaXpl
T3ZlcmZsb3dlZDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAocmVxdWly
ZW1lbnQgPD0gcXVvdGFGb3JPcmlnaW5Ob0xvY2sob3JpZ2luKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICAgICAgaWYgKGlzRGVsZXRpbmdEYXRhYmFzZU9yT3JpZ2luRm9yKG9yaWdpbiwg
bmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZXJyID0gRGF0YWJhc2VFcnJv
cjo6RGF0YWJhc2VTaXplRXhjZWVkZWRRdW90YTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgRGF0YWJhc2VUcmFja2VyOjpjYW5Fc3RhYmxpc2hEYXRhYmFzZShEYXRhYmFzZUJhY2tlbmRD
b250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxh
eU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgRGF0YWJhc2VFcnJvciYgZXJyb3Ip
Cit7CisgICAgVU5VU0VEX1BBUkFNKGRpc3BsYXlOYW1lKTsgLy8gQ2hyb21pdW0gbmVlZHMgdGhl
IGRpc3BsYXlOYW1lIGJ1dCB3ZSBkb24ndC4KKyAgICBlcnJvciA9IERhdGFiYXNlRXJyb3I6Ok5v
bmU7CisKKyAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAg
ICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVv
dGFNYW5hZ2VyKCkpOworICAgIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBjb250ZXh0LT5zZWN1
cml0eU9yaWdpbigpOwogCi0gICAgICAgIHJlY29yZENyZWF0aW5nRGF0YWJhc2Uob3JpZ2luLCBu
YW1lKTsKKyAgICBpZiAoaXNEZWxldGluZ0RhdGFiYXNlT3JPcmlnaW5Gb3Iob3JpZ2luLCBuYW1l
KSkgeworICAgICAgICBlcnJvciA9IERhdGFiYXNlRXJyb3I6OkRhdGFiYXNlSXNCZWluZ0RlbGV0
ZWQ7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICAgICAgLy8gU2luY2Ugd2Un
cmUgaW1taW5lbnRseSBvcGVuaW5nIGEgZGF0YWJhc2Ugd2l0aGluIHRoaXMgY29udGV4dCdzIG9y
aWdpbiwgbWFrZSBzdXJlIHRoaXMgb3JpZ2luIGlzIGJlaW5nIHRyYWNrZWQgYnkgdGhlIFF1b3Rh
VHJhY2tlcgotICAgICAgICAvLyBieSBmZXRjaGluZyBpdHMgY3VycmVudCB1c2FnZSBub3cuCi0g
ICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1c2FnZSA9IHVzYWdlRm9yT3JpZ2luTm9Mb2NrKG9y
aWdpbik7CisgICAgcmVjb3JkQ3JlYXRpbmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwogCi0gICAg
ICAgIC8vIElmIGEgZGF0YWJhc2UgYWxyZWFkeSBleGlzdHMsIGlnbm9yZSB0aGUgcGFzc2VkLWlu
IGVzdGltYXRlZCBzaXplIGFuZCBzYXkgaXQncyBPSy4KLSAgICAgICAgaWYgKGhhc0VudHJ5Rm9y
RGF0YWJhc2Uob3JpZ2luLCBuYW1lKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIC8v
IElmIGEgZGF0YWJhc2UgYWxyZWFkeSBleGlzdHMsIGlnbm9yZSB0aGUgcGFzc2VkLWluIGVzdGlt
YXRlZCBzaXplIGFuZCBzYXkgaXQncyBPSy4KKyAgICBpZiAoaGFzRW50cnlGb3JEYXRhYmFzZShv
cmlnaW4sIG5hbWUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICAvLyBJZiB0aGUg
ZGF0YWJhc2Ugd2lsbCBmaXQsIGFsbG93IGl0cyBjcmVhdGlvbi4KLSAgICAgICAgcmVxdWlyZW1l
bnQgPSB1c2FnZSArIG1heCgxVUwsIGVzdGltYXRlZFNpemUpOwotICAgICAgICBpZiAocmVxdWly
ZW1lbnQgPCB1c2FnZSkgewotICAgICAgICAgICAgZG9uZUNyZWF0aW5nRGF0YWJhc2Uob3JpZ2lu
LCBuYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gSWYgdGhlIGVzdGltYXRlZCBz
aXplIGlzIHNvIGJpZyBpdCBjYXVzZXMgYW4gb3ZlcmZsb3csIGRvbid0IGFsbG93IGNyZWF0aW9u
LgotICAgICAgICB9Ci0gICAgICAgIGlmIChyZXF1aXJlbWVudCA8PSBxdW90YUZvck9yaWdpbk5v
TG9jayhvcmlnaW4pKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGhhc0FkZXF1
YXRlUXVvdGFGb3JPcmlnaW4ob3JpZ2luLCBlc3RpbWF0ZWRTaXplLCBlcnJvcikpIHsKKyAgICAg
ICAgQVNTRVJUKGVycm9yID09IERhdGFiYXNlRXJyb3I6Ok5vbmUpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICAvLyBHaXZlIHRoZSBjaHJvbWUgY2xpZW50IGEgY2hhbmNlIHRv
IGluY3JlYXNlIHRoZSBxdW90YS4KLSAgICAvLyBEcm9wIGFsbCBsb2NrcyBiZWZvcmUgY2FsbGlu
ZyBvdXQ7IHdlIGRvbid0IGtub3cgd2hhdCB0aGV5J2xsIGRvLgotICAgIGNvbnRleHQtPmRhdGFi
YXNlRXhjZWVkZWRRdW90YShuYW1lLCBEYXRhYmFzZURldGFpbHMobmFtZS5pc29sYXRlZENvcHko
KSwgZGlzcGxheU5hbWUuaXNvbGF0ZWRDb3B5KCksIGVzdGltYXRlZFNpemUsIDApKTsKKyAgICAv
LyBJZiB3ZSBnZXQgaGVyZSwgdGhlbiB3ZSBkbyBub3QgaGF2ZSBlbm91Z2ggcXVvdGEgZm9yIG9u
ZSBvZiB0aGUKKyAgICAvLyBmb2xsb3dpbmcgcmVhc29ucyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHNl
dCBlcnJvcjoKKyAgICAvLworICAgIC8vIElmIHRoZSBlcnJvciBpcyBEYXRhYmFzZVNpemVPdmVy
Zmxvd2VkLCB0aGVuIHRoaXMgbWVhbnMgdGhlIHJlcXVlc3RlZAorICAgIC8vIGVzdGltYXRlZFNp
emUgaWYgc28gdW5yZWFzb25hYmx5IGxhcmdlIHRoYXQgaXQgY2FuIGNhdXNlIGFuIG92ZXJmbG93
IGluCisgICAgLy8gdGhlIHVzYWdlIGJ1ZGdldCBjb21wdXRhdGlvbi4gSW4gdGhhdCBjYXNlLCB0
aGVyZSdzIG5vdGhpbmcgbW9yZSB3ZSBjYW4KKyAgICAvLyBkbywgYW5kIHRoZXJlJ3Mgbm8gbmVl
ZCBmb3IgYSByZXRyeS4gSGVuY2UsIHdlIHNob3VsZCBpbmRpY2F0ZSB0aGF0CisgICAgLy8gd2Un
cmUgZG9uZSB3aXRoIG91ciBhdHRlbXB0IHRvIGNyZWF0ZSB0aGUgZGF0YWJhc2UuCisgICAgLy8K
KyAgICAvLyBJZiB0aGUgZXJyb3IgaXMgRGF0YWJhc2VTaXplRXhjZWVkZWRRdW90YSwgdGhlbiB3
ZSdsbCBnaXZlIHRoZSBjbGllbnQKKyAgICAvLyBhIGNoYW5jZSB0byB1cGRhdGUgdGhlIHF1b3Rh
IGFuZCBjYWxsIHJldHJ5Q2FuRXN0YWJsaXNoRGF0YWJhc2UoKSB0byB0cnkKKyAgICAvLyBhZ2Fp
bi4gSGVuY2UsIHdlIGRvbid0IGNhbGwgZG9uZUNyZWF0aW5nRGF0YWJhc2UoKSB5ZXQgaW4gdGhh
dCBjYXNlLgorCisgICAgaWYgKGVycm9yID09IERhdGFiYXNlRXJyb3I6OkRhdGFiYXNlU2l6ZU92
ZXJmbG93ZWQpCisgICAgICAgIGRvbmVDcmVhdGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7Cisg
ICAgZWxzZQorICAgICAgICBBU1NFUlQoZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6RGF0YWJhc2VT
aXplRXhjZWVkZWRRdW90YSk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIE5vdGU6IGEg
dGhvdWdodCBhYm91dCBwZXJmb3JtYW5jZTogaGFzQWRlcXVhdGVRdW90YUZvck9yaWdpbigpIHdh
cyBhbHNvCisvLyBjYWxsZWQgaW4gY2FuRXN0YWJsaXNoRGF0YWJhc2UoKSwgYW5kIGhlbmNlLCB3
ZSdyZSByZXBlYXRpbmcgc29tZSB3b3JrIHdpdGhpbgorLy8gaGFzQWRlcXVhdGVRdW90YUZvck9y
aWdpbigpLiBIb3dldmVyLCByZXRyeUNhbkVzdGFibGlzaERhdGFiYXNlKCkgc2hvdWxkIG9ubHkK
Ky8vIGJlIGNhbGxlZCBpbiB0aGUgcmFyZSBldmVuIGlmIGNhbkVzdGFibGlzaERhdGFiYXNlKCkg
ZmFpbHMuIFNpbmNlIGl0IGlzIHJhcmUsCisvLyB3ZSBzaG91bGQgbm90IGJvdGhlciBvcHRpbWl6
aW5nIGl0LiBJdCBpcyBtb3JlIGJlbmVmaWNpYWwgdG8ga2VlcAorLy8gaGFzQWRlcXVhdGVRdW90
YUZvck9yaWdpbigpIHNpbXBsZSBhbmQgY29ycmVjdCAoaS5lLiBidWcgZnJlZSksIGFuZCBqdXN0
CisvLyByZS11c2UgaXQuIEFsc28gbm90ZSB0aGF0IHRoZSBwYXRoIGZvciBvcGVuaW5nIGEgZGF0
YWJhc2UgaW52b2x2ZXMgSU8sIGFuZAorLy8gaGVuY2Ugc2hvdWxkIG5vdCBiZSBhIHBlcmZvcm1h
bmNlIGNyaXRpY2FsIHBhdGggYW55d2F5LiAKK2Jvb2wgRGF0YWJhc2VUcmFja2VyOjpyZXRyeUNh
bkVzdGFibGlzaERhdGFiYXNlKERhdGFiYXNlQmFja2VuZENvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBl
c3RpbWF0ZWRTaXplLCBEYXRhYmFzZUVycm9yJiBlcnJvcikKK3sKKyAgICAvLyBDaHJvbWl1bSBu
ZWVkcyB0aGUgZGlzcGxheU5hbWUgaW4gY2FuRXN0YWJsaXNoRGF0YWJhc2UoKSwgYnV0IHdlIGRv
bid0LgorICAgIC8vIFRob3VnaCBDaHJvbWl1bSBkb2VzIG5vdCB1c2UgcmV0cnlDYW5Fc3RhYmxp
c2hEYXRhYmFzZSgpLCB3ZSBzaG91bGQKKyAgICAvLyBrZWVwIHRoZSBwcm90b3R5cGVzIGZvciBj
YW5Fc3RhYmxpc2hEYXRhYmFzZSgpIGFuZCBpdHMgcmV0cnkgZnVuY3Rpb24KKyAgICAvLyB0aGUg
c2FtZS4gSGVuY2UsIHdlIGFsc28gaGF2ZSBhbiB1bm5lZWRlZCBkaXNwbGF5TmFtZSBhcmcgaGVy
ZS4KKyAgICBVTlVTRURfUEFSQU0oZGlzcGxheU5hbWUpOworICAgIGVycm9yID0gRGF0YWJhc2VF
cnJvcjo6Tm9uZTsKIAogICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3Vh
cmQpOworICAgIExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tlcihv
cmlnaW5RdW90YU1hbmFnZXIoKSk7CisgICAgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IGNvbnRl
eHQtPnNlY3VyaXR5T3JpZ2luKCk7CiAKLSAgICAvLyBJZiB0aGUgZGF0YWJhc2Ugd2lsbCBmaXQg
bm93LCBhbGxvdyBpdHMgY3JlYXRpb24uCi0gICAgaWYgKHJlcXVpcmVtZW50IDw9IHF1b3RhRm9y
T3JpZ2luTm9Mb2NrKG9yaWdpbikpCisgICAgLy8gV2UgaGF2ZSBhbHJlYWR5IGVsaW1pbmF0ZWQg
b3RoZXIgdHlwZXMgb2YgZXJyb3JzIGluIGNhbkVzdGFibGlzaERhdGFiYXNlKCkuCisgICAgLy8g
VGhlIG9ubHkgcmVhc29uIHdlJ3JlIGluIHJldHJ5Q2FuRXN0YWJsaXNoRGF0YWJhc2UoKSBpcyBi
ZWNhdXNlIHdlIGdhdmUKKyAgICAvLyB0aGUgY2xpZW50IGEgY2hhbmNlIHRvIHVwZGF0ZSB0aGUg
cXVvdGEgYW5kIGFyZSByZWNoZWNraW5nIGl0IGhlcmUuCisgICAgLy8gSWYgd2UgZmFpbCB0aGlz
IGNoZWNrLCB0aGUgb25seSBwb3NzaWJsZSByZWFzb24gdGhpcyB0aW1lIHNob3VsZCBiZSBkdWUK
KyAgICAvLyB0byBpbmFkZXF1YXRlIHF1b3RhLgorICAgIGlmIChoYXNBZGVxdWF0ZVF1b3RhRm9y
T3JpZ2luKG9yaWdpbiwgZXN0aW1hdGVkU2l6ZSwgZXJyb3IpKSB7CisgICAgICAgIEFTU0VSVChl
cnJvciA9PSBEYXRhYmFzZUVycm9yOjpOb25lKTsKICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQogCisgICAgQVNTRVJUKGVycm9yID09IERhdGFiYXNlRXJyb3I6OkRhdGFiYXNlU2l6ZUV4Y2Vl
ZGVkUXVvdGEpOwogICAgIGRvbmVDcmVhdGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7CiAKICAg
ICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlVHJhY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmgJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKKyNp
bmNsdWRlICJEYXRhYmFzZUVycm9yLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KQEAg
LTcwLDcgKzcxLDkgQEAgcHVibGljOgogICAgIC8vIG1fZGF0YWJhc2VHdWFyZCBhbmQgbV9vcGVu
RGF0YWJhc2VNYXBHdWFyZCBjdXJyZW50bHkgZG9uJ3Qgb3ZlcmxhcC4KICAgICAvLyBub3RpZmlj
YXRpb25NdXRleCgpIGlzIGN1cnJlbnRseSBpbmRlcGVuZGVudCBvZiB0aGUgb3RoZXIgbG9ja3Mu
CiAKLSAgICBib29sIGNhbkVzdGFibGlzaERhdGFiYXNlKERhdGFiYXNlQmFja2VuZENvbnRleHQq
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVk
IGxvbmcgZXN0aW1hdGVkU2l6ZSk7CisgICAgYm9vbCBjYW5Fc3RhYmxpc2hEYXRhYmFzZShEYXRh
YmFzZUJhY2tlbmRDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRp
c3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIERhdGFiYXNlRXJyb3ImKTsK
KyAgICBib29sIHJldHJ5Q2FuRXN0YWJsaXNoRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kQ29udGV4
dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWdu
ZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBEYXRhYmFzZUVycm9yJik7CisKICAgICB2b2lkIHNldERh
dGFiYXNlRGV0YWlscyhTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKICAgICBT
dHJpbmcgZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYg
bmFtZSwgYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCA9IHRydWUpOwogCkBAIC04Niw2ICs4OSw4
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgRGF0YWJhc2VUcmFja2VyKGNvbnN0
IFN0cmluZyYgZGF0YWJhc2VQYXRoKTsKIAorICAgIGJvb2wgaGFzQWRlcXVhdGVRdW90YUZvck9y
aWdpbihTZWN1cml0eU9yaWdpbiosIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgRGF0YWJh
c2VFcnJvciYpOworCiAjaWYgIVBMQVRGT1JNKENIUk9NSVVNKQogcHVibGljOgogICAgIHZvaWQg
c2V0RGF0YWJhc2VEaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9Xb3JrZXJDb250ZXh0V2ViRGF0YWJhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvV29ya2VyQ29u
dGV4dFdlYkRhdGFiYXNlLmNwcAkocmV2aXNpb24gMTQxOTY1KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9Xb3JrZXJDb250ZXh0V2ViRGF0YWJhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NSwxMyArNDUsMTEgQEAgUGFzc1JlZlB0cjxEYXRhYmFzZT4gV29ya2VyQ29u
dGV4dFdlYkRhdAogICAgIERhdGFiYXNlTWFuYWdlciYgZGJNYW5hZ2VyID0gRGF0YWJhc2VNYW5h
Z2VyOjptYW5hZ2VyKCk7CiAgICAgUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZTsKICAgICBEYXRh
YmFzZUVycm9yIGVycm9yID0gRGF0YWJhc2VFcnJvcjo6Tm9uZTsKLSAgICBpZiAoZGJNYW5hZ2Vy
LmlzQXZhaWxhYmxlKCkgJiYgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0
YWJhc2UoY29udGV4dC0+dG9wT3JpZ2luKCkpKQorICAgIGlmIChkYk1hbmFnZXIuaXNBdmFpbGFi
bGUoKSAmJiBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZShjb250
ZXh0LT50b3BPcmlnaW4oKSkpIHsKICAgICAgICAgZGF0YWJhc2UgPSBkYk1hbmFnZXIub3BlbkRh
dGFiYXNlKGNvbnRleHQsIG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXpl
LCBjcmVhdGlvbkNhbGxiYWNrLCBlcnJvcik7Ci0KLSAgICBBU1NFUlQoZXJyb3IgPT0gRGF0YWJh
c2VFcnJvcjo6Tm9uZSB8fCBlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpDYW5ub3RPcGVuRGF0YWJh
c2UpOwotICAgIGlmIChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpDYW5ub3RPcGVuRGF0YWJhc2Up
Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgaWYgKCFkYXRhYmFzZSAmJiAh
ZWMpCisgICAgICAgIEFTU0VSVChkYXRhYmFzZSB8fCBlcnJvciAhPSBEYXRhYmFzZUVycm9yOjpO
b25lKTsKKyAgICAgICAgZWMgPSBEYXRhYmFzZU1hbmFnZXI6OmV4Y2VwdGlvbkNvZGVGb3JEYXRh
YmFzZUVycm9yKGVycm9yKTsKKyAgICB9IGVsc2UKICAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7
CiAKICAgICByZXR1cm4gZGF0YWJhc2UucmVsZWFzZSgpOwpAQCAtNjIsMTMgKzYwLDEyIEBAIFBh
c3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBXb3JrZXJDb250ZXh0V2UKICAgICBEYXRhYmFzZU1hbmFn
ZXImIGRiTWFuYWdlciA9IERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpOwogICAgIFJlZlB0cjxE
YXRhYmFzZVN5bmM+IGRhdGFiYXNlOwogICAgIERhdGFiYXNlRXJyb3IgZXJyb3IgPSAgRGF0YWJh
c2VFcnJvcjo6Tm9uZTsKLSAgICBpZiAoZGJNYW5hZ2VyLmlzQXZhaWxhYmxlKCkgJiYgY29udGV4
dC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoY29udGV4dC0+dG9wT3JpZ2lu
KCkpKQorICAgIGlmIChkYk1hbmFnZXIuaXNBdmFpbGFibGUoKSAmJiBjb250ZXh0LT5zZWN1cml0
eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZShjb250ZXh0LT50b3BPcmlnaW4oKSkpIHsKICAg
ICAgICAgZGF0YWJhc2UgPSBkYk1hbmFnZXIub3BlbkRhdGFiYXNlU3luYyhjb250ZXh0LCBuYW1l
LCB2ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgY3JlYXRpb25DYWxsYmFjaywg
ZXJyb3IpOwogCi0gICAgQVNTRVJUKGVycm9yID09IERhdGFiYXNlRXJyb3I6Ok5vbmUgfHwgZXJy
b3IgPT0gRGF0YWJhc2VFcnJvcjo6Q2Fubm90T3BlbkRhdGFiYXNlKTsKLSAgICBpZiAoZXJyb3Ig
PT0gRGF0YWJhc2VFcnJvcjo6Q2Fubm90T3BlbkRhdGFiYXNlKQotICAgICAgICBlYyA9IElOVkFM
SURfU1RBVEVfRVJSOwotICAgIGlmICghZGF0YWJhc2UgJiYgIWVjKQorICAgICAgICBBU1NFUlQo
ZGF0YWJhc2UgfHwgZXJyb3IgIT0gRGF0YWJhc2VFcnJvcjo6Tm9uZSk7CisgICAgICAgIGVjID0g
RGF0YWJhc2VNYW5hZ2VyOjpleGNlcHRpb25Db2RlRm9yRGF0YWJhc2VFcnJvcihlcnJvcik7Cisg
ICAgfSBlbHNlCiAgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwogCiAgICAgcmV0dXJuIGRhdGFi
YXNlLnJlbGVhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
Y2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hy
b21pdW0uY3BwCShyZXZpc2lvbiAxNDE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5j
bHVkZSAiU2VjdXJpdHlPcmlnaW5IYXNoLmgiCiAjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5o
IgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC01NywxMCArNTgsMTkg
QEAgRGF0YWJhc2VUcmFja2VyOjpEYXRhYmFzZVRyYWNrZXIoY29uc3QgUwogICAgIFNRTGl0ZUZp
bGVTeXN0ZW06OnJlZ2lzdGVyU1FMaXRlVkZTKCk7CiB9CiAKLWJvb2wgRGF0YWJhc2VUcmFja2Vy
OjpjYW5Fc3RhYmxpc2hEYXRhYmFzZShEYXRhYmFzZUJhY2tlbmRDb250ZXh0KiBkYXRhYmFzZUNv
bnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5z
aWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQorYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmNhbkVzdGFi
bGlzaERhdGFiYXNlKERhdGFiYXNlQmFja2VuZENvbnRleHQqIGRhdGFiYXNlQ29udGV4dCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25n
IGVzdGltYXRlZFNpemUsIERhdGFiYXNlRXJyb3ImIGVycm9yKQogewogICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBkYXRhYmFzZUNvbnRleHQtPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICByZXR1cm4gRGF0YWJhc2VPYnNlcnZlcjo6Y2Fu
RXN0YWJsaXNoRGF0YWJhc2Uoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgbmFtZSwgZGlzcGxheU5h
bWUsIGVzdGltYXRlZFNpemUpOworICAgIGJvb2wgc3VjY2VzcyA9IERhdGFiYXNlT2JzZXJ2ZXI6
OmNhbkVzdGFibGlzaERhdGFiYXNlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG5hbWUsIGRpc3Bs
YXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIGVycm9y
ID0gRGF0YWJhc2VFcnJvcjo6R2VuZXJpY1NlY3VyaXR5RXJyb3I7CisgICAgcmV0dXJuIHN1Y2Nl
c3M7Cit9CisKK2Jvb2wgRGF0YWJhc2VUcmFja2VyOjpyZXRyeUNhbkVzdGFibGlzaERhdGFiYXNl
KERhdGFiYXNlQmFja2VuZENvbnRleHQqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCB1
bnNpZ25lZCBsb25nLCBEYXRhYmFzZUVycm9yJikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpzZXREYXRh
YmFzZURldGFpbHMoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
LCB1bnNpZ25lZCBsb25nKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186911</attachid>
            <date>2013-02-06 13:41:44 -0800</date>
            <delta_ts>2013-02-06 13:47:00 -0800</delta_ts>
            <desc>No more gotos.</desc>
            <filename>bug-107475.patch</filename>
            <type>text/plain</type>
            <size>47982</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTk2OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk3IEBACisyMDEzLTAyLTA1ICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBvcGVuRGF0YWJhc2UoKSBi
ZXR3ZWVuIGZyb250IGFuZCBiYWNrIGVuZCB3b3JrLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3NDc1LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBtYWluIHdvcmsgb2Ygc3BsaXR0aW5nIERhdGFi
YXNlTWFuYWdlcjo6b3BlbkRhdGFiYXNlKCkgaXMgaW4KKyAgICAgICAgcmVmYWN0b3JpbmcgaG93
IERhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2UoKSB3b3Jrcy4gSXQgdXNlZAor
ICAgICAgICB0byBjaGVjayBmb3IgYWRlcXVhdGUgc3BhY2UgcXVvdGEsIGFuZCBpZiB0aGUgY2hl
Y2sgZmFpbHMsIGl0IHdvdWxkIGNhbGwKKyAgICAgICAgYmFjayBpbnRvIHRoZSBjbGllbnQgZnJv
bSBpbnNpZGUgY2FuRXN0YWJsaXNoRGF0YWJhc2UoKS4gVGhlIGNhbGwgYmFjaworICAgICAgICBh
bGxvd3MgdGhlIGNsaWVudCB0byB1cGRhdGUgdGhlIHF1b3RhIChpZiBhcHByb3ByaWF0ZSkuIFRo
ZXJlYWZ0ZXIsCisgICAgICAgIGNhbkVzdGFibGlzaERhdGFiYXNlKCkgd2lsbCByZXRyeSBpdHMg
cXVvdGEgY2hlY2suCisKKyAgICAgICAgSW4gYSB3ZWJraXQyIHdvcmxkLCB3ZSdsbCB3YW50IHRv
IG1pbmltaXplIHRoZSB0cmFmZmljIGJldHdlZW4gdGhlCisgICAgICAgIGNsaWVudCAoc2NyaXB0
IHNpZGUpIGFuZCB0aGUgc2VydmVyIChzcWxpdGUgZGIgc2lkZSksIGFuZCBpZGVhbGx5LCB3ZQor
ICAgICAgICBkb24ndCB3YW50IHRoZSBzZXJ2ZXIgdG8gY2FsbCBiYWNrIHRvIHRoZSBjbGllbnQu
IE5vdGU6IHRoZQorICAgICAgICBEYXRhYmFzZVRyYWNrZXIgYmVsb25ncyBvbiB0aGUgc2VydmVy
IHNpZGUuCisKKyAgICAgICAgVG8gYWNoaWV2ZSB0aGlzLCB3ZSBzcGxpdCBjYW5Fc3RhYmxpc2hE
YXRhYmFzZSgpIGludG8gMiBwYXJ0czogdGhlCisgICAgICAgIGNoZWNrcyBiZWZvcmUgdGhlIGNh
bGwgYmFjayB0byB0aGUgY2xpZW50LCBhbmQgdGhlIGNoZWNrcyBhZnRlci4KKyAgICAgICAgVGhl
IGZpcnN0IHBhcnQgd2lsbCByZXRhaW4gdGhlIG5hbWUgY2FuRXN0YWJsaXNoRGF0YWJhc2UoKSwg
YW5kIHRoZQorICAgICAgICBzZWNvbmQgcGFydCB3aWxsIGJlIG5hbWVkIHJldHJ5Q2FuRXN0YWJs
aXNoRGF0YWJhc2UoKS4KKyAgICAgICAgV2UgYWxzbyBhZGRlZCBhIERhdGFiYXNlU2VydmVyOjpv
cGVuRGF0YWJhc2UoKSBmdW5jdGlvbiB0aGF0IGNhbiBiZQorICAgICAgICBjYWxsZWQgd2l0aCBh
IHJldHJ5IGZsYWcuCisKKyAgICAgICAgVGhlIGNsaWVudCBzaWRlIERhdGFiYXNlTWFuYWdlcjo6
b3BlbkRhdGFiYXNlKCkgd2lsbCBjYWxsCisgICAgICAgIERhdGFiYXNlU2VydmVyOjpvcGVuRGF0
YWJhc2UoKSwgd2hpY2ggdGhlbiBjYWxscyBjYW5Fc3RhYmxpc2hEYXRhYmFzZSgpCisgICAgICAg
IHRvIGRvIGl0cyBxdW90YSBjaGVjay4gSWYgdGhlcmUgaXMgZW5vdWdoIHF1b3RhLAorICAgICAg
ICBEYXRhYmFzZVNlcnZlcjo6b3BlbkRhdGFiYXNlKCkgd2lsbCBwcm9jZWVkIHRvIG9wZW4gdGhl
IGJhY2tlbmQgZGF0YWJhc2UKKyAgICAgICAgd2l0aG91dCByZXR1cm4gdG8gdGhlIGNsaWVudCBm
aXJzdC4gVGhlIG9wZW5lZCBkYXRhYmFzZSB3aWxsIGJlIHJldHVybmVkCisgICAgICAgIHRvIHRo
ZSBjbGllbnQuCisKKyAgICAgICAgSWYgRGF0YWJhc2VTZXJ2ZXI6Om9wZW5EYXRhYmFzZSgpIGZp
bmRzIGluYWRlcXVhdGUgcXVvdGEgdGhlIGZpcnN0IHRpbWUsCisgICAgICAgIGl0IHdpbGwgcmV0
dXJuIHdpdGggYSBEYXRhYmFzZVNpemVFeGNlZWRlZFF1b3RhIGVycm9yLiBUaGUgRGF0YWJhc2VN
YW5hZ2VyCisgICAgICAgIChvbiB0aGUgY2xpZW50IHNpZGUpIHdpbGwgY2hlY2sgZm9yIHRoaXMg
ZXJyb3IgYW5kIGNhbGwgYmFjayB0byBpdHMgY2xpZW50CisgICAgICAgIGZvciBhbiBvcHBvcnR1
bml0eSB0byBpbmNyZWFzZSB0aGUgcXVvdGEuIFRoZXJlYWZ0ZXIsIHRoZSBEYXRhYmFzZU1hbmFn
ZXIKKyAgICAgICAgd2lsbCBjYWxsIERhdGFiYXNlU2VydmVyOjpvcGVuRGF0YWJhc2UoKSBhZ2Fp
bi4gVGhpcyB0aW1lLAorICAgICAgICBEYXRhYmFzZVNlcnZlcjo6b3BlbkRhdGFiYXNlKCkgd2ls
bCBjYWxsIHJldHJ5Q2FuRXN0YWJsaXNoRGF0YWJhc2UoKSB0bworICAgICAgICBjaGVjayB0aGUg
cXVvdGEsIGFuZCB0aGVuIG9wZW4gdGhlIGJhY2tlbmQgZGF0YWJhc2UgaWYgdGhlcmUgaXMgZW5v
dWdoCisgICAgICAgIHF1b3RhLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAq
IE1vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93V2ViRGF0YWJhc2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RE9NV2luZG93V2ViRGF0YWJhc2U6Om9wZW5EYXRhYmFzZSk6CisgICAgICAgICog
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZTo6Y3JlYXRlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmg6
CisgICAgICAgIChEYXRhYmFzZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZUJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kOjpwZXJm
b3JtT3BlbkFuZFZlcmlmeSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZUJhY2tlbmQuaDoKKyAgICAgICAgKERhdGFiYXNlQmFja2VuZCk6CisgICAgICAgICogTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRBc3luYy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZUJhY2tlbmRBc3luYzo6b3BlbkFuZFZlcmlmeVZlcnNpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kQXN5bmM6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEFzeW5jLmg6CisgICAg
ICAgIChEYXRhYmFzZUJhY2tlbmRBc3luYyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZUJhY2tlbmRTeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFj
a2VuZFN5bmM6Om9wZW5BbmRWZXJpZnlWZXJzaW9uKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlQmFja2VuZFN5bmMuaDoKKyAgICAgICAgKERhdGFiYXNlQmFja2VuZFN5
bmMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VFcnJvci5oOgorICAg
ICAgICAoV2ViQ29yZTo6RU5VTV9DTEFTUyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2Vy
OjpleGNlcHRpb25Db2RlRm9yRGF0YWJhc2VFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZU1hbmFnZXI6Om9wZW5EYXRhYmFzZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VNYW5hZ2VyOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VN
YW5hZ2VyOjpvcGVuRGF0YWJhc2VTeW5jKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlTWFuYWdlci5oOgorICAgICAgICAoRGF0YWJhc2VNYW5hZ2VyKToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlU2VydmVyOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VTZXJ2ZXI6OmNyZWF0ZURhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlU2VydmVyLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVN5bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpjcmVhdGUpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmg6CisgICAgICAgIChE
YXRhYmFzZVN5bmMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFj
a2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6aGFzQWRlcXVhdGVR
dW90YUZvck9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmNhbkVz
dGFibGlzaERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6cmV0
cnlDYW5Fc3RhYmxpc2hEYXRhYmFzZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZVRyYWNrZXIuaDoKKyAgICAgICAgKERhdGFiYXNlVHJhY2tlcik6CisgICAgICAgICog
TW9kdWxlcy93ZWJkYXRhYmFzZS9Xb3JrZXJDb250ZXh0V2ViRGF0YWJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dFdlYkRhdGFiYXNlOjpvcGVuRGF0YWJhc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dFdlYkRhdGFiYXNlOjpvcGVuRGF0YWJhc2VTeW5j
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tl
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0
YWJsaXNoRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpyZXRy
eUNhbkVzdGFibGlzaERhdGFiYXNlKToKKwogMjAxMy0wMi0wNSAgVnNldm9sb2QgVmxhc292ICA8
dnNldmlrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgZW5kaW5n
IHNsYXNoZXMgYXV0b21hdGljYWxseSB0byBmaWxlIG1hcHBpbmdzLgpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlU2VydmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFi
YXNlU2VydmVyLmgJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw3ICsyOCw5IEBACiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiRGF0
YWJhc2VCYXNpY1R5cGVzLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgiCisjaW5jbHVk
ZSAiRGF0YWJhc2VFcnJvci5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC0zNiw5ICsz
OCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERhdGFiYXNlQmFja2VuZDsKLWNs
YXNzIERhdGFiYXNlQmFja2VuZEFzeW5jOwogY2xhc3MgRGF0YWJhc2VCYWNrZW5kQ29udGV4dDsK
LWNsYXNzIERhdGFiYXNlQmFja2VuZFN5bmM7CiBjbGFzcyBEYXRhYmFzZU1hbmFnZXJDbGllbnQ7
CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIApAQCAtNTIsNiArNTIsMTMgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBTdHJpbmcgZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNv
bnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCA9IHRydWUpID0gMDsK
IAorICAgIGVudW0gT3BlbkF0dGVtcHQgeworICAgICAgICBGaXJzdFRyeVRvT3BlbkRhdGFiYXNl
LAorICAgICAgICBSZXRyeU9wZW5EYXRhYmFzZQorICAgIH07CisKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBvcGVuRGF0YWJhc2UoUmVmUHRyPERhdGFiYXNlQmFja2Vu
ZENvbnRleHQ+JiwgRGF0YWJhc2VUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNl
RXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgT3BlbkF0dGVtcHQgPSBGaXJzdFRyeVRvT3Bl
bkRhdGFiYXNlKSA9IDA7CisKICNpZiAhUExBVEZPUk0oQ0hST01JVU0pCiAgICAgdmlydHVhbCBi
b29sIGhhc0VudHJ5Rm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKikgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBvcmlnaW5zKFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+ID4mIHJlc3VsdCkgPSAw
OwpAQCAtNzcsOSArODQsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgaW50ZXJydXB0
QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBEYXRhYmFzZUJhY2tlbmRDb250ZXh0KikgPSAw
OwogCi0gICAgdmlydHVhbCBib29sIGNhbkVzdGFibGlzaERhdGFiYXNlKERhdGFiYXNlQmFja2Vu
ZENvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUs
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNl
dERhdGFiYXNlRGV0YWlscyhTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKSA9IDA7
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNv
bnN0IERhdGFiYXNlQmFja2VuZCopID0gMDsKIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dXZWJEYXRhYmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dXZWJE
YXRhYmFzZS5jcHAJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRE9NV2luZG93V2ViRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OCwxMyArNDgsMTEgQEAgUGFzc1JlZlB0cjxEYXRhYmFzZT4gRE9NV2luZG93V2ViRGF0YWJhcwog
ICAgIFJlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UgPSAwOwogICAgIERhdGFiYXNlTWFuYWdlciYg
ZGJNYW5hZ2VyID0gRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCk7CiAgICAgRGF0YWJhc2VFcnJv
ciBlcnJvciA9IERhdGFiYXNlRXJyb3I6Ok5vbmU7Ci0gICAgaWYgKGRiTWFuYWdlci5pc0F2YWls
YWJsZSgpICYmIHdpbmRvdy0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNz
RGF0YWJhc2Uod2luZG93LT5kb2N1bWVudCgpLT50b3BPcmlnaW4oKSkpCisgICAgaWYgKGRiTWFu
YWdlci5pc0F2YWlsYWJsZSgpICYmIHdpbmRvdy0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4o
KS0+Y2FuQWNjZXNzRGF0YWJhc2Uod2luZG93LT5kb2N1bWVudCgpLT50b3BPcmlnaW4oKSkpIHsK
ICAgICAgICAgZGF0YWJhc2UgPSBkYk1hbmFnZXIub3BlbkRhdGFiYXNlKHdpbmRvdy0+ZG9jdW1l
bnQoKSwgbmFtZSwgdmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIGNyZWF0aW9u
Q2FsbGJhY2ssIGVycm9yKTsKLQotICAgIEFTU0VSVChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpO
b25lIHx8IGVycm9yID09IERhdGFiYXNlRXJyb3I6OkNhbm5vdE9wZW5EYXRhYmFzZSk7Ci0gICAg
aWYgKGVycm9yID09IERhdGFiYXNlRXJyb3I6OkNhbm5vdE9wZW5EYXRhYmFzZSkKLSAgICAgICAg
ZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICBpZiAoIWRhdGFiYXNlICYmICFlYykKKyAgICAg
ICAgQVNTRVJUKGRhdGFiYXNlIHx8IGVycm9yICE9IERhdGFiYXNlRXJyb3I6Ok5vbmUpOworICAg
ICAgICBlYyA9IERhdGFiYXNlTWFuYWdlcjo6ZXhjZXB0aW9uQ29kZUZvckRhdGFiYXNlRXJyb3Io
ZXJyb3IpOworICAgIH0gZWxzZQogICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKIAogICAgIHJl
dHVybiBkYXRhYmFzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAxNDE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiAr
NjYsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitQYXNzUmVmUHRyPERhdGFiYXNlPiBE
YXRhYmFzZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPERhdGFi
YXNlQmFja2VuZD4gYmFja2VuZCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGF0YWJhc2Uq
PihiYWNrZW5kLmdldCgpKTsKK30KKwogRGF0YWJhc2U6OkRhdGFiYXNlKFBhc3NSZWZQdHI8RGF0
YWJhc2VCYWNrZW5kQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0LAogICAgIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxh
eU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKICAgICA6IERhdGFiYXNlQmFzZShk
YXRhYmFzZUNvbnRleHQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKQEAgLTEzMywyMyArMTM4
LDYgQEAgU3RyaW5nIERhdGFiYXNlOjp2ZXJzaW9uKCkgY29uc3QKICAgICByZXR1cm4gRGF0YWJh
c2VCYWNrZW5kOjp2ZXJzaW9uKCk7CiB9CiAKLWJvb2wgRGF0YWJhc2U6Om9wZW5BbmRWZXJpZnlW
ZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImIGVycm9y
LCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKLXsKLSAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIg
c3luY2hyb25pemVyOwotICAgIGlmICghZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFk
KCkgfHwgZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnRlcm1pbmF0aW9uUmVx
dWVzdGVkKCZzeW5jaHJvbml6ZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSNpZiBQTEFU
Rk9STShDSFJPTUlVTSkKLSAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5wcmVwYXJlVG9P
cGVuRGF0YWJhc2UodGhpcyk7Ci0jZW5kaWYKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAg
ICBPd25QdHI8RGF0YWJhc2VPcGVuVGFzaz4gdGFzayA9IERhdGFiYXNlT3BlblRhc2s6OmNyZWF0
ZSh0aGlzLCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgJnN5bmNocm9uaXplciwgZXJyb3IsIGVy
cm9yTWVzc2FnZSwgc3VjY2Vzcyk7Ci0gICAgZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhy
ZWFkKCktPnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0YXNrLnJlbGVhc2UoKSk7Ci0gICAgc3luY2hy
b25pemVyLndhaXRGb3JUYXNrQ29tcGxldGlvbigpOwotCi0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19
Ci0KIHZvaWQgRGF0YWJhc2U6Om1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpCiB7CiAgICAgaWYgKG1f
ZGVsZXRlZCB8fCAhZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCkpCkBAIC0yMDQs
MTggKzE5Miw2IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZTo6bWF4aW11bVNpemUKICAg
ICByZXR1cm4gRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuZ2V0TWF4U2l6ZUZvckRhdGFiYXNl
KHRoaXMpOwogfQogCi1ib29sIERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNl
dFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiBlcnJvciwgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UpCi17Ci0gICAgaWYgKERhdGFiYXNlQmFja2VuZDo6cGVyZm9ybU9wZW5BbmRWZXJp
Znkoc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGVycm9yLCBlcnJvck1lc3NhZ2UpKSB7Ci0gICAg
ICAgIGlmIChkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKSkKLSAgICAgICAgICAg
IGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZU9wZW4o
dGhpcyk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCiB2b2lkIERhdGFiYXNlOjpjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0cmluZyYgb2xkVmVy
c2lvbiwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVm
UHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxs
YmFjaykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlLmgJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtODgsMTMgKzg4LDExIEBAIHByaXZh
dGU6CiAgICAgRGF0YWJhc2UoUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiwgY29u
c3QgU3RyaW5nJiBuYW1lLAogICAgICAgICBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwg
Y29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsK
ICAgICBQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZEFzeW5jPiBiYWNrZW5kKCk7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RGF0YWJhc2U+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+KTsKIAogICAgIHZvaWQgcnVuVHJhbnNhY3Rpb24o
UGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2s+LAogICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxW
b2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldy
YXBwZXI+LCBib29sIHJlYWRPbmx5KTsKIAotICAgIGJvb2wgb3BlbkFuZFZlcmlmeVZlcnNpb24o
Ym9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYgZXJy
b3JNZXNzYWdlKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBz
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYgZXJyb3JNZXNz
YWdlKTsKLQogICAgIHZvaWQgaW5Qcm9ncmVzc1RyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAg
dm9pZCBzY2hlZHVsZVRyYW5zYWN0aW9uKCk7CiAKQEAgLTExMCw2ICsxMDgsNyBAQCBwcml2YXRl
OgogICAgIGJvb2wgbV9kZWxldGVkOwogCiAgICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlTWFuYWdl
cjsKKyAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2VTZXJ2ZXI7IC8vIEZJWE1FOiByZW1vdmUgdGhp
cyB3aGVuIHRoZSBiYWNrZW5kIGhhcyBiZWVuIHNwbGl0IG91dC4KICAgICBmcmllbmQgY2xhc3Mg
RGF0YWJhc2VCYWNrZW5kQXN5bmM7IC8vIEZJWE1FOiByZW1vdmUgdGhpcyB3aGVuIHRoZSBiYWNr
ZW5kIGhhcyBiZWVuIHNwbGl0IG91dC4KIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZC5jcHAJKHJldmlzaW9u
IDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VC
YWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE0LDcgKzMxNCw3IEBAIGJvb2wgRGF0YWJh
c2VCYWNrZW5kOjpwZXJmb3JtT3BlbkFuZFZlcmkKICAgICBEb25lQ3JlYXRpbmdEYXRhYmFzZU9u
RXhpdENhbGxlciBvbkV4aXRDYWxsZXIodGhpcyk7CiAgICAgQVNTRVJUKGVycm9yTWVzc2FnZS5p
c0VtcHR5KCkpOwogICAgIEFTU0VSVChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpOb25lKTsgLy8g
QmV0dGVyIG5vdCBoYXZlIGFueSBlcnJvcnMgYWxyZWFkeS4KLSAgICBlcnJvciA9IERhdGFiYXNl
RXJyb3I6OkNhbm5vdE9wZW5EYXRhYmFzZTsgLy8gUHJlc3VtZWQgZmFpbHVyZS4gV2UnbGwgY2xl
YXIgaXQgaWYgd2Ugc3VjY2VlZCBiZWxvdy4KKyAgICBlcnJvciA9IERhdGFiYXNlRXJyb3I6Oklu
dmFsaWREYXRhYmFzZVN0YXRlOyAvLyBQcmVzdW1lZCBmYWlsdXJlLiBXZSdsbCBjbGVhciBpdCBp
ZiB3ZSBzdWNjZWVkIGJlbG93LgogCiAgICAgY29uc3QgaW50IG1heFNxbGl0ZUJ1c3lXYWl0VGlt
ZSA9IDMwMDAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlQmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmgJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMyw2ICsxMDMsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGNsb3NlRGF0YWJh
c2UoKTsKIAorICAgIHZpcnR1YWwgYm9vbCBvcGVuQW5kVmVyaWZ5VmVyc2lvbihib29sIHNldFZl
cnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2Up
ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzaG91bGRT
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYgZXJyb3JNZXNz
YWdlKTsKIAogICAgIGJvb2wgZ2V0VmVyc2lvbkZyb21EYXRhYmFzZShTdHJpbmcmIHZlcnNpb24s
IGJvb2wgc2hvdWxkQ2FjaGVWZXJzaW9uID0gdHJ1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEFzeW5jLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEFzeW5j
LmNwcAkocmV2aXNpb24gMTQxOTY1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZUJhY2tlbmRBc3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5
LDkgQEAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAiRGF0YWJhc2VCYWNr
ZW5kQ29udGV4dC5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVGFzay5oIgorI2luY2x1ZGUgIkRhdGFi
YXNlVGhyZWFkLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtMzcsNiArNDAsMzQgQEAgRGF0YWJhc2VCYWNrZW5kQXN5bmM6OkRhdGFi
YXNlQmFja2VuZEFzeQogewogfQogCitib29sIERhdGFiYXNlQmFja2VuZEFzeW5jOjpvcGVuQW5k
VmVyaWZ5VmVyc2lvbihib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9y
JiBlcnJvciwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCit7CisgICAgRGF0YWJhc2VUYXNrU3luY2hy
b25pemVyIHN5bmNocm9uaXplcjsKKyAgICBpZiAoIWRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFz
ZVRocmVhZCgpIHx8IGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT50ZXJtaW5h
dGlvblJlcXVlc3RlZCgmc3luY2hyb25pemVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisj
aWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucHJl
cGFyZVRvT3BlbkRhdGFiYXNlKHRoaXMpOworI2VuZGlmCisgICAgYm9vbCBzdWNjZXNzID0gZmFs
c2U7CisgICAgT3duUHRyPERhdGFiYXNlT3BlblRhc2s+IHRhc2sgPSBEYXRhYmFzZU9wZW5UYXNr
OjpjcmVhdGUodGhpcywgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsICZzeW5jaHJvbml6ZXIsIGVy
cm9yLCBlcnJvck1lc3NhZ2UsIHN1Y2Nlc3MpOworICAgIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRh
YmFzZVRocmVhZCgpLT5zY2hlZHVsZUltbWVkaWF0ZVRhc2sodGFzay5yZWxlYXNlKCkpOworICAg
IHN5bmNocm9uaXplci53YWl0Rm9yVGFza0NvbXBsZXRpb24oKTsKKworICAgIHJldHVybiBzdWNj
ZXNzOworfQorCitib29sIERhdGFiYXNlQmFja2VuZEFzeW5jOjpwZXJmb3JtT3BlbkFuZFZlcmlm
eShib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiBlcnJvciwgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UpCit7CisgICAgaWYgKERhdGFiYXNlQmFja2VuZDo6cGVyZm9ybU9w
ZW5BbmRWZXJpZnkoc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGVycm9yLCBlcnJvck1lc3NhZ2Up
KSB7CisgICAgICAgIGlmIChkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKSkKKyAg
ICAgICAgICAgIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRh
YmFzZU9wZW4odGhpcyk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0
dXJuIGZhbHNlOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2Vu
ZEFzeW5jLmgJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTEg
KzQzLDExIEBAIGNsYXNzIERhdGFiYXNlU2VydmVyOwogLy8gYXZhaWxhYmxlLiBUaGlzIHNob3Vs
ZCBiZSByZXBsYWNlZCB3aXRoIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gbGF0ZXIuCiAKIGNs
YXNzIERhdGFiYXNlQmFja2VuZEFzeW5jIDogcHVibGljIERhdGFiYXNlQmFja2VuZCB7Ci1wcm90
ZWN0ZWQ6CitwdWJsaWM6CiAgICAgRGF0YWJhc2VCYWNrZW5kQXN5bmMoUGFzc1JlZlB0cjxEYXRh
YmFzZUJhY2tlbmRDb250ZXh0PiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4
cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBl
c3RpbWF0ZWRTaXplKTsKIAotICAgIGZyaWVuZCBjbGFzcyBEYXRhYmFzZU1hbmFnZXI7IC8vIEZJ
WE1FOiByZW1vdmUgdGhpcyBvbmNlIHdlIGhhdmUgaXNvbGF0ZWQgdGhpcyB0byB0aGUgYmFja2Vu
ZC4KLSAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2VTZXJ2ZXI7CisgICAgdmlydHVhbCBib29sIG9w
ZW5BbmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNl
RXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CisgICAgdmlydHVhbCBib29sIHBlcmZvcm1P
cGVuQW5kVmVyaWZ5KGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3Im
LCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiAKIHByaXZhdGU6CiAgICAgY2xhc3MgRGF0YWJhc2VP
cGVuVGFzazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VCYWNrZW5kU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRTeW5jLmNwcAkocmV2aXNpb24gMTQxOTY1KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRTeW5jLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShTUUxfREFUQUJB
U0UpCiAKICNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmgiCisjaW5jbHVkZSAiRGF0
YWJhc2VUcmFja2VyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTEsNiArNTIsMTQg
QEAgRGF0YWJhc2VCYWNrZW5kU3luYzo6fkRhdGFiYXNlQmFja2VuZFN5bgogICAgICAgICBjbG9z
ZURhdGFiYXNlKCk7CiB9CiAKK2Jvb2wgRGF0YWJhc2VCYWNrZW5kU3luYzo6b3BlbkFuZFZlcmlm
eVZlcnNpb24oYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYgZXJy
b3IsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQoreworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAg
IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnByZXBhcmVUb09wZW5EYXRhYmFzZSh0aGlzKTsK
KyNlbmRpZgorICAgIHJldHVybiBwZXJmb3JtT3BlbkFuZFZlcmlmeShzZXRWZXJzaW9uSW5OZXdE
YXRhYmFzZSwgZXJyb3IsIGVycm9yTWVzc2FnZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZFN5bmMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZFN5bmMu
aAkocmV2aXNpb24gMTQxOTY1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZUJhY2tlbmRTeW5jLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEwICs0NSwxMSBA
QCBjbGFzcyBEYXRhYmFzZUJhY2tlbmRTeW5jIDogcHVibGljIERhdGFiCiBwdWJsaWM6CiAgICAg
dmlydHVhbCB+RGF0YWJhc2VCYWNrZW5kU3luYygpOwogCisgICAgdmlydHVhbCBib29sIG9wZW5B
bmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJy
b3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CisKIHByb3RlY3RlZDoKICAgICBEYXRhYmFzZUJh
Y2tlbmRTeW5jKFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4sIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlz
cGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAKLSAgICBmcmllbmQgY2xh
c3MgRGF0YWJhc2VNYW5hZ2VyOyAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgb25jZSB3ZSBoYXZlIGlz
b2xhdGVkIHRoaXMgdG8gdGhlIGJhY2tlbmQuCiAgICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlU2Vy
dmVyOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZUVycm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZUVycm9yLmgJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VFcnJvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCwxMCArMzQsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBFTlVNX0NMQVNTKERhdGFiYXNl
RXJyb3IpIHsKICAgICBOb25lID0gMCwKLSAgICBDYW5ub3RPcGVuRGF0YWJhc2UsCiAgICAgRGF0
YWJhc2VJc0JlaW5nRGVsZXRlZCwKICAgICBEYXRhYmFzZVNpemVFeGNlZWRlZFF1b3RhLAotICAg
IERhdGFiYXNlU2l6ZU92ZXJmbG93ZWQKKyAgICBEYXRhYmFzZVNpemVPdmVyZmxvd2VkLAorICAg
IEdlbmVyaWNTZWN1cml0eUVycm9yLAorICAgIEludmFsaWREYXRhYmFzZVN0YXRlCiB9IEVOVU1f
Q0xBU1NfRU5EKERhdGFiYXNlRXJyb3IpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNDE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJBYnN0cmFj
dERhdGFiYXNlU2VydmVyLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIKICNpbmNsdWRlICJEYXRh
YmFzZUJhY2tlbmQuaCIKICNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRBc3luYy5oIgpAQCAtMjAw
LDM5ICsyMDEsMTE2IEBAIHZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpkaWREZXN0cnVjdERhdGFiYXMK
IH0KICNlbmRpZgogCitFeGNlcHRpb25Db2RlIERhdGFiYXNlTWFuYWdlcjo6ZXhjZXB0aW9uQ29k
ZUZvckRhdGFiYXNlRXJyb3IoRGF0YWJhc2VFcnJvciBlcnJvcikKK3sKKyAgICBzd2l0Y2ggKGVy
cm9yKSB7CisgICAgY2FzZSBEYXRhYmFzZUVycm9yOjpOb25lOgorICAgICAgICByZXR1cm4gMDsK
KyAgICBjYXNlIERhdGFiYXNlRXJyb3I6OkRhdGFiYXNlSXNCZWluZ0RlbGV0ZWQ6CisgICAgY2Fz
ZSBEYXRhYmFzZUVycm9yOjpEYXRhYmFzZVNpemVFeGNlZWRlZFF1b3RhOgorICAgIGNhc2UgRGF0
YWJhc2VFcnJvcjo6RGF0YWJhc2VTaXplT3ZlcmZsb3dlZDoKKyAgICBjYXNlIERhdGFiYXNlRXJy
b3I6OkdlbmVyaWNTZWN1cml0eUVycm9yOgorICAgICAgICByZXR1cm4gU0VDVVJJVFlfRVJSOwor
ICAgIGNhc2UgRGF0YWJhc2VFcnJvcjo6SW52YWxpZERhdGFiYXNlU3RhdGU6CisgICAgICAgIHJl
dHVybiBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIDA7IC8vIE1ha2Ugc29tZSBvbGRlciBjb21waWxlcnMgaGFwcHkuCit9CisK
K3N0YXRpYyB2b2lkIGxvZ09wZW5EYXRhYmFzZUVycm9yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIkRh
dGFiYXNlICVzIGZvciBvcmlnaW4gJXMgbm90IGFsbG93ZWQgdG8gYmUgZXN0YWJsaXNoZWQiLCBu
YW1lLmFzY2lpKCkuZGF0YSgpLAorICAgICAgICBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT50
b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKK30KKworUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tl
bmQ+IERhdGFiYXNlTWFuYWdlcjo6b3BlbkRhdGFiYXNlQmFja2VuZChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LAorICAgIERhdGFiYXNlVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlO
YW1lLAorICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgYm9vbCBzZXRWZXJzaW9uSW5O
ZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYgZXJyb3IsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQor
eworICAgIEFTU0VSVChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpOb25lKTsKKworICAgIFJlZlB0
cjxEYXRhYmFzZUNvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCA9IGRhdGFiYXNlQ29udGV4dEZvcihj
b250ZXh0KTsKKyAgICBSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4gYmFja2VuZENvbnRl
eHQgPSBkYXRhYmFzZUNvbnRleHQtPmJhY2tlbmQoKTsKKworICAgIFJlZlB0cjxEYXRhYmFzZUJh
Y2tlbmQ+IGJhY2tlbmQgPSBtX3NlcnZlci0+b3BlbkRhdGFiYXNlKGJhY2tlbmRDb250ZXh0LCB0
eXBlLCBuYW1lLCBleHBlY3RlZFZlcnNpb24sCisgICAgICAgIGRpc3BsYXlOYW1lLCBlc3RpbWF0
ZWRTaXplLCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZXJyb3IsIGVycm9yTWVzc2FnZSk7CisK
KyAgICBpZiAoIWJhY2tlbmQpIHsKKyAgICAgICAgQVNTRVJUKGVycm9yICE9IERhdGFiYXNlRXJy
b3I6Ok5vbmUpOworCisgICAgICAgIHN3aXRjaCAoZXJyb3IpIHsKKyAgICAgICAgY2FzZSBEYXRh
YmFzZUVycm9yOjpEYXRhYmFzZUlzQmVpbmdEZWxldGVkOgorICAgICAgICBjYXNlIERhdGFiYXNl
RXJyb3I6OkRhdGFiYXNlU2l6ZU92ZXJmbG93ZWQ6CisgICAgICAgIGNhc2UgRGF0YWJhc2VFcnJv
cjo6R2VuZXJpY1NlY3VyaXR5RXJyb3I6CisgICAgICAgICAgICBsb2dPcGVuRGF0YWJhc2VFcnJv
cihjb250ZXh0LCBuYW1lKTsKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGNhc2Ug
RGF0YWJhc2VFcnJvcjo6SW52YWxpZERhdGFiYXNlU3RhdGU6CisgICAgICAgICAgICBsb2dFcnJv
ck1lc3NhZ2UoY29udGV4dCwgZXJyb3JNZXNzYWdlKTsKKyAgICAgICAgICAgIHJldHVybiAwOwor
CisgICAgICAgIGNhc2UgRGF0YWJhc2VFcnJvcjo6RGF0YWJhc2VTaXplRXhjZWVkZWRRdW90YToK
KyAgICAgICAgICAgIC8vIE5vdGlmeSB0aGUgY2xpZW50IHRoYXQgd2UndmUgZXhjZWVkZWQgdGhl
IGRhdGFiYXNlIHF1b3RhLgorICAgICAgICAgICAgLy8gVGhlIGNsaWVudCBtYXkgd2FudCB0byBp
bmNyZWFzZSB0aGUgcXVvdGEsIGFuZCB3ZSdsbCBnaXZlIGl0CisgICAgICAgICAgICAvLyBvbmUg
bW9yZSB0cnkgYWZ0ZXIgaWYgdGhhdCBpcyB0aGUgY2FzZS4KKyAgICAgICAgICAgIGRhdGFiYXNl
Q29udGV4dC0+ZGF0YWJhc2VFeGNlZWRlZFF1b3RhKG5hbWUsCisgICAgICAgICAgICAgICAgRGF0
YWJhc2VEZXRhaWxzKG5hbWUuaXNvbGF0ZWRDb3B5KCksIGRpc3BsYXlOYW1lLmlzb2xhdGVkQ29w
eSgpLCBlc3RpbWF0ZWRTaXplLCAwKSk7CisKKyAgICAgICAgICAgIGVycm9yID0gRGF0YWJhc2VF
cnJvcjo6Tm9uZTsKKworICAgICAgICAgICAgYmFja2VuZCA9IG1fc2VydmVyLT5vcGVuRGF0YWJh
c2UoYmFja2VuZENvbnRleHQsIHR5cGUsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwKKyAgICAgICAg
ICAgICAgICBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgc2V0VmVyc2lvbkluTmV3RGF0YWJh
c2UsIGVycm9yLCBlcnJvck1lc3NhZ2UsCisgICAgICAgICAgICAgICAgQWJzdHJhY3REYXRhYmFz
ZVNlcnZlcjo6UmV0cnlPcGVuRGF0YWJhc2UpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKCFiYWNrZW5kKSB7CisgICAgICAgICAgICBBU1NFUlQoZXJyb3IgIT0g
RGF0YWJhc2VFcnJvcjo6Tm9uZSk7CisKKyAgICAgICAgICAgIGlmIChlcnJvciA9PSBEYXRhYmFz
ZUVycm9yOjpJbnZhbGlkRGF0YWJhc2VTdGF0ZSkgeworICAgICAgICAgICAgICAgIGxvZ0Vycm9y
TWVzc2FnZShjb250ZXh0LCBlcnJvck1lc3NhZ2UpOworICAgICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsb2dPcGVuRGF0YWJhc2VFcnJvcihjb250
ZXh0LCBuYW1lKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIGJhY2tlbmQucmVsZWFzZSgpOworfQorCiBQYXNzUmVmUHRyPERhdGFiYXNlPiBE
YXRhYmFzZU1hbmFnZXI6Om9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LAogICAgIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNp
b24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsCiAgICAgdW5zaWduZWQgbG9uZyBlc3RpbWF0
ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ssCiAg
ICAgRGF0YWJhc2VFcnJvciYgZXJyb3IpCiB7CiAgICAgU2NyaXB0Q29udHJvbGxlcjo6aW5pdGlh
bGl6ZVRocmVhZGluZygpOwotICAgIFJlZlB0cjxEYXRhYmFzZUNvbnRleHQ+IGRhdGFiYXNlQ29u
dGV4dCA9IGRhdGFiYXNlQ29udGV4dEZvcihjb250ZXh0KTsKLSAgICBSZWZQdHI8RGF0YWJhc2VC
YWNrZW5kQ29udGV4dD4gYmFja2VuZENvbnRleHQgPSBkYXRhYmFzZUNvbnRleHQtPmJhY2tlbmQo
KTsKICAgICBBU1NFUlQoZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6Tm9uZSk7CiAKLSAgICBpZiAo
IW1fc2VydmVyLT5jYW5Fc3RhYmxpc2hEYXRhYmFzZShiYWNrZW5kQ29udGV4dC5nZXQoKSwgbmFt
ZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKSB7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJ
LCAiRGF0YWJhc2UgJXMgZm9yIG9yaWdpbiAlcyBub3QgYWxsb3dlZCB0byBiZSBlc3RhYmxpc2hl
ZCIsIG5hbWUuYXNjaWkoKS5kYXRhKCksIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3Ry
aW5nKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KKyAgICBi
b29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlID0gIWNyZWF0aW9uQ2FsbGJhY2s7CiAgICAgU3Ry
aW5nIGVycm9yTWVzc2FnZTsKLSAgICBSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlID0gYWRvcHRS
ZWYobmV3IERhdGFiYXNlKGJhY2tlbmRDb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRp
c3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSk7Ci0KLSAgICBpZiAoIWRhdGFiYXNlLT5vcGVuQW5k
VmVyaWZ5VmVyc2lvbighY3JlYXRpb25DYWxsYmFjaywgZXJyb3IsIGVycm9yTWVzc2FnZSkpIHsK
LSAgICAgICAgbG9nRXJyb3JNZXNzYWdlKGNvbnRleHQsIGVycm9yTWVzc2FnZSk7CisgICAgUmVm
UHRyPERhdGFiYXNlQmFja2VuZD4gYmFja2VuZCA9IG9wZW5EYXRhYmFzZUJhY2tlbmQoY29udGV4
dCwgRGF0YWJhc2VUeXBlOjpBc3luYywgbmFtZSwKKyAgICAgICAgZXhwZWN0ZWRWZXJzaW9uLCBk
aXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGVycm9y
LCBlcnJvck1lc3NhZ2UpOworICAgIGlmICghYmFja2VuZCkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQogCi0gICAgbV9zZXJ2ZXItPnNldERhdGFiYXNlRGV0YWlscyhjb250ZXh0LT5zZWN1cml0
eU9yaWdpbigpLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7Ci0gICAgZGF0YWJh
c2VDb250ZXh0LT5zZXRIYXNPcGVuRGF0YWJhc2VzKCk7CisgICAgUmVmUHRyPERhdGFiYXNlPiBk
YXRhYmFzZSA9IERhdGFiYXNlOjpjcmVhdGUoY29udGV4dCwgYmFja2VuZCk7CiAKKyAgICBSZWZQ
dHI8RGF0YWJhc2VDb250ZXh0PiBkYXRhYmFzZUNvbnRleHQgPSBkYXRhYmFzZUNvbnRleHRGb3Io
Y29udGV4dCk7CisgICAgZGF0YWJhc2VDb250ZXh0LT5zZXRIYXNPcGVuRGF0YWJhc2VzKCk7CiAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRPcGVuRGF0YWJhc2UoY29udGV4dCwgZGF0
YWJhc2UsIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmhvc3QoKSwgbmFtZSwgZXhwZWN0ZWRW
ZXJzaW9uKTsKIAotICAgIGlmIChkYXRhYmFzZS0+aXNOZXcoKSAmJiBjcmVhdGlvbkNhbGxiYWNr
LmdldCgpKSB7CisgICAgaWYgKGJhY2tlbmQtPmlzTmV3KCkgJiYgY3JlYXRpb25DYWxsYmFjay5n
ZXQoKSkgewogICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgRGF0YWJhc2VDcmVh
dGlvbkNhbGxiYWNrVGFzayBmb3IgZGF0YWJhc2UgJXBcbiIsIGRhdGFiYXNlLmdldCgpKTsKICAg
ICAgICAgZGF0YWJhc2UtPm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soRGF0YWJh
c2VDcmVhdGlvbkNhbGxiYWNrVGFzazo6Y3JlYXRlKGRhdGFiYXNlLCBjcmVhdGlvbkNhbGxiYWNr
KSk7CiAgICAgfQogCisgICAgQVNTRVJUKGRhdGFiYXNlKTsKICAgICByZXR1cm4gZGF0YWJhc2Uu
cmVsZWFzZSgpOwogfQogCkBAIC0yNDAsMzEgKzMxOCwyNCBAQCBQYXNzUmVmUHRyPERhdGFiYXNl
U3luYz4gRGF0YWJhc2VNYW5hZ2VyCiAgICAgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwKICAgICB1bnNp
Z25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3Jl
YXRpb25DYWxsYmFjaywgRGF0YWJhc2VFcnJvciYgZXJyb3IpCiB7Ci0gICAgUmVmUHRyPERhdGFi
YXNlQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0ID0gZGF0YWJhc2VDb250ZXh0Rm9yKGNvbnRleHQp
OwotICAgIFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiBiYWNrZW5kQ29udGV4dCA9IGRh
dGFiYXNlQ29udGV4dC0+YmFja2VuZCgpOwogICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRU
aHJlYWQoKSk7CiAgICAgQVNTRVJUKGVycm9yID09IERhdGFiYXNlRXJyb3I6Ok5vbmUpOwogCi0g
ICAgaWYgKCFtX3NlcnZlci0+Y2FuRXN0YWJsaXNoRGF0YWJhc2UoYmFja2VuZENvbnRleHQuZ2V0
KCksIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSkgewotICAgICAgICBMT0coU3Rv
cmFnZUFQSSwgIkRhdGFiYXNlICVzIGZvciBvcmlnaW4gJXMgbm90IGFsbG93ZWQgdG8gYmUgZXN0
YWJsaXNoZWQiLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigp
LT50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
CisgICAgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSA9ICFjcmVhdGlvbkNhbGxiYWNrOwog
ICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgUmVmUHRyPERhdGFiYXNlU3luYz4gZGF0YWJh
c2UgPSBhZG9wdFJlZihuZXcgRGF0YWJhc2VTeW5jKGJhY2tlbmRDb250ZXh0LCBuYW1lLCBleHBl
Y3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSk7Ci0KLSAgICBpZiAoIWRh
dGFiYXNlLT5vcGVuQW5kVmVyaWZ5VmVyc2lvbighY3JlYXRpb25DYWxsYmFjaywgZXJyb3IsIGVy
cm9yTWVzc2FnZSkpIHsKLSAgICAgICAgbG9nRXJyb3JNZXNzYWdlKGNvbnRleHQsIGVycm9yTWVz
c2FnZSk7CisgICAgUmVmUHRyPERhdGFiYXNlQmFja2VuZD4gYmFja2VuZCA9IG9wZW5EYXRhYmFz
ZUJhY2tlbmQoY29udGV4dCwgRGF0YWJhc2VUeXBlOjpTeW5jLCBuYW1lLAorICAgICAgICBleHBl
Y3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBzZXRWZXJzaW9uSW5OZXdE
YXRhYmFzZSwgZXJyb3IsIGVycm9yTWVzc2FnZSk7CisgICAgaWYgKCFiYWNrZW5kKQogICAgICAg
ICByZXR1cm4gMDsKLSAgICB9CiAKLSAgICBtX3NlcnZlci0+c2V0RGF0YWJhc2VEZXRhaWxzKGNv
bnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXpl
KTsKKyAgICBSZWZQdHI8RGF0YWJhc2VTeW5jPiBkYXRhYmFzZSA9IERhdGFiYXNlU3luYzo6Y3Jl
YXRlKGNvbnRleHQsIGJhY2tlbmQpOwogCi0gICAgaWYgKGRhdGFiYXNlLT5pc05ldygpICYmIGNy
ZWF0aW9uQ2FsbGJhY2suZ2V0KCkpIHsKKyAgICBpZiAoYmFja2VuZC0+aXNOZXcoKSAmJiBjcmVh
dGlvbkNhbGxiYWNrLmdldCgpKSB7CiAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiSW52b2tpbmcg
dGhlIGNyZWF0aW9uIGNhbGxiYWNrIGZvciBkYXRhYmFzZSAlcFxuIiwgZGF0YWJhc2UuZ2V0KCkp
OwogICAgICAgICBjcmVhdGlvbkNhbGxiYWNrLT5oYW5kbGVFdmVudChkYXRhYmFzZS5nZXQoKSk7
CiAgICAgfQogCisgICAgQVNTRVJUKGRhdGFiYXNlKTsKICAgICByZXR1cm4gZGF0YWJhc2UucmVs
ZWFzZSgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmgJKHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKLSNpbmNs
dWRlICJBYnN0cmFjdERhdGFiYXNlU2VydmVyLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VCYXNpY1R5
cGVzLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VF
cnJvci5oIgpAQCAtODAsNiArNzksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWREZXN0cnVjdERh
dGFiYXNlQ29udGV4dCgpIHsgfQogI2VuZGlmCiAKKyAgICBzdGF0aWMgRXhjZXB0aW9uQ29kZSBl
eGNlcHRpb25Db2RlRm9yRGF0YWJhc2VFcnJvcihEYXRhYmFzZUVycm9yKTsKKwogICAgIFBhc3NS
ZWZQdHI8RGF0YWJhc2U+IG9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3Ry
aW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRy
PERhdGFiYXNlQ2FsbGJhY2s+LCBEYXRhYmFzZUVycm9yJik7CiAgICAgUGFzc1JlZlB0cjxEYXRh
YmFzZVN5bmM+IG9wZW5EYXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmlu
ZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxE
YXRhYmFzZUNhbGxiYWNrPiwgRGF0YWJhc2VFcnJvciYpOwogCkBAIC0xMjQsNiArMTI1LDEwIEBA
IHByaXZhdGU6CiAgICAgLy8gaXQgYWxyZWFkeSBleGlzdCBwcmV2aW91c2x5LiBPdGhlcndpc2Us
IGl0IHJldHVybnMgMC4KICAgICBQYXNzUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gZXhpc3RpbmdE
YXRhYmFzZUNvbnRleHRGb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCisgICAgUGFzc1Jl
ZlB0cjxEYXRhYmFzZUJhY2tlbmQ+IG9wZW5EYXRhYmFzZUJhY2tlbmQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosCisgICAgICAgIERhdGFiYXNlVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwKKyAg
ICAgICAgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBib29sIHNldFZlcnNpb25Jbk5ld0Rh
dGFiYXNlLCBEYXRhYmFzZUVycm9yJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOworCiAgICAgc3Rh
dGljIHZvaWQgbG9nRXJyb3JNZXNzYWdlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpOwogCiAgICAgQWJzdHJhY3REYXRhYmFzZVNlcnZlciogbV9zZXJ2ZXI7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlU2VydmVyLmNwcAkocmV2aXNpb24gMTQxOTY1KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVNlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDkgKzI4LDExIEBACiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiRGF0
YWJhc2UuaCIKICNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRBc3luYy5oIgogI2luY2x1ZGUgIkRh
dGFiYXNlQmFja2VuZENvbnRleHQuaCIKICNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRTeW5jLmgi
CisjaW5jbHVkZSAiRGF0YWJhc2VTeW5jLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgi
CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKQEAgLTE0OSwxNCArMTUxLDQ1IEBAIHZv
aWQgRGF0YWJhc2VTZXJ2ZXI6OmludGVycnVwdEFsbERhdGFiYXMKICAgICBEYXRhYmFzZVRyYWNr
ZXI6OnRyYWNrZXIoKS5pbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnRleHQpOwog
fQogCi1ib29sIERhdGFiYXNlU2VydmVyOjpjYW5Fc3RhYmxpc2hEYXRhYmFzZShEYXRhYmFzZUJh
Y2tlbmRDb250ZXh0KiBiYWNrZW5kQ29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCi17Ci0gICAg
cmV0dXJuIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmNhbkVzdGFibGlzaERhdGFiYXNlKGJh
Y2tlbmRDb250ZXh0LCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7Ci19CitQYXNz
UmVmUHRyPERhdGFiYXNlQmFja2VuZD4gRGF0YWJhc2VTZXJ2ZXI6Om9wZW5EYXRhYmFzZShSZWZQ
dHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4mIGJhY2tlbmRDb250ZXh0LAorICAgIERhdGFiYXNl
VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJz
aW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLAorICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1h
dGVkU2l6ZSwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciAmZXJy
b3IsIFN0cmluZyYgZXJyb3JNZXNzYWdlLAorICAgIE9wZW5BdHRlbXB0IGF0dGVtcHQpCit7Cisg
ICAgUmVmUHRyPERhdGFiYXNlQmFja2VuZD4gZGF0YWJhc2U7CisgICAgYm9vbCBzdWNjZXNzID0g
ZmFsc2U7IC8vIE1ha2Ugc29tZSBvbGRlciBjb21waWxlcnMgaGFwcHkuCisgICAgCisgICAgc3dp
dGNoIChhdHRlbXB0KSB7CisgICAgY2FzZSBGaXJzdFRyeVRvT3BlbkRhdGFiYXNlOgorICAgICAg
ICBzdWNjZXNzID0gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuY2FuRXN0YWJsaXNoRGF0YWJh
c2UoYmFja2VuZENvbnRleHQuZ2V0KCksIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXpl
LCBlcnJvcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmV0cnlPcGVuRGF0YWJhc2U6Cisg
ICAgICAgIHN1Y2Nlc3MgPSBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5yZXRyeUNhbkVzdGFi
bGlzaERhdGFiYXNlKGJhY2tlbmRDb250ZXh0LmdldCgpLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0
aW1hdGVkU2l6ZSwgZXJyb3IpOworICAgIH0KKworICAgIGlmIChzdWNjZXNzKQorICAgICAgICBk
YXRhYmFzZSA9IGNyZWF0ZURhdGFiYXNlKGJhY2tlbmRDb250ZXh0LCB0eXBlLCBuYW1lLCBleHBl
Y3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBzZXRWZXJzaW9uSW5OZXdE
YXRhYmFzZSwgZXJyb3IsIGVycm9yTWVzc2FnZSk7CisgICAgcmV0dXJuIGRhdGFiYXNlLnJlbGVh
c2UoKTsKK30KKworUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+IERhdGFiYXNlU2VydmVyOjpj
cmVhdGVEYXRhYmFzZShSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4mIGJhY2tlbmRDb250
ZXh0LAorICAgIERhdGFiYXNlVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLAorICAgIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwg
RGF0YWJhc2VFcnJvciYgZXJyb3IsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQoreworICAgIFJlZlB0
cjxEYXRhYmFzZUJhY2tlbmQ+IGRhdGFiYXNlOworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNh
c2UgRGF0YWJhc2VUeXBlOjpBc3luYzoKKyAgICAgICAgZGF0YWJhc2UgPSBhZG9wdFJlZihuZXcg
RGF0YWJhc2UoYmFja2VuZENvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5h
bWUsIGVzdGltYXRlZFNpemUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEYXRhYmFzZVR5
cGU6OlN5bmM6CisgICAgICAgIGRhdGFiYXNlID0gYWRvcHRSZWYobmV3IERhdGFiYXNlU3luYyhi
YWNrZW5kQ29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1h
dGVkU2l6ZSkpOworICAgIH0KIAotdm9pZCBEYXRhYmFzZVNlcnZlcjo6c2V0RGF0YWJhc2VEZXRh
aWxzKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQotewotICAgIERh
dGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldERhdGFiYXNlRGV0YWlscyhvcmlnaW4sIG5hbWUs
IGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsKKyAgICBpZiAoIWRhdGFiYXNlLT5vcGVuQW5k
VmVyaWZ5VmVyc2lvbihzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZXJyb3IsIGVycm9yTWVzc2Fn
ZSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCku
c2V0RGF0YWJhc2VEZXRhaWxzKGJhY2tlbmRDb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBuYW1l
LCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7CisgICAgcmV0dXJuIGRhdGFiYXNlLnJlbGVh
c2UoKTsKIH0KIAogdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlU2VydmVyOjpnZXRNYXhTaXpl
Rm9yRGF0YWJhc2UoY29uc3QgRGF0YWJhc2VCYWNrZW5kKiBkYXRhYmFzZSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmgJ
KHJldmlzaW9uIDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsOCBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIFN0cmluZyBmdWxsUGF0aEZvckRhdGFiYXNlKFNlY3VyaXR5T3JpZ2lu
KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KTsKIAorICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+IG9wZW5EYXRhYmFzZShSZWZQdHI8
RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4mLCBEYXRhYmFzZVR5cGUsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5h
bWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRh
YmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYgZXJyb3JNZXNzYWdlLCBPcGVuQXR0ZW1wdCk7
CisKICNpZiAhUExBVEZPUk0oQ0hST01JVU0pCiAgICAgdmlydHVhbCBib29sIGhhc0VudHJ5Rm9y
T3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7CiAgICAgdmlydHVhbCB2b2lkIG9yaWdpbnMoVmVjdG9y
PFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gPiYgcmVzdWx0KTsKQEAgLTcwLDEwICs3MiwxMCBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgaW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4
dChjb25zdCBEYXRhYmFzZUJhY2tlbmRDb250ZXh0Kik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgY2Fu
RXN0YWJsaXNoRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kQ29udGV4dCosIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhYmFzZURldGFpbHMoU2VjdXJpdHlPcmln
aW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2ln
bmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcg
Z2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IERhdGFiYXNlQmFja2VuZCopOworCitwcm90ZWN0
ZWQ6CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZD4gY3JlYXRlRGF0YWJh
c2UoUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+JiwgRGF0YWJhc2VUeXBlLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcm
IGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIGJvb2wgc2V0VmVyc2lv
bkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuY3BwCShyZXZpc2lvbiAxNDE5NjUp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IERhdGFiYXNlU3luYzo6Y3JlYXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZD4gYmFja2VuZCkKK3sK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGF0YWJhc2VTeW5jKj4oYmFja2VuZC5nZXQoKSk7Cit9
CisKIERhdGFiYXNlU3luYzo6RGF0YWJhc2VTeW5jKFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5k
Q29udGV4dD4gZGF0YWJhc2VDb250ZXh0LAogICAgIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2ln
bmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKICAgICA6IERhdGFiYXNlQmFzZShkYXRhYmFzZUNvbnRl
eHQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKQEAgLTE1NCwxNCArMTU5LDYgQEAgdm9pZCBE
YXRhYmFzZVN5bmM6OnJ1blRyYW5zYWN0aW9uKFBhc3NSZQogICAgIHNldExhc3RFcnJvck1lc3Nh
Z2UoIiIpOwogfQogCi1ib29sIERhdGFiYXNlU3luYzo6b3BlbkFuZFZlcmlmeVZlcnNpb24oYm9v
bCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYgZXJyb3IsIFN0cmluZyYg
ZXJyb3JNZXNzYWdlKQotewotI2lmIFBMQVRGT1JNKENIUk9NSVVNKQotICAgIERhdGFiYXNlVHJh
Y2tlcjo6dHJhY2tlcigpLnByZXBhcmVUb09wZW5EYXRhYmFzZSh0aGlzKTsKLSNlbmRpZgotICAg
IHJldHVybiBwZXJmb3JtT3BlbkFuZFZlcmlmeShzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZXJy
b3IsIGVycm9yTWVzc2FnZSk7Ci19Ci0KIHZvaWQgRGF0YWJhc2VTeW5jOjptYXJrQXNEZWxldGVk
QW5kQ2xvc2UoKQogewogICAgIC8vIEZJWE1FOiBuZWVkIHRvIGRvIHNvbWV0aGluZyBzaW1pbGFy
IHRvIGNsb3NlSW1tZWRpYXRlbHkoKSwgYnV0IGluIGEgc3luYyB3YXkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuaAkocmV2aXNp
b24gMTQxOTY1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZVN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsMTUgKzc3LDE0IEBAIHByaXZhdGU6CiAgICAg
RGF0YWJhc2VTeW5jKFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4sIGNvbnN0IFN0
cmluZyYgbmFtZSwKICAgICAgICAgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0
IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAgICAg
UGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRTeW5jPiBiYWNrZW5kKCk7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPik7CiAKICAgICB2b2lkIHJ1blRyYW5zYWN0aW9uKFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBib29sIHJlYWRPbmx5LCBFeGNl
cHRpb25Db2RlJik7CiAKLSAgICBib29sIG9wZW5BbmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVy
c2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7
Ci0KICAgICBTdHJpbmcgbV9sYXN0RXJyb3JNZXNzYWdlOwogCiAgICAgZnJpZW5kIGNsYXNzIERh
dGFiYXNlTWFuYWdlcjsKLSAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2VCYWNrZW5kU3luYzsgLy8g
RklYTUU6IHJlbW92ZSB0aGlzIHdoZW4gdGhlIGJhY2tlbmQgaGFzIGJlZW4gc3BsaXQgb3V0Lgor
ICAgIGZyaWVuZCBjbGFzcyBEYXRhYmFzZVNlcnZlcjsgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHdo
ZW4gdGhlIGJhY2tlbmQgaGFzIGJlZW4gc3BsaXQgb3V0LgogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZVRyYWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAkocmV2aXNpb24gMTQxOTY1KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDIsNDcgKzE0MiwxMDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6Om9wZW5UcmFj
a2VyRGF0YWJhcwogICAgIH0KIH0KIAotYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmNhbkVzdGFibGlz
aERhdGFiYXNlKERhdGFiYXNlQmFja2VuZENvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplKQorYm9vbCBEYXRhYmFzZVRyYWNrZXI6Omhhc0FkZXF1YXRlUXVvdGFGb3JPcmlnaW4oU2Vj
dXJpdHlPcmlnaW4qIG9yaWdpbiwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBEYXRhYmFz
ZUVycm9yJiBlcnIpCiB7Ci0gICAgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IGNvbnRleHQtPnNl
Y3VyaXR5T3JpZ2luKCk7Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIHJlcXVpcmVtZW50OwotICAg
IHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7Ci0g
ICAgICAgIExvY2tlcjxPcmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tlcihvcmln
aW5RdW90YU1hbmFnZXIoKSk7CisgICAgLy8gU2luY2Ugd2UncmUgaW1taW5lbnRseSBvcGVuaW5n
IGEgZGF0YWJhc2Ugd2l0aGluIHRoaXMgY29udGV4dCdzIG9yaWdpbiwKKyAgICAvLyBtYWtlIHN1
cmUgdGhpcyBvcmlnaW4gaXMgYmVpbmcgdHJhY2tlZCBieSB0aGUgT3JpZ2luUXVvdGFNYW5hZ2Vy
CisgICAgLy8gYnkgZmV0Y2hpbmcgaXRzIGN1cnJlbnQgdXNhZ2Ugbm93LiBDYWxsaW5nIHVzYWdl
Rm9yT3JpZ2luKCkgaGFzIHRoZSBzaWRlCisgICAgLy8gZWZmZWN0IG9mIGluaXRpYXRpbmcgdHJh
Y2tpbmcgYnkgdGhlIE9yaWdpblF1b3RhTWFuYWdlciBpZiB0aGUgb3JpZ2luIGlzCisgICAgLy8g
bm90IGFscmVhZHkgdHJhY2tlZC4KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgdXNhZ2UgPSB1c2Fn
ZUZvck9yaWdpbk5vTG9jayhvcmlnaW4pOworCisgICAgLy8gSWYgdGhlIGRhdGFiYXNlIHdpbGwg
Zml0LCBhbGxvdyBpdHMgY3JlYXRpb24uCisgICAgdW5zaWduZWQgbG9uZyBsb25nIHJlcXVpcmVt
ZW50ID0gdXNhZ2UgKyBtYXgoMVVMLCBlc3RpbWF0ZWRTaXplKTsKKyAgICBpZiAocmVxdWlyZW1l
bnQgPCB1c2FnZSkgeworICAgICAgICAvLyBUaGUgZXN0aW1hdGVkIHNpemUgaXMgc28gYmlnIGl0
IGNhdXNlcyBhbiBvdmVyZmxvdzsgZG9uJ3QgYWxsb3cgY3JlYXRpb24uCisgICAgICAgIGVyciA9
IERhdGFiYXNlRXJyb3I6OkRhdGFiYXNlU2l6ZU92ZXJmbG93ZWQ7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgaWYgKHJlcXVpcmVtZW50IDw9IHF1b3RhRm9yT3JpZ2luTm9Mb2Nr
KG9yaWdpbikpCisgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIGlmIChpc0RlbGV0aW5n
RGF0YWJhc2VPck9yaWdpbkZvcihvcmlnaW4sIG5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGVyciA9IERhdGFiYXNlRXJyb3I6OkRhdGFiYXNlU2l6ZUV4Y2VlZGVkUXVvdGE7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIERhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJs
aXNoRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRl
ZFNpemUsIERhdGFiYXNlRXJyb3ImIGVycm9yKQoreworICAgIFVOVVNFRF9QQVJBTShkaXNwbGF5
TmFtZSk7IC8vIENocm9taXVtIG5lZWRzIHRoZSBkaXNwbGF5TmFtZSBidXQgd2UgZG9uJ3QuCisg
ICAgZXJyb3IgPSBEYXRhYmFzZUVycm9yOjpOb25lOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja0Rh
dGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CisgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4g
cXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKKyAgICBTZWN1cml0eU9y
aWdpbiogb3JpZ2luID0gY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKTsKIAotICAgICAgICByZWNv
cmRDcmVhdGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7CisgICAgaWYgKGlzRGVsZXRpbmdEYXRh
YmFzZU9yT3JpZ2luRm9yKG9yaWdpbiwgbmFtZSkpIHsKKyAgICAgICAgZXJyb3IgPSBEYXRhYmFz
ZUVycm9yOjpEYXRhYmFzZUlzQmVpbmdEZWxldGVkOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQogCi0gICAgICAgIC8vIFNpbmNlIHdlJ3JlIGltbWluZW50bHkgb3BlbmluZyBhIGRhdGFi
YXNlIHdpdGhpbiB0aGlzIGNvbnRleHQncyBvcmlnaW4sIG1ha2Ugc3VyZSB0aGlzIG9yaWdpbiBp
cyBiZWluZyB0cmFja2VkIGJ5IHRoZSBRdW90YVRyYWNrZXIKLSAgICAgICAgLy8gYnkgZmV0Y2hp
bmcgaXRzIGN1cnJlbnQgdXNhZ2Ugbm93LgotICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdXNh
Z2UgPSB1c2FnZUZvck9yaWdpbk5vTG9jayhvcmlnaW4pOworICAgIHJlY29yZENyZWF0aW5nRGF0
YWJhc2Uob3JpZ2luLCBuYW1lKTsKIAotICAgICAgICAvLyBJZiBhIGRhdGFiYXNlIGFscmVhZHkg
ZXhpc3RzLCBpZ25vcmUgdGhlIHBhc3NlZC1pbiBlc3RpbWF0ZWQgc2l6ZSBhbmQgc2F5IGl0J3Mg
T0suCi0gICAgICAgIGlmIChoYXNFbnRyeUZvckRhdGFiYXNlKG9yaWdpbiwgbmFtZSkpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBJZiBhIGRhdGFiYXNlIGFscmVhZHkgZXhpc3Rz
LCBpZ25vcmUgdGhlIHBhc3NlZC1pbiBlc3RpbWF0ZWQgc2l6ZSBhbmQgc2F5IGl0J3MgT0suCisg
ICAgaWYgKGhhc0VudHJ5Rm9yRGF0YWJhc2Uob3JpZ2luLCBuYW1lKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CiAKLSAgICAgICAgLy8gSWYgdGhlIGRhdGFiYXNlIHdpbGwgZml0LCBhbGxvdyBpdHMg
Y3JlYXRpb24uCi0gICAgICAgIHJlcXVpcmVtZW50ID0gdXNhZ2UgKyBtYXgoMVVMLCBlc3RpbWF0
ZWRTaXplKTsKLSAgICAgICAgaWYgKHJlcXVpcmVtZW50IDwgdXNhZ2UpIHsKLSAgICAgICAgICAg
IGRvbmVDcmVhdGluZ0RhdGFiYXNlKG9yaWdpbiwgbmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIElmIHRoZSBlc3RpbWF0ZWQgc2l6ZSBpcyBzbyBiaWcgaXQgY2F1c2VzIGFuIG92
ZXJmbG93LCBkb24ndCBhbGxvdyBjcmVhdGlvbi4KLSAgICAgICAgfQotICAgICAgICBpZiAocmVx
dWlyZW1lbnQgPD0gcXVvdGFGb3JPcmlnaW5Ob0xvY2sob3JpZ2luKSkKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGlmIChoYXNBZGVxdWF0ZVF1b3RhRm9yT3JpZ2luKG9yaWdpbiwgZXN0
aW1hdGVkU2l6ZSwgZXJyb3IpKSB7CisgICAgICAgIEFTU0VSVChlcnJvciA9PSBEYXRhYmFzZUVy
cm9yOjpOb25lKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgLy8gR2l2ZSB0
aGUgY2hyb21lIGNsaWVudCBhIGNoYW5jZSB0byBpbmNyZWFzZSB0aGUgcXVvdGEuCi0gICAgLy8g
RHJvcCBhbGwgbG9ja3MgYmVmb3JlIGNhbGxpbmcgb3V0OyB3ZSBkb24ndCBrbm93IHdoYXQgdGhl
eSdsbCBkby4KLSAgICBjb250ZXh0LT5kYXRhYmFzZUV4Y2VlZGVkUXVvdGEobmFtZSwgRGF0YWJh
c2VEZXRhaWxzKG5hbWUuaXNvbGF0ZWRDb3B5KCksIGRpc3BsYXlOYW1lLmlzb2xhdGVkQ29weSgp
LCBlc3RpbWF0ZWRTaXplLCAwKSk7CisgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHRoZW4gd2UgZG8g
bm90IGhhdmUgZW5vdWdoIHF1b3RhIGZvciBvbmUgb2YgdGhlCisgICAgLy8gZm9sbG93aW5nIHJl
YXNvbnMgYXMgaW5kaWNhdGVkIGJ5IHRoZSBzZXQgZXJyb3I6CisgICAgLy8KKyAgICAvLyBJZiB0
aGUgZXJyb3IgaXMgRGF0YWJhc2VTaXplT3ZlcmZsb3dlZCwgdGhlbiB0aGlzIG1lYW5zIHRoZSBy
ZXF1ZXN0ZWQKKyAgICAvLyBlc3RpbWF0ZWRTaXplIGlmIHNvIHVucmVhc29uYWJseSBsYXJnZSB0
aGF0IGl0IGNhbiBjYXVzZSBhbiBvdmVyZmxvdyBpbgorICAgIC8vIHRoZSB1c2FnZSBidWRnZXQg
Y29tcHV0YXRpb24uIEluIHRoYXQgY2FzZSwgdGhlcmUncyBub3RoaW5nIG1vcmUgd2UgY2FuCisg
ICAgLy8gZG8sIGFuZCB0aGVyZSdzIG5vIG5lZWQgZm9yIGEgcmV0cnkuIEhlbmNlLCB3ZSBzaG91
bGQgaW5kaWNhdGUgdGhhdAorICAgIC8vIHdlJ3JlIGRvbmUgd2l0aCBvdXIgYXR0ZW1wdCB0byBj
cmVhdGUgdGhlIGRhdGFiYXNlLgorICAgIC8vCisgICAgLy8gSWYgdGhlIGVycm9yIGlzIERhdGFi
YXNlU2l6ZUV4Y2VlZGVkUXVvdGEsIHRoZW4gd2UnbGwgZ2l2ZSB0aGUgY2xpZW50CisgICAgLy8g
YSBjaGFuY2UgdG8gdXBkYXRlIHRoZSBxdW90YSBhbmQgY2FsbCByZXRyeUNhbkVzdGFibGlzaERh
dGFiYXNlKCkgdG8gdHJ5CisgICAgLy8gYWdhaW4uIEhlbmNlLCB3ZSBkb24ndCBjYWxsIGRvbmVD
cmVhdGluZ0RhdGFiYXNlKCkgeWV0IGluIHRoYXQgY2FzZS4KKworICAgIGlmIChlcnJvciA9PSBE
YXRhYmFzZUVycm9yOjpEYXRhYmFzZVNpemVPdmVyZmxvd2VkKQorICAgICAgICBkb25lQ3JlYXRp
bmdEYXRhYmFzZShvcmlnaW4sIG5hbWUpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUKGVycm9y
ID09IERhdGFiYXNlRXJyb3I6OkRhdGFiYXNlU2l6ZUV4Y2VlZGVkUXVvdGEpOworCisgICAgcmV0
dXJuIGZhbHNlOworfQorCisvLyBOb3RlOiBhIHRob3VnaHQgYWJvdXQgcGVyZm9ybWFuY2U6IGhh
c0FkZXF1YXRlUXVvdGFGb3JPcmlnaW4oKSB3YXMgYWxzbworLy8gY2FsbGVkIGluIGNhbkVzdGFi
bGlzaERhdGFiYXNlKCksIGFuZCBoZW5jZSwgd2UncmUgcmVwZWF0aW5nIHNvbWUgd29yayB3aXRo
aW4KKy8vIGhhc0FkZXF1YXRlUXVvdGFGb3JPcmlnaW4oKS4gSG93ZXZlciwgcmV0cnlDYW5Fc3Rh
Ymxpc2hEYXRhYmFzZSgpIHNob3VsZCBvbmx5CisvLyBiZSBjYWxsZWQgaW4gdGhlIHJhcmUgZXZl
biBpZiBjYW5Fc3RhYmxpc2hEYXRhYmFzZSgpIGZhaWxzLiBTaW5jZSBpdCBpcyByYXJlLAorLy8g
d2Ugc2hvdWxkIG5vdCBib3RoZXIgb3B0aW1pemluZyBpdC4gSXQgaXMgbW9yZSBiZW5lZmljaWFs
IHRvIGtlZXAKKy8vIGhhc0FkZXF1YXRlUXVvdGFGb3JPcmlnaW4oKSBzaW1wbGUgYW5kIGNvcnJl
Y3QgKGkuZS4gYnVnIGZyZWUpLCBhbmQganVzdAorLy8gcmUtdXNlIGl0LiBBbHNvIG5vdGUgdGhh
dCB0aGUgcGF0aCBmb3Igb3BlbmluZyBhIGRhdGFiYXNlIGludm9sdmVzIElPLCBhbmQKKy8vIGhl
bmNlIHNob3VsZCBub3QgYmUgYSBwZXJmb3JtYW5jZSBjcml0aWNhbCBwYXRoIGFueXdheS4gCiti
b29sIERhdGFiYXNlVHJhY2tlcjo6cmV0cnlDYW5Fc3RhYmxpc2hEYXRhYmFzZShEYXRhYmFzZUJh
Y2tlbmRDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
ZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgRGF0YWJhc2VFcnJvciYg
ZXJyb3IpCit7CisgICAgLy8gQ2hyb21pdW0gbmVlZHMgdGhlIGRpc3BsYXlOYW1lIGluIGNhbkVz
dGFibGlzaERhdGFiYXNlKCksIGJ1dCB3ZSBkb24ndC4KKyAgICAvLyBUaG91Z2ggQ2hyb21pdW0g
ZG9lcyBub3QgdXNlIHJldHJ5Q2FuRXN0YWJsaXNoRGF0YWJhc2UoKSwgd2Ugc2hvdWxkCisgICAg
Ly8ga2VlcCB0aGUgcHJvdG90eXBlcyBmb3IgY2FuRXN0YWJsaXNoRGF0YWJhc2UoKSBhbmQgaXRz
IHJldHJ5IGZ1bmN0aW9uCisgICAgLy8gdGhlIHNhbWUuIEhlbmNlLCB3ZSBhbHNvIGhhdmUgYW4g
dW5uZWVkZWQgZGlzcGxheU5hbWUgYXJnIGhlcmUuCisgICAgVU5VU0VEX1BBUkFNKGRpc3BsYXlO
YW1lKTsKKyAgICBlcnJvciA9IERhdGFiYXNlRXJyb3I6Ok5vbmU7CiAKICAgICBNdXRleExvY2tl
ciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKKyAgICBMb2NrZXI8T3JpZ2luUXVvdGFN
YW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOworICAgIFNl
Y3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpOwogCi0gICAg
Ly8gSWYgdGhlIGRhdGFiYXNlIHdpbGwgZml0IG5vdywgYWxsb3cgaXRzIGNyZWF0aW9uLgotICAg
IGlmIChyZXF1aXJlbWVudCA8PSBxdW90YUZvck9yaWdpbk5vTG9jayhvcmlnaW4pKQorICAgIC8v
IFdlIGhhdmUgYWxyZWFkeSBlbGltaW5hdGVkIG90aGVyIHR5cGVzIG9mIGVycm9ycyBpbiBjYW5F
c3RhYmxpc2hEYXRhYmFzZSgpLgorICAgIC8vIFRoZSBvbmx5IHJlYXNvbiB3ZSdyZSBpbiByZXRy
eUNhbkVzdGFibGlzaERhdGFiYXNlKCkgaXMgYmVjYXVzZSB3ZSBnYXZlCisgICAgLy8gdGhlIGNs
aWVudCBhIGNoYW5jZSB0byB1cGRhdGUgdGhlIHF1b3RhIGFuZCBhcmUgcmVjaGVja2luZyBpdCBo
ZXJlLgorICAgIC8vIElmIHdlIGZhaWwgdGhpcyBjaGVjaywgdGhlIG9ubHkgcG9zc2libGUgcmVh
c29uIHRoaXMgdGltZSBzaG91bGQgYmUgZHVlCisgICAgLy8gdG8gaW5hZGVxdWF0ZSBxdW90YS4K
KyAgICBpZiAoaGFzQWRlcXVhdGVRdW90YUZvck9yaWdpbihvcmlnaW4sIGVzdGltYXRlZFNpemUs
IGVycm9yKSkgeworICAgICAgICBBU1NFUlQoZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6Tm9uZSk7
CiAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAorICAgIEFTU0VSVChlcnJvciA9PSBEYXRh
YmFzZUVycm9yOjpEYXRhYmFzZVNpemVFeGNlZWRlZFF1b3RhKTsKICAgICBkb25lQ3JlYXRpbmdE
YXRhYmFzZShvcmlnaW4sIG5hbWUpOwogCiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5o
CShyZXZpc2lvbiAxNDE5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlVHJhY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAKICNp
ZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiRGF0YWJhc2VFcnJvci5oIgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC03MCw3ICs3MSw5IEBAIHB1YmxpYzoKICAgICAv
LyBtX2RhdGFiYXNlR3VhcmQgYW5kIG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQgY3VycmVudGx5IGRv
bid0IG92ZXJsYXAuCiAgICAgLy8gbm90aWZpY2F0aW9uTXV0ZXgoKSBpcyBjdXJyZW50bHkgaW5k
ZXBlbmRlbnQgb2YgdGhlIG90aGVyIGxvY2tzLgogCi0gICAgYm9vbCBjYW5Fc3RhYmxpc2hEYXRh
YmFzZShEYXRhYmFzZUJhY2tlbmRDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOworICAgIGJv
b2wgY2FuRXN0YWJsaXNoRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kQ29udGV4dCosIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3Rp
bWF0ZWRTaXplLCBEYXRhYmFzZUVycm9yJik7CisgICAgYm9vbCByZXRyeUNhbkVzdGFibGlzaERh
dGFiYXNlKERhdGFiYXNlQmFja2VuZENvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgRGF0YWJh
c2VFcnJvciYpOworCiAgICAgdm9pZCBzZXREYXRhYmFzZURldGFpbHMoU2VjdXJpdHlPcmlnaW4q
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVk
IGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAgICAgU3RyaW5nIGZ1bGxQYXRoRm9yRGF0YWJhc2UoU2Vj
dXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgY3JlYXRlSWZEb2VzTm90RXhp
c3QgPSB0cnVlKTsKIApAQCAtODYsNiArODksOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4
cGxpY2l0IERhdGFiYXNlVHJhY2tlcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCk7CiAKKyAg
ICBib29sIGhhc0FkZXF1YXRlUXVvdGFGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qLCB1bnNpZ25l
ZCBsb25nIGVzdGltYXRlZFNpemUsIERhdGFiYXNlRXJyb3ImKTsKKwogI2lmICFQTEFURk9STShD
SFJPTUlVTSkKIHB1YmxpYzoKICAgICB2b2lkIHNldERhdGFiYXNlRGlyZWN0b3J5UGF0aChjb25z
dCBTdHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvV29y
a2VyQ29udGV4dFdlYkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL1dvcmtlckNvbnRleHRXZWJEYXRhYmFzZS5jcHAJKHJldmlzaW9u
IDE0MTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvV29ya2VyQ29u
dGV4dFdlYkRhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTMgKzQ1LDExIEBAIFBh
c3NSZWZQdHI8RGF0YWJhc2U+IFdvcmtlckNvbnRleHRXZWJEYXQKICAgICBEYXRhYmFzZU1hbmFn
ZXImIGRiTWFuYWdlciA9IERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpOwogICAgIFJlZlB0cjxE
YXRhYmFzZT4gZGF0YWJhc2U7CiAgICAgRGF0YWJhc2VFcnJvciBlcnJvciA9IERhdGFiYXNlRXJy
b3I6Ok5vbmU7Ci0gICAgaWYgKGRiTWFuYWdlci5pc0F2YWlsYWJsZSgpICYmIGNvbnRleHQtPnNl
Y3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKGNvbnRleHQtPnRvcE9yaWdpbigpKSkK
KyAgICBpZiAoZGJNYW5hZ2VyLmlzQXZhaWxhYmxlKCkgJiYgY29udGV4dC0+c2VjdXJpdHlPcmln
aW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoY29udGV4dC0+dG9wT3JpZ2luKCkpKSB7CiAgICAgICAg
IGRhdGFiYXNlID0gZGJNYW5hZ2VyLm9wZW5EYXRhYmFzZShjb250ZXh0LCBuYW1lLCB2ZXJzaW9u
LCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgY3JlYXRpb25DYWxsYmFjaywgZXJyb3IpOwot
Ci0gICAgQVNTRVJUKGVycm9yID09IERhdGFiYXNlRXJyb3I6Ok5vbmUgfHwgZXJyb3IgPT0gRGF0
YWJhc2VFcnJvcjo6Q2Fubm90T3BlbkRhdGFiYXNlKTsKLSAgICBpZiAoZXJyb3IgPT0gRGF0YWJh
c2VFcnJvcjo6Q2Fubm90T3BlbkRhdGFiYXNlKQotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVf
RVJSOwotICAgIGlmICghZGF0YWJhc2UgJiYgIWVjKQorICAgICAgICBBU1NFUlQoZGF0YWJhc2Ug
fHwgZXJyb3IgIT0gRGF0YWJhc2VFcnJvcjo6Tm9uZSk7CisgICAgICAgIGVjID0gRGF0YWJhc2VN
YW5hZ2VyOjpleGNlcHRpb25Db2RlRm9yRGF0YWJhc2VFcnJvcihlcnJvcik7CisgICAgfSBlbHNl
CiAgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwogCiAgICAgcmV0dXJuIGRhdGFiYXNlLnJlbGVh
c2UoKTsKQEAgLTYyLDEzICs2MCwxMiBAQCBQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gV29ya2Vy
Q29udGV4dFdlCiAgICAgRGF0YWJhc2VNYW5hZ2VyJiBkYk1hbmFnZXIgPSBEYXRhYmFzZU1hbmFn
ZXI6Om1hbmFnZXIoKTsKICAgICBSZWZQdHI8RGF0YWJhc2VTeW5jPiBkYXRhYmFzZTsKICAgICBE
YXRhYmFzZUVycm9yIGVycm9yID0gIERhdGFiYXNlRXJyb3I6Ok5vbmU7Ci0gICAgaWYgKGRiTWFu
YWdlci5pc0F2YWlsYWJsZSgpICYmIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vz
c0RhdGFiYXNlKGNvbnRleHQtPnRvcE9yaWdpbigpKSkKKyAgICBpZiAoZGJNYW5hZ2VyLmlzQXZh
aWxhYmxlKCkgJiYgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2Uo
Y29udGV4dC0+dG9wT3JpZ2luKCkpKSB7CiAgICAgICAgIGRhdGFiYXNlID0gZGJNYW5hZ2VyLm9w
ZW5EYXRhYmFzZVN5bmMoY29udGV4dCwgbmFtZSwgdmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGlt
YXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJhY2ssIGVycm9yKTsKIAotICAgIEFTU0VSVChlcnJvciA9
PSBEYXRhYmFzZUVycm9yOjpOb25lIHx8IGVycm9yID09IERhdGFiYXNlRXJyb3I6OkNhbm5vdE9w
ZW5EYXRhYmFzZSk7Ci0gICAgaWYgKGVycm9yID09IERhdGFiYXNlRXJyb3I6OkNhbm5vdE9wZW5E
YXRhYmFzZSkKLSAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICBpZiAoIWRhdGFi
YXNlICYmICFlYykKKyAgICAgICAgQVNTRVJUKGRhdGFiYXNlIHx8IGVycm9yICE9IERhdGFiYXNl
RXJyb3I6Ok5vbmUpOworICAgICAgICBlYyA9IERhdGFiYXNlTWFuYWdlcjo6ZXhjZXB0aW9uQ29k
ZUZvckRhdGFiYXNlRXJyb3IoZXJyb3IpOworICAgIH0gZWxzZQogICAgICAgICBlYyA9IFNFQ1VS
SVRZX0VSUjsKIAogICAgIHJldHVybiBkYXRhYmFzZS5yZWxlYXNlKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9t
aXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcAkocmV2aXNpb24gMTQxOTY1KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRy
YWNrZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNs
dWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luSGFzaC5oIgog
I2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIApAQCAtNTcsMTAgKzU4LDE5IEBAIERhdGFiYXNlVHJhY2tlcjo6RGF0YWJhc2VU
cmFja2VyKGNvbnN0IFMKICAgICBTUUxpdGVGaWxlU3lzdGVtOjpyZWdpc3RlclNRTGl0ZVZGUygp
OwogfQogCi1ib29sIERhdGFiYXNlVHJhY2tlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2UoRGF0YWJh
c2VCYWNrZW5kQ29udGV4dCogZGF0YWJhc2VDb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKK2Jv
b2wgRGF0YWJhc2VUcmFja2VyOjpjYW5Fc3RhYmxpc2hEYXRhYmFzZShEYXRhYmFzZUJhY2tlbmRD
b250ZXh0KiBkYXRhYmFzZUNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBEYXRhYmFzZUVycm9y
JiBlcnJvcikKIHsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0ID0gZGF0YWJhc2VDb250ZXh0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAg
cmV0dXJuIERhdGFiYXNlT2JzZXJ2ZXI6OmNhbkVzdGFibGlzaERhdGFiYXNlKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsKKyAgICBib29s
IHN1Y2Nlc3MgPSBEYXRhYmFzZU9ic2VydmVyOjpjYW5Fc3RhYmxpc2hEYXRhYmFzZShzY3JpcHRF
eGVjdXRpb25Db250ZXh0LCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7CisgICAg
aWYgKCFzdWNjZXNzKQorICAgICAgICBlcnJvciA9IERhdGFiYXNlRXJyb3I6OkdlbmVyaWNTZWN1
cml0eUVycm9yOworICAgIHJldHVybiBzdWNjZXNzOworfQorCitib29sIERhdGFiYXNlVHJhY2tl
cjo6cmV0cnlDYW5Fc3RhYmxpc2hEYXRhYmFzZShEYXRhYmFzZUJhY2tlbmRDb250ZXh0KiwgY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgbG9uZywgRGF0YWJhc2VFcnJvciYp
Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2
b2lkIERhdGFiYXNlVHJhY2tlcjo6c2V0RGF0YWJhc2VEZXRhaWxzKFNlY3VyaXR5T3JpZ2luKiwg
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgbG9uZykK
</data>
<flag name="review"
          id="206523"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>