<?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>76855</bug_id>
          
          <creation_ts>2012-01-23 13:04:58 -0800</creation_ts>
          <short_desc>Implement a JIT-code aware sampling profiler for JSC</short_desc>
          <delta_ts>2012-01-30 12:38:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>efidler</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gustavo</cc>
    
    <cc>mitz</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>540770</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-23 13:04:58 -0800</bug_when>
    <thetext>We should be able to implement an non-intrusive mechanism to sample activity, recording the current running codeblock, able to generate profiles showing statistical distribution of time between JITs, JS functions, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540775</commentid>
    <comment_count>1</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-23 13:09:05 -0800</bug_when>
    <thetext>Part 1 landed in r105636.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540871</commentid>
    <comment_count>2</comment_count>
      <attachid>123631</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-23 15:02:36 -0800</bug_when>
    <thetext>Created attachment 123631
Pt2, generalize RedBlackTree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540872</commentid>
    <comment_count>3</comment_count>
      <attachid>123632</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-23 15:06:15 -0800</bug_when>
    <thetext>Created attachment 123632
Ooops, revert unnecessary change to MetaAllocatorHandle</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540873</commentid>
    <comment_count>4</comment_count>
      <attachid>123632</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-01-23 15:10:43 -0800</bug_when>
    <thetext>Comment on attachment 123632
Ooops, revert unnecessary change to MetaAllocatorHandle

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        Step 2: generalize RedBlackTree. The profiler is going to want tio use

Typo: tio.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540886</commentid>
    <comment_count>5</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-23 15:31:21 -0800</bug_when>
    <thetext>pt 2 landed in r105646</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541020</commentid>
    <comment_count>6</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-23 17:23:11 -0800</bug_when>
    <thetext>Oooops, shouldn&apos;t have marked as fixed yet!
Also, build fix in r105666.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541857</commentid>
    <comment_count>7</comment_count>
      <attachid>123845</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-24 17:00:32 -0800</bug_when>
    <thetext>Created attachment 123845
Add mechanism to MetaAllocator to allow allocations to be tracked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544416</commentid>
    <comment_count>8</comment_count>
      <attachid>124378</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-27 15:10:08 -0800</bug_when>
    <thetext>Created attachment 124378
The profiler.  Will probably require some PLATFORM(MAC) guards to make this compiler on non-OS X builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544419</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-27 15:13:33 -0800</bug_when>
    <thetext>Attachment 124378 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 18 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>544420</commentid>
    <comment_count>10</comment_count>
      <attachid>124378</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-27 15:13:42 -0800</bug_when>
    <thetext>Comment on attachment 124378
The profiler.  Will probably require some PLATFORM(MAC) guards to make this compiler on non-OS X builds.

Attachment 124378 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11359180</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544468</commentid>
    <comment_count>11</comment_count>
      <attachid>124378</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-01-27 15:55:01 -0800</bug_when>
    <thetext>Comment on attachment 124378
The profiler.  Will probably require some PLATFORM(MAC) guards to make this compiler on non-OS X builds.

Attachment 124378 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11359190</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544479</commentid>
    <comment_count>12</comment_count>
      <attachid>124391</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-27 16:05:03 -0800</bug_when>
    <thetext>Created attachment 124391
Build fixes (patch already reviewed by oliver)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544487</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-27 16:07:54 -0800</bug_when>
    <thetext>Attachment 124391 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1

Source/JavaScriptCore/Target.pri:212:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/Target.pri:213:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/CMakeLists.txt:203:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/CMakeLists.txt:204:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 5 in 22 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>544504</commentid>
    <comment_count>14</comment_count>
      <attachid>124398</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-27 16:36:15 -0800</bug_when>
    <thetext>Created attachment 124398
More build fixes (patch already reviewed by oliver)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544524</commentid>
    <comment_count>15</comment_count>
      <attachid>124398</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-01-27 17:09:01 -0800</bug_when>
    <thetext>Comment on attachment 124398
More build fixes (patch already reviewed by oliver)

Attachment 124398 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11359226</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544526</commentid>
    <comment_count>16</comment_count>
      <attachid>124403</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-27 17:11:37 -0800</bug_when>
    <thetext>Created attachment 124403
More build fixes (patch already reviewed by oliver)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544528</commentid>
    <comment_count>17</comment_count>
      <attachid>124404</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-27 17:14:04 -0800</bug_when>
    <thetext>Created attachment 124404
More build fixes (patch already reviewed by oliver)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544535</commentid>
    <comment_count>18</comment_count>
      <attachid>124404</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-01-27 17:35:18 -0800</bug_when>
    <thetext>Comment on attachment 124404
More build fixes (patch already reviewed by oliver)

Attachment 124404 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11359241</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544540</commentid>
    <comment_count>19</comment_count>
      <attachid>124404</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-01-27 17:42:46 -0800</bug_when>
    <thetext>Comment on attachment 124404
More build fixes (patch already reviewed by oliver)

Attachment 124404 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11358356</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544545</commentid>
    <comment_count>20</comment_count>
      <attachid>124404</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-01-27 17:46:52 -0800</bug_when>
    <thetext>Comment on attachment 124404
More build fixes (patch already reviewed by oliver)

Attachment 124404 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11358358</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544559</commentid>
    <comment_count>21</comment_count>
      <attachid>124411</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-27 18:04:48 -0800</bug_when>
    <thetext>Created attachment 124411
More build fixes (patch already reviewed by oliver)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544572</commentid>
    <comment_count>22</comment_count>
      <attachid>124411</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-01-27 18:17:01 -0800</bug_when>
    <thetext>Comment on attachment 124411
More build fixes (patch already reviewed by oliver)

Attachment 124411 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11360226</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544577</commentid>
    <comment_count>23</comment_count>
      <attachid>124411</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-01-27 18:23:28 -0800</bug_when>
    <thetext>Comment on attachment 124411
More build fixes (patch already reviewed by oliver)

Attachment 124411 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11191933</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544578</commentid>
    <comment_count>24</comment_count>
      <attachid>124418</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-27 18:27:01 -0800</bug_when>
    <thetext>Created attachment 124418
More build fixes (patch already reviewed by oliver)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544581</commentid>
    <comment_count>25</comment_count>
      <attachid>124421</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-27 18:34:33 -0800</bug_when>
    <thetext>Created attachment 124421
More build fixes (patch already reviewed by oliver)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544587</commentid>
    <comment_count>26</comment_count>
      <attachid>124421</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-01-27 18:58:17 -0800</bug_when>
    <thetext>Comment on attachment 124421
More build fixes (patch already reviewed by oliver)

Attachment 124421 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11360243</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544588</commentid>
    <comment_count>27</comment_count>
      <attachid>124423</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-27 19:00:21 -0800</bug_when>
    <thetext>Created attachment 124423
More build fixes (patch already reviewed by oliver)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544596</commentid>
    <comment_count>28</comment_count>
      <attachid>124423</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-01-27 19:26:52 -0800</bug_when>
    <thetext>Comment on attachment 124423
More build fixes (patch already reviewed by oliver)

Attachment 124423 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11360246</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544619</commentid>
    <comment_count>29</comment_count>
      <attachid>124430</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-27 23:01:52 -0800</bug_when>
    <thetext>Created attachment 124430
More build fixes (patch already reviewed by oliver)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544713</commentid>
    <comment_count>30</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-28 19:47:43 -0800</bug_when>
    <thetext>Fixed in r106197</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544740</commentid>
    <comment_count>31</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-01-29 09:33:48 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; Fixed in r106197

This broke the TestWebKitAPI build: &lt;http://build.webkit.org/builders/Lion%20Intel%20Debug%20%28Tests%29/builds/3058/steps/run-api-tests/logs/stdio/text&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545233</commentid>
    <comment_count>32</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-30 11:27:09 -0800</bug_when>
    <thetext>build fix in r106264.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545314</commentid>
    <comment_count>33</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-30 12:38:50 -0800</bug_when>
    <thetext>Interpreter build fixed in r106276</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123631</attachid>
            <date>2012-01-23 15:02:36 -0800</date>
            <delta_ts>2012-01-23 15:06:15 -0800</delta_ts>
            <desc>Pt2, generalize RedBlackTree</desc>
            <filename>76855.1.patch</filename>
            <type>text/plain</type>
            <size>25683</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBA
CisyMDEyLTAxLTIzICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY4NTUK
KyAgICAgICAgSW1wbGVtZW50IGEgSklULWNvZGUgYXdhcmUgc2FtcGxpbmcgcHJvZmlsZXIgZm9y
IEpTQworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN0
ZXAgMjogZ2VuZXJhbGl6ZSBSZWRCbGFja1RyZWUuIFRoZSBwcm9maWxlciBpcyBnb2luZyB0byB3
YW50IHRpbyB1c2UKKyAgICAgICAgYSBSZWRCbGFja1RyZWUsIGFsbG93IHRoaXMgY2xhc3MgdG8g
d29yayB3aXRoIHN1YmNsYXNzZXMgb2YKKyAgICAgICAgUmVkQmxhY2tUcmVlOjpOb2RlLCBOb2Rl
IHNob3VsZCBub3QgbmVlZCB0byBrbm93IHRoZSBuYW1lcyBvZiB0aGUgbV9rZXkKKyAgICAgICAg
YW5kIG1fdmFsdWUgZmllbGRzICh0aGUgc3ViY2xhc3MgY2FuIHByb3ZpZGUgYSBrZXkoKSBhY2Nl
c3NvciksIGFuZAorICAgICAgICBSZWRCbGFja1RyZWUgZG9lcyBub3QgbmVlZCB0byBrbm93IGFu
eXRoaW5nIGFib3V0IFZhbHVlVHlwZS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDoK
KyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6CisgICAgICAgIChXVEY6Ok1ldGFBbGxv
Y2F0b3I6OmZpbmRBbmRSZW1vdmVGcmVlU3BhY2UpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2Nh
dG9yOjpkZWJ1Z0ZyZWVTcGFjZVNpemUpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjph
ZGRGcmVlU3BhY2UpOgorICAgICAgICAqIHd0Zi9NZXRhQWxsb2NhdG9yLmg6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3I6OkZyZWVTcGFjZU5vZGU6OkZyZWVTcGFjZU5vZGUpOgorICAgICAg
ICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpGcmVlU3BhY2VOb2RlOjprZXkpOgorICAgICAgICAqIHd0
Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmg6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5k
bGU6OmtleSk6CisgICAgICAgICogd3RmL1JlZEJsYWNrVHJlZS5oOgorICAgICAgICAoV1RGOjpS
ZWRCbGFja1RyZWU6Ok5vZGU6OnN1Y2Nlc3Nvcik6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJl
ZTo6Tm9kZTo6cHJlZGVjZXNzb3IpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6Ok5vZGU6
OnBhcmVudCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6Tm9kZTo6c2V0UGFyZW50KToK
KyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpOb2RlOjpsZWZ0KToKKyAgICAgICAgKFdURjo6
UmVkQmxhY2tUcmVlOjpOb2RlOjpzZXRMZWZ0KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVl
OjpOb2RlOjpyaWdodCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6Tm9kZTo6c2V0Umln
aHQpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6Omluc2VydCk6CisgICAgICAgIChXVEY6
OlJlZEJsYWNrVHJlZTo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpmaW5k
RXhhY3QpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OmZpbmRMZWFzdEdyZWF0ZXJUaGFu
T3JFcXVhbCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6ZmluZEdyZWF0ZXN0TGVzc1Ro
YW5PckVxdWFsKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpmaXJzdCk6CisgICAgICAg
IChXVEY6OlJlZEJsYWNrVHJlZTo6bGFzdCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6
c2l6ZSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6dHJlZU1pbmltdW0pOgorICAgICAg
ICAoV1RGOjpSZWRCbGFja1RyZWU6OnRyZWVNYXhpbXVtKToKKyAgICAgICAgKFdURjo6UmVkQmxh
Y2tUcmVlOjp0cmVlSW5zZXJ0KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpsZWZ0Um90
YXRlKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpyaWdodFJvdGF0ZSk6CisgICAgICAg
IChXVEY6OlJlZEJsYWNrVHJlZTo6cmVtb3ZlRml4dXApOgorCiAyMDEyLTAxLTIzICBBbmR5IEVz
dGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdGhlIGJ1aWxkIGFmdGVyIHIx
MDU2MzUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJl
dmlzaW9uIDEwNTYzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5l
eHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMSw3ICs0MTEsNiBAQCBfX1pOM1dURjEyZGV0YWNoVGhy
ZWFkRWoKIF9fWk4zV1RGMTJpc01haW5UaHJlYWRFdgogX19aTjNXVEYxMnJhbmRvbU51bWJlckV2
CiBfX1pOM1dURjEzTWV0YUFsbG9jYXRvcjE3YWRkRnJlc2hGcmVlU3BhY2VFUHZtCi1fX1pOM1dU
RjEzTWV0YUFsbG9jYXRvcjE3ZnJlZUZyZWVTcGFjZU5vZGVFUE5TXzEyUmVkQmxhY2tUcmVlSW1Q
dkU0Tm9kZUUKIF9fWk4zV1RGMTNNZXRhQWxsb2NhdG9yMThkZWJ1Z0ZyZWVTcGFjZVNpemVFdgog
X19aTjNXVEYxM01ldGFBbGxvY2F0b3I4YWxsb2NhdGVFbQogX19aTjNXVEYxM01ldGFBbGxvY2F0
b3JDMkVtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5j
cHAJKHJldmlzaW9uIDEwNTYzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFs
bG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCwxOCArMTc4LDE4IEBAIHZvaWQqIE1l
dGFBbGxvY2F0b3I6OmZpbmRBbmRSZW1vdmVGcmVlU3AKICAgICBpZiAoIW5vZGUpCiAgICAgICAg
IHJldHVybiAwOwogICAgIAotICAgIEFTU0VSVChub2RlLT5tX2tleSA+PSBzaXplSW5CeXRlcyk7
CisgICAgQVNTRVJUKG5vZGUtPm1fc2l6ZUluQnl0ZXMgPj0gc2l6ZUluQnl0ZXMpOwogICAgIAog
ICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5yZW1vdmUobm9kZSk7CiAgICAgCiAgICAgdm9pZCogcmVz
dWx0OwogICAgIAotICAgIGlmIChub2RlLT5tX2tleSA9PSBzaXplSW5CeXRlcykgeworICAgIGlm
IChub2RlLT5tX3NpemVJbkJ5dGVzID09IHNpemVJbkJ5dGVzKSB7CiAgICAgICAgIC8vIEVhc3kg
Y2FzZTogcGVyZmVjdCBmaXQsIHNvIGp1c3QgcmVtb3ZlIHRoZSBub2RlIGVudGlyZWx5LgotICAg
ICAgICByZXN1bHQgPSBub2RlLT5tX3ZhbHVlOworICAgICAgICByZXN1bHQgPSBub2RlLT5tX3N0
YXJ0OwogICAgICAgICAKLSAgICAgICAgbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAucmVtb3Zl
KG5vZGUtPm1fdmFsdWUpOwotICAgICAgICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAucmVtb3Zl
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2Rl
LT5tX3ZhbHVlKSArIG5vZGUtPm1fa2V5KSk7CisgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRy
ZXNzTWFwLnJlbW92ZShub2RlLT5tX3N0YXJ0KTsKKyAgICAgICAgbV9mcmVlU3BhY2VFbmRBZGRy
ZXNzTWFwLnJlbW92ZShyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4obm9kZS0+bV9zdGFydCkgKyBub2RlLT5tX3NpemVJbkJ5dGVzKSk7CiAgICAgICAg
IGZyZWVGcmVlU3BhY2VOb2RlKG5vZGUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFRyeSB0
byBiZSBhIGdvb2QgY2l0aXplbiBhbmQgZW5zdXJlIHRoYXQgdGhlIHJldHVybmVkIGNodW5rIG9m
IG1lbW9yeQpAQCAtMTk5LDMxICsxOTksMzEgQEAgdm9pZCogTWV0YUFsbG9jYXRvcjo6ZmluZEFu
ZFJlbW92ZUZyZWVTcAogICAgICAgICAvLyBvZiBjb21taXR0ZWQgcGFnZXMsIHNpbmNlIGluIHRo
ZSBsb25nIHJ1biwgc21hbGxlciBmcmFnbWVudGF0aW9uIG1lYW5zCiAgICAgICAgIC8vIGZld2Vy
IGNvbW1pdHRlZCBwYWdlcyBhbmQgZmV3ZXIgZmFpbHVyZXMgaW4gZ2VuZXJhbC4KICAgICAgICAg
Ci0gICAgICAgIHVpbnRwdHJfdCBmaXJzdFBhZ2UgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4obm9kZS0+bV92YWx1ZSkgPj4gbV9sb2dQYWdlU2l6ZTsKLSAgICAgICAgdWludHB0cl90IGxh
c3RQYWdlID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT5tX3ZhbHVlKSArIG5v
ZGUtPm1fa2V5IC0gMSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAgICAgdWludHB0cl90IGZpcnN0
UGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT5tX3N0YXJ0KSA+PiBtX2xv
Z1BhZ2VTaXplOworICAgICAgICB1aW50cHRyX3QgbGFzdFBhZ2UgPSAocmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KG5vZGUtPm1fc3RhcnQpICsgbm9kZS0+bV9zaXplSW5CeXRlcyAtIDEpID4+
IG1fbG9nUGFnZVNpemU7CiAgICAgCi0gICAgICAgIHVpbnRwdHJfdCBsYXN0UGFnZUZvckxlZnRB
bGxvY2F0aW9uID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT5tX3ZhbHVlKSAr
IHNpemVJbkJ5dGVzIC0gMSkgPj4gbV9sb2dQYWdlU2l6ZTsKLSAgICAgICAgdWludHB0cl90IGZp
cnN0UGFnZUZvclJpZ2h0QWxsb2NhdGlvbiA9IChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
bm9kZS0+bV92YWx1ZSkgKyBub2RlLT5tX2tleSAtIHNpemVJbkJ5dGVzKSA+PiBtX2xvZ1BhZ2VT
aXplOworICAgICAgICB1aW50cHRyX3QgbGFzdFBhZ2VGb3JMZWZ0QWxsb2NhdGlvbiA9IChyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+bV9zdGFydCkgKyBzaXplSW5CeXRlcyAtIDEp
ID4+IG1fbG9nUGFnZVNpemU7CisgICAgICAgIHVpbnRwdHJfdCBmaXJzdFBhZ2VGb3JSaWdodEFs
bG9jYXRpb24gPSAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPm1fc3RhcnQpICsg
bm9kZS0+bV9zaXplSW5CeXRlcyAtIHNpemVJbkJ5dGVzKSA+PiBtX2xvZ1BhZ2VTaXplOwogICAg
ICAgICAKICAgICAgICAgaWYgKGxhc3RQYWdlRm9yTGVmdEFsbG9jYXRpb24gLSBmaXJzdFBhZ2Ug
KyAxIDw9IGxhc3RQYWdlIC0gZmlyc3RQYWdlRm9yUmlnaHRBbGxvY2F0aW9uICsgMSkgewogICAg
ICAgICAgICAgLy8gQWxsb2NhdGUgaW4gdGhlIGxlZnQgc2lkZSBvZiB0aGUgcmV0dXJuZWQgY2h1
bmssIGFuZCBzbGlkZSB0aGUgbm9kZSB0byB0aGUgcmlnaHQuCi0gICAgICAgICAgICByZXN1bHQg
PSBub2RlLT5tX3ZhbHVlOworICAgICAgICAgICAgcmVzdWx0ID0gbm9kZS0+bV9zdGFydDsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAucmVtb3Zl
KG5vZGUtPm1fdmFsdWUpOworICAgICAgICAgICAgbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAu
cmVtb3ZlKG5vZGUtPm1fc3RhcnQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBub2RlLT5t
X2tleSAtPSBzaXplSW5CeXRlczsKLSAgICAgICAgICAgIG5vZGUtPm1fdmFsdWUgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+bV92YWx1
ZSkgKyBzaXplSW5CeXRlcyk7CisgICAgICAgICAgICBub2RlLT5tX3NpemVJbkJ5dGVzIC09IHNp
emVJbkJ5dGVzOworICAgICAgICAgICAgbm9kZS0+bV9zdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT5tX3N0YXJ0KSArIHNpemVJ
bkJ5dGVzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9mcmVlU3BhY2VTaXplTWFwLmlu
c2VydChub2RlKTsKLSAgICAgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLmFkZChu
b2RlLT5tX3ZhbHVlLCBub2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNz
TWFwLmFkZChub2RlLT5tX3N0YXJ0LCBub2RlKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIC8vIEFsbG9jYXRlIGluIHRoZSByaWdodCBzaXplIG9mIHRoZSByZXR1cm5lZCBjaHVuaywg
YW5kIHNsaWRlIHRoZSBub2RlIHRvIHRoZSBsZWZ0OwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4obm9kZS0+bV92YWx1ZSkgKyBub2RlLT5tX2tleSAtIHNpemVJbkJ5dGVzKTsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90Pihub2RlLT5tX3N0YXJ0KSArIG5vZGUtPm1fc2l6ZUluQnl0ZXMgLSBzaXplSW5C
eXRlcyk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVzc01h
cC5yZW1vdmUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KG5vZGUtPm1fdmFsdWUpICsgbm9kZS0+bV9rZXkpKTsKKyAgICAgICAgICAgIG1fZnJlZVNw
YWNlRW5kQWRkcmVzc01hcC5yZW1vdmUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPm1fc3RhcnQpICsgbm9kZS0+bV9zaXplSW5CeXRlcykp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBub2RlLT5tX2tleSAtPSBzaXplSW5CeXRlczsK
KyAgICAgICAgICAgIG5vZGUtPm1fc2l6ZUluQnl0ZXMgLT0gc2l6ZUluQnl0ZXM7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5pbnNlcnQobm9kZSk7CiAgICAg
ICAgICAgICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAuYWRkKHJlc3VsdCwgbm9kZSk7CkBAIC0y
NTUsNyArMjU1LDcgQEAgc2l6ZV90IE1ldGFBbGxvY2F0b3I6OmRlYnVnRnJlZVNwYWNlU2l6ZQog
ICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKICAgICBzaXplX3QgcmVzdWx0ID0g
MDsKICAgICBmb3IgKEZyZWVTcGFjZU5vZGUqIG5vZGUgPSBtX2ZyZWVTcGFjZVNpemVNYXAuZmly
c3QoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnN1Y2Nlc3NvcigpKQotICAgICAgICByZXN1bHQgKz0g
bm9kZS0+bV9rZXk7CisgICAgICAgIHJlc3VsdCArPSBub2RlLT5tX3NpemVJbkJ5dGVzOwogICAg
IHJldHVybiByZXN1bHQ7CiAjZWxzZQogICAgIENSQVNIKCk7CkBAIC0yNzQsMTIgKzI3NCwxMiBA
QCB2b2lkIE1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZSh2b2lkKiBzCiAgICAgICAgIC8vIFdl
IGhhdmUgc29tZXRoaW5nIHdlIGNhbiBjb2FsZXNjZSB3aXRoIG9uIHRoZSBsZWZ0LiBSZW1vdmUg
aXQgZnJvbSB0aGUgdHJlZSwgYW5kCiAgICAgICAgIC8vIHJlbW92ZSBpdHMgZW5kIGZyb20gdGhl
IGVuZCBhZGRyZXNzIG1hcC4KICAgICAgICAgCi0gICAgICAgIEFTU0VSVChyZWludGVycHJldF9j
YXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obGVmdE5laWdoYm9yLT5zZWNv
bmQtPm1fdmFsdWUpICsgbGVmdE5laWdoYm9yLT5zZWNvbmQtPm1fa2V5KSA9PSBsZWZ0TmVpZ2hi
b3ItPmZpcnN0KTsKKyAgICAgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihsZWZ0TmVpZ2hib3ItPnNlY29uZC0+bV9zdGFydCkgKyBs
ZWZ0TmVpZ2hib3ItPnNlY29uZC0+bV9zaXplSW5CeXRlcykgPT0gbGVmdE5laWdoYm9yLT5maXJz
dCk7CiAgICAgICAgIAogICAgICAgICBGcmVlU3BhY2VOb2RlKiBsZWZ0Tm9kZSA9IGxlZnROZWln
aGJvci0+c2Vjb25kOwogICAgICAgICAKLSAgICAgICAgdm9pZCogbGVmdFN0YXJ0ID0gbGVmdE5v
ZGUtPm1fdmFsdWU7Ci0gICAgICAgIHNpemVfdCBsZWZ0U2l6ZSA9IGxlZnROb2RlLT5tX2tleTsK
KyAgICAgICAgdm9pZCogbGVmdFN0YXJ0ID0gbGVmdE5vZGUtPm1fc3RhcnQ7CisgICAgICAgIHNp
emVfdCBsZWZ0U2l6ZSA9IGxlZnROb2RlLT5tX3NpemVJbkJ5dGVzOwogICAgICAgICB2b2lkKiBs
ZWZ0RW5kID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KGxlZnRTdGFydCkgKyBsZWZ0U2l6ZSk7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQobGVm
dEVuZCA9PSBzdGFydCk7CkBAIC0yOTIsMTEgKzI5MiwxMSBAQCB2b2lkIE1ldGFBbGxvY2F0b3I6
OmFkZEZyZWVTcGFjZSh2b2lkKiBzCiAgICAgICAgICAgICAvLyBGcmVlaW5nIHNvbWV0aGluZyBp
biB0aGUgbWlkZGxlIG9mIGZyZWUgYmxvY2tzLiBDb2FsZXNjZSBib3RoIGxlZnQgYW5kCiAgICAg
ICAgICAgICAvLyByaWdodCwgd2hpbHN0IHJlbW92aW5nIHRoZSByaWdodCBuZWlnaGJvciBmcm9t
IHRoZSBtYXBzLgogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQocmlnaHROZWlnaGJv
ci0+c2Vjb25kLT5tX3ZhbHVlID09IHJpZ2h0TmVpZ2hib3ItPmZpcnN0KTsKKyAgICAgICAgICAg
IEFTU0VSVChyaWdodE5laWdoYm9yLT5zZWNvbmQtPm1fc3RhcnQgPT0gcmlnaHROZWlnaGJvci0+
Zmlyc3QpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBGcmVlU3BhY2VOb2RlKiByaWdodE5v
ZGUgPSByaWdodE5laWdoYm9yLT5zZWNvbmQ7CiAgICAgICAgICAgICB2b2lkKiByaWdodFN0YXJ0
ID0gcmlnaHROZWlnaGJvci0+Zmlyc3Q7Ci0gICAgICAgICAgICBzaXplX3QgcmlnaHRTaXplID0g
cmlnaHROb2RlLT5tX2tleTsKKyAgICAgICAgICAgIHNpemVfdCByaWdodFNpemUgPSByaWdodE5v
ZGUtPm1fc2l6ZUluQnl0ZXM7CiAgICAgICAgICAgICB2b2lkKiByaWdodEVuZCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihyaWdodFN0YXJ0KSAr
IHJpZ2h0U2l6ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEFTU0VSVChyaWdodFN0YXJ0
ID09IGVuZCk7CkBAIC0zMDgsMTIgKzMwOCwxMiBAQCB2b2lkIE1ldGFBbGxvY2F0b3I6OmFkZEZy
ZWVTcGFjZSh2b2lkKiBzCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZyZWVGcmVlU3BhY2VO
b2RlKHJpZ2h0Tm9kZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGxlZnROb2RlLT5tX2tl
eSArPSBzaXplSW5CeXRlcyArIHJpZ2h0U2l6ZTsKKyAgICAgICAgICAgIGxlZnROb2RlLT5tX3Np
emVJbkJ5dGVzICs9IHNpemVJbkJ5dGVzICsgcmlnaHRTaXplOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KGxlZnROb2RlKTsKICAgICAgICAgICAg
IG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5hZGQocmlnaHRFbmQsIGxlZnROb2RlKTsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxlZnROb2RlLT5tX2tleSArPSBzaXplSW5CeXRlczsK
KyAgICAgICAgICAgIGxlZnROb2RlLT5tX3NpemVJbkJ5dGVzICs9IHNpemVJbkJ5dGVzOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KGxlZnROb2Rl
KTsKICAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5hZGQoZW5kLCBsZWZ0Tm9k
ZSk7CkBAIC0zMjQsNyArMzI0LDcgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVlU3BhY2Uo
dm9pZCogcwogICAgICAgICBpZiAocmlnaHROZWlnaGJvciAhPSBtX2ZyZWVTcGFjZVN0YXJ0QWRk
cmVzc01hcC5lbmQoKSkgewogICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0g
cmlnaHROZWlnaGJvci0+c2Vjb25kOwogICAgICAgICAgICAgdm9pZCogcmlnaHRTdGFydCA9IHJp
Z2h0TmVpZ2hib3ItPmZpcnN0OwotICAgICAgICAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9IHJpZ2h0
Tm9kZS0+bV9rZXk7CisgICAgICAgICAgICBzaXplX3QgcmlnaHRTaXplID0gcmlnaHROb2RlLT5t
X3NpemVJbkJ5dGVzOwogICAgICAgICAgICAgdm9pZCogcmlnaHRFbmQgPSByZWludGVycHJldF9j
YXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmlnaHRTdGFydCkgKyByaWdo
dFNpemUpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBBU1NFUlQocmlnaHRTdGFydCA9PSBl
bmQpOwpAQCAtMzMzLDggKzMzMyw4IEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNl
KHZvaWQqIHMKICAgICAgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5yZW1vdmUocmlnaHROb2Rl
KTsKICAgICAgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLnJlbW92ZShyaWdodFN0
YXJ0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgcmlnaHROb2RlLT5tX2tleSArPSBzaXpl
SW5CeXRlczsKLSAgICAgICAgICAgIHJpZ2h0Tm9kZS0+bV92YWx1ZSA9IHN0YXJ0OworICAgICAg
ICAgICAgcmlnaHROb2RlLT5tX3NpemVJbkJ5dGVzICs9IHNpemVJbkJ5dGVzOworICAgICAgICAg
ICAgcmlnaHROb2RlLT5tX3N0YXJ0ID0gc3RhcnQ7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IG1fZnJlZVNwYWNlU2l6ZU1hcC5pbnNlcnQocmlnaHROb2RlKTsKICAgICAgICAgICAgIG1fZnJl
ZVNwYWNlU3RhcnRBZGRyZXNzTWFwLmFkZChzdGFydCwgcmlnaHROb2RlKTsKQEAgLTM0Myw4ICsz
NDMsOCBAQCB2b2lkIE1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZSh2b2lkKiBzCiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIEZyZWVTcGFjZU5vZGUqIG5vZGUgPSBhbGxvY0ZyZWVTcGFjZU5v
ZGUoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbm9kZS0+bV9rZXkgPSBzaXplSW5CeXRl
czsKLSAgICAgICAgICAgIG5vZGUtPm1fdmFsdWUgPSBzdGFydDsKKyAgICAgICAgICAgIG5vZGUt
Pm1fc2l6ZUluQnl0ZXMgPSBzaXplSW5CeXRlczsKKyAgICAgICAgICAgIG5vZGUtPm1fc3RhcnQg
PSBzdGFydDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9mcmVlU3BhY2VTaXplTWFwLmlu
c2VydChub2RlKTsKICAgICAgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLmFkZChz
dGFydCwgbm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0
b3IuaAkocmV2aXNpb24gMTA1NjM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRh
QWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDggQEAgbmFtZXNwYWNlIFdU
RiB7CiAKIGNsYXNzIE1ldGFBbGxvY2F0b3IgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1l
dGFBbGxvY2F0b3IpOworCiBwdWJsaWM6Ci0gICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1l
dGFBbGxvY2F0b3Ioc2l6ZV90IGFsbG9jYXRpb25HcmFudWxlKTsKICAgICAKICAgICB2aXJ0dWFs
IH5NZXRhQWxsb2NhdG9yKCk7CkBAIC0xMDEsOCArMTAxLDIzIEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgZnJpZW5kIGNsYXNzIE1ldGFBbGxvY2F0b3JIYW5kbGU7CiAgICAgCi0gICAgdHlwZWRlZiBS
ZWRCbGFja1RyZWU8c2l6ZV90LCB2b2lkKj4gVHJlZTsKLSAgICB0eXBlZGVmIFRyZWU6Ok5vZGUg
RnJlZVNwYWNlTm9kZTsKKyAgICBjbGFzcyBGcmVlU3BhY2VOb2RlIDogcHVibGljIFJlZEJsYWNr
VHJlZTxGcmVlU3BhY2VOb2RlLCBzaXplX3Q+OjpOb2RlIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IEZyZWVTcGFjZU5vZGUodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKKyAgICAgICAg
ICAgIDogbV9zdGFydChzdGFydCkKKyAgICAgICAgICAgICwgbV9zaXplSW5CeXRlcyhzaXplSW5C
eXRlcykKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgc2l6ZV90IGtleSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3NpemVJbkJ5dGVzOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCogbV9zdGFydDsKKyAgICAgICAgc2l6ZV90IG1fc2l6ZUluQnl0ZXM7CisgICAg
fTsKKyAgICB0eXBlZGVmIFJlZEJsYWNrVHJlZTxGcmVlU3BhY2VOb2RlLCBzaXplX3Q+IFRyZWU7
CiAgICAgCiAgICAgLy8gUmVtb3ZlIGZyZWUgc3BhY2UgZnJvbSB0aGUgYWxsb2NhdG9yLiBUaGlz
IGlzIGVmZmVjdGl2ZWx5CiAgICAgLy8gdGhlIGFsbG9jYXRlKCkgZnVuY3Rpb24sIGV4Y2VwdCB0
aGF0IGl0IGRvZXMgbm90IG1hcmsgdGhlCkBAIC0xMjEsNyArMTM2LDcgQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIGluY3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCogYWRkcmVzcywgc2l6ZV90
IHNpemVJbkJ5dGVzKTsKICAgICB2b2lkIGRlY3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCogYWRk
cmVzcywgc2l6ZV90IHNpemVJbkJ5dGVzKTsKLSAgICAKKwogICAgIC8vIFV0aWxpdGllcy4KICAg
ICAKICAgICBzaXplX3Qgcm91bmRVcChzaXplX3Qgc2l6ZUluQnl0ZXMpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlzaW9u
IDEwNTYzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvckhhbmRs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjZGVmaW5lIFdURl9NZXRhQWxs
b2NhdG9ySGFuZGxlX2gKIAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8
d3RmL1JlZEJsYWNrVHJlZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogCkBAIC00OCw3ICs0OSw3IEBAIHByaXZhdGU6CiAgICAgewogICAg
ICAgICBBU1NFUlQoc3RhcnQpOwogICAgIH0KLSAgICAKKwogcHVibGljOgogICAgIFdURl9FWFBP
UlRfUFJJVkFURSB+TWV0YUFsbG9jYXRvckhhbmRsZSgpOwogICAgIApAQCAtODUsNiArODYsMTEg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3I7CiAgICAgfQogICAgIAorICAg
IHZvaWQqIGtleSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9zdGFydDsKKyAgICB9CisgICAg
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNZXRhQWxsb2NhdG9yOwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWRCbGFja1RyZWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZEJsYWNrVHJlZS5oCShyZXZpc2lvbiAxMDU2MzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZEJsYWNrVHJlZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBXVEYgewogLy8gICByZWZlcmVuY2UgdG8g
dGhpcyBub2RlLgogLy8gLSBUaGUga2V5IHR5cGUgbXVzdCBpbXBsZW1lbnQgb3BlcmF0b3I8IGFu
ZCA9PS4KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBlPgor
dGVtcGxhdGU8Y2xhc3MgTm9kZVR5cGUsIHR5cGVuYW1lIEtleVR5cGU+CiBjbGFzcyBSZWRCbGFj
a1RyZWUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlZEJsYWNrVHJlZSk7CiBwcml2YXRl
OgpAQCAtNTUsMTggKzU1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIFJlZEJs
YWNrVHJlZTsKICAgICAgICAgCiAgICAgcHVibGljOgotICAgICAgICBOb2RlKEtleVR5cGUga2V5
LCBWYWx1ZVR5cGUgdmFsdWUpCi0gICAgICAgICAgICA6IG1fa2V5KGtleSkKLSAgICAgICAgICAg
ICwgbV92YWx1ZSh2YWx1ZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBjb25zdCBOb2RlKiBzdWNjZXNzb3IoKSBjb25zdAorICAgICAgICBjb25zdCBOb2RlVHlwZSog
c3VjY2Vzc29yKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgY29uc3QgTm9kZSogeCA9
IHRoaXM7CiAgICAgICAgICAgICBpZiAoeC0+cmlnaHQoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gdHJlZU1pbmltdW0oeC0+cmlnaHQoKSk7Ci0gICAgICAgICAgICBjb25zdCBOb2RlKiB5ID0g
eC0+cGFyZW50KCk7CisgICAgICAgICAgICBjb25zdCBOb2RlVHlwZSogeSA9IHgtPnBhcmVudCgp
OwogICAgICAgICAgICAgd2hpbGUgKHkgJiYgeCA9PSB5LT5yaWdodCgpKSB7CiAgICAgICAgICAg
ICAgICAgeCA9IHk7CiAgICAgICAgICAgICAgICAgeSA9IHktPnBhcmVudCgpOwpAQCAtNzQsMTIg
KzY4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiB5OwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBjb25zdCBOb2RlKiBwcmVkZWNlc3NvcigpIGNvbnN0CisgICAgICAgIGNv
bnN0IE5vZGVUeXBlKiBwcmVkZWNlc3NvcigpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAg
IGNvbnN0IE5vZGUqIHggPSB0aGlzOwogICAgICAgICAgICAgaWYgKHgtPmxlZnQoKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJlZU1heGltdW0oeC0+bGVmdCgpKTsKLSAgICAgICAgICAgIGNv
bnN0IE5vZGUqIHkgPSB4LT5wYXJlbnQoKTsKKyAgICAgICAgICAgIGNvbnN0IE5vZGVUeXBlKiB5
ID0geC0+cGFyZW50KCk7CiAgICAgICAgICAgICB3aGlsZSAoeSAmJiB4ID09IHktPmxlZnQoKSkg
ewogICAgICAgICAgICAgICAgIHggPSB5OwogICAgICAgICAgICAgICAgIHkgPSB5LT5wYXJlbnQo
KTsKQEAgLTg3LDE4ICs4MSwxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4geTsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgTm9kZSogc3VjY2Vzc29yKCkKKyAgICAgICAgTm9k
ZVR5cGUqIHN1Y2Nlc3NvcigpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBjb25zdF9j
YXN0PE5vZGUqPihjb25zdF9jYXN0PGNvbnN0IE5vZGUqPih0aGlzKS0+c3VjY2Vzc29yKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Tm9kZVR5cGUqPihjb25zdF9jYXN0PGNvbnN0
IE5vZGUqPih0aGlzKS0+c3VjY2Vzc29yKCkpOwogICAgICAgICB9Ci0gICAgCi0gICAgICAgIE5v
ZGUqIHByZWRlY2Vzc29yKCkKKworICAgICAgICBOb2RlVHlwZSogcHJlZGVjZXNzb3IoKQogICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxOb2RlKj4oY29uc3RfY2FzdDxj
b25zdCBOb2RlKj4odGhpcyktPnByZWRlY2Vzc29yKCkpOworICAgICAgICAgICAgcmV0dXJuIGNv
bnN0X2Nhc3Q8Tm9kZVR5cGUqPihjb25zdF9jYXN0PGNvbnN0IE5vZGUqPih0aGlzKS0+cHJlZGVj
ZXNzb3IoKSk7CiAgICAgICAgIH0KLSAgICAKLSAgICAgICAgS2V5VHlwZSBtX2tleTsKLSAgICAg
ICAgVmFsdWVUeXBlIG1fdmFsdWU7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHJlc2V0
KCkKQEAgLTExMCwzMiArMTAxLDMyIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIC8vIE5P
VEU6IHRoZXNlIG1ldGhvZHMgc2hvdWxkIHBhY2sgdGhlIHBhcmVudCBhbmQgcmVkIGludG8gYSBz
aW5nbGUKICAgICAgICAgLy8gd29yZC4gQnV0IGRvaW5nIHNvIGFwcGVhcnMgdG8gcmV2ZWFsIGEg
YnVnIGluIHRoZSBjb21waWxlci4KLSAgICAgICAgTm9kZSogcGFyZW50KCkgY29uc3QKKyAgICAg
ICAgTm9kZVR5cGUqIHBhcmVudCgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PE5vZGUqPihtX3BhcmVudEFuZFJlZCAmIH5zdGF0aWNfY2FzdDx1
aW50cHRyX3Q+KDEpKTsKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PE5vZGVU
eXBlKj4obV9wYXJlbnRBbmRSZWQgJiB+c3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSk7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0UGFyZW50KE5vZGUqIG5ld1BhcmVudCkK
KyAgICAgICAgdm9pZCBzZXRQYXJlbnQoTm9kZVR5cGUqIG5ld1BhcmVudCkKICAgICAgICAgewog
ICAgICAgICAgICAgbV9wYXJlbnRBbmRSZWQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
bmV3UGFyZW50KSB8IChtX3BhcmVudEFuZFJlZCAmIDEpOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBOb2RlKiBsZWZ0KCkgY29uc3QKKyAgICAgICAgTm9kZVR5cGUqIGxlZnQoKSBjb25z
dAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9sZWZ0OwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICB2b2lkIHNldExlZnQoTm9kZSogbm9kZSkKKyAgICAgICAgdm9pZCBzZXRM
ZWZ0KE5vZGVUeXBlKiBub2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2xlZnQgPSBub2Rl
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBOb2RlKiByaWdodCgpIGNvbnN0CisgICAg
ICAgIE5vZGVUeXBlKiByaWdodCgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVy
biBtX3JpZ2h0OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIHNldFJpZ2h0KE5v
ZGUqIG5vZGUpCisgICAgICAgIHZvaWQgc2V0UmlnaHQoTm9kZVR5cGUqIG5vZGUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIG1fcmlnaHQgPSBub2RlOwogICAgICAgICB9CkBAIC0xNTUsMTcgKzE0
NiwxNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgbV9wYXJlbnRBbmRSZWQgJj0gfnN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4oMSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIE5vZGUq
IG1fbGVmdDsKLSAgICAgICAgTm9kZSogbV9yaWdodDsKKyAgICAgICAgTm9kZVR5cGUqIG1fbGVm
dDsKKyAgICAgICAgTm9kZVR5cGUqIG1fcmlnaHQ7CiAgICAgICAgIHVpbnRwdHJfdCBtX3BhcmVu
dEFuZFJlZDsKICAgICB9OwotICAgIAorCiAgICAgUmVkQmxhY2tUcmVlKCkKICAgICAgICAgOiBt
X3Jvb3QoMCkKICAgICB7CiAgICAgfQogICAgIAotICAgIHZvaWQgaW5zZXJ0KE5vZGUqIHgpCisg
ICAgdm9pZCBpbnNlcnQoTm9kZVR5cGUqIHgpCiAgICAgewogICAgICAgICB4LT5yZXNldCgpOwog
ICAgICAgICB0cmVlSW5zZXJ0KHgpOwpAQCAtMTczLDcgKzE2NCw3IEBAIHB1YmxpYzoKIAogICAg
ICAgICB3aGlsZSAoeCAhPSBtX3Jvb3QgJiYgeC0+cGFyZW50KCktPmNvbG9yKCkgPT0gUmVkKSB7
CiAgICAgICAgICAgICBpZiAoeC0+cGFyZW50KCkgPT0geC0+cGFyZW50KCktPnBhcmVudCgpLT5s
ZWZ0KCkpIHsKLSAgICAgICAgICAgICAgICBOb2RlKiB5ID0geC0+cGFyZW50KCktPnBhcmVudCgp
LT5yaWdodCgpOworICAgICAgICAgICAgICAgIE5vZGVUeXBlKiB5ID0geC0+cGFyZW50KCktPnBh
cmVudCgpLT5yaWdodCgpOwogICAgICAgICAgICAgICAgIGlmICh5ICYmIHktPmNvbG9yKCkgPT0g
UmVkKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMQogICAgICAgICAgICAgICAgICAg
ICB4LT5wYXJlbnQoKS0+c2V0Q29sb3IoQmxhY2spOwpAQCAtMTkzLDcgKzE4NCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgIC8vIFNhbWUgYXMgInRoZW4iIGNsYXVzZSB3aXRoICJyaWdodCIgYW5kICJsZWZ0IiBleGNo
YW5nZWQuCi0gICAgICAgICAgICAgICAgTm9kZSogeSA9IHgtPnBhcmVudCgpLT5wYXJlbnQoKS0+
bGVmdCgpOworICAgICAgICAgICAgICAgIE5vZGVUeXBlKiB5ID0geC0+cGFyZW50KCktPnBhcmVu
dCgpLT5sZWZ0KCk7CiAgICAgICAgICAgICAgICAgaWYgKHkgJiYgeS0+Y29sb3IoKSA9PSBSZWQp
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSAxCiAgICAgICAgICAgICAgICAgICAgIHgt
PnBhcmVudCgpLT5zZXRDb2xvcihCbGFjayk7CkBAIC0yMTcsMjAgKzIwOCwyMCBAQCBwdWJsaWM6
CiAgICAgICAgIG1fcm9vdC0+c2V0Q29sb3IoQmxhY2spOwogICAgIH0KIAotICAgIE5vZGUqIHJl
bW92ZShOb2RlKiB6KQorICAgIE5vZGVUeXBlKiByZW1vdmUoTm9kZVR5cGUqIHopCiAgICAgewog
ICAgICAgICBBU1NFUlQoeik7CiAgICAgICAgIEFTU0VSVCh6LT5wYXJlbnQoKSB8fCB6ID09IG1f
cm9vdCk7CiAgICAgICAgIAogICAgICAgICAvLyBZIGlzIHRoZSBub2RlIHRvIGJlIHVubGlua2Vk
IGZyb20gdGhlIHRyZWUuCi0gICAgICAgIE5vZGUqIHk7CisgICAgICAgIE5vZGVUeXBlKiB5Owog
ICAgICAgICBpZiAoIXotPmxlZnQoKSB8fCAhei0+cmlnaHQoKSkKICAgICAgICAgICAgIHkgPSB6
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB5ID0gei0+c3VjY2Vzc29yKCk7CiAKICAgICAg
ICAgLy8gWSBpcyBndWFyYW50ZWVkIHRvIGJlIG5vbi1udWxsIGF0IHRoaXMgcG9pbnQuCi0gICAg
ICAgIE5vZGUqIHg7CisgICAgICAgIE5vZGVUeXBlKiB4OwogICAgICAgICBpZiAoeS0+bGVmdCgp
KQogICAgICAgICAgICAgeCA9IHktPmxlZnQoKTsKICAgICAgICAgZWxzZQpAQCAtMjM4LDcgKzIy
OSw3IEBAIHB1YmxpYzoKIAogICAgICAgICAvLyBYIGlzIHRoZSBjaGlsZCBvZiB5IHdoaWNoIG1p
Z2h0IHBvdGVudGlhbGx5IHJlcGxhY2UgeSBpbgogICAgICAgICAvLyB0aGUgdHJlZS4gWCBtaWdo
dCBiZSBudWxsIGF0IHRoaXMgcG9pbnQuCi0gICAgICAgIE5vZGUqIHhQYXJlbnQ7CisgICAgICAg
IE5vZGVUeXBlKiB4UGFyZW50OwogICAgICAgICBpZiAoeCkgewogICAgICAgICAgICAgeC0+c2V0
UGFyZW50KHktPnBhcmVudCgpKTsKICAgICAgICAgICAgIHhQYXJlbnQgPSB4LT5wYXJlbnQoKTsK
QEAgLTI4MSwyMCArMjcyLDIwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHo7CiAgICAgfQog
ICAgIAotICAgIE5vZGUqIHJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCisgICAgTm9kZVR5cGUq
IHJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCiAgICAgewotICAgICAgICBOb2RlKiByZXN1bHQg
PSBmaW5kRXhhY3Qoa2V5KTsKKyAgICAgICAgTm9kZVR5cGUqIHJlc3VsdCA9IGZpbmRFeGFjdChr
ZXkpOwogICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAg
ICByZXR1cm4gcmVtb3ZlKHJlc3VsdCk7CiAgICAgfQogICAgIAotICAgIE5vZGUqIGZpbmRFeGFj
dChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0CisgICAgTm9kZVR5cGUqIGZpbmRFeGFjdChjb25z
dCBLZXlUeXBlJiBrZXkpIGNvbnN0CiAgICAgewotICAgICAgICBmb3IgKE5vZGUqIGN1cnJlbnQg
PSBtX3Jvb3Q7IGN1cnJlbnQ7KSB7Ci0gICAgICAgICAgICBpZiAoY3VycmVudC0+bV9rZXkgPT0g
a2V5KQorICAgICAgICBmb3IgKE5vZGVUeXBlKiBjdXJyZW50ID0gbV9yb290OyBjdXJyZW50Oykg
eworICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmtleSgpID09IGtleSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gY3VycmVudDsKLSAgICAgICAgICAgIGlmIChrZXkgPCBjdXJyZW50LT5tX2tleSkK
KyAgICAgICAgICAgIGlmIChrZXkgPCBjdXJyZW50LT5rZXkoKSkKICAgICAgICAgICAgICAgICBj
dXJyZW50ID0gY3VycmVudC0+bGVmdCgpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIGN1cnJlbnQgPSBjdXJyZW50LT5yaWdodCgpOwpAQCAtMzAyLDEzICsyOTMsMTMgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9kZSogZmluZExlYXN0
R3JlYXRlclRoYW5PckVxdWFsKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QKKyAgICBOb2RlVHlw
ZSogZmluZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QK
ICAgICB7Ci0gICAgICAgIE5vZGUqIGJlc3QgPSAwOwotICAgICAgICBmb3IgKE5vZGUqIGN1cnJl
bnQgPSBtX3Jvb3Q7IGN1cnJlbnQ7KSB7Ci0gICAgICAgICAgICBpZiAoY3VycmVudC0+bV9rZXkg
PT0ga2V5KQorICAgICAgICBOb2RlVHlwZSogYmVzdCA9IDA7CisgICAgICAgIGZvciAoTm9kZVR5
cGUqIGN1cnJlbnQgPSBtX3Jvb3Q7IGN1cnJlbnQ7KSB7CisgICAgICAgICAgICBpZiAoY3VycmVu
dC0+a2V5KCkgPT0ga2V5KQogICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50OwotICAgICAg
ICAgICAgaWYgKGN1cnJlbnQtPm1fa2V5IDwga2V5KQorICAgICAgICAgICAgaWYgKGN1cnJlbnQt
PmtleSgpIDwga2V5KQogICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5yaWdodCgp
OwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgYmVzdCA9IGN1cnJlbnQ7CkBA
IC0zMTgsMTMgKzMwOSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiZXN0OwogICAgIH0K
ICAgICAKLSAgICBOb2RlKiBmaW5kR3JlYXRlc3RMZXNzVGhhbk9yRXF1YWwoY29uc3QgS2V5VHlw
ZSYga2V5KSBjb25zdAorICAgIE5vZGVUeXBlKiBmaW5kR3JlYXRlc3RMZXNzVGhhbk9yRXF1YWwo
Y29uc3QgS2V5VHlwZSYga2V5KSBjb25zdAogICAgIHsKLSAgICAgICAgTm9kZSogYmVzdCA9IDA7
Ci0gICAgICAgIGZvciAoTm9kZSogY3VycmVudCA9IG1fcm9vdDsgY3VycmVudDspIHsKLSAgICAg
ICAgICAgIGlmIChjdXJyZW50LT5tX2tleSA9PSBrZXkpCisgICAgICAgIE5vZGVUeXBlKiBiZXN0
ID0gMDsKKyAgICAgICAgZm9yIChOb2RlVHlwZSogY3VycmVudCA9IG1fcm9vdDsgY3VycmVudDsp
IHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50LT5rZXkoKSA9PSBrZXkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGN1cnJlbnQ7Ci0gICAgICAgICAgICBpZiAoY3VycmVudC0+bV9rZXkgPiBrZXkp
CisgICAgICAgICAgICBpZiAoY3VycmVudC0+a2V5KCkgPiBrZXkpCiAgICAgICAgICAgICAgICAg
Y3VycmVudCA9IGN1cnJlbnQtPmxlZnQoKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgICAgIGJlc3QgPSBjdXJyZW50OwpAQCAtMzM0LDE0ICszMjUsMTQgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gYmVzdDsKICAgICB9CiAgICAgCi0gICAgTm9kZSogZmlyc3QoKSBjb25zdAor
ICAgIE5vZGVUeXBlKiBmaXJzdCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoIW1fcm9vdCkK
ICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gdHJlZU1pbmltdW0obV9yb290
KTsKICAgICB9CiAgICAgCi0gICAgTm9kZSogbGFzdCgpIGNvbnN0CisgICAgTm9kZVR5cGUqIGxh
c3QoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCFtX3Jvb3QpCiAgICAgICAgICAgICByZXR1
cm4gMDsKQEAgLTM1Miw3ICszNDMsNyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IHNpemUoKQogICAg
IHsKICAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gICAgICAgIGZvciAoTm9kZSogY3VycmVu
dCA9IGZpcnN0KCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5zdWNjZXNzb3IoKSkKKyAg
ICAgICAgZm9yIChOb2RlVHlwZSogY3VycmVudCA9IGZpcnN0KCk7IGN1cnJlbnQ7IGN1cnJlbnQg
PSBjdXJyZW50LT5zdWNjZXNzb3IoKSkKICAgICAgICAgICAgIHJlc3VsdCsrOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTM2Niw0NiArMzU3LDQ2IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgLy8gRmluZHMgdGhlIG1pbmltdW0gZWxlbWVudCBpbiB0aGUgc3ViLXRyZWUgcm9v
dGVkIGF0IHRoZSBnaXZlbgogICAgIC8vIG5vZGUuCi0gICAgc3RhdGljIE5vZGUqIHRyZWVNaW5p
bXVtKE5vZGUqIHgpCisgICAgc3RhdGljIE5vZGVUeXBlKiB0cmVlTWluaW11bShOb2RlVHlwZSog
eCkKICAgICB7CiAgICAgICAgIHdoaWxlICh4LT5sZWZ0KCkpCiAgICAgICAgICAgICB4ID0geC0+
bGVmdCgpOwogICAgICAgICByZXR1cm4geDsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIE5vZGUq
IHRyZWVNYXhpbXVtKE5vZGUqIHgpCisgICAgc3RhdGljIE5vZGVUeXBlKiB0cmVlTWF4aW11bShO
b2RlVHlwZSogeCkKICAgICB7CiAgICAgICAgIHdoaWxlICh4LT5yaWdodCgpKQogICAgICAgICAg
ICAgeCA9IHgtPnJpZ2h0KCk7CiAgICAgICAgIHJldHVybiB4OwogICAgIH0KIAotICAgIHN0YXRp
YyBjb25zdCBOb2RlKiB0cmVlTWluaW11bShjb25zdCBOb2RlKiB4KQorICAgIHN0YXRpYyBjb25z
dCBOb2RlVHlwZSogdHJlZU1pbmltdW0oY29uc3QgTm9kZVR5cGUqIHgpCiAgICAgewogICAgICAg
ICB3aGlsZSAoeC0+bGVmdCgpKQogICAgICAgICAgICAgeCA9IHgtPmxlZnQoKTsKICAgICAgICAg
cmV0dXJuIHg7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBjb25zdCBOb2RlKiB0cmVlTWF4aW11
bShjb25zdCBOb2RlKiB4KQorICAgIHN0YXRpYyBjb25zdCBOb2RlVHlwZSogdHJlZU1heGltdW0o
Y29uc3QgTm9kZVR5cGUqIHgpCiAgICAgewogICAgICAgICB3aGlsZSAoeC0+cmlnaHQoKSkKICAg
ICAgICAgICAgIHggPSB4LT5yaWdodCgpOwogICAgICAgICByZXR1cm4geDsKICAgICB9CiAKLSAg
ICB2b2lkIHRyZWVJbnNlcnQoTm9kZSogeikKKyAgICB2b2lkIHRyZWVJbnNlcnQoTm9kZVR5cGUq
IHopCiAgICAgewogICAgICAgICBBU1NFUlQoIXotPmxlZnQoKSk7CiAgICAgICAgIEFTU0VSVCgh
ei0+cmlnaHQoKSk7CiAgICAgICAgIEFTU0VSVCghei0+cGFyZW50KCkpOwogICAgICAgICBBU1NF
UlQoei0+Y29sb3IoKSA9PSBSZWQpOwogICAgICAgICAKLSAgICAgICAgTm9kZSogeSA9IDA7Ci0g
ICAgICAgIE5vZGUqIHggPSBtX3Jvb3Q7CisgICAgICAgIE5vZGVUeXBlKiB5ID0gMDsKKyAgICAg
ICAgTm9kZVR5cGUqIHggPSBtX3Jvb3Q7CiAgICAgICAgIHdoaWxlICh4KSB7CiAgICAgICAgICAg
ICB5ID0geDsKLSAgICAgICAgICAgIGlmICh6LT5tX2tleSA8IHgtPm1fa2V5KQorICAgICAgICAg
ICAgaWYgKHotPmtleSgpIDwgeC0+a2V5KCkpCiAgICAgICAgICAgICAgICAgeCA9IHgtPmxlZnQo
KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB4ID0geC0+cmlnaHQoKTsKQEAg
LTQxNCw3ICs0MDUsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIXkpCiAgICAgICAgICAgICBt
X3Jvb3QgPSB6OwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmICh6LT5tX2tleSA8IHkt
Pm1fa2V5KQorICAgICAgICAgICAgaWYgKHotPmtleSgpIDwgeS0+a2V5KCkpCiAgICAgICAgICAg
ICAgICAgeS0+c2V0TGVmdCh6KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB5
LT5zZXRSaWdodCh6KTsKQEAgLTQyNywxMCArNDE4LDEwIEBAIHByaXZhdGU6CiAKICAgICAvLyBM
ZWZ0LXJvdGF0ZXMgdGhlIHN1YnRyZWUgcm9vdGVkIGF0IHguCiAgICAgLy8gUmV0dXJucyB0aGUg
bmV3IHJvb3Qgb2YgdGhlIHN1YnRyZWUgKHgncyByaWdodCBjaGlsZCkuCi0gICAgTm9kZSogbGVm
dFJvdGF0ZShOb2RlKiB4KQorICAgIE5vZGVUeXBlKiBsZWZ0Um90YXRlKE5vZGVUeXBlKiB4KQog
ICAgIHsKICAgICAgICAgLy8gU2V0IHkuCi0gICAgICAgIE5vZGUqIHkgPSB4LT5yaWdodCgpOwor
ICAgICAgICBOb2RlVHlwZSogeSA9IHgtPnJpZ2h0KCk7CiAKICAgICAgICAgLy8gVHVybiB5J3Mg
bGVmdCBzdWJ0cmVlIGludG8geCdzIHJpZ2h0IHN1YnRyZWUuCiAgICAgICAgIHgtPnNldFJpZ2h0
KHktPmxlZnQoKSk7CkBAIC00NTcsMTAgKzQ0OCwxMCBAQCBwcml2YXRlOgogCiAgICAgLy8gUmln
aHQtcm90YXRlcyB0aGUgc3VidHJlZSByb290ZWQgYXQgeS4KICAgICAvLyBSZXR1cm5zIHRoZSBu
ZXcgcm9vdCBvZiB0aGUgc3VidHJlZSAoeSdzIGxlZnQgY2hpbGQpLgotICAgIE5vZGUqIHJpZ2h0
Um90YXRlKE5vZGUqIHkpCisgICAgTm9kZVR5cGUqIHJpZ2h0Um90YXRlKE5vZGVUeXBlKiB5KQog
ICAgIHsKICAgICAgICAgLy8gU2V0IHguCi0gICAgICAgIE5vZGUqIHggPSB5LT5sZWZ0KCk7Cisg
ICAgICAgIE5vZGVUeXBlKiB4ID0geS0+bGVmdCgpOwogCiAgICAgICAgIC8vIFR1cm4geCdzIHJp
Z2h0IHN1YnRyZWUgaW50byB5J3MgbGVmdCBzdWJ0cmVlLgogICAgICAgICB5LT5zZXRMZWZ0KHgt
PnJpZ2h0KCkpOwpAQCAtNDg4LDcgKzQ3OSw3IEBAIHByaXZhdGU6CiAgICAgLy8gUmVzdG9yZXMg
dGhlIHJlZC1ibGFjayBwcm9wZXJ0eSB0byB0aGUgdHJlZSBhZnRlciBzcGxpY2luZyBvdXQKICAg
ICAvLyBhIG5vZGUuIE5vdGUgdGhhdCB4IG1heSBiZSBudWxsLCB3aGljaCBpcyB3aHkgeFBhcmVu
dCBtdXN0IGJlCiAgICAgLy8gc3VwcGxpZWQuCi0gICAgdm9pZCByZW1vdmVGaXh1cChOb2RlKiB4
LCBOb2RlKiB4UGFyZW50KQorICAgIHZvaWQgcmVtb3ZlRml4dXAoTm9kZVR5cGUqIHgsIE5vZGVU
eXBlKiB4UGFyZW50KQogICAgIHsKICAgICAgICAgd2hpbGUgKHggIT0gbV9yb290ICYmICgheCB8
fCB4LT5jb2xvcigpID09IEJsYWNrKSkgewogICAgICAgICAgICAgaWYgKHggPT0geFBhcmVudC0+
bGVmdCgpKSB7CkBAIC00OTYsNyArNDg3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAv
LyBUaGUgcmVhc29uIGlzIG5vdCBvYnZpb3VzIGZyb20gc2ltcGx5IGxvb2tpbmcgYXQKICAgICAg
ICAgICAgICAgICAvLyB0aGUgY29kZTsgaXQgY29tZXMgYWJvdXQgZnJvbSB0aGUgcHJvcGVydGll
cyBvZiB0aGUKICAgICAgICAgICAgICAgICAvLyByZWQtYmxhY2sgdHJlZS4KLSAgICAgICAgICAg
ICAgICBOb2RlKiB3ID0geFBhcmVudC0+cmlnaHQoKTsKKyAgICAgICAgICAgICAgICBOb2RlVHlw
ZSogdyA9IHhQYXJlbnQtPnJpZ2h0KCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHcpOyAvLyB4
J3Mgc2libGluZyBzaG91bGQgbm90IGJlIG51bGwuCiAgICAgICAgICAgICAgICAgaWYgKHctPmNv
bG9yKCkgPT0gUmVkKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMQpAQCAtNTM2LDcg
KzUyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gVGhlIHJlYXNvbiBpcyBub3Qg
b2J2aW91cyBmcm9tIHNpbXBseSBsb29raW5nIGF0CiAgICAgICAgICAgICAgICAgLy8gdGhlIGNv
ZGU7IGl0IGNvbWVzIGFib3V0IGZyb20gdGhlIHByb3BlcnRpZXMgb2YgdGhlCiAgICAgICAgICAg
ICAgICAgLy8gcmVkLWJsYWNrIHRyZWUuCi0gICAgICAgICAgICAgICAgTm9kZSogdyA9IHhQYXJl
bnQtPmxlZnQoKTsKKyAgICAgICAgICAgICAgICBOb2RlVHlwZSogdyA9IHhQYXJlbnQtPmxlZnQo
KTsKICAgICAgICAgICAgICAgICBBU1NFUlQodyk7IC8vIHgncyBzaWJsaW5nIHNob3VsZCBub3Qg
YmUgbnVsbC4KICAgICAgICAgICAgICAgICBpZiAody0+Y29sb3IoKSA9PSBSZWQpIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gQ2FzZSAxCkBAIC01NzQsNyArNTY1LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHgtPnNldENvbG9yKEJsYWNrKTsKICAgICB9CiAKLSAgICBOb2RlKiBtX3Jvb3Q7
CisgICAgTm9kZVR5cGUqIG1fcm9vdDsKIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123632</attachid>
            <date>2012-01-23 15:06:15 -0800</date>
            <delta_ts>2012-01-23 15:10:43 -0800</delta_ts>
            <desc>Ooops, revert unnecessary change to MetaAllocatorHandle</desc>
            <filename>76855.2.patch</filename>
            <type>text/plain</type>
            <size>24936</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA1NjQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBA
CisyMDEyLTAxLTIzICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY4NTUK
KyAgICAgICAgSW1wbGVtZW50IGEgSklULWNvZGUgYXdhcmUgc2FtcGxpbmcgcHJvZmlsZXIgZm9y
IEpTQworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN0
ZXAgMjogZ2VuZXJhbGl6ZSBSZWRCbGFja1RyZWUuIFRoZSBwcm9maWxlciBpcyBnb2luZyB0byB3
YW50IHRpbyB1c2UKKyAgICAgICAgYSBSZWRCbGFja1RyZWUsIGFsbG93IHRoaXMgY2xhc3MgdG8g
d29yayB3aXRoIHN1YmNsYXNzZXMgb2YKKyAgICAgICAgUmVkQmxhY2tUcmVlOjpOb2RlLCBOb2Rl
IHNob3VsZCBub3QgbmVlZCB0byBrbm93IHRoZSBuYW1lcyBvZiB0aGUgbV9rZXkKKyAgICAgICAg
YW5kIG1fdmFsdWUgZmllbGRzICh0aGUgc3ViY2xhc3MgY2FuIHByb3ZpZGUgYSBrZXkoKSBhY2Nl
c3NvciksIGFuZAorICAgICAgICBSZWRCbGFja1RyZWUgZG9lcyBub3QgbmVlZCB0byBrbm93IGFu
eXRoaW5nIGFib3V0IFZhbHVlVHlwZS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDoK
KyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6CisgICAgICAgIChXVEY6Ok1ldGFBbGxv
Y2F0b3I6OmZpbmRBbmRSZW1vdmVGcmVlU3BhY2UpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2Nh
dG9yOjpkZWJ1Z0ZyZWVTcGFjZVNpemUpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjph
ZGRGcmVlU3BhY2UpOgorICAgICAgICAqIHd0Zi9NZXRhQWxsb2NhdG9yLmg6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3I6OkZyZWVTcGFjZU5vZGU6OkZyZWVTcGFjZU5vZGUpOgorICAgICAg
ICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpGcmVlU3BhY2VOb2RlOjprZXkpOgorICAgICAgICAqIHd0
Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmg6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5k
bGU6OmtleSk6CisgICAgICAgICogd3RmL1JlZEJsYWNrVHJlZS5oOgorICAgICAgICAoV1RGOjpS
ZWRCbGFja1RyZWU6Ok5vZGU6OnN1Y2Nlc3Nvcik6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJl
ZTo6Tm9kZTo6cHJlZGVjZXNzb3IpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6Ok5vZGU6
OnBhcmVudCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6Tm9kZTo6c2V0UGFyZW50KToK
KyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpOb2RlOjpsZWZ0KToKKyAgICAgICAgKFdURjo6
UmVkQmxhY2tUcmVlOjpOb2RlOjpzZXRMZWZ0KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVl
OjpOb2RlOjpyaWdodCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6Tm9kZTo6c2V0Umln
aHQpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6Omluc2VydCk6CisgICAgICAgIChXVEY6
OlJlZEJsYWNrVHJlZTo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpmaW5k
RXhhY3QpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OmZpbmRMZWFzdEdyZWF0ZXJUaGFu
T3JFcXVhbCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6ZmluZEdyZWF0ZXN0TGVzc1Ro
YW5PckVxdWFsKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpmaXJzdCk6CisgICAgICAg
IChXVEY6OlJlZEJsYWNrVHJlZTo6bGFzdCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6
c2l6ZSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6dHJlZU1pbmltdW0pOgorICAgICAg
ICAoV1RGOjpSZWRCbGFja1RyZWU6OnRyZWVNYXhpbXVtKToKKyAgICAgICAgKFdURjo6UmVkQmxh
Y2tUcmVlOjp0cmVlSW5zZXJ0KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpsZWZ0Um90
YXRlKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpyaWdodFJvdGF0ZSk6CisgICAgICAg
IChXVEY6OlJlZEJsYWNrVHJlZTo6cmVtb3ZlRml4dXApOgorCiAyMDEyLTAxLTIzICBBbmR5IEVz
dGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdGhlIGJ1aWxkIGFmdGVyIHIx
MDU2MzUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJl
dmlzaW9uIDEwNTYzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5l
eHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMSw3ICs0MTEsNiBAQCBfX1pOM1dURjEyZGV0YWNoVGhy
ZWFkRWoKIF9fWk4zV1RGMTJpc01haW5UaHJlYWRFdgogX19aTjNXVEYxMnJhbmRvbU51bWJlckV2
CiBfX1pOM1dURjEzTWV0YUFsbG9jYXRvcjE3YWRkRnJlc2hGcmVlU3BhY2VFUHZtCi1fX1pOM1dU
RjEzTWV0YUFsbG9jYXRvcjE3ZnJlZUZyZWVTcGFjZU5vZGVFUE5TXzEyUmVkQmxhY2tUcmVlSW1Q
dkU0Tm9kZUUKIF9fWk4zV1RGMTNNZXRhQWxsb2NhdG9yMThkZWJ1Z0ZyZWVTcGFjZVNpemVFdgog
X19aTjNXVEYxM01ldGFBbGxvY2F0b3I4YWxsb2NhdGVFbQogX19aTjNXVEYxM01ldGFBbGxvY2F0
b3JDMkVtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5j
cHAJKHJldmlzaW9uIDEwNTYzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFs
bG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCwxOCArMTc4LDE4IEBAIHZvaWQqIE1l
dGFBbGxvY2F0b3I6OmZpbmRBbmRSZW1vdmVGcmVlU3AKICAgICBpZiAoIW5vZGUpCiAgICAgICAg
IHJldHVybiAwOwogICAgIAotICAgIEFTU0VSVChub2RlLT5tX2tleSA+PSBzaXplSW5CeXRlcyk7
CisgICAgQVNTRVJUKG5vZGUtPm1fc2l6ZUluQnl0ZXMgPj0gc2l6ZUluQnl0ZXMpOwogICAgIAog
ICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5yZW1vdmUobm9kZSk7CiAgICAgCiAgICAgdm9pZCogcmVz
dWx0OwogICAgIAotICAgIGlmIChub2RlLT5tX2tleSA9PSBzaXplSW5CeXRlcykgeworICAgIGlm
IChub2RlLT5tX3NpemVJbkJ5dGVzID09IHNpemVJbkJ5dGVzKSB7CiAgICAgICAgIC8vIEVhc3kg
Y2FzZTogcGVyZmVjdCBmaXQsIHNvIGp1c3QgcmVtb3ZlIHRoZSBub2RlIGVudGlyZWx5LgotICAg
ICAgICByZXN1bHQgPSBub2RlLT5tX3ZhbHVlOworICAgICAgICByZXN1bHQgPSBub2RlLT5tX3N0
YXJ0OwogICAgICAgICAKLSAgICAgICAgbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAucmVtb3Zl
KG5vZGUtPm1fdmFsdWUpOwotICAgICAgICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAucmVtb3Zl
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2Rl
LT5tX3ZhbHVlKSArIG5vZGUtPm1fa2V5KSk7CisgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRy
ZXNzTWFwLnJlbW92ZShub2RlLT5tX3N0YXJ0KTsKKyAgICAgICAgbV9mcmVlU3BhY2VFbmRBZGRy
ZXNzTWFwLnJlbW92ZShyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4obm9kZS0+bV9zdGFydCkgKyBub2RlLT5tX3NpemVJbkJ5dGVzKSk7CiAgICAgICAg
IGZyZWVGcmVlU3BhY2VOb2RlKG5vZGUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFRyeSB0
byBiZSBhIGdvb2QgY2l0aXplbiBhbmQgZW5zdXJlIHRoYXQgdGhlIHJldHVybmVkIGNodW5rIG9m
IG1lbW9yeQpAQCAtMTk5LDMxICsxOTksMzEgQEAgdm9pZCogTWV0YUFsbG9jYXRvcjo6ZmluZEFu
ZFJlbW92ZUZyZWVTcAogICAgICAgICAvLyBvZiBjb21taXR0ZWQgcGFnZXMsIHNpbmNlIGluIHRo
ZSBsb25nIHJ1biwgc21hbGxlciBmcmFnbWVudGF0aW9uIG1lYW5zCiAgICAgICAgIC8vIGZld2Vy
IGNvbW1pdHRlZCBwYWdlcyBhbmQgZmV3ZXIgZmFpbHVyZXMgaW4gZ2VuZXJhbC4KICAgICAgICAg
Ci0gICAgICAgIHVpbnRwdHJfdCBmaXJzdFBhZ2UgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4obm9kZS0+bV92YWx1ZSkgPj4gbV9sb2dQYWdlU2l6ZTsKLSAgICAgICAgdWludHB0cl90IGxh
c3RQYWdlID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT5tX3ZhbHVlKSArIG5v
ZGUtPm1fa2V5IC0gMSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAgICAgdWludHB0cl90IGZpcnN0
UGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT5tX3N0YXJ0KSA+PiBtX2xv
Z1BhZ2VTaXplOworICAgICAgICB1aW50cHRyX3QgbGFzdFBhZ2UgPSAocmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KG5vZGUtPm1fc3RhcnQpICsgbm9kZS0+bV9zaXplSW5CeXRlcyAtIDEpID4+
IG1fbG9nUGFnZVNpemU7CiAgICAgCi0gICAgICAgIHVpbnRwdHJfdCBsYXN0UGFnZUZvckxlZnRB
bGxvY2F0aW9uID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT5tX3ZhbHVlKSAr
IHNpemVJbkJ5dGVzIC0gMSkgPj4gbV9sb2dQYWdlU2l6ZTsKLSAgICAgICAgdWludHB0cl90IGZp
cnN0UGFnZUZvclJpZ2h0QWxsb2NhdGlvbiA9IChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
bm9kZS0+bV92YWx1ZSkgKyBub2RlLT5tX2tleSAtIHNpemVJbkJ5dGVzKSA+PiBtX2xvZ1BhZ2VT
aXplOworICAgICAgICB1aW50cHRyX3QgbGFzdFBhZ2VGb3JMZWZ0QWxsb2NhdGlvbiA9IChyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+bV9zdGFydCkgKyBzaXplSW5CeXRlcyAtIDEp
ID4+IG1fbG9nUGFnZVNpemU7CisgICAgICAgIHVpbnRwdHJfdCBmaXJzdFBhZ2VGb3JSaWdodEFs
bG9jYXRpb24gPSAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPm1fc3RhcnQpICsg
bm9kZS0+bV9zaXplSW5CeXRlcyAtIHNpemVJbkJ5dGVzKSA+PiBtX2xvZ1BhZ2VTaXplOwogICAg
ICAgICAKICAgICAgICAgaWYgKGxhc3RQYWdlRm9yTGVmdEFsbG9jYXRpb24gLSBmaXJzdFBhZ2Ug
KyAxIDw9IGxhc3RQYWdlIC0gZmlyc3RQYWdlRm9yUmlnaHRBbGxvY2F0aW9uICsgMSkgewogICAg
ICAgICAgICAgLy8gQWxsb2NhdGUgaW4gdGhlIGxlZnQgc2lkZSBvZiB0aGUgcmV0dXJuZWQgY2h1
bmssIGFuZCBzbGlkZSB0aGUgbm9kZSB0byB0aGUgcmlnaHQuCi0gICAgICAgICAgICByZXN1bHQg
PSBub2RlLT5tX3ZhbHVlOworICAgICAgICAgICAgcmVzdWx0ID0gbm9kZS0+bV9zdGFydDsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAucmVtb3Zl
KG5vZGUtPm1fdmFsdWUpOworICAgICAgICAgICAgbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAu
cmVtb3ZlKG5vZGUtPm1fc3RhcnQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBub2RlLT5t
X2tleSAtPSBzaXplSW5CeXRlczsKLSAgICAgICAgICAgIG5vZGUtPm1fdmFsdWUgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+bV92YWx1
ZSkgKyBzaXplSW5CeXRlcyk7CisgICAgICAgICAgICBub2RlLT5tX3NpemVJbkJ5dGVzIC09IHNp
emVJbkJ5dGVzOworICAgICAgICAgICAgbm9kZS0+bV9zdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT5tX3N0YXJ0KSArIHNpemVJ
bkJ5dGVzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9mcmVlU3BhY2VTaXplTWFwLmlu
c2VydChub2RlKTsKLSAgICAgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLmFkZChu
b2RlLT5tX3ZhbHVlLCBub2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNz
TWFwLmFkZChub2RlLT5tX3N0YXJ0LCBub2RlKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIC8vIEFsbG9jYXRlIGluIHRoZSByaWdodCBzaXplIG9mIHRoZSByZXR1cm5lZCBjaHVuaywg
YW5kIHNsaWRlIHRoZSBub2RlIHRvIHRoZSBsZWZ0OwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4obm9kZS0+bV92YWx1ZSkgKyBub2RlLT5tX2tleSAtIHNpemVJbkJ5dGVzKTsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90Pihub2RlLT5tX3N0YXJ0KSArIG5vZGUtPm1fc2l6ZUluQnl0ZXMgLSBzaXplSW5C
eXRlcyk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVzc01h
cC5yZW1vdmUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KG5vZGUtPm1fdmFsdWUpICsgbm9kZS0+bV9rZXkpKTsKKyAgICAgICAgICAgIG1fZnJlZVNw
YWNlRW5kQWRkcmVzc01hcC5yZW1vdmUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPm1fc3RhcnQpICsgbm9kZS0+bV9zaXplSW5CeXRlcykp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBub2RlLT5tX2tleSAtPSBzaXplSW5CeXRlczsK
KyAgICAgICAgICAgIG5vZGUtPm1fc2l6ZUluQnl0ZXMgLT0gc2l6ZUluQnl0ZXM7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5pbnNlcnQobm9kZSk7CiAgICAg
ICAgICAgICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAuYWRkKHJlc3VsdCwgbm9kZSk7CkBAIC0y
NTUsNyArMjU1LDcgQEAgc2l6ZV90IE1ldGFBbGxvY2F0b3I6OmRlYnVnRnJlZVNwYWNlU2l6ZQog
ICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKICAgICBzaXplX3QgcmVzdWx0ID0g
MDsKICAgICBmb3IgKEZyZWVTcGFjZU5vZGUqIG5vZGUgPSBtX2ZyZWVTcGFjZVNpemVNYXAuZmly
c3QoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnN1Y2Nlc3NvcigpKQotICAgICAgICByZXN1bHQgKz0g
bm9kZS0+bV9rZXk7CisgICAgICAgIHJlc3VsdCArPSBub2RlLT5tX3NpemVJbkJ5dGVzOwogICAg
IHJldHVybiByZXN1bHQ7CiAjZWxzZQogICAgIENSQVNIKCk7CkBAIC0yNzQsMTIgKzI3NCwxMiBA
QCB2b2lkIE1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZSh2b2lkKiBzCiAgICAgICAgIC8vIFdl
IGhhdmUgc29tZXRoaW5nIHdlIGNhbiBjb2FsZXNjZSB3aXRoIG9uIHRoZSBsZWZ0LiBSZW1vdmUg
aXQgZnJvbSB0aGUgdHJlZSwgYW5kCiAgICAgICAgIC8vIHJlbW92ZSBpdHMgZW5kIGZyb20gdGhl
IGVuZCBhZGRyZXNzIG1hcC4KICAgICAgICAgCi0gICAgICAgIEFTU0VSVChyZWludGVycHJldF9j
YXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obGVmdE5laWdoYm9yLT5zZWNv
bmQtPm1fdmFsdWUpICsgbGVmdE5laWdoYm9yLT5zZWNvbmQtPm1fa2V5KSA9PSBsZWZ0TmVpZ2hi
b3ItPmZpcnN0KTsKKyAgICAgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihsZWZ0TmVpZ2hib3ItPnNlY29uZC0+bV9zdGFydCkgKyBs
ZWZ0TmVpZ2hib3ItPnNlY29uZC0+bV9zaXplSW5CeXRlcykgPT0gbGVmdE5laWdoYm9yLT5maXJz
dCk7CiAgICAgICAgIAogICAgICAgICBGcmVlU3BhY2VOb2RlKiBsZWZ0Tm9kZSA9IGxlZnROZWln
aGJvci0+c2Vjb25kOwogICAgICAgICAKLSAgICAgICAgdm9pZCogbGVmdFN0YXJ0ID0gbGVmdE5v
ZGUtPm1fdmFsdWU7Ci0gICAgICAgIHNpemVfdCBsZWZ0U2l6ZSA9IGxlZnROb2RlLT5tX2tleTsK
KyAgICAgICAgdm9pZCogbGVmdFN0YXJ0ID0gbGVmdE5vZGUtPm1fc3RhcnQ7CisgICAgICAgIHNp
emVfdCBsZWZ0U2l6ZSA9IGxlZnROb2RlLT5tX3NpemVJbkJ5dGVzOwogICAgICAgICB2b2lkKiBs
ZWZ0RW5kID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KGxlZnRTdGFydCkgKyBsZWZ0U2l6ZSk7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQobGVm
dEVuZCA9PSBzdGFydCk7CkBAIC0yOTIsMTEgKzI5MiwxMSBAQCB2b2lkIE1ldGFBbGxvY2F0b3I6
OmFkZEZyZWVTcGFjZSh2b2lkKiBzCiAgICAgICAgICAgICAvLyBGcmVlaW5nIHNvbWV0aGluZyBp
biB0aGUgbWlkZGxlIG9mIGZyZWUgYmxvY2tzLiBDb2FsZXNjZSBib3RoIGxlZnQgYW5kCiAgICAg
ICAgICAgICAvLyByaWdodCwgd2hpbHN0IHJlbW92aW5nIHRoZSByaWdodCBuZWlnaGJvciBmcm9t
IHRoZSBtYXBzLgogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQocmlnaHROZWlnaGJv
ci0+c2Vjb25kLT5tX3ZhbHVlID09IHJpZ2h0TmVpZ2hib3ItPmZpcnN0KTsKKyAgICAgICAgICAg
IEFTU0VSVChyaWdodE5laWdoYm9yLT5zZWNvbmQtPm1fc3RhcnQgPT0gcmlnaHROZWlnaGJvci0+
Zmlyc3QpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBGcmVlU3BhY2VOb2RlKiByaWdodE5v
ZGUgPSByaWdodE5laWdoYm9yLT5zZWNvbmQ7CiAgICAgICAgICAgICB2b2lkKiByaWdodFN0YXJ0
ID0gcmlnaHROZWlnaGJvci0+Zmlyc3Q7Ci0gICAgICAgICAgICBzaXplX3QgcmlnaHRTaXplID0g
cmlnaHROb2RlLT5tX2tleTsKKyAgICAgICAgICAgIHNpemVfdCByaWdodFNpemUgPSByaWdodE5v
ZGUtPm1fc2l6ZUluQnl0ZXM7CiAgICAgICAgICAgICB2b2lkKiByaWdodEVuZCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihyaWdodFN0YXJ0KSAr
IHJpZ2h0U2l6ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEFTU0VSVChyaWdodFN0YXJ0
ID09IGVuZCk7CkBAIC0zMDgsMTIgKzMwOCwxMiBAQCB2b2lkIE1ldGFBbGxvY2F0b3I6OmFkZEZy
ZWVTcGFjZSh2b2lkKiBzCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZyZWVGcmVlU3BhY2VO
b2RlKHJpZ2h0Tm9kZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGxlZnROb2RlLT5tX2tl
eSArPSBzaXplSW5CeXRlcyArIHJpZ2h0U2l6ZTsKKyAgICAgICAgICAgIGxlZnROb2RlLT5tX3Np
emVJbkJ5dGVzICs9IHNpemVJbkJ5dGVzICsgcmlnaHRTaXplOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KGxlZnROb2RlKTsKICAgICAgICAgICAg
IG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5hZGQocmlnaHRFbmQsIGxlZnROb2RlKTsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxlZnROb2RlLT5tX2tleSArPSBzaXplSW5CeXRlczsK
KyAgICAgICAgICAgIGxlZnROb2RlLT5tX3NpemVJbkJ5dGVzICs9IHNpemVJbkJ5dGVzOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KGxlZnROb2Rl
KTsKICAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5hZGQoZW5kLCBsZWZ0Tm9k
ZSk7CkBAIC0zMjQsNyArMzI0LDcgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVlU3BhY2Uo
dm9pZCogcwogICAgICAgICBpZiAocmlnaHROZWlnaGJvciAhPSBtX2ZyZWVTcGFjZVN0YXJ0QWRk
cmVzc01hcC5lbmQoKSkgewogICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0g
cmlnaHROZWlnaGJvci0+c2Vjb25kOwogICAgICAgICAgICAgdm9pZCogcmlnaHRTdGFydCA9IHJp
Z2h0TmVpZ2hib3ItPmZpcnN0OwotICAgICAgICAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9IHJpZ2h0
Tm9kZS0+bV9rZXk7CisgICAgICAgICAgICBzaXplX3QgcmlnaHRTaXplID0gcmlnaHROb2RlLT5t
X3NpemVJbkJ5dGVzOwogICAgICAgICAgICAgdm9pZCogcmlnaHRFbmQgPSByZWludGVycHJldF9j
YXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmlnaHRTdGFydCkgKyByaWdo
dFNpemUpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBBU1NFUlQocmlnaHRTdGFydCA9PSBl
bmQpOwpAQCAtMzMzLDggKzMzMyw4IEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNl
KHZvaWQqIHMKICAgICAgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5yZW1vdmUocmlnaHROb2Rl
KTsKICAgICAgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLnJlbW92ZShyaWdodFN0
YXJ0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgcmlnaHROb2RlLT5tX2tleSArPSBzaXpl
SW5CeXRlczsKLSAgICAgICAgICAgIHJpZ2h0Tm9kZS0+bV92YWx1ZSA9IHN0YXJ0OworICAgICAg
ICAgICAgcmlnaHROb2RlLT5tX3NpemVJbkJ5dGVzICs9IHNpemVJbkJ5dGVzOworICAgICAgICAg
ICAgcmlnaHROb2RlLT5tX3N0YXJ0ID0gc3RhcnQ7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IG1fZnJlZVNwYWNlU2l6ZU1hcC5pbnNlcnQocmlnaHROb2RlKTsKICAgICAgICAgICAgIG1fZnJl
ZVNwYWNlU3RhcnRBZGRyZXNzTWFwLmFkZChzdGFydCwgcmlnaHROb2RlKTsKQEAgLTM0Myw4ICsz
NDMsOCBAQCB2b2lkIE1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZSh2b2lkKiBzCiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIEZyZWVTcGFjZU5vZGUqIG5vZGUgPSBhbGxvY0ZyZWVTcGFjZU5v
ZGUoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbm9kZS0+bV9rZXkgPSBzaXplSW5CeXRl
czsKLSAgICAgICAgICAgIG5vZGUtPm1fdmFsdWUgPSBzdGFydDsKKyAgICAgICAgICAgIG5vZGUt
Pm1fc2l6ZUluQnl0ZXMgPSBzaXplSW5CeXRlczsKKyAgICAgICAgICAgIG5vZGUtPm1fc3RhcnQg
PSBzdGFydDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9mcmVlU3BhY2VTaXplTWFwLmlu
c2VydChub2RlKTsKICAgICAgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLmFkZChz
dGFydCwgbm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0
b3IuaAkocmV2aXNpb24gMTA1NjM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRh
QWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDggQEAgbmFtZXNwYWNlIFdU
RiB7CiAKIGNsYXNzIE1ldGFBbGxvY2F0b3IgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1l
dGFBbGxvY2F0b3IpOworCiBwdWJsaWM6Ci0gICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1l
dGFBbGxvY2F0b3Ioc2l6ZV90IGFsbG9jYXRpb25HcmFudWxlKTsKICAgICAKICAgICB2aXJ0dWFs
IH5NZXRhQWxsb2NhdG9yKCk7CkBAIC0xMDEsOCArMTAxLDIzIEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgZnJpZW5kIGNsYXNzIE1ldGFBbGxvY2F0b3JIYW5kbGU7CiAgICAgCi0gICAgdHlwZWRlZiBS
ZWRCbGFja1RyZWU8c2l6ZV90LCB2b2lkKj4gVHJlZTsKLSAgICB0eXBlZGVmIFRyZWU6Ok5vZGUg
RnJlZVNwYWNlTm9kZTsKKyAgICBjbGFzcyBGcmVlU3BhY2VOb2RlIDogcHVibGljIFJlZEJsYWNr
VHJlZTxGcmVlU3BhY2VOb2RlLCBzaXplX3Q+OjpOb2RlIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IEZyZWVTcGFjZU5vZGUodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKKyAgICAgICAg
ICAgIDogbV9zdGFydChzdGFydCkKKyAgICAgICAgICAgICwgbV9zaXplSW5CeXRlcyhzaXplSW5C
eXRlcykKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgc2l6ZV90IGtleSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3NpemVJbkJ5dGVzOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCogbV9zdGFydDsKKyAgICAgICAgc2l6ZV90IG1fc2l6ZUluQnl0ZXM7CisgICAg
fTsKKyAgICB0eXBlZGVmIFJlZEJsYWNrVHJlZTxGcmVlU3BhY2VOb2RlLCBzaXplX3Q+IFRyZWU7
CiAgICAgCiAgICAgLy8gUmVtb3ZlIGZyZWUgc3BhY2UgZnJvbSB0aGUgYWxsb2NhdG9yLiBUaGlz
IGlzIGVmZmVjdGl2ZWx5CiAgICAgLy8gdGhlIGFsbG9jYXRlKCkgZnVuY3Rpb24sIGV4Y2VwdCB0
aGF0IGl0IGRvZXMgbm90IG1hcmsgdGhlCkBAIC0xMjEsNyArMTM2LDcgQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIGluY3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCogYWRkcmVzcywgc2l6ZV90
IHNpemVJbkJ5dGVzKTsKICAgICB2b2lkIGRlY3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCogYWRk
cmVzcywgc2l6ZV90IHNpemVJbkJ5dGVzKTsKLSAgICAKKwogICAgIC8vIFV0aWxpdGllcy4KICAg
ICAKICAgICBzaXplX3Qgcm91bmRVcChzaXplX3Qgc2l6ZUluQnl0ZXMpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9SZWRCbGFja1RyZWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1JlZEJsYWNrVHJlZS5oCShyZXZpc2lvbiAxMDU2MzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZEJsYWNrVHJlZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBXVEYgewogLy8gICByZWZlcmVuY2UgdG8gdGhpcyBu
b2RlLgogLy8gLSBUaGUga2V5IHR5cGUgbXVzdCBpbXBsZW1lbnQgb3BlcmF0b3I8IGFuZCA9PS4K
IAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBlPgordGVtcGxh
dGU8Y2xhc3MgTm9kZVR5cGUsIHR5cGVuYW1lIEtleVR5cGU+CiBjbGFzcyBSZWRCbGFja1RyZWUg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlZEJsYWNrVHJlZSk7CiBwcml2YXRlOgpAQCAt
NTUsMTggKzU1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIFJlZEJsYWNrVHJl
ZTsKICAgICAgICAgCiAgICAgcHVibGljOgotICAgICAgICBOb2RlKEtleVR5cGUga2V5LCBWYWx1
ZVR5cGUgdmFsdWUpCi0gICAgICAgICAgICA6IG1fa2V5KGtleSkKLSAgICAgICAgICAgICwgbV92
YWx1ZSh2YWx1ZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjb25z
dCBOb2RlKiBzdWNjZXNzb3IoKSBjb25zdAorICAgICAgICBjb25zdCBOb2RlVHlwZSogc3VjY2Vz
c29yKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgY29uc3QgTm9kZSogeCA9IHRoaXM7
CiAgICAgICAgICAgICBpZiAoeC0+cmlnaHQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJl
ZU1pbmltdW0oeC0+cmlnaHQoKSk7Ci0gICAgICAgICAgICBjb25zdCBOb2RlKiB5ID0geC0+cGFy
ZW50KCk7CisgICAgICAgICAgICBjb25zdCBOb2RlVHlwZSogeSA9IHgtPnBhcmVudCgpOwogICAg
ICAgICAgICAgd2hpbGUgKHkgJiYgeCA9PSB5LT5yaWdodCgpKSB7CiAgICAgICAgICAgICAgICAg
eCA9IHk7CiAgICAgICAgICAgICAgICAgeSA9IHktPnBhcmVudCgpOwpAQCAtNzQsMTIgKzY4LDEy
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiB5OwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBjb25zdCBOb2RlKiBwcmVkZWNlc3NvcigpIGNvbnN0CisgICAgICAgIGNvbnN0IE5v
ZGVUeXBlKiBwcmVkZWNlc3NvcigpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIGNvbnN0
IE5vZGUqIHggPSB0aGlzOwogICAgICAgICAgICAgaWYgKHgtPmxlZnQoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJlZU1heGltdW0oeC0+bGVmdCgpKTsKLSAgICAgICAgICAgIGNvbnN0IE5v
ZGUqIHkgPSB4LT5wYXJlbnQoKTsKKyAgICAgICAgICAgIGNvbnN0IE5vZGVUeXBlKiB5ID0geC0+
cGFyZW50KCk7CiAgICAgICAgICAgICB3aGlsZSAoeSAmJiB4ID09IHktPmxlZnQoKSkgewogICAg
ICAgICAgICAgICAgIHggPSB5OwogICAgICAgICAgICAgICAgIHkgPSB5LT5wYXJlbnQoKTsKQEAg
LTg3LDE4ICs4MSwxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4geTsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgTm9kZSogc3VjY2Vzc29yKCkKKyAgICAgICAgTm9kZVR5cGUq
IHN1Y2Nlc3NvcigpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBjb25zdF9jYXN0PE5v
ZGUqPihjb25zdF9jYXN0PGNvbnN0IE5vZGUqPih0aGlzKS0+c3VjY2Vzc29yKCkpOworICAgICAg
ICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Tm9kZVR5cGUqPihjb25zdF9jYXN0PGNvbnN0IE5vZGUq
Pih0aGlzKS0+c3VjY2Vzc29yKCkpOwogICAgICAgICB9Ci0gICAgCi0gICAgICAgIE5vZGUqIHBy
ZWRlY2Vzc29yKCkKKworICAgICAgICBOb2RlVHlwZSogcHJlZGVjZXNzb3IoKQogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxOb2RlKj4oY29uc3RfY2FzdDxjb25zdCBO
b2RlKj4odGhpcyktPnByZWRlY2Vzc29yKCkpOworICAgICAgICAgICAgcmV0dXJuIGNvbnN0X2Nh
c3Q8Tm9kZVR5cGUqPihjb25zdF9jYXN0PGNvbnN0IE5vZGUqPih0aGlzKS0+cHJlZGVjZXNzb3Io
KSk7CiAgICAgICAgIH0KLSAgICAKLSAgICAgICAgS2V5VHlwZSBtX2tleTsKLSAgICAgICAgVmFs
dWVUeXBlIG1fdmFsdWU7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHJlc2V0KCkKQEAg
LTExMCwzMiArMTAxLDMyIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIC8vIE5PVEU6IHRo
ZXNlIG1ldGhvZHMgc2hvdWxkIHBhY2sgdGhlIHBhcmVudCBhbmQgcmVkIGludG8gYSBzaW5nbGUK
ICAgICAgICAgLy8gd29yZC4gQnV0IGRvaW5nIHNvIGFwcGVhcnMgdG8gcmV2ZWFsIGEgYnVnIGlu
IHRoZSBjb21waWxlci4KLSAgICAgICAgTm9kZSogcGFyZW50KCkgY29uc3QKKyAgICAgICAgTm9k
ZVR5cGUqIHBhcmVudCgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PE5vZGUqPihtX3BhcmVudEFuZFJlZCAmIH5zdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KDEpKTsKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PE5vZGVUeXBlKj4o
bV9wYXJlbnRBbmRSZWQgJiB+c3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSk7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0UGFyZW50KE5vZGUqIG5ld1BhcmVudCkKKyAgICAg
ICAgdm9pZCBzZXRQYXJlbnQoTm9kZVR5cGUqIG5ld1BhcmVudCkKICAgICAgICAgewogICAgICAg
ICAgICAgbV9wYXJlbnRBbmRSZWQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obmV3UGFy
ZW50KSB8IChtX3BhcmVudEFuZFJlZCAmIDEpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBOb2RlKiBsZWZ0KCkgY29uc3QKKyAgICAgICAgTm9kZVR5cGUqIGxlZnQoKSBjb25zdAogICAg
ICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9sZWZ0OwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICB2b2lkIHNldExlZnQoTm9kZSogbm9kZSkKKyAgICAgICAgdm9pZCBzZXRMZWZ0KE5v
ZGVUeXBlKiBub2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2xlZnQgPSBub2RlOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBOb2RlKiByaWdodCgpIGNvbnN0CisgICAgICAgIE5v
ZGVUeXBlKiByaWdodCgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX3Jp
Z2h0OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIHNldFJpZ2h0KE5vZGUqIG5v
ZGUpCisgICAgICAgIHZvaWQgc2V0UmlnaHQoTm9kZVR5cGUqIG5vZGUpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIG1fcmlnaHQgPSBub2RlOwogICAgICAgICB9CkBAIC0xNTUsMTcgKzE0NiwxNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgbV9wYXJlbnRBbmRSZWQgJj0gfnN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oMSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIE5vZGUqIG1fbGVm
dDsKLSAgICAgICAgTm9kZSogbV9yaWdodDsKKyAgICAgICAgTm9kZVR5cGUqIG1fbGVmdDsKKyAg
ICAgICAgTm9kZVR5cGUqIG1fcmlnaHQ7CiAgICAgICAgIHVpbnRwdHJfdCBtX3BhcmVudEFuZFJl
ZDsKICAgICB9OwotICAgIAorCiAgICAgUmVkQmxhY2tUcmVlKCkKICAgICAgICAgOiBtX3Jvb3Qo
MCkKICAgICB7CiAgICAgfQogICAgIAotICAgIHZvaWQgaW5zZXJ0KE5vZGUqIHgpCisgICAgdm9p
ZCBpbnNlcnQoTm9kZVR5cGUqIHgpCiAgICAgewogICAgICAgICB4LT5yZXNldCgpOwogICAgICAg
ICB0cmVlSW5zZXJ0KHgpOwpAQCAtMTczLDcgKzE2NCw3IEBAIHB1YmxpYzoKIAogICAgICAgICB3
aGlsZSAoeCAhPSBtX3Jvb3QgJiYgeC0+cGFyZW50KCktPmNvbG9yKCkgPT0gUmVkKSB7CiAgICAg
ICAgICAgICBpZiAoeC0+cGFyZW50KCkgPT0geC0+cGFyZW50KCktPnBhcmVudCgpLT5sZWZ0KCkp
IHsKLSAgICAgICAgICAgICAgICBOb2RlKiB5ID0geC0+cGFyZW50KCktPnBhcmVudCgpLT5yaWdo
dCgpOworICAgICAgICAgICAgICAgIE5vZGVUeXBlKiB5ID0geC0+cGFyZW50KCktPnBhcmVudCgp
LT5yaWdodCgpOwogICAgICAgICAgICAgICAgIGlmICh5ICYmIHktPmNvbG9yKCkgPT0gUmVkKSB7
CiAgICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMQogICAgICAgICAgICAgICAgICAgICB4LT5w
YXJlbnQoKS0+c2V0Q29sb3IoQmxhY2spOwpAQCAtMTkzLDcgKzE4NCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8v
IFNhbWUgYXMgInRoZW4iIGNsYXVzZSB3aXRoICJyaWdodCIgYW5kICJsZWZ0IiBleGNoYW5nZWQu
Ci0gICAgICAgICAgICAgICAgTm9kZSogeSA9IHgtPnBhcmVudCgpLT5wYXJlbnQoKS0+bGVmdCgp
OworICAgICAgICAgICAgICAgIE5vZGVUeXBlKiB5ID0geC0+cGFyZW50KCktPnBhcmVudCgpLT5s
ZWZ0KCk7CiAgICAgICAgICAgICAgICAgaWYgKHkgJiYgeS0+Y29sb3IoKSA9PSBSZWQpIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gQ2FzZSAxCiAgICAgICAgICAgICAgICAgICAgIHgtPnBhcmVu
dCgpLT5zZXRDb2xvcihCbGFjayk7CkBAIC0yMTcsMjAgKzIwOCwyMCBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fcm9vdC0+c2V0Q29sb3IoQmxhY2spOwogICAgIH0KIAotICAgIE5vZGUqIHJlbW92ZShO
b2RlKiB6KQorICAgIE5vZGVUeXBlKiByZW1vdmUoTm9kZVR5cGUqIHopCiAgICAgewogICAgICAg
ICBBU1NFUlQoeik7CiAgICAgICAgIEFTU0VSVCh6LT5wYXJlbnQoKSB8fCB6ID09IG1fcm9vdCk7
CiAgICAgICAgIAogICAgICAgICAvLyBZIGlzIHRoZSBub2RlIHRvIGJlIHVubGlua2VkIGZyb20g
dGhlIHRyZWUuCi0gICAgICAgIE5vZGUqIHk7CisgICAgICAgIE5vZGVUeXBlKiB5OwogICAgICAg
ICBpZiAoIXotPmxlZnQoKSB8fCAhei0+cmlnaHQoKSkKICAgICAgICAgICAgIHkgPSB6OwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICB5ID0gei0+c3VjY2Vzc29yKCk7CiAKICAgICAgICAgLy8g
WSBpcyBndWFyYW50ZWVkIHRvIGJlIG5vbi1udWxsIGF0IHRoaXMgcG9pbnQuCi0gICAgICAgIE5v
ZGUqIHg7CisgICAgICAgIE5vZGVUeXBlKiB4OwogICAgICAgICBpZiAoeS0+bGVmdCgpKQogICAg
ICAgICAgICAgeCA9IHktPmxlZnQoKTsKICAgICAgICAgZWxzZQpAQCAtMjM4LDcgKzIyOSw3IEBA
IHB1YmxpYzoKIAogICAgICAgICAvLyBYIGlzIHRoZSBjaGlsZCBvZiB5IHdoaWNoIG1pZ2h0IHBv
dGVudGlhbGx5IHJlcGxhY2UgeSBpbgogICAgICAgICAvLyB0aGUgdHJlZS4gWCBtaWdodCBiZSBu
dWxsIGF0IHRoaXMgcG9pbnQuCi0gICAgICAgIE5vZGUqIHhQYXJlbnQ7CisgICAgICAgIE5vZGVU
eXBlKiB4UGFyZW50OwogICAgICAgICBpZiAoeCkgewogICAgICAgICAgICAgeC0+c2V0UGFyZW50
KHktPnBhcmVudCgpKTsKICAgICAgICAgICAgIHhQYXJlbnQgPSB4LT5wYXJlbnQoKTsKQEAgLTI4
MSwyMCArMjcyLDIwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHo7CiAgICAgfQogICAgIAot
ICAgIE5vZGUqIHJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCisgICAgTm9kZVR5cGUqIHJlbW92
ZShjb25zdCBLZXlUeXBlJiBrZXkpCiAgICAgewotICAgICAgICBOb2RlKiByZXN1bHQgPSBmaW5k
RXhhY3Qoa2V5KTsKKyAgICAgICAgTm9kZVR5cGUqIHJlc3VsdCA9IGZpbmRFeGFjdChrZXkpOwog
ICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1
cm4gcmVtb3ZlKHJlc3VsdCk7CiAgICAgfQogICAgIAotICAgIE5vZGUqIGZpbmRFeGFjdChjb25z
dCBLZXlUeXBlJiBrZXkpIGNvbnN0CisgICAgTm9kZVR5cGUqIGZpbmRFeGFjdChjb25zdCBLZXlU
eXBlJiBrZXkpIGNvbnN0CiAgICAgewotICAgICAgICBmb3IgKE5vZGUqIGN1cnJlbnQgPSBtX3Jv
b3Q7IGN1cnJlbnQ7KSB7Ci0gICAgICAgICAgICBpZiAoY3VycmVudC0+bV9rZXkgPT0ga2V5KQor
ICAgICAgICBmb3IgKE5vZGVUeXBlKiBjdXJyZW50ID0gbV9yb290OyBjdXJyZW50OykgeworICAg
ICAgICAgICAgaWYgKGN1cnJlbnQtPmtleSgpID09IGtleSkKICAgICAgICAgICAgICAgICByZXR1
cm4gY3VycmVudDsKLSAgICAgICAgICAgIGlmIChrZXkgPCBjdXJyZW50LT5tX2tleSkKKyAgICAg
ICAgICAgIGlmIChrZXkgPCBjdXJyZW50LT5rZXkoKSkKICAgICAgICAgICAgICAgICBjdXJyZW50
ID0gY3VycmVudC0+bGVmdCgpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGN1
cnJlbnQgPSBjdXJyZW50LT5yaWdodCgpOwpAQCAtMzAyLDEzICsyOTMsMTMgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9kZSogZmluZExlYXN0R3JlYXRl
clRoYW5PckVxdWFsKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QKKyAgICBOb2RlVHlwZSogZmlu
ZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QKICAgICB7
Ci0gICAgICAgIE5vZGUqIGJlc3QgPSAwOwotICAgICAgICBmb3IgKE5vZGUqIGN1cnJlbnQgPSBt
X3Jvb3Q7IGN1cnJlbnQ7KSB7Ci0gICAgICAgICAgICBpZiAoY3VycmVudC0+bV9rZXkgPT0ga2V5
KQorICAgICAgICBOb2RlVHlwZSogYmVzdCA9IDA7CisgICAgICAgIGZvciAoTm9kZVR5cGUqIGN1
cnJlbnQgPSBtX3Jvb3Q7IGN1cnJlbnQ7KSB7CisgICAgICAgICAgICBpZiAoY3VycmVudC0+a2V5
KCkgPT0ga2V5KQogICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50OwotICAgICAgICAgICAg
aWYgKGN1cnJlbnQtPm1fa2V5IDwga2V5KQorICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmtleSgp
IDwga2V5KQogICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5yaWdodCgpOwogICAg
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgYmVzdCA9IGN1cnJlbnQ7CkBAIC0zMTgs
MTMgKzMwOSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiZXN0OwogICAgIH0KICAgICAK
LSAgICBOb2RlKiBmaW5kR3JlYXRlc3RMZXNzVGhhbk9yRXF1YWwoY29uc3QgS2V5VHlwZSYga2V5
KSBjb25zdAorICAgIE5vZGVUeXBlKiBmaW5kR3JlYXRlc3RMZXNzVGhhbk9yRXF1YWwoY29uc3Qg
S2V5VHlwZSYga2V5KSBjb25zdAogICAgIHsKLSAgICAgICAgTm9kZSogYmVzdCA9IDA7Ci0gICAg
ICAgIGZvciAoTm9kZSogY3VycmVudCA9IG1fcm9vdDsgY3VycmVudDspIHsKLSAgICAgICAgICAg
IGlmIChjdXJyZW50LT5tX2tleSA9PSBrZXkpCisgICAgICAgIE5vZGVUeXBlKiBiZXN0ID0gMDsK
KyAgICAgICAgZm9yIChOb2RlVHlwZSogY3VycmVudCA9IG1fcm9vdDsgY3VycmVudDspIHsKKyAg
ICAgICAgICAgIGlmIChjdXJyZW50LT5rZXkoKSA9PSBrZXkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGN1cnJlbnQ7Ci0gICAgICAgICAgICBpZiAoY3VycmVudC0+bV9rZXkgPiBrZXkpCisgICAg
ICAgICAgICBpZiAoY3VycmVudC0+a2V5KCkgPiBrZXkpCiAgICAgICAgICAgICAgICAgY3VycmVu
dCA9IGN1cnJlbnQtPmxlZnQoKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAg
IGJlc3QgPSBjdXJyZW50OwpAQCAtMzM0LDE0ICszMjUsMTQgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gYmVzdDsKICAgICB9CiAgICAgCi0gICAgTm9kZSogZmlyc3QoKSBjb25zdAorICAgIE5v
ZGVUeXBlKiBmaXJzdCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoIW1fcm9vdCkKICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gdHJlZU1pbmltdW0obV9yb290KTsKICAg
ICB9CiAgICAgCi0gICAgTm9kZSogbGFzdCgpIGNvbnN0CisgICAgTm9kZVR5cGUqIGxhc3QoKSBj
b25zdAogICAgIHsKICAgICAgICAgaWYgKCFtX3Jvb3QpCiAgICAgICAgICAgICByZXR1cm4gMDsK
QEAgLTM1Miw3ICszNDMsNyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IHNpemUoKQogICAgIHsKICAg
ICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gICAgICAgIGZvciAoTm9kZSogY3VycmVudCA9IGZp
cnN0KCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5zdWNjZXNzb3IoKSkKKyAgICAgICAg
Zm9yIChOb2RlVHlwZSogY3VycmVudCA9IGZpcnN0KCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJy
ZW50LT5zdWNjZXNzb3IoKSkKICAgICAgICAgICAgIHJlc3VsdCsrOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KQEAgLTM2Niw0NiArMzU3LDQ2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgLy8gRmluZHMgdGhlIG1pbmltdW0gZWxlbWVudCBpbiB0aGUgc3ViLXRyZWUgcm9vdGVkIGF0
IHRoZSBnaXZlbgogICAgIC8vIG5vZGUuCi0gICAgc3RhdGljIE5vZGUqIHRyZWVNaW5pbXVtKE5v
ZGUqIHgpCisgICAgc3RhdGljIE5vZGVUeXBlKiB0cmVlTWluaW11bShOb2RlVHlwZSogeCkKICAg
ICB7CiAgICAgICAgIHdoaWxlICh4LT5sZWZ0KCkpCiAgICAgICAgICAgICB4ID0geC0+bGVmdCgp
OwogICAgICAgICByZXR1cm4geDsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIE5vZGUqIHRyZWVN
YXhpbXVtKE5vZGUqIHgpCisgICAgc3RhdGljIE5vZGVUeXBlKiB0cmVlTWF4aW11bShOb2RlVHlw
ZSogeCkKICAgICB7CiAgICAgICAgIHdoaWxlICh4LT5yaWdodCgpKQogICAgICAgICAgICAgeCA9
IHgtPnJpZ2h0KCk7CiAgICAgICAgIHJldHVybiB4OwogICAgIH0KIAotICAgIHN0YXRpYyBjb25z
dCBOb2RlKiB0cmVlTWluaW11bShjb25zdCBOb2RlKiB4KQorICAgIHN0YXRpYyBjb25zdCBOb2Rl
VHlwZSogdHJlZU1pbmltdW0oY29uc3QgTm9kZVR5cGUqIHgpCiAgICAgewogICAgICAgICB3aGls
ZSAoeC0+bGVmdCgpKQogICAgICAgICAgICAgeCA9IHgtPmxlZnQoKTsKICAgICAgICAgcmV0dXJu
IHg7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBjb25zdCBOb2RlKiB0cmVlTWF4aW11bShjb25z
dCBOb2RlKiB4KQorICAgIHN0YXRpYyBjb25zdCBOb2RlVHlwZSogdHJlZU1heGltdW0oY29uc3Qg
Tm9kZVR5cGUqIHgpCiAgICAgewogICAgICAgICB3aGlsZSAoeC0+cmlnaHQoKSkKICAgICAgICAg
ICAgIHggPSB4LT5yaWdodCgpOwogICAgICAgICByZXR1cm4geDsKICAgICB9CiAKLSAgICB2b2lk
IHRyZWVJbnNlcnQoTm9kZSogeikKKyAgICB2b2lkIHRyZWVJbnNlcnQoTm9kZVR5cGUqIHopCiAg
ICAgewogICAgICAgICBBU1NFUlQoIXotPmxlZnQoKSk7CiAgICAgICAgIEFTU0VSVCghei0+cmln
aHQoKSk7CiAgICAgICAgIEFTU0VSVCghei0+cGFyZW50KCkpOwogICAgICAgICBBU1NFUlQoei0+
Y29sb3IoKSA9PSBSZWQpOwogICAgICAgICAKLSAgICAgICAgTm9kZSogeSA9IDA7Ci0gICAgICAg
IE5vZGUqIHggPSBtX3Jvb3Q7CisgICAgICAgIE5vZGVUeXBlKiB5ID0gMDsKKyAgICAgICAgTm9k
ZVR5cGUqIHggPSBtX3Jvb3Q7CiAgICAgICAgIHdoaWxlICh4KSB7CiAgICAgICAgICAgICB5ID0g
eDsKLSAgICAgICAgICAgIGlmICh6LT5tX2tleSA8IHgtPm1fa2V5KQorICAgICAgICAgICAgaWYg
KHotPmtleSgpIDwgeC0+a2V5KCkpCiAgICAgICAgICAgICAgICAgeCA9IHgtPmxlZnQoKTsKICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB4ID0geC0+cmlnaHQoKTsKQEAgLTQxNCw3
ICs0MDUsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIXkpCiAgICAgICAgICAgICBtX3Jvb3Qg
PSB6OwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmICh6LT5tX2tleSA8IHktPm1fa2V5
KQorICAgICAgICAgICAgaWYgKHotPmtleSgpIDwgeS0+a2V5KCkpCiAgICAgICAgICAgICAgICAg
eS0+c2V0TGVmdCh6KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB5LT5zZXRS
aWdodCh6KTsKQEAgLTQyNywxMCArNDE4LDEwIEBAIHByaXZhdGU6CiAKICAgICAvLyBMZWZ0LXJv
dGF0ZXMgdGhlIHN1YnRyZWUgcm9vdGVkIGF0IHguCiAgICAgLy8gUmV0dXJucyB0aGUgbmV3IHJv
b3Qgb2YgdGhlIHN1YnRyZWUgKHgncyByaWdodCBjaGlsZCkuCi0gICAgTm9kZSogbGVmdFJvdGF0
ZShOb2RlKiB4KQorICAgIE5vZGVUeXBlKiBsZWZ0Um90YXRlKE5vZGVUeXBlKiB4KQogICAgIHsK
ICAgICAgICAgLy8gU2V0IHkuCi0gICAgICAgIE5vZGUqIHkgPSB4LT5yaWdodCgpOworICAgICAg
ICBOb2RlVHlwZSogeSA9IHgtPnJpZ2h0KCk7CiAKICAgICAgICAgLy8gVHVybiB5J3MgbGVmdCBz
dWJ0cmVlIGludG8geCdzIHJpZ2h0IHN1YnRyZWUuCiAgICAgICAgIHgtPnNldFJpZ2h0KHktPmxl
ZnQoKSk7CkBAIC00NTcsMTAgKzQ0OCwxMCBAQCBwcml2YXRlOgogCiAgICAgLy8gUmlnaHQtcm90
YXRlcyB0aGUgc3VidHJlZSByb290ZWQgYXQgeS4KICAgICAvLyBSZXR1cm5zIHRoZSBuZXcgcm9v
dCBvZiB0aGUgc3VidHJlZSAoeSdzIGxlZnQgY2hpbGQpLgotICAgIE5vZGUqIHJpZ2h0Um90YXRl
KE5vZGUqIHkpCisgICAgTm9kZVR5cGUqIHJpZ2h0Um90YXRlKE5vZGVUeXBlKiB5KQogICAgIHsK
ICAgICAgICAgLy8gU2V0IHguCi0gICAgICAgIE5vZGUqIHggPSB5LT5sZWZ0KCk7CisgICAgICAg
IE5vZGVUeXBlKiB4ID0geS0+bGVmdCgpOwogCiAgICAgICAgIC8vIFR1cm4geCdzIHJpZ2h0IHN1
YnRyZWUgaW50byB5J3MgbGVmdCBzdWJ0cmVlLgogICAgICAgICB5LT5zZXRMZWZ0KHgtPnJpZ2h0
KCkpOwpAQCAtNDg4LDcgKzQ3OSw3IEBAIHByaXZhdGU6CiAgICAgLy8gUmVzdG9yZXMgdGhlIHJl
ZC1ibGFjayBwcm9wZXJ0eSB0byB0aGUgdHJlZSBhZnRlciBzcGxpY2luZyBvdXQKICAgICAvLyBh
IG5vZGUuIE5vdGUgdGhhdCB4IG1heSBiZSBudWxsLCB3aGljaCBpcyB3aHkgeFBhcmVudCBtdXN0
IGJlCiAgICAgLy8gc3VwcGxpZWQuCi0gICAgdm9pZCByZW1vdmVGaXh1cChOb2RlKiB4LCBOb2Rl
KiB4UGFyZW50KQorICAgIHZvaWQgcmVtb3ZlRml4dXAoTm9kZVR5cGUqIHgsIE5vZGVUeXBlKiB4
UGFyZW50KQogICAgIHsKICAgICAgICAgd2hpbGUgKHggIT0gbV9yb290ICYmICgheCB8fCB4LT5j
b2xvcigpID09IEJsYWNrKSkgewogICAgICAgICAgICAgaWYgKHggPT0geFBhcmVudC0+bGVmdCgp
KSB7CkBAIC00OTYsNyArNDg3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBUaGUg
cmVhc29uIGlzIG5vdCBvYnZpb3VzIGZyb20gc2ltcGx5IGxvb2tpbmcgYXQKICAgICAgICAgICAg
ICAgICAvLyB0aGUgY29kZTsgaXQgY29tZXMgYWJvdXQgZnJvbSB0aGUgcHJvcGVydGllcyBvZiB0
aGUKICAgICAgICAgICAgICAgICAvLyByZWQtYmxhY2sgdHJlZS4KLSAgICAgICAgICAgICAgICBO
b2RlKiB3ID0geFBhcmVudC0+cmlnaHQoKTsKKyAgICAgICAgICAgICAgICBOb2RlVHlwZSogdyA9
IHhQYXJlbnQtPnJpZ2h0KCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHcpOyAvLyB4J3Mgc2li
bGluZyBzaG91bGQgbm90IGJlIG51bGwuCiAgICAgICAgICAgICAgICAgaWYgKHctPmNvbG9yKCkg
PT0gUmVkKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMQpAQCAtNTM2LDcgKzUyNyw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gVGhlIHJlYXNvbiBpcyBub3Qgb2J2aW91
cyBmcm9tIHNpbXBseSBsb29raW5nIGF0CiAgICAgICAgICAgICAgICAgLy8gdGhlIGNvZGU7IGl0
IGNvbWVzIGFib3V0IGZyb20gdGhlIHByb3BlcnRpZXMgb2YgdGhlCiAgICAgICAgICAgICAgICAg
Ly8gcmVkLWJsYWNrIHRyZWUuCi0gICAgICAgICAgICAgICAgTm9kZSogdyA9IHhQYXJlbnQtPmxl
ZnQoKTsKKyAgICAgICAgICAgICAgICBOb2RlVHlwZSogdyA9IHhQYXJlbnQtPmxlZnQoKTsKICAg
ICAgICAgICAgICAgICBBU1NFUlQodyk7IC8vIHgncyBzaWJsaW5nIHNob3VsZCBub3QgYmUgbnVs
bC4KICAgICAgICAgICAgICAgICBpZiAody0+Y29sb3IoKSA9PSBSZWQpIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gQ2FzZSAxCkBAIC01NzQsNyArNTY1LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIHgtPnNldENvbG9yKEJsYWNrKTsKICAgICB9CiAKLSAgICBOb2RlKiBtX3Jvb3Q7CisgICAg
Tm9kZVR5cGUqIG1fcm9vdDsKIH07CiAKIH0K
</data>
<flag name="review"
          id="124707"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123845</attachid>
            <date>2012-01-24 17:00:32 -0800</date>
            <delta_ts>2012-01-24 17:02:32 -0800</delta_ts>
            <desc>Add mechanism to MetaAllocator to allow allocations to be tracked.</desc>
            <filename>76855.3.patch</filename>
            <type>text/plain</type>
            <size>8568</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA1ODExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBA
CisyMDEyLTAxLTI0ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY4NTUK
KyAgICAgICAgSW1wbGVtZW50IGEgSklULWNvZGUgYXdhcmUgc2FtcGxpbmcgcHJvZmlsZXIgZm9y
IEpTQworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBzdXBwb3J0IHRvIE1ldGFBbGxvY2F0b3IuY3BwIHRvIHRyYWNrIGFsbCBsaXZlIGhhbmRsZXMg
aW4gYSBtYXAsCisgICAgICAgIGFsbG93aW5nIGxvb2t1cCBiYXNlZCBvbiBhbnkgYWRkcmVzcyB3
aXRoaW4gdGhlIGFsbG9jYXRpb24uCisKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6
CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JUcmFja2VyOjpub3RpZnkpOgorICAgICAgICAo
V1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tlcjo6cmVsZWFzZSk6CisgICAgICAgICAgICAtIFRyYWNr
IGxpdmUgaGFuZGxlIG9iamVjdHMgaW4gYSBtYXAuCisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0
b3I6OnJlbGVhc2UpOgorICAgICAgICAgICAgLSBSZW1vdmVkIHN1cHBvcnQgZm9yIGhhbmRsZXMg
d2l0aCBudWxsIG1fYWxsb2NhdG9yIChubyBsb25nZXIgdXNlZCkuCisgICAgICAgICAgICAtIE5v
dGlmeSB0aGUgdHJhY2tlciBvZiBoYW5kbGVzIGJlaW5nIHJlbGVhc2VkLgorICAgICAgICAoV1RG
OjpNZXRhQWxsb2NhdG9ySGFuZGxlOjp+TWV0YUFsbG9jYXRvckhhbmRsZSk6CisgICAgICAgICAg
ICAtIE1vdmVkIGZ1bmN0aW9uYWxpdHkgb3V0IGludG8gTWV0YUFsbG9jYXRvcjo6cmVsZWFzZS4K
KyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKToKKyAgICAgICAgICAg
IC0gUmVtb3ZlZCBzdXBwb3J0IGZvciBoYW5kbGVzIHdpdGggbnVsbCBtX2FsbG9jYXRvciAobm8g
bG9uZ2VyIHVzZWQpLgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9y
KToKKyAgICAgICAgICAgIC0gSW5pdGlhbGl6ZSBtX3RyYWNrZXIuCisgICAgICAgIChXVEY6Ok1l
dGFBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgICAgIC0gTm90aWZ5IHRoZSB0cmFja2Vy
IG9mIG5ldyBhbGxvY2F0aW9ucy4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5oOgorICAg
ICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tlcjo6ZmluZCk6CisgICAgICAgICAgICAtIExv
b2t1cCBhIE1ldGFBbGxvY2F0b3JIYW5kbGUgYmFzZWQgb24gYW4gYWRkcmVzcyBpbnNpZGUgdGhl
IGFsbG9jYXRpb24uCisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OnRyYWNrQWxsb2NhdGlv
bnMpOgorICAgICAgICAgICAgLSBSZWdpc3RlciBhIGNhbGxiYWNrIG9iamVjdCB0byB0cmFjayBh
bGxvY2F0aW9uIHN0YXRlLgorICAgICAgICAqIHd0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmg6Cisg
ICAgICAgICAgICAtIFJlbW92ZSB1bnVzZWQgY3JlYXRlU2VsZk1hbmFnZWRIYW5kbGUvY29uc3Ry
dWN0b3IuCisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6OmtleSk6CisgICAgICAg
ICAgICAtIEFkZGVkLCBmb3IgdXNlIGluIFJlZEJsYWNrVHJlZS4KKwogMjAxMi0wMS0yNCAgR2Vv
ZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEpTVmFsdWU6OnRvU3Ry
aW5nKCkgc2hvdWxkIHJldHVybiBhIEpTU3RyaW5nKiBpbnN0ZWFkIG9mIGEgVVN0cmluZwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuY3BwCShyZXZpc2lv
biAxMDU2NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMywyOCBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAor
dm9pZCBNZXRhQWxsb2NhdG9yVHJhY2tlcjo6bm90aWZ5KE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhh
bmRsZSkKK3sKKyAgICBtX2FsbG9jYXRpb25zLmluc2VydChoYW5kbGUpOworfQorCit2b2lkIE1l
dGFBbGxvY2F0b3JUcmFja2VyOjpyZWxlYXNlKE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSkK
K3sKKyAgICBtX2FsbG9jYXRpb25zLnJlbW92ZShoYW5kbGUpOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgTWV0YUFsbG9jYXRvcjo6cmVsZWFzZShNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUp
Cit7CisgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOworICAgIGlmIChoYW5kbGUt
PnNpemVJbkJ5dGVzKCkpIHsKKyAgICAgICAgZGVjcmVtZW50UGFnZU9jY3VwYW5jeShoYW5kbGUt
PnN0YXJ0KCksIGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSk7CisgICAgICAgIGFkZEZyZWVTcGFjZUZy
b21SZWxlYXNlZEhhbmRsZShoYW5kbGUtPnN0YXJ0KCksIGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSk7
CisgICAgfQorCisgICAgaWYgKFVOTElLRUxZKCEhbV90cmFja2VyKSkKKyAgICAgICAgbV90cmFj
a2VyLT5yZWxlYXNlKGhhbmRsZSk7Cit9CisKIE1ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxv
Y2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciogYWxsb2NhdG9yLCB2b2lkKiBzdGFydCwgc2l6ZV90
IHNpemVJbkJ5dGVzKQogICAgIDogbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQogICAgICwgbV9zdGFy
dChzdGFydCkKQEAgLTQ1LDI0ICs2NywxNCBAQCBNZXRhQWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxs
b2NhdG9ySGFuZGxlCiAKIE1ldGFBbGxvY2F0b3JIYW5kbGU6On5NZXRhQWxsb2NhdG9ySGFuZGxl
KCkKIHsKLSAgICBpZiAoIW1fYWxsb2NhdG9yKQotICAgICAgICByZXR1cm47Ci0gICAgU3Bpbkxv
Y2tIb2xkZXIgbG9ja2VyKCZtX2FsbG9jYXRvci0+bV9sb2NrKTsKLSAgICBpZiAobV9zaXplSW5C
eXRlcykgewotICAgICAgICBtX2FsbG9jYXRvci0+ZGVjcmVtZW50UGFnZU9jY3VwYW5jeShtX3N0
YXJ0LCBtX3NpemVJbkJ5dGVzKTsKLSAgICAgICAgbV9hbGxvY2F0b3ItPmFkZEZyZWVTcGFjZUZy
b21SZWxlYXNlZEhhbmRsZShtX3N0YXJ0LCBtX3NpemVJbkJ5dGVzKTsKLSAgICB9CisgICAgQVNT
RVJUKG1fYWxsb2NhdG9yKTsKKyAgICBtX2FsbG9jYXRvci0+cmVsZWFzZSh0aGlzKTsKIH0KIAog
dm9pZCBNZXRhQWxsb2NhdG9ySGFuZGxlOjpzaHJpbmsoc2l6ZV90IG5ld1NpemVJbkJ5dGVzKQog
ewogICAgIEFTU0VSVChuZXdTaXplSW5CeXRlcyA8PSBtX3NpemVJbkJ5dGVzKTsKICAgICAKLSAg
ICBpZiAoIW1fYWxsb2NhdG9yKSB7Ci0gICAgICAgIG1fc2l6ZUluQnl0ZXMgPSBuZXdTaXplSW5C
eXRlczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKICAgICBTcGluTG9ja0hvbGRlciBs
b2NrZXIoJm1fYWxsb2NhdG9yLT5tX2xvY2spOwogCiAgICAgbmV3U2l6ZUluQnl0ZXMgPSBtX2Fs
bG9jYXRvci0+cm91bmRVcChuZXdTaXplSW5CeXRlcyk7CkBAIC05MSw2ICsxMDMsNyBAQCBNZXRh
QWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9yKHNpemVfdCBhbGxvCiAgICAgLCBtX2J5dGVzQWxsb2Nh
dGVkKDApCiAgICAgLCBtX2J5dGVzUmVzZXJ2ZWQoMCkKICAgICAsIG1fYnl0ZXNDb21taXR0ZWQo
MCkKKyAgICAsIG1fdHJhY2tlcigwKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fbWFsbG9jQmFs
YW5jZSgwKQogI2VuZGlmCkBAIC0xNTgsNiArMTcxLDkgQEAgUGFzc1JlZlB0cjxNZXRhQWxsb2Nh
dG9ySGFuZGxlPiBNZXRhQWxsbwogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYSB2ZXJpZmllciBz
Y2hlbWUgdGhhdCBncm9rcyBNZXRhQWxsb2NhdG9ySGFuZGxlcwogICAgIGhhbmRsZS0+ZGVwcmVj
YXRlZFR1cm5PZmZWZXJpZmllcigpOwogCisgICAgaWYgKFVOTElLRUxZKCEhbV90cmFja2VyKSkK
KyAgICAgICAgbV90cmFja2VyLT5ub3RpZnkoaGFuZGxlKTsKKwogICAgIHJldHVybiBhZG9wdFJl
ZihoYW5kbGUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxv
Y2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxv
Y2F0b3IuaAkocmV2aXNpb24gMTA1NjQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9N
ZXRhQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDIyIEBAIG5hbWVzcGFj
ZSBXVEYgewogCiAjZGVmaW5lIEVOQUJMRV9NRVRBX0FMTE9DQVRPUl9QUk9GSUxFIDAKIAorY2xh
c3MgTWV0YUFsbG9jYXRvclRyYWNrZXIgeworcHVibGljOgorICAgIHZvaWQgbm90aWZ5KE1ldGFB
bGxvY2F0b3JIYW5kbGUqKTsKKyAgICB2b2lkIHJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSop
OworCisgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmluZCh2b2lkKiBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gbV9hbGxvY2F0aW9ucy5maW5k
R3JlYXRlc3RMZXNzVGhhbk9yRXF1YWwoYWRkcmVzcyk7CisgICAgICAgIGlmIChoYW5kbGUgJiYg
YWRkcmVzcyA8IGhhbmRsZS0+ZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gaGFuZGxlOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWRCbGFja1RyZWU8TWV0YUFsbG9jYXRvckhh
bmRsZSwgdm9pZCo+IG1fYWxsb2NhdGlvbnM7Cit9OworCiBjbGFzcyBNZXRhQWxsb2NhdG9yIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZXRhQWxsb2NhdG9yKTsKIApAQCAtNTIsNiArNjgs
MTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfk1ldGFBbGxvY2F0b3IoKTsKICAgICAKICAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBhbGxvY2F0
ZShzaXplX3Qgc2l6ZUluQnl0ZXMpOworCisgICAgdm9pZCB0cmFja0FsbG9jYXRpb25zKE1ldGFB
bGxvY2F0b3JUcmFja2VyKiB0cmFja2VyKQorICAgIHsKKyAgICAgICAgbV90cmFja2VyID0gdHJh
Y2tlcjsKKyAgICB9CiAgICAgCiAgICAgLy8gTm9uLWF0b21pYyBtZXRob2RzIGZvciBnZXR0aW5n
IGFsbG9jYXRvciBzdGF0aXN0aWNzLgogICAgIHNpemVfdCBieXRlc0FsbG9jYXRlZCgpIHsgcmV0
dXJuIG1fYnl0ZXNBbGxvY2F0ZWQ7IH0KQEAgLTExOCw2ICsxMzksOSBAQCBwcml2YXRlOgogICAg
ICAgICBzaXplX3QgbV9zaXplSW5CeXRlczsKICAgICB9OwogICAgIHR5cGVkZWYgUmVkQmxhY2tU
cmVlPEZyZWVTcGFjZU5vZGUsIHNpemVfdD4gVHJlZTsKKworICAgIC8vIFJlbGVhc2UgYSBNZXRh
QWxsb2NhdG9ySGFuZGxlLgorICAgIHZvaWQgcmVsZWFzZShNZXRhQWxsb2NhdG9ySGFuZGxlKik7
CiAgICAgCiAgICAgLy8gUmVtb3ZlIGZyZWUgc3BhY2UgZnJvbSB0aGUgYWxsb2NhdG9yLiBUaGlz
IGlzIGVmZmVjdGl2ZWx5CiAgICAgLy8gdGhlIGFsbG9jYXRlKCkgZnVuY3Rpb24sIGV4Y2VwdCB0
aGF0IGl0IGRvZXMgbm90IG1hcmsgdGhlCkBAIC0xNjAsNiArMTg0LDggQEAgcHJpdmF0ZToKICAg
ICAKICAgICBTcGluTG9jayBtX2xvY2s7CiAKKyAgICBNZXRhQWxsb2NhdG9yVHJhY2tlciogbV90
cmFja2VyOworCiAjaWZuZGVmIE5ERUJVRwogICAgIHNpemVfdCBtX21hbGxvY0JhbGFuY2U7CiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvckhhbmRs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRv
ckhhbmRsZS5oCShyZXZpc2lvbiAxMDU2NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L01ldGFBbGxvY2F0b3JIYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
I2RlZmluZSBXVEZfTWV0YUFsbG9jYXRvckhhbmRsZV9oCiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9SZWRCbGFja1RyZWUuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtMzcsMjYgKzM4LDEzIEBA
IG5hbWVzcGFjZSBXVEYgewogCiBjbGFzcyBNZXRhQWxsb2NhdG9yOwogCi1jbGFzcyBNZXRhQWxs
b2NhdG9ySGFuZGxlIDogcHVibGljIFJlZkNvdW50ZWQ8TWV0YUFsbG9jYXRvckhhbmRsZT4gewor
Y2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkPE1ldGFBbGxvY2F0
b3JIYW5kbGU+LCBwdWJsaWMgUmVkQmxhY2tUcmVlPE1ldGFBbGxvY2F0b3JIYW5kbGUsIHZvaWQq
Pjo6Tm9kZSB7CiBwcml2YXRlOgogICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRv
ciosIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpOwogICAgIAotICAgIE1ldGFBbGxv
Y2F0b3JIYW5kbGUodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKLSAgICAgICAgOiBt
X2FsbG9jYXRvcigwKQotICAgICAgICAsIG1fc3RhcnQoc3RhcnQpCi0gICAgICAgICwgbV9zaXpl
SW5CeXRlcyhzaXplSW5CeXRlcykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzdGFydCk7Ci0gICAg
fQotICAgIAogcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+TWV0YUFsbG9jYXRvckhh
bmRsZSgpOwogICAgIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+
IGNyZWF0ZVNlbGZNYW5hZ2VkSGFuZGxlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1ldGFBbGxvY2F0b3JIYW5kbGUo
c3RhcnQsIHNpemVJbkJ5dGVzKSk7Ci0gICAgfQotICAgIAogICAgIHZvaWQqIHN0YXJ0KCkKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX3N0YXJ0OwpAQCAtODUsNiArNzMsMTEgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3I7CiAgICAgfQogICAgIAorICAgIHZvaWQqIGtleSgp
CisgICAgeworICAgICAgICByZXR1cm4gbV9zdGFydDsKKyAgICB9CisgICAgCiBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBNZXRhQWxsb2NhdG9yOwogICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRHbHVlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdEdsdWUv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxMDU4MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDEtMjQgIEdhdmlu
IEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Njg1NQorICAgICAgICBJbXBsZW1lbnQg
YSBKSVQtY29kZSBhd2FyZSBzYW1wbGluZyBwcm9maWxlciBmb3IgSlNDCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgdG8gTWV0YUFs
bG9jYXRvci5jcHAgdG8gdHJhY2sgYWxsIGxpdmUgaGFuZGxlcyBpbiBhIG1hcCwKKyAgICAgICAg
YWxsb3dpbmcgbG9va3VwIGJhc2VkIG9uIGFueSBhZGRyZXNzIHdpdGhpbiB0aGUgYWxsb2NhdGlv
bi4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3d0Zi9SZWRCbGFja1RyZWUuaDogQWRk
ZWQuCisKIDIwMTItMDEtMjMgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBKU1ZhbHVlOjp0b1N0cmluZygpIHNob3VsZCByZXR1cm4gYSBKU1N0cmluZyogaW5z
dGVhZCBvZiBhIFVTdHJpbmcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5n
SGVhZGVycy93dGYvUmVkQmxhY2tUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9SZWRCbGFja1RyZWUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvUmVkQmxhY2tU
cmVlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9SZWRCbGFja1RyZWUuaD4K
</data>
<flag name="review"
          id="124971"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124378</attachid>
            <date>2012-01-27 15:10:08 -0800</date>
            <delta_ts>2012-01-27 16:05:03 -0800</delta_ts>
            <desc>The profiler.  Will probably require some PLATFORM(MAC) guards to make this compiler on non-OS X builds.</desc>
            <filename>76855.4.patch</filename>
            <type>text/plain</type>
            <size>53022</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA2MTUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDEyLTAxLTI3ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBJbXBsZW1lbnQgYSBKSVQtY29kZSBhd2FyZSBzYW1wbGluZyBwcm9maWxlciBm
b3IgSlNDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
Njg1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRv
IGVuYWJsZSB0aGUgcHJvZmlsZXIsIHNldCB0aGUgSlNDX0NPREVfUFJPRklMSU5HIGVudmlyb25t
ZW50IHZhcmlhYmxlIHRvCisgICAgICAgIDEgKG5vIHRyYWNpbmcgdGhlIEMgc3RhY2spLCAyICh0
cmFjZSBvbmUgbGV2ZWwgb2YgQyBjb2RlKSBvciAzIChyZWN1cnNpdmVseQorICAgICAgICB0cmFj
ZSBhbGwgc2FtcGxlcykuCisKKyAgICAgICAgVGhlIHByb2ZpbGVyIHJlcXVpcmVzIC1mb21pdC1m
cmFtZS1wb2ludGVyIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgYnVpbGQgZmxhZ3MuCisKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICAgICAtIFJlbW92ZWQgYW4gZXhwb3J0
LgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICAgICAtIEFkZGVkIG5ldyBmaWxlcworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5jcHA6CisgICAgICAgICAgICAtIEZvciBiYXNlbGluZSBjb2RlYmxvY2tzLCBjYWNoZSB0aGUg
cmVzdWx0IG9mIGNhbkNvbXBpbGVXaXRoREZHLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5oOgorICAgICAgICAgICAgLSBGb3IgYmFzZWxpbmUgY29kZWJsb2NrcywgY2FjaGUgdGhlIHJl
c3VsdCBvZiBjYW5Db21waWxlV2l0aERGRy4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9j
YXRvci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVB
bGxvY2F0b3IpOgorICAgICAgICAgICAgLSBOb3RpZnkgdGhlIHByb2ZpbGVyIHdoZW4gdGhlIGFs
bG9jYXRvciBpcyBjcmVhdGVkLgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjph
bGxvY2F0ZSk6CisgICAgICAgICAgICAtIEluZm9ybSB0aGUgYWxsb2NhdGVkIG9mIHRoZSBvd25l
clVJRC4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcDoK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG9jYXRvcik6
CisgICAgICAgICAgICAtIE5vdGlmeSB0aGUgcHJvZmlsZXIgd2hlbiB0aGUgYWxsb2NhdG9yIGlz
IGNyZWF0ZWQuCisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKToK
KyAgICAgICAgICAgIC0gSW5mb3JtIHRoZSBhbGxvY2F0ZWQgb2YgdGhlIG93bmVyVUlELgorICAg
ICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgICAgICAtIElmIHByb2ZpbGluZywgZG9u
J3QgbWFzayB0aGUgcmV0dXJuIGFkZHJlc3MgaW4gSklUIGNvZGUuCisgICAgICAgICAgICAgIChX
ZSBkbyBzbyB0byBwcm92aWRlIG5pY2VyIGJhY2t0cmFjZXMgaW4gZGVidWcgYnVpbGRzKS4KKyAg
ICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpldmFsdWF0ZSk6
CisgICAgICAgICAgICAtIE5vdGlmeSB0aGUgcHJvZmlsZXIgb2Ygc2NyaXB0IGV2YWx1YXRpb25z
LgorICAgICAgICAqIHRvb2xzOiBBZGRlZC4KKyAgICAgICAgKiB0b29scy9Db2RlUHJvZmlsZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpzeW1ib2xOYW1lKToKKyAgICAgICAgICAgIC0gSGVs
cGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgbmFtZSBvZiBhIHN5bWJvbCBpbiB0aGUgZnJhbWV3b3Jr
LgorICAgICAgICAoSlNDOjp0cnVuY2F0ZVRyYWNlKToKKyAgICAgICAgICAgIC0gSGVscGVyIHRv
IHRydW5jYXRlIHRyYWNlcyBpbnRvIG1ldGhvZHMga25vdyB0byBoYXZlIHVuaW5mb3JtYXRpdmVs
eSBkZWVwIHN0YWNrcy4KKyAgICAgICAgKEpTQzo6Q29kZVByb2ZpbGU6OnNhbXBsZSk6CisgICAg
ICAgICAgICAtIFJlY29yZCBhIHN0YWNrIHRyYWNlIGNsYXNzaWZ5aW5nIHNhbXBsZXMuCisgICAg
ICAgIChKU0M6OkNvZGVQcm9maWxlOjpyZXBvcnQpOgorICAgICAgICAgICAgLSB7UHJpbnQgcHJv
ZmlsZXIgb3V0cHV0LgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxlLmg6IEFkZGVkLgorICAg
ICAgICAgICAgLSBuZXcgY2xhc3MsIGNhcHR1cmVzIGEgc2V0IG9mIHNhbXBsZXMgYXNzb2NpYXRl
ZCB3aXRoIGFuIGV2YWx1YXRlZCBzY3JpcHQsCisgICAgICAgICAgICAgIGFuZCBuZXN0ZWQgdG8g
cmVjb3JkIHNhbXBsZXMgZnJvbSBzdWJzY3JpcHRzLgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9m
aWxpbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q29kZVByb2ZpbGluZzo6cHJvZmlsaW5n
VGltZXIpOgorICAgICAgICAgICAgLSBjYWxsYmFjayBmaXJlZCB0aGVuIGEgdGltZXIgZXZlbnQg
b2NjdXJzLgorICAgICAgICAoSlNDOjpDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IpOgor
ICAgICAgICAgICAgLSBjYWxsZWQgd2hlbiB0aGUgZXhlY3V0YWJsZSBhbGxvY2F0b3IgaXMgY29u
c3RydWN0ZWQuCisgICAgICAgIChKU0M6OkNvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEMp
OgorICAgICAgICAgICAgLSBoZWxwZXIgdG8gbG9va3VwIHRoZSBjb2RlYmxvY2sgZnJvbSBhbiBh
ZGRyZXNzIGluIEpJVCBjb2RlCisgICAgICAgIChKU0M6OkNvZGVQcm9maWxpbmc6OmJlZ2luKToK
KyAgICAgICAgICAgIC0gZW50ZXIgYSBwcm9maWxpbmcgc2NvcGUuCisgICAgICAgIChKU0M6OkNv
ZGVQcm9maWxpbmc6OmVuZCk6CisgICAgICAgICAgICAtIGV4aXQgYSBwcm9maWxpbmcgc2NvcGUu
CisgICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGluZy5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0g
bmV3IGNsYXNzLCBpbnN0YW50aWFsZWQgZnJvbSBDb21wbGV0aW9uIHRvIGRlZmluZSBhIHByb2Zp
bGluZyBzY29wZS4KKyAgICAgICAgKiB0b29scy9Qcm9maWxlVHJlZU5vZGUuaDogQWRkZWQuCisg
ICAgICAgICAgICAtIG5ldyBjbGFzcywgdXNlZCB0byBjb25zdHJ1Y3QgYSB0cmVlIG9mIHNhbXBs
ZXMuCisgICAgICAgICogdG9vbHMvVGllcmVkTU1hcEFycmF5Lmg6IEFkZGVkLgorICAgICAgICAg
ICAgLSBuZXcgY2xhc3MsIGEgbWFsbG9jLWZyZWUgdmVjdG9yIChjYW4gYmUgdXNlZCB3aGlsZSB0
aGUgbWFpbiB0aHJlYWQgaXMgc3VzcGVuZGVkLAorICAgICAgICAgICAgICBwb3NzaWJseSBob2xk
aW5nIHRoZSBtYWxsb2MgaGVhcCBsb2NrKS4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5j
cHA6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5k
bGUpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgICAg
ICAtIEFsbG93IGFsbG9jYXRpb24gaGFuZGxlcyB0byB0cmFjayBpbmZvcm1hdGlvbiBhYm91dCB0
aGVpciBvd25lci4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5oOgorICAgICAgICAoTWV0
YUFsbG9jYXRvcik6CisgICAgICAgICAgICAtIEFsbG93IGFsbG9jYXRpb24gaGFuZGxlcyB0byB0
cmFjayBpbmZvcm1hdGlvbiBhYm91dCB0aGVpciBvd25lci4KKyAgICAgICAgKiB3dGYvTWV0YUFs
bG9jYXRvckhhbmRsZS5oOgorICAgICAgICAoTWV0YUFsbG9jYXRvckhhbmRsZSk6CisgICAgICAg
IChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Om93bmVyVUlEKToKKyAgICAgICAgICAgIC0gQWxs
b3cgYWxsb2NhdGlvbiBoYW5kbGVzIHRvIHRyYWNrIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyIG93
bmVyLgorICAgICAgICAqIHd0Zi9PU0FsbG9jYXRvci5oOgorICAgICAgICAoV1RGOjpPU0FsbG9j
YXRvcjo6cmVhbGxvY2F0ZUNvbW1pdHRlZCk6CisgICAgICAgICAgICAtIHJlYWxsb2NhdGUgYW4g
ZXhpc3RpbmcsIGNvbW1pdHRlZCBtZW1vcnkgYWxsb2NhdGlvbi4KKwogMjAxMi0wMS0yNyAgTU9S
SVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbSlNDXSBTb21lIEpT
X0VYUE9SVERBVEEgbWF5IG5vdCBiZSBuZWNlc3NhcnkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTQxNSw3ICs0
MTUsNiBAQCBfX1pOM1dURjEycmFuZG9tTnVtYmVyRXYKIF9fWk4zV1RGMTNNZXRhQWxsb2NhdG9y
MTdhZGRGcmVzaEZyZWVTcGFjZUVQdm0KIF9fWk4zV1RGMTNNZXRhQWxsb2NhdG9yMTdmcmVlRnJl
ZVNwYWNlTm9kZUVQTlMwXzEzRnJlZVNwYWNlTm9kZUUKIF9fWk4zV1RGMTNNZXRhQWxsb2NhdG9y
MThkZWJ1Z0ZyZWVTcGFjZVNpemVFdgotX19aTjNXVEYxM01ldGFBbGxvY2F0b3I4YWxsb2NhdGVF
bQogX19aTjNXVEYxM01ldGFBbGxvY2F0b3JDMkVtCiBfX1pOM1dURjEzU3RyaW5nQnVpbGRlcjEx
c2hyaW5rVG9GaXRFdgogX19aTjNXVEYxM1N0cmluZ0J1aWxkZXIxNXJlc2VydmVDYXBhY2l0eUVq
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTA2MTUwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM4Miw2ICszODIsOCBAQAogCQk4NkFFNjRBQTEzNUU1
RTFDMDA5NjMwMTIgLyogU0g0QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NkFFNjRBNzEzNUU1RTFDMDA5NjMwMTIgLyogU0g0QXNzZW1i
bGVyLmggKi87IH07CiAJCTg2QUU2QzREMTM2QTExRTQwMDk2MzAxMiAvKiBERkdGUFJJbmZvLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkFFNkM0QjEz
NkExMUU0MDA5NjMwMTIgLyogREZHRlBSSW5mby5oICovOyB9OwogCQk4NkFFNkM0RTEzNkExMUU0
MDA5NjMwMTIgLyogREZHR1BSSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODZBRTZDNEMxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0dQUkluZm8uaCAq
LzsgfTsKKwkJODZCNTgyNjcxNEQyNzk2QzAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QjU4MjJFMTREMjM3
M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgKi87IH07CisJCTg2QjU4MjY5MTREMjc5NzAw
MEE5QzMwNiAvKiBDb2RlUHJvZmlsaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg2MDNDRUYyMTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmls
aW5nLmNwcCAqLzsgfTsKIAkJODZCOTlBRTMxMTdFNTc4MTAwREY1QTkwIC8qIFN0cmluZ0J1ZmZl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZCOTlB
RTExMTdFNTc4MTAwREY1QTkwIC8qIFN0cmluZ0J1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2QkIwOUMwMTM4RTM4MUIwMDU2NzAyRiAv
KiBERkdSZXBhdGNoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2QkIwOUJFMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmNwcCAqLzsgfTsK
IAkJODZCQjA5QzExMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QkIwOUJGMTM4RTM4MUIwMDU2NzAy
RiAvKiBERkdSZXBhdGNoLmggKi87IH07CkBAIC0xMDQyLDcgKzEwNDQsNyBAQAogCQkxQTA4Mjc3
ODE0MjE2OEQ3MDA5MENDQUMgLyogQmluYXJ5U2VtYXBob3JlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEJpbmFyeVNlbWFwaG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQUE5RTU1MDE0OTgwOTM1MDAwMDFBOEEgLyogRnVuY3Rpb25hbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdW5jdGlvbmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFDOTA1MTQyMEJBOUU4QTcwMDgxRTlEMCAvKiBWZXJzaW9uLnhjY29uZmln
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFZlcnNpb24ueGNjb25maWc7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFDOTA1MTQzMEJBOUU4QTcwMDgxRTlEMCAvKiBKYXZh
U2NyaXB0Q29yZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IG5hbWUgPSBKYXZh
U2NyaXB0Q29yZS54Y2NvbmZpZzsgcGF0aCA9IC4uL0NvbmZpZ3VyYXRpb25zL0phdmFTY3JpcHRD
b3JlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzkwNTE0MzBCQTlF
OEE3MDA4MUU5RDAgLyogSmF2YVNjcmlwdENvcmUueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lnhj
Y29uZmlnOyBwYXRoID0gSmF2YVNjcmlwdENvcmUueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFDOTA1MTQ0MEJBOUU4QTcwMDgxRTlEMCAvKiBEZWJ1Z1JlbGVhc2UueGNj
b25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gRGVidWdSZWxlYXNlLnhjY29u
ZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzkwNTE0NTBCQTlFOEE3MDA4MUU5
RDAgLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBCYXNl
LnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0FBOEI0QTBEMzJDMzlB
MDA0MUJDRkYgLyogSmF2YVNjcmlwdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKYXZhU2NyaXB0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTM4LDYgKzEx
NDAsOCBAQAogCQk4NjAxNjFFMDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODYuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYwMTYxRTEwRjNBODNDMTAwRjg0NzEwIC8q
IE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2
MDE2MUUyMEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NjAzQ0VGMjE0Qzc1NDY0MDBBRTU5RTMgLyog
Q29kZVByb2ZpbGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBD
b2RlUHJvZmlsaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODYwM0NFRjMx
NEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29kZVByb2ZpbGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NjA0RjRGMjE0M0E2QzQ0MDBCMjk1RjUgLyogQ2hhbmdlTG9nICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IENoYW5nZUxvZzsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYwNEY1MDMxNDNDRTFDMTAwQjI5NUY1IC8q
IEpTR2xvYmFsVGhpcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dsb2Jh
bFRoaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYyNkJFQ0UxMTkyOEUzOTAw
NzgyRkFCIC8qIFN0cmluZ1N0YXRpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gU3RyaW5nU3RhdGljcy5jcHA7IHBhdGggPSB0ZXh0L1N0cmluZ1N0YXRpY3MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTE4NSw2ICsxMTg5LDEwIEBACiAJCTg2
QUU2NEE3MTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU0g0QXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg2QUU2QzRCMTM2QTExRTQwMDk2MzAxMiAvKiBERkdGUFJJbmZvLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ZQUkluZm8uaDsgcGF0aCA9IGRmZy9ERkdGUFJJ
bmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QUU2QzRDMTM2QTExRTQwMDk2
MzAxMiAvKiBERkdHUFJJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0dQUkluZm8uaDsgcGF0aCA9IGRmZy9ERkdHUFJJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTg2QjU4MjJDMTREMjJGNUYwMEE5QzMwNiAvKiBQcm9maWxlVHJlZU5vZGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvZmlsZVRyZWVOb2RlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2QjU4MjJFMTREMjM3M0IwMEE5QzMwNiAvKiBDb2Rl
UHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlUHJv
ZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2QjU4MjJGMTREMjM3M0Iw
MEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb2RlUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkI1ODI2QTE0
RDM1RDUxMDBBOUMzMDYgLyogVGllcmVkTU1hcEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRpZXJlZE1NYXBBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4NkI5OUFFMTExN0U1NzgxMDBERjVBOTAgLyogU3RyaW5nQnVmZmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0cmluZ0J1ZmZlci5oOyBwYXRoID0gdGV4dC9TdHJp
bmdCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZCQjA5QkUxMzhFMzgx
QjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gREZHUmVwYXRjaC5jcHA7IHBhdGggPSBkZmcvREZHUmVwYXRjaC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QkIwOUJGMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdS
ZXBhdGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1JlcGF0Y2guaDsg
cGF0aCA9IGRmZy9ERkdSZXBhdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
NjgwLDYgKzE2ODgsNyBAQAogCQkJCTk1QUI4MzFBMERBNDJDNjkwMEJDODNGMyAvKiBwcm9maWxl
ciAqLywKIAkJCQk3RUY2RTBCQjBFQjdBMUVDMDA3OUFGQUYgLyogcnVudGltZSAqLywKIAkJCQkx
NDEyMTEwMDBBNDg3NzI2MDA0ODAyNTUgLyogdGVzdHMgKi8sCisJCQkJODYwM0NFRjAxNEM3NTNF
RjAwQUU1OUUzIC8qIHRvb2xzICovLAogCQkJCTY1MTYyRUYxMDhFNkEyMUMwMDc1NTZDRCAvKiB3
dGYgKi8sCiAJCQkJODZFQUM0OEMwRjkzRThCOTAwOEVDOTQ4IC8qIHlhcnIgKi8sCiAJCQkJMUM5
MDUxM0UwQkE5RTg4MzAwODFFOUQwIC8qIENvbmZpZ3VyYXRpb25zICovLApAQCAtMTgyNiw3ICsx
ODM1LDYgQEAKIAkJCQk4NjVGNDA4NzEwRTdENTYzMDA5NDczNjEgLyogQVBJU2hpbXMuaCAqLywK
IAkJCQkxQ0FBOEI0QTBEMzJDMzlBMDA0MUJDRkYgLyogSmF2YVNjcmlwdC5oICovLAogCQkJCTFD
QUE4QjRCMEQzMkMzOUEwMDQxQkNGRiAvKiBKYXZhU2NyaXB0Q29yZS5oICovLAotCQkJCTFDOTA1
MTQzMEJBOUU4QTcwMDgxRTlEMCAvKiBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZyAqLywKIAkJCQlC
QzA4OTRENTBGQUZCQTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovLAogCQkJ
CUJDMDg5NEQ2MEZBRkJBMkQwMDAwMTg2NSAvKiBKU0FQSVZhbHVlV3JhcHBlci5oICovLAogCQkJ
CTE0MjEzNTlBMEE2NzdGNEYwMEE4MTk1RSAvKiBKU0Jhc2UuY3BwICovLApAQCAtMTkxNiw2ICsx
OTI0LDcgQEAKIAkJCQkxQzkwNTE0NDBCQTlFOEE3MDA4MUU5RDAgLyogRGVidWdSZWxlYXNlLnhj
Y29uZmlnICovLAogCQkJCTQ0OTA5N0VFMEY4RjgxQjUwMDc2QTMyNyAvKiBGZWF0dXJlRGVmaW5l
cy54Y2NvbmZpZyAqLywKIAkJCQk1REFGRDZDQjE0NkI2ODYzMDBGQkVGQjQgLyogSlNDLnhjY29u
ZmlnICovLAorCQkJCTFDOTA1MTQzMEJBOUU4QTcwMDgxRTlEMCAvKiBKYXZhU2NyaXB0Q29yZS54
Y2NvbmZpZyAqLywKIAkJCQlCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVGVzdEFQSS54Y2Nv
bmZpZyAqLywKIAkJCQk1REFGRDZDQzE0NkI2OEI5MDBGQkVGQjQgLyogVGVzdFJlZ0V4cC54Y2Nv
bmZpZyAqLywKIAkJCQkxQzkwNTE0MjBCQTlFOEE3MDA4MUU5RDAgLyogVmVyc2lvbi54Y2NvbmZp
ZyAqLywKQEAgLTIzNjUsNiArMjM3NCwxOSBAQAogCQkJcGF0aCA9IHJ1bnRpbWU7CiAJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk4NjAzQ0VGMDE0Qzc1M0VGMDBBRTU5RTMgLyog
dG9vbHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTg2
QjU4MjJFMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgKi8sCisJCQkJODZCNTgy
MkYxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmggKi8sCisJCQkJODYwM0NFRjIxNEM3
NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcuY3BwICovLAorCQkJCTg2MDNDRUYzMTRDNzU0
NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmggKi8sCisJCQkJODZCNTgyMkMxNEQyMkY1RjAw
QTlDMzA2IC8qIFByb2ZpbGVUcmVlTm9kZS5oICovLAorCQkJCTg2QjU4MjZBMTREMzVENTEwMEE5
QzMwNiAvKiBUaWVyZWRNTWFwQXJyYXkuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gdG9vbHM7CisJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk4NjU2NTczRTExNUJFMzUyMDAyOTFG
NDAgLyogdGV4dCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBA
IC0zNjQwLDYgKzM2NjIsOCBAQAogCQkJCTBGOTMzMkExMTRDQTdERDEwMDg1RjNDNiAvKiBNZXRo
b2RDYWxsTGlua1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzJBMzE0Q0E3REQ3
MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU1RjBG
NDE0RDEwNjM5MDBBQzc2NDkgLyogQWJzdHJhY3RQQy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4
NkI1ODI2NzE0RDI3OTZDMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJODZCNTgyNjkxNEQyNzk3MDAwQTlDMzA2IC8qIENvZGVQcm9maWxpbmcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NTYsNiArMTQ1Niw3IEBAIENv
ZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAsIG1fc3BlY3VsYXRp
dmVGYWlsQ291bnRlcigwKQogICAgICwgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoMCkKICAg
ICAsIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoMCkKKyAgICAsIG1fY2FuQ29tcGlsZVdp
dGhERkdTdGF0ZShDb21waWxlV2l0aERGR1Vuc2V0KQogewogICAgIHNldE51bVBhcmFtZXRlcnMo
b3RoZXIubnVtUGFyYW1ldGVycygpKTsKICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CkBAIC0y
MTY0LDE3ICsyMTY1LDE3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkNvZGVCbG9jazo6Y29tcGlsZU9w
dGkKICAgICByZXR1cm4gZXJyb3I7CiB9CiAKLWJvb2wgUHJvZ3JhbUNvZGVCbG9jazo6Y2FuQ29t
cGlsZVdpdGhERkcoKQorYm9vbCBQcm9ncmFtQ29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERGR0lu
dGVybmFsKCkKIHsKICAgICByZXR1cm4gREZHOjpjYW5Db21waWxlUHJvZ3JhbSh0aGlzKTsKIH0K
IAotYm9vbCBFdmFsQ29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERGRygpCitib29sIEV2YWxDb2Rl
QmxvY2s6OmNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKQogewogICAgIHJldHVybiBERkc6OmNh
bkNvbXBpbGVFdmFsKHRoaXMpOwogfQogCi1ib29sIEZ1bmN0aW9uQ29kZUJsb2NrOjpjYW5Db21w
aWxlV2l0aERGRygpCitib29sIEZ1bmN0aW9uQ29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERGR0lu
dGVybmFsKCkKIHsKICAgICBpZiAobV9pc0NvbnN0cnVjdG9yKQogICAgICAgICByZXR1cm4gREZH
OjpjYW5Db21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QodGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxMDYxNTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4OCw3ICszODgsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgSlNP
YmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKSA9IDA7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpID0gMDsKICAgICAgICAgdmlydHVhbCBD
b2RlQmxvY2sqIHJlcGxhY2VtZW50KCkgPSAwOwotICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29t
cGlsZVdpdGhERkcoKSA9IDA7CisKKyAgICAgICAgZW51bSBDb21waWxlV2l0aERGR1N0YXRlIHsK
KyAgICAgICAgICAgIENvbXBpbGVXaXRoREZHRmFsc2UsCisgICAgICAgICAgICBDb21waWxlV2l0
aERGR1RydWUsCisgICAgICAgICAgICBDb21waWxlV2l0aERGR1Vuc2V0CisgICAgICAgIH07CisK
KyAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKSA9IDA7Cisg
ICAgICAgIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKQorICAgICAgICB7CisgICAgICAgICAgICBi
b29sIHJlc3VsdCA9IGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKTsKKyAgICAgICAgICAgIG1f
Y2FuQ29tcGlsZVdpdGhERkdTdGF0ZSA9IHJlc3VsdCA/IENvbXBpbGVXaXRoREZHVHJ1ZSA6IENv
bXBpbGVXaXRoREZHRmFsc2U7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9
CisgICAgICAgIENvbXBpbGVXaXRoREZHU3RhdGUgY2FuQ29tcGlsZVdpdGhERkdTdGF0ZSgpIHsg
cmV0dXJuIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0ZTsgfQorCiAgICAgICAgIGJvb2wgaGFzT3B0
aW1pemVkUmVwbGFjZW1lbnQoKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoZ2V0SklU
VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKQEAgLTExODcsNiArMTIwMiw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBmcmllbmQgdm9pZCBXVEY6OmRlbGV0ZU93bmVkUHRyPFJh
cmVEYXRhPihSYXJlRGF0YSopOwogI2VuZGlmCiAgICAgICAgIE93blB0cjxSYXJlRGF0YT4gbV9y
YXJlRGF0YTsKKyAgICAgICAgQ29tcGlsZVdpdGhERkdTdGF0ZSBtX2NhbkNvbXBpbGVXaXRoREZH
U3RhdGU7CiAgICAgfTsKIAogICAgIC8vIFByb2dyYW0gY29kZSBpcyBub3QgbWFya2VkIGJ5IGFu
eSBmdW5jdGlvbiwgc28gd2UgbWFrZSB0aGUgZ2xvYmFsIG9iamVjdApAQCAtMTIyNiw3ICsxMjQy
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVP
cHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKICAgICAgICAgdmlydHVhbCB2
b2lkIGpldHRpc29uKCk7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgp
OwotICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKTsKKyAgICAgICAgdmly
dHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKTsKICNlbmRpZgogICAgIH07CiAK
QEAgLTEyNjAsNyArMTI3Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIEpT
T2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpOwogICAgICAgICB2aXJ0dWFsIENvZGVCbG9j
ayogcmVwbGFjZW1lbnQoKTsKLSAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZH
KCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGR0ludGVybmFsKCk7CiAj
ZW5kaWYKIAogICAgIHByaXZhdGU6CkBAIC0xMjk3LDcgKzEzMTMsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUq
LCBTY29wZUNoYWluTm9kZSopOwogICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oKTsKICAg
ICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7Ci0gICAgICAgIHZpcnR1YWwg
Ym9vbCBjYW5Db21waWxlV2l0aERGRygpOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGls
ZVdpdGhERkdJbnRlcm5hbCgpOwogI2VuZGlmCiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAx
MDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiRXhlY3V0YWJs
ZUFsbG9jYXRvci5oIgogCiAjaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0RFTUFORCkK
KyNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSA8d3RmL01ldGFBbGxvY2F0b3Iu
aD4KICNpbmNsdWRlIDx3dGYvUGFnZVJlc2VydmF0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1ZNVGFn
cy5oPgpAQCAtOTMsNiArOTQsNyBAQCB2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxp
emVBbGxvCiB7CiAgICAgQVNTRVJUKCFhbGxvY2F0b3IpOwogICAgIGFsbG9jYXRvciA9IG5ldyBE
ZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yKCk7CisgICAgQ29kZVByb2ZpbGluZzo6bm90aWZ5QWxs
b2NhdG9yKGFsbG9jYXRvcik7CiB9CiAKIEV4ZWN1dGFibGVBbGxvY2F0b3I6OkV4ZWN1dGFibGVB
bGxvY2F0b3IoSlNHbG9iYWxEYXRhJikKQEAgLTExMiw5ICsxMTQsNyBAQCBib29sIEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OnVuZGVyTWVtb3J5UHJlCiAKIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9y
eUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoSlNHbG9iYWxEYXRhJiwgc2l6
ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCkKIHsKLSAgICBVTlVTRURfUEFSQU0ob3du
ZXJVSUQpOwotCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFs
bG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVt
b3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBvd25l
clVJRCk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIENSQVNIKCk7CiAgICAgcmV0dXJuIHJl
c3VsdC5yZWxlYXNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFi
bGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCShyZXZpc2lvbiAx
MDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JG
aXhlZFZNUG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1
ZGUgPHN5cy9tbWFuLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSAiQ29kZVByb2Zp
bGluZy5oIgogI2luY2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1Bh
Z2VSZXNlcnZhdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9WTVRhZ3MuaD4KQEAgLTk2LDYgKzk3LDcg
QEAgdm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplQWxsbwogewogICAgIEFTU0VS
VCghYWxsb2NhdG9yKTsKICAgICBhbGxvY2F0b3IgPSBuZXcgRml4ZWRWTVBvb2xFeGVjdXRhYmxl
QWxsb2NhdG9yKCk7CisgICAgQ29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9yKGFsbG9jYXRv
cik7CiB9CiAKIEV4ZWN1dGFibGVBbGxvY2F0b3I6OkV4ZWN1dGFibGVBbGxvY2F0b3IoSlNHbG9i
YWxEYXRhJikKQEAgLTExNiwxMiArMTE4LDEwIEBAIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6
dW5kZXJNZW1vcnlQcmUKIAogUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVj
dXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVf
dCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKG93bmVy
VUlEKTsKLQotICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxv
Y2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKKyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9y
eUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcywgb3duZXJV
SUQpOwogICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgIHJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5
KGdsb2JhbERhdGEpOwotICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJ
bkJ5dGVzKTsKKyAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRl
cywgb3duZXJVSUQpOwogICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgIENSQVNIKCk7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlz
aW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiQXJndW1lbnRzLmgiCiAj
aW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAi
Q29kZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiRGVi
dWdnZXIuaCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCkBAIC05NjgsNyArOTY5LDcg
QEAgTkVWRVJfSU5MSU5FIHZvaWQgSklUVGh1bmtzOjp0cnlDYWNoZUdldAogICAgIEpJVDo6Y29t
cGlsZUdldEJ5SWRDaGFpbihjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+Z2xvYmFsRGF0YSwgY2Fs
bEZyYW1lLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBj
b3VudCwgcHJvcGVydHlOYW1lLCBzbG90LCBvZmZzZXQsIHJldHVybkFkZHJlc3MpOwogfQogCi0j
aWYgIWRlZmluZWQoTkRFQlVHKSAmJiAhRU5BQkxFKENPREVfUFJPRklMSU5HKQorI2lmICFkZWZp
bmVkKE5ERUJVRykKIAogZXh0ZXJuICJDIiB7CiAKQEAgLTk4Niw3ICs5ODcsOCBAQCBzdHJ1Y3Qg
U3RhY2tIYWNrIHsKICAgICAgICAgOiBzdGFja0ZyYW1lKHN0YWNrRnJhbWUpCiAgICAgICAgICwg
c2F2ZWRSZXR1cm5BZGRyZXNzKCpzdGFja0ZyYW1lLnJldHVybkFkZHJlc3NTbG90KCkpCiAgICAg
ewotICAgICAgICAqc3RhY2tGcmFtZS5yZXR1cm5BZGRyZXNzU2xvdCgpID0gUmV0dXJuQWRkcmVz
c1B0cihGdW5jdGlvblB0cihqc2NHZW5lcmF0ZWROYXRpdmVDb2RlKSk7CisgICAgICAgIGlmICgh
Q29kZVByb2ZpbGluZzo6ZW5hYmxlZCgpKQorICAgICAgICAgICAgKnN0YWNrRnJhbWUucmV0dXJu
QWRkcmVzc1Nsb3QoKSA9IFJldHVybkFkZHJlc3NQdHIoRnVuY3Rpb25QdHIoanNjR2VuZXJhdGVk
TmF0aXZlQ29kZSkpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgflN0YWNrSGFjaygpIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHJl
dmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiQ29tcGxl
dGlvbi5oIgogCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiQ29kZVByb2ZpbGlu
Zy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAj
aW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKQEAgLTU1LDYgKzU2LDggQEAgSlNWYWx1ZSBldmFsdWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQwogICAgIEpTTG9jayBsb2NrKGV4ZWMpOwogICAgIEFT
U0VSVChleGVjLT5nbG9iYWxEYXRhKCkuaWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEo
KS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOwogCisgICAgQ29kZVByb2ZpbGluZyBwcm9maWxl
KHNvdXJjZSk7CisKICAgICBQcm9ncmFtRXhlY3V0YWJsZSogcHJvZ3JhbSA9IFByb2dyYW1FeGVj
dXRhYmxlOjpjcmVhdGUoZXhlYywgc291cmNlKTsKICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAg
ICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL0NvZGVQcm9maWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvQ29kZVByb2ZpbGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL0NvZGVQcm9maWxlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvZGVQcm9maWxlLmgiCisKKyNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKKyNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5o
IgorI2luY2x1ZGUgIlByb2ZpbGVUcmVlTm9kZS5oIgorI2luY2x1ZGUgIlZlY3Rvci5oIgorI2lu
Y2x1ZGUgIldURlN0cmluZy5oIgorI2luY2x1ZGUgPGN4eGFiaS5oPgorI2luY2x1ZGUgPGRsZmNu
Lmg+CisjaW5jbHVkZSA8ZXhlY2luZm8uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIE1hcCBm
cm9tIENvZGVUeXBlIGVudW0gdG8gYSBjb3JyZXNwb25kaW5nIG5hbWUuCitjb25zdCBjaGFyKiBD
b2RlUHJvZmlsZTo6c19jb2RlVHlwZU5hbWVzW0NvZGVQcm9maWxlOjpOdW1iZXJPZkNvZGVUeXBl
c10gPSB7CisgICAgIltbRW5naW5lQ29kZV1dIiwKKyAgICAiW1tHbG9iYWxUaHVua11dIiwKKyAg
ICAiW1tSZWdFeHBDb2RlXV0iLAorICAgICJbW0RGR0pJVF1dIiwKKyAgICAiW1tCYXNlbGluZU9u
bHldXSIsCisgICAgIltbQmFzZWxpbmVQcm9maWxlXV0iLAorICAgICJbW0Jhc2VsaW5lT1NSXV0i
LAorICAgICJbW0VuZ2luZUZyYW1lXV0iCit9OworCisvLyBIZWxwZXIgZnVuY3Rpb24sIGZpbmQg
dGhlIHN5bWJvbCBuYW1lIGZvciBhIHBjIGluIEpTQy4KK3N0YXRpYyBjb25zdCBjaGFyKiBzeW1i
b2xOYW1lKHZvaWQqIGFkZHJlc3MpCit7CisgICAgRGxfaW5mbyBpbmZvOworICAgIGlmICghZGxh
ZGRyKGFkZHJlc3MsICZpbmZvKSB8fCAhaW5mby5kbGlfc25hbWUpCisgICAgICAgIHJldHVybiAi
PHVua25vd24+IjsKKworICAgIGNvbnN0IGNoYXIqIG1hbmdsZWROYW1lID0gaW5mby5kbGlfc25h
bWU7CisgICAgY29uc3QgY2hhciogY3hhRGVtYW5nbGVkID0gYWJpOjpfX2N4YV9kZW1hbmdsZSht
YW5nbGVkTmFtZSwgMCwgMCwgMCk7CisgICAgcmV0dXJuIGN4YURlbWFuZ2xlZCA/IGN4YURlbWFu
Z2xlZCA6IG1hbmdsZWROYW1lOworfQorCisvLyBIZWxwZXIgZnVuY3Rpb24sIHRydW5jYXRlIHRy
YWNlcyB0byBwcnVuZSB0aGUgb3V0cHV0ICYgbWFrZSB2ZXJ5IHZlcmJvc2UgbW9kZSBhIGxpdHRs
ZSBtb3JlIHJlYWRhYmxlLgorc3RhdGljIGJvb2wgdHJ1bmNhdGVUcmFjZShjb25zdCBjaGFyKiBz
eW1ib2xOYW1lKQoreworICAgIHJldHVybiAhc3RyY21wKHN5bWJvbE5hbWUsICJKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgpIikKKyAgICAgICAgfHwgIXN0cmNtcChzeW1ib2xOYW1l
LCAiSlNDOjpQYXJzZXI8SlNDOjpMZXhlcjx1bnNpZ25lZCBjaGFyPiA+OjpwYXJzZUlubmVyKCki
KQorICAgICAgICB8fCAhc3RyY21wKHN5bWJvbE5hbWUsICJXVEY6OmZhc3RNYWxsb2ModW5zaWdu
ZWQgbG9uZykiKQorICAgICAgICB8fCAhc3RyY21wKHN5bWJvbE5hbWUsICJXVEY6OmNhbGN1bGF0
ZVVUQ09mZnNldCgpIikKKyAgICAgICAgfHwgIXN0cmNtcChzeW1ib2xOYW1lLCAiSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpIik7CisgICAgICAgIAorfQorCisvLyBF
YWNoIHRyYWNlIGNvbnNpc3RzIG9mIGEgc2VxdWVuY2Ugb2YgemVybyBvciBtb3JlICdFbmdpbmVG
cmFtZScgZW50cmllcywKKy8vIGZvbGxvd2VkIGJ5IGEgc2FtcGxlIGluIEpJVCBjb2RlLCBvciBv
bmUgb3IgbW9yZSAnRW5naW5lRnJhbWUnIGVudHJpZXMsCisvLyBmb2xsb3dlZCBieSBhICdFbmdp
bmVDb2RlJyB0ZXJtaW5hdG9yLgordm9pZCBDb2RlUHJvZmlsZTo6c2FtcGxlKHZvaWQqIHBjLCB2
b2lkKiogZnJhbWVQb2ludGVyKQoreworICAgIC8vIERpc2FsbG93IHRyYWNlcyBjb250YWluaW5n
IG9ubHkgYSAnRW5naW5lQ29kZScgdGVybWluYXRvciwgd2l0aG91dCBhbnkgJ0VuZ2luZUZyYW1l
JyBmcmFtZXMuCisgICAgaWYgKCFmcmFtZVBvaW50ZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IHdoaWxlIChmcmFtZVBvaW50ZXIpIHsKKyAgICAgICAgQ29kZVR5cGUgdHlwZTsKKyAgICAgICAg
dm9pZCogb3duZXJVSUQgPSBDb2RlUHJvZmlsaW5nOjpnZXRPd25lclVJREZvclBDKHBjKTsKKwor
ICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhpcyBzYW1wbGUgZmVsbCBpbiBKSVQgY29kZSwgYW5k
IGlmIHNvLCBmcm9tIHdoaWNoIEpJVCAmIHdoeS4KKyAgICAgICAgaWYgKCFvd25lclVJRCkKKyAg
ICAgICAgICAgIHR5cGUgPSBFbmdpbmVGcmFtZTsKKyAgICAgICAgZWxzZSBpZiAob3duZXJVSUQg
PT0gR0xPQkFMX1RIVU5LX0lEKQorICAgICAgICAgICAgdHlwZSA9IEdsb2JhbFRodW5rOworICAg
ICAgICBlbHNlIGlmIChvd25lclVJRCA9PSBSRUdFWFBfQ09ERV9JRCkKKyAgICAgICAgICAgIHR5
cGUgPSBSZWdFeHBDb2RlOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4ob3duZXJVSUQpOworICAgICAgICAg
ICAgaWYgKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkKKyAgICAg
ICAgICAgICAgICB0eXBlID0gREZHSklUOworICAgICAgICAgICAgZWxzZSBpZiAoY29kZUJsb2Nr
LT5jYW5Db21waWxlV2l0aERGR1N0YXRlKCkgPT0gQ29kZUJsb2NrOjpDb21waWxlV2l0aERGR0Zh
bHNlKQorICAgICAgICAgICAgICAgIHR5cGUgPSBCYXNlbGluZU9ubHk7CisgICAgICAgICAgICBl
bHNlIGlmIChjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkpCisgICAgICAgICAgICAgICAgdHlwZSA9
IEJhc2VsaW5lT1NSOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHR5cGUgPSBC
YXNlbGluZVByb2ZpbGU7CisgICAgICAgIH0KKworICAgICAgICAvLyBBIHNhbXBsZSBpbiBKSVQg
Y29kZSB0ZXJtaW5hdGVzIHRoZSB0cmFjZS4KKyAgICAgICAgbV9zYW1wbGVzLmFwcGVuZChDb2Rl
UmVjb3JkKHBjLCB0eXBlKSk7CisgICAgICAgIGlmICh0eXBlICE9IEVuZ2luZUZyYW1lKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIFdhbGsgdXAgdGhlIHN0YWNrLgorICAgICAg
ICBwYyA9IGZyYW1lUG9pbnRlclsxXTsKKyAgICAgICAgZnJhbWVQb2ludGVyID0gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKio+KCpmcmFtZVBvaW50ZXIpOworICAgIH0KKworICAgIC8vIElmIHdlIGdl
dCBoZXJlLCB3ZSB3YWxrZWQgdGhlIGVudGlyZSBzdGFjayB3aXRob3V0IGZpbmRpbmcgYW55IGZy
YW1lcyBvZiBKSVQgY29kZS4KKyAgICBtX3NhbXBsZXMuYXBwZW5kKENvZGVSZWNvcmQoMCwgRW5n
aW5lQ29kZSkpOworfQorCit2b2lkIENvZGVQcm9maWxlOjpyZXBvcnQoKQoreworICAgIGZwcmlu
dGYoc3Rkb3V0LCAiPENvZGVQcm9maWxpbmcgJXM6JWQ+XG4iLCBtX2ZpbGUuZGF0YSgpLCBtX2xp
bmVObyk7CisKKyAgICAvLyBIb3cgbWFueSBmcmFtZXMgb2YgQy1jb2RlIHRvIHByaW50IC0gMCwg
aWYgbm90IHZlcmJvc2UsIDEgaWYgdmVyYm9zZSwgdXAgdG8gMTAyNCBpZiB2ZXJ5IHZlcmJvc2Uu
CisgICAgdW5zaWduZWQgcmVjdXJzaW9uTGltaXQgPSBDb2RlUHJvZmlsaW5nOjpiZVZlcnlWZXJi
b3NlKCkgPyAxMDI0IDogQ29kZVByb2ZpbGluZzo6YmVWZXJib3NlKCk7CisKKyAgICBQcm9maWxl
VHJlZU5vZGUgcHJvZmlsZTsKKworICAgIC8vIFdhbGsgdGhyb3VnaCB0aGUgc2FtcGxlIGJ1ZmZl
ci4KKyAgICBzaXplX3QgdHJhY2UgPSAwOworICAgIHdoaWxlICh0cmFjZSA8IG1fc2FtcGxlcy5z
aXplKCkpIHsKKworICAgICAgICAvLyBBbGwgdHJhY2VzIGFyZSB6ZXJvIG9yIG1vcmUgJ0VuZ2lu
ZUZyYW1lJ3MsIGZvbGxvd2VkIGJ5IGEgbm9uLSdFbmdpbmVGcmFtZScuCisgICAgICAgIC8vIFNj
YW4gdG8gZmluZCB0aGUgbGFzdCBzYW1wbGUgaW4gdGhlIHRyYWNlLgorICAgICAgICBzaXplX3Qg
bGFzdEluVHJhY2UgPSB0cmFjZTsKKyAgICAgICAgd2hpbGUgKG1fc2FtcGxlc1tsYXN0SW5UcmFj
ZV0udHlwZSA9PSBFbmdpbmVGcmFtZSkKKyAgICAgICAgICAgICsrbGFzdEluVHJhY2U7CisKKyAg
ICAgICAgLy8gV2UgdXNlIHRoZSBsYXN0IHNhbXBsZSB0eXBlIHRvIGxvb2sgdXAgYSBuYW1lICh1
c2VkIGFzIGEgYnVja2V0IGluIHRoZSBwcm9maWxlcikuCisgICAgICAgIFByb2ZpbGVUcmVlTm9k
ZSogY2FsbGJhY2tzID0gcHJvZmlsZS5zYW1wbGVDaGlsZChzX2NvZGVUeXBlTmFtZXNbbV9zYW1w
bGVzW2xhc3RJblRyYWNlXS50eXBlXSk7CisKKyAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBz
YW1wbGVzIGluIEMtY29kZSwgYWRkIHVwIHRvIHJlY3Vyc2lvbkxpbWl0IG9mIHRoZW0gaW50byB0
aGUgcHJvZmlsZSB0cmVlLgorICAgICAgICBzaXplX3QgbGFzdEVuZ2luZUZyYW1lID0gbGFzdElu
VHJhY2U7CisgICAgICAgIGZvciAodW5zaWduZWQgY291bnQgPSAwOyBsYXN0RW5naW5lRnJhbWUg
PiB0cmFjZSAmJiBjb3VudCA8IHJlY3Vyc2lvbkxpbWl0OyArK2NvdW50KSB7CisgICAgICAgICAg
ICAtLWxhc3RFbmdpbmVGcmFtZTsKKyAgICAgICAgICAgIEFTU0VSVChtX3NhbXBsZXNbbGFzdEVu
Z2luZUZyYW1lXS50eXBlID09IEVuZ2luZUZyYW1lKTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIq
IG5hbWUgPSBzeW1ib2xOYW1lKG1fc2FtcGxlc1tsYXN0RW5naW5lRnJhbWVdLnBjKTsKKyAgICAg
ICAgICAgIGNhbGxiYWNrcyA9IGNhbGxiYWNrcy0+c2FtcGxlQ2hpbGQobmFtZSk7CisgICAgICAg
ICAgICBpZiAodHJ1bmNhdGVUcmFjZShuYW1lKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIE1vdmUgb24gdG8gdGhlIG5leHQgdHJhY2UuCisgICAgICAg
IHRyYWNlID0gbGFzdEluVHJhY2UgKyAxOworICAgICAgICBBU1NFUlQodHJhY2UgPD0gbV9zYW1w
bGVzLnNpemUoKSk7CisgICAgfQorCisgICAgLy8gT3V0cHV0IHRoZSBwcm9maWxlIHRyZWUuCisg
ICAgZnByaW50ZihzdGRvdXQsICJUb3RhbCBzYW1wbGVzOiAlbGxkXG4iLCBwcm9maWxlLmNoaWxk
Q291bnQoKSk7CisgICAgcHJvZmlsZS5kdW1wKCk7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9
IDAgOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkKKyAgICAgICAgbV9jaGlsZHJlbltpXS0+
cmVwb3J0KCk7CisKKyAgICBmcHJpbnRmKHN0ZG91dCwgIjwvQ29kZVByb2ZpbGluZyAlczolZD5c
biIsIG1fZmlsZS5kYXRhKCksIG1fbGluZU5vKTsKK30KKworfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIENvZGVQcm9maWxlX2gKKyNkZWZpbmUgQ29kZVByb2ZpbGVfaAorCisjaW5jbHVkZSAiQ1N0
cmluZy5oIgorI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJUaWVyZWRNTWFwQXJy
YXkuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVQcm9maWxlIHsKK3B1YmxpYzoK
KyAgICBDb2RlUHJvZmlsZShjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVQcm9maWxlKiBw
YXJlbnQpCisgICAgICAgIDogbV9maWxlKHNvdXJjZS5wcm92aWRlcigpLT51cmwoKS51dGY4KCkp
CisgICAgICAgICwgbV9saW5lTm8oc291cmNlLmZpcnN0TGluZSgpKQorICAgICAgICAsIG1fcGFy
ZW50KHBhcmVudCkKKyAgICB7CisgICAgICAgIGlmIChwYXJlbnQpCisgICAgICAgICAgICBwYXJl
bnQtPmFkZENoaWxkKHRoaXMpOworICAgIH0KKworICAgIHZvaWQgc2FtcGxlKHZvaWQqIHBjLCB2
b2lkKiogZnJhbWVQb2ludGVyKTsKKyAgICB2b2lkIHJlcG9ydCgpOworCisgICAgQ29kZVByb2Zp
bGUqIHBhcmVudCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9wYXJlbnQ7CisgICAgfQorICAg
IAorICAgIHZvaWQgYWRkQ2hpbGQoQ29kZVByb2ZpbGUqIGNoaWxkKQorICAgIHsKKyAgICAgICAg
bV9jaGlsZHJlbi5hcHBlbmQoYWRvcHRQdHIoY2hpbGQpKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgZW51bSBDb2RlVHlwZSB7CisgICAgICAgIEVuZ2luZUNvZGUsCisgICAgICAgIEdsb2JhbFRo
dW5rLAorICAgICAgICBSZWdFeHBDb2RlLAorICAgICAgICBERkdKSVQsCisgICAgICAgIEJhc2Vs
aW5lT25seSwKKyAgICAgICAgQmFzZWxpbmVQcm9maWxlLAorICAgICAgICBCYXNlbGluZU9TUiwK
KyAgICAgICAgRW5naW5lRnJhbWUsCisgICAgICAgIE51bWJlck9mQ29kZVR5cGVzCisgICAgfTsK
KyAgICBzdHJ1Y3QgQ29kZVJlY29yZCB7CisgICAgICAgIENvZGVSZWNvcmQodm9pZCogcGMsIENv
ZGVUeXBlIHR5cGUpCisgICAgICAgICAgICA6IHBjKHBjKQorICAgICAgICAgICAgLCB0eXBlKHR5
cGUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICB2b2lkKiBwYzsKKyAgICAgICAgQ29k
ZVR5cGUgdHlwZTsKKyAgICB9OworCisgICAgQ1N0cmluZyBtX2ZpbGU7CisgICAgdW5zaWduZWQg
bV9saW5lTm87CisgICAgQ29kZVByb2ZpbGUqIG1fcGFyZW50OworICAgIFZlY3RvcjwgT3duUHRy
PENvZGVQcm9maWxlPiA+IG1fY2hpbGRyZW47CisgICAgVGllcmVkTU1hcEFycmF5PENvZGVSZWNv
cmQ+IG1fc2FtcGxlczsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzX2NvZGVUeXBlTmFtZXNb
TnVtYmVyT2ZDb2RlVHlwZXNdOworfTsKKworfQorCisjZW5kaWYgLy8gQ29kZVByb2ZpbGVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxp
bmcuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQ29kZVByb2ZpbGluZy5oIgorCisjaW5jbHVkZSAiQ29kZVByb2ZpbGUuaCIKKyNpbmNsdWRl
ICJNZXRhQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAic2lnbmFsLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCit2b2xhdGlsZSBDb2RlUHJvZmlsZSogQ29kZVByb2ZpbGluZzo6c19wcm9maWxlU3RhY2sg
PSAwOworQ29kZVByb2ZpbGluZzo6TW9kZSBDb2RlUHJvZmlsaW5nOjpzX21vZGUgPSBDb2RlUHJv
ZmlsaW5nOjpEaXNhYmxlZDsKK1dURjo6TWV0YUFsbG9jYXRvclRyYWNrZXIqIENvZGVQcm9maWxp
bmc6OnNfdHJhY2tlciA9IDA7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBzdGFydCAmIHN0b3Ag
dGhlIHRpbWVyLgorLy8gUHJlc2VudGx5IHdlJ3JlIHVzaW5nIHRoZSB3YWxsLWNsb2NrIHRpbWVy
LCBzaW5jZSB0aGlzIHNlZW1zIHRvIGdpdmUgdGhlIGJlc3QgcmVzdWx0cy4KK3N0YXRpYyB2b2lk
IHNldFByb2ZpbGVUaW1lcih1bnNpZ25lZCB1c2VjKQoreworICAgIGl0aW1lcnZhbCB0aW1lcjsK
KyAgICB0aW1lci5pdF92YWx1ZS50dl9zZWMgPSAwOworICAgIHRpbWVyLml0X3ZhbHVlLnR2X3Vz
ZWMgPSB1c2VjOworICAgIHRpbWVyLml0X2ludGVydmFsLnR2X3NlYyA9IDA7CisgICAgdGltZXIu
aXRfaW50ZXJ2YWwudHZfdXNlYyA9IHVzZWM7CisgICAgc2V0aXRpbWVyKElUSU1FUl9SRUFMLCAm
dGltZXIsIDApOworfQorCisvLyBDYWxsYmFjayB0cmlnZ2VyZWQgd2hlbiB0aGUgdGltZXIgaXMg
ZmlyZWQuCit2b2lkIENvZGVQcm9maWxpbmc6OnByb2ZpbGluZ1RpbWVyKGludCwgc2lnaW5mb190
Kiwgdm9pZCogdWFwKQoreworICAgIG1jb250ZXh0X3QgY29udGV4dCA9IHN0YXRpY19jYXN0PHVj
b250ZXh0X3QqPih1YXApLT51Y19tY29udGV4dDsKKworICAgIENvZGVQcm9maWxlKiBwcm9maWxl
U3RhY2sgPSAoQ29kZVByb2ZpbGUqKXNfcHJvZmlsZVN0YWNrOworICAgIGlmIChwcm9maWxlU3Rh
Y2spCisgICAgICAgIHByb2ZpbGVTdGFjay0+c2FtcGxlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGNvbnRleHQtPl9fc3MuX19yaXApLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oY29udGV4dC0+
X19zcy5fX3JicCkpOworfQorCit2b2lkIENvZGVQcm9maWxpbmc6Om5vdGlmeUFsbG9jYXRvcihX
VEY6Ok1ldGFBbGxvY2F0b3IqIGFsbG9jYXRvcikKK3sKKyAgICAvLyBDaGVjayBmb3IgSlNDX0NP
REVfUFJPRklMSU5HLgorICAgIGNvbnN0IGNoYXIqIGNvZGVQcm9maWxpbmdNb2RlID0gZ2V0ZW52
KCJKU0NfQ09ERV9QUk9GSUxJTkciKTsKKyAgICBpZiAoIWNvZGVQcm9maWxpbmdNb2RlKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBDaGVjayBmb3IgYSB2YWxpZCBtb2RlLCBjdXJyZW50bHkg
IjEiLCAiMiIsIG9yICIzIi4KKyAgICBpZiAoIWNvZGVQcm9maWxpbmdNb2RlWzBdIHx8IGNvZGVQ
cm9maWxpbmdNb2RlWzFdKQorICAgICAgICByZXR1cm47CisgICAgc3dpdGNoICgqY29kZVByb2Zp
bGluZ01vZGUpIHsKKyAgICBjYXNlICcxJzoKKyAgICAgICAgc19tb2RlID0gRW5hYmxlZDsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSAnMic6CisgICAgICAgIHNfbW9kZSA9IFZlcmJvc2U7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgJzMnOgorICAgICAgICBzX21vZGUgPSBWZXJ5VmVyYm9z
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEFTU0VSVChlbmFibGVkKCkpOworICAgIEFTU0VSVCghc190cmFja2VyKTsKKyAgICBz
X3RyYWNrZXIgPSBuZXcgV1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tlcigpOworICAgIGFsbG9jYXRv
ci0+dHJhY2tBbGxvY2F0aW9ucyhzX3RyYWNrZXIpOworfQorCit2b2lkKiBDb2RlUHJvZmlsaW5n
OjpnZXRPd25lclVJREZvclBDKHZvaWQqIGFkZHJlc3MpCit7CisgICAgaWYgKCFzX3RyYWNrZXIp
CisgICAgICAgIHJldHVybiAwOworICAgIFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxl
ID0gc190cmFja2VyLT5maW5kKGFkZHJlc3MpOworICAgIGlmICghaGFuZGxlKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gaGFuZGxlLT5vd25lclVJRCgpOworfQorCit2b2lkIENvZGVQ
cm9maWxpbmc6OmJlZ2luKGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKK3sKKyAgICAvLyBQdXNo
IGEgbmV3IENvZGVQcm9maWxlIG9udG8gdGhlIHN0YWNrIGZvciBlYWNoIHNjcmlwdCBlbmNvdW50
ZXJlZC4KKyAgICBDb2RlUHJvZmlsZSogcHJvZmlsZVN0YWNrID0gKENvZGVQcm9maWxlKilzX3By
b2ZpbGVTdGFjazsKKyAgICBib29sIGFscmVhZHlQcm9maWxpbmcgPSBwcm9maWxlU3RhY2s7Cisg
ICAgc19wcm9maWxlU3RhY2sgPSBwcm9maWxlU3RhY2sgPSBuZXcgQ29kZVByb2ZpbGUoc291cmNl
LCBwcm9maWxlU3RhY2spOworCisgICAgLy8gSXMgdGhlIHByb2ZpbGVyIGFscmVhZHkgcnVubmlu
ZyAtIGlmIHNvLCB0aGUgdGltZXIgd2lsbCBhbHJlYWR5IGJlIHNldCB1cC4KKyAgICBpZiAoYWxy
ZWFkeVByb2ZpbGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gUmVnc2l0ZXIgYSBzaWdu
YWwgaGFuZGxlciAmIGl0aW1lci4KKyAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKKyAgICBh
Y3Rpb24uc2Ffc2lnYWN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkICgqKShpbnQsIHN0cnVj
dCBfX3NpZ2luZm8gKiwgdm9pZCAqKT4ocHJvZmlsaW5nVGltZXIpOworICAgIHNpZ2ZpbGxzZXQo
JmFjdGlvbi5zYV9tYXNrKTsKKyAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOworICAg
IHNpZ2FjdGlvbihTSUdBTFJNLCAmYWN0aW9uLCAwKTsKKyAgICBzZXRQcm9maWxlVGltZXIoMTAw
KTsKK30KKwordm9pZCBDb2RlUHJvZmlsaW5nOjplbmQoKQoreworICAgIC8vIFBvcCB0aGUgY3Vy
cmVudCBwcm9maWxlciBvZmYgdGhlIHN0YWNrLgorICAgIENvZGVQcm9maWxlKiBjdXJyZW50ID0g
KENvZGVQcm9maWxlKilzX3Byb2ZpbGVTdGFjazsKKyAgICBBU1NFUlQoY3VycmVudCk7CisgICAg
c19wcm9maWxlU3RhY2sgPSBjdXJyZW50LT5wYXJlbnQoKTsKKworICAgIC8vIElzIHRoaXMgdGhl
IG91dGVybW9zdCBzY3JpcHQgYmVpbmcgcHJvZmlsZWQ/IC0gaWYgbm90LCBqdXN0IHJldHVybi4K
KyAgICAvLyBXZSBwZXJmb3JtIGFsbCBvdXRwdXQgb2YgcHJvZmlsZXMgcmVjdXJzaXZlbHkgZnJv
bSB0aGUgb3V0ZXJtb3N0IHNjcmlwdCwKKyAgICAvLyB0byBtaW5pbWl6ZSBwcm9maWxpbmcgb3Zl
cmhlYWQgZnJvbSBza2V3aW5nIHJlc3VsdHMuCisgICAgaWYgKHNfcHJvZmlsZVN0YWNrKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBTdG9wIHByb2ZpbGluZworICAgIHNldFByb2ZpbGVUaW1l
cigwKTsKKworICAgIGN1cnJlbnQtPnJlcG9ydCgpOworICAgIGRlbGV0ZSBjdXJyZW50OworfQor
Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGlu
Zy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ29kZVByb2ZpbGluZ19oCisjZGVmaW5l
IENvZGVQcm9maWxpbmdfaAorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgTWV0YUFsbG9jYXRv
cjsKK2NsYXNzIE1ldGFBbGxvY2F0b3JUcmFja2VyOworCit9CisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBDb2RlUHJvZmlsZTsKK2NsYXNzIFNvdXJjZUNvZGU7CisKK2NsYXNzIENvZGVQcm9m
aWxpbmcgeworICAgIGVudW0gTW9kZSB7CisgICAgICAgIERpc2FibGVkLAorICAgICAgICBFbmFi
bGVkLAorICAgICAgICBWZXJib3NlLAorICAgICAgICBWZXJ5VmVyYm9zZQorICAgIH07CisKK3B1
YmxpYzoKKyAgICBDb2RlUHJvZmlsaW5nKGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKKyAgICAg
ICAgOiBtX2FjdGl2ZShlbmFibGVkKCkpCisgICAgeworICAgICAgICBpZiAobV9hY3RpdmUpCisg
ICAgICAgICAgICBiZWdpbihzb3VyY2UpOworICAgIH0KKworICAgIH5Db2RlUHJvZmlsaW5nKCkK
KyAgICB7CisgICAgICAgIGlmIChtX2FjdGl2ZSkKKyAgICAgICAgICAgIGVuZCgpOworICAgIH0K
KworICAgIHN0YXRpYyBib29sIGVuYWJsZWQoKSB7IHJldHVybiBzX21vZGUgIT0gRGlzYWJsZWQ7
IH0KKyAgICBzdGF0aWMgYm9vbCBiZVZlcmJvc2UoKSB7IHJldHVybiBzX21vZGUgPj0gVmVyYm9z
ZTsgfQorICAgIHN0YXRpYyBib29sIGJlVmVyeVZlcmJvc2UoKSB7IHJldHVybiBzX21vZGUgPj0g
VmVyeVZlcmJvc2U7IH0KKworICAgIHN0YXRpYyB2b2lkIG5vdGlmeUFsbG9jYXRvcihXVEY6Ok1l
dGFBbGxvY2F0b3IqKTsKKyAgICBzdGF0aWMgdm9pZCogZ2V0T3duZXJVSURGb3JQQyh2b2lkKik7
CisKK3ByaXZhdGU6CisgICAgdm9pZCBiZWdpbihjb25zdCBTb3VyY2VDb2RlJik7CisgICAgdm9p
ZCBlbmQoKTsKKworICAgIGJvb2wgbV9hY3RpdmU7CisKKyAgICBzdGF0aWMgdm9pZCBwcm9maWxp
bmdUaW1lcihpbnQsIHNpZ2luZm9fdCosIHZvaWQqKTsKKworICAgIHN0YXRpYyBNb2RlIHNfbW9k
ZTsKKyAgICBzdGF0aWMgV1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tlciogc190cmFja2VyOworICAg
IHN0YXRpYyB2b2xhdGlsZSBDb2RlUHJvZmlsZSogc19wcm9maWxlU3RhY2s7Cit9OworCit9CisK
KyNlbmRpZiAvLyBDb2RlUHJvZmlsaW5nX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBQcm9maWxlVHJlZU5vZGVfaAorI2RlZmluZSBQcm9maWxlVHJlZU5vZGVfaAorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgUHJvZmlsZVRyZWVOb2RlIHsKKyAgICB0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBQcm9maWxlVHJlZU5vZGU+IE1hcDsKKyAgICB0eXBlZGVmIHN0ZDo6cGFp
cjxTdHJpbmcsIFByb2ZpbGVUcmVlTm9kZT4gTWFwRW50cnk7CisKK3B1YmxpYzoKKyAgICBQcm9m
aWxlVHJlZU5vZGUoKQorICAgICAgICA6IG1fY291bnQoMCkKKyAgICAgICAgLCBtX2NoaWxkcmVu
KDApCisgICAgeworICAgIH0KKworICAgIH5Qcm9maWxlVHJlZU5vZGUoKQorICAgIHsKKyAgICAg
ICAgZGVsZXRlIG1fY2hpbGRyZW47CisgICAgfQorCisgICAgUHJvZmlsZVRyZWVOb2RlKiBzYW1w
bGVDaGlsZChjb25zdCBjaGFyKiBuYW1lKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NoaWxkcmVu
KQorICAgICAgICAgICAgbV9jaGlsZHJlbiA9IG5ldyBNYXAoKTsKKyAgICAKKyAgICAgICAgUHJv
ZmlsZVRyZWVOb2RlIG5ld0VudHJ5OworICAgICAgICBwYWlyPE1hcDo6aXRlcmF0b3IsIGJvb2w+
IHJlc3VsdCA9IG1fY2hpbGRyZW4tPmFkZChTdHJpbmcobmFtZSksIG5ld0VudHJ5KTsKKyAgICAg
ICAgUHJvZmlsZVRyZWVOb2RlKiBjaGlsZEluTWFwID0gJnJlc3VsdC5maXJzdC0+c2Vjb25kOwor
ICAgICAgICArK2NoaWxkSW5NYXAtPm1fY291bnQ7CisgICAgICAgIHJldHVybiBjaGlsZEluTWFw
OworICAgIH0KKworICAgIHZvaWQgZHVtcCgpCisgICAgeworICAgICAgICBkdW1wSW50ZXJuYWwo
MCk7CisgICAgfQorCisgICAgdWludDY0X3QgY291bnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fY291bnQ7CisgICAgfQorCisgICAgdWludDY0X3QgY2hpbGRDb3VudCgpCisgICAgeworICAg
ICAgICBpZiAoIW1fY2hpbGRyZW4pCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgdWlu
dDY0X3QgY2hpbGRDb3VudCA9IDA7CisgICAgICAgIGZvciAoTWFwOjppdGVyYXRvciBpdCA9IG1f
Y2hpbGRyZW4tPmJlZ2luKCk7IGl0ICE9IG1fY2hpbGRyZW4tPmVuZCgpOyArK2l0KQorICAgICAg
ICAgICAgY2hpbGRDb3VudCArPSBpdC0+c2Vjb25kLmNvdW50KCk7CisgICAgICAgIHJldHVybiBj
aGlsZENvdW50OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBkdW1wSW50ZXJuYWwo
dW5zaWduZWQgaW5kZW50KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NoaWxkcmVuKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIENvcHkgcG9pbnRlcnMgdG8gYWxsIGNoaWxkcmVu
IGludG8gYSB2ZWN0b3IsIGFuZCBzb3J0IHRoZSB2ZWN0b3IgYnkgc2FtcGxlIGNvdW50LgorICAg
ICAgICBWZWN0b3I8TWFwRW50cnkqPiBlbnRyaWVzOworICAgICAgICBmb3IgKE1hcDo6aXRlcmF0
b3IgaXQgPSBtX2NoaWxkcmVuLT5iZWdpbigpOyBpdCAhPSBtX2NoaWxkcmVuLT5lbmQoKTsgKytp
dCkKKyAgICAgICAgICAgIGVudHJpZXMuYXBwZW5kKCYqaXQpOworICAgICAgICBxc29ydChlbnRy
aWVzLmJlZ2luKCksIGVudHJpZXMuc2l6ZSgpLCBzaXplb2YoTWFwRW50cnkqKSwgY29tcGFyZUVu
dHJpZXMpOworCisgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgY2hpbGRyZW4gaW4gc2FtcGxl
LWZyZXF1ZW5jeSBvcmRlci4KKyAgICAgICAgZm9yIChzaXplX3QgZSA9IDA7IGUgPCBlbnRyaWVz
LnNpemUoKTsgKytlKSB7CisgICAgICAgICAgICBNYXBFbnRyeSogZW50cnkgPSBlbnRyaWVzW2Vd
OworCisgICAgICAgICAgICAvLyBQcmludCB0aGUgbnVtYmVyIG9mIHNhbXBsZXMsIHRoZSBuYW1l
IG9mIHRoaXMgbm9kZSwgYW5kIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0aGF0IGFyZSBzdGFjay10
b3AKKyAgICAgICAgICAgIC8vIGluIHRoaXMgbm9kZSAoc2FtcGxlcyBkaXJlY3RseSB3aXRoaW4g
dGhpcyBub2RlLCBleGNsdWRpbmcgc2FtcGxlcyBpbiBjaGlsZHJlbi4KKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmRlbnQ7ICsraSkKKyAgICAgICAgICAgICAgICBmcHJp
bnRmKHN0ZG91dCwgIiAgICAiKTsKKyAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiJSA4bGxk
OiAlcyAoJWxsZCBzdGFjayB0b3ApXG4iLAorICAgICAgICAgICAgICAgIGVudHJ5LT5zZWNvbmQu
Y291bnQoKSwKKyAgICAgICAgICAgICAgICBlbnRyeS0+Zmlyc3QudXRmOCgpLmRhdGEoKSwKKyAg
ICAgICAgICAgICAgICBlbnRyeS0+c2Vjb25kLmNvdW50KCkgLSBlbnRyeS0+c2Vjb25kLmNoaWxk
Q291bnQoKSk7CisKKyAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGR1bXAgdGhlIGNoaWxkIG5v
ZGVzLgorICAgICAgICAgICAgZW50cnktPnNlY29uZC5kdW1wSW50ZXJuYWwoaW5kZW50ICsgMSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGNvbXBhcmVFbnRyaWVzKGNvbnN0
IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCisgICAgeworICAgICAgICB1aW50NjRfdCBkYSA9ICgq
c3RhdGljX2Nhc3Q8TWFwRW50cnkqIGNvbnN0ICo+KGEpKS0+c2Vjb25kLmNvdW50KCk7CisgICAg
ICAgIHVpbnQ2NF90IGRiID0gKCpzdGF0aWNfY2FzdDxNYXBFbnRyeSogY29uc3QgKj4oYikpLT5z
ZWNvbmQuY291bnQoKTsKKyAgICAgICAgcmV0dXJuIChkYSA8IGRiKSAtIChkYSA+IGRiKTsKKyAg
ICB9CisKKyAgICB1aW50NjRfdCBtX2NvdW50OworICAgIE1hcCogbV9jaGlsZHJlbjsKK307CisK
K30KKworI2VuZGlmIC8vIFByb2ZpbGVUcmVlTm9kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90b29scy9UaWVyZWRNTWFwQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvVGllcmVkTU1hcEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVGllcmVkTU1hcEFycmF5LmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgVGllcmVkTU1hcEFycmF5X2gKKyNkZWZpbmUgVGllcmVkTU1hcEFycmF5
X2gKKworI2luY2x1ZGUgIk9TQWxsb2NhdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBU
aGlzIGNsYXNzIGltcGxlbWVudHMgYSBzaW1wbGUgYXJyYXkgY2xhc3MgdGhhdCBjYW4gYmUgZ3Jv
d24gYnkgYXBwZW5kaW5nIGl0ZW1zIHRvIHRoZSBlbmQuCisvLyBUaGlzIGNsYXNzIGlzIGltcGxl
bWVudGVkIHB1cmVseSBpbiB0ZXJtcyBvZiBzeXN0ZW0gYWxsb2NhdGlvbnMsIHdpdGggbm8gbWFs
bG9jL2ZyZWUsIHNvIHRoYXQKKy8vIGl0IGNhbiBzYWZlbHkgYmUgdXNlZCBmcm9tIGEgc2Vjb25k
YXJ5IHRocmVhZCB3aGlsc3QgdGhlIG1haW4gdGhyYWQgaXMgcGF1c2VkIChwb3RlbnRpYWxseQor
Ly8gaG9sZGluZyB0aGUgZmFzdCBtYWxsb2MgaGVhcCBsb2NrKS4KK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitjbGFzcyBUaWVyZWRNTWFwQXJyYXkgeworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgZW50
cmllc1BlckJsb2NrID0gNDA5NjsKKworcHVibGljOgorICAgIFRpZXJlZE1NYXBBcnJheSgpCisg
ICAgICAgIDogbV9kaXJlY3RvcnlDb3VudCg0MDk2KQorICAgICAgICAsIG1fZGlyZWN0b3J5KHN0
YXRpY19jYXN0PFQqKj4oT1NBbGxvY2F0b3I6OnJlc2VydmVBbmRDb21taXQobV9kaXJlY3RvcnlD
b3VudCAqIHNpemVvZihUKikpKSkKKyAgICAgICAgLCBtX3NpemUoMCkKKyAgICB7CisgICAgICAg
IGZvciAoc2l6ZV90IGJsb2NrID0gMDsgYmxvY2sgPCBtX2RpcmVjdG9yeUNvdW50OyArK2Jsb2Nr
KQorICAgICAgICAgICAgbV9kaXJlY3RvcnlbYmxvY2tdID0gMDsKKyAgICB9CisKKyAgICB+VGll
cmVkTU1hcEFycmF5KCkKKyAgICB7CisgICAgICAgIHNpemVfdCB1c2VkQ291bnQgPSAobV9zaXpl
ICsgKGVudHJpZXNQZXJCbG9jayAtIDEpKSAvIGVudHJpZXNQZXJCbG9jazsKKyAgICAgICAgQVNT
RVJUKHVzZWRDb3VudCA9PSBtX2RpcmVjdG9yeUNvdW50IHx8ICFtX2RpcmVjdG9yeVt1c2VkQ291
bnRdKTsKKworICAgICAgICBmb3IgKHNpemVfdCBibG9jayA9IDA7IGJsb2NrIDwgdXNlZENvdW50
OyArK2Jsb2NrKSB7CisgICAgICAgICAgICBBU1NFUlQobV9kaXJlY3RvcnlbYmxvY2tdKTsKKyAg
ICAgICAgICAgIE9TQWxsb2NhdG9yOjpkZWNvbW1pdEFuZFJlbGVhc2UobV9kaXJlY3RvcnlbYmxv
Y2tdLCBlbnRyaWVzUGVyQmxvY2sgKiBzaXplb2YoVCkpOworICAgICAgICB9CisKKyAgICAgICAg
T1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZShtX2RpcmVjdG9yeSwgbV9kaXJlY3RvcnlD
b3VudCAqIHNpemVvZihUKikpOworICAgIH0KKworICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGlu
ZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICAgICAgc2l6
ZV90IGJsb2NrID0gaW5kZXggLyBlbnRyaWVzUGVyQmxvY2s7CisgICAgICAgIHNpemVfdCBvZmZz
ZXQgPSBpbmRleCAlIGVudHJpZXNQZXJCbG9jazsKKworICAgICAgICBBU1NFUlQobV9kaXJlY3Rv
cnlbYmxvY2tdKTsKKyAgICAgICAgcmV0dXJuIG1fZGlyZWN0b3J5W2Jsb2NrXVtvZmZzZXRdOwor
ICAgIH0KKworICAgIHZvaWQgYXBwZW5kKGNvbnN0IFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
Ly8gQ2hlY2sgaWYgdGhlIGFycmF5IGlzIGNvbXBsZXRlbHkgZnVsbCwgaWYgc28gY3JlYXRlIG1v
cmUgY2FwYWNpdHkgaW4gdGhlIGRpcmVjdG9yeS4KKyAgICAgICAgaWYgKG1fc2l6ZSA9PSBtX2Rp
cmVjdG9yeUNvdW50ICogZW50cmllc1BlckJsb2NrKSB7CisgICAgICAgICAgICAvLyBSZWFsbG9j
YXRlIHRoZSBkaXJlY3RvcnkuCisgICAgICAgICAgICBzaXplX3Qgb2xkRGlyZWN0b3J5U2l6ZSA9
IG1fZGlyZWN0b3J5Q291bnQgKiBzaXplb2YoVCopOworICAgICAgICAgICAgc2l6ZV90IG5ld0Rp
cmVjdG9yeVNpemUgPSBvbGREaXJlY3RvcnlTaXplICogMjsKKyAgICAgICAgICAgIGlmIChuZXdE
aXJlY3RvcnlTaXplIDwgb2xkRGlyZWN0b3J5U2l6ZSkKKyAgICAgICAgICAgICAgICBDUkFTSCgp
OworICAgICAgICAgICAgbV9kaXJlY3RvcnkgPSBPU0FsbG9jYXRvcjo6cmVhbGxvY2F0ZUNvbW1p
dHRlZChtX2RpcmVjdG9yeSwgb2xkRGlyZWN0b3J5U2l6ZSwgbmV3RGlyZWN0b3J5U2l6ZSk7CisK
KyAgICAgICAgICAgIC8vIAorICAgICAgICAgICAgc2l6ZV90IG5ld0RpcmVjdG9yeUNvdW50ID0g
bV9kaXJlY3RvcnlDb3VudCAqIDI7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBibG9jayA9IG1f
ZGlyZWN0b3J5Q291bnQ7IGJsb2NrIDwgbmV3RGlyZWN0b3J5Q291bnQ7ICsrYmxvY2spCisgICAg
ICAgICAgICAgICAgbV9kaXJlY3RvcnlbYmxvY2tdID0gMDsKKyAgICAgICAgICAgIG1fZGlyZWN0
b3J5Q291bnQgPSBuZXdEaXJlY3RvcnlDb3VudDsKKyAgICAgICAgfQorCisgICAgICAgIHNpemVf
dCBpbmRleCA9IG1fc2l6ZTsKKyAgICAgICAgc2l6ZV90IGJsb2NrID0gaW5kZXggLyBlbnRyaWVz
UGVyQmxvY2s7CisgICAgICAgIHNpemVfdCBvZmZzZXQgPSBpbmRleCAlIGVudHJpZXNQZXJCbG9j
azsKKworICAgICAgICBpZiAoIW9mZnNldCkgeworICAgICAgICAgICAgQVNTRVJUKCFtX2RpcmVj
dG9yeVtibG9ja10pOworICAgICAgICAgICAgbV9kaXJlY3RvcnlbYmxvY2tdID0gc3RhdGljX2Nh
c3Q8VCo+KE9TQWxsb2NhdG9yOjpyZXNlcnZlQW5kQ29tbWl0KGVudHJpZXNQZXJCbG9jayAqIHNp
emVvZihUKSkpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKG1fZGlyZWN0b3J5W2Jsb2Nr
XSk7CisgICAgICAgICsrbV9zaXplOworICAgICAgICBtX2RpcmVjdG9yeVtibG9ja11bb2Zmc2V0
XSA9IHZhbHVlOworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplOyB9CisKK3ByaXZhdGU6CisgICAgc2l6ZV90IG1fZGlyZWN0b3J5Q291bnQ7CisgICAgVCoq
IG1fZGlyZWN0b3J5OworICAgIHNpemVfdCBtX3NpemU7Cit9OworCit9CisKKyNlbmRpZiAvLyBU
aWVyZWRNTWFwQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFB
bGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0
YUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvTWV0YUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEwICs1NSwxMSBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQgTWV0YUFsbG9jYXRvcjo6cmVsZWFzCiAgICAgICAgIG1fdHJh
Y2tlci0+cmVsZWFzZShoYW5kbGUpOwogfQogCi1NZXRhQWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxs
b2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0b3IqIGFsbG9jYXRvciwgdm9pZCogc3RhcnQsIHNpemVf
dCBzaXplSW5CeXRlcykKK01ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5kbGUo
TWV0YUFsbG9jYXRvciogYWxsb2NhdG9yLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVz
LCB2b2lkKiBvd25lclVJRCkKICAgICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKICAgICAsIG1f
c3RhcnQoc3RhcnQpCiAgICAgLCBtX3NpemVJbkJ5dGVzKHNpemVJbkJ5dGVzKQorICAgICwgbV9v
d25lclVJRChvd25lclVJRCkKIHsKICAgICBBU1NFUlQoYWxsb2NhdG9yKTsKICAgICBBU1NFUlQo
c3RhcnQpOwpAQCAtMTI5LDcgKzEzMCw3IEBAIE1ldGFBbGxvY2F0b3I6Ok1ldGFBbGxvY2F0b3Io
c2l6ZV90IGFsbG8KICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSA8PCBtX2xvZ0Fs
bG9jYXRpb25HcmFudWxlID09IG1fYWxsb2NhdGlvbkdyYW51bGUpOwogfQogCi1QYXNzUmVmUHRy
PE1ldGFBbGxvY2F0b3JIYW5kbGU+IE1ldGFBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXpl
SW5CeXRlcykKK1Bhc3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFsbG9jYXRvcjo6
YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCkKIHsKICAgICBTcGlu
TG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CiAKQEAgLTE2Nyw3ICsxNjgsNyBAQCBQYXNzUmVm
UHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IE1ldGFBbGxvCiAgICAgbV9udW1BbGxvY2F0aW9ucysr
OwogI2VuZGlmCiAKLSAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBuZXcgTWV0YUFs
bG9jYXRvckhhbmRsZSh0aGlzLCBzdGFydCwgc2l6ZUluQnl0ZXMpOworICAgIE1ldGFBbGxvY2F0
b3JIYW5kbGUqIGhhbmRsZSA9IG5ldyBNZXRhQWxsb2NhdG9ySGFuZGxlKHRoaXMsIHN0YXJ0LCBz
aXplSW5CeXRlcywgb3duZXJVSUQpOwogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYSB2ZXJpZmll
ciBzY2hlbWUgdGhhdCBncm9rcyBNZXRhQWxsb2NhdG9ySGFuZGxlcwogICAgIGhhbmRsZS0+ZGVw
cmVjYXRlZFR1cm5PZmZWZXJpZmllcigpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL01ldGFBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL01ldGFBbGxvY2F0b3IuaAkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcg
QEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgfk1ldGFBbGxvY2F0b3IoKTsKICAgICAKLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBhbGxv
Y2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBQYXNzUmVm
UHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9p
ZCogb3duZXJVSUQpOwogCiAgICAgdm9pZCB0cmFja0FsbG9jYXRpb25zKE1ldGFBbGxvY2F0b3JU
cmFja2VyKiB0cmFja2VyKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
TWV0YUFsbG9jYXRvckhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNyArNDAsNyBAQCBjbGFzcyBNZXRhQWxsb2NhdG9yOwogCiBjbGFzcyBNZXRhQWxsb2Nh
dG9ySGFuZGxlIDogcHVibGljIFJlZkNvdW50ZWQ8TWV0YUFsbG9jYXRvckhhbmRsZT4sIHB1Ymxp
YyBSZWRCbGFja1RyZWU8TWV0YUFsbG9jYXRvckhhbmRsZSwgdm9pZCo+OjpOb2RlIHsKIHByaXZh
dGU6Ci0gICAgTWV0YUFsbG9jYXRvckhhbmRsZShNZXRhQWxsb2NhdG9yKiwgdm9pZCogc3RhcnQs
IHNpemVfdCBzaXplSW5CeXRlcyk7CisgICAgTWV0YUFsbG9jYXRvckhhbmRsZShNZXRhQWxsb2Nh
dG9yKiwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQpOwog
ICAgIAogcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+TWV0YUFsbG9jYXRvckhhbmRs
ZSgpOwpAQCAtNzIsNyArNzIsMTIgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9hbGxvY2F0
b3IpOwogICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3I7CiAgICAgfQotICAgIAorCisgICAgdm9p
ZCogb3duZXJVSUQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3duZXJVSUQ7CisgICAgfQor
CiAgICAgdm9pZCoga2V5KCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX3N0YXJ0OwpAQCAtODQs
NiArODksNyBAQCBwcml2YXRlOgogICAgIE1ldGFBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOwogICAg
IHZvaWQqIG1fc3RhcnQ7CiAgICAgc2l6ZV90IG1fc2l6ZUluQnl0ZXM7CisgICAgdm9pZCogbV9v
d25lclVJRDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvT1NBbGxv
Y2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL09TQWxsb2Nh
dG9yLmgJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvT1NB
bGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsMTIgQEAgcHVibGljOgogICAg
IC8vIHNwZWNpZmllZC4KICAgICBzdGF0aWMgdm9pZCogcmVzZXJ2ZUFuZENvbW1pdChzaXplX3Qg
cmVzZXJ2ZVNpemUsIHNpemVfdCBjb21taXRTaXplLCBVc2FnZSA9IFVua25vd25Vc2FnZSwgYm9v
bCB3cml0YWJsZSA9IHRydWUsIGJvb2wgZXhlY3V0YWJsZSA9IGZhbHNlKTsKICAgICBzdGF0aWMg
dm9pZCBkZWNvbW1pdEFuZFJlbGVhc2Uodm9pZCogcmVsZWFzZUJhc2UsIHNpemVfdCByZWxlYXNl
U2l6ZSwgdm9pZCogZGVjb21taXRCYXNlLCBzaXplX3QgZGVjb21taXRTaXplKTsKKworICAgIC8v
IFJlYWxsb2NhdGUgYW4gZXhpc3RpbmcsIGNvbW1pdHRlZCBhbGxvY2F0aW9uLgorICAgIC8vIFRo
ZSBwcmlvciBhbGxvY2F0aW9uIG11c3QgYmUgZnVsbHkgY29taXR0ZWQsIGFuZCB0aGUgbmV3IHNp
emUgd2lsbCBhbHNvIGJlIGZ1bGx5IGNvbW1pdHRlZC4KKyAgICAvLyBUaGlzIGludGVyZmFjZSBp
cyBwcm92aWRlZCBzaW5jZSBpdCBtYXkgYmUgcG9zc2libGUgdG8gb3B0aW1pemUgdGhpcyBvcGVy
YXRpb24gb24gc29tZSBwbGF0Zm9ybXMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBz
dGF0aWMgVCogcmVhbGxvY2F0ZUNvbW1pdHRlZChUKiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBu
ZXdTaXplLCBVc2FnZSA9IFVua25vd25Vc2FnZSwgYm9vbCB3cml0YWJsZSA9IHRydWUsIGJvb2wg
ZXhlY3V0YWJsZSA9IGZhbHNlKTsKIH07CiAKIGlubGluZSB2b2lkKiBPU0FsbG9jYXRvcjo6cmVz
ZXJ2ZUFuZENvbW1pdChzaXplX3QgcmVzZXJ2ZVNpemUsIHNpemVfdCBjb21taXRTaXplLCBVc2Fn
ZSB1c2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQpAQCAtOTMsNiArOTksMTUg
QEAgaW5saW5lIHZvaWQgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZQogICAgIGRlY29tbWl0
QW5kUmVsZWFzZShiYXNlLCBzaXplLCBiYXNlLCBzaXplKTsKIH0KIAordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK2lubGluZSBUKiBPU0FsbG9jYXRvcjo6cmVhbGxvY2F0ZUNvbW1pdHRlZChUKiBvbGRC
YXNlLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUsIFVzYWdlIHVzYWdlLCBib29sIHdy
aXRhYmxlLCBib29sIGV4ZWN1dGFibGUpCit7CisgICAgdm9pZCogbmV3QmFzZSA9IHJlc2VydmVB
bmRDb21taXQobmV3U2l6ZSwgdXNhZ2UsIHdyaXRhYmxlLCBleGVjdXRhYmxlKTsKKyAgICBtZW1j
cHkobmV3QmFzZSwgb2xkQmFzZSwgc3RkOjptaW4ob2xkU2l6ZSwgbmV3U2l6ZSkpOworICAgIGRl
Y29tbWl0QW5kUmVsZWFzZShvbGRCYXNlLCBvbGRTaXplKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VCo+KG5ld0Jhc2UpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpP
U0FsbG9jYXRvcjsK
</data>
<flag name="review"
          id="125620"
          type_id="1"
          status="+"
          setter="oliver"
    />
    <flag name="commit-queue"
          id="125622"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124391</attachid>
            <date>2012-01-27 16:05:03 -0800</date>
            <delta_ts>2012-01-27 16:36:15 -0800</delta_ts>
            <desc>Build fixes (patch already reviewed by oliver)</desc>
            <filename>76855.5.patch</filename>
            <type>text/plain</type>
            <size>56058</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA2MTUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDEyLTAxLTI3ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBJbXBsZW1lbnQgYSBKSVQtY29kZSBhd2FyZSBzYW1wbGluZyBwcm9maWxlciBm
b3IgSlNDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
Njg1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgorCisgICAgICAgIFRvIGVu
YWJsZSB0aGUgcHJvZmlsZXIsIHNldCB0aGUgSlNDX0NPREVfUFJPRklMSU5HIGVudmlyb25tZW50
IHZhcmlhYmxlIHRvCisgICAgICAgIDEgKG5vIHRyYWNpbmcgdGhlIEMgc3RhY2spLCAyICh0cmFj
ZSBvbmUgbGV2ZWwgb2YgQyBjb2RlKSBvciAzIChyZWN1cnNpdmVseQorICAgICAgICB0cmFjZSBh
bGwgc2FtcGxlcykuCisKKyAgICAgICAgVGhlIHByb2ZpbGVyIHJlcXVpcmVzIC1mb21pdC1mcmFt
ZS1wb2ludGVyIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgYnVpbGQgZmxhZ3MuCisKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICAgICAtIFJlbW92ZWQgYW4gZXhwb3J0Lgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICAgICAtIEFkZGVkIG5ldyBmaWxlcworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgICAgICAtIEZvciBiYXNlbGluZSBjb2RlYmxvY2tzLCBjYWNoZSB0aGUgcmVz
dWx0IG9mIGNhbkNvbXBpbGVXaXRoREZHLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5o
OgorICAgICAgICAgICAgLSBGb3IgYmFzZWxpbmUgY29kZWJsb2NrcywgY2FjaGUgdGhlIHJlc3Vs
dCBvZiBjYW5Db21waWxlV2l0aERGRy4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxv
Y2F0b3IpOgorICAgICAgICAgICAgLSBOb3RpZnkgdGhlIHByb2ZpbGVyIHdoZW4gdGhlIGFsbG9j
YXRvciBpcyBjcmVhdGVkLgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxv
Y2F0ZSk6CisgICAgICAgICAgICAtIEluZm9ybSB0aGUgYWxsb2NhdGVkIG9mIHRoZSBvd25lclVJ
RC4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcDoKKyAg
ICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG9jYXRvcik6Cisg
ICAgICAgICAgICAtIE5vdGlmeSB0aGUgcHJvZmlsZXIgd2hlbiB0aGUgYWxsb2NhdG9yIGlzIGNy
ZWF0ZWQuCisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAg
ICAgICAgICAgIC0gSW5mb3JtIHRoZSBhbGxvY2F0ZWQgb2YgdGhlIG93bmVyVUlELgorICAgICAg
ICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgICAgICAtIElmIHByb2ZpbGluZywgZG9uJ3Qg
bWFzayB0aGUgcmV0dXJuIGFkZHJlc3MgaW4gSklUIGNvZGUuCisgICAgICAgICAgICAgIChXZSBk
byBzbyB0byBwcm92aWRlIG5pY2VyIGJhY2t0cmFjZXMgaW4gZGVidWcgYnVpbGRzKS4KKyAgICAg
ICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpldmFsdWF0ZSk6Cisg
ICAgICAgICAgICAtIE5vdGlmeSB0aGUgcHJvZmlsZXIgb2Ygc2NyaXB0IGV2YWx1YXRpb25zLgor
ICAgICAgICAqIHRvb2xzOiBBZGRlZC4KKyAgICAgICAgKiB0b29scy9Db2RlUHJvZmlsZS5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpzeW1ib2xOYW1lKToKKyAgICAgICAgICAgIC0gSGVscGVy
IGZ1bmN0aW9uIHRvIGdldCB0aGUgbmFtZSBvZiBhIHN5bWJvbCBpbiB0aGUgZnJhbWV3b3JrLgor
ICAgICAgICAoSlNDOjp0cnVuY2F0ZVRyYWNlKToKKyAgICAgICAgICAgIC0gSGVscGVyIHRvIHRy
dW5jYXRlIHRyYWNlcyBpbnRvIG1ldGhvZHMga25vdyB0byBoYXZlIHVuaW5mb3JtYXRpdmVseSBk
ZWVwIHN0YWNrcy4KKyAgICAgICAgKEpTQzo6Q29kZVByb2ZpbGU6OnNhbXBsZSk6CisgICAgICAg
ICAgICAtIFJlY29yZCBhIHN0YWNrIHRyYWNlIGNsYXNzaWZ5aW5nIHNhbXBsZXMuCisgICAgICAg
IChKU0M6OkNvZGVQcm9maWxlOjpyZXBvcnQpOgorICAgICAgICAgICAgLSB7UHJpbnQgcHJvZmls
ZXIgb3V0cHV0LgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxlLmg6IEFkZGVkLgorICAgICAg
ICAgICAgLSBuZXcgY2xhc3MsIGNhcHR1cmVzIGEgc2V0IG9mIHNhbXBsZXMgYXNzb2NpYXRlZCB3
aXRoIGFuIGV2YWx1YXRlZCBzY3JpcHQsCisgICAgICAgICAgICAgIGFuZCBuZXN0ZWQgdG8gcmVj
b3JkIHNhbXBsZXMgZnJvbSBzdWJzY3JpcHRzLgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxp
bmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q29kZVByb2ZpbGluZzo6cHJvZmlsaW5nVGlt
ZXIpOgorICAgICAgICAgICAgLSBjYWxsYmFjayBmaXJlZCB0aGVuIGEgdGltZXIgZXZlbnQgb2Nj
dXJzLgorICAgICAgICAoSlNDOjpDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IpOgorICAg
ICAgICAgICAgLSBjYWxsZWQgd2hlbiB0aGUgZXhlY3V0YWJsZSBhbGxvY2F0b3IgaXMgY29uc3Ry
dWN0ZWQuCisgICAgICAgIChKU0M6OkNvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEMpOgor
ICAgICAgICAgICAgLSBoZWxwZXIgdG8gbG9va3VwIHRoZSBjb2RlYmxvY2sgZnJvbSBhbiBhZGRy
ZXNzIGluIEpJVCBjb2RlCisgICAgICAgIChKU0M6OkNvZGVQcm9maWxpbmc6OmJlZ2luKToKKyAg
ICAgICAgICAgIC0gZW50ZXIgYSBwcm9maWxpbmcgc2NvcGUuCisgICAgICAgIChKU0M6OkNvZGVQ
cm9maWxpbmc6OmVuZCk6CisgICAgICAgICAgICAtIGV4aXQgYSBwcm9maWxpbmcgc2NvcGUuCisg
ICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGluZy5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0gbmV3
IGNsYXNzLCBpbnN0YW50aWFsZWQgZnJvbSBDb21wbGV0aW9uIHRvIGRlZmluZSBhIHByb2ZpbGlu
ZyBzY29wZS4KKyAgICAgICAgKiB0b29scy9Qcm9maWxlVHJlZU5vZGUuaDogQWRkZWQuCisgICAg
ICAgICAgICAtIG5ldyBjbGFzcywgdXNlZCB0byBjb25zdHJ1Y3QgYSB0cmVlIG9mIHNhbXBsZXMu
CisgICAgICAgICogdG9vbHMvVGllcmVkTU1hcEFycmF5Lmg6IEFkZGVkLgorICAgICAgICAgICAg
LSBuZXcgY2xhc3MsIGEgbWFsbG9jLWZyZWUgdmVjdG9yIChjYW4gYmUgdXNlZCB3aGlsZSB0aGUg
bWFpbiB0aHJlYWQgaXMgc3VzcGVuZGVkLAorICAgICAgICAgICAgICBwb3NzaWJseSBob2xkaW5n
IHRoZSBtYWxsb2MgaGVhcCBsb2NrKS4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6
CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5kbGUp
OgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgICAgICAt
IEFsbG93IGFsbG9jYXRpb24gaGFuZGxlcyB0byB0cmFjayBpbmZvcm1hdGlvbiBhYm91dCB0aGVp
ciBvd25lci4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5oOgorICAgICAgICAoTWV0YUFs
bG9jYXRvcik6CisgICAgICAgICAgICAtIEFsbG93IGFsbG9jYXRpb24gaGFuZGxlcyB0byB0cmFj
ayBpbmZvcm1hdGlvbiBhYm91dCB0aGVpciBvd25lci4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9j
YXRvckhhbmRsZS5oOgorICAgICAgICAoTWV0YUFsbG9jYXRvckhhbmRsZSk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Om93bmVyVUlEKToKKyAgICAgICAgICAgIC0gQWxsb3cg
YWxsb2NhdGlvbiBoYW5kbGVzIHRvIHRyYWNrIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyIG93bmVy
LgorICAgICAgICAqIHd0Zi9PU0FsbG9jYXRvci5oOgorICAgICAgICAoV1RGOjpPU0FsbG9jYXRv
cjo6cmVhbGxvY2F0ZUNvbW1pdHRlZCk6CisgICAgICAgICAgICAtIHJlYWxsb2NhdGUgYW4gZXhp
c3RpbmcsIGNvbW1pdHRlZCBtZW1vcnkgYWxsb2NhdGlvbi4KKwogMjAxMi0wMS0yNyAgTU9SSVRB
IEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbSlNDXSBTb21lIEpTX0VY
UE9SVERBVEEgbWF5IG5vdCBiZSBuZWNlc3NhcnkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw2ICsyMDAsOSBAQCBTRVQoSmF2
YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHJ1bnRpbWUvVGltZW91dENoZWNrZXIuY3BwCiAgICAg
cnVudGltZS9VU3RyaW5nLmNwcAogCisJdG9vbHMvQ29kZVByb2ZpbGUuY3BwCisJdG9vbHMvQ29k
ZVByb2ZpbGluZy5jcHAKKwogICAgIHlhcnIvWWFyclBhdHRlcm4uY3BwCiAgICAgeWFyci9ZYXJy
SW50ZXJwcmV0ZXIuY3BwCiAgICAgeWFyci9ZYXJySklULmNwcApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC01
MjUsNiArNTI1LDEyIEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9XZWFrUmFuZG9tLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dy
aXRlQmFycmllci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUu
Y3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuaCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwIFwKKwlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9UaWVyZWRNTWFwQXJyYXkuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BbGlnbm1l
bnQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BbHdheXNJbmxpbmUuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BcnJheUJ1ZmZlci5jcHAgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC00
MTUsNyArNDE1LDYgQEAgX19aTjNXVEYxMnJhbmRvbU51bWJlckV2CiBfX1pOM1dURjEzTWV0YUFs
bG9jYXRvcjE3YWRkRnJlc2hGcmVlU3BhY2VFUHZtCiBfX1pOM1dURjEzTWV0YUFsbG9jYXRvcjE3
ZnJlZUZyZWVTcGFjZU5vZGVFUE5TMF8xM0ZyZWVTcGFjZU5vZGVFCiBfX1pOM1dURjEzTWV0YUFs
bG9jYXRvcjE4ZGVidWdGcmVlU3BhY2VTaXplRXYKLV9fWk4zV1RGMTNNZXRhQWxsb2NhdG9yOGFs
bG9jYXRlRW0KIF9fWk4zV1RGMTNNZXRhQWxsb2NhdG9yQzJFbQogX19aTjNXVEYxM1N0cmluZ0J1
aWxkZXIxMXNocmlua1RvRml0RXYKIF9fWk4zV1RGMTNTdHJpbmdCdWlsZGVyMTVyZXNlcnZlQ2Fw
YWNpdHlFagpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEwNjE1MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDksNiArMjA5LDggQEAgU09VUkNFUyArPSBcCiAgICAgcnVudGltZS9TdHJ1Y3R1cmUuY3BwIFwK
ICAgICBydW50aW1lL1RpbWVvdXRDaGVja2VyLmNwcCBcCiAgICAgcnVudGltZS9VU3RyaW5nLmNw
cCBcCisJdG9vbHMvQ29kZVByb2ZpbGUuY3BwIFwKKwl0b29scy9Db2RlUHJvZmlsaW5nLmNwcCBc
CiAgICAgeWFyci9ZYXJySklULmNwcCBcCiAKICpzaDQqIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCShyZXZpc2lv
biAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTQ0Nyw2ICsxNDQ3LDM0IEBACiAJCQk8L0ZpbGU+CiAJCTwvRmlsdGVyPgogCQk8RmlsdGVyCisJ
CQlOYW1lPSJ0b29scyIKKwkJCT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx0
b29sc1xDb2RlUHJvZmlsZS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXC4uXHRvb2xzXENvZGVQcm9maWxlLmgiCisJCQkJPgorCQkJPC9GaWxl
PgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHRvb2xzXENvZGVQcm9maWxpbmcu
Y3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwu
Llx0b29sc1xDb2RlUHJvZmlsaW5nLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHRvb2xzXFByb2ZpbGVUcmVlTm9kZS5oIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx0b29sc1xUaWVyZWRN
TWFwQXJyYXkuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCTwvRmlsdGVyPgorCQk8RmlsdGVyCiAJ
CQlOYW1lPSJieXRlY29kZSIKIAkJCT4KIAkJCTxGaWxlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTM4Miw2ICszODIsOCBAQAogCQk4NkFFNjRBQTEzNUU1RTFDMDA5NjMwMTIgLyogU0g0QXNzZW1i
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkFF
NjRBNzEzNUU1RTFDMDA5NjMwMTIgLyogU0g0QXNzZW1ibGVyLmggKi87IH07CiAJCTg2QUU2QzRE
MTM2QTExRTQwMDk2MzAxMiAvKiBERkdGUFJJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkFFNkM0QjEzNkExMUU0MDA5NjMwMTIgLyogREZHRlBS
SW5mby5oICovOyB9OwogCQk4NkFFNkM0RTEzNkExMUU0MDA5NjMwMTIgLyogREZHR1BSSW5mby5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZBRTZDNEMx
MzZBMTFFNDAwOTYzMDEyIC8qIERGR0dQUkluZm8uaCAqLzsgfTsKKwkJODZCNTgyNjcxNEQyNzk2
QzAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg2QjU4MjJFMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmls
ZS5jcHAgKi87IH07CisJCTg2QjU4MjY5MTREMjc5NzAwMEE5QzMwNiAvKiBDb2RlUHJvZmlsaW5n
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MDND
RUYyMTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmNwcCAqLzsgfTsKIAkJODZCOTlB
RTMxMTdFNTc4MTAwREY1QTkwIC8qIFN0cmluZ0J1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZCOTlBRTExMTdFNTc4MTAwREY1QTkwIC8qIFN0
cmluZ0J1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTg2QkIwOUMwMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QkIwOUJFMTM4RTM4MUIw
MDU2NzAyRiAvKiBERkdSZXBhdGNoLmNwcCAqLzsgfTsKIAkJODZCQjA5QzExMzhFMzgxQjAwNTY3
MDJGIC8qIERGR1JlcGF0Y2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg2QkIwOUJGMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmggKi87IH07
CkBAIC0xMDQyLDcgKzEwNDQsNyBAQAogCQkxQTA4Mjc3ODE0MjE2OEQ3MDA5MENDQUMgLyogQmlu
YXJ5U2VtYXBob3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpbmFyeVNl
bWFwaG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUE5RTU1MDE0OTgwOTM1
MDAwMDFBOEEgLyogRnVuY3Rpb25hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGdW5jdGlvbmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDOTA1MTQyMEJB
OUU4QTcwMDgxRTlEMCAvKiBWZXJzaW9uLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZp
ZzsgcGF0aCA9IFZlcnNpb24ueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTFDOTA1MTQzMEJBOUU4QTcwMDgxRTlEMCAvKiBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQueGNjb25maWc7IG5hbWUgPSBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZzsgcGF0
aCA9IC4uL0NvbmZpZ3VyYXRpb25zL0phdmFTY3JpcHRDb3JlLnhjY29uZmlnOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxQzkwNTE0MzBCQTlFOEE3MDA4MUU5RDAgLyogSmF2YVNjcmlw
dENvcmUueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gSmF2YVNjcmlw
dENvcmUueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDOTA1MTQ0MEJB
OUU4QTcwMDgxRTlEMCAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lnhj
Y29uZmlnOyBwYXRoID0gRGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQzkwNTE0NTBCQTlFOEE3MDA4MUU5RDAgLyogQmFzZS54Y2NvbmZpZyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBCYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQ0FBOEI0QTBEMzJDMzlBMDA0MUJDRkYgLyogSmF2YVNjcmlwdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKYXZhU2NyaXB0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTM4LDYgKzExNDAsOCBAQAogCQk4NjAxNjFFMDBGM0E4
M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODYwMTYxRTEwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDE2MUUyMEYzQTgzQzEwMEY4NDcxMCAv
KiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk4NjAzQ0VGMjE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGluZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlUHJvZmlsaW5nLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODYwM0NFRjMxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQ
cm9maWxpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVByb2ZpbGlu
Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjA0RjRGMjE0M0E2QzQ0MDBCMjk1
RjUgLyogQ2hhbmdlTG9nICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IENoYW5nZUxvZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODYwNEY1MDMxNDNDRTFDMTAwQjI5NUY1IC8qIEpTR2xvYmFsVGhpcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbFRoaXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODYyNkJFQ0UxMTkyOEUzOTAwNzgyRkFCIC8qIFN0cmluZ1N0YXRpY3Mu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3RyaW5nU3RhdGljcy5j
cHA7IHBhdGggPSB0ZXh0L1N0cmluZ1N0YXRpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTE4NSw2ICsxMTg5LDEwIEBACiAJCTg2QUU2NEE3MTM1RTVFMUMwMDk2MzAxMiAv
KiBTSDRBc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU0g0QXNz
ZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QUU2QzRCMTM2QTExRTQw
MDk2MzAxMiAvKiBERkdGUFJJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0ZQUkluZm8uaDsgcGF0aCA9IGRmZy9ERkdGUFJJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTg2QUU2QzRDMTM2QTExRTQwMDk2MzAxMiAvKiBERkdHUFJJbmZvLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0dQUkluZm8uaDsgcGF0aCA9IGRmZy9E
RkdHUFJJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2QjU4MjJDMTREMjJG
NUYwMEE5QzMwNiAvKiBQcm9maWxlVHJlZU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUHJvZmlsZVRyZWVOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTg2QjU4MjJFMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTg2QjU4MjJGMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlUHJvZmlsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk4NkI1ODI2QTE0RDM1RDUxMDBBOUMzMDYgLyogVGllcmVk
TU1hcEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpZXJlZE1NYXBB
cnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkI5OUFFMTExN0U1NzgxMDBE
RjVBOTAgLyogU3RyaW5nQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFN0cmluZ0J1ZmZlci5oOyBwYXRoID0gdGV4dC9TdHJpbmdCdWZmZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODZCQjA5QkUxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2gu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUmVwYXRjaC5jcHA7
IHBhdGggPSBkZmcvREZHUmVwYXRjaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTg2QkIwOUJGMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1JlcGF0Y2guaDsgcGF0aCA9IGRmZy9ERkdSZXBhdGNoLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjgwLDYgKzE2ODgsNyBAQAogCQkJCTk1
QUI4MzFBMERBNDJDNjkwMEJDODNGMyAvKiBwcm9maWxlciAqLywKIAkJCQk3RUY2RTBCQjBFQjdB
MUVDMDA3OUFGQUYgLyogcnVudGltZSAqLywKIAkJCQkxNDEyMTEwMDBBNDg3NzI2MDA0ODAyNTUg
LyogdGVzdHMgKi8sCisJCQkJODYwM0NFRjAxNEM3NTNFRjAwQUU1OUUzIC8qIHRvb2xzICovLAog
CQkJCTY1MTYyRUYxMDhFNkEyMUMwMDc1NTZDRCAvKiB3dGYgKi8sCiAJCQkJODZFQUM0OEMwRjkz
RThCOTAwOEVDOTQ4IC8qIHlhcnIgKi8sCiAJCQkJMUM5MDUxM0UwQkE5RTg4MzAwODFFOUQwIC8q
IENvbmZpZ3VyYXRpb25zICovLApAQCAtMTgyNiw3ICsxODM1LDYgQEAKIAkJCQk4NjVGNDA4NzEw
RTdENTYzMDA5NDczNjEgLyogQVBJU2hpbXMuaCAqLywKIAkJCQkxQ0FBOEI0QTBEMzJDMzlBMDA0
MUJDRkYgLyogSmF2YVNjcmlwdC5oICovLAogCQkJCTFDQUE4QjRCMEQzMkMzOUEwMDQxQkNGRiAv
KiBKYXZhU2NyaXB0Q29yZS5oICovLAotCQkJCTFDOTA1MTQzMEJBOUU4QTcwMDgxRTlEMCAvKiBK
YXZhU2NyaXB0Q29yZS54Y2NvbmZpZyAqLywKIAkJCQlCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUg
LyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovLAogCQkJCUJDMDg5NEQ2MEZBRkJBMkQwMDAwMTg2
NSAvKiBKU0FQSVZhbHVlV3JhcHBlci5oICovLAogCQkJCTE0MjEzNTlBMEE2NzdGNEYwMEE4MTk1
RSAvKiBKU0Jhc2UuY3BwICovLApAQCAtMTkxNiw2ICsxOTI0LDcgQEAKIAkJCQkxQzkwNTE0NDBC
QTlFOEE3MDA4MUU5RDAgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovLAogCQkJCTQ0OTA5N0VF
MEY4RjgxQjUwMDc2QTMyNyAvKiBGZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyAqLywKIAkJCQk1REFG
RDZDQjE0NkI2ODYzMDBGQkVGQjQgLyogSlNDLnhjY29uZmlnICovLAorCQkJCTFDOTA1MTQzMEJB
OUU4QTcwMDgxRTlEMCAvKiBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZyAqLywKIAkJCQlCQzAyMUJG
MjEzNjkwMEMzMDBGQzU0NjcgLyogVGVzdEFQSS54Y2NvbmZpZyAqLywKIAkJCQk1REFGRDZDQzE0
NkI2OEI5MDBGQkVGQjQgLyogVGVzdFJlZ0V4cC54Y2NvbmZpZyAqLywKIAkJCQkxQzkwNTE0MjBC
QTlFOEE3MDA4MUU5RDAgLyogVmVyc2lvbi54Y2NvbmZpZyAqLywKQEAgLTIzNjUsNiArMjM3NCwx
OSBAQAogCQkJcGF0aCA9IHJ1bnRpbWU7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9
OworCQk4NjAzQ0VGMDE0Qzc1M0VGMDBBRTU5RTMgLyogdG9vbHMgKi8gPSB7CisJCQlpc2EgPSBQ
QlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTg2QjU4MjJFMTREMjM3M0IwMEE5QzMwNiAv
KiBDb2RlUHJvZmlsZS5jcHAgKi8sCisJCQkJODZCNTgyMkYxNEQyMzczQjAwQTlDMzA2IC8qIENv
ZGVQcm9maWxlLmggKi8sCisJCQkJODYwM0NFRjIxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9m
aWxpbmcuY3BwICovLAorCQkJCTg2MDNDRUYzMTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmls
aW5nLmggKi8sCisJCQkJODZCNTgyMkMxNEQyMkY1RjAwQTlDMzA2IC8qIFByb2ZpbGVUcmVlTm9k
ZS5oICovLAorCQkJCTg2QjU4MjZBMTREMzVENTEwMEE5QzMwNiAvKiBUaWVyZWRNTWFwQXJyYXku
aCAqLywKKwkJCSk7CisJCQlwYXRoID0gdG9vbHM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OworCQl9OwogCQk4NjU2NTczRTExNUJFMzUyMDAyOTFGNDAgLyogdGV4dCAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0zNjQwLDYgKzM2NjIsOCBAQAogCQkJ
CTBGOTMzMkExMTRDQTdERDEwMDg1RjNDNiAvKiBNZXRob2RDYWxsTGlua1N0YXR1cy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjkzMzJBMzE0Q0E3REQ3MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU1RjBGNDE0RDEwNjM5MDBBQzc2NDkgLyogQWJz
dHJhY3RQQy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4NkI1ODI2NzE0RDI3OTZDMDBBOUMzMDYg
LyogQ29kZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODZCNTgyNjkxNEQyNzk3MDAw
QTlDMzA2IC8qIENvZGVQcm9maWxpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTA2MTUw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0NTYsNiArMTQ1Niw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQ
YXJzZWRCbG9ja1RhZywKICAgICAsIG1fc3BlY3VsYXRpdmVGYWlsQ291bnRlcigwKQogICAgICwg
bV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoMCkKICAgICAsIG1fcmVvcHRpbWl6YXRpb25SZXRy
eUNvdW50ZXIoMCkKKyAgICAsIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0ZShDb21waWxlV2l0aERG
R1Vuc2V0KQogewogICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsK
ICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CkBAIC0yMTY0LDE3ICsyMTY1LDE3IEBAIEpTT2Jq
ZWN0KiBGdW5jdGlvbkNvZGVCbG9jazo6Y29tcGlsZU9wdGkKICAgICByZXR1cm4gZXJyb3I7CiB9
CiAKLWJvb2wgUHJvZ3JhbUNvZGVCbG9jazo6Y2FuQ29tcGlsZVdpdGhERkcoKQorYm9vbCBQcm9n
cmFtQ29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERGR0ludGVybmFsKCkKIHsKICAgICByZXR1cm4g
REZHOjpjYW5Db21waWxlUHJvZ3JhbSh0aGlzKTsKIH0KIAotYm9vbCBFdmFsQ29kZUJsb2NrOjpj
YW5Db21waWxlV2l0aERGRygpCitib29sIEV2YWxDb2RlQmxvY2s6OmNhbkNvbXBpbGVXaXRoREZH
SW50ZXJuYWwoKQogewogICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVFdmFsKHRoaXMpOwogfQog
Ci1ib29sIEZ1bmN0aW9uQ29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERGRygpCitib29sIEZ1bmN0
aW9uQ29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERGR0ludGVybmFsKCkKIHsKICAgICBpZiAobV9p
c0NvbnN0cnVjdG9yKQogICAgICAgICByZXR1cm4gREZHOjpjYW5Db21waWxlRnVuY3Rpb25Gb3JD
b25zdHJ1Y3QodGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4OCw3ICszODgsMjIgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQo
RXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBq
ZXR0aXNvbigpID0gMDsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCkg
PSAwOwotICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKSA9IDA7CisKKyAg
ICAgICAgZW51bSBDb21waWxlV2l0aERGR1N0YXRlIHsKKyAgICAgICAgICAgIENvbXBpbGVXaXRo
REZHRmFsc2UsCisgICAgICAgICAgICBDb21waWxlV2l0aERGR1RydWUsCisgICAgICAgICAgICBD
b21waWxlV2l0aERGR1Vuc2V0CisgICAgICAgIH07CisKKyAgICAgICAgdmlydHVhbCBib29sIGNh
bkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKSA9IDA7CisgICAgICAgIGJvb2wgY2FuQ29tcGlsZVdp
dGhERkcoKQorICAgICAgICB7CisgICAgICAgICAgICBib29sIHJlc3VsdCA9IGNhbkNvbXBpbGVX
aXRoREZHSW50ZXJuYWwoKTsKKyAgICAgICAgICAgIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0ZSA9
IHJlc3VsdCA/IENvbXBpbGVXaXRoREZHVHJ1ZSA6IENvbXBpbGVXaXRoREZHRmFsc2U7CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIENvbXBpbGVXaXRoREZH
U3RhdGUgY2FuQ29tcGlsZVdpdGhERkdTdGF0ZSgpIHsgcmV0dXJuIG1fY2FuQ29tcGlsZVdpdGhE
RkdTdGF0ZTsgfQorCiAgICAgICAgIGJvb2wgaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQogICAg
ICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoZ2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2Vs
aW5lSklUKTsKQEAgLTExODcsNiArMTIwMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBm
cmllbmQgdm9pZCBXVEY6OmRlbGV0ZU93bmVkUHRyPFJhcmVEYXRhPihSYXJlRGF0YSopOwogI2Vu
ZGlmCiAgICAgICAgIE93blB0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKKyAgICAgICAgQ29tcGls
ZVdpdGhERkdTdGF0ZSBtX2NhbkNvbXBpbGVXaXRoREZHU3RhdGU7CiAgICAgfTsKIAogICAgIC8v
IFByb2dyYW0gY29kZSBpcyBub3QgbWFya2VkIGJ5IGFueSBmdW5jdGlvbiwgc28gd2UgbWFrZSB0
aGUgZ2xvYmFsIG9iamVjdApAQCAtMTIyNiw3ICsxMjQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2Nv
cGVDaGFpbk5vZGUqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKCk7CiAgICAgICAg
IHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOwotICAgICAgICB2aXJ0dWFsIGJvb2wg
Y2FuQ29tcGlsZVdpdGhERkcoKTsKKyAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRo
REZHSW50ZXJuYWwoKTsKICNlbmRpZgogICAgIH07CiAKQEAgLTEyNjAsNyArMTI3Niw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVk
KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0
aXNvbigpOwogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKLSAgICAg
ICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHKCk7CisgICAgICAgIHZpcnR1YWwgYm9v
bCBjYW5Db21waWxlV2l0aERGR0ludGVybmFsKCk7CiAjZW5kaWYKIAogICAgIHByaXZhdGU6CkBA
IC0xMjk3LDcgKzEzMTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBKU09i
amVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sq
IHJlcGxhY2VtZW50KCk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygp
OworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpOwogI2Vu
ZGlmCiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgogCiAjaWYgRU5B
QkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0RFTUFORCkKKyNpbmNsdWRlICJDb2RlUHJvZmlsaW5n
LmgiCiAjaW5jbHVkZSA8d3RmL01ldGFBbGxvY2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvUGFnZVJl
c2VydmF0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1ZNVGFncy5oPgpAQCAtOTMsNiArOTQsNyBAQCB2
b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxvCiB7CiAgICAgQVNTRVJUKCFh
bGxvY2F0b3IpOwogICAgIGFsbG9jYXRvciA9IG5ldyBEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9y
KCk7CisgICAgQ29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9yKGFsbG9jYXRvcik7CiB9CiAK
IEV4ZWN1dGFibGVBbGxvY2F0b3I6OkV4ZWN1dGFibGVBbGxvY2F0b3IoSlNHbG9iYWxEYXRhJikK
QEAgLTExMiw5ICsxMTQsNyBAQCBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVtb3J5
UHJlCiAKIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9j
YXRvcjo6YWxsb2NhdGUoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBv
d25lclVJRCkKIHsKLSAgICBVTlVTRURfUEFSQU0ob3duZXJVSUQpOwotCi0gICAgUmVmUHRyPEV4
ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUlu
Qnl0ZXMpOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxv
Y2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBvd25lclVJRCk7CiAgICAgaWYgKCFyZXN1bHQp
CiAgICAgICAgIENSQVNIKCk7CiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxs
b2NhdG9yRml4ZWRWTVBvb2wuY3BwCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgPGVycm5vLmg+CiAKKyNpbmNsdWRl
ICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRlIDx1bmlz
dGQuaD4KICNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgpAQCAtOTYsNiArOTcsNyBAQCB2
b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxvCiB7CiAgICAgQVNTRVJUKCFh
bGxvY2F0b3IpOwogICAgIGFsbG9jYXRvciA9IG5ldyBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxv
Y2F0b3IoKTsKKyAgICBDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IoYWxsb2NhdG9yKTsK
IH0KIAogRXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcihKU0dsb2JhbERh
dGEmKQpAQCAtMTE2LDEyICsxMTgsMTAgQEAgYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRl
ck1lbW9yeVByZQogCiBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OmFsbG9jYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHNp
emVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCkKIHsKLSAgICBVTlVTRURfUEFSQU0ob3duZXJVSUQp
OwotCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRv
ci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFu
ZGxlPiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBvd25lclVJRCk7
CiAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoZ2xv
YmFsRGF0YSk7Ci0gICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0
ZXMpOworICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBv
d25lclVJRCk7CiAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAgQ1JBU0goKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24g
MTA2MTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJBcmd1bWVudHMuaCIKICNpbmNs
dWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2Rl
UHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKICNpbmNsdWRlICJEZWJ1Z2dl
ci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKQEAgLTk2OCw3ICs5NjksNyBAQCBO
RVZFUl9JTkxJTkUgdm9pZCBKSVRUaHVua3M6OnRyeUNhY2hlR2V0CiAgICAgSklUOjpjb21waWxl
R2V0QnlJZENoYWluKGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxEYXRhLCBjYWxsRnJh
bWUsIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50
LCBwcm9wZXJ0eU5hbWUsIHNsb3QsIG9mZnNldCwgcmV0dXJuQWRkcmVzcyk7CiB9CiAKLSNpZiAh
ZGVmaW5lZChOREVCVUcpICYmICFFTkFCTEUoQ09ERV9QUk9GSUxJTkcpCisjaWYgIWRlZmluZWQo
TkRFQlVHKQogCiBleHRlcm4gIkMiIHsKIApAQCAtOTg2LDcgKzk4Nyw4IEBAIHN0cnVjdCBTdGFj
a0hhY2sgewogICAgICAgICA6IHN0YWNrRnJhbWUoc3RhY2tGcmFtZSkKICAgICAgICAgLCBzYXZl
ZFJldHVybkFkZHJlc3MoKnN0YWNrRnJhbWUucmV0dXJuQWRkcmVzc1Nsb3QoKSkKICAgICB7Ci0g
ICAgICAgICpzdGFja0ZyYW1lLnJldHVybkFkZHJlc3NTbG90KCkgPSBSZXR1cm5BZGRyZXNzUHRy
KEZ1bmN0aW9uUHRyKGpzY0dlbmVyYXRlZE5hdGl2ZUNvZGUpKTsKKyAgICAgICAgaWYgKCFDb2Rl
UHJvZmlsaW5nOjplbmFibGVkKCkpCisgICAgICAgICAgICAqc3RhY2tGcmFtZS5yZXR1cm5BZGRy
ZXNzU2xvdCgpID0gUmV0dXJuQWRkcmVzc1B0cihGdW5jdGlvblB0cihqc2NHZW5lcmF0ZWROYXRp
dmVDb2RlKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSB+U3RhY2tIYWNrKCkgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2aXNp
b24gMTA2MTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJDb21wbGV0aW9u
LmgiCiAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgi
CiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNs
dWRlICJJbnRlcnByZXRlci5oIgpAQCAtNTUsNiArNTYsOCBAQCBKU1ZhbHVlIGV2YWx1YXRlKEV4
ZWNTdGF0ZSogZXhlYywgU2NvcGVDCiAgICAgSlNMb2NrIGxvY2soZXhlYyk7CiAgICAgQVNTRVJU
KGV4ZWMtPmdsb2JhbERhdGEoKS5pZGVudGlmaWVyVGFibGUgPT0gd3RmVGhyZWFkRGF0YSgpLmN1
cnJlbnRJZGVudGlmaWVyVGFibGUoKSk7CiAKKyAgICBDb2RlUHJvZmlsaW5nIHByb2ZpbGUoc291
cmNlKTsKKwogICAgIFByb2dyYW1FeGVjdXRhYmxlKiBwcm9ncmFtID0gUHJvZ3JhbUV4ZWN1dGFi
bGU6OmNyZWF0ZShleGVjLCBzb3VyY2UpOwogICAgIGlmICghcHJvZ3JhbSkgewogICAgICAgICBp
ZiAocmV0dXJuZWRFeGNlcHRpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
Q29kZVByb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9Db2RlUHJvZmlsZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvQ29kZVByb2ZpbGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQ29kZVByb2ZpbGUuaCIKKworI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgorI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisj
aW5jbHVkZSAiUHJvZmlsZVRyZWVOb2RlLmgiCisjaW5jbHVkZSAiVmVjdG9yLmgiCisjaW5jbHVk
ZSAiV1RGU3RyaW5nLmgiCisjaW5jbHVkZSA8Y3h4YWJpLmg+CisjaW5jbHVkZSA8ZGxmY24uaD4K
KyNpbmNsdWRlIDxleGVjaW5mby5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gTWFwIGZyb20g
Q29kZVR5cGUgZW51bSB0byBhIGNvcnJlc3BvbmRpbmcgbmFtZS4KK2NvbnN0IGNoYXIqIENvZGVQ
cm9maWxlOjpzX2NvZGVUeXBlTmFtZXNbQ29kZVByb2ZpbGU6Ok51bWJlck9mQ29kZVR5cGVzXSA9
IHsKKyAgICAiW1tFbmdpbmVDb2RlXV0iLAorICAgICJbW0dsb2JhbFRodW5rXV0iLAorICAgICJb
W1JlZ0V4cENvZGVdXSIsCisgICAgIltbREZHSklUXV0iLAorICAgICJbW0Jhc2VsaW5lT25seV1d
IiwKKyAgICAiW1tCYXNlbGluZVByb2ZpbGVdXSIsCisgICAgIltbQmFzZWxpbmVPU1JdXSIsCisg
ICAgIltbRW5naW5lRnJhbWVdXSIKK307CisKKy8vIEhlbHBlciBmdW5jdGlvbiwgZmluZCB0aGUg
c3ltYm9sIG5hbWUgZm9yIGEgcGMgaW4gSlNDLgorc3RhdGljIGNvbnN0IGNoYXIqIHN5bWJvbE5h
bWUodm9pZCogYWRkcmVzcykKK3sKKyAgICBEbF9pbmZvIGluZm87CisgICAgaWYgKCFkbGFkZHIo
YWRkcmVzcywgJmluZm8pIHx8ICFpbmZvLmRsaV9zbmFtZSkKKyAgICAgICAgcmV0dXJuICI8dW5r
bm93bj4iOworCisgICAgY29uc3QgY2hhciogbWFuZ2xlZE5hbWUgPSBpbmZvLmRsaV9zbmFtZTsK
KyAgICBjb25zdCBjaGFyKiBjeGFEZW1hbmdsZWQgPSBhYmk6Ol9fY3hhX2RlbWFuZ2xlKG1hbmds
ZWROYW1lLCAwLCAwLCAwKTsKKyAgICByZXR1cm4gY3hhRGVtYW5nbGVkID8gY3hhRGVtYW5nbGVk
IDogbWFuZ2xlZE5hbWU7Cit9CisKKy8vIEhlbHBlciBmdW5jdGlvbiwgdHJ1bmNhdGUgdHJhY2Vz
IHRvIHBydW5lIHRoZSBvdXRwdXQgJiBtYWtlIHZlcnkgdmVyYm9zZSBtb2RlIGEgbGl0dGxlIG1v
cmUgcmVhZGFibGUuCitzdGF0aWMgYm9vbCB0cnVuY2F0ZVRyYWNlKGNvbnN0IGNoYXIqIHN5bWJv
bE5hbWUpCit7CisgICAgcmV0dXJuICFzdHJjbXAoc3ltYm9sTmFtZSwgIkpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmdlbmVyYXRlKCkiKQorICAgICAgICB8fCAhc3RyY21wKHN5bWJvbE5hbWUsICJK
U0M6OlBhcnNlcjxKU0M6OkxleGVyPHVuc2lnbmVkIGNoYXI+ID46OnBhcnNlSW5uZXIoKSIpCisg
ICAgICAgIHx8ICFzdHJjbXAoc3ltYm9sTmFtZSwgIldURjo6ZmFzdE1hbGxvYyh1bnNpZ25lZCBs
b25nKSIpCisgICAgICAgIHx8ICFzdHJjbXAoc3ltYm9sTmFtZSwgIldURjo6Y2FsY3VsYXRlVVRD
T2Zmc2V0KCkiKQorICAgICAgICB8fCAhc3RyY21wKHN5bWJvbE5hbWUsICJKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkiKTsKKyAgICAgICAgCit9CisKKy8vIEVhY2gg
dHJhY2UgY29uc2lzdHMgb2YgYSBzZXF1ZW5jZSBvZiB6ZXJvIG9yIG1vcmUgJ0VuZ2luZUZyYW1l
JyBlbnRyaWVzLAorLy8gZm9sbG93ZWQgYnkgYSBzYW1wbGUgaW4gSklUIGNvZGUsIG9yIG9uZSBv
ciBtb3JlICdFbmdpbmVGcmFtZScgZW50cmllcywKKy8vIGZvbGxvd2VkIGJ5IGEgJ0VuZ2luZUNv
ZGUnIHRlcm1pbmF0b3IuCit2b2lkIENvZGVQcm9maWxlOjpzYW1wbGUodm9pZCogcGMsIHZvaWQq
KiBmcmFtZVBvaW50ZXIpCit7CisgICAgLy8gRGlzYWxsb3cgdHJhY2VzIGNvbnRhaW5pbmcgb25s
eSBhICdFbmdpbmVDb2RlJyB0ZXJtaW5hdG9yLCB3aXRob3V0IGFueSAnRW5naW5lRnJhbWUnIGZy
YW1lcy4KKyAgICBpZiAoIWZyYW1lUG9pbnRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgd2hp
bGUgKGZyYW1lUG9pbnRlcikgeworICAgICAgICBDb2RlVHlwZSB0eXBlOworICAgICAgICB2b2lk
KiBvd25lclVJRCA9IENvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEMocGMpOworCisgICAg
ICAgIC8vIERldGVybWluZSBpZiB0aGlzIHNhbXBsZSBmZWxsIGluIEpJVCBjb2RlLCBhbmQgaWYg
c28sIGZyb20gd2hpY2ggSklUICYgd2h5LgorICAgICAgICBpZiAoIW93bmVyVUlEKQorICAgICAg
ICAgICAgdHlwZSA9IEVuZ2luZUZyYW1lOworICAgICAgICBlbHNlIGlmIChvd25lclVJRCA9PSBH
TE9CQUxfVEhVTktfSUQpCisgICAgICAgICAgICB0eXBlID0gR2xvYmFsVGh1bms7CisgICAgICAg
IGVsc2UgaWYgKG93bmVyVUlEID09IFJFR0VYUF9DT0RFX0lEKQorICAgICAgICAgICAgdHlwZSA9
IFJlZ0V4cENvZGU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihvd25lclVJRCk7CisgICAgICAgICAgICBp
ZiAoY29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKQorICAgICAgICAg
ICAgICAgIHR5cGUgPSBERkdKSVQ7CisgICAgICAgICAgICBlbHNlIGlmIChjb2RlQmxvY2stPmNh
bkNvbXBpbGVXaXRoREZHU3RhdGUoKSA9PSBDb2RlQmxvY2s6OkNvbXBpbGVXaXRoREZHRmFsc2Up
CisgICAgICAgICAgICAgICAgdHlwZSA9IEJhc2VsaW5lT25seTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSkKKyAgICAgICAgICAgICAgICB0eXBlID0gQmFz
ZWxpbmVPU1I7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdHlwZSA9IEJhc2Vs
aW5lUHJvZmlsZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEEgc2FtcGxlIGluIEpJVCBjb2Rl
IHRlcm1pbmF0ZXMgdGhlIHRyYWNlLgorICAgICAgICBtX3NhbXBsZXMuYXBwZW5kKENvZGVSZWNv
cmQocGMsIHR5cGUpKTsKKyAgICAgICAgaWYgKHR5cGUgIT0gRW5naW5lRnJhbWUpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgLy8gV2FsayB1cCB0aGUgc3RhY2suCisjaWYgUExBVEZP
Uk0oTUFDKSAmJiBDUFUoWDg2XzY0KQorICAgICAgICBwYyA9IGZyYW1lUG9pbnRlclsxXTsKKyAg
ICAgICAgZnJhbWVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCpmcmFtZVBvaW50
ZXIpOworI2Vsc2UKKyAgICAgICAgLy8gVGhpcyBwbGF0Zm9ybSBpcyBub3QgeWV0IHN1cHBvcnRl
ZCEKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICB9CisKKyAgICAv
LyBJZiB3ZSBnZXQgaGVyZSwgd2Ugd2Fsa2VkIHRoZSBlbnRpcmUgc3RhY2sgd2l0aG91dCBmaW5k
aW5nIGFueSBmcmFtZXMgb2YgSklUIGNvZGUuCisgICAgbV9zYW1wbGVzLmFwcGVuZChDb2RlUmVj
b3JkKDAsIEVuZ2luZUNvZGUpKTsKK30KKwordm9pZCBDb2RlUHJvZmlsZTo6cmVwb3J0KCkKK3sK
KyAgICBmcHJpbnRmKHN0ZG91dCwgIjxDb2RlUHJvZmlsaW5nICVzOiVkPlxuIiwgbV9maWxlLmRh
dGEoKSwgbV9saW5lTm8pOworCisgICAgLy8gSG93IG1hbnkgZnJhbWVzIG9mIEMtY29kZSB0byBw
cmludCAtIDAsIGlmIG5vdCB2ZXJib3NlLCAxIGlmIHZlcmJvc2UsIHVwIHRvIDEwMjQgaWYgdmVy
eSB2ZXJib3NlLgorICAgIHVuc2lnbmVkIHJlY3Vyc2lvbkxpbWl0ID0gQ29kZVByb2ZpbGluZzo6
YmVWZXJ5VmVyYm9zZSgpID8gMTAyNCA6IENvZGVQcm9maWxpbmc6OmJlVmVyYm9zZSgpOworCisg
ICAgUHJvZmlsZVRyZWVOb2RlIHByb2ZpbGU7CisKKyAgICAvLyBXYWxrIHRocm91Z2ggdGhlIHNh
bXBsZSBidWZmZXIuCisgICAgc2l6ZV90IHRyYWNlID0gMDsKKyAgICB3aGlsZSAodHJhY2UgPCBt
X3NhbXBsZXMuc2l6ZSgpKSB7CisKKyAgICAgICAgLy8gQWxsIHRyYWNlcyBhcmUgemVybyBvciBt
b3JlICdFbmdpbmVGcmFtZSdzLCBmb2xsb3dlZCBieSBhIG5vbi0nRW5naW5lRnJhbWUnLgorICAg
ICAgICAvLyBTY2FuIHRvIGZpbmQgdGhlIGxhc3Qgc2FtcGxlIGluIHRoZSB0cmFjZS4KKyAgICAg
ICAgc2l6ZV90IGxhc3RJblRyYWNlID0gdHJhY2U7CisgICAgICAgIHdoaWxlIChtX3NhbXBsZXNb
bGFzdEluVHJhY2VdLnR5cGUgPT0gRW5naW5lRnJhbWUpCisgICAgICAgICAgICArK2xhc3RJblRy
YWNlOworCisgICAgICAgIC8vIFdlIHVzZSB0aGUgbGFzdCBzYW1wbGUgdHlwZSB0byBsb29rIHVw
IGEgbmFtZSAodXNlZCBhcyBhIGJ1Y2tldCBpbiB0aGUgcHJvZmlsZXIpLgorICAgICAgICBQcm9m
aWxlVHJlZU5vZGUqIGNhbGxiYWNrcyA9IHByb2ZpbGUuc2FtcGxlQ2hpbGQoc19jb2RlVHlwZU5h
bWVzW21fc2FtcGxlc1tsYXN0SW5UcmFjZV0udHlwZV0pOworCisgICAgICAgIC8vIElmIHRoZXJl
IGFyZSBhbnkgc2FtcGxlcyBpbiBDLWNvZGUsIGFkZCB1cCB0byByZWN1cnNpb25MaW1pdCBvZiB0
aGVtIGludG8gdGhlIHByb2ZpbGUgdHJlZS4KKyAgICAgICAgc2l6ZV90IGxhc3RFbmdpbmVGcmFt
ZSA9IGxhc3RJblRyYWNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGNvdW50ID0gMDsgbGFzdEVu
Z2luZUZyYW1lID4gdHJhY2UgJiYgY291bnQgPCByZWN1cnNpb25MaW1pdDsgKytjb3VudCkgewor
ICAgICAgICAgICAgLS1sYXN0RW5naW5lRnJhbWU7CisgICAgICAgICAgICBBU1NFUlQobV9zYW1w
bGVzW2xhc3RFbmdpbmVGcmFtZV0udHlwZSA9PSBFbmdpbmVGcmFtZSk7CisgICAgICAgICAgICBj
b25zdCBjaGFyKiBuYW1lID0gc3ltYm9sTmFtZShtX3NhbXBsZXNbbGFzdEVuZ2luZUZyYW1lXS5w
Yyk7CisgICAgICAgICAgICBjYWxsYmFja3MgPSBjYWxsYmFja3MtPnNhbXBsZUNoaWxkKG5hbWUp
OworICAgICAgICAgICAgaWYgKHRydW5jYXRlVHJhY2UobmFtZSkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBNb3ZlIG9uIHRvIHRoZSBuZXh0IHRyYWNl
LgorICAgICAgICB0cmFjZSA9IGxhc3RJblRyYWNlICsgMTsKKyAgICAgICAgQVNTRVJUKHRyYWNl
IDw9IG1fc2FtcGxlcy5zaXplKCkpOworICAgIH0KKworICAgIC8vIE91dHB1dCB0aGUgcHJvZmls
ZSB0cmVlLgorICAgIGZwcmludGYoc3Rkb3V0LCAiVG90YWwgc2FtcGxlczogJWxsZFxuIiwgcHJv
ZmlsZS5jaGlsZENvdW50KCkpOworICAgIHByb2ZpbGUuZHVtcCgpOworICAgIAorICAgIGZvciAo
c2l6ZV90IGkgPSAwIDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpCisgICAgICAgIG1fY2hp
bGRyZW5baV0tPnJlcG9ydCgpOworCisgICAgZnByaW50ZihzdGRvdXQsICI8L0NvZGVQcm9maWxp
bmcgJXM6JWQ+XG4iLCBtX2ZpbGUuZGF0YSgpLCBtX2xpbmVObyk7Cit9CisKK30KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxlLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBDb2RlUHJvZmlsZV9oCisjZGVmaW5lIENvZGVQcm9maWxlX2gKKworI2lu
Y2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJTb3VyY2VDb2RlLmgiCisjaW5jbHVkZSAiVGll
cmVkTU1hcEFycmF5LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlUHJvZmlsZSB7
CitwdWJsaWM6CisgICAgQ29kZVByb2ZpbGUoY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2Rl
UHJvZmlsZSogcGFyZW50KQorICAgICAgICA6IG1fZmlsZShzb3VyY2UucHJvdmlkZXIoKS0+dXJs
KCkudXRmOCgpKQorICAgICAgICAsIG1fbGluZU5vKHNvdXJjZS5maXJzdExpbmUoKSkKKyAgICAg
ICAgLCBtX3BhcmVudChwYXJlbnQpCisgICAgeworICAgICAgICBpZiAocGFyZW50KQorICAgICAg
ICAgICAgcGFyZW50LT5hZGRDaGlsZCh0aGlzKTsKKyAgICB9CisKKyAgICB2b2lkIHNhbXBsZSh2
b2lkKiBwYywgdm9pZCoqIGZyYW1lUG9pbnRlcik7CisgICAgdm9pZCByZXBvcnQoKTsKKworICAg
IENvZGVQcm9maWxlKiBwYXJlbnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcGFyZW50Owor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZENoaWxkKENvZGVQcm9maWxlKiBjaGlsZCkKKyAgICB7
CisgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKGFkb3B0UHRyKGNoaWxkKSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIGVudW0gQ29kZVR5cGUgeworICAgICAgICBFbmdpbmVDb2RlLAorICAgICAg
ICBHbG9iYWxUaHVuaywKKyAgICAgICAgUmVnRXhwQ29kZSwKKyAgICAgICAgREZHSklULAorICAg
ICAgICBCYXNlbGluZU9ubHksCisgICAgICAgIEJhc2VsaW5lUHJvZmlsZSwKKyAgICAgICAgQmFz
ZWxpbmVPU1IsCisgICAgICAgIEVuZ2luZUZyYW1lLAorICAgICAgICBOdW1iZXJPZkNvZGVUeXBl
cworICAgIH07CisgICAgc3RydWN0IENvZGVSZWNvcmQgeworICAgICAgICBDb2RlUmVjb3JkKHZv
aWQqIHBjLCBDb2RlVHlwZSB0eXBlKQorICAgICAgICAgICAgOiBwYyhwYykKKyAgICAgICAgICAg
ICwgdHlwZSh0eXBlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCogcGM7Cisg
ICAgICAgIENvZGVUeXBlIHR5cGU7CisgICAgfTsKKworICAgIENTdHJpbmcgbV9maWxlOworICAg
IHVuc2lnbmVkIG1fbGluZU5vOworICAgIENvZGVQcm9maWxlKiBtX3BhcmVudDsKKyAgICBWZWN0
b3I8IE93blB0cjxDb2RlUHJvZmlsZT4gPiBtX2NoaWxkcmVuOworICAgIFRpZXJlZE1NYXBBcnJh
eTxDb2RlUmVjb3JkPiBtX3NhbXBsZXM7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogc19jb2Rl
VHlwZU5hbWVzW051bWJlck9mQ29kZVR5cGVzXTsKK307CisKK30KKworI2VuZGlmIC8vIENvZGVQ
cm9maWxlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxp
bmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJv
ZmlsaW5nLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9D
b2RlUHJvZmlsaW5nLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKKworI2luY2x1ZGUgIkNvZGVQcm9maWxlLmgi
CisjaW5jbHVkZSAiTWV0YUFsbG9jYXRvci5oIgorI2luY2x1ZGUgInNpZ25hbC5oIgorCituYW1l
c3BhY2UgSlNDIHsKKwordm9sYXRpbGUgQ29kZVByb2ZpbGUqIENvZGVQcm9maWxpbmc6OnNfcHJv
ZmlsZVN0YWNrID0gMDsKK0NvZGVQcm9maWxpbmc6Ok1vZGUgQ29kZVByb2ZpbGluZzo6c19tb2Rl
ID0gQ29kZVByb2ZpbGluZzo6RGlzYWJsZWQ7CitXVEY6Ok1ldGFBbGxvY2F0b3JUcmFja2VyKiBD
b2RlUHJvZmlsaW5nOjpzX3RyYWNrZXIgPSAwOworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gc3Rh
cnQgJiBzdG9wIHRoZSB0aW1lci4KKy8vIFByZXNlbnRseSB3ZSdyZSB1c2luZyB0aGUgd2FsbC1j
bG9jayB0aW1lciwgc2luY2UgdGhpcyBzZWVtcyB0byBnaXZlIHRoZSBiZXN0IHJlc3VsdHMuCitz
dGF0aWMgdm9pZCBzZXRQcm9maWxlVGltZXIodW5zaWduZWQgdXNlYykKK3sKKyAgICBpdGltZXJ2
YWwgdGltZXI7CisgICAgdGltZXIuaXRfdmFsdWUudHZfc2VjID0gMDsKKyAgICB0aW1lci5pdF92
YWx1ZS50dl91c2VjID0gdXNlYzsKKyAgICB0aW1lci5pdF9pbnRlcnZhbC50dl9zZWMgPSAwOwor
ICAgIHRpbWVyLml0X2ludGVydmFsLnR2X3VzZWMgPSB1c2VjOworICAgIHNldGl0aW1lcihJVElN
RVJfUkVBTCwgJnRpbWVyLCAwKTsKK30KKworLy8gQ2FsbGJhY2sgdHJpZ2dlcmVkIHdoZW4gdGhl
IHRpbWVyIGlzIGZpcmVkLgordm9pZCBDb2RlUHJvZmlsaW5nOjpwcm9maWxpbmdUaW1lcihpbnQs
IHNpZ2luZm9fdCosIHZvaWQqIHVhcCkKK3sKKyNpZiBQTEFURk9STShNQUMpICYmIENQVShYODZf
NjQpCisgICAgbWNvbnRleHRfdCBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVh
cCktPnVjX21jb250ZXh0OworICAgIENvZGVQcm9maWxlKiBwcm9maWxlU3RhY2sgPSAoQ29kZVBy
b2ZpbGUqKXNfcHJvZmlsZVN0YWNrOworICAgIGlmIChwcm9maWxlU3RhY2spCisgICAgICAgIHBy
b2ZpbGVTdGFjay0+c2FtcGxlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNvbnRleHQtPl9fc3Mu
X19yaXApLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oY29udGV4dC0+X19zcy5fX3JicCkpOwor
I2VuZGlmCit9CisKK3ZvaWQgQ29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9yKFdURjo6TWV0
YUFsbG9jYXRvciogYWxsb2NhdG9yKQoreworICAgIC8vIENoZWNrIGZvciBKU0NfQ09ERV9QUk9G
SUxJTkcuCisgICAgY29uc3QgY2hhciogY29kZVByb2ZpbGluZ01vZGUgPSBnZXRlbnYoIkpTQ19D
T0RFX1BST0ZJTElORyIpOworICAgIGlmICghY29kZVByb2ZpbGluZ01vZGUpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIENoZWNrIGZvciBhIHZhbGlkIG1vZGUsIGN1cnJlbnRseSAiMSIsICIy
Iiwgb3IgIjMiLgorICAgIGlmICghY29kZVByb2ZpbGluZ01vZGVbMF0gfHwgY29kZVByb2ZpbGlu
Z01vZGVbMV0pCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKCpjb2RlUHJvZmlsaW5nTW9k
ZSkgeworICAgIGNhc2UgJzEnOgorICAgICAgICBzX21vZGUgPSBFbmFibGVkOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlICcyJzoKKyAgICAgICAgc19tb2RlID0gVmVyYm9zZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSAnMyc6CisgICAgICAgIHNfbW9kZSA9IFZlcnlWZXJib3NlOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
QVNTRVJUKGVuYWJsZWQoKSk7CisgICAgQVNTRVJUKCFzX3RyYWNrZXIpOworICAgIHNfdHJhY2tl
ciA9IG5ldyBXVEY6Ok1ldGFBbGxvY2F0b3JUcmFja2VyKCk7CisgICAgYWxsb2NhdG9yLT50cmFj
a0FsbG9jYXRpb25zKHNfdHJhY2tlcik7Cit9CisKK3ZvaWQqIENvZGVQcm9maWxpbmc6OmdldE93
bmVyVUlERm9yUEModm9pZCogYWRkcmVzcykKK3sKKyAgICBpZiAoIXNfdHJhY2tlcikKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBzX3Ry
YWNrZXItPmZpbmQoYWRkcmVzcyk7CisgICAgaWYgKCFoYW5kbGUpCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBoYW5kbGUtPm93bmVyVUlEKCk7Cit9CisKK3ZvaWQgQ29kZVByb2ZpbGlu
Zzo6YmVnaW4oY29uc3QgU291cmNlQ29kZSYgc291cmNlKQoreworICAgIC8vIFB1c2ggYSBuZXcg
Q29kZVByb2ZpbGUgb250byB0aGUgc3RhY2sgZm9yIGVhY2ggc2NyaXB0IGVuY291bnRlcmVkLgor
ICAgIENvZGVQcm9maWxlKiBwcm9maWxlU3RhY2sgPSBjb25zdF9jYXN0PENvZGVQcm9maWxlKj4o
c19wcm9maWxlU3RhY2spOworICAgIGJvb2wgYWxyZWFkeVByb2ZpbGluZyA9IHByb2ZpbGVTdGFj
azsKKyAgICBzX3Byb2ZpbGVTdGFjayA9IHByb2ZpbGVTdGFjayA9IG5ldyBDb2RlUHJvZmlsZShz
b3VyY2UsIHByb2ZpbGVTdGFjayk7CisKKyAgICAvLyBJcyB0aGUgcHJvZmlsZXIgYWxyZWFkeSBy
dW5uaW5nIC0gaWYgc28sIHRoZSB0aW1lciB3aWxsIGFscmVhZHkgYmUgc2V0IHVwLgorICAgIGlm
IChhbHJlYWR5UHJvZmlsaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBSZWdzaXRlciBh
IHNpZ25hbCBoYW5kbGVyICYgaXRpbWVyLgorICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOwor
ICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSByZWludGVycHJldF9jYXN0PHZvaWQgKCopKGludCwg
c3RydWN0IF9fc2lnaW5mbyAqLCB2b2lkICopPihwcm9maWxpbmdUaW1lcik7CisgICAgc2lnZmls
bHNldCgmYWN0aW9uLnNhX21hc2spOworICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87
CisgICAgc2lnYWN0aW9uKFNJR0FMUk0sICZhY3Rpb24sIDApOworICAgIHNldFByb2ZpbGVUaW1l
cigxMDApOworfQorCit2b2lkIENvZGVQcm9maWxpbmc6OmVuZCgpCit7CisgICAgLy8gUG9wIHRo
ZSBjdXJyZW50IHByb2ZpbGVyIG9mZiB0aGUgc3RhY2suCisgICAgQ29kZVByb2ZpbGUqIGN1cnJl
bnQgPSBjb25zdF9jYXN0PENvZGVQcm9maWxlKj4oc19wcm9maWxlU3RhY2spOworICAgIEFTU0VS
VChjdXJyZW50KTsKKyAgICBzX3Byb2ZpbGVTdGFjayA9IGN1cnJlbnQtPnBhcmVudCgpOworCisg
ICAgLy8gSXMgdGhpcyB0aGUgb3V0ZXJtb3N0IHNjcmlwdCBiZWluZyBwcm9maWxlZD8gLSBpZiBu
b3QsIGp1c3QgcmV0dXJuLgorICAgIC8vIFdlIHBlcmZvcm0gYWxsIG91dHB1dCBvZiBwcm9maWxl
cyByZWN1cnNpdmVseSBmcm9tIHRoZSBvdXRlcm1vc3Qgc2NyaXB0LAorICAgIC8vIHRvIG1pbmlt
aXplIHByb2ZpbGluZyBvdmVyaGVhZCBmcm9tIHNrZXdpbmcgcmVzdWx0cy4KKyAgICBpZiAoc19w
cm9maWxlU3RhY2spCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFN0b3AgcHJvZmlsaW5nCisg
ICAgc2V0UHJvZmlsZVRpbWVyKDApOworCisgICAgY3VycmVudC0+cmVwb3J0KCk7CisgICAgZGVs
ZXRlIGN1cnJlbnQ7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9D
b2RlUHJvZmlsaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L0NvZGVQcm9maWxpbmcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9Db2RlUHJvZmlsaW5nLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDb2RlUHJv
ZmlsaW5nX2gKKyNkZWZpbmUgQ29kZVByb2ZpbGluZ19oCisKK25hbWVzcGFjZSBXVEYgeworCitj
bGFzcyBNZXRhQWxsb2NhdG9yOworY2xhc3MgTWV0YUFsbG9jYXRvclRyYWNrZXI7CisKK30KKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVQcm9maWxlOworY2xhc3MgU291cmNlQ29kZTsK
KworY2xhc3MgQ29kZVByb2ZpbGluZyB7CisgICAgZW51bSBNb2RlIHsKKyAgICAgICAgRGlzYWJs
ZWQsCisgICAgICAgIEVuYWJsZWQsCisgICAgICAgIFZlcmJvc2UsCisgICAgICAgIFZlcnlWZXJi
b3NlCisgICAgfTsKKworcHVibGljOgorICAgIENvZGVQcm9maWxpbmcoY29uc3QgU291cmNlQ29k
ZSYgc291cmNlKQorICAgICAgICA6IG1fYWN0aXZlKGVuYWJsZWQoKSkKKyAgICB7CisgICAgICAg
IGlmIChtX2FjdGl2ZSkKKyAgICAgICAgICAgIGJlZ2luKHNvdXJjZSk7CisgICAgfQorCisgICAg
fkNvZGVQcm9maWxpbmcoKQorICAgIHsKKyAgICAgICAgaWYgKG1fYWN0aXZlKQorICAgICAgICAg
ICAgZW5kKCk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZW5hYmxlZCgpIHsgcmV0dXJuIHNf
bW9kZSAhPSBEaXNhYmxlZDsgfQorICAgIHN0YXRpYyBib29sIGJlVmVyYm9zZSgpIHsgcmV0dXJu
IHNfbW9kZSA+PSBWZXJib3NlOyB9CisgICAgc3RhdGljIGJvb2wgYmVWZXJ5VmVyYm9zZSgpIHsg
cmV0dXJuIHNfbW9kZSA+PSBWZXJ5VmVyYm9zZTsgfQorCisgICAgc3RhdGljIHZvaWQgbm90aWZ5
QWxsb2NhdG9yKFdURjo6TWV0YUFsbG9jYXRvciopOworICAgIHN0YXRpYyB2b2lkKiBnZXRPd25l
clVJREZvclBDKHZvaWQqKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGJlZ2luKGNvbnN0IFNvdXJj
ZUNvZGUmKTsKKyAgICB2b2lkIGVuZCgpOworCisgICAgYm9vbCBtX2FjdGl2ZTsKKworICAgIHN0
YXRpYyB2b2lkIHByb2ZpbGluZ1RpbWVyKGludCwgc2lnaW5mb190Kiwgdm9pZCopOworCisgICAg
c3RhdGljIE1vZGUgc19tb2RlOworICAgIHN0YXRpYyBXVEY6Ok1ldGFBbGxvY2F0b3JUcmFja2Vy
KiBzX3RyYWNrZXI7CisgICAgc3RhdGljIHZvbGF0aWxlIENvZGVQcm9maWxlKiBzX3Byb2ZpbGVT
dGFjazsKK307CisKK30KKworI2VuZGlmIC8vIENvZGVQcm9maWxpbmdfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIFByb2ZpbGVUcmVlTm9kZV9oCisjZGVmaW5lIFByb2Zp
bGVUcmVlTm9kZV9oCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBQcm9maWxlVHJlZU5vZGUg
eworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFByb2ZpbGVUcmVlTm9kZT4gTWFwOworICAg
IHR5cGVkZWYgc3RkOjpwYWlyPFN0cmluZywgUHJvZmlsZVRyZWVOb2RlPiBNYXBFbnRyeTsKKwor
cHVibGljOgorICAgIFByb2ZpbGVUcmVlTm9kZSgpCisgICAgICAgIDogbV9jb3VudCgwKQorICAg
ICAgICAsIG1fY2hpbGRyZW4oMCkKKyAgICB7CisgICAgfQorCisgICAgflByb2ZpbGVUcmVlTm9k
ZSgpCisgICAgeworICAgICAgICBkZWxldGUgbV9jaGlsZHJlbjsKKyAgICB9CisKKyAgICBQcm9m
aWxlVHJlZU5vZGUqIHNhbXBsZUNoaWxkKGNvbnN0IGNoYXIqIG5hbWUpCisgICAgeworICAgICAg
ICBpZiAoIW1fY2hpbGRyZW4pCisgICAgICAgICAgICBtX2NoaWxkcmVuID0gbmV3IE1hcCgpOwor
ICAgIAorICAgICAgICBQcm9maWxlVHJlZU5vZGUgbmV3RW50cnk7CisgICAgICAgIHBhaXI8TWFw
OjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9jaGlsZHJlbi0+YWRkKFN0cmluZyhuYW1lKSwg
bmV3RW50cnkpOworICAgICAgICBQcm9maWxlVHJlZU5vZGUqIGNoaWxkSW5NYXAgPSAmcmVzdWx0
LmZpcnN0LT5zZWNvbmQ7CisgICAgICAgICsrY2hpbGRJbk1hcC0+bV9jb3VudDsKKyAgICAgICAg
cmV0dXJuIGNoaWxkSW5NYXA7CisgICAgfQorCisgICAgdm9pZCBkdW1wKCkKKyAgICB7CisgICAg
ICAgIGR1bXBJbnRlcm5hbCgwKTsKKyAgICB9CisKKyAgICB1aW50NjRfdCBjb3VudCgpCisgICAg
eworICAgICAgICByZXR1cm4gbV9jb3VudDsKKyAgICB9CisKKyAgICB1aW50NjRfdCBjaGlsZENv
dW50KCkKKyAgICB7CisgICAgICAgIGlmICghbV9jaGlsZHJlbikKKyAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICB1aW50NjRfdCBjaGlsZENvdW50ID0gMDsKKyAgICAgICAgZm9yIChNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi0+YmVnaW4oKTsgaXQgIT0gbV9jaGlsZHJlbi0+ZW5k
KCk7ICsraXQpCisgICAgICAgICAgICBjaGlsZENvdW50ICs9IGl0LT5zZWNvbmQuY291bnQoKTsK
KyAgICAgICAgcmV0dXJuIGNoaWxkQ291bnQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB2
b2lkIGR1bXBJbnRlcm5hbCh1bnNpZ25lZCBpbmRlbnQpCisgICAgeworICAgICAgICBpZiAoIW1f
Y2hpbGRyZW4pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gQ29weSBwb2ludGVy
cyB0byBhbGwgY2hpbGRyZW4gaW50byBhIHZlY3RvciwgYW5kIHNvcnQgdGhlIHZlY3RvciBieSBz
YW1wbGUgY291bnQuCisgICAgICAgIFZlY3RvcjxNYXBFbnRyeSo+IGVudHJpZXM7CisgICAgICAg
IGZvciAoTWFwOjppdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4tPmJlZ2luKCk7IGl0ICE9IG1fY2hp
bGRyZW4tPmVuZCgpOyArK2l0KQorICAgICAgICAgICAgZW50cmllcy5hcHBlbmQoJippdCk7Cisg
ICAgICAgIHFzb3J0KGVudHJpZXMuYmVnaW4oKSwgZW50cmllcy5zaXplKCksIHNpemVvZihNYXBF
bnRyeSopLCBjb21wYXJlRW50cmllcyk7CisKKyAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBj
aGlsZHJlbiBpbiBzYW1wbGUtZnJlcXVlbmN5IG9yZGVyLgorICAgICAgICBmb3IgKHNpemVfdCBl
ID0gMDsgZSA8IGVudHJpZXMuc2l6ZSgpOyArK2UpIHsKKyAgICAgICAgICAgIE1hcEVudHJ5KiBl
bnRyeSA9IGVudHJpZXNbZV07CisKKyAgICAgICAgICAgIC8vIFByaW50IHRoZSBudW1iZXIgb2Yg
c2FtcGxlcywgdGhlIG5hbWUgb2YgdGhpcyBub2RlLCBhbmQgdGhlIG51bWJlciBvZiBzYW1wbGVz
IHRoYXQgYXJlIHN0YWNrLXRvcAorICAgICAgICAgICAgLy8gaW4gdGhpcyBub2RlIChzYW1wbGVz
IGRpcmVjdGx5IHdpdGhpbiB0aGlzIG5vZGUsIGV4Y2x1ZGluZyBzYW1wbGVzIGluIGNoaWxkcmVu
LgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluZGVudDsgKytpKQorICAg
ICAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiICAgICIpOworICAgICAgICAgICAgZnByaW50
ZihzdGRvdXQsICIlIDhsbGQ6ICVzICglbGxkIHN0YWNrIHRvcClcbiIsCisgICAgICAgICAgICAg
ICAgZW50cnktPnNlY29uZC5jb3VudCgpLAorICAgICAgICAgICAgICAgIGVudHJ5LT5maXJzdC51
dGY4KCkuZGF0YSgpLAorICAgICAgICAgICAgICAgIGVudHJ5LT5zZWNvbmQuY291bnQoKSAtIGVu
dHJ5LT5zZWNvbmQuY2hpbGRDb3VudCgpKTsKKworICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkg
ZHVtcCB0aGUgY2hpbGQgbm9kZXMuCisgICAgICAgICAgICBlbnRyeS0+c2Vjb25kLmR1bXBJbnRl
cm5hbChpbmRlbnQgKyAxKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBpbnQgY29t
cGFyZUVudHJpZXMoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKKyAgICB7CisgICAgICAg
IHVpbnQ2NF90IGRhID0gKCpzdGF0aWNfY2FzdDxNYXBFbnRyeSogY29uc3QgKj4oYSkpLT5zZWNv
bmQuY291bnQoKTsKKyAgICAgICAgdWludDY0X3QgZGIgPSAoKnN0YXRpY19jYXN0PE1hcEVudHJ5
KiBjb25zdCAqPihiKSktPnNlY29uZC5jb3VudCgpOworICAgICAgICByZXR1cm4gKGRhIDwgZGIp
IC0gKGRhID4gZGIpOworICAgIH0KKworICAgIHVpbnQ2NF90IG1fY291bnQ7CisgICAgTWFwKiBt
X2NoaWxkcmVuOworfTsKKworfQorCisjZW5kaWYgLy8gUHJvZmlsZVRyZWVOb2RlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1RpZXJlZE1NYXBBcnJheS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9UaWVyZWRNTWFwQXJyYXkuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9UaWVyZWRNTWFwQXJyYXku
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUaWVyZWRNTWFwQXJyYXlfaAorI2RlZmlu
ZSBUaWVyZWRNTWFwQXJyYXlfaAorCisjaW5jbHVkZSAiT1NBbGxvY2F0b3IuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKKy8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIHNpbXBsZSBhcnJheSBjbGFz
cyB0aGF0IGNhbiBiZSBncm93biBieSBhcHBlbmRpbmcgaXRlbXMgdG8gdGhlIGVuZC4KKy8vIFRo
aXMgY2xhc3MgaXMgaW1wbGVtZW50ZWQgcHVyZWx5IGluIHRlcm1zIG9mIHN5c3RlbSBhbGxvY2F0
aW9ucywgd2l0aCBubyBtYWxsb2MvZnJlZSwgc28gdGhhdAorLy8gaXQgY2FuIHNhZmVseSBiZSB1
c2VkIGZyb20gYSBzZWNvbmRhcnkgdGhyZWFkIHdoaWxzdCB0aGUgbWFpbiB0aHJhZCBpcyBwYXVz
ZWQgKHBvdGVudGlhbGx5CisvLyBob2xkaW5nIHRoZSBmYXN0IG1hbGxvYyBoZWFwIGxvY2spLgor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIFRpZXJlZE1NYXBBcnJheSB7CisgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBlbnRyaWVzUGVyQmxvY2sgPSA0MDk2OworCitwdWJsaWM6CisgICAgVGll
cmVkTU1hcEFycmF5KCkKKyAgICAgICAgOiBtX2RpcmVjdG9yeUNvdW50KDQwOTYpCisgICAgICAg
ICwgbV9kaXJlY3Rvcnkoc3RhdGljX2Nhc3Q8VCoqPihPU0FsbG9jYXRvcjo6cmVzZXJ2ZUFuZENv
bW1pdChtX2RpcmVjdG9yeUNvdW50ICogc2l6ZW9mKFQqKSkpKQorICAgICAgICAsIG1fc2l6ZSgw
KQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgYmxvY2sgPSAwOyBibG9jayA8IG1fZGlyZWN0
b3J5Q291bnQ7ICsrYmxvY2spCisgICAgICAgICAgICBtX2RpcmVjdG9yeVtibG9ja10gPSAwOwor
ICAgIH0KKworICAgIH5UaWVyZWRNTWFwQXJyYXkoKQorICAgIHsKKyAgICAgICAgc2l6ZV90IHVz
ZWRDb3VudCA9IChtX3NpemUgKyAoZW50cmllc1BlckJsb2NrIC0gMSkpIC8gZW50cmllc1BlckJs
b2NrOworICAgICAgICBBU1NFUlQodXNlZENvdW50ID09IG1fZGlyZWN0b3J5Q291bnQgfHwgIW1f
ZGlyZWN0b3J5W3VzZWRDb3VudF0pOworCisgICAgICAgIGZvciAoc2l6ZV90IGJsb2NrID0gMDsg
YmxvY2sgPCB1c2VkQ291bnQ7ICsrYmxvY2spIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2RpcmVj
dG9yeVtibG9ja10pOworICAgICAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFz
ZShtX2RpcmVjdG9yeVtibG9ja10sIGVudHJpZXNQZXJCbG9jayAqIHNpemVvZihUKSk7CisgICAg
ICAgIH0KKworICAgICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKG1fZGlyZWN0
b3J5LCBtX2RpcmVjdG9yeUNvdW50ICogc2l6ZW9mKFQqKSk7CisgICAgfQorCisgICAgVCYgb3Bl
cmF0b3JbXShzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoaW5kZXggPCBtX3Np
emUpOworICAgICAgICBzaXplX3QgYmxvY2sgPSBpbmRleCAvIGVudHJpZXNQZXJCbG9jazsKKyAg
ICAgICAgc2l6ZV90IG9mZnNldCA9IGluZGV4ICUgZW50cmllc1BlckJsb2NrOworCisgICAgICAg
IEFTU0VSVChtX2RpcmVjdG9yeVtibG9ja10pOworICAgICAgICByZXR1cm4gbV9kaXJlY3Rvcnlb
YmxvY2tdW29mZnNldF07CisgICAgfQorCisgICAgdm9pZCBhcHBlbmQoY29uc3QgVCYgdmFsdWUp
CisgICAgeworICAgICAgICAvLyBDaGVjayBpZiB0aGUgYXJyYXkgaXMgY29tcGxldGVseSBmdWxs
LCBpZiBzbyBjcmVhdGUgbW9yZSBjYXBhY2l0eSBpbiB0aGUgZGlyZWN0b3J5LgorICAgICAgICBp
ZiAobV9zaXplID09IG1fZGlyZWN0b3J5Q291bnQgKiBlbnRyaWVzUGVyQmxvY2spIHsKKyAgICAg
ICAgICAgIC8vIFJlYWxsb2NhdGUgdGhlIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIHNpemVfdCBv
bGREaXJlY3RvcnlTaXplID0gbV9kaXJlY3RvcnlDb3VudCAqIHNpemVvZihUKik7CisgICAgICAg
ICAgICBzaXplX3QgbmV3RGlyZWN0b3J5U2l6ZSA9IG9sZERpcmVjdG9yeVNpemUgKiAyOworICAg
ICAgICAgICAgaWYgKG5ld0RpcmVjdG9yeVNpemUgPCBvbGREaXJlY3RvcnlTaXplKQorICAgICAg
ICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBtX2RpcmVjdG9yeSA9IE9TQWxsb2NhdG9y
OjpyZWFsbG9jYXRlQ29tbWl0dGVkKG1fZGlyZWN0b3J5LCBvbGREaXJlY3RvcnlTaXplLCBuZXdE
aXJlY3RvcnlTaXplKTsKKworICAgICAgICAgICAgLy8gCisgICAgICAgICAgICBzaXplX3QgbmV3
RGlyZWN0b3J5Q291bnQgPSBtX2RpcmVjdG9yeUNvdW50ICogMjsKKyAgICAgICAgICAgIGZvciAo
c2l6ZV90IGJsb2NrID0gbV9kaXJlY3RvcnlDb3VudDsgYmxvY2sgPCBuZXdEaXJlY3RvcnlDb3Vu
dDsgKytibG9jaykKKyAgICAgICAgICAgICAgICBtX2RpcmVjdG9yeVtibG9ja10gPSAwOworICAg
ICAgICAgICAgbV9kaXJlY3RvcnlDb3VudCA9IG5ld0RpcmVjdG9yeUNvdW50OworICAgICAgICB9
CisKKyAgICAgICAgc2l6ZV90IGluZGV4ID0gbV9zaXplOworICAgICAgICBzaXplX3QgYmxvY2sg
PSBpbmRleCAvIGVudHJpZXNQZXJCbG9jazsKKyAgICAgICAgc2l6ZV90IG9mZnNldCA9IGluZGV4
ICUgZW50cmllc1BlckJsb2NrOworCisgICAgICAgIGlmICghb2Zmc2V0KSB7CisgICAgICAgICAg
ICBBU1NFUlQoIW1fZGlyZWN0b3J5W2Jsb2NrXSk7CisgICAgICAgICAgICBtX2RpcmVjdG9yeVti
bG9ja10gPSBzdGF0aWNfY2FzdDxUKj4oT1NBbGxvY2F0b3I6OnJlc2VydmVBbmRDb21taXQoZW50
cmllc1BlckJsb2NrICogc2l6ZW9mKFQpKSk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQo
bV9kaXJlY3RvcnlbYmxvY2tdKTsKKyAgICAgICAgKyttX3NpemU7CisgICAgICAgIG1fZGlyZWN0
b3J5W2Jsb2NrXVtvZmZzZXRdID0gdmFsdWU7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBj
b25zdCB7IHJldHVybiBtX3NpemU7IH0KKworcHJpdmF0ZToKKyAgICBzaXplX3QgbV9kaXJlY3Rv
cnlDb3VudDsKKyAgICBUKiogbV9kaXJlY3Rvcnk7CisgICAgc2l6ZV90IG1fc2l6ZTsKK307CisK
K30KKworI2VuZGlmIC8vIFRpZXJlZE1NYXBBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMTA2MTUwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTUsMTAgKzU1LDExIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBNZXRhQWxsb2NhdG9yOjpyZWxl
YXMKICAgICAgICAgbV90cmFja2VyLT5yZWxlYXNlKGhhbmRsZSk7CiB9CiAKLU1ldGFBbGxvY2F0
b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciogYWxsb2NhdG9yLCB2
b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQorTWV0YUFsbG9jYXRvckhhbmRsZTo6TWV0
YUFsbG9jYXRvckhhbmRsZShNZXRhQWxsb2NhdG9yKiBhbGxvY2F0b3IsIHZvaWQqIHN0YXJ0LCBz
aXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKQogICAgIDogbV9hbGxvY2F0b3IoYWxs
b2NhdG9yKQogICAgICwgbV9zdGFydChzdGFydCkKICAgICAsIG1fc2l6ZUluQnl0ZXMoc2l6ZUlu
Qnl0ZXMpCisgICAgLCBtX293bmVyVUlEKG93bmVyVUlEKQogewogICAgIEFTU0VSVChhbGxvY2F0
b3IpOwogICAgIEFTU0VSVChzdGFydCk7CkBAIC0xMjksNyArMTMwLDcgQEAgTWV0YUFsbG9jYXRv
cjo6TWV0YUFsbG9jYXRvcihzaXplX3QgYWxsbwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXpl
X3Q+KDEpIDw8IG1fbG9nQWxsb2NhdGlvbkdyYW51bGUgPT0gbV9hbGxvY2F0aW9uR3JhbnVsZSk7
CiB9CiAKLVBhc3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFsbG9jYXRvcjo6YWxs
b2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzKQorUGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxl
PiBNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVy
VUlEKQogewogICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKIApAQCAtMTY3LDcg
KzE2OCw3IEBAIFBhc3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFsbG8KICAgICBt
X251bUFsbG9jYXRpb25zKys7CiAjZW5kaWYKIAotICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhh
bmRsZSA9IG5ldyBNZXRhQWxsb2NhdG9ySGFuZGxlKHRoaXMsIHN0YXJ0LCBzaXplSW5CeXRlcyk7
CisgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gbmV3IE1ldGFBbGxvY2F0b3JIYW5k
bGUodGhpcywgc3RhcnQsIHNpemVJbkJ5dGVzLCBvd25lclVJRCk7CiAgICAgLy8gRklYTUU6IElt
cGxlbWVudCBhIHZlcmlmaWVyIHNjaGVtZSB0aGF0IGdyb2tzIE1ldGFBbGxvY2F0b3JIYW5kbGVz
CiAgICAgaGFuZGxlLT5kZXByZWNhdGVkVHVybk9mZlZlcmlmaWVyKCk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5oCShyZXZpc2lvbiAxMDYxNTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCB+TWV0YUFsbG9j
YXRvcigpOwogICAgIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSBQYXNzUmVmUHRyPE1ldGFBbGxv
Y2F0b3JIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcyk7CisgICAgV1RGX0VYUE9S
VF9QUklWQVRFIFBhc3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90
IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCk7CiAKICAgICB2b2lkIHRyYWNrQWxsb2NhdGlv
bnMoTWV0YUFsbG9jYXRvclRyYWNrZXIqIHRyYWNrZXIpCiAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlzaW9uIDEw
NjE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIE1ldGFBbGxvY2F0b3I7CiAK
IGNsYXNzIE1ldGFBbGxvY2F0b3JIYW5kbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxNZXRhQWxsb2Nh
dG9ySGFuZGxlPiwgcHVibGljIFJlZEJsYWNrVHJlZTxNZXRhQWxsb2NhdG9ySGFuZGxlLCB2b2lk
Kj46Ok5vZGUgewogcHJpdmF0ZToKLSAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0
b3IqLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKTsKKyAgICBNZXRhQWxsb2NhdG9y
SGFuZGxlKE1ldGFBbGxvY2F0b3IqLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2
b2lkKiBvd25lclVJRCk7CiAgICAgCiBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5N
ZXRhQWxsb2NhdG9ySGFuZGxlKCk7CkBAIC03Miw3ICs3MiwxMiBAQCBwdWJsaWM6CiAgICAgICAg
IEFTU0VSVChtX2FsbG9jYXRvcik7CiAgICAgICAgIHJldHVybiBtX2FsbG9jYXRvcjsKICAgICB9
Ci0gICAgCisKKyAgICB2b2lkKiBvd25lclVJRCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9v
d25lclVJRDsKKyAgICB9CisKICAgICB2b2lkKiBrZXkoKQogICAgIHsKICAgICAgICAgcmV0dXJu
IG1fc3RhcnQ7CkBAIC04NCw2ICs4OSw3IEBAIHByaXZhdGU6CiAgICAgTWV0YUFsbG9jYXRvciog
bV9hbGxvY2F0b3I7CiAgICAgdm9pZCogbV9zdGFydDsKICAgICBzaXplX3QgbV9zaXplSW5CeXRl
czsKKyAgICB2b2lkKiBtX293bmVyVUlEOwogfTsKIAogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9PU0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvT1NBbGxvY2F0b3IuaAkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9PU0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3
IEBACiAjaWZuZGVmIE9TQWxsb2NhdG9yX2gKICNkZWZpbmUgT1NBbGxvY2F0b3JfaAogCisjaW5j
bHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogI2luY2x1ZGUg
PHd0Zi9WTVRhZ3MuaD4KICNpbmNsdWRlIDx3dGYvVk1UYWdzLmg+CkBAIC02NSw2ICs2NiwxMiBA
QCBwdWJsaWM6CiAgICAgLy8gc3BlY2lmaWVkLgogICAgIHN0YXRpYyB2b2lkKiByZXNlcnZlQW5k
Q29tbWl0KHNpemVfdCByZXNlcnZlU2l6ZSwgc2l6ZV90IGNvbW1pdFNpemUsIFVzYWdlID0gVW5r
bm93blVzYWdlLCBib29sIHdyaXRhYmxlID0gdHJ1ZSwgYm9vbCBleGVjdXRhYmxlID0gZmFsc2Up
OwogICAgIHN0YXRpYyB2b2lkIGRlY29tbWl0QW5kUmVsZWFzZSh2b2lkKiByZWxlYXNlQmFzZSwg
c2l6ZV90IHJlbGVhc2VTaXplLCB2b2lkKiBkZWNvbW1pdEJhc2UsIHNpemVfdCBkZWNvbW1pdFNp
emUpOworCisgICAgLy8gUmVhbGxvY2F0ZSBhbiBleGlzdGluZywgY29tbWl0dGVkIGFsbG9jYXRp
b24uCisgICAgLy8gVGhlIHByaW9yIGFsbG9jYXRpb24gbXVzdCBiZSBmdWxseSBjb21pdHRlZCwg
YW5kIHRoZSBuZXcgc2l6ZSB3aWxsIGFsc28gYmUgZnVsbHkgY29tbWl0dGVkLgorICAgIC8vIFRo
aXMgaW50ZXJmYWNlIGlzIHByb3ZpZGVkIHNpbmNlIGl0IG1heSBiZSBwb3NzaWJsZSB0byBvcHRp
bWl6ZSB0aGlzIG9wZXJhdGlvbiBvbiBzb21lIHBsYXRmb3Jtcy4KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIHN0YXRpYyBUKiByZWFsbG9jYXRlQ29tbWl0dGVkKFQqLCBzaXplX3Qgb2xk
U2l6ZSwgc2l6ZV90IG5ld1NpemUsIFVzYWdlID0gVW5rbm93blVzYWdlLCBib29sIHdyaXRhYmxl
ID0gdHJ1ZSwgYm9vbCBleGVjdXRhYmxlID0gZmFsc2UpOwogfTsKIAogaW5saW5lIHZvaWQqIE9T
QWxsb2NhdG9yOjpyZXNlcnZlQW5kQ29tbWl0KHNpemVfdCByZXNlcnZlU2l6ZSwgc2l6ZV90IGNv
bW1pdFNpemUsIFVzYWdlIHVzYWdlLCBib29sIHdyaXRhYmxlLCBib29sIGV4ZWN1dGFibGUpCkBA
IC05Myw2ICsxMDAsMTUgQEAgaW5saW5lIHZvaWQgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVs
ZQogICAgIGRlY29tbWl0QW5kUmVsZWFzZShiYXNlLCBzaXplLCBiYXNlLCBzaXplKTsKIH0KIAor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSBUKiBPU0FsbG9jYXRvcjo6cmVhbGxvY2F0ZUNv
bW1pdHRlZChUKiBvbGRCYXNlLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUsIFVzYWdl
IHVzYWdlLCBib29sIHdyaXRhYmxlLCBib29sIGV4ZWN1dGFibGUpCit7CisgICAgdm9pZCogbmV3
QmFzZSA9IHJlc2VydmVBbmRDb21taXQobmV3U2l6ZSwgdXNhZ2UsIHdyaXRhYmxlLCBleGVjdXRh
YmxlKTsKKyAgICBtZW1jcHkobmV3QmFzZSwgb2xkQmFzZSwgc3RkOjptaW4ob2xkU2l6ZSwgbmV3
U2l6ZSkpOworICAgIGRlY29tbWl0QW5kUmVsZWFzZShvbGRCYXNlLCBvbGRTaXplKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG5ld0Jhc2UpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYK
IAogdXNpbmcgV1RGOjpPU0FsbG9jYXRvcjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124398</attachid>
            <date>2012-01-27 16:36:15 -0800</date>
            <delta_ts>2012-01-27 17:11:37 -0800</delta_ts>
            <desc>More build fixes (patch already reviewed by oliver)</desc>
            <filename>76855.6.patch</filename>
            <type>text/plain</type>
            <size>57855</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA2MTUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDEyLTAxLTI3ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBJbXBsZW1lbnQgYSBKSVQtY29kZSBhd2FyZSBzYW1wbGluZyBwcm9maWxlciBm
b3IgSlNDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
Njg1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgorCisgICAgICAgIFRvIGVu
YWJsZSB0aGUgcHJvZmlsZXIsIHNldCB0aGUgSlNDX0NPREVfUFJPRklMSU5HIGVudmlyb25tZW50
IHZhcmlhYmxlIHRvCisgICAgICAgIDEgKG5vIHRyYWNpbmcgdGhlIEMgc3RhY2spLCAyICh0cmFj
ZSBvbmUgbGV2ZWwgb2YgQyBjb2RlKSBvciAzIChyZWN1cnNpdmVseQorICAgICAgICB0cmFjZSBh
bGwgc2FtcGxlcykuCisKKyAgICAgICAgVGhlIHByb2ZpbGVyIHJlcXVpcmVzIC1mb21pdC1mcmFt
ZS1wb2ludGVyIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgYnVpbGQgZmxhZ3MuCisKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICAgICAtIFJlbW92ZWQgYW4gZXhwb3J0Lgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICAgICAtIEFkZGVkIG5ldyBmaWxlcworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgICAgICAtIEZvciBiYXNlbGluZSBjb2RlYmxvY2tzLCBjYWNoZSB0aGUgcmVz
dWx0IG9mIGNhbkNvbXBpbGVXaXRoREZHLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5o
OgorICAgICAgICAgICAgLSBGb3IgYmFzZWxpbmUgY29kZWJsb2NrcywgY2FjaGUgdGhlIHJlc3Vs
dCBvZiBjYW5Db21waWxlV2l0aERGRy4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxv
Y2F0b3IpOgorICAgICAgICAgICAgLSBOb3RpZnkgdGhlIHByb2ZpbGVyIHdoZW4gdGhlIGFsbG9j
YXRvciBpcyBjcmVhdGVkLgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxv
Y2F0ZSk6CisgICAgICAgICAgICAtIEluZm9ybSB0aGUgYWxsb2NhdGVkIG9mIHRoZSBvd25lclVJ
RC4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcDoKKyAg
ICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG9jYXRvcik6Cisg
ICAgICAgICAgICAtIE5vdGlmeSB0aGUgcHJvZmlsZXIgd2hlbiB0aGUgYWxsb2NhdG9yIGlzIGNy
ZWF0ZWQuCisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAg
ICAgICAgICAgIC0gSW5mb3JtIHRoZSBhbGxvY2F0ZWQgb2YgdGhlIG93bmVyVUlELgorICAgICAg
ICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgICAgICAtIElmIHByb2ZpbGluZywgZG9uJ3Qg
bWFzayB0aGUgcmV0dXJuIGFkZHJlc3MgaW4gSklUIGNvZGUuCisgICAgICAgICAgICAgIChXZSBk
byBzbyB0byBwcm92aWRlIG5pY2VyIGJhY2t0cmFjZXMgaW4gZGVidWcgYnVpbGRzKS4KKyAgICAg
ICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpldmFsdWF0ZSk6Cisg
ICAgICAgICAgICAtIE5vdGlmeSB0aGUgcHJvZmlsZXIgb2Ygc2NyaXB0IGV2YWx1YXRpb25zLgor
ICAgICAgICAqIHRvb2xzOiBBZGRlZC4KKyAgICAgICAgKiB0b29scy9Db2RlUHJvZmlsZS5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpzeW1ib2xOYW1lKToKKyAgICAgICAgICAgIC0gSGVscGVy
IGZ1bmN0aW9uIHRvIGdldCB0aGUgbmFtZSBvZiBhIHN5bWJvbCBpbiB0aGUgZnJhbWV3b3JrLgor
ICAgICAgICAoSlNDOjp0cnVuY2F0ZVRyYWNlKToKKyAgICAgICAgICAgIC0gSGVscGVyIHRvIHRy
dW5jYXRlIHRyYWNlcyBpbnRvIG1ldGhvZHMga25vdyB0byBoYXZlIHVuaW5mb3JtYXRpdmVseSBk
ZWVwIHN0YWNrcy4KKyAgICAgICAgKEpTQzo6Q29kZVByb2ZpbGU6OnNhbXBsZSk6CisgICAgICAg
ICAgICAtIFJlY29yZCBhIHN0YWNrIHRyYWNlIGNsYXNzaWZ5aW5nIHNhbXBsZXMuCisgICAgICAg
IChKU0M6OkNvZGVQcm9maWxlOjpyZXBvcnQpOgorICAgICAgICAgICAgLSB7UHJpbnQgcHJvZmls
ZXIgb3V0cHV0LgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxlLmg6IEFkZGVkLgorICAgICAg
ICAgICAgLSBuZXcgY2xhc3MsIGNhcHR1cmVzIGEgc2V0IG9mIHNhbXBsZXMgYXNzb2NpYXRlZCB3
aXRoIGFuIGV2YWx1YXRlZCBzY3JpcHQsCisgICAgICAgICAgICAgIGFuZCBuZXN0ZWQgdG8gcmVj
b3JkIHNhbXBsZXMgZnJvbSBzdWJzY3JpcHRzLgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxp
bmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q29kZVByb2ZpbGluZzo6cHJvZmlsaW5nVGlt
ZXIpOgorICAgICAgICAgICAgLSBjYWxsYmFjayBmaXJlZCB0aGVuIGEgdGltZXIgZXZlbnQgb2Nj
dXJzLgorICAgICAgICAoSlNDOjpDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IpOgorICAg
ICAgICAgICAgLSBjYWxsZWQgd2hlbiB0aGUgZXhlY3V0YWJsZSBhbGxvY2F0b3IgaXMgY29uc3Ry
dWN0ZWQuCisgICAgICAgIChKU0M6OkNvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEMpOgor
ICAgICAgICAgICAgLSBoZWxwZXIgdG8gbG9va3VwIHRoZSBjb2RlYmxvY2sgZnJvbSBhbiBhZGRy
ZXNzIGluIEpJVCBjb2RlCisgICAgICAgIChKU0M6OkNvZGVQcm9maWxpbmc6OmJlZ2luKToKKyAg
ICAgICAgICAgIC0gZW50ZXIgYSBwcm9maWxpbmcgc2NvcGUuCisgICAgICAgIChKU0M6OkNvZGVQ
cm9maWxpbmc6OmVuZCk6CisgICAgICAgICAgICAtIGV4aXQgYSBwcm9maWxpbmcgc2NvcGUuCisg
ICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGluZy5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0gbmV3
IGNsYXNzLCBpbnN0YW50aWFsZWQgZnJvbSBDb21wbGV0aW9uIHRvIGRlZmluZSBhIHByb2ZpbGlu
ZyBzY29wZS4KKyAgICAgICAgKiB0b29scy9Qcm9maWxlVHJlZU5vZGUuaDogQWRkZWQuCisgICAg
ICAgICAgICAtIG5ldyBjbGFzcywgdXNlZCB0byBjb25zdHJ1Y3QgYSB0cmVlIG9mIHNhbXBsZXMu
CisgICAgICAgICogdG9vbHMvVGllcmVkTU1hcEFycmF5Lmg6IEFkZGVkLgorICAgICAgICAgICAg
LSBuZXcgY2xhc3MsIGEgbWFsbG9jLWZyZWUgdmVjdG9yIChjYW4gYmUgdXNlZCB3aGlsZSB0aGUg
bWFpbiB0aHJlYWQgaXMgc3VzcGVuZGVkLAorICAgICAgICAgICAgICBwb3NzaWJseSBob2xkaW5n
IHRoZSBtYWxsb2MgaGVhcCBsb2NrKS4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6
CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5kbGUp
OgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgICAgICAt
IEFsbG93IGFsbG9jYXRpb24gaGFuZGxlcyB0byB0cmFjayBpbmZvcm1hdGlvbiBhYm91dCB0aGVp
ciBvd25lci4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5oOgorICAgICAgICAoTWV0YUFs
bG9jYXRvcik6CisgICAgICAgICAgICAtIEFsbG93IGFsbG9jYXRpb24gaGFuZGxlcyB0byB0cmFj
ayBpbmZvcm1hdGlvbiBhYm91dCB0aGVpciBvd25lci4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9j
YXRvckhhbmRsZS5oOgorICAgICAgICAoTWV0YUFsbG9jYXRvckhhbmRsZSk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Om93bmVyVUlEKToKKyAgICAgICAgICAgIC0gQWxsb3cg
YWxsb2NhdGlvbiBoYW5kbGVzIHRvIHRyYWNrIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyIG93bmVy
LgorICAgICAgICAqIHd0Zi9PU0FsbG9jYXRvci5oOgorICAgICAgICAoV1RGOjpPU0FsbG9jYXRv
cjo6cmVhbGxvY2F0ZUNvbW1pdHRlZCk6CisgICAgICAgICAgICAtIHJlYWxsb2NhdGUgYW4gZXhp
c3RpbmcsIGNvbW1pdHRlZCBtZW1vcnkgYWxsb2NhdGlvbi4KKwogMjAxMi0wMS0yNyAgTU9SSVRB
IEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbSlNDXSBTb21lIEpTX0VY
UE9SVERBVEEgbWF5IG5vdCBiZSBuZWNlc3NhcnkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw2ICsyMDAsOSBAQCBTRVQoSmF2
YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHJ1bnRpbWUvVGltZW91dENoZWNrZXIuY3BwCiAgICAg
cnVudGltZS9VU3RyaW5nLmNwcAogCisgICAgdG9vbHMvQ29kZVByb2ZpbGUuY3BwCisgICAgdG9v
bHMvQ29kZVByb2ZpbGluZy5jcHAKKwogICAgIHlhcnIvWWFyclBhdHRlcm4uY3BwCiAgICAgeWFy
ci9ZYXJySW50ZXJwcmV0ZXIuY3BwCiAgICAgeWFyci9ZYXJySklULmNwcApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEwNjE1MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkp
CkBAIC01MjUsNiArNTI1LDEyIEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9XZWFrUmFuZG9tLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dyaXRlQmFycmllci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVBy
b2ZpbGUuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuaCBc
CisJU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5oIFwKKwlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9UaWVyZWRNTWFwQXJyYXkuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9B
bGlnbm1lbnQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BbHdheXNJbmxpbmUuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BcnJheUJ1ZmZlci5jcHAgXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCShyZXZpc2lvbiAxMDYxNTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkp
CkBAIC00MTUsNyArNDE1LDYgQEAgX19aTjNXVEYxMnJhbmRvbU51bWJlckV2CiBfX1pOM1dURjEz
TWV0YUFsbG9jYXRvcjE3YWRkRnJlc2hGcmVlU3BhY2VFUHZtCiBfX1pOM1dURjEzTWV0YUFsbG9j
YXRvcjE3ZnJlZUZyZWVTcGFjZU5vZGVFUE5TMF8xM0ZyZWVTcGFjZU5vZGVFCiBfX1pOM1dURjEz
TWV0YUFsbG9jYXRvcjE4ZGVidWdGcmVlU3BhY2VTaXplRXYKLV9fWk4zV1RGMTNNZXRhQWxsb2Nh
dG9yOGFsbG9jYXRlRW0KIF9fWk4zV1RGMTNNZXRhQWxsb2NhdG9yQzJFbQogX19aTjNXVEYxM1N0
cmluZ0J1aWxkZXIxMXNocmlua1RvRml0RXYKIF9fWk4zV1RGMTNTdHJpbmdCdWlsZGVyMTVyZXNl
cnZlQ2FwYWNpdHlFagpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEw
NjE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDksNiArMjA5LDggQEAgU09VUkNFUyArPSBcCiAgICAgcnVudGltZS9TdHJ1Y3R1cmUu
Y3BwIFwKICAgICBydW50aW1lL1RpbWVvdXRDaGVja2VyLmNwcCBcCiAgICAgcnVudGltZS9VU3Ry
aW5nLmNwcCBcCisgICAgdG9vbHMvQ29kZVByb2ZpbGUuY3BwIFwKKyAgICB0b29scy9Db2RlUHJv
ZmlsaW5nLmNwcCBcCiAgICAgeWFyci9ZYXJySklULmNwcCBcCiAKICpzaDQqIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ0Nyw2ICsxNDQ3LDM0IEBACiAJCQk8L0ZpbGU+CiAJCTwvRmlsdGVyPgog
CQk8RmlsdGVyCisJCQlOYW1lPSJ0b29scyIKKwkJCT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlwuLlx0b29sc1xDb2RlUHJvZmlsZS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJ
PEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHRvb2xzXENvZGVQcm9maWxlLmgiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHRvb2xzXENv
ZGVQcm9maWxpbmcuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlx0b29sc1xDb2RlUHJvZmlsaW5nLmgiCisJCQkJPgorCQkJPC9GaWxlPgor
CQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHRvb2xzXFByb2ZpbGVUcmVlTm9kZS5o
IgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx0
b29sc1xUaWVyZWRNTWFwQXJyYXkuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCTwvRmlsdGVyPgor
CQk8RmlsdGVyCiAJCQlOYW1lPSJieXRlY29kZSIKIAkJCT4KIAkJCTxGaWxlCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlQ29tbW9uLnZzcHJvcHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZUNvbW1vbi52c3Byb3BzCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlQ29t
bW9uLnZzcHJvcHMJKHdvcmtpbmcgY29weSkKQEAgLTYsNyArNiw3IEBACiAJPgogCTxUb29sCiAJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9
IiZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmpcSmF2YVNjcmlwdENvcmVcRGVyaXZl
ZFNvdXJjZXNcJnF1b3Q7Oy4uLy4uLzsuLi8uLi9BUEkvOy4uLy4uL3BhcnNlci87Li4vLi4vYnl0
ZWNvbXBpbGVyLzsuLi8uLi9kZmcvOy4uLy4uL2ppdC87Li4vLi4vcnVudGltZS87Li4vLi4vYnl0
ZWNvZGUvOy4uLy4uL2ludGVycHJldGVyLzsuLi8uLi93dGYvOy4uLy4uL3Byb2ZpbGVyOy4uLy4u
L2Fzc2VtYmxlci87Li4vLi4vZGVidWdnZXIvOy4uLy4uL2hlYXAvOyZxdW90OyQoV2ViS2l0TGli
cmFyaWVzRGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNs
dWRlXHByaXZhdGUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGUm
cXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVcSmF2YVNjcmlwdENv
cmUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVccHJpdmF0ZSZx
dW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxwdGhyZWFkcyZxdW90OyIK
KwkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJnF1b3Q7JChDb25maWd1cmF0aW9uQnVp
bGREaXIpXG9ialxKYXZhU2NyaXB0Q29yZVxEZXJpdmVkU291cmNlc1wmcXVvdDs7Li4vLi4vOy4u
Ly4uL0FQSS87Li4vLi4vcGFyc2VyLzsuLi8uLi9ieXRlY29tcGlsZXIvOy4uLy4uL2RmZy87Li4v
Li4vaml0LzsuLi8uLi9ydW50aW1lLzsuLi8uLi90b29scy87Li4vLi4vYnl0ZWNvZGUvOy4uLy4u
L2ludGVycHJldGVyLzsuLi8uLi93dGYvOy4uLy4uL3Byb2ZpbGVyOy4uLy4uL2Fzc2VtYmxlci87
Li4vLi4vZGVidWdnZXIvOy4uLy4uL2hlYXAvOyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxp
bmNsdWRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHByaXZhdGUm
cXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7
JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1
b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDsk
KFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxwdGhyZWFkcyZxdW90OyIKIAkJUHJlcHJvY2Vz
c29yRGVmaW5pdGlvbnM9Il9fU1REX0MiCiAJCUZvcmNlZEluY2x1ZGVGaWxlcz0iSUNVVmVyc2lv
bi5oIgogCS8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTA2
MTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM4Miw2ICszODIsOCBAQAogCQk4NkFF
NjRBQTEzNUU1RTFDMDA5NjMwMTIgLyogU0g0QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkFFNjRBNzEzNUU1RTFDMDA5NjMwMTIgLyog
U0g0QXNzZW1ibGVyLmggKi87IH07CiAJCTg2QUU2QzREMTM2QTExRTQwMDk2MzAxMiAvKiBERkdG
UFJJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NkFFNkM0QjEzNkExMUU0MDA5NjMwMTIgLyogREZHRlBSSW5mby5oICovOyB9OwogCQk4NkFFNkM0
RTEzNkExMUU0MDA5NjMwMTIgLyogREZHR1BSSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZBRTZDNEMxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0dQ
UkluZm8uaCAqLzsgfTsKKwkJODZCNTgyNjcxNEQyNzk2QzAwQTlDMzA2IC8qIENvZGVQcm9maWxl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QjU4
MjJFMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgKi87IH07CisJCTg2QjU4MjY5
MTREMjc5NzAwMEE5QzMwNiAvKiBDb2RlUHJvZmlsaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MDNDRUYyMTRDNzU0NjQwMEFFNTlFMyAvKiBD
b2RlUHJvZmlsaW5nLmNwcCAqLzsgfTsKIAkJODZCOTlBRTMxMTdFNTc4MTAwREY1QTkwIC8qIFN0
cmluZ0J1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODZCOTlBRTExMTdFNTc4MTAwREY1QTkwIC8qIFN0cmluZ0J1ZmZlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2QkIwOUMwMTM4RTM4MUIw
MDU2NzAyRiAvKiBERkdSZXBhdGNoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg2QkIwOUJFMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmNw
cCAqLzsgfTsKIAkJODZCQjA5QzExMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QkIwOUJGMTM4RTM4
MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmggKi87IH07CkBAIC0xMDQyLDcgKzEwNDQsNyBAQAog
CQkxQTA4Mjc3ODE0MjE2OEQ3MDA5MENDQUMgLyogQmluYXJ5U2VtYXBob3JlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpbmFyeVNlbWFwaG9yZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQUE5RTU1MDE0OTgwOTM1MDAwMDFBOEEgLyogRnVuY3Rpb25hbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdW5jdGlvbmFsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDOTA1MTQyMEJBOUU4QTcwMDgxRTlEMCAvKiBWZXJzaW9u
LnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFZlcnNpb24ueGNjb25m
aWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFDOTA1MTQzMEJBOUU4QTcwMDgxRTlE
MCAvKiBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IG5h
bWUgPSBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZzsgcGF0aCA9IC4uL0NvbmZpZ3VyYXRpb25zL0ph
dmFTY3JpcHRDb3JlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzkw
NTE0MzBCQTlFOEE3MDA4MUU5RDAgLyogSmF2YVNjcmlwdENvcmUueGNjb25maWcgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gSmF2YVNjcmlwdENvcmUueGNjb25maWc7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDOTA1MTQ0MEJBOUU4QTcwMDgxRTlEMCAvKiBEZWJ1Z1Jl
bGVhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gRGVidWdSZWxl
YXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzkwNTE0NTBCQTlF
OEE3MDA4MUU5RDAgLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBh
dGggPSBCYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0FBOEI0
QTBEMzJDMzlBMDA0MUJDRkYgLyogSmF2YVNjcmlwdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKYXZhU2NyaXB0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MTM4LDYgKzExNDAsOCBAQAogCQk4NjAxNjFFMDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3Nl
bWJsZXJYODYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJs
ZXJYODYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYwMTYxRTEwRjNBODNDMTAw
Rjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg2MDE2MUUyMEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1v
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NjAzQ0VGMjE0Qzc1NDY0MDBB
RTU5RTMgLyogQ29kZVByb2ZpbGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDb2RlUHJvZmlsaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
ODYwM0NFRjMxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVByb2ZpbGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NjA0RjRGMjE0M0E2QzQ0MDBCMjk1RjUgLyogQ2hhbmdlTG9nICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IENo
YW5nZUxvZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYwNEY1MDMxNDNDRTFDMTAw
QjI5NUY1IC8qIEpTR2xvYmFsVGhpcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0dsb2JhbFRoaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYyNkJFQ0Ux
MTkyOEUzOTAwNzgyRkFCIC8qIFN0cmluZ1N0YXRpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gU3RyaW5nU3RhdGljcy5jcHA7IHBhdGggPSB0ZXh0L1N0cmluZ1N0
YXRpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTE4NSw2ICsxMTg5LDEw
IEBACiAJCTg2QUU2NEE3MTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU0g0QXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTg2QUU2QzRCMTM2QTExRTQwMDk2MzAxMiAvKiBERkdGUFJJbmZvLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ZQUkluZm8uaDsgcGF0aCA9IGRm
Zy9ERkdGUFJJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QUU2QzRDMTM2
QTExRTQwMDk2MzAxMiAvKiBERkdHUFJJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0dQUkluZm8uaDsgcGF0aCA9IGRmZy9ERkdHUFJJbmZvLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTg2QjU4MjJDMTREMjJGNUYwMEE5QzMwNiAvKiBQcm9maWxlVHJl
ZU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvZmlsZVRyZWVOb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2QjU4MjJFMTREMjM3M0IwMEE5QzMw
NiAvKiBDb2RlUHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDb2RlUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2QjU4MjJG
MTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDb2RlUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4
NkI1ODI2QTE0RDM1RDUxMDBBOUMzMDYgLyogVGllcmVkTU1hcEFycmF5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpZXJlZE1NYXBBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4NkI5OUFFMTExN0U1NzgxMDBERjVBOTAgLyogU3RyaW5nQnVmZmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0cmluZ0J1ZmZlci5oOyBwYXRoID0g
dGV4dC9TdHJpbmdCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZCQjA5
QkUxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHUmVwYXRjaC5jcHA7IHBhdGggPSBkZmcvREZHUmVwYXRjaC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QkIwOUJGMTM4RTM4MUIwMDU2NzAy
RiAvKiBERkdSZXBhdGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Jl
cGF0Y2guaDsgcGF0aCA9IGRmZy9ERkdSZXBhdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNjgwLDYgKzE2ODgsNyBAQAogCQkJCTk1QUI4MzFBMERBNDJDNjkwMEJDODNGMyAv
KiBwcm9maWxlciAqLywKIAkJCQk3RUY2RTBCQjBFQjdBMUVDMDA3OUFGQUYgLyogcnVudGltZSAq
LywKIAkJCQkxNDEyMTEwMDBBNDg3NzI2MDA0ODAyNTUgLyogdGVzdHMgKi8sCisJCQkJODYwM0NF
RjAxNEM3NTNFRjAwQUU1OUUzIC8qIHRvb2xzICovLAogCQkJCTY1MTYyRUYxMDhFNkEyMUMwMDc1
NTZDRCAvKiB3dGYgKi8sCiAJCQkJODZFQUM0OEMwRjkzRThCOTAwOEVDOTQ4IC8qIHlhcnIgKi8s
CiAJCQkJMUM5MDUxM0UwQkE5RTg4MzAwODFFOUQwIC8qIENvbmZpZ3VyYXRpb25zICovLApAQCAt
MTgyNiw3ICsxODM1LDYgQEAKIAkJCQk4NjVGNDA4NzEwRTdENTYzMDA5NDczNjEgLyogQVBJU2hp
bXMuaCAqLywKIAkJCQkxQ0FBOEI0QTBEMzJDMzlBMDA0MUJDRkYgLyogSmF2YVNjcmlwdC5oICov
LAogCQkJCTFDQUE4QjRCMEQzMkMzOUEwMDQxQkNGRiAvKiBKYXZhU2NyaXB0Q29yZS5oICovLAot
CQkJCTFDOTA1MTQzMEJBOUU4QTcwMDgxRTlEMCAvKiBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZyAq
LywKIAkJCQlCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3Bw
ICovLAogCQkJCUJDMDg5NEQ2MEZBRkJBMkQwMDAwMTg2NSAvKiBKU0FQSVZhbHVlV3JhcHBlci5o
ICovLAogCQkJCTE0MjEzNTlBMEE2NzdGNEYwMEE4MTk1RSAvKiBKU0Jhc2UuY3BwICovLApAQCAt
MTkxNiw2ICsxOTI0LDcgQEAKIAkJCQkxQzkwNTE0NDBCQTlFOEE3MDA4MUU5RDAgLyogRGVidWdS
ZWxlYXNlLnhjY29uZmlnICovLAogCQkJCTQ0OTA5N0VFMEY4RjgxQjUwMDc2QTMyNyAvKiBGZWF0
dXJlRGVmaW5lcy54Y2NvbmZpZyAqLywKIAkJCQk1REFGRDZDQjE0NkI2ODYzMDBGQkVGQjQgLyog
SlNDLnhjY29uZmlnICovLAorCQkJCTFDOTA1MTQzMEJBOUU4QTcwMDgxRTlEMCAvKiBKYXZhU2Ny
aXB0Q29yZS54Y2NvbmZpZyAqLywKIAkJCQlCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVGVz
dEFQSS54Y2NvbmZpZyAqLywKIAkJCQk1REFGRDZDQzE0NkI2OEI5MDBGQkVGQjQgLyogVGVzdFJl
Z0V4cC54Y2NvbmZpZyAqLywKIAkJCQkxQzkwNTE0MjBCQTlFOEE3MDA4MUU5RDAgLyogVmVyc2lv
bi54Y2NvbmZpZyAqLywKQEAgLTIzNjUsNiArMjM3NCwxOSBAQAogCQkJcGF0aCA9IHJ1bnRpbWU7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk4NjAzQ0VGMDE0Qzc1M0VGMDBB
RTU5RTMgLyogdG9vbHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0g
KAorCQkJCTg2QjU4MjJFMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgKi8sCisJ
CQkJODZCNTgyMkYxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmggKi8sCisJCQkJODYw
M0NFRjIxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcuY3BwICovLAorCQkJCTg2MDND
RUYzMTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmggKi8sCisJCQkJODZCNTgyMkMx
NEQyMkY1RjAwQTlDMzA2IC8qIFByb2ZpbGVUcmVlTm9kZS5oICovLAorCQkJCTg2QjU4MjZBMTRE
MzVENTEwMEE5QzMwNiAvKiBUaWVyZWRNTWFwQXJyYXkuaCAqLywKKwkJCSk7CisJCQlwYXRoID0g
dG9vbHM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk4NjU2NTczRTExNUJF
MzUyMDAyOTFGNDAgLyogdGV4dCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCkBAIC0zNjQwLDYgKzM2NjIsOCBAQAogCQkJCTBGOTMzMkExMTRDQTdERDEwMDg1RjND
NiAvKiBNZXRob2RDYWxsTGlua1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzJB
MzE0Q0E3REQ3MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjU1RjBGNDE0RDEwNjM5MDBBQzc2NDkgLyogQWJzdHJhY3RQQy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk4NkI1ODI2NzE0RDI3OTZDMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJODZCNTgyNjkxNEQyNzk3MDAwQTlDMzA2IC8qIENvZGVQcm9maWxpbmcu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NTYsNiArMTQ1
Niw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAsIG1f
c3BlY3VsYXRpdmVGYWlsQ291bnRlcigwKQogICAgICwgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50
ZXIoMCkKICAgICAsIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoMCkKKyAgICAsIG1fY2Fu
Q29tcGlsZVdpdGhERkdTdGF0ZShDb21waWxlV2l0aERGR1Vuc2V0KQogewogICAgIHNldE51bVBh
cmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKICAgICBvcHRpbWl6ZUFmdGVyV2FybVVw
KCk7CkBAIC0yMTY0LDE3ICsyMTY1LDE3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkNvZGVCbG9jazo6
Y29tcGlsZU9wdGkKICAgICByZXR1cm4gZXJyb3I7CiB9CiAKLWJvb2wgUHJvZ3JhbUNvZGVCbG9j
azo6Y2FuQ29tcGlsZVdpdGhERkcoKQorYm9vbCBQcm9ncmFtQ29kZUJsb2NrOjpjYW5Db21waWxl
V2l0aERGR0ludGVybmFsKCkKIHsKICAgICByZXR1cm4gREZHOjpjYW5Db21waWxlUHJvZ3JhbSh0
aGlzKTsKIH0KIAotYm9vbCBFdmFsQ29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERGRygpCitib29s
IEV2YWxDb2RlQmxvY2s6OmNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKQogewogICAgIHJldHVy
biBERkc6OmNhbkNvbXBpbGVFdmFsKHRoaXMpOwogfQogCi1ib29sIEZ1bmN0aW9uQ29kZUJsb2Nr
OjpjYW5Db21waWxlV2l0aERGRygpCitib29sIEZ1bmN0aW9uQ29kZUJsb2NrOjpjYW5Db21waWxl
V2l0aERGR0ludGVybmFsKCkKIHsKICAgICBpZiAobV9pc0NvbnN0cnVjdG9yKQogICAgICAgICBy
ZXR1cm4gREZHOjpjYW5Db21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QodGhpcyk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxMDYx
NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM4OCw3ICszODgsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZp
cnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5v
ZGUqKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpID0gMDsKICAgICAgICAg
dmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCkgPSAwOwotICAgICAgICB2aXJ0dWFsIGJv
b2wgY2FuQ29tcGlsZVdpdGhERkcoKSA9IDA7CisKKyAgICAgICAgZW51bSBDb21waWxlV2l0aERG
R1N0YXRlIHsKKyAgICAgICAgICAgIENvbXBpbGVXaXRoREZHRmFsc2UsCisgICAgICAgICAgICBD
b21waWxlV2l0aERGR1RydWUsCisgICAgICAgICAgICBDb21waWxlV2l0aERGR1Vuc2V0CisgICAg
ICAgIH07CisKKyAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwo
KSA9IDA7CisgICAgICAgIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKQorICAgICAgICB7CisgICAg
ICAgICAgICBib29sIHJlc3VsdCA9IGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKTsKKyAgICAg
ICAgICAgIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0ZSA9IHJlc3VsdCA/IENvbXBpbGVXaXRoREZH
VHJ1ZSA6IENvbXBpbGVXaXRoREZHRmFsc2U7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9CisgICAgICAgIENvbXBpbGVXaXRoREZHU3RhdGUgY2FuQ29tcGlsZVdpdGhERkdT
dGF0ZSgpIHsgcmV0dXJuIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0ZTsgfQorCiAgICAgICAgIGJv
b2wgaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NF
UlQoZ2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKQEAgLTExODcsNiArMTIw
Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBmcmllbmQgdm9pZCBXVEY6OmRlbGV0ZU93
bmVkUHRyPFJhcmVEYXRhPihSYXJlRGF0YSopOwogI2VuZGlmCiAgICAgICAgIE93blB0cjxSYXJl
RGF0YT4gbV9yYXJlRGF0YTsKKyAgICAgICAgQ29tcGlsZVdpdGhERkdTdGF0ZSBtX2NhbkNvbXBp
bGVXaXRoREZHU3RhdGU7CiAgICAgfTsKIAogICAgIC8vIFByb2dyYW0gY29kZSBpcyBub3QgbWFy
a2VkIGJ5IGFueSBmdW5jdGlvbiwgc28gd2UgbWFrZSB0aGUgZ2xvYmFsIG9iamVjdApAQCAtMTIy
Niw3ICsxMjQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3Qq
IGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKICAgICAgICAg
dmlydHVhbCB2b2lkIGpldHRpc29uKCk7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBs
YWNlbWVudCgpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKTsKKyAg
ICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKTsKICNlbmRpZgog
ICAgIH07CiAKQEAgLTEyNjAsNyArMTI3Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5O
b2RlKik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpOwogICAgICAgICB2aXJ0dWFs
IENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKLSAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBp
bGVXaXRoREZHKCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGR0ludGVy
bmFsKCk7CiAjZW5kaWYKIAogICAgIHByaXZhdGU6CkBAIC0xMjk3LDcgKzEzMTMsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChF
eGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOwogICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlz
b24oKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7Ci0gICAgICAg
IHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOworICAgICAgICB2aXJ0dWFsIGJvb2wg
Y2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpOwogI2VuZGlmCiAgICAgfTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShy
ZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAi
RXhlY3V0YWJsZUFsbG9jYXRvci5oIgogCiAjaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9S
X0RFTUFORCkKKyNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSA8d3RmL01ldGFB
bGxvY2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvUGFnZVJlc2VydmF0aW9uLmg+CiAjaW5jbHVkZSA8
d3RmL1ZNVGFncy5oPgpAQCAtOTMsNiArOTQsNyBAQCB2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6
OmluaXRpYWxpemVBbGxvCiB7CiAgICAgQVNTRVJUKCFhbGxvY2F0b3IpOwogICAgIGFsbG9jYXRv
ciA9IG5ldyBEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yKCk7CisgICAgQ29kZVByb2ZpbGluZzo6
bm90aWZ5QWxsb2NhdG9yKGFsbG9jYXRvcik7CiB9CiAKIEV4ZWN1dGFibGVBbGxvY2F0b3I6OkV4
ZWN1dGFibGVBbGxvY2F0b3IoSlNHbG9iYWxEYXRhJikKQEAgLTExMiw5ICsxMTQsNyBAQCBib29s
IEV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVtb3J5UHJlCiAKIFBhc3NSZWZQdHI8RXhlY3V0
YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoSlNHbG9iYWxE
YXRhJiwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCkKIHsKLSAgICBVTlVTRURf
UEFSQU0ob3duZXJVSUQpOwotCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJl
c3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOworICAgIFJlZlB0cjxFeGVj
dXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5
dGVzLCBvd25lclVJRCk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIENSQVNIKCk7CiAgICAg
cmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCShy
ZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDggKzI5LDggQEAK
IAogI2lmIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9GSVhFRCkKIAorI2luY2x1ZGUgIkNv
ZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlIDxlcnJuby5oPgotCiAjaW5jbHVkZSA8c3lzL21tYW4u
aD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgpA
QCAtOTYsNiArOTYsNyBAQCB2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxv
CiB7CiAgICAgQVNTRVJUKCFhbGxvY2F0b3IpOwogICAgIGFsbG9jYXRvciA9IG5ldyBGaXhlZFZN
UG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKTsKKyAgICBDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxv
Y2F0b3IoYWxsb2NhdG9yKTsKIH0KIAogRXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFs
bG9jYXRvcihKU0dsb2JhbERhdGEmKQpAQCAtMTE2LDEyICsxMTcsMTAgQEAgYm9vbCBFeGVjdXRh
YmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZQogCiBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCkKIHsKLSAgICBVTlVT
RURfUEFSQU0ob3duZXJVSUQpOwotCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+
IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOworICAgIFJlZlB0cjxF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJ
bkJ5dGVzLCBvd25lclVJRCk7CiAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgcmVsZWFzZUV4
ZWN1dGFibGVNZW1vcnkoZ2xvYmFsRGF0YSk7Ci0gICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci0+
YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOworICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9j
YXRlKHNpemVJbkJ5dGVzLCBvd25lclVJRCk7CiAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAg
ICAgICAgQ1JBU0goKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmNwcAkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJB
cmd1bWVudHMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2su
aCIKKyNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIK
ICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKQEAg
LTk2OCw3ICs5NjksNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBKSVRUaHVua3M6OnRyeUNhY2hlR2V0
CiAgICAgSklUOjpjb21waWxlR2V0QnlJZENoYWluKGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5n
bG9iYWxEYXRhLCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgcHJv
dG90eXBlQ2hhaW4sIGNvdW50LCBwcm9wZXJ0eU5hbWUsIHNsb3QsIG9mZnNldCwgcmV0dXJuQWRk
cmVzcyk7CiB9CiAKLSNpZiAhZGVmaW5lZChOREVCVUcpICYmICFFTkFCTEUoQ09ERV9QUk9GSUxJ
TkcpCisjaWYgIWRlZmluZWQoTkRFQlVHKQogCiBleHRlcm4gIkMiIHsKIApAQCAtOTg2LDcgKzk4
Nyw4IEBAIHN0cnVjdCBTdGFja0hhY2sgewogICAgICAgICA6IHN0YWNrRnJhbWUoc3RhY2tGcmFt
ZSkKICAgICAgICAgLCBzYXZlZFJldHVybkFkZHJlc3MoKnN0YWNrRnJhbWUucmV0dXJuQWRkcmVz
c1Nsb3QoKSkKICAgICB7Ci0gICAgICAgICpzdGFja0ZyYW1lLnJldHVybkFkZHJlc3NTbG90KCkg
PSBSZXR1cm5BZGRyZXNzUHRyKEZ1bmN0aW9uUHRyKGpzY0dlbmVyYXRlZE5hdGl2ZUNvZGUpKTsK
KyAgICAgICAgaWYgKCFDb2RlUHJvZmlsaW5nOjplbmFibGVkKCkpCisgICAgICAgICAgICAqc3Rh
Y2tGcmFtZS5yZXR1cm5BZGRyZXNzU2xvdCgpID0gUmV0dXJuQWRkcmVzc1B0cihGdW5jdGlvblB0
cihqc2NHZW5lcmF0ZWROYXRpdmVDb2RlKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSB+
U3RhY2tIYWNrKCkgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21w
bGV0aW9uLmNwcAkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tcGxldGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNp
bmNsdWRlICJDb21wbGV0aW9uLmgiCiAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRl
ICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRl
ICJKU0xvY2suaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpAQCAtNTUsNiArNTYsOCBAQCBK
U1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDCiAgICAgSlNMb2NrIGxvY2so
ZXhlYyk7CiAgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5pZGVudGlmaWVyVGFibGUgPT0g
d3RmVGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSk7CiAKKyAgICBDb2RlUHJv
ZmlsaW5nIHByb2ZpbGUoc291cmNlKTsKKwogICAgIFByb2dyYW1FeGVjdXRhYmxlKiBwcm9ncmFt
ID0gUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZShleGVjLCBzb3VyY2UpOwogICAgIGlmICghcHJv
Z3JhbSkgewogICAgICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29kZVByb2ZpbGUuaCIKKworI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKKyNpbmNsdWRl
ICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiUHJvZmlsZVRyZWVOb2RlLmgiCisjaW5jbHVkZSAi
VmVjdG9yLmgiCisjaW5jbHVkZSAiV1RGU3RyaW5nLmgiCisjaW5jbHVkZSA8Y3h4YWJpLmg+Cisj
aW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRlIDxleGVjaW5mby5oPgorCituYW1lc3BhY2UgSlND
IHsKKworLy8gTWFwIGZyb20gQ29kZVR5cGUgZW51bSB0byBhIGNvcnJlc3BvbmRpbmcgbmFtZS4K
K2NvbnN0IGNoYXIqIENvZGVQcm9maWxlOjpzX2NvZGVUeXBlTmFtZXNbQ29kZVByb2ZpbGU6Ok51
bWJlck9mQ29kZVR5cGVzXSA9IHsKKyAgICAiW1tFbmdpbmVDb2RlXV0iLAorICAgICJbW0dsb2Jh
bFRodW5rXV0iLAorICAgICJbW1JlZ0V4cENvZGVdXSIsCisgICAgIltbREZHSklUXV0iLAorICAg
ICJbW0Jhc2VsaW5lT25seV1dIiwKKyAgICAiW1tCYXNlbGluZVByb2ZpbGVdXSIsCisgICAgIltb
QmFzZWxpbmVPU1JdXSIsCisgICAgIltbRW5naW5lRnJhbWVdXSIKK307CisKKy8vIEhlbHBlciBm
dW5jdGlvbiwgZmluZCB0aGUgc3ltYm9sIG5hbWUgZm9yIGEgcGMgaW4gSlNDLgorc3RhdGljIGNv
bnN0IGNoYXIqIHN5bWJvbE5hbWUodm9pZCogYWRkcmVzcykKK3sKKyAgICBEbF9pbmZvIGluZm87
CisgICAgaWYgKCFkbGFkZHIoYWRkcmVzcywgJmluZm8pIHx8ICFpbmZvLmRsaV9zbmFtZSkKKyAg
ICAgICAgcmV0dXJuICI8dW5rbm93bj4iOworCisgICAgY29uc3QgY2hhciogbWFuZ2xlZE5hbWUg
PSBpbmZvLmRsaV9zbmFtZTsKKyAgICBjb25zdCBjaGFyKiBjeGFEZW1hbmdsZWQgPSBhYmk6Ol9f
Y3hhX2RlbWFuZ2xlKG1hbmdsZWROYW1lLCAwLCAwLCAwKTsKKyAgICByZXR1cm4gY3hhRGVtYW5n
bGVkID8gY3hhRGVtYW5nbGVkIDogbWFuZ2xlZE5hbWU7Cit9CisKKy8vIEhlbHBlciBmdW5jdGlv
biwgdHJ1bmNhdGUgdHJhY2VzIHRvIHBydW5lIHRoZSBvdXRwdXQgJiBtYWtlIHZlcnkgdmVyYm9z
ZSBtb2RlIGEgbGl0dGxlIG1vcmUgcmVhZGFibGUuCitzdGF0aWMgYm9vbCB0cnVuY2F0ZVRyYWNl
KGNvbnN0IGNoYXIqIHN5bWJvbE5hbWUpCit7CisgICAgcmV0dXJuICFzdHJjbXAoc3ltYm9sTmFt
ZSwgIkpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkiKQorICAgICAgICB8fCAhc3Ry
Y21wKHN5bWJvbE5hbWUsICJKU0M6OlBhcnNlcjxKU0M6OkxleGVyPHVuc2lnbmVkIGNoYXI+ID46
OnBhcnNlSW5uZXIoKSIpCisgICAgICAgIHx8ICFzdHJjbXAoc3ltYm9sTmFtZSwgIldURjo6ZmFz
dE1hbGxvYyh1bnNpZ25lZCBsb25nKSIpCisgICAgICAgIHx8ICFzdHJjbXAoc3ltYm9sTmFtZSwg
IldURjo6Y2FsY3VsYXRlVVRDT2Zmc2V0KCkiKQorICAgICAgICB8fCAhc3RyY21wKHN5bWJvbE5h
bWUsICJKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkiKTsKKyAgICAg
ICAgCit9CisKKy8vIEVhY2ggdHJhY2UgY29uc2lzdHMgb2YgYSBzZXF1ZW5jZSBvZiB6ZXJvIG9y
IG1vcmUgJ0VuZ2luZUZyYW1lJyBlbnRyaWVzLAorLy8gZm9sbG93ZWQgYnkgYSBzYW1wbGUgaW4g
SklUIGNvZGUsIG9yIG9uZSBvciBtb3JlICdFbmdpbmVGcmFtZScgZW50cmllcywKKy8vIGZvbGxv
d2VkIGJ5IGEgJ0VuZ2luZUNvZGUnIHRlcm1pbmF0b3IuCit2b2lkIENvZGVQcm9maWxlOjpzYW1w
bGUodm9pZCogcGMsIHZvaWQqKiBmcmFtZVBvaW50ZXIpCit7CisgICAgLy8gRGlzYWxsb3cgdHJh
Y2VzIGNvbnRhaW5pbmcgb25seSBhICdFbmdpbmVDb2RlJyB0ZXJtaW5hdG9yLCB3aXRob3V0IGFu
eSAnRW5naW5lRnJhbWUnIGZyYW1lcy4KKyAgICBpZiAoIWZyYW1lUG9pbnRlcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgd2hpbGUgKGZyYW1lUG9pbnRlcikgeworICAgICAgICBDb2RlVHlwZSB0
eXBlOworICAgICAgICB2b2lkKiBvd25lclVJRCA9IENvZGVQcm9maWxpbmc6OmdldE93bmVyVUlE
Rm9yUEMocGMpOworCisgICAgICAgIC8vIERldGVybWluZSBpZiB0aGlzIHNhbXBsZSBmZWxsIGlu
IEpJVCBjb2RlLCBhbmQgaWYgc28sIGZyb20gd2hpY2ggSklUICYgd2h5LgorICAgICAgICBpZiAo
IW93bmVyVUlEKQorICAgICAgICAgICAgdHlwZSA9IEVuZ2luZUZyYW1lOworICAgICAgICBlbHNl
IGlmIChvd25lclVJRCA9PSBHTE9CQUxfVEhVTktfSUQpCisgICAgICAgICAgICB0eXBlID0gR2xv
YmFsVGh1bms7CisgICAgICAgIGVsc2UgaWYgKG93bmVyVUlEID09IFJFR0VYUF9DT0RFX0lEKQor
ICAgICAgICAgICAgdHlwZSA9IFJlZ0V4cENvZGU7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihvd25lclVJ
RCk7CisgICAgICAgICAgICBpZiAoY29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6
REZHSklUKQorICAgICAgICAgICAgICAgIHR5cGUgPSBERkdKSVQ7CisgICAgICAgICAgICBlbHNl
IGlmIChjb2RlQmxvY2stPmNhbkNvbXBpbGVXaXRoREZHU3RhdGUoKSA9PSBDb2RlQmxvY2s6OkNv
bXBpbGVXaXRoREZHRmFsc2UpCisgICAgICAgICAgICAgICAgdHlwZSA9IEJhc2VsaW5lT25seTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSkKKyAgICAgICAg
ICAgICAgICB0eXBlID0gQmFzZWxpbmVPU1I7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgdHlwZSA9IEJhc2VsaW5lUHJvZmlsZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEEg
c2FtcGxlIGluIEpJVCBjb2RlIHRlcm1pbmF0ZXMgdGhlIHRyYWNlLgorICAgICAgICBtX3NhbXBs
ZXMuYXBwZW5kKENvZGVSZWNvcmQocGMsIHR5cGUpKTsKKyAgICAgICAgaWYgKHR5cGUgIT0gRW5n
aW5lRnJhbWUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gV2FsayB1cCB0aGUg
c3RhY2suCisjaWYgUExBVEZPUk0oTUFDKSAmJiBDUFUoWDg2XzY0KQorICAgICAgICBwYyA9IGZy
YW1lUG9pbnRlclsxXTsKKyAgICAgICAgZnJhbWVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKio+KCpmcmFtZVBvaW50ZXIpOworI2Vsc2UKKyAgICAgICAgLy8gVGhpcyBwbGF0Zm9ybSBp
cyBub3QgeWV0IHN1cHBvcnRlZCEKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5k
aWYKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgd2Ugd2Fsa2VkIHRoZSBlbnRpcmUg
c3RhY2sgd2l0aG91dCBmaW5kaW5nIGFueSBmcmFtZXMgb2YgSklUIGNvZGUuCisgICAgbV9zYW1w
bGVzLmFwcGVuZChDb2RlUmVjb3JkKDAsIEVuZ2luZUNvZGUpKTsKK30KKwordm9pZCBDb2RlUHJv
ZmlsZTo6cmVwb3J0KCkKK3sKKyAgICBmcHJpbnRmKHN0ZG91dCwgIjxDb2RlUHJvZmlsaW5nICVz
OiVkPlxuIiwgbV9maWxlLmRhdGEoKSwgbV9saW5lTm8pOworCisgICAgLy8gSG93IG1hbnkgZnJh
bWVzIG9mIEMtY29kZSB0byBwcmludCAtIDAsIGlmIG5vdCB2ZXJib3NlLCAxIGlmIHZlcmJvc2Us
IHVwIHRvIDEwMjQgaWYgdmVyeSB2ZXJib3NlLgorICAgIHVuc2lnbmVkIHJlY3Vyc2lvbkxpbWl0
ID0gQ29kZVByb2ZpbGluZzo6YmVWZXJ5VmVyYm9zZSgpID8gMTAyNCA6IENvZGVQcm9maWxpbmc6
OmJlVmVyYm9zZSgpOworCisgICAgUHJvZmlsZVRyZWVOb2RlIHByb2ZpbGU7CisKKyAgICAvLyBX
YWxrIHRocm91Z2ggdGhlIHNhbXBsZSBidWZmZXIuCisgICAgc2l6ZV90IHRyYWNlID0gMDsKKyAg
ICB3aGlsZSAodHJhY2UgPCBtX3NhbXBsZXMuc2l6ZSgpKSB7CisKKyAgICAgICAgLy8gQWxsIHRy
YWNlcyBhcmUgemVybyBvciBtb3JlICdFbmdpbmVGcmFtZSdzLCBmb2xsb3dlZCBieSBhIG5vbi0n
RW5naW5lRnJhbWUnLgorICAgICAgICAvLyBTY2FuIHRvIGZpbmQgdGhlIGxhc3Qgc2FtcGxlIGlu
IHRoZSB0cmFjZS4KKyAgICAgICAgc2l6ZV90IGxhc3RJblRyYWNlID0gdHJhY2U7CisgICAgICAg
IHdoaWxlIChtX3NhbXBsZXNbbGFzdEluVHJhY2VdLnR5cGUgPT0gRW5naW5lRnJhbWUpCisgICAg
ICAgICAgICArK2xhc3RJblRyYWNlOworCisgICAgICAgIC8vIFdlIHVzZSB0aGUgbGFzdCBzYW1w
bGUgdHlwZSB0byBsb29rIHVwIGEgbmFtZSAodXNlZCBhcyBhIGJ1Y2tldCBpbiB0aGUgcHJvZmls
ZXIpLgorICAgICAgICBQcm9maWxlVHJlZU5vZGUqIGNhbGxiYWNrcyA9IHByb2ZpbGUuc2FtcGxl
Q2hpbGQoc19jb2RlVHlwZU5hbWVzW21fc2FtcGxlc1tsYXN0SW5UcmFjZV0udHlwZV0pOworCisg
ICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgc2FtcGxlcyBpbiBDLWNvZGUsIGFkZCB1cCB0byBy
ZWN1cnNpb25MaW1pdCBvZiB0aGVtIGludG8gdGhlIHByb2ZpbGUgdHJlZS4KKyAgICAgICAgc2l6
ZV90IGxhc3RFbmdpbmVGcmFtZSA9IGxhc3RJblRyYWNlOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGNvdW50ID0gMDsgbGFzdEVuZ2luZUZyYW1lID4gdHJhY2UgJiYgY291bnQgPCByZWN1cnNpb25M
aW1pdDsgKytjb3VudCkgeworICAgICAgICAgICAgLS1sYXN0RW5naW5lRnJhbWU7CisgICAgICAg
ICAgICBBU1NFUlQobV9zYW1wbGVzW2xhc3RFbmdpbmVGcmFtZV0udHlwZSA9PSBFbmdpbmVGcmFt
ZSk7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gc3ltYm9sTmFtZShtX3NhbXBsZXNb
bGFzdEVuZ2luZUZyYW1lXS5wYyk7CisgICAgICAgICAgICBjYWxsYmFja3MgPSBjYWxsYmFja3Mt
PnNhbXBsZUNoaWxkKG5hbWUpOworICAgICAgICAgICAgaWYgKHRydW5jYXRlVHJhY2UobmFtZSkp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBNb3ZlIG9u
IHRvIHRoZSBuZXh0IHRyYWNlLgorICAgICAgICB0cmFjZSA9IGxhc3RJblRyYWNlICsgMTsKKyAg
ICAgICAgQVNTRVJUKHRyYWNlIDw9IG1fc2FtcGxlcy5zaXplKCkpOworICAgIH0KKworICAgIC8v
IE91dHB1dCB0aGUgcHJvZmlsZSB0cmVlLgorICAgIGZwcmludGYoc3Rkb3V0LCAiVG90YWwgc2Ft
cGxlczogJWxsZFxuIiwgcHJvZmlsZS5jaGlsZENvdW50KCkpOworICAgIHByb2ZpbGUuZHVtcCgp
OworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwIDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyAr
K2kpCisgICAgICAgIG1fY2hpbGRyZW5baV0tPnJlcG9ydCgpOworCisgICAgZnByaW50ZihzdGRv
dXQsICI8L0NvZGVQcm9maWxpbmcgJXM6JWQ+XG4iLCBtX2ZpbGUuZGF0YSgpLCBtX2xpbmVObyk7
Cit9CisKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxl
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDb2RlUHJvZmlsZV9oCisjZGVmaW5lIENv
ZGVQcm9maWxlX2gKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJTb3VyY2VDb2Rl
LmgiCisjaW5jbHVkZSAiVGllcmVkTU1hcEFycmF5LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBDb2RlUHJvZmlsZSB7CitwdWJsaWM6CisgICAgQ29kZVByb2ZpbGUoY29uc3QgU291cmNl
Q29kZSYgc291cmNlLCBDb2RlUHJvZmlsZSogcGFyZW50KQorICAgICAgICA6IG1fZmlsZShzb3Vy
Y2UucHJvdmlkZXIoKS0+dXJsKCkudXRmOCgpKQorICAgICAgICAsIG1fbGluZU5vKHNvdXJjZS5m
aXJzdExpbmUoKSkKKyAgICAgICAgLCBtX3BhcmVudChwYXJlbnQpCisgICAgeworICAgICAgICBp
ZiAocGFyZW50KQorICAgICAgICAgICAgcGFyZW50LT5hZGRDaGlsZCh0aGlzKTsKKyAgICB9CisK
KyAgICB2b2lkIHNhbXBsZSh2b2lkKiBwYywgdm9pZCoqIGZyYW1lUG9pbnRlcik7CisgICAgdm9p
ZCByZXBvcnQoKTsKKworICAgIENvZGVQcm9maWxlKiBwYXJlbnQoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fcGFyZW50OworICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZENoaWxkKENvZGVQcm9m
aWxlKiBjaGlsZCkKKyAgICB7CisgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKGFkb3B0UHRyKGNo
aWxkKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGVudW0gQ29kZVR5cGUgeworICAgICAgICBF
bmdpbmVDb2RlLAorICAgICAgICBHbG9iYWxUaHVuaywKKyAgICAgICAgUmVnRXhwQ29kZSwKKyAg
ICAgICAgREZHSklULAorICAgICAgICBCYXNlbGluZU9ubHksCisgICAgICAgIEJhc2VsaW5lUHJv
ZmlsZSwKKyAgICAgICAgQmFzZWxpbmVPU1IsCisgICAgICAgIEVuZ2luZUZyYW1lLAorICAgICAg
ICBOdW1iZXJPZkNvZGVUeXBlcworICAgIH07CisgICAgc3RydWN0IENvZGVSZWNvcmQgeworICAg
ICAgICBDb2RlUmVjb3JkKHZvaWQqIHBjLCBDb2RlVHlwZSB0eXBlKQorICAgICAgICAgICAgOiBw
YyhwYykKKyAgICAgICAgICAgICwgdHlwZSh0eXBlKQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICAgICAgdm9pZCogcGM7CisgICAgICAgIENvZGVUeXBlIHR5cGU7CisgICAgfTsKKworICAgIENT
dHJpbmcgbV9maWxlOworICAgIHVuc2lnbmVkIG1fbGluZU5vOworICAgIENvZGVQcm9maWxlKiBt
X3BhcmVudDsKKyAgICBWZWN0b3I8IE93blB0cjxDb2RlUHJvZmlsZT4gPiBtX2NoaWxkcmVuOwor
ICAgIFRpZXJlZE1NYXBBcnJheTxDb2RlUmVjb3JkPiBtX3NhbXBsZXM7CisKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogc19jb2RlVHlwZU5hbWVzW051bWJlck9mQ29kZVR5cGVzXTsKK307CisKK30K
KworI2VuZGlmIC8vIENvZGVQcm9maWxlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKKworI2luY2x1
ZGUgIkNvZGVQcm9maWxlLmgiCisjaW5jbHVkZSAiTWV0YUFsbG9jYXRvci5oIgorI2luY2x1ZGUg
InNpZ25hbC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9sYXRpbGUgQ29kZVByb2ZpbGUqIENv
ZGVQcm9maWxpbmc6OnNfcHJvZmlsZVN0YWNrID0gMDsKK0NvZGVQcm9maWxpbmc6Ok1vZGUgQ29k
ZVByb2ZpbGluZzo6c19tb2RlID0gQ29kZVByb2ZpbGluZzo6RGlzYWJsZWQ7CitXVEY6Ok1ldGFB
bGxvY2F0b3JUcmFja2VyKiBDb2RlUHJvZmlsaW5nOjpzX3RyYWNrZXIgPSAwOworCisvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gc3RhcnQgJiBzdG9wIHRoZSB0aW1lci4KKy8vIFByZXNlbnRseSB3ZSdy
ZSB1c2luZyB0aGUgd2FsbC1jbG9jayB0aW1lciwgc2luY2UgdGhpcyBzZWVtcyB0byBnaXZlIHRo
ZSBiZXN0IHJlc3VsdHMuCitzdGF0aWMgdm9pZCBzZXRQcm9maWxlVGltZXIodW5zaWduZWQgdXNl
YykKK3sKKyAgICBpdGltZXJ2YWwgdGltZXI7CisgICAgdGltZXIuaXRfdmFsdWUudHZfc2VjID0g
MDsKKyAgICB0aW1lci5pdF92YWx1ZS50dl91c2VjID0gdXNlYzsKKyAgICB0aW1lci5pdF9pbnRl
cnZhbC50dl9zZWMgPSAwOworICAgIHRpbWVyLml0X2ludGVydmFsLnR2X3VzZWMgPSB1c2VjOwor
ICAgIHNldGl0aW1lcihJVElNRVJfUkVBTCwgJnRpbWVyLCAwKTsKK30KKworLy8gQ2FsbGJhY2sg
dHJpZ2dlcmVkIHdoZW4gdGhlIHRpbWVyIGlzIGZpcmVkLgordm9pZCBDb2RlUHJvZmlsaW5nOjpw
cm9maWxpbmdUaW1lcihpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVhcCkKK3sKKyNpZiBQTEFURk9S
TShNQUMpICYmIENQVShYODZfNjQpCisgICAgbWNvbnRleHRfdCBjb250ZXh0ID0gc3RhdGljX2Nh
c3Q8dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250ZXh0OworICAgIENvZGVQcm9maWxlKiBwcm9m
aWxlU3RhY2sgPSBjb25zdF9jYXN0PENvZGVQcm9maWxlKj4oc19wcm9maWxlU3RhY2spOworICAg
IGlmIChwcm9maWxlU3RhY2spCisgICAgICAgIHByb2ZpbGVTdGFjay0+c2FtcGxlKHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGNvbnRleHQtPl9fc3MuX19yaXApLCByZWludGVycHJldF9jYXN0PHZv
aWQqKj4oY29udGV4dC0+X19zcy5fX3JicCkpOworI2VuZGlmCit9CisKK3ZvaWQgQ29kZVByb2Zp
bGluZzo6bm90aWZ5QWxsb2NhdG9yKFdURjo6TWV0YUFsbG9jYXRvciogYWxsb2NhdG9yKQorewor
ICAgIC8vIENoZWNrIGZvciBKU0NfQ09ERV9QUk9GSUxJTkcuCisgICAgY29uc3QgY2hhciogY29k
ZVByb2ZpbGluZ01vZGUgPSBnZXRlbnYoIkpTQ19DT0RFX1BST0ZJTElORyIpOworICAgIGlmICgh
Y29kZVByb2ZpbGluZ01vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIENoZWNrIGZvciBh
IHZhbGlkIG1vZGUsIGN1cnJlbnRseSAiMSIsICIyIiwgb3IgIjMiLgorICAgIGlmICghY29kZVBy
b2ZpbGluZ01vZGVbMF0gfHwgY29kZVByb2ZpbGluZ01vZGVbMV0pCisgICAgICAgIHJldHVybjsK
KyAgICBzd2l0Y2ggKCpjb2RlUHJvZmlsaW5nTW9kZSkgeworICAgIGNhc2UgJzEnOgorICAgICAg
ICBzX21vZGUgPSBFbmFibGVkOworICAgICAgICBicmVhazsKKyAgICBjYXNlICcyJzoKKyAgICAg
ICAgc19tb2RlID0gVmVyYm9zZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnMyc6CisgICAg
ICAgIHNfbW9kZSA9IFZlcnlWZXJib3NlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGVuYWJsZWQoKSk7CisgICAgQVNT
RVJUKCFzX3RyYWNrZXIpOworICAgIHNfdHJhY2tlciA9IG5ldyBXVEY6Ok1ldGFBbGxvY2F0b3JU
cmFja2VyKCk7CisgICAgYWxsb2NhdG9yLT50cmFja0FsbG9jYXRpb25zKHNfdHJhY2tlcik7Cit9
CisKK3ZvaWQqIENvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEModm9pZCogYWRkcmVzcykK
K3sKKyAgICBpZiAoIXNfdHJhY2tlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgV1RGOjpNZXRh
QWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBzX3RyYWNrZXItPmZpbmQoYWRkcmVzcyk7CisgICAg
aWYgKCFoYW5kbGUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBoYW5kbGUtPm93bmVy
VUlEKCk7Cit9CisKK3ZvaWQgQ29kZVByb2ZpbGluZzo6YmVnaW4oY29uc3QgU291cmNlQ29kZSYg
c291cmNlKQoreworICAgIC8vIFB1c2ggYSBuZXcgQ29kZVByb2ZpbGUgb250byB0aGUgc3RhY2sg
Zm9yIGVhY2ggc2NyaXB0IGVuY291bnRlcmVkLgorICAgIENvZGVQcm9maWxlKiBwcm9maWxlU3Rh
Y2sgPSBjb25zdF9jYXN0PENvZGVQcm9maWxlKj4oc19wcm9maWxlU3RhY2spOworICAgIGJvb2wg
YWxyZWFkeVByb2ZpbGluZyA9IHByb2ZpbGVTdGFjazsKKyAgICBzX3Byb2ZpbGVTdGFjayA9IHBy
b2ZpbGVTdGFjayA9IG5ldyBDb2RlUHJvZmlsZShzb3VyY2UsIHByb2ZpbGVTdGFjayk7CisKKyAg
ICAvLyBJcyB0aGUgcHJvZmlsZXIgYWxyZWFkeSBydW5uaW5nIC0gaWYgc28sIHRoZSB0aW1lciB3
aWxsIGFscmVhZHkgYmUgc2V0IHVwLgorICAgIGlmIChhbHJlYWR5UHJvZmlsaW5nKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBSZWdzaXRlciBhIHNpZ25hbCBoYW5kbGVyICYgaXRpbWVyLgor
ICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSBy
ZWludGVycHJldF9jYXN0PHZvaWQgKCopKGludCwgc3RydWN0IF9fc2lnaW5mbyAqLCB2b2lkICop
Pihwcm9maWxpbmdUaW1lcik7CisgICAgc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOworICAg
IGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87CisgICAgc2lnYWN0aW9uKFNJR0FMUk0sICZh
Y3Rpb24sIDApOworICAgIHNldFByb2ZpbGVUaW1lcigxMDApOworfQorCit2b2lkIENvZGVQcm9m
aWxpbmc6OmVuZCgpCit7CisgICAgLy8gUG9wIHRoZSBjdXJyZW50IHByb2ZpbGVyIG9mZiB0aGUg
c3RhY2suCisgICAgQ29kZVByb2ZpbGUqIGN1cnJlbnQgPSBjb25zdF9jYXN0PENvZGVQcm9maWxl
Kj4oc19wcm9maWxlU3RhY2spOworICAgIEFTU0VSVChjdXJyZW50KTsKKyAgICBzX3Byb2ZpbGVT
dGFjayA9IGN1cnJlbnQtPnBhcmVudCgpOworCisgICAgLy8gSXMgdGhpcyB0aGUgb3V0ZXJtb3N0
IHNjcmlwdCBiZWluZyBwcm9maWxlZD8gLSBpZiBub3QsIGp1c3QgcmV0dXJuLgorICAgIC8vIFdl
IHBlcmZvcm0gYWxsIG91dHB1dCBvZiBwcm9maWxlcyByZWN1cnNpdmVseSBmcm9tIHRoZSBvdXRl
cm1vc3Qgc2NyaXB0LAorICAgIC8vIHRvIG1pbmltaXplIHByb2ZpbGluZyBvdmVyaGVhZCBmcm9t
IHNrZXdpbmcgcmVzdWx0cy4KKyAgICBpZiAoc19wcm9maWxlU3RhY2spCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIFN0b3AgcHJvZmlsaW5nCisgICAgc2V0UHJvZmlsZVRpbWVyKDApOworCisg
ICAgY3VycmVudC0+cmVwb3J0KCk7CisgICAgZGVsZXRlIGN1cnJlbnQ7Cit9CisKK30KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBDb2RlUHJvZmlsaW5nX2gKKyNkZWZpbmUgQ29kZVByb2Zp
bGluZ19oCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBNZXRhQWxsb2NhdG9yOworY2xhc3Mg
TWV0YUFsbG9jYXRvclRyYWNrZXI7CisKK30KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENv
ZGVQcm9maWxlOworY2xhc3MgU291cmNlQ29kZTsKKworY2xhc3MgQ29kZVByb2ZpbGluZyB7Cisg
ICAgZW51bSBNb2RlIHsKKyAgICAgICAgRGlzYWJsZWQsCisgICAgICAgIEVuYWJsZWQsCisgICAg
ICAgIFZlcmJvc2UsCisgICAgICAgIFZlcnlWZXJib3NlCisgICAgfTsKKworcHVibGljOgorICAg
IENvZGVQcm9maWxpbmcoY29uc3QgU291cmNlQ29kZSYgc291cmNlKQorICAgICAgICA6IG1fYWN0
aXZlKGVuYWJsZWQoKSkKKyAgICB7CisgICAgICAgIGlmIChtX2FjdGl2ZSkKKyAgICAgICAgICAg
IGJlZ2luKHNvdXJjZSk7CisgICAgfQorCisgICAgfkNvZGVQcm9maWxpbmcoKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fYWN0aXZlKQorICAgICAgICAgICAgZW5kKCk7CisgICAgfQorCisgICAgc3Rh
dGljIGJvb2wgZW5hYmxlZCgpIHsgcmV0dXJuIHNfbW9kZSAhPSBEaXNhYmxlZDsgfQorICAgIHN0
YXRpYyBib29sIGJlVmVyYm9zZSgpIHsgcmV0dXJuIHNfbW9kZSA+PSBWZXJib3NlOyB9CisgICAg
c3RhdGljIGJvb2wgYmVWZXJ5VmVyYm9zZSgpIHsgcmV0dXJuIHNfbW9kZSA+PSBWZXJ5VmVyYm9z
ZTsgfQorCisgICAgc3RhdGljIHZvaWQgbm90aWZ5QWxsb2NhdG9yKFdURjo6TWV0YUFsbG9jYXRv
ciopOworICAgIHN0YXRpYyB2b2lkKiBnZXRPd25lclVJREZvclBDKHZvaWQqKTsKKworcHJpdmF0
ZToKKyAgICB2b2lkIGJlZ2luKGNvbnN0IFNvdXJjZUNvZGUmKTsKKyAgICB2b2lkIGVuZCgpOwor
CisgICAgYm9vbCBtX2FjdGl2ZTsKKworICAgIHN0YXRpYyB2b2lkIHByb2ZpbGluZ1RpbWVyKGlu
dCwgc2lnaW5mb190Kiwgdm9pZCopOworCisgICAgc3RhdGljIE1vZGUgc19tb2RlOworICAgIHN0
YXRpYyBXVEY6Ok1ldGFBbGxvY2F0b3JUcmFja2VyKiBzX3RyYWNrZXI7CisgICAgc3RhdGljIHZv
bGF0aWxlIENvZGVQcm9maWxlKiBzX3Byb2ZpbGVTdGFjazsKK307CisKK30KKworI2VuZGlmIC8v
IENvZGVQcm9maWxpbmdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJv
ZmlsZVRyZWVOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L1Byb2ZpbGVUcmVlTm9kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBy
b2ZpbGVUcmVlTm9kZV9oCisjZGVmaW5lIFByb2ZpbGVUcmVlTm9kZV9oCisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBQcm9maWxlVHJlZU5vZGUgeworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJp
bmcsIFByb2ZpbGVUcmVlTm9kZT4gTWFwOworICAgIHR5cGVkZWYgc3RkOjpwYWlyPFN0cmluZywg
UHJvZmlsZVRyZWVOb2RlPiBNYXBFbnRyeTsKKworcHVibGljOgorICAgIFByb2ZpbGVUcmVlTm9k
ZSgpCisgICAgICAgIDogbV9jb3VudCgwKQorICAgICAgICAsIG1fY2hpbGRyZW4oMCkKKyAgICB7
CisgICAgfQorCisgICAgflByb2ZpbGVUcmVlTm9kZSgpCisgICAgeworICAgICAgICBkZWxldGUg
bV9jaGlsZHJlbjsKKyAgICB9CisKKyAgICBQcm9maWxlVHJlZU5vZGUqIHNhbXBsZUNoaWxkKGNv
bnN0IGNoYXIqIG5hbWUpCisgICAgeworICAgICAgICBpZiAoIW1fY2hpbGRyZW4pCisgICAgICAg
ICAgICBtX2NoaWxkcmVuID0gbmV3IE1hcCgpOworICAgIAorICAgICAgICBQcm9maWxlVHJlZU5v
ZGUgbmV3RW50cnk7CisgICAgICAgIHBhaXI8TWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0g
bV9jaGlsZHJlbi0+YWRkKFN0cmluZyhuYW1lKSwgbmV3RW50cnkpOworICAgICAgICBQcm9maWxl
VHJlZU5vZGUqIGNoaWxkSW5NYXAgPSAmcmVzdWx0LmZpcnN0LT5zZWNvbmQ7CisgICAgICAgICsr
Y2hpbGRJbk1hcC0+bV9jb3VudDsKKyAgICAgICAgcmV0dXJuIGNoaWxkSW5NYXA7CisgICAgfQor
CisgICAgdm9pZCBkdW1wKCkKKyAgICB7CisgICAgICAgIGR1bXBJbnRlcm5hbCgwKTsKKyAgICB9
CisKKyAgICB1aW50NjRfdCBjb3VudCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9jb3VudDsK
KyAgICB9CisKKyAgICB1aW50NjRfdCBjaGlsZENvdW50KCkKKyAgICB7CisgICAgICAgIGlmICgh
bV9jaGlsZHJlbikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB1aW50NjRfdCBjaGls
ZENvdW50ID0gMDsKKyAgICAgICAgZm9yIChNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi0+
YmVnaW4oKTsgaXQgIT0gbV9jaGlsZHJlbi0+ZW5kKCk7ICsraXQpCisgICAgICAgICAgICBjaGls
ZENvdW50ICs9IGl0LT5zZWNvbmQuY291bnQoKTsKKyAgICAgICAgcmV0dXJuIGNoaWxkQ291bnQ7
CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIGR1bXBJbnRlcm5hbCh1bnNpZ25lZCBp
bmRlbnQpCisgICAgeworICAgICAgICBpZiAoIW1fY2hpbGRyZW4pCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgLy8gQ29weSBwb2ludGVycyB0byBhbGwgY2hpbGRyZW4gaW50byBhIHZl
Y3RvciwgYW5kIHNvcnQgdGhlIHZlY3RvciBieSBzYW1wbGUgY291bnQuCisgICAgICAgIFZlY3Rv
cjxNYXBFbnRyeSo+IGVudHJpZXM7CisgICAgICAgIGZvciAoTWFwOjppdGVyYXRvciBpdCA9IG1f
Y2hpbGRyZW4tPmJlZ2luKCk7IGl0ICE9IG1fY2hpbGRyZW4tPmVuZCgpOyArK2l0KQorICAgICAg
ICAgICAgZW50cmllcy5hcHBlbmQoJippdCk7CisgICAgICAgIHFzb3J0KGVudHJpZXMuYmVnaW4o
KSwgZW50cmllcy5zaXplKCksIHNpemVvZihNYXBFbnRyeSopLCBjb21wYXJlRW50cmllcyk7CisK
KyAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBjaGlsZHJlbiBpbiBzYW1wbGUtZnJlcXVlbmN5
IG9yZGVyLgorICAgICAgICBmb3IgKHNpemVfdCBlID0gMDsgZSA8IGVudHJpZXMuc2l6ZSgpOyAr
K2UpIHsKKyAgICAgICAgICAgIE1hcEVudHJ5KiBlbnRyeSA9IGVudHJpZXNbZV07CisKKyAgICAg
ICAgICAgIC8vIFByaW50IHRoZSBudW1iZXIgb2Ygc2FtcGxlcywgdGhlIG5hbWUgb2YgdGhpcyBu
b2RlLCBhbmQgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRoYXQgYXJlIHN0YWNrLXRvcAorICAgICAg
ICAgICAgLy8gaW4gdGhpcyBub2RlIChzYW1wbGVzIGRpcmVjdGx5IHdpdGhpbiB0aGlzIG5vZGUs
IGV4Y2x1ZGluZyBzYW1wbGVzIGluIGNoaWxkcmVuLgorICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGluZGVudDsgKytpKQorICAgICAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0
LCAiICAgICIpOworICAgICAgICAgICAgZnByaW50ZihzdGRvdXQsICIlIDhsbGQ6ICVzICglbGxk
IHN0YWNrIHRvcClcbiIsCisgICAgICAgICAgICAgICAgZW50cnktPnNlY29uZC5jb3VudCgpLAor
ICAgICAgICAgICAgICAgIGVudHJ5LT5maXJzdC51dGY4KCkuZGF0YSgpLAorICAgICAgICAgICAg
ICAgIGVudHJ5LT5zZWNvbmQuY291bnQoKSAtIGVudHJ5LT5zZWNvbmQuY2hpbGRDb3VudCgpKTsK
KworICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgZHVtcCB0aGUgY2hpbGQgbm9kZXMuCisgICAg
ICAgICAgICBlbnRyeS0+c2Vjb25kLmR1bXBJbnRlcm5hbChpbmRlbnQgKyAxKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHN0YXRpYyBpbnQgY29tcGFyZUVudHJpZXMoY29uc3Qgdm9pZCogYSwg
Y29uc3Qgdm9pZCogYikKKyAgICB7CisgICAgICAgIHVpbnQ2NF90IGRhID0gKCpzdGF0aWNfY2Fz
dDxNYXBFbnRyeSogY29uc3QgKj4oYSkpLT5zZWNvbmQuY291bnQoKTsKKyAgICAgICAgdWludDY0
X3QgZGIgPSAoKnN0YXRpY19jYXN0PE1hcEVudHJ5KiBjb25zdCAqPihiKSktPnNlY29uZC5jb3Vu
dCgpOworICAgICAgICByZXR1cm4gKGRhIDwgZGIpIC0gKGRhID4gZGIpOworICAgIH0KKworICAg
IHVpbnQ2NF90IG1fY291bnQ7CisgICAgTWFwKiBtX2NoaWxkcmVuOworfTsKKworfQorCisjZW5k
aWYgLy8gUHJvZmlsZVRyZWVOb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL1RpZXJlZE1NYXBBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9UaWVyZWRNTWFwQXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90b29scy9UaWVyZWRNTWFwQXJyYXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBUaWVyZWRNTWFwQXJyYXlfaAorI2RlZmluZSBUaWVyZWRNTWFwQXJyYXlfaAorCisjaW5j
bHVkZSAiT1NBbGxvY2F0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgY2xhc3Mg
aW1wbGVtZW50cyBhIHNpbXBsZSBhcnJheSBjbGFzcyB0aGF0IGNhbiBiZSBncm93biBieSBhcHBl
bmRpbmcgaXRlbXMgdG8gdGhlIGVuZC4KKy8vIFRoaXMgY2xhc3MgaXMgaW1wbGVtZW50ZWQgcHVy
ZWx5IGluIHRlcm1zIG9mIHN5c3RlbSBhbGxvY2F0aW9ucywgd2l0aCBubyBtYWxsb2MvZnJlZSwg
c28gdGhhdAorLy8gaXQgY2FuIHNhZmVseSBiZSB1c2VkIGZyb20gYSBzZWNvbmRhcnkgdGhyZWFk
IHdoaWxzdCB0aGUgbWFpbiB0aHJhZCBpcyBwYXVzZWQgKHBvdGVudGlhbGx5CisvLyBob2xkaW5n
IHRoZSBmYXN0IG1hbGxvYyBoZWFwIGxvY2spLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNz
IFRpZXJlZE1NYXBBcnJheSB7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBlbnRyaWVzUGVyQmxv
Y2sgPSA0MDk2OworCitwdWJsaWM6CisgICAgVGllcmVkTU1hcEFycmF5KCkKKyAgICAgICAgOiBt
X2RpcmVjdG9yeUNvdW50KDQwOTYpCisgICAgICAgICwgbV9kaXJlY3Rvcnkoc3RhdGljX2Nhc3Q8
VCoqPihPU0FsbG9jYXRvcjo6cmVzZXJ2ZUFuZENvbW1pdChtX2RpcmVjdG9yeUNvdW50ICogc2l6
ZW9mKFQqKSkpKQorICAgICAgICAsIG1fc2l6ZSgwKQorICAgIHsKKyAgICAgICAgZm9yIChzaXpl
X3QgYmxvY2sgPSAwOyBibG9jayA8IG1fZGlyZWN0b3J5Q291bnQ7ICsrYmxvY2spCisgICAgICAg
ICAgICBtX2RpcmVjdG9yeVtibG9ja10gPSAwOworICAgIH0KKworICAgIH5UaWVyZWRNTWFwQXJy
YXkoKQorICAgIHsKKyAgICAgICAgc2l6ZV90IHVzZWRDb3VudCA9IChtX3NpemUgKyAoZW50cmll
c1BlckJsb2NrIC0gMSkpIC8gZW50cmllc1BlckJsb2NrOworICAgICAgICBBU1NFUlQodXNlZENv
dW50ID09IG1fZGlyZWN0b3J5Q291bnQgfHwgIW1fZGlyZWN0b3J5W3VzZWRDb3VudF0pOworCisg
ICAgICAgIGZvciAoc2l6ZV90IGJsb2NrID0gMDsgYmxvY2sgPCB1c2VkQ291bnQ7ICsrYmxvY2sp
IHsKKyAgICAgICAgICAgIEFTU0VSVChtX2RpcmVjdG9yeVtibG9ja10pOworICAgICAgICAgICAg
T1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZShtX2RpcmVjdG9yeVtibG9ja10sIGVudHJp
ZXNQZXJCbG9jayAqIHNpemVvZihUKSk7CisgICAgICAgIH0KKworICAgICAgICBPU0FsbG9jYXRv
cjo6ZGVjb21taXRBbmRSZWxlYXNlKG1fZGlyZWN0b3J5LCBtX2RpcmVjdG9yeUNvdW50ICogc2l6
ZW9mKFQqKSk7CisgICAgfQorCisgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpCisgICAg
eworICAgICAgICBBU1NFUlQoaW5kZXggPCBtX3NpemUpOworICAgICAgICBzaXplX3QgYmxvY2sg
PSBpbmRleCAvIGVudHJpZXNQZXJCbG9jazsKKyAgICAgICAgc2l6ZV90IG9mZnNldCA9IGluZGV4
ICUgZW50cmllc1BlckJsb2NrOworCisgICAgICAgIEFTU0VSVChtX2RpcmVjdG9yeVtibG9ja10p
OworICAgICAgICByZXR1cm4gbV9kaXJlY3RvcnlbYmxvY2tdW29mZnNldF07CisgICAgfQorCisg
ICAgdm9pZCBhcHBlbmQoY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICAvLyBDaGVjayBp
ZiB0aGUgYXJyYXkgaXMgY29tcGxldGVseSBmdWxsLCBpZiBzbyBjcmVhdGUgbW9yZSBjYXBhY2l0
eSBpbiB0aGUgZGlyZWN0b3J5LgorICAgICAgICBpZiAobV9zaXplID09IG1fZGlyZWN0b3J5Q291
bnQgKiBlbnRyaWVzUGVyQmxvY2spIHsKKyAgICAgICAgICAgIC8vIFJlYWxsb2NhdGUgdGhlIGRp
cmVjdG9yeS4KKyAgICAgICAgICAgIHNpemVfdCBvbGREaXJlY3RvcnlTaXplID0gbV9kaXJlY3Rv
cnlDb3VudCAqIHNpemVvZihUKik7CisgICAgICAgICAgICBzaXplX3QgbmV3RGlyZWN0b3J5U2l6
ZSA9IG9sZERpcmVjdG9yeVNpemUgKiAyOworICAgICAgICAgICAgaWYgKG5ld0RpcmVjdG9yeVNp
emUgPCBvbGREaXJlY3RvcnlTaXplKQorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAg
ICAgICBtX2RpcmVjdG9yeSA9IE9TQWxsb2NhdG9yOjpyZWFsbG9jYXRlQ29tbWl0dGVkKG1fZGly
ZWN0b3J5LCBvbGREaXJlY3RvcnlTaXplLCBuZXdEaXJlY3RvcnlTaXplKTsKKworICAgICAgICAg
ICAgLy8gCisgICAgICAgICAgICBzaXplX3QgbmV3RGlyZWN0b3J5Q291bnQgPSBtX2RpcmVjdG9y
eUNvdW50ICogMjsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGJsb2NrID0gbV9kaXJlY3RvcnlD
b3VudDsgYmxvY2sgPCBuZXdEaXJlY3RvcnlDb3VudDsgKytibG9jaykKKyAgICAgICAgICAgICAg
ICBtX2RpcmVjdG9yeVtibG9ja10gPSAwOworICAgICAgICAgICAgbV9kaXJlY3RvcnlDb3VudCA9
IG5ld0RpcmVjdG9yeUNvdW50OworICAgICAgICB9CisKKyAgICAgICAgc2l6ZV90IGluZGV4ID0g
bV9zaXplOworICAgICAgICBzaXplX3QgYmxvY2sgPSBpbmRleCAvIGVudHJpZXNQZXJCbG9jazsK
KyAgICAgICAgc2l6ZV90IG9mZnNldCA9IGluZGV4ICUgZW50cmllc1BlckJsb2NrOworCisgICAg
ICAgIGlmICghb2Zmc2V0KSB7CisgICAgICAgICAgICBBU1NFUlQoIW1fZGlyZWN0b3J5W2Jsb2Nr
XSk7CisgICAgICAgICAgICBtX2RpcmVjdG9yeVtibG9ja10gPSBzdGF0aWNfY2FzdDxUKj4oT1NB
bGxvY2F0b3I6OnJlc2VydmVBbmRDb21taXQoZW50cmllc1BlckJsb2NrICogc2l6ZW9mKFQpKSk7
CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQobV9kaXJlY3RvcnlbYmxvY2tdKTsKKyAgICAg
ICAgKyttX3NpemU7CisgICAgICAgIG1fZGlyZWN0b3J5W2Jsb2NrXVtvZmZzZXRdID0gdmFsdWU7
CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKwor
cHJpdmF0ZToKKyAgICBzaXplX3QgbV9kaXJlY3RvcnlDb3VudDsKKyAgICBUKiogbV9kaXJlY3Rv
cnk7CisgICAgc2l6ZV90IG1fc2l6ZTsKK307CisKK30KKworI2VuZGlmIC8vIFRpZXJlZE1NYXBB
cnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9y
LmNwcAkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRh
QWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTAgKzU1LDExIEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBNZXRhQWxsb2NhdG9yOjpyZWxlYXMKICAgICAgICAgbV90cmFja2VyLT5yZWxl
YXNlKGhhbmRsZSk7CiB9CiAKLU1ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5k
bGUoTWV0YUFsbG9jYXRvciogYWxsb2NhdG9yLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5
dGVzKQorTWV0YUFsbG9jYXRvckhhbmRsZTo6TWV0YUFsbG9jYXRvckhhbmRsZShNZXRhQWxsb2Nh
dG9yKiBhbGxvY2F0b3IsIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93
bmVyVUlEKQogICAgIDogbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQogICAgICwgbV9zdGFydChzdGFy
dCkKICAgICAsIG1fc2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCisgICAgLCBtX293bmVyVUlEKG93
bmVyVUlEKQogewogICAgIEFTU0VSVChhbGxvY2F0b3IpOwogICAgIEFTU0VSVChzdGFydCk7CkBA
IC0xMjksNyArMTMwLDcgQEAgTWV0YUFsbG9jYXRvcjo6TWV0YUFsbG9jYXRvcihzaXplX3QgYWxs
bwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KDEpIDw8IG1fbG9nQWxsb2NhdGlvbkdy
YW51bGUgPT0gbV9hbGxvY2F0aW9uR3JhbnVsZSk7CiB9CiAKLVBhc3NSZWZQdHI8TWV0YUFsbG9j
YXRvckhhbmRsZT4gTWV0YUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzKQor
UGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZShz
aXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKQogewogICAgIFNwaW5Mb2NrSG9sZGVy
IGxvY2tlcigmbV9sb2NrKTsKIApAQCAtMTY3LDcgKzE2OCw3IEBAIFBhc3NSZWZQdHI8TWV0YUFs
bG9jYXRvckhhbmRsZT4gTWV0YUFsbG8KICAgICBtX251bUFsbG9jYXRpb25zKys7CiAjZW5kaWYK
IAotICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IG5ldyBNZXRhQWxsb2NhdG9ySGFu
ZGxlKHRoaXMsIHN0YXJ0LCBzaXplSW5CeXRlcyk7CisgICAgTWV0YUFsbG9jYXRvckhhbmRsZSog
aGFuZGxlID0gbmV3IE1ldGFBbGxvY2F0b3JIYW5kbGUodGhpcywgc3RhcnQsIHNpemVJbkJ5dGVz
LCBvd25lclVJRCk7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBhIHZlcmlmaWVyIHNjaGVtZSB0
aGF0IGdyb2tzIE1ldGFBbGxvY2F0b3JIYW5kbGVzCiAgICAgaGFuZGxlLT5kZXByZWNhdGVkVHVy
bk9mZlZlcmlmaWVyKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFs
bG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFs
bG9jYXRvci5oCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L01ldGFBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6
CiAgICAgCiAgICAgdmlydHVhbCB+TWV0YUFsbG9jYXRvcigpOwogICAgIAotICAgIFdURl9FWFBP
UlRfUFJJVkFURSBQYXNzUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IGFsbG9jYXRlKHNpemVf
dCBzaXplSW5CeXRlcyk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFBhc3NSZWZQdHI8TWV0YUFs
bG9jYXRvckhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJ
RCk7CiAKICAgICB2b2lkIHRyYWNrQWxsb2NhdGlvbnMoTWV0YUFsbG9jYXRvclRyYWNrZXIqIHRy
YWNrZXIpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2Nh
dG9ySGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRh
QWxsb2NhdG9ySGFuZGxlLmgJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0
MCw3IEBAIGNsYXNzIE1ldGFBbGxvY2F0b3I7CiAKIGNsYXNzIE1ldGFBbGxvY2F0b3JIYW5kbGUg
OiBwdWJsaWMgUmVmQ291bnRlZDxNZXRhQWxsb2NhdG9ySGFuZGxlPiwgcHVibGljIFJlZEJsYWNr
VHJlZTxNZXRhQWxsb2NhdG9ySGFuZGxlLCB2b2lkKj46Ok5vZGUgewogcHJpdmF0ZToKLSAgICBN
ZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0b3IqLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNp
emVJbkJ5dGVzKTsKKyAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0b3IqLCB2b2lk
KiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCk7CiAgICAgCiBwdWJs
aWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5NZXRhQWxsb2NhdG9ySGFuZGxlKCk7CkBAIC03
Miw3ICs3MiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2FsbG9jYXRvcik7CiAgICAg
ICAgIHJldHVybiBtX2FsbG9jYXRvcjsKICAgICB9Ci0gICAgCisKKyAgICB2b2lkKiBvd25lclVJ
RCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9vd25lclVJRDsKKyAgICB9CisKICAgICB2b2lk
KiBrZXkoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc3RhcnQ7CkBAIC04NCw2ICs4OSw3IEBA
IHByaXZhdGU6CiAgICAgTWV0YUFsbG9jYXRvciogbV9hbGxvY2F0b3I7CiAgICAgdm9pZCogbV9z
dGFydDsKICAgICBzaXplX3QgbV9zaXplSW5CeXRlczsKKyAgICB2b2lkKiBtX293bmVyVUlEOwog
fTsKIAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9PU0FsbG9jYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvT1NBbGxvY2F0b3IuaAkocmV2
aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9PU0FsbG9jYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIE9TQWxsb2NhdG9yX2gK
ICNkZWZpbmUgT1NBbGxvY2F0b3JfaAogCisjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUg
PHd0Zi9VbnVzZWRQYXJhbS5oPgogI2luY2x1ZGUgPHd0Zi9WTVRhZ3MuaD4KICNpbmNsdWRlIDx3
dGYvVk1UYWdzLmg+CkBAIC02NSw2ICs2NiwxMiBAQCBwdWJsaWM6CiAgICAgLy8gc3BlY2lmaWVk
LgogICAgIHN0YXRpYyB2b2lkKiByZXNlcnZlQW5kQ29tbWl0KHNpemVfdCByZXNlcnZlU2l6ZSwg
c2l6ZV90IGNvbW1pdFNpemUsIFVzYWdlID0gVW5rbm93blVzYWdlLCBib29sIHdyaXRhYmxlID0g
dHJ1ZSwgYm9vbCBleGVjdXRhYmxlID0gZmFsc2UpOwogICAgIHN0YXRpYyB2b2lkIGRlY29tbWl0
QW5kUmVsZWFzZSh2b2lkKiByZWxlYXNlQmFzZSwgc2l6ZV90IHJlbGVhc2VTaXplLCB2b2lkKiBk
ZWNvbW1pdEJhc2UsIHNpemVfdCBkZWNvbW1pdFNpemUpOworCisgICAgLy8gUmVhbGxvY2F0ZSBh
biBleGlzdGluZywgY29tbWl0dGVkIGFsbG9jYXRpb24uCisgICAgLy8gVGhlIHByaW9yIGFsbG9j
YXRpb24gbXVzdCBiZSBmdWxseSBjb21pdHRlZCwgYW5kIHRoZSBuZXcgc2l6ZSB3aWxsIGFsc28g
YmUgZnVsbHkgY29tbWl0dGVkLgorICAgIC8vIFRoaXMgaW50ZXJmYWNlIGlzIHByb3ZpZGVkIHNp
bmNlIGl0IG1heSBiZSBwb3NzaWJsZSB0byBvcHRpbWl6ZSB0aGlzIG9wZXJhdGlvbiBvbiBzb21l
IHBsYXRmb3Jtcy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBUKiByZWFs
bG9jYXRlQ29tbWl0dGVkKFQqLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUsIFVzYWdl
ID0gVW5rbm93blVzYWdlLCBib29sIHdyaXRhYmxlID0gdHJ1ZSwgYm9vbCBleGVjdXRhYmxlID0g
ZmFsc2UpOwogfTsKIAogaW5saW5lIHZvaWQqIE9TQWxsb2NhdG9yOjpyZXNlcnZlQW5kQ29tbWl0
KHNpemVfdCByZXNlcnZlU2l6ZSwgc2l6ZV90IGNvbW1pdFNpemUsIFVzYWdlIHVzYWdlLCBib29s
IHdyaXRhYmxlLCBib29sIGV4ZWN1dGFibGUpCkBAIC05Myw2ICsxMDAsMTUgQEAgaW5saW5lIHZv
aWQgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZQogICAgIGRlY29tbWl0QW5kUmVsZWFzZShi
YXNlLCBzaXplLCBiYXNlLCBzaXplKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGlu
ZSBUKiBPU0FsbG9jYXRvcjo6cmVhbGxvY2F0ZUNvbW1pdHRlZChUKiBvbGRCYXNlLCBzaXplX3Qg
b2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUsIFVzYWdlIHVzYWdlLCBib29sIHdyaXRhYmxlLCBib29s
IGV4ZWN1dGFibGUpCit7CisgICAgdm9pZCogbmV3QmFzZSA9IHJlc2VydmVBbmRDb21taXQobmV3
U2l6ZSwgdXNhZ2UsIHdyaXRhYmxlLCBleGVjdXRhYmxlKTsKKyAgICBtZW1jcHkobmV3QmFzZSwg
b2xkQmFzZSwgc3RkOjptaW4ob2xkU2l6ZSwgbmV3U2l6ZSkpOworICAgIGRlY29tbWl0QW5kUmVs
ZWFzZShvbGRCYXNlLCBvbGRTaXplKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG5ld0Jh
c2UpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpPU0FsbG9jYXRvcjsK
</data>
<flag name="commit-queue"
          id="125651"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124403</attachid>
            <date>2012-01-27 17:11:37 -0800</date>
            <delta_ts>2012-01-27 17:14:04 -0800</delta_ts>
            <desc>More build fixes (patch already reviewed by oliver)</desc>
            <filename>76855.7.patch</filename>
            <type>text/plain</type>
            <size>57887</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA2MTUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDEyLTAxLTI3ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBJbXBsZW1lbnQgYSBKSVQtY29kZSBhd2FyZSBzYW1wbGluZyBwcm9maWxlciBm
b3IgSlNDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
Njg1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgorCisgICAgICAgIFRvIGVu
YWJsZSB0aGUgcHJvZmlsZXIsIHNldCB0aGUgSlNDX0NPREVfUFJPRklMSU5HIGVudmlyb25tZW50
IHZhcmlhYmxlIHRvCisgICAgICAgIDEgKG5vIHRyYWNpbmcgdGhlIEMgc3RhY2spLCAyICh0cmFj
ZSBvbmUgbGV2ZWwgb2YgQyBjb2RlKSBvciAzIChyZWN1cnNpdmVseQorICAgICAgICB0cmFjZSBh
bGwgc2FtcGxlcykuCisKKyAgICAgICAgVGhlIHByb2ZpbGVyIHJlcXVpcmVzIC1mb21pdC1mcmFt
ZS1wb2ludGVyIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgYnVpbGQgZmxhZ3MuCisKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICAgICAtIFJlbW92ZWQgYW4gZXhwb3J0Lgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICAgICAtIEFkZGVkIG5ldyBmaWxlcworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgICAgICAtIEZvciBiYXNlbGluZSBjb2RlYmxvY2tzLCBjYWNoZSB0aGUgcmVz
dWx0IG9mIGNhbkNvbXBpbGVXaXRoREZHLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5o
OgorICAgICAgICAgICAgLSBGb3IgYmFzZWxpbmUgY29kZWJsb2NrcywgY2FjaGUgdGhlIHJlc3Vs
dCBvZiBjYW5Db21waWxlV2l0aERGRy4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxv
Y2F0b3IpOgorICAgICAgICAgICAgLSBOb3RpZnkgdGhlIHByb2ZpbGVyIHdoZW4gdGhlIGFsbG9j
YXRvciBpcyBjcmVhdGVkLgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxv
Y2F0ZSk6CisgICAgICAgICAgICAtIEluZm9ybSB0aGUgYWxsb2NhdGVkIG9mIHRoZSBvd25lclVJ
RC4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcDoKKyAg
ICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG9jYXRvcik6Cisg
ICAgICAgICAgICAtIE5vdGlmeSB0aGUgcHJvZmlsZXIgd2hlbiB0aGUgYWxsb2NhdG9yIGlzIGNy
ZWF0ZWQuCisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAg
ICAgICAgICAgIC0gSW5mb3JtIHRoZSBhbGxvY2F0ZWQgb2YgdGhlIG93bmVyVUlELgorICAgICAg
ICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgICAgICAtIElmIHByb2ZpbGluZywgZG9uJ3Qg
bWFzayB0aGUgcmV0dXJuIGFkZHJlc3MgaW4gSklUIGNvZGUuCisgICAgICAgICAgICAgIChXZSBk
byBzbyB0byBwcm92aWRlIG5pY2VyIGJhY2t0cmFjZXMgaW4gZGVidWcgYnVpbGRzKS4KKyAgICAg
ICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpldmFsdWF0ZSk6Cisg
ICAgICAgICAgICAtIE5vdGlmeSB0aGUgcHJvZmlsZXIgb2Ygc2NyaXB0IGV2YWx1YXRpb25zLgor
ICAgICAgICAqIHRvb2xzOiBBZGRlZC4KKyAgICAgICAgKiB0b29scy9Db2RlUHJvZmlsZS5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpzeW1ib2xOYW1lKToKKyAgICAgICAgICAgIC0gSGVscGVy
IGZ1bmN0aW9uIHRvIGdldCB0aGUgbmFtZSBvZiBhIHN5bWJvbCBpbiB0aGUgZnJhbWV3b3JrLgor
ICAgICAgICAoSlNDOjp0cnVuY2F0ZVRyYWNlKToKKyAgICAgICAgICAgIC0gSGVscGVyIHRvIHRy
dW5jYXRlIHRyYWNlcyBpbnRvIG1ldGhvZHMga25vdyB0byBoYXZlIHVuaW5mb3JtYXRpdmVseSBk
ZWVwIHN0YWNrcy4KKyAgICAgICAgKEpTQzo6Q29kZVByb2ZpbGU6OnNhbXBsZSk6CisgICAgICAg
ICAgICAtIFJlY29yZCBhIHN0YWNrIHRyYWNlIGNsYXNzaWZ5aW5nIHNhbXBsZXMuCisgICAgICAg
IChKU0M6OkNvZGVQcm9maWxlOjpyZXBvcnQpOgorICAgICAgICAgICAgLSB7UHJpbnQgcHJvZmls
ZXIgb3V0cHV0LgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxlLmg6IEFkZGVkLgorICAgICAg
ICAgICAgLSBuZXcgY2xhc3MsIGNhcHR1cmVzIGEgc2V0IG9mIHNhbXBsZXMgYXNzb2NpYXRlZCB3
aXRoIGFuIGV2YWx1YXRlZCBzY3JpcHQsCisgICAgICAgICAgICAgIGFuZCBuZXN0ZWQgdG8gcmVj
b3JkIHNhbXBsZXMgZnJvbSBzdWJzY3JpcHRzLgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxp
bmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q29kZVByb2ZpbGluZzo6cHJvZmlsaW5nVGlt
ZXIpOgorICAgICAgICAgICAgLSBjYWxsYmFjayBmaXJlZCB0aGVuIGEgdGltZXIgZXZlbnQgb2Nj
dXJzLgorICAgICAgICAoSlNDOjpDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IpOgorICAg
ICAgICAgICAgLSBjYWxsZWQgd2hlbiB0aGUgZXhlY3V0YWJsZSBhbGxvY2F0b3IgaXMgY29uc3Ry
dWN0ZWQuCisgICAgICAgIChKU0M6OkNvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEMpOgor
ICAgICAgICAgICAgLSBoZWxwZXIgdG8gbG9va3VwIHRoZSBjb2RlYmxvY2sgZnJvbSBhbiBhZGRy
ZXNzIGluIEpJVCBjb2RlCisgICAgICAgIChKU0M6OkNvZGVQcm9maWxpbmc6OmJlZ2luKToKKyAg
ICAgICAgICAgIC0gZW50ZXIgYSBwcm9maWxpbmcgc2NvcGUuCisgICAgICAgIChKU0M6OkNvZGVQ
cm9maWxpbmc6OmVuZCk6CisgICAgICAgICAgICAtIGV4aXQgYSBwcm9maWxpbmcgc2NvcGUuCisg
ICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGluZy5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0gbmV3
IGNsYXNzLCBpbnN0YW50aWFsZWQgZnJvbSBDb21wbGV0aW9uIHRvIGRlZmluZSBhIHByb2ZpbGlu
ZyBzY29wZS4KKyAgICAgICAgKiB0b29scy9Qcm9maWxlVHJlZU5vZGUuaDogQWRkZWQuCisgICAg
ICAgICAgICAtIG5ldyBjbGFzcywgdXNlZCB0byBjb25zdHJ1Y3QgYSB0cmVlIG9mIHNhbXBsZXMu
CisgICAgICAgICogdG9vbHMvVGllcmVkTU1hcEFycmF5Lmg6IEFkZGVkLgorICAgICAgICAgICAg
LSBuZXcgY2xhc3MsIGEgbWFsbG9jLWZyZWUgdmVjdG9yIChjYW4gYmUgdXNlZCB3aGlsZSB0aGUg
bWFpbiB0aHJlYWQgaXMgc3VzcGVuZGVkLAorICAgICAgICAgICAgICBwb3NzaWJseSBob2xkaW5n
IHRoZSBtYWxsb2MgaGVhcCBsb2NrKS4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6
CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5kbGUp
OgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgICAgICAt
IEFsbG93IGFsbG9jYXRpb24gaGFuZGxlcyB0byB0cmFjayBpbmZvcm1hdGlvbiBhYm91dCB0aGVp
ciBvd25lci4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5oOgorICAgICAgICAoTWV0YUFs
bG9jYXRvcik6CisgICAgICAgICAgICAtIEFsbG93IGFsbG9jYXRpb24gaGFuZGxlcyB0byB0cmFj
ayBpbmZvcm1hdGlvbiBhYm91dCB0aGVpciBvd25lci4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9j
YXRvckhhbmRsZS5oOgorICAgICAgICAoTWV0YUFsbG9jYXRvckhhbmRsZSk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Om93bmVyVUlEKToKKyAgICAgICAgICAgIC0gQWxsb3cg
YWxsb2NhdGlvbiBoYW5kbGVzIHRvIHRyYWNrIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyIG93bmVy
LgorICAgICAgICAqIHd0Zi9PU0FsbG9jYXRvci5oOgorICAgICAgICAoV1RGOjpPU0FsbG9jYXRv
cjo6cmVhbGxvY2F0ZUNvbW1pdHRlZCk6CisgICAgICAgICAgICAtIHJlYWxsb2NhdGUgYW4gZXhp
c3RpbmcsIGNvbW1pdHRlZCBtZW1vcnkgYWxsb2NhdGlvbi4KKwogMjAxMi0wMS0yNyAgTU9SSVRB
IEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbSlNDXSBTb21lIEpTX0VY
UE9SVERBVEEgbWF5IG5vdCBiZSBuZWNlc3NhcnkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw2ICsyMDAsOSBAQCBTRVQoSmF2
YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHJ1bnRpbWUvVGltZW91dENoZWNrZXIuY3BwCiAgICAg
cnVudGltZS9VU3RyaW5nLmNwcAogCisgICAgdG9vbHMvQ29kZVByb2ZpbGUuY3BwCisgICAgdG9v
bHMvQ29kZVByb2ZpbGluZy5jcHAKKwogICAgIHlhcnIvWWFyclBhdHRlcm4uY3BwCiAgICAgeWFy
ci9ZYXJySW50ZXJwcmV0ZXIuY3BwCiAgICAgeWFyci9ZYXJySklULmNwcApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEwNjE1MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkp
CkBAIC01MjUsNiArNTI1LDEyIEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9XZWFrUmFuZG9tLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dyaXRlQmFycmllci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVBy
b2ZpbGUuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuaCBc
CisJU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5oIFwKKwlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9UaWVyZWRNTWFwQXJyYXkuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9B
bGlnbm1lbnQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BbHdheXNJbmxpbmUuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BcnJheUJ1ZmZlci5jcHAgXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCShyZXZpc2lvbiAxMDYxNTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkp
CkBAIC00MTUsNyArNDE1LDYgQEAgX19aTjNXVEYxMnJhbmRvbU51bWJlckV2CiBfX1pOM1dURjEz
TWV0YUFsbG9jYXRvcjE3YWRkRnJlc2hGcmVlU3BhY2VFUHZtCiBfX1pOM1dURjEzTWV0YUFsbG9j
YXRvcjE3ZnJlZUZyZWVTcGFjZU5vZGVFUE5TMF8xM0ZyZWVTcGFjZU5vZGVFCiBfX1pOM1dURjEz
TWV0YUFsbG9jYXRvcjE4ZGVidWdGcmVlU3BhY2VTaXplRXYKLV9fWk4zV1RGMTNNZXRhQWxsb2Nh
dG9yOGFsbG9jYXRlRW0KIF9fWk4zV1RGMTNNZXRhQWxsb2NhdG9yQzJFbQogX19aTjNXVEYxM1N0
cmluZ0J1aWxkZXIxMXNocmlua1RvRml0RXYKIF9fWk4zV1RGMTNTdHJpbmdCdWlsZGVyMTVyZXNl
cnZlQ2FwYWNpdHlFagpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEw
NjE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDksNiArMjA5LDggQEAgU09VUkNFUyArPSBcCiAgICAgcnVudGltZS9TdHJ1Y3R1cmUu
Y3BwIFwKICAgICBydW50aW1lL1RpbWVvdXRDaGVja2VyLmNwcCBcCiAgICAgcnVudGltZS9VU3Ry
aW5nLmNwcCBcCisgICAgdG9vbHMvQ29kZVByb2ZpbGUuY3BwIFwKKyAgICB0b29scy9Db2RlUHJv
ZmlsaW5nLmNwcCBcCiAgICAgeWFyci9ZYXJySklULmNwcCBcCiAKICpzaDQqIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ0Nyw2ICsxNDQ3LDM0IEBACiAJCQk8L0ZpbGU+CiAJCTwvRmlsdGVyPgog
CQk8RmlsdGVyCisJCQlOYW1lPSJ0b29scyIKKwkJCT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlwuLlx0b29sc1xDb2RlUHJvZmlsZS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJ
PEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHRvb2xzXENvZGVQcm9maWxlLmgiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHRvb2xzXENv
ZGVQcm9maWxpbmcuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlx0b29sc1xDb2RlUHJvZmlsaW5nLmgiCisJCQkJPgorCQkJPC9GaWxlPgor
CQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHRvb2xzXFByb2ZpbGVUcmVlTm9kZS5o
IgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx0
b29sc1xUaWVyZWRNTWFwQXJyYXkuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCTwvRmlsdGVyPgor
CQk8RmlsdGVyCiAJCQlOYW1lPSJieXRlY29kZSIKIAkJCT4KIAkJCTxGaWxlCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlQ29tbW9uLnZzcHJvcHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZUNvbW1vbi52c3Byb3BzCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlQ29t
bW9uLnZzcHJvcHMJKHdvcmtpbmcgY29weSkKQEAgLTYsNyArNiw3IEBACiAJPgogCTxUb29sCiAJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9
IiZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmpcSmF2YVNjcmlwdENvcmVcRGVyaXZl
ZFNvdXJjZXNcJnF1b3Q7Oy4uLy4uLzsuLi8uLi9BUEkvOy4uLy4uL3BhcnNlci87Li4vLi4vYnl0
ZWNvbXBpbGVyLzsuLi8uLi9kZmcvOy4uLy4uL2ppdC87Li4vLi4vcnVudGltZS87Li4vLi4vYnl0
ZWNvZGUvOy4uLy4uL2ludGVycHJldGVyLzsuLi8uLi93dGYvOy4uLy4uL3Byb2ZpbGVyOy4uLy4u
L2Fzc2VtYmxlci87Li4vLi4vZGVidWdnZXIvOy4uLy4uL2hlYXAvOyZxdW90OyQoV2ViS2l0TGli
cmFyaWVzRGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNs
dWRlXHByaXZhdGUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGUm
cXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVcSmF2YVNjcmlwdENv
cmUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVccHJpdmF0ZSZx
dW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxwdGhyZWFkcyZxdW90OyIK
KwkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJnF1b3Q7JChDb25maWd1cmF0aW9uQnVp
bGREaXIpXG9ialxKYXZhU2NyaXB0Q29yZVxEZXJpdmVkU291cmNlc1wmcXVvdDs7Li4vLi4vOy4u
Ly4uL0FQSS87Li4vLi4vcGFyc2VyLzsuLi8uLi9ieXRlY29tcGlsZXIvOy4uLy4uL2RmZy87Li4v
Li4vaml0LzsuLi8uLi9ydW50aW1lLzsuLi8uLi90b29scy87Li4vLi4vYnl0ZWNvZGUvOy4uLy4u
L2ludGVycHJldGVyLzsuLi8uLi93dGYvOy4uLy4uL3Byb2ZpbGVyOy4uLy4uL2Fzc2VtYmxlci87
Li4vLi4vZGVidWdnZXIvOy4uLy4uL2hlYXAvOyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxp
bmNsdWRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHByaXZhdGUm
cXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7
JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1
b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDsk
KFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxwdGhyZWFkcyZxdW90OyIKIAkJUHJlcHJvY2Vz
c29yRGVmaW5pdGlvbnM9Il9fU1REX0MiCiAJCUZvcmNlZEluY2x1ZGVGaWxlcz0iSUNVVmVyc2lv
bi5oIgogCS8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTA2
MTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM4Miw2ICszODIsOCBAQAogCQk4NkFF
NjRBQTEzNUU1RTFDMDA5NjMwMTIgLyogU0g0QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkFFNjRBNzEzNUU1RTFDMDA5NjMwMTIgLyog
U0g0QXNzZW1ibGVyLmggKi87IH07CiAJCTg2QUU2QzREMTM2QTExRTQwMDk2MzAxMiAvKiBERkdG
UFJJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NkFFNkM0QjEzNkExMUU0MDA5NjMwMTIgLyogREZHRlBSSW5mby5oICovOyB9OwogCQk4NkFFNkM0
RTEzNkExMUU0MDA5NjMwMTIgLyogREZHR1BSSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZBRTZDNEMxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0dQ
UkluZm8uaCAqLzsgfTsKKwkJODZCNTgyNjcxNEQyNzk2QzAwQTlDMzA2IC8qIENvZGVQcm9maWxl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QjU4
MjJFMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgKi87IH07CisJCTg2QjU4MjY5
MTREMjc5NzAwMEE5QzMwNiAvKiBDb2RlUHJvZmlsaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MDNDRUYyMTRDNzU0NjQwMEFFNTlFMyAvKiBD
b2RlUHJvZmlsaW5nLmNwcCAqLzsgfTsKIAkJODZCOTlBRTMxMTdFNTc4MTAwREY1QTkwIC8qIFN0
cmluZ0J1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODZCOTlBRTExMTdFNTc4MTAwREY1QTkwIC8qIFN0cmluZ0J1ZmZlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2QkIwOUMwMTM4RTM4MUIw
MDU2NzAyRiAvKiBERkdSZXBhdGNoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg2QkIwOUJFMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmNw
cCAqLzsgfTsKIAkJODZCQjA5QzExMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QkIwOUJGMTM4RTM4
MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmggKi87IH07CkBAIC0xMDQyLDcgKzEwNDQsNyBAQAog
CQkxQTA4Mjc3ODE0MjE2OEQ3MDA5MENDQUMgLyogQmluYXJ5U2VtYXBob3JlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpbmFyeVNlbWFwaG9yZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQUE5RTU1MDE0OTgwOTM1MDAwMDFBOEEgLyogRnVuY3Rpb25hbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdW5jdGlvbmFsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDOTA1MTQyMEJBOUU4QTcwMDgxRTlEMCAvKiBWZXJzaW9u
LnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFZlcnNpb24ueGNjb25m
aWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFDOTA1MTQzMEJBOUU4QTcwMDgxRTlE
MCAvKiBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IG5h
bWUgPSBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZzsgcGF0aCA9IC4uL0NvbmZpZ3VyYXRpb25zL0ph
dmFTY3JpcHRDb3JlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzkw
NTE0MzBCQTlFOEE3MDA4MUU5RDAgLyogSmF2YVNjcmlwdENvcmUueGNjb25maWcgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gSmF2YVNjcmlwdENvcmUueGNjb25maWc7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDOTA1MTQ0MEJBOUU4QTcwMDgxRTlEMCAvKiBEZWJ1Z1Jl
bGVhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gRGVidWdSZWxl
YXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzkwNTE0NTBCQTlF
OEE3MDA4MUU5RDAgLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBh
dGggPSBCYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0FBOEI0
QTBEMzJDMzlBMDA0MUJDRkYgLyogSmF2YVNjcmlwdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKYXZhU2NyaXB0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MTM4LDYgKzExNDAsOCBAQAogCQk4NjAxNjFFMDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3Nl
bWJsZXJYODYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJs
ZXJYODYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYwMTYxRTEwRjNBODNDMTAw
Rjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg2MDE2MUUyMEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1v
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NjAzQ0VGMjE0Qzc1NDY0MDBB
RTU5RTMgLyogQ29kZVByb2ZpbGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDb2RlUHJvZmlsaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
ODYwM0NFRjMxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVByb2ZpbGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NjA0RjRGMjE0M0E2QzQ0MDBCMjk1RjUgLyogQ2hhbmdlTG9nICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IENo
YW5nZUxvZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYwNEY1MDMxNDNDRTFDMTAw
QjI5NUY1IC8qIEpTR2xvYmFsVGhpcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0dsb2JhbFRoaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYyNkJFQ0Ux
MTkyOEUzOTAwNzgyRkFCIC8qIFN0cmluZ1N0YXRpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gU3RyaW5nU3RhdGljcy5jcHA7IHBhdGggPSB0ZXh0L1N0cmluZ1N0
YXRpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTE4NSw2ICsxMTg5LDEw
IEBACiAJCTg2QUU2NEE3MTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU0g0QXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTg2QUU2QzRCMTM2QTExRTQwMDk2MzAxMiAvKiBERkdGUFJJbmZvLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ZQUkluZm8uaDsgcGF0aCA9IGRm
Zy9ERkdGUFJJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QUU2QzRDMTM2
QTExRTQwMDk2MzAxMiAvKiBERkdHUFJJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0dQUkluZm8uaDsgcGF0aCA9IGRmZy9ERkdHUFJJbmZvLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTg2QjU4MjJDMTREMjJGNUYwMEE5QzMwNiAvKiBQcm9maWxlVHJl
ZU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvZmlsZVRyZWVOb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2QjU4MjJFMTREMjM3M0IwMEE5QzMw
NiAvKiBDb2RlUHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDb2RlUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2QjU4MjJG
MTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDb2RlUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4
NkI1ODI2QTE0RDM1RDUxMDBBOUMzMDYgLyogVGllcmVkTU1hcEFycmF5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpZXJlZE1NYXBBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4NkI5OUFFMTExN0U1NzgxMDBERjVBOTAgLyogU3RyaW5nQnVmZmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0cmluZ0J1ZmZlci5oOyBwYXRoID0g
dGV4dC9TdHJpbmdCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZCQjA5
QkUxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHUmVwYXRjaC5jcHA7IHBhdGggPSBkZmcvREZHUmVwYXRjaC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QkIwOUJGMTM4RTM4MUIwMDU2NzAy
RiAvKiBERkdSZXBhdGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Jl
cGF0Y2guaDsgcGF0aCA9IGRmZy9ERkdSZXBhdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNjgwLDYgKzE2ODgsNyBAQAogCQkJCTk1QUI4MzFBMERBNDJDNjkwMEJDODNGMyAv
KiBwcm9maWxlciAqLywKIAkJCQk3RUY2RTBCQjBFQjdBMUVDMDA3OUFGQUYgLyogcnVudGltZSAq
LywKIAkJCQkxNDEyMTEwMDBBNDg3NzI2MDA0ODAyNTUgLyogdGVzdHMgKi8sCisJCQkJODYwM0NF
RjAxNEM3NTNFRjAwQUU1OUUzIC8qIHRvb2xzICovLAogCQkJCTY1MTYyRUYxMDhFNkEyMUMwMDc1
NTZDRCAvKiB3dGYgKi8sCiAJCQkJODZFQUM0OEMwRjkzRThCOTAwOEVDOTQ4IC8qIHlhcnIgKi8s
CiAJCQkJMUM5MDUxM0UwQkE5RTg4MzAwODFFOUQwIC8qIENvbmZpZ3VyYXRpb25zICovLApAQCAt
MTgyNiw3ICsxODM1LDYgQEAKIAkJCQk4NjVGNDA4NzEwRTdENTYzMDA5NDczNjEgLyogQVBJU2hp
bXMuaCAqLywKIAkJCQkxQ0FBOEI0QTBEMzJDMzlBMDA0MUJDRkYgLyogSmF2YVNjcmlwdC5oICov
LAogCQkJCTFDQUE4QjRCMEQzMkMzOUEwMDQxQkNGRiAvKiBKYXZhU2NyaXB0Q29yZS5oICovLAot
CQkJCTFDOTA1MTQzMEJBOUU4QTcwMDgxRTlEMCAvKiBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZyAq
LywKIAkJCQlCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3Bw
ICovLAogCQkJCUJDMDg5NEQ2MEZBRkJBMkQwMDAwMTg2NSAvKiBKU0FQSVZhbHVlV3JhcHBlci5o
ICovLAogCQkJCTE0MjEzNTlBMEE2NzdGNEYwMEE4MTk1RSAvKiBKU0Jhc2UuY3BwICovLApAQCAt
MTkxNiw2ICsxOTI0LDcgQEAKIAkJCQkxQzkwNTE0NDBCQTlFOEE3MDA4MUU5RDAgLyogRGVidWdS
ZWxlYXNlLnhjY29uZmlnICovLAogCQkJCTQ0OTA5N0VFMEY4RjgxQjUwMDc2QTMyNyAvKiBGZWF0
dXJlRGVmaW5lcy54Y2NvbmZpZyAqLywKIAkJCQk1REFGRDZDQjE0NkI2ODYzMDBGQkVGQjQgLyog
SlNDLnhjY29uZmlnICovLAorCQkJCTFDOTA1MTQzMEJBOUU4QTcwMDgxRTlEMCAvKiBKYXZhU2Ny
aXB0Q29yZS54Y2NvbmZpZyAqLywKIAkJCQlCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVGVz
dEFQSS54Y2NvbmZpZyAqLywKIAkJCQk1REFGRDZDQzE0NkI2OEI5MDBGQkVGQjQgLyogVGVzdFJl
Z0V4cC54Y2NvbmZpZyAqLywKIAkJCQkxQzkwNTE0MjBCQTlFOEE3MDA4MUU5RDAgLyogVmVyc2lv
bi54Y2NvbmZpZyAqLywKQEAgLTIzNjUsNiArMjM3NCwxOSBAQAogCQkJcGF0aCA9IHJ1bnRpbWU7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk4NjAzQ0VGMDE0Qzc1M0VGMDBB
RTU5RTMgLyogdG9vbHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0g
KAorCQkJCTg2QjU4MjJFMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgKi8sCisJ
CQkJODZCNTgyMkYxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmggKi8sCisJCQkJODYw
M0NFRjIxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcuY3BwICovLAorCQkJCTg2MDND
RUYzMTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmggKi8sCisJCQkJODZCNTgyMkMx
NEQyMkY1RjAwQTlDMzA2IC8qIFByb2ZpbGVUcmVlTm9kZS5oICovLAorCQkJCTg2QjU4MjZBMTRE
MzVENTEwMEE5QzMwNiAvKiBUaWVyZWRNTWFwQXJyYXkuaCAqLywKKwkJCSk7CisJCQlwYXRoID0g
dG9vbHM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk4NjU2NTczRTExNUJF
MzUyMDAyOTFGNDAgLyogdGV4dCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCkBAIC0zNjQwLDYgKzM2NjIsOCBAQAogCQkJCTBGOTMzMkExMTRDQTdERDEwMDg1RjND
NiAvKiBNZXRob2RDYWxsTGlua1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzJB
MzE0Q0E3REQ3MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjU1RjBGNDE0RDEwNjM5MDBBQzc2NDkgLyogQWJzdHJhY3RQQy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk4NkI1ODI2NzE0RDI3OTZDMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJODZCNTgyNjkxNEQyNzk3MDAwQTlDMzA2IC8qIENvZGVQcm9maWxpbmcu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NTYsNiArMTQ1
Niw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAsIG1f
c3BlY3VsYXRpdmVGYWlsQ291bnRlcigwKQogICAgICwgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50
ZXIoMCkKICAgICAsIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoMCkKKyAgICAsIG1fY2Fu
Q29tcGlsZVdpdGhERkdTdGF0ZShDb21waWxlV2l0aERGR1Vuc2V0KQogewogICAgIHNldE51bVBh
cmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKICAgICBvcHRpbWl6ZUFmdGVyV2FybVVw
KCk7CkBAIC0yMTY0LDE3ICsyMTY1LDE3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkNvZGVCbG9jazo6
Y29tcGlsZU9wdGkKICAgICByZXR1cm4gZXJyb3I7CiB9CiAKLWJvb2wgUHJvZ3JhbUNvZGVCbG9j
azo6Y2FuQ29tcGlsZVdpdGhERkcoKQorYm9vbCBQcm9ncmFtQ29kZUJsb2NrOjpjYW5Db21waWxl
V2l0aERGR0ludGVybmFsKCkKIHsKICAgICByZXR1cm4gREZHOjpjYW5Db21waWxlUHJvZ3JhbSh0
aGlzKTsKIH0KIAotYm9vbCBFdmFsQ29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERGRygpCitib29s
IEV2YWxDb2RlQmxvY2s6OmNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKQogewogICAgIHJldHVy
biBERkc6OmNhbkNvbXBpbGVFdmFsKHRoaXMpOwogfQogCi1ib29sIEZ1bmN0aW9uQ29kZUJsb2Nr
OjpjYW5Db21waWxlV2l0aERGRygpCitib29sIEZ1bmN0aW9uQ29kZUJsb2NrOjpjYW5Db21waWxl
V2l0aERGR0ludGVybmFsKCkKIHsKICAgICBpZiAobV9pc0NvbnN0cnVjdG9yKQogICAgICAgICBy
ZXR1cm4gREZHOjpjYW5Db21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QodGhpcyk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxMDYx
NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM4OCw3ICszODgsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZp
cnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5v
ZGUqKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpID0gMDsKICAgICAgICAg
dmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCkgPSAwOwotICAgICAgICB2aXJ0dWFsIGJv
b2wgY2FuQ29tcGlsZVdpdGhERkcoKSA9IDA7CisKKyAgICAgICAgZW51bSBDb21waWxlV2l0aERG
R1N0YXRlIHsKKyAgICAgICAgICAgIENvbXBpbGVXaXRoREZHRmFsc2UsCisgICAgICAgICAgICBD
b21waWxlV2l0aERGR1RydWUsCisgICAgICAgICAgICBDb21waWxlV2l0aERGR1Vuc2V0CisgICAg
ICAgIH07CisKKyAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwo
KSA9IDA7CisgICAgICAgIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKQorICAgICAgICB7CisgICAg
ICAgICAgICBib29sIHJlc3VsdCA9IGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKTsKKyAgICAg
ICAgICAgIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0ZSA9IHJlc3VsdCA/IENvbXBpbGVXaXRoREZH
VHJ1ZSA6IENvbXBpbGVXaXRoREZHRmFsc2U7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9CisgICAgICAgIENvbXBpbGVXaXRoREZHU3RhdGUgY2FuQ29tcGlsZVdpdGhERkdT
dGF0ZSgpIHsgcmV0dXJuIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0ZTsgfQorCiAgICAgICAgIGJv
b2wgaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NF
UlQoZ2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKQEAgLTExODcsNiArMTIw
Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBmcmllbmQgdm9pZCBXVEY6OmRlbGV0ZU93
bmVkUHRyPFJhcmVEYXRhPihSYXJlRGF0YSopOwogI2VuZGlmCiAgICAgICAgIE93blB0cjxSYXJl
RGF0YT4gbV9yYXJlRGF0YTsKKyAgICAgICAgQ29tcGlsZVdpdGhERkdTdGF0ZSBtX2NhbkNvbXBp
bGVXaXRoREZHU3RhdGU7CiAgICAgfTsKIAogICAgIC8vIFByb2dyYW0gY29kZSBpcyBub3QgbWFy
a2VkIGJ5IGFueSBmdW5jdGlvbiwgc28gd2UgbWFrZSB0aGUgZ2xvYmFsIG9iamVjdApAQCAtMTIy
Niw3ICsxMjQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3Qq
IGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKICAgICAgICAg
dmlydHVhbCB2b2lkIGpldHRpc29uKCk7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBs
YWNlbWVudCgpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKTsKKyAg
ICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKTsKICNlbmRpZgog
ICAgIH07CiAKQEAgLTEyNjAsNyArMTI3Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5O
b2RlKik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpOwogICAgICAgICB2aXJ0dWFs
IENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKLSAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBp
bGVXaXRoREZHKCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGR0ludGVy
bmFsKCk7CiAjZW5kaWYKIAogICAgIHByaXZhdGU6CkBAIC0xMjk3LDcgKzEzMTMsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChF
eGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOwogICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlz
b24oKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7Ci0gICAgICAg
IHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOworICAgICAgICB2aXJ0dWFsIGJvb2wg
Y2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpOwogI2VuZGlmCiAgICAgfTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShy
ZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAi
RXhlY3V0YWJsZUFsbG9jYXRvci5oIgogCiAjaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9S
X0RFTUFORCkKKyNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSA8d3RmL01ldGFB
bGxvY2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvUGFnZVJlc2VydmF0aW9uLmg+CiAjaW5jbHVkZSA8
d3RmL1ZNVGFncy5oPgpAQCAtOTMsNiArOTQsNyBAQCB2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6
OmluaXRpYWxpemVBbGxvCiB7CiAgICAgQVNTRVJUKCFhbGxvY2F0b3IpOwogICAgIGFsbG9jYXRv
ciA9IG5ldyBEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yKCk7CisgICAgQ29kZVByb2ZpbGluZzo6
bm90aWZ5QWxsb2NhdG9yKGFsbG9jYXRvcik7CiB9CiAKIEV4ZWN1dGFibGVBbGxvY2F0b3I6OkV4
ZWN1dGFibGVBbGxvY2F0b3IoSlNHbG9iYWxEYXRhJikKQEAgLTExMiw5ICsxMTQsNyBAQCBib29s
IEV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVtb3J5UHJlCiAKIFBhc3NSZWZQdHI8RXhlY3V0
YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoSlNHbG9iYWxE
YXRhJiwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCkKIHsKLSAgICBVTlVTRURf
UEFSQU0ob3duZXJVSUQpOwotCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJl
c3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOworICAgIFJlZlB0cjxFeGVj
dXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5
dGVzLCBvd25lclVJRCk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIENSQVNIKCk7CiAgICAg
cmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCShy
ZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDggKzI5LDggQEAK
IAogI2lmIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9GSVhFRCkKIAorI2luY2x1ZGUgIkNv
ZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlIDxlcnJuby5oPgotCiAjaW5jbHVkZSA8c3lzL21tYW4u
aD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgpA
QCAtOTYsNiArOTYsNyBAQCB2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxv
CiB7CiAgICAgQVNTRVJUKCFhbGxvY2F0b3IpOwogICAgIGFsbG9jYXRvciA9IG5ldyBGaXhlZFZN
UG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKTsKKyAgICBDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxv
Y2F0b3IoYWxsb2NhdG9yKTsKIH0KIAogRXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFs
bG9jYXRvcihKU0dsb2JhbERhdGEmKQpAQCAtMTE2LDEyICsxMTcsMTAgQEAgYm9vbCBFeGVjdXRh
YmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZQogCiBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCkKIHsKLSAgICBVTlVT
RURfUEFSQU0ob3duZXJVSUQpOwotCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+
IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOworICAgIFJlZlB0cjxF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJ
bkJ5dGVzLCBvd25lclVJRCk7CiAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgcmVsZWFzZUV4
ZWN1dGFibGVNZW1vcnkoZ2xvYmFsRGF0YSk7Ci0gICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci0+
YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOworICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9j
YXRlKHNpemVJbkJ5dGVzLCBvd25lclVJRCk7CiAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAg
ICAgICAgQ1JBU0goKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmNwcAkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJB
cmd1bWVudHMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2su
aCIKKyNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIK
ICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKQEAg
LTk2OCw3ICs5NjksNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBKSVRUaHVua3M6OnRyeUNhY2hlR2V0
CiAgICAgSklUOjpjb21waWxlR2V0QnlJZENoYWluKGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5n
bG9iYWxEYXRhLCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgcHJv
dG90eXBlQ2hhaW4sIGNvdW50LCBwcm9wZXJ0eU5hbWUsIHNsb3QsIG9mZnNldCwgcmV0dXJuQWRk
cmVzcyk7CiB9CiAKLSNpZiAhZGVmaW5lZChOREVCVUcpICYmICFFTkFCTEUoQ09ERV9QUk9GSUxJ
TkcpCisjaWYgIWRlZmluZWQoTkRFQlVHKQogCiBleHRlcm4gIkMiIHsKIApAQCAtOTg2LDcgKzk4
Nyw4IEBAIHN0cnVjdCBTdGFja0hhY2sgewogICAgICAgICA6IHN0YWNrRnJhbWUoc3RhY2tGcmFt
ZSkKICAgICAgICAgLCBzYXZlZFJldHVybkFkZHJlc3MoKnN0YWNrRnJhbWUucmV0dXJuQWRkcmVz
c1Nsb3QoKSkKICAgICB7Ci0gICAgICAgICpzdGFja0ZyYW1lLnJldHVybkFkZHJlc3NTbG90KCkg
PSBSZXR1cm5BZGRyZXNzUHRyKEZ1bmN0aW9uUHRyKGpzY0dlbmVyYXRlZE5hdGl2ZUNvZGUpKTsK
KyAgICAgICAgaWYgKCFDb2RlUHJvZmlsaW5nOjplbmFibGVkKCkpCisgICAgICAgICAgICAqc3Rh
Y2tGcmFtZS5yZXR1cm5BZGRyZXNzU2xvdCgpID0gUmV0dXJuQWRkcmVzc1B0cihGdW5jdGlvblB0
cihqc2NHZW5lcmF0ZWROYXRpdmVDb2RlKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSB+
U3RhY2tIYWNrKCkgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21w
bGV0aW9uLmNwcAkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tcGxldGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNp
bmNsdWRlICJDb21wbGV0aW9uLmgiCiAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRl
ICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRl
ICJKU0xvY2suaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpAQCAtNTUsNiArNTYsOCBAQCBK
U1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDCiAgICAgSlNMb2NrIGxvY2so
ZXhlYyk7CiAgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5pZGVudGlmaWVyVGFibGUgPT0g
d3RmVGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSk7CiAKKyAgICBDb2RlUHJv
ZmlsaW5nIHByb2ZpbGUoc291cmNlKTsKKwogICAgIFByb2dyYW1FeGVjdXRhYmxlKiBwcm9ncmFt
ID0gUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZShleGVjLCBzb3VyY2UpOwogICAgIGlmICghcHJv
Z3JhbSkgewogICAgICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29kZVByb2ZpbGUuaCIKKworI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKKyNpbmNsdWRl
ICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiUHJvZmlsZVRyZWVOb2RlLmgiCisjaW5jbHVkZSAi
VmVjdG9yLmgiCisjaW5jbHVkZSAiV1RGU3RyaW5nLmgiCisjaW5jbHVkZSA8Y3h4YWJpLmg+Cisj
aW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRlIDxleGVjaW5mby5oPgorCituYW1lc3BhY2UgSlND
IHsKKworLy8gTWFwIGZyb20gQ29kZVR5cGUgZW51bSB0byBhIGNvcnJlc3BvbmRpbmcgbmFtZS4K
K2NvbnN0IGNoYXIqIENvZGVQcm9maWxlOjpzX2NvZGVUeXBlTmFtZXNbQ29kZVByb2ZpbGU6Ok51
bWJlck9mQ29kZVR5cGVzXSA9IHsKKyAgICAiW1tFbmdpbmVDb2RlXV0iLAorICAgICJbW0dsb2Jh
bFRodW5rXV0iLAorICAgICJbW1JlZ0V4cENvZGVdXSIsCisgICAgIltbREZHSklUXV0iLAorICAg
ICJbW0Jhc2VsaW5lT25seV1dIiwKKyAgICAiW1tCYXNlbGluZVByb2ZpbGVdXSIsCisgICAgIltb
QmFzZWxpbmVPU1JdXSIsCisgICAgIltbRW5naW5lRnJhbWVdXSIKK307CisKKy8vIEhlbHBlciBm
dW5jdGlvbiwgZmluZCB0aGUgc3ltYm9sIG5hbWUgZm9yIGEgcGMgaW4gSlNDLgorc3RhdGljIGNv
bnN0IGNoYXIqIHN5bWJvbE5hbWUodm9pZCogYWRkcmVzcykKK3sKKyAgICBEbF9pbmZvIGluZm87
CisgICAgaWYgKCFkbGFkZHIoYWRkcmVzcywgJmluZm8pIHx8ICFpbmZvLmRsaV9zbmFtZSkKKyAg
ICAgICAgcmV0dXJuICI8dW5rbm93bj4iOworCisgICAgY29uc3QgY2hhciogbWFuZ2xlZE5hbWUg
PSBpbmZvLmRsaV9zbmFtZTsKKyAgICBjb25zdCBjaGFyKiBjeGFEZW1hbmdsZWQgPSBhYmk6Ol9f
Y3hhX2RlbWFuZ2xlKG1hbmdsZWROYW1lLCAwLCAwLCAwKTsKKyAgICByZXR1cm4gY3hhRGVtYW5n
bGVkID8gY3hhRGVtYW5nbGVkIDogbWFuZ2xlZE5hbWU7Cit9CisKKy8vIEhlbHBlciBmdW5jdGlv
biwgdHJ1bmNhdGUgdHJhY2VzIHRvIHBydW5lIHRoZSBvdXRwdXQgJiBtYWtlIHZlcnkgdmVyYm9z
ZSBtb2RlIGEgbGl0dGxlIG1vcmUgcmVhZGFibGUuCitzdGF0aWMgYm9vbCB0cnVuY2F0ZVRyYWNl
KGNvbnN0IGNoYXIqIHN5bWJvbE5hbWUpCit7CisgICAgcmV0dXJuICFzdHJjbXAoc3ltYm9sTmFt
ZSwgIkpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkiKQorICAgICAgICB8fCAhc3Ry
Y21wKHN5bWJvbE5hbWUsICJKU0M6OlBhcnNlcjxKU0M6OkxleGVyPHVuc2lnbmVkIGNoYXI+ID46
OnBhcnNlSW5uZXIoKSIpCisgICAgICAgIHx8ICFzdHJjbXAoc3ltYm9sTmFtZSwgIldURjo6ZmFz
dE1hbGxvYyh1bnNpZ25lZCBsb25nKSIpCisgICAgICAgIHx8ICFzdHJjbXAoc3ltYm9sTmFtZSwg
IldURjo6Y2FsY3VsYXRlVVRDT2Zmc2V0KCkiKQorICAgICAgICB8fCAhc3RyY21wKHN5bWJvbE5h
bWUsICJKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkiKTsKKyAgICAg
ICAgCit9CisKKy8vIEVhY2ggdHJhY2UgY29uc2lzdHMgb2YgYSBzZXF1ZW5jZSBvZiB6ZXJvIG9y
IG1vcmUgJ0VuZ2luZUZyYW1lJyBlbnRyaWVzLAorLy8gZm9sbG93ZWQgYnkgYSBzYW1wbGUgaW4g
SklUIGNvZGUsIG9yIG9uZSBvciBtb3JlICdFbmdpbmVGcmFtZScgZW50cmllcywKKy8vIGZvbGxv
d2VkIGJ5IGEgJ0VuZ2luZUNvZGUnIHRlcm1pbmF0b3IuCit2b2lkIENvZGVQcm9maWxlOjpzYW1w
bGUodm9pZCogcGMsIHZvaWQqKiBmcmFtZVBvaW50ZXIpCit7CisgICAgLy8gRGlzYWxsb3cgdHJh
Y2VzIGNvbnRhaW5pbmcgb25seSBhICdFbmdpbmVDb2RlJyB0ZXJtaW5hdG9yLCB3aXRob3V0IGFu
eSAnRW5naW5lRnJhbWUnIGZyYW1lcy4KKyAgICBpZiAoIWZyYW1lUG9pbnRlcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgd2hpbGUgKGZyYW1lUG9pbnRlcikgeworICAgICAgICBDb2RlVHlwZSB0
eXBlOworICAgICAgICB2b2lkKiBvd25lclVJRCA9IENvZGVQcm9maWxpbmc6OmdldE93bmVyVUlE
Rm9yUEMocGMpOworCisgICAgICAgIC8vIERldGVybWluZSBpZiB0aGlzIHNhbXBsZSBmZWxsIGlu
IEpJVCBjb2RlLCBhbmQgaWYgc28sIGZyb20gd2hpY2ggSklUICYgd2h5LgorICAgICAgICBpZiAo
IW93bmVyVUlEKQorICAgICAgICAgICAgdHlwZSA9IEVuZ2luZUZyYW1lOworICAgICAgICBlbHNl
IGlmIChvd25lclVJRCA9PSBHTE9CQUxfVEhVTktfSUQpCisgICAgICAgICAgICB0eXBlID0gR2xv
YmFsVGh1bms7CisgICAgICAgIGVsc2UgaWYgKG93bmVyVUlEID09IFJFR0VYUF9DT0RFX0lEKQor
ICAgICAgICAgICAgdHlwZSA9IFJlZ0V4cENvZGU7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihvd25lclVJ
RCk7CisgICAgICAgICAgICBpZiAoY29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6
REZHSklUKQorICAgICAgICAgICAgICAgIHR5cGUgPSBERkdKSVQ7CisgICAgICAgICAgICBlbHNl
IGlmIChjb2RlQmxvY2stPmNhbkNvbXBpbGVXaXRoREZHU3RhdGUoKSA9PSBDb2RlQmxvY2s6OkNv
bXBpbGVXaXRoREZHRmFsc2UpCisgICAgICAgICAgICAgICAgdHlwZSA9IEJhc2VsaW5lT25seTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSkKKyAgICAgICAg
ICAgICAgICB0eXBlID0gQmFzZWxpbmVPU1I7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgdHlwZSA9IEJhc2VsaW5lUHJvZmlsZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEEg
c2FtcGxlIGluIEpJVCBjb2RlIHRlcm1pbmF0ZXMgdGhlIHRyYWNlLgorICAgICAgICBtX3NhbXBs
ZXMuYXBwZW5kKENvZGVSZWNvcmQocGMsIHR5cGUpKTsKKyAgICAgICAgaWYgKHR5cGUgIT0gRW5n
aW5lRnJhbWUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gV2FsayB1cCB0aGUg
c3RhY2suCisjaWYgUExBVEZPUk0oTUFDKSAmJiBDUFUoWDg2XzY0KQorICAgICAgICBwYyA9IGZy
YW1lUG9pbnRlclsxXTsKKyAgICAgICAgZnJhbWVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKio+KCpmcmFtZVBvaW50ZXIpOworI2Vsc2UKKyAgICAgICAgLy8gVGhpcyBwbGF0Zm9ybSBp
cyBub3QgeWV0IHN1cHBvcnRlZCEKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5k
aWYKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgd2Ugd2Fsa2VkIHRoZSBlbnRpcmUg
c3RhY2sgd2l0aG91dCBmaW5kaW5nIGFueSBmcmFtZXMgb2YgSklUIGNvZGUuCisgICAgbV9zYW1w
bGVzLmFwcGVuZChDb2RlUmVjb3JkKDAsIEVuZ2luZUNvZGUpKTsKK30KKwordm9pZCBDb2RlUHJv
ZmlsZTo6cmVwb3J0KCkKK3sKKyAgICBmcHJpbnRmKHN0ZG91dCwgIjxDb2RlUHJvZmlsaW5nICVz
OiVkPlxuIiwgbV9maWxlLmRhdGEoKSwgbV9saW5lTm8pOworCisgICAgLy8gSG93IG1hbnkgZnJh
bWVzIG9mIEMtY29kZSB0byBwcmludCAtIDAsIGlmIG5vdCB2ZXJib3NlLCAxIGlmIHZlcmJvc2Us
IHVwIHRvIDEwMjQgaWYgdmVyeSB2ZXJib3NlLgorICAgIHVuc2lnbmVkIHJlY3Vyc2lvbkxpbWl0
ID0gQ29kZVByb2ZpbGluZzo6YmVWZXJ5VmVyYm9zZSgpID8gMTAyNCA6IENvZGVQcm9maWxpbmc6
OmJlVmVyYm9zZSgpOworCisgICAgUHJvZmlsZVRyZWVOb2RlIHByb2ZpbGU7CisKKyAgICAvLyBX
YWxrIHRocm91Z2ggdGhlIHNhbXBsZSBidWZmZXIuCisgICAgc2l6ZV90IHRyYWNlID0gMDsKKyAg
ICB3aGlsZSAodHJhY2UgPCBtX3NhbXBsZXMuc2l6ZSgpKSB7CisKKyAgICAgICAgLy8gQWxsIHRy
YWNlcyBhcmUgemVybyBvciBtb3JlICdFbmdpbmVGcmFtZSdzLCBmb2xsb3dlZCBieSBhIG5vbi0n
RW5naW5lRnJhbWUnLgorICAgICAgICAvLyBTY2FuIHRvIGZpbmQgdGhlIGxhc3Qgc2FtcGxlIGlu
IHRoZSB0cmFjZS4KKyAgICAgICAgc2l6ZV90IGxhc3RJblRyYWNlID0gdHJhY2U7CisgICAgICAg
IHdoaWxlIChtX3NhbXBsZXNbbGFzdEluVHJhY2VdLnR5cGUgPT0gRW5naW5lRnJhbWUpCisgICAg
ICAgICAgICArK2xhc3RJblRyYWNlOworCisgICAgICAgIC8vIFdlIHVzZSB0aGUgbGFzdCBzYW1w
bGUgdHlwZSB0byBsb29rIHVwIGEgbmFtZSAodXNlZCBhcyBhIGJ1Y2tldCBpbiB0aGUgcHJvZmls
ZXIpLgorICAgICAgICBQcm9maWxlVHJlZU5vZGUqIGNhbGxiYWNrcyA9IHByb2ZpbGUuc2FtcGxl
Q2hpbGQoc19jb2RlVHlwZU5hbWVzW21fc2FtcGxlc1tsYXN0SW5UcmFjZV0udHlwZV0pOworCisg
ICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgc2FtcGxlcyBpbiBDLWNvZGUsIGFkZCB1cCB0byBy
ZWN1cnNpb25MaW1pdCBvZiB0aGVtIGludG8gdGhlIHByb2ZpbGUgdHJlZS4KKyAgICAgICAgc2l6
ZV90IGxhc3RFbmdpbmVGcmFtZSA9IGxhc3RJblRyYWNlOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGNvdW50ID0gMDsgbGFzdEVuZ2luZUZyYW1lID4gdHJhY2UgJiYgY291bnQgPCByZWN1cnNpb25M
aW1pdDsgKytjb3VudCkgeworICAgICAgICAgICAgLS1sYXN0RW5naW5lRnJhbWU7CisgICAgICAg
ICAgICBBU1NFUlQobV9zYW1wbGVzW2xhc3RFbmdpbmVGcmFtZV0udHlwZSA9PSBFbmdpbmVGcmFt
ZSk7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gc3ltYm9sTmFtZShtX3NhbXBsZXNb
bGFzdEVuZ2luZUZyYW1lXS5wYyk7CisgICAgICAgICAgICBjYWxsYmFja3MgPSBjYWxsYmFja3Mt
PnNhbXBsZUNoaWxkKG5hbWUpOworICAgICAgICAgICAgaWYgKHRydW5jYXRlVHJhY2UobmFtZSkp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBNb3ZlIG9u
IHRvIHRoZSBuZXh0IHRyYWNlLgorICAgICAgICB0cmFjZSA9IGxhc3RJblRyYWNlICsgMTsKKyAg
ICAgICAgQVNTRVJUKHRyYWNlIDw9IG1fc2FtcGxlcy5zaXplKCkpOworICAgIH0KKworICAgIC8v
IE91dHB1dCB0aGUgcHJvZmlsZSB0cmVlLgorICAgIGZwcmludGYoc3Rkb3V0LCAiVG90YWwgc2Ft
cGxlczogJWxsZFxuIiwgcHJvZmlsZS5jaGlsZENvdW50KCkpOworICAgIHByb2ZpbGUuZHVtcCgp
OworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwIDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyAr
K2kpCisgICAgICAgIG1fY2hpbGRyZW5baV0tPnJlcG9ydCgpOworCisgICAgZnByaW50ZihzdGRv
dXQsICI8L0NvZGVQcm9maWxpbmcgJXM6JWQ+XG4iLCBtX2ZpbGUuZGF0YSgpLCBtX2xpbmVObyk7
Cit9CisKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxl
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDb2RlUHJvZmlsZV9oCisjZGVmaW5lIENv
ZGVQcm9maWxlX2gKKworI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJUaWVyZWRN
TWFwQXJyYXkuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBDb2RlUHJvZmlsZSB7CitwdWJsaWM6CisgICAgQ29kZVByb2ZpbGUoY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlUHJvZmlsZSogcGFyZW50KQorICAgICAgICA6IG1f
ZmlsZShzb3VyY2UucHJvdmlkZXIoKS0+dXJsKCkudXRmOCgpKQorICAgICAgICAsIG1fbGluZU5v
KHNvdXJjZS5maXJzdExpbmUoKSkKKyAgICAgICAgLCBtX3BhcmVudChwYXJlbnQpCisgICAgewor
ICAgICAgICBpZiAocGFyZW50KQorICAgICAgICAgICAgcGFyZW50LT5hZGRDaGlsZCh0aGlzKTsK
KyAgICB9CisKKyAgICB2b2lkIHNhbXBsZSh2b2lkKiBwYywgdm9pZCoqIGZyYW1lUG9pbnRlcik7
CisgICAgdm9pZCByZXBvcnQoKTsKKworICAgIENvZGVQcm9maWxlKiBwYXJlbnQoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fcGFyZW50OworICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZENoaWxk
KENvZGVQcm9maWxlKiBjaGlsZCkKKyAgICB7CisgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKGFk
b3B0UHRyKGNoaWxkKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGVudW0gQ29kZVR5cGUgewor
ICAgICAgICBFbmdpbmVDb2RlLAorICAgICAgICBHbG9iYWxUaHVuaywKKyAgICAgICAgUmVnRXhw
Q29kZSwKKyAgICAgICAgREZHSklULAorICAgICAgICBCYXNlbGluZU9ubHksCisgICAgICAgIEJh
c2VsaW5lUHJvZmlsZSwKKyAgICAgICAgQmFzZWxpbmVPU1IsCisgICAgICAgIEVuZ2luZUZyYW1l
LAorICAgICAgICBOdW1iZXJPZkNvZGVUeXBlcworICAgIH07CisgICAgc3RydWN0IENvZGVSZWNv
cmQgeworICAgICAgICBDb2RlUmVjb3JkKHZvaWQqIHBjLCBDb2RlVHlwZSB0eXBlKQorICAgICAg
ICAgICAgOiBwYyhwYykKKyAgICAgICAgICAgICwgdHlwZSh0eXBlKQorICAgICAgICB7CisgICAg
ICAgIH0KKyAgICAgICAgdm9pZCogcGM7CisgICAgICAgIENvZGVUeXBlIHR5cGU7CisgICAgfTsK
KworICAgIENTdHJpbmcgbV9maWxlOworICAgIHVuc2lnbmVkIG1fbGluZU5vOworICAgIENvZGVQ
cm9maWxlKiBtX3BhcmVudDsKKyAgICBWZWN0b3I8IE93blB0cjxDb2RlUHJvZmlsZT4gPiBtX2No
aWxkcmVuOworICAgIFRpZXJlZE1NYXBBcnJheTxDb2RlUmVjb3JkPiBtX3NhbXBsZXM7CisKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogc19jb2RlVHlwZU5hbWVzW051bWJlck9mQ29kZVR5cGVzXTsK
K307CisKK30KKworI2VuZGlmIC8vIENvZGVQcm9maWxlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIK
KworI2luY2x1ZGUgIkNvZGVQcm9maWxlLmgiCisjaW5jbHVkZSAiTWV0YUFsbG9jYXRvci5oIgor
I2luY2x1ZGUgInNpZ25hbC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9sYXRpbGUgQ29kZVBy
b2ZpbGUqIENvZGVQcm9maWxpbmc6OnNfcHJvZmlsZVN0YWNrID0gMDsKK0NvZGVQcm9maWxpbmc6
Ok1vZGUgQ29kZVByb2ZpbGluZzo6c19tb2RlID0gQ29kZVByb2ZpbGluZzo6RGlzYWJsZWQ7CitX
VEY6Ok1ldGFBbGxvY2F0b3JUcmFja2VyKiBDb2RlUHJvZmlsaW5nOjpzX3RyYWNrZXIgPSAwOwor
CisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gc3RhcnQgJiBzdG9wIHRoZSB0aW1lci4KKy8vIFByZXNl
bnRseSB3ZSdyZSB1c2luZyB0aGUgd2FsbC1jbG9jayB0aW1lciwgc2luY2UgdGhpcyBzZWVtcyB0
byBnaXZlIHRoZSBiZXN0IHJlc3VsdHMuCitzdGF0aWMgdm9pZCBzZXRQcm9maWxlVGltZXIodW5z
aWduZWQgdXNlYykKK3sKKyAgICBpdGltZXJ2YWwgdGltZXI7CisgICAgdGltZXIuaXRfdmFsdWUu
dHZfc2VjID0gMDsKKyAgICB0aW1lci5pdF92YWx1ZS50dl91c2VjID0gdXNlYzsKKyAgICB0aW1l
ci5pdF9pbnRlcnZhbC50dl9zZWMgPSAwOworICAgIHRpbWVyLml0X2ludGVydmFsLnR2X3VzZWMg
PSB1c2VjOworICAgIHNldGl0aW1lcihJVElNRVJfUkVBTCwgJnRpbWVyLCAwKTsKK30KKworLy8g
Q2FsbGJhY2sgdHJpZ2dlcmVkIHdoZW4gdGhlIHRpbWVyIGlzIGZpcmVkLgordm9pZCBDb2RlUHJv
ZmlsaW5nOjpwcm9maWxpbmdUaW1lcihpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVhcCkKK3sKKyNp
ZiBQTEFURk9STShNQUMpICYmIENQVShYODZfNjQpCisgICAgbWNvbnRleHRfdCBjb250ZXh0ID0g
c3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250ZXh0OworICAgIENvZGVQcm9m
aWxlKiBwcm9maWxlU3RhY2sgPSBjb25zdF9jYXN0PENvZGVQcm9maWxlKj4oc19wcm9maWxlU3Rh
Y2spOworICAgIGlmIChwcm9maWxlU3RhY2spCisgICAgICAgIHByb2ZpbGVTdGFjay0+c2FtcGxl
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNvbnRleHQtPl9fc3MuX19yaXApLCByZWludGVycHJl
dF9jYXN0PHZvaWQqKj4oY29udGV4dC0+X19zcy5fX3JicCkpOworI2VuZGlmCit9CisKK3ZvaWQg
Q29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9yKFdURjo6TWV0YUFsbG9jYXRvciogYWxsb2Nh
dG9yKQoreworICAgIC8vIENoZWNrIGZvciBKU0NfQ09ERV9QUk9GSUxJTkcuCisgICAgY29uc3Qg
Y2hhciogY29kZVByb2ZpbGluZ01vZGUgPSBnZXRlbnYoIkpTQ19DT0RFX1BST0ZJTElORyIpOwor
ICAgIGlmICghY29kZVByb2ZpbGluZ01vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIENo
ZWNrIGZvciBhIHZhbGlkIG1vZGUsIGN1cnJlbnRseSAiMSIsICIyIiwgb3IgIjMiLgorICAgIGlm
ICghY29kZVByb2ZpbGluZ01vZGVbMF0gfHwgY29kZVByb2ZpbGluZ01vZGVbMV0pCisgICAgICAg
IHJldHVybjsKKyAgICBzd2l0Y2ggKCpjb2RlUHJvZmlsaW5nTW9kZSkgeworICAgIGNhc2UgJzEn
OgorICAgICAgICBzX21vZGUgPSBFbmFibGVkOworICAgICAgICBicmVhazsKKyAgICBjYXNlICcy
JzoKKyAgICAgICAgc19tb2RlID0gVmVyYm9zZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAn
Myc6CisgICAgICAgIHNfbW9kZSA9IFZlcnlWZXJib3NlOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGVuYWJsZWQoKSk7
CisgICAgQVNTRVJUKCFzX3RyYWNrZXIpOworICAgIHNfdHJhY2tlciA9IG5ldyBXVEY6Ok1ldGFB
bGxvY2F0b3JUcmFja2VyKCk7CisgICAgYWxsb2NhdG9yLT50cmFja0FsbG9jYXRpb25zKHNfdHJh
Y2tlcik7Cit9CisKK3ZvaWQqIENvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEModm9pZCog
YWRkcmVzcykKK3sKKyAgICBpZiAoIXNfdHJhY2tlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
V1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBzX3RyYWNrZXItPmZpbmQoYWRkcmVz
cyk7CisgICAgaWYgKCFoYW5kbGUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBoYW5k
bGUtPm93bmVyVUlEKCk7Cit9CisKK3ZvaWQgQ29kZVByb2ZpbGluZzo6YmVnaW4oY29uc3QgU291
cmNlQ29kZSYgc291cmNlKQoreworICAgIC8vIFB1c2ggYSBuZXcgQ29kZVByb2ZpbGUgb250byB0
aGUgc3RhY2sgZm9yIGVhY2ggc2NyaXB0IGVuY291bnRlcmVkLgorICAgIENvZGVQcm9maWxlKiBw
cm9maWxlU3RhY2sgPSBjb25zdF9jYXN0PENvZGVQcm9maWxlKj4oc19wcm9maWxlU3RhY2spOwor
ICAgIGJvb2wgYWxyZWFkeVByb2ZpbGluZyA9IHByb2ZpbGVTdGFjazsKKyAgICBzX3Byb2ZpbGVT
dGFjayA9IHByb2ZpbGVTdGFjayA9IG5ldyBDb2RlUHJvZmlsZShzb3VyY2UsIHByb2ZpbGVTdGFj
ayk7CisKKyAgICAvLyBJcyB0aGUgcHJvZmlsZXIgYWxyZWFkeSBydW5uaW5nIC0gaWYgc28sIHRo
ZSB0aW1lciB3aWxsIGFscmVhZHkgYmUgc2V0IHVwLgorICAgIGlmIChhbHJlYWR5UHJvZmlsaW5n
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBSZWdzaXRlciBhIHNpZ25hbCBoYW5kbGVyICYg
aXRpbWVyLgorICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworICAgIGFjdGlvbi5zYV9zaWdh
Y3Rpb24gPSByZWludGVycHJldF9jYXN0PHZvaWQgKCopKGludCwgc3RydWN0IF9fc2lnaW5mbyAq
LCB2b2lkICopPihwcm9maWxpbmdUaW1lcik7CisgICAgc2lnZmlsbHNldCgmYWN0aW9uLnNhX21h
c2spOworICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87CisgICAgc2lnYWN0aW9uKFNJ
R0FMUk0sICZhY3Rpb24sIDApOworICAgIHNldFByb2ZpbGVUaW1lcigxMDApOworfQorCit2b2lk
IENvZGVQcm9maWxpbmc6OmVuZCgpCit7CisgICAgLy8gUG9wIHRoZSBjdXJyZW50IHByb2ZpbGVy
IG9mZiB0aGUgc3RhY2suCisgICAgQ29kZVByb2ZpbGUqIGN1cnJlbnQgPSBjb25zdF9jYXN0PENv
ZGVQcm9maWxlKj4oc19wcm9maWxlU3RhY2spOworICAgIEFTU0VSVChjdXJyZW50KTsKKyAgICBz
X3Byb2ZpbGVTdGFjayA9IGN1cnJlbnQtPnBhcmVudCgpOworCisgICAgLy8gSXMgdGhpcyB0aGUg
b3V0ZXJtb3N0IHNjcmlwdCBiZWluZyBwcm9maWxlZD8gLSBpZiBub3QsIGp1c3QgcmV0dXJuLgor
ICAgIC8vIFdlIHBlcmZvcm0gYWxsIG91dHB1dCBvZiBwcm9maWxlcyByZWN1cnNpdmVseSBmcm9t
IHRoZSBvdXRlcm1vc3Qgc2NyaXB0LAorICAgIC8vIHRvIG1pbmltaXplIHByb2ZpbGluZyBvdmVy
aGVhZCBmcm9tIHNrZXdpbmcgcmVzdWx0cy4KKyAgICBpZiAoc19wcm9maWxlU3RhY2spCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIFN0b3AgcHJvZmlsaW5nCisgICAgc2V0UHJvZmlsZVRpbWVy
KDApOworCisgICAgY3VycmVudC0+cmVwb3J0KCk7CisgICAgZGVsZXRlIGN1cnJlbnQ7Cit9CisK
K30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5n
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDb2RlUHJvZmlsaW5nX2gKKyNkZWZpbmUg
Q29kZVByb2ZpbGluZ19oCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKworbmFtZXNwYWNlIFdURiB7
CisKK2NsYXNzIE1ldGFBbGxvY2F0b3I7CitjbGFzcyBNZXRhQWxsb2NhdG9yVHJhY2tlcjsKKwor
fQorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZVByb2ZpbGU7CitjbGFzcyBTb3VyY2VD
b2RlOworCitjbGFzcyBDb2RlUHJvZmlsaW5nIHsKKyAgICBlbnVtIE1vZGUgeworICAgICAgICBE
aXNhYmxlZCwKKyAgICAgICAgRW5hYmxlZCwKKyAgICAgICAgVmVyYm9zZSwKKyAgICAgICAgVmVy
eVZlcmJvc2UKKyAgICB9OworCitwdWJsaWM6CisgICAgQ29kZVByb2ZpbGluZyhjb25zdCBTb3Vy
Y2VDb2RlJiBzb3VyY2UpCisgICAgICAgIDogbV9hY3RpdmUoZW5hYmxlZCgpKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fYWN0aXZlKQorICAgICAgICAgICAgYmVnaW4oc291cmNlKTsKKyAgICB9CisK
KyAgICB+Q29kZVByb2ZpbGluZygpCisgICAgeworICAgICAgICBpZiAobV9hY3RpdmUpCisgICAg
ICAgICAgICBlbmQoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBlbmFibGVkKCkgeyByZXR1
cm4gc19tb2RlICE9IERpc2FibGVkOyB9CisgICAgc3RhdGljIGJvb2wgYmVWZXJib3NlKCkgeyBy
ZXR1cm4gc19tb2RlID49IFZlcmJvc2U7IH0KKyAgICBzdGF0aWMgYm9vbCBiZVZlcnlWZXJib3Nl
KCkgeyByZXR1cm4gc19tb2RlID49IFZlcnlWZXJib3NlOyB9CisKKyAgICBzdGF0aWMgdm9pZCBu
b3RpZnlBbGxvY2F0b3IoV1RGOjpNZXRhQWxsb2NhdG9yKik7CisgICAgc3RhdGljIHZvaWQqIGdl
dE93bmVyVUlERm9yUEModm9pZCopOworCitwcml2YXRlOgorICAgIHZvaWQgYmVnaW4oY29uc3Qg
U291cmNlQ29kZSYpOworICAgIHZvaWQgZW5kKCk7CisKKyAgICBib29sIG1fYWN0aXZlOworCisg
ICAgc3RhdGljIHZvaWQgcHJvZmlsaW5nVGltZXIoaW50LCBzaWdpbmZvX3QqLCB2b2lkKik7CisK
KyAgICBzdGF0aWMgTW9kZSBzX21vZGU7CisgICAgc3RhdGljIFdURjo6TWV0YUFsbG9jYXRvclRy
YWNrZXIqIHNfdHJhY2tlcjsKKyAgICBzdGF0aWMgdm9sYXRpbGUgQ29kZVByb2ZpbGUqIHNfcHJv
ZmlsZVN0YWNrOworfTsKKworfQorCisjZW5kaWYgLy8gQ29kZVByb2ZpbGluZ19oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUHJvZmlsZVRyZWVOb2RlX2gKKyNkZWZpbmUg
UHJvZmlsZVRyZWVOb2RlX2gKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFByb2ZpbGVUcmVl
Tm9kZSB7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUHJvZmlsZVRyZWVOb2RlPiBNYXA7
CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8U3RyaW5nLCBQcm9maWxlVHJlZU5vZGU+IE1hcEVudHJ5
OworCitwdWJsaWM6CisgICAgUHJvZmlsZVRyZWVOb2RlKCkKKyAgICAgICAgOiBtX2NvdW50KDAp
CisgICAgICAgICwgbV9jaGlsZHJlbigwKQorICAgIHsKKyAgICB9CisKKyAgICB+UHJvZmlsZVRy
ZWVOb2RlKCkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtX2NoaWxkcmVuOworICAgIH0KKworICAg
IFByb2ZpbGVUcmVlTm9kZSogc2FtcGxlQ2hpbGQoY29uc3QgY2hhciogbmFtZSkKKyAgICB7Cisg
ICAgICAgIGlmICghbV9jaGlsZHJlbikKKyAgICAgICAgICAgIG1fY2hpbGRyZW4gPSBuZXcgTWFw
KCk7CisgICAgCisgICAgICAgIFByb2ZpbGVUcmVlTm9kZSBuZXdFbnRyeTsKKyAgICAgICAgcGFp
cjxNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX2NoaWxkcmVuLT5hZGQoU3RyaW5nKG5h
bWUpLCBuZXdFbnRyeSk7CisgICAgICAgIFByb2ZpbGVUcmVlTm9kZSogY2hpbGRJbk1hcCA9ICZy
ZXN1bHQuZmlyc3QtPnNlY29uZDsKKyAgICAgICAgKytjaGlsZEluTWFwLT5tX2NvdW50OworICAg
ICAgICByZXR1cm4gY2hpbGRJbk1hcDsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoKQorICAgIHsK
KyAgICAgICAgZHVtcEludGVybmFsKDApOworICAgIH0KKworICAgIHVpbnQ2NF90IGNvdW50KCkK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2NvdW50OworICAgIH0KKworICAgIHVpbnQ2NF90IGNo
aWxkQ291bnQoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NoaWxkcmVuKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHVpbnQ2NF90IGNoaWxkQ291bnQgPSAwOworICAgICAgICBmb3Ig
KE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLT5iZWdpbigpOyBpdCAhPSBtX2NoaWxkcmVu
LT5lbmQoKTsgKytpdCkKKyAgICAgICAgICAgIGNoaWxkQ291bnQgKz0gaXQtPnNlY29uZC5jb3Vu
dCgpOworICAgICAgICByZXR1cm4gY2hpbGRDb3VudDsKKyAgICB9CisgICAgCitwcml2YXRlOgor
ICAgIHZvaWQgZHVtcEludGVybmFsKHVuc2lnbmVkIGluZGVudCkKKyAgICB7CisgICAgICAgIGlm
ICghbV9jaGlsZHJlbikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBDb3B5IHBv
aW50ZXJzIHRvIGFsbCBjaGlsZHJlbiBpbnRvIGEgdmVjdG9yLCBhbmQgc29ydCB0aGUgdmVjdG9y
IGJ5IHNhbXBsZSBjb3VudC4KKyAgICAgICAgVmVjdG9yPE1hcEVudHJ5Kj4gZW50cmllczsKKyAg
ICAgICAgZm9yIChNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi0+YmVnaW4oKTsgaXQgIT0g
bV9jaGlsZHJlbi0+ZW5kKCk7ICsraXQpCisgICAgICAgICAgICBlbnRyaWVzLmFwcGVuZCgmKml0
KTsKKyAgICAgICAgcXNvcnQoZW50cmllcy5iZWdpbigpLCBlbnRyaWVzLnNpemUoKSwgc2l6ZW9m
KE1hcEVudHJ5KiksIGNvbXBhcmVFbnRyaWVzKTsKKworICAgICAgICAvLyBJdGVyYXRlIG92ZXIg
dGhlIGNoaWxkcmVuIGluIHNhbXBsZS1mcmVxdWVuY3kgb3JkZXIuCisgICAgICAgIGZvciAoc2l6
ZV90IGUgPSAwOyBlIDwgZW50cmllcy5zaXplKCk7ICsrZSkgeworICAgICAgICAgICAgTWFwRW50
cnkqIGVudHJ5ID0gZW50cmllc1tlXTsKKworICAgICAgICAgICAgLy8gUHJpbnQgdGhlIG51bWJl
ciBvZiBzYW1wbGVzLCB0aGUgbmFtZSBvZiB0aGlzIG5vZGUsIGFuZCB0aGUgbnVtYmVyIG9mIHNh
bXBsZXMgdGhhdCBhcmUgc3RhY2stdG9wCisgICAgICAgICAgICAvLyBpbiB0aGlzIG5vZGUgKHNh
bXBsZXMgZGlyZWN0bHkgd2l0aGluIHRoaXMgbm9kZSwgZXhjbHVkaW5nIHNhbXBsZXMgaW4gY2hp
bGRyZW4uCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5kZW50OyArK2kp
CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRvdXQsICIgICAgIik7CisgICAgICAgICAgICBm
cHJpbnRmKHN0ZG91dCwgIiUgOGxsZDogJXMgKCVsbGQgc3RhY2sgdG9wKVxuIiwKKyAgICAgICAg
ICAgICAgICBlbnRyeS0+c2Vjb25kLmNvdW50KCksCisgICAgICAgICAgICAgICAgZW50cnktPmZp
cnN0LnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICAgICAgZW50cnktPnNlY29uZC5jb3VudCgp
IC0gZW50cnktPnNlY29uZC5jaGlsZENvdW50KCkpOworCisgICAgICAgICAgICAvLyBSZWN1cnNp
dmVseSBkdW1wIHRoZSBjaGlsZCBub2Rlcy4KKyAgICAgICAgICAgIGVudHJ5LT5zZWNvbmQuZHVt
cEludGVybmFsKGluZGVudCArIDEpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGlu
dCBjb21wYXJlRW50cmllcyhjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQorICAgIHsKKyAg
ICAgICAgdWludDY0X3QgZGEgPSAoKnN0YXRpY19jYXN0PE1hcEVudHJ5KiBjb25zdCAqPihhKSkt
PnNlY29uZC5jb3VudCgpOworICAgICAgICB1aW50NjRfdCBkYiA9ICgqc3RhdGljX2Nhc3Q8TWFw
RW50cnkqIGNvbnN0ICo+KGIpKS0+c2Vjb25kLmNvdW50KCk7CisgICAgICAgIHJldHVybiAoZGEg
PCBkYikgLSAoZGEgPiBkYik7CisgICAgfQorCisgICAgdWludDY0X3QgbV9jb3VudDsKKyAgICBN
YXAqIG1fY2hpbGRyZW47Cit9OworCit9CisKKyNlbmRpZiAvLyBQcm9maWxlVHJlZU5vZGVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVGllcmVkTU1hcEFycmF5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1RpZXJlZE1NYXBBcnJheS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1RpZXJlZE1NYXBB
cnJheS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFRpZXJlZE1NYXBBcnJheV9oCisj
ZGVmaW5lIFRpZXJlZE1NYXBBcnJheV9oCisKKyNpbmNsdWRlICJPU0FsbG9jYXRvci5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgc2ltcGxlIGFycmF5
IGNsYXNzIHRoYXQgY2FuIGJlIGdyb3duIGJ5IGFwcGVuZGluZyBpdGVtcyB0byB0aGUgZW5kLgor
Ly8gVGhpcyBjbGFzcyBpcyBpbXBsZW1lbnRlZCBwdXJlbHkgaW4gdGVybXMgb2Ygc3lzdGVtIGFs
bG9jYXRpb25zLCB3aXRoIG5vIG1hbGxvYy9mcmVlLCBzbyB0aGF0CisvLyBpdCBjYW4gc2FmZWx5
IGJlIHVzZWQgZnJvbSBhIHNlY29uZGFyeSB0aHJlYWQgd2hpbHN0IHRoZSBtYWluIHRocmFkIGlz
IHBhdXNlZCAocG90ZW50aWFsbHkKKy8vIGhvbGRpbmcgdGhlIGZhc3QgbWFsbG9jIGhlYXAgbG9j
aykuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgVGllcmVkTU1hcEFycmF5IHsKKyAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGVudHJpZXNQZXJCbG9jayA9IDQwOTY7CisKK3B1YmxpYzoKKyAg
ICBUaWVyZWRNTWFwQXJyYXkoKQorICAgICAgICA6IG1fZGlyZWN0b3J5Q291bnQoNDA5NikKKyAg
ICAgICAgLCBtX2RpcmVjdG9yeShzdGF0aWNfY2FzdDxUKio+KE9TQWxsb2NhdG9yOjpyZXNlcnZl
QW5kQ29tbWl0KG1fZGlyZWN0b3J5Q291bnQgKiBzaXplb2YoVCopKSkpCisgICAgICAgICwgbV9z
aXplKDApCisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBibG9jayA9IDA7IGJsb2NrIDwgbV9k
aXJlY3RvcnlDb3VudDsgKytibG9jaykKKyAgICAgICAgICAgIG1fZGlyZWN0b3J5W2Jsb2NrXSA9
IDA7CisgICAgfQorCisgICAgflRpZXJlZE1NYXBBcnJheSgpCisgICAgeworICAgICAgICBzaXpl
X3QgdXNlZENvdW50ID0gKG1fc2l6ZSArIChlbnRyaWVzUGVyQmxvY2sgLSAxKSkgLyBlbnRyaWVz
UGVyQmxvY2s7CisgICAgICAgIEFTU0VSVCh1c2VkQ291bnQgPT0gbV9kaXJlY3RvcnlDb3VudCB8
fCAhbV9kaXJlY3RvcnlbdXNlZENvdW50XSk7CisKKyAgICAgICAgZm9yIChzaXplX3QgYmxvY2sg
PSAwOyBibG9jayA8IHVzZWRDb3VudDsgKytibG9jaykgeworICAgICAgICAgICAgQVNTRVJUKG1f
ZGlyZWN0b3J5W2Jsb2NrXSk7CisgICAgICAgICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRS
ZWxlYXNlKG1fZGlyZWN0b3J5W2Jsb2NrXSwgZW50cmllc1BlckJsb2NrICogc2l6ZW9mKFQpKTsK
KyAgICAgICAgfQorCisgICAgICAgIE9TQWxsb2NhdG9yOjpkZWNvbW1pdEFuZFJlbGVhc2UobV9k
aXJlY3RvcnksIG1fZGlyZWN0b3J5Q291bnQgKiBzaXplb2YoVCopKTsKKyAgICB9CisKKyAgICBU
JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpbmRleCA8
IG1fc2l6ZSk7CisgICAgICAgIHNpemVfdCBibG9jayA9IGluZGV4IC8gZW50cmllc1BlckJsb2Nr
OworICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gaW5kZXggJSBlbnRyaWVzUGVyQmxvY2s7CisKKyAg
ICAgICAgQVNTRVJUKG1fZGlyZWN0b3J5W2Jsb2NrXSk7CisgICAgICAgIHJldHVybiBtX2RpcmVj
dG9yeVtibG9ja11bb2Zmc2V0XTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZChjb25zdCBUJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIC8vIENoZWNrIGlmIHRoZSBhcnJheSBpcyBjb21wbGV0ZWx5
IGZ1bGwsIGlmIHNvIGNyZWF0ZSBtb3JlIGNhcGFjaXR5IGluIHRoZSBkaXJlY3RvcnkuCisgICAg
ICAgIGlmIChtX3NpemUgPT0gbV9kaXJlY3RvcnlDb3VudCAqIGVudHJpZXNQZXJCbG9jaykgewor
ICAgICAgICAgICAgLy8gUmVhbGxvY2F0ZSB0aGUgZGlyZWN0b3J5LgorICAgICAgICAgICAgc2l6
ZV90IG9sZERpcmVjdG9yeVNpemUgPSBtX2RpcmVjdG9yeUNvdW50ICogc2l6ZW9mKFQqKTsKKyAg
ICAgICAgICAgIHNpemVfdCBuZXdEaXJlY3RvcnlTaXplID0gb2xkRGlyZWN0b3J5U2l6ZSAqIDI7
CisgICAgICAgICAgICBpZiAobmV3RGlyZWN0b3J5U2l6ZSA8IG9sZERpcmVjdG9yeVNpemUpCisg
ICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIG1fZGlyZWN0b3J5ID0gT1NBbGxv
Y2F0b3I6OnJlYWxsb2NhdGVDb21taXR0ZWQobV9kaXJlY3RvcnksIG9sZERpcmVjdG9yeVNpemUs
IG5ld0RpcmVjdG9yeVNpemUpOworCisgICAgICAgICAgICAvLyAKKyAgICAgICAgICAgIHNpemVf
dCBuZXdEaXJlY3RvcnlDb3VudCA9IG1fZGlyZWN0b3J5Q291bnQgKiAyOworICAgICAgICAgICAg
Zm9yIChzaXplX3QgYmxvY2sgPSBtX2RpcmVjdG9yeUNvdW50OyBibG9jayA8IG5ld0RpcmVjdG9y
eUNvdW50OyArK2Jsb2NrKQorICAgICAgICAgICAgICAgIG1fZGlyZWN0b3J5W2Jsb2NrXSA9IDA7
CisgICAgICAgICAgICBtX2RpcmVjdG9yeUNvdW50ID0gbmV3RGlyZWN0b3J5Q291bnQ7CisgICAg
ICAgIH0KKworICAgICAgICBzaXplX3QgaW5kZXggPSBtX3NpemU7CisgICAgICAgIHNpemVfdCBi
bG9jayA9IGluZGV4IC8gZW50cmllc1BlckJsb2NrOworICAgICAgICBzaXplX3Qgb2Zmc2V0ID0g
aW5kZXggJSBlbnRyaWVzUGVyQmxvY2s7CisKKyAgICAgICAgaWYgKCFvZmZzZXQpIHsKKyAgICAg
ICAgICAgIEFTU0VSVCghbV9kaXJlY3RvcnlbYmxvY2tdKTsKKyAgICAgICAgICAgIG1fZGlyZWN0
b3J5W2Jsb2NrXSA9IHN0YXRpY19jYXN0PFQqPihPU0FsbG9jYXRvcjo6cmVzZXJ2ZUFuZENvbW1p
dChlbnRyaWVzUGVyQmxvY2sgKiBzaXplb2YoVCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIEFT
U0VSVChtX2RpcmVjdG9yeVtibG9ja10pOworICAgICAgICArK21fc2l6ZTsKKyAgICAgICAgbV9k
aXJlY3RvcnlbYmxvY2tdW29mZnNldF0gPSB2YWx1ZTsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCitwcml2YXRlOgorICAgIHNpemVfdCBtX2Rp
cmVjdG9yeUNvdW50OworICAgIFQqKiBtX2RpcmVjdG9yeTsKKyAgICBzaXplX3QgbV9zaXplOwor
fTsKKworfQorCisjZW5kaWYgLy8gVGllcmVkTU1hcEFycmF5X2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAxMDYxNTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NSwxMCArNTUsMTEgQEAgQUxXQVlTX0lOTElORSB2b2lkIE1ldGFBbGxvY2F0b3I6
OnJlbGVhcwogICAgICAgICBtX3RyYWNrZXItPnJlbGVhc2UoaGFuZGxlKTsKIH0KIAotTWV0YUFs
bG9jYXRvckhhbmRsZTo6TWV0YUFsbG9jYXRvckhhbmRsZShNZXRhQWxsb2NhdG9yKiBhbGxvY2F0
b3IsIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCitNZXRhQWxsb2NhdG9ySGFuZGxl
OjpNZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0b3IqIGFsbG9jYXRvciwgdm9pZCogc3Rh
cnQsIHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQpCiAgICAgOiBtX2FsbG9jYXRv
cihhbGxvY2F0b3IpCiAgICAgLCBtX3N0YXJ0KHN0YXJ0KQogICAgICwgbV9zaXplSW5CeXRlcyhz
aXplSW5CeXRlcykKKyAgICAsIG1fb3duZXJVSUQob3duZXJVSUQpCiB7CiAgICAgQVNTRVJUKGFs
bG9jYXRvcik7CiAgICAgQVNTRVJUKHN0YXJ0KTsKQEAgLTEyOSw3ICsxMzAsNyBAQCBNZXRhQWxs
b2NhdG9yOjpNZXRhQWxsb2NhdG9yKHNpemVfdCBhbGxvCiAgICAgQVNTRVJUKHN0YXRpY19jYXN0
PHNpemVfdD4oMSkgPDwgbV9sb2dBbGxvY2F0aW9uR3JhbnVsZSA9PSBtX2FsbG9jYXRpb25HcmFu
dWxlKTsKIH0KIAotUGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG9y
OjphbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMpCitQYXNzUmVmUHRyPE1ldGFBbGxvY2F0b3JI
YW5kbGU+IE1ldGFBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCog
b3duZXJVSUQpCiB7CiAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwogCkBAIC0x
NjcsNyArMTY4LDcgQEAgUGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsbwog
ICAgIG1fbnVtQWxsb2NhdGlvbnMrKzsKICNlbmRpZgogCi0gICAgTWV0YUFsbG9jYXRvckhhbmRs
ZSogaGFuZGxlID0gbmV3IE1ldGFBbGxvY2F0b3JIYW5kbGUodGhpcywgc3RhcnQsIHNpemVJbkJ5
dGVzKTsKKyAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBuZXcgTWV0YUFsbG9jYXRv
ckhhbmRsZSh0aGlzLCBzdGFydCwgc2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsKICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IGEgdmVyaWZpZXIgc2NoZW1lIHRoYXQgZ3Jva3MgTWV0YUFsbG9jYXRvckhh
bmRsZXMKICAgICBoYW5kbGUtPmRlcHJlY2F0ZWRUdXJuT2ZmVmVyaWZpZXIoKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHJldmlzaW9uIDEwNjE1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIH5NZXRh
QWxsb2NhdG9yKCk7CiAgICAgCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFBhc3NSZWZQdHI8TWV0
YUFsbG9jYXRvckhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzKTsKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBhbGxvY2F0ZShz
aXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKTsKIAogICAgIHZvaWQgdHJhY2tBbGxv
Y2F0aW9ucyhNZXRhQWxsb2NhdG9yVHJhY2tlciogdHJhY2tlcikKICAgICB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkocmV2aXNp
b24gMTA2MTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9ySGFu
ZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgTWV0YUFsbG9jYXRv
cjsKIAogY2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkPE1ldGFB
bGxvY2F0b3JIYW5kbGU+LCBwdWJsaWMgUmVkQmxhY2tUcmVlPE1ldGFBbGxvY2F0b3JIYW5kbGUs
IHZvaWQqPjo6Tm9kZSB7CiBwcml2YXRlOgotICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFs
bG9jYXRvciosIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIE1ldGFBbGxv
Y2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciosIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0
ZXMsIHZvaWQqIG93bmVyVUlEKTsKICAgICAKIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgfk1ldGFBbGxvY2F0b3JIYW5kbGUoKTsKQEAgLTcyLDcgKzcyLDEyIEBAIHB1YmxpYzoKICAg
ICAgICAgQVNTRVJUKG1fYWxsb2NhdG9yKTsKICAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yOwog
ICAgIH0KLSAgICAKKworICAgIHZvaWQqIG93bmVyVUlEKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBtX293bmVyVUlEOworICAgIH0KKwogICAgIHZvaWQqIGtleSgpCiAgICAgewogICAgICAgICBy
ZXR1cm4gbV9zdGFydDsKQEAgLTg0LDYgKzg5LDcgQEAgcHJpdmF0ZToKICAgICBNZXRhQWxsb2Nh
dG9yKiBtX2FsbG9jYXRvcjsKICAgICB2b2lkKiBtX3N0YXJ0OwogICAgIHNpemVfdCBtX3NpemVJ
bkJ5dGVzOworICAgIHZvaWQqIG1fb3duZXJVSUQ7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL09TQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9PU0FsbG9jYXRvci5oCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL09TQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYg
KzI2LDcgQEAKICNpZm5kZWYgT1NBbGxvY2F0b3JfaAogI2RlZmluZSBPU0FsbG9jYXRvcl9oCiAK
KyNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAjaW5j
bHVkZSA8d3RmL1ZNVGFncy5oPgogI2luY2x1ZGUgPHd0Zi9WTVRhZ3MuaD4KQEAgLTY1LDYgKzY2
LDEyIEBAIHB1YmxpYzoKICAgICAvLyBzcGVjaWZpZWQuCiAgICAgc3RhdGljIHZvaWQqIHJlc2Vy
dmVBbmRDb21taXQoc2l6ZV90IHJlc2VydmVTaXplLCBzaXplX3QgY29tbWl0U2l6ZSwgVXNhZ2Ug
PSBVbmtub3duVXNhZ2UsIGJvb2wgd3JpdGFibGUgPSB0cnVlLCBib29sIGV4ZWN1dGFibGUgPSBm
YWxzZSk7CiAgICAgc3RhdGljIHZvaWQgZGVjb21taXRBbmRSZWxlYXNlKHZvaWQqIHJlbGVhc2VC
YXNlLCBzaXplX3QgcmVsZWFzZVNpemUsIHZvaWQqIGRlY29tbWl0QmFzZSwgc2l6ZV90IGRlY29t
bWl0U2l6ZSk7CisKKyAgICAvLyBSZWFsbG9jYXRlIGFuIGV4aXN0aW5nLCBjb21taXR0ZWQgYWxs
b2NhdGlvbi4KKyAgICAvLyBUaGUgcHJpb3IgYWxsb2NhdGlvbiBtdXN0IGJlIGZ1bGx5IGNvbWl0
dGVkLCBhbmQgdGhlIG5ldyBzaXplIHdpbGwgYWxzbyBiZSBmdWxseSBjb21taXR0ZWQuCisgICAg
Ly8gVGhpcyBpbnRlcmZhY2UgaXMgcHJvdmlkZWQgc2luY2UgaXQgbWF5IGJlIHBvc3NpYmxlIHRv
IG9wdGltaXplIHRoaXMgb3BlcmF0aW9uIG9uIHNvbWUgcGxhdGZvcm1zLgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIFQqIHJlYWxsb2NhdGVDb21taXR0ZWQoVCosIHNpemVf
dCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSwgVXNhZ2UgPSBVbmtub3duVXNhZ2UsIGJvb2wgd3Jp
dGFibGUgPSB0cnVlLCBib29sIGV4ZWN1dGFibGUgPSBmYWxzZSk7CiB9OwogCiBpbmxpbmUgdm9p
ZCogT1NBbGxvY2F0b3I6OnJlc2VydmVBbmRDb21taXQoc2l6ZV90IHJlc2VydmVTaXplLCBzaXpl
X3QgY29tbWl0U2l6ZSwgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJs
ZSkKQEAgLTkzLDYgKzEwMCwxNSBAQCBpbmxpbmUgdm9pZCBPU0FsbG9jYXRvcjo6ZGVjb21taXRB
bmRSZWxlCiAgICAgZGVjb21taXRBbmRSZWxlYXNlKGJhc2UsIHNpemUsIGJhc2UsIHNpemUpOwog
fQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIFQqIE9TQWxsb2NhdG9yOjpyZWFsbG9j
YXRlQ29tbWl0dGVkKFQqIG9sZEJhc2UsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSwg
VXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSkKK3sKKyAgICB2b2lk
KiBuZXdCYXNlID0gcmVzZXJ2ZUFuZENvbW1pdChuZXdTaXplLCB1c2FnZSwgd3JpdGFibGUsIGV4
ZWN1dGFibGUpOworICAgIG1lbWNweShuZXdCYXNlLCBvbGRCYXNlLCBzdGQ6Om1pbihvbGRTaXpl
LCBuZXdTaXplKSk7CisgICAgZGVjb21taXRBbmRSZWxlYXNlKG9sZEJhc2UsIG9sZFNpemUpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4obmV3QmFzZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdURgogCiB1c2luZyBXVEY6Ok9TQWxsb2NhdG9yOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124404</attachid>
            <date>2012-01-27 17:14:04 -0800</date>
            <delta_ts>2012-01-27 18:04:48 -0800</delta_ts>
            <desc>More build fixes (patch already reviewed by oliver)</desc>
            <filename>76855.8.patch</filename>
            <type>text/plain</type>
            <size>58358</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA2MTUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDEyLTAxLTI3ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBJbXBsZW1lbnQgYSBKSVQtY29kZSBhd2FyZSBzYW1wbGluZyBwcm9maWxlciBm
b3IgSlNDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
Njg1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgorCisgICAgICAgIFRvIGVu
YWJsZSB0aGUgcHJvZmlsZXIsIHNldCB0aGUgSlNDX0NPREVfUFJPRklMSU5HIGVudmlyb25tZW50
IHZhcmlhYmxlIHRvCisgICAgICAgIDEgKG5vIHRyYWNpbmcgdGhlIEMgc3RhY2spLCAyICh0cmFj
ZSBvbmUgbGV2ZWwgb2YgQyBjb2RlKSBvciAzIChyZWN1cnNpdmVseQorICAgICAgICB0cmFjZSBh
bGwgc2FtcGxlcykuCisKKyAgICAgICAgVGhlIHByb2ZpbGVyIHJlcXVpcmVzIC1mb21pdC1mcmFt
ZS1wb2ludGVyIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgYnVpbGQgZmxhZ3MuCisKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICAgICAtIFJlbW92ZWQgYW4gZXhwb3J0Lgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICAgICAtIEFkZGVkIG5ldyBmaWxlcworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgICAgICAtIEZvciBiYXNlbGluZSBjb2RlYmxvY2tzLCBjYWNoZSB0aGUgcmVz
dWx0IG9mIGNhbkNvbXBpbGVXaXRoREZHLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5o
OgorICAgICAgICAgICAgLSBGb3IgYmFzZWxpbmUgY29kZWJsb2NrcywgY2FjaGUgdGhlIHJlc3Vs
dCBvZiBjYW5Db21waWxlV2l0aERGRy4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxv
Y2F0b3IpOgorICAgICAgICAgICAgLSBOb3RpZnkgdGhlIHByb2ZpbGVyIHdoZW4gdGhlIGFsbG9j
YXRvciBpcyBjcmVhdGVkLgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxv
Y2F0ZSk6CisgICAgICAgICAgICAtIEluZm9ybSB0aGUgYWxsb2NhdGVkIG9mIHRoZSBvd25lclVJ
RC4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcDoKKyAg
ICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG9jYXRvcik6Cisg
ICAgICAgICAgICAtIE5vdGlmeSB0aGUgcHJvZmlsZXIgd2hlbiB0aGUgYWxsb2NhdG9yIGlzIGNy
ZWF0ZWQuCisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAg
ICAgICAgICAgIC0gSW5mb3JtIHRoZSBhbGxvY2F0ZWQgb2YgdGhlIG93bmVyVUlELgorICAgICAg
ICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgICAgICAtIElmIHByb2ZpbGluZywgZG9uJ3Qg
bWFzayB0aGUgcmV0dXJuIGFkZHJlc3MgaW4gSklUIGNvZGUuCisgICAgICAgICAgICAgIChXZSBk
byBzbyB0byBwcm92aWRlIG5pY2VyIGJhY2t0cmFjZXMgaW4gZGVidWcgYnVpbGRzKS4KKyAgICAg
ICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpldmFsdWF0ZSk6Cisg
ICAgICAgICAgICAtIE5vdGlmeSB0aGUgcHJvZmlsZXIgb2Ygc2NyaXB0IGV2YWx1YXRpb25zLgor
ICAgICAgICAqIHRvb2xzOiBBZGRlZC4KKyAgICAgICAgKiB0b29scy9Db2RlUHJvZmlsZS5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpzeW1ib2xOYW1lKToKKyAgICAgICAgICAgIC0gSGVscGVy
IGZ1bmN0aW9uIHRvIGdldCB0aGUgbmFtZSBvZiBhIHN5bWJvbCBpbiB0aGUgZnJhbWV3b3JrLgor
ICAgICAgICAoSlNDOjp0cnVuY2F0ZVRyYWNlKToKKyAgICAgICAgICAgIC0gSGVscGVyIHRvIHRy
dW5jYXRlIHRyYWNlcyBpbnRvIG1ldGhvZHMga25vdyB0byBoYXZlIHVuaW5mb3JtYXRpdmVseSBk
ZWVwIHN0YWNrcy4KKyAgICAgICAgKEpTQzo6Q29kZVByb2ZpbGU6OnNhbXBsZSk6CisgICAgICAg
ICAgICAtIFJlY29yZCBhIHN0YWNrIHRyYWNlIGNsYXNzaWZ5aW5nIHNhbXBsZXMuCisgICAgICAg
IChKU0M6OkNvZGVQcm9maWxlOjpyZXBvcnQpOgorICAgICAgICAgICAgLSB7UHJpbnQgcHJvZmls
ZXIgb3V0cHV0LgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxlLmg6IEFkZGVkLgorICAgICAg
ICAgICAgLSBuZXcgY2xhc3MsIGNhcHR1cmVzIGEgc2V0IG9mIHNhbXBsZXMgYXNzb2NpYXRlZCB3
aXRoIGFuIGV2YWx1YXRlZCBzY3JpcHQsCisgICAgICAgICAgICAgIGFuZCBuZXN0ZWQgdG8gcmVj
b3JkIHNhbXBsZXMgZnJvbSBzdWJzY3JpcHRzLgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxp
bmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q29kZVByb2ZpbGluZzo6cHJvZmlsaW5nVGlt
ZXIpOgorICAgICAgICAgICAgLSBjYWxsYmFjayBmaXJlZCB0aGVuIGEgdGltZXIgZXZlbnQgb2Nj
dXJzLgorICAgICAgICAoSlNDOjpDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IpOgorICAg
ICAgICAgICAgLSBjYWxsZWQgd2hlbiB0aGUgZXhlY3V0YWJsZSBhbGxvY2F0b3IgaXMgY29uc3Ry
dWN0ZWQuCisgICAgICAgIChKU0M6OkNvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEMpOgor
ICAgICAgICAgICAgLSBoZWxwZXIgdG8gbG9va3VwIHRoZSBjb2RlYmxvY2sgZnJvbSBhbiBhZGRy
ZXNzIGluIEpJVCBjb2RlCisgICAgICAgIChKU0M6OkNvZGVQcm9maWxpbmc6OmJlZ2luKToKKyAg
ICAgICAgICAgIC0gZW50ZXIgYSBwcm9maWxpbmcgc2NvcGUuCisgICAgICAgIChKU0M6OkNvZGVQ
cm9maWxpbmc6OmVuZCk6CisgICAgICAgICAgICAtIGV4aXQgYSBwcm9maWxpbmcgc2NvcGUuCisg
ICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGluZy5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0gbmV3
IGNsYXNzLCBpbnN0YW50aWFsZWQgZnJvbSBDb21wbGV0aW9uIHRvIGRlZmluZSBhIHByb2ZpbGlu
ZyBzY29wZS4KKyAgICAgICAgKiB0b29scy9Qcm9maWxlVHJlZU5vZGUuaDogQWRkZWQuCisgICAg
ICAgICAgICAtIG5ldyBjbGFzcywgdXNlZCB0byBjb25zdHJ1Y3QgYSB0cmVlIG9mIHNhbXBsZXMu
CisgICAgICAgICogdG9vbHMvVGllcmVkTU1hcEFycmF5Lmg6IEFkZGVkLgorICAgICAgICAgICAg
LSBuZXcgY2xhc3MsIGEgbWFsbG9jLWZyZWUgdmVjdG9yIChjYW4gYmUgdXNlZCB3aGlsZSB0aGUg
bWFpbiB0aHJlYWQgaXMgc3VzcGVuZGVkLAorICAgICAgICAgICAgICBwb3NzaWJseSBob2xkaW5n
IHRoZSBtYWxsb2MgaGVhcCBsb2NrKS4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6
CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5kbGUp
OgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgICAgICAt
IEFsbG93IGFsbG9jYXRpb24gaGFuZGxlcyB0byB0cmFjayBpbmZvcm1hdGlvbiBhYm91dCB0aGVp
ciBvd25lci4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5oOgorICAgICAgICAoTWV0YUFs
bG9jYXRvcik6CisgICAgICAgICAgICAtIEFsbG93IGFsbG9jYXRpb24gaGFuZGxlcyB0byB0cmFj
ayBpbmZvcm1hdGlvbiBhYm91dCB0aGVpciBvd25lci4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9j
YXRvckhhbmRsZS5oOgorICAgICAgICAoTWV0YUFsbG9jYXRvckhhbmRsZSk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Om93bmVyVUlEKToKKyAgICAgICAgICAgIC0gQWxsb3cg
YWxsb2NhdGlvbiBoYW5kbGVzIHRvIHRyYWNrIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyIG93bmVy
LgorICAgICAgICAqIHd0Zi9PU0FsbG9jYXRvci5oOgorICAgICAgICAoV1RGOjpPU0FsbG9jYXRv
cjo6cmVhbGxvY2F0ZUNvbW1pdHRlZCk6CisgICAgICAgICAgICAtIHJlYWxsb2NhdGUgYW4gZXhp
c3RpbmcsIGNvbW1pdHRlZCBtZW1vcnkgYWxsb2NhdGlvbi4KKwogMjAxMi0wMS0yNyAgTU9SSVRB
IEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbSlNDXSBTb21lIEpTX0VY
UE9SVERBVEEgbWF5IG5vdCBiZSBuZWNlc3NhcnkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw2ICsyMDAsOSBAQCBTRVQoSmF2
YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHJ1bnRpbWUvVGltZW91dENoZWNrZXIuY3BwCiAgICAg
cnVudGltZS9VU3RyaW5nLmNwcAogCisgICAgdG9vbHMvQ29kZVByb2ZpbGUuY3BwCisgICAgdG9v
bHMvQ29kZVByb2ZpbGluZy5jcHAKKwogICAgIHlhcnIvWWFyclBhdHRlcm4uY3BwCiAgICAgeWFy
ci9ZYXJySW50ZXJwcmV0ZXIuY3BwCiAgICAgeWFyci9ZYXJySklULmNwcApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEwNjE1MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkp
CkBAIC01MjUsNiArNTI1LDEyIEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9XZWFrUmFuZG9tLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dyaXRlQmFycmllci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVBy
b2ZpbGUuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuaCBc
CisJU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5oIFwKKwlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9UaWVyZWRNTWFwQXJyYXkuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9B
bGlnbm1lbnQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BbHdheXNJbmxpbmUuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BcnJheUJ1ZmZlci5jcHAgXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCShyZXZpc2lvbiAxMDYxNTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkp
CkBAIC00MTUsNyArNDE1LDYgQEAgX19aTjNXVEYxMnJhbmRvbU51bWJlckV2CiBfX1pOM1dURjEz
TWV0YUFsbG9jYXRvcjE3YWRkRnJlc2hGcmVlU3BhY2VFUHZtCiBfX1pOM1dURjEzTWV0YUFsbG9j
YXRvcjE3ZnJlZUZyZWVTcGFjZU5vZGVFUE5TMF8xM0ZyZWVTcGFjZU5vZGVFCiBfX1pOM1dURjEz
TWV0YUFsbG9jYXRvcjE4ZGVidWdGcmVlU3BhY2VTaXplRXYKLV9fWk4zV1RGMTNNZXRhQWxsb2Nh
dG9yOGFsbG9jYXRlRW0KIF9fWk4zV1RGMTNNZXRhQWxsb2NhdG9yQzJFbQogX19aTjNXVEYxM1N0
cmluZ0J1aWxkZXIxMXNocmlua1RvRml0RXYKIF9fWk4zV1RGMTNTdHJpbmdCdWlsZGVyMTVyZXNl
cnZlQ2FwYWNpdHlFagpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
cHJpCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBAIElOQ0xVREVQQVRIICs9
IFwKICAgICAkJFNPVVJDRV9ESVIvcGFyc2VyIFwKICAgICAkJFNPVVJDRV9ESVIvcHJvZmlsZXIg
XAogICAgICQkU09VUkNFX0RJUi9ydW50aW1lIFwKKyAgICAkJFNPVVJDRV9ESVIvdG9vbHMgXAog
ICAgICQkU09VUkNFX0RJUi95YXJyIFwKICAgICAkJFNPVVJDRV9ESVIvQVBJIFwKICAgICAkJFNP
VVJDRV9ESVIvRm9yd2FyZGluZ0hlYWRlcnMgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5w
cmkJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJp
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNiArMjA5LDggQEAgU09VUkNFUyArPSBcCiAgICAgcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwIFwKICAgICBydW50aW1lL1RpbWVvdXRDaGVja2VyLmNwcCBcCiAg
ICAgcnVudGltZS9VU3RyaW5nLmNwcCBcCisgICAgdG9vbHMvQ29kZVByb2ZpbGUuY3BwIFwKKyAg
ICB0b29scy9Db2RlUHJvZmlsaW5nLmNwcCBcCiAgICAgeWFyci9ZYXJySklULmNwcCBcCiAKICpz
aDQqIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQ0Nyw2ICsxNDQ3LDM0IEBACiAJCQk8L0ZpbGU+
CiAJCTwvRmlsdGVyPgogCQk8RmlsdGVyCisJCQlOYW1lPSJ0b29scyIKKwkJCT4KKwkJCTxGaWxl
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx0b29sc1xDb2RlUHJvZmlsZS5jcHAiCisJCQkJPgor
CQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHRvb2xzXENvZGVQ
cm9maWxlLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXHRvb2xzXENvZGVQcm9maWxpbmcuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxG
aWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx0b29sc1xDb2RlUHJvZmlsaW5nLmgiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHRvb2xzXFBy
b2ZpbGVUcmVlTm9kZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlx0b29sc1xUaWVyZWRNTWFwQXJyYXkuaCIKKwkJCQk+CisJCQk8L0ZpbGU+
CisJCTwvRmlsdGVyPgorCQk8RmlsdGVyCiAJCQlOYW1lPSJieXRlY29kZSIKIAkJCT4KIAkJCTxG
aWxlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlQ29tbW9uLnZzcHJvcHMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZUNvbW1vbi52c3Byb3BzCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlQ29tbW9uLnZzcHJvcHMJKHdvcmtpbmcgY29weSkKQEAgLTYsNyArNiw3IEBA
CiAJPgogCTxUb29sCiAJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCUFkZGl0aW9uYWxJbmNs
dWRlRGlyZWN0b3JpZXM9IiZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmpcSmF2YVNj
cmlwdENvcmVcRGVyaXZlZFNvdXJjZXNcJnF1b3Q7Oy4uLy4uLzsuLi8uLi9BUEkvOy4uLy4uL3Bh
cnNlci87Li4vLi4vYnl0ZWNvbXBpbGVyLzsuLi8uLi9kZmcvOy4uLy4uL2ppdC87Li4vLi4vcnVu
dGltZS87Li4vLi4vYnl0ZWNvZGUvOy4uLy4uL2ludGVycHJldGVyLzsuLi8uLi93dGYvOy4uLy4u
L3Byb2ZpbGVyOy4uLy4uL2Fzc2VtYmxlci87Li4vLi4vZGVidWdnZXIvOy4uLy4uL2hlYXAvOyZx
dW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGli
cmFyaWVzRGlyKVxpbmNsdWRlXHByaXZhdGUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVp
bGREaXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1
ZGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGlu
Y2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxw
dGhyZWFkcyZxdW90OyIKKwkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJnF1b3Q7JChD
b25maWd1cmF0aW9uQnVpbGREaXIpXG9ialxKYXZhU2NyaXB0Q29yZVxEZXJpdmVkU291cmNlc1wm
cXVvdDs7Li4vLi4vOy4uLy4uL0FQSS87Li4vLi4vcGFyc2VyLzsuLi8uLi9ieXRlY29tcGlsZXIv
Oy4uLy4uL2RmZy87Li4vLi4vaml0LzsuLi8uLi9ydW50aW1lLzsuLi8uLi90b29scy87Li4vLi4v
Ynl0ZWNvZGUvOy4uLy4uL2ludGVycHJldGVyLzsuLi8uLi93dGYvOy4uLy4uL3Byb2ZpbGVyOy4u
Ly4uL2Fzc2VtYmxlci87Li4vLi4vZGVidWdnZXIvOy4uLy4uL2hlYXAvOyZxdW90OyQoV2ViS2l0
TGlicmFyaWVzRGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxp
bmNsdWRlXHByaXZhdGUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1
ZGUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVcSmF2YVNjcmlw
dENvcmUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVccHJpdmF0
ZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxwdGhyZWFkcyZxdW90
OyIKIAkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9fU1REX0MiCiAJCUZvcmNlZEluY2x1ZGVG
aWxlcz0iSUNVVmVyc2lvbi5oIgogCS8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM4Miw2ICsz
ODIsOCBAQAogCQk4NkFFNjRBQTEzNUU1RTFDMDA5NjMwMTIgLyogU0g0QXNzZW1ibGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkFFNjRBNzEzNUU1
RTFDMDA5NjMwMTIgLyogU0g0QXNzZW1ibGVyLmggKi87IH07CiAJCTg2QUU2QzREMTM2QTExRTQw
MDk2MzAxMiAvKiBERkdGUFJJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NkFFNkM0QjEzNkExMUU0MDA5NjMwMTIgLyogREZHRlBSSW5mby5oICov
OyB9OwogCQk4NkFFNkM0RTEzNkExMUU0MDA5NjMwMTIgLyogREZHR1BSSW5mby5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZBRTZDNEMxMzZBMTFFNDAw
OTYzMDEyIC8qIERGR0dQUkluZm8uaCAqLzsgfTsKKwkJODZCNTgyNjcxNEQyNzk2QzAwQTlDMzA2
IC8qIENvZGVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg2QjU4MjJFMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgKi87
IH07CisJCTg2QjU4MjY5MTREMjc5NzAwMEE5QzMwNiAvKiBDb2RlUHJvZmlsaW5nLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MDNDRUYyMTRDNzU0
NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmNwcCAqLzsgfTsKIAkJODZCOTlBRTMxMTdFNTc4
MTAwREY1QTkwIC8qIFN0cmluZ0J1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODZCOTlBRTExMTdFNTc4MTAwREY1QTkwIC8qIFN0cmluZ0J1ZmZl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2
QkIwOUMwMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QkIwOUJFMTM4RTM4MUIwMDU2NzAyRiAv
KiBERkdSZXBhdGNoLmNwcCAqLzsgfTsKIAkJODZCQjA5QzExMzhFMzgxQjAwNTY3MDJGIC8qIERG
R1JlcGF0Y2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg2QkIwOUJGMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmggKi87IH07CkBAIC0xMDQy
LDcgKzEwNDQsNyBAQAogCQkxQTA4Mjc3ODE0MjE2OEQ3MDA5MENDQUMgLyogQmluYXJ5U2VtYXBo
b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpbmFyeVNlbWFwaG9yZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUE5RTU1MDE0OTgwOTM1MDAwMDFBOEEg
LyogRnVuY3Rpb25hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdW5jdGlv
bmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDOTA1MTQyMEJBOUU4QTcwMDgx
RTlEMCAvKiBWZXJzaW9uLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9
IFZlcnNpb24ueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFDOTA1MTQz
MEJBOUU4QTcwMDgxRTlEMCAvKiBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQueGNjb25maWc7IG5hbWUgPSBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZzsgcGF0aCA9IC4uL0Nv
bmZpZ3VyYXRpb25zL0phdmFTY3JpcHRDb3JlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxQzkwNTE0MzBCQTlFOEE3MDA4MUU5RDAgLyogSmF2YVNjcmlwdENvcmUueGNj
b25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gSmF2YVNjcmlwdENvcmUueGNj
b25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDOTA1MTQ0MEJBOUU4QTcwMDgx
RTlEMCAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBw
YXRoID0gRGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQzkwNTE0NTBCQTlFOEE3MDA4MUU5RDAgLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQueGNjb25maWc7IHBhdGggPSBCYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQ0FBOEI0QTBEMzJDMzlBMDA0MUJDRkYgLyogSmF2YVNjcmlwdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKYXZhU2NyaXB0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMTM4LDYgKzExNDAsOCBAQAogCQk4NjAxNjFFMDBGM0E4M0MxMDBGODQ3
MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTWFjcm9Bc3NlbWJsZXJYODYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYw
MTYxRTEwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDE2MUUyMEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fz
c2VtYmxlclg4NkNvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NjAz
Q0VGMjE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGluZy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlUHJvZmlsaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJODYwM0NFRjMxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVByb2ZpbGluZy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjA0RjRGMjE0M0E2QzQ0MDBCMjk1RjUgLyogQ2hh
bmdlTG9nICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IENoYW5nZUxvZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYw
NEY1MDMxNDNDRTFDMTAwQjI5NUY1IC8qIEpTR2xvYmFsVGhpcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbFRoaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODYyNkJFQ0UxMTkyOEUzOTAwNzgyRkFCIC8qIFN0cmluZ1N0YXRpY3MuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3RyaW5nU3RhdGljcy5jcHA7IHBhdGgg
PSB0ZXh0L1N0cmluZ1N0YXRpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTE4NSw2ICsxMTg5LDEwIEBACiAJCTg2QUU2NEE3MTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3Nl
bWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU0g0QXNzZW1ibGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QUU2QzRCMTM2QTExRTQwMDk2MzAxMiAv
KiBERkdGUFJJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ZQUklu
Zm8uaDsgcGF0aCA9IGRmZy9ERkdGUFJJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg2QUU2QzRDMTM2QTExRTQwMDk2MzAxMiAvKiBERkdHUFJJbmZvLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0dQUkluZm8uaDsgcGF0aCA9IGRmZy9ERkdHUFJJbmZv
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2QjU4MjJDMTREMjJGNUYwMEE5QzMw
NiAvKiBQcm9maWxlVHJlZU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UHJvZmlsZVRyZWVOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2QjU4MjJF
MTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb2RlUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTg2QjU4MjJGMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk4NkI1ODI2QTE0RDM1RDUxMDBBOUMzMDYgLyogVGllcmVkTU1hcEFycmF5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpZXJlZE1NYXBBcnJheS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkI5OUFFMTExN0U1NzgxMDBERjVBOTAgLyog
U3RyaW5nQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0cmluZ0J1
ZmZlci5oOyBwYXRoID0gdGV4dC9TdHJpbmdCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODZCQjA5QkUxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUmVwYXRjaC5jcHA7IHBhdGggPSBk
ZmcvREZHUmVwYXRjaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QkIwOUJG
MTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR1JlcGF0Y2guaDsgcGF0aCA9IGRmZy9ERkdSZXBhdGNoLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjgwLDYgKzE2ODgsNyBAQAogCQkJCTk1QUI4MzFBMERB
NDJDNjkwMEJDODNGMyAvKiBwcm9maWxlciAqLywKIAkJCQk3RUY2RTBCQjBFQjdBMUVDMDA3OUFG
QUYgLyogcnVudGltZSAqLywKIAkJCQkxNDEyMTEwMDBBNDg3NzI2MDA0ODAyNTUgLyogdGVzdHMg
Ki8sCisJCQkJODYwM0NFRjAxNEM3NTNFRjAwQUU1OUUzIC8qIHRvb2xzICovLAogCQkJCTY1MTYy
RUYxMDhFNkEyMUMwMDc1NTZDRCAvKiB3dGYgKi8sCiAJCQkJODZFQUM0OEMwRjkzRThCOTAwOEVD
OTQ4IC8qIHlhcnIgKi8sCiAJCQkJMUM5MDUxM0UwQkE5RTg4MzAwODFFOUQwIC8qIENvbmZpZ3Vy
YXRpb25zICovLApAQCAtMTgyNiw3ICsxODM1LDYgQEAKIAkJCQk4NjVGNDA4NzEwRTdENTYzMDA5
NDczNjEgLyogQVBJU2hpbXMuaCAqLywKIAkJCQkxQ0FBOEI0QTBEMzJDMzlBMDA0MUJDRkYgLyog
SmF2YVNjcmlwdC5oICovLAogCQkJCTFDQUE4QjRCMEQzMkMzOUEwMDQxQkNGRiAvKiBKYXZhU2Ny
aXB0Q29yZS5oICovLAotCQkJCTFDOTA1MTQzMEJBOUU4QTcwMDgxRTlEMCAvKiBKYXZhU2NyaXB0
Q29yZS54Y2NvbmZpZyAqLywKIAkJCQlCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUgLyogSlNBUElW
YWx1ZVdyYXBwZXIuY3BwICovLAogCQkJCUJDMDg5NEQ2MEZBRkJBMkQwMDAwMTg2NSAvKiBKU0FQ
SVZhbHVlV3JhcHBlci5oICovLAogCQkJCTE0MjEzNTlBMEE2NzdGNEYwMEE4MTk1RSAvKiBKU0Jh
c2UuY3BwICovLApAQCAtMTkxNiw2ICsxOTI0LDcgQEAKIAkJCQkxQzkwNTE0NDBCQTlFOEE3MDA4
MUU5RDAgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovLAogCQkJCTQ0OTA5N0VFMEY4RjgxQjUw
MDc2QTMyNyAvKiBGZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyAqLywKIAkJCQk1REFGRDZDQjE0NkI2
ODYzMDBGQkVGQjQgLyogSlNDLnhjY29uZmlnICovLAorCQkJCTFDOTA1MTQzMEJBOUU4QTcwMDgx
RTlEMCAvKiBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZyAqLywKIAkJCQlCQzAyMUJGMjEzNjkwMEMz
MDBGQzU0NjcgLyogVGVzdEFQSS54Y2NvbmZpZyAqLywKIAkJCQk1REFGRDZDQzE0NkI2OEI5MDBG
QkVGQjQgLyogVGVzdFJlZ0V4cC54Y2NvbmZpZyAqLywKIAkJCQkxQzkwNTE0MjBCQTlFOEE3MDA4
MUU5RDAgLyogVmVyc2lvbi54Y2NvbmZpZyAqLywKQEAgLTIzNjUsNiArMjM3NCwxOSBAQAogCQkJ
cGF0aCA9IHJ1bnRpbWU7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk4NjAz
Q0VGMDE0Qzc1M0VGMDBBRTU5RTMgLyogdG9vbHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCTg2QjU4MjJFMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJv
ZmlsZS5jcHAgKi8sCisJCQkJODZCNTgyMkYxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxl
LmggKi8sCisJCQkJODYwM0NFRjIxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcuY3Bw
ICovLAorCQkJCTg2MDNDRUYzMTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmggKi8s
CisJCQkJODZCNTgyMkMxNEQyMkY1RjAwQTlDMzA2IC8qIFByb2ZpbGVUcmVlTm9kZS5oICovLAor
CQkJCTg2QjU4MjZBMTREMzVENTEwMEE5QzMwNiAvKiBUaWVyZWRNTWFwQXJyYXkuaCAqLywKKwkJ
CSk7CisJCQlwYXRoID0gdG9vbHM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9Owog
CQk4NjU2NTczRTExNUJFMzUyMDAyOTFGNDAgLyogdGV4dCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0zNjQwLDYgKzM2NjIsOCBAQAogCQkJCTBGOTMzMkEx
MTRDQTdERDEwMDg1RjNDNiAvKiBNZXRob2RDYWxsTGlua1N0YXR1cy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjkzMzJBMzE0Q0E3REQ3MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjU1RjBGNDE0RDEwNjM5MDBBQzc2NDkgLyogQWJzdHJhY3RQQy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk4NkI1ODI2NzE0RDI3OTZDMDBBOUMzMDYgLyogQ29kZVBy
b2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODZCNTgyNjkxNEQyNzk3MDAwQTlDMzA2IC8q
IENvZGVQcm9maWxpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTA2MTUwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0NTYsNiArMTQ1Niw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9j
a1RhZywKICAgICAsIG1fc3BlY3VsYXRpdmVGYWlsQ291bnRlcigwKQogICAgICwgbV9vcHRpbWl6
YXRpb25EZWxheUNvdW50ZXIoMCkKICAgICAsIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIo
MCkKKyAgICAsIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0ZShDb21waWxlV2l0aERGR1Vuc2V0KQog
ewogICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKICAgICBvcHRp
bWl6ZUFmdGVyV2FybVVwKCk7CkBAIC0yMTY0LDE3ICsyMTY1LDE3IEBAIEpTT2JqZWN0KiBGdW5j
dGlvbkNvZGVCbG9jazo6Y29tcGlsZU9wdGkKICAgICByZXR1cm4gZXJyb3I7CiB9CiAKLWJvb2wg
UHJvZ3JhbUNvZGVCbG9jazo6Y2FuQ29tcGlsZVdpdGhERkcoKQorYm9vbCBQcm9ncmFtQ29kZUJs
b2NrOjpjYW5Db21waWxlV2l0aERGR0ludGVybmFsKCkKIHsKICAgICByZXR1cm4gREZHOjpjYW5D
b21waWxlUHJvZ3JhbSh0aGlzKTsKIH0KIAotYm9vbCBFdmFsQ29kZUJsb2NrOjpjYW5Db21waWxl
V2l0aERGRygpCitib29sIEV2YWxDb2RlQmxvY2s6OmNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwo
KQogewogICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVFdmFsKHRoaXMpOwogfQogCi1ib29sIEZ1
bmN0aW9uQ29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERGRygpCitib29sIEZ1bmN0aW9uQ29kZUJs
b2NrOjpjYW5Db21waWxlV2l0aERGR0ludGVybmFsKCkKIHsKICAgICBpZiAobV9pc0NvbnN0cnVj
dG9yKQogICAgICAgICByZXR1cm4gREZHOjpjYW5Db21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3Qo
dGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4OCw3ICszODgsMjIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRl
KiwgU2NvcGVDaGFpbk5vZGUqKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigp
ID0gMDsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCkgPSAwOwotICAg
ICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKSA9IDA7CisKKyAgICAgICAgZW51
bSBDb21waWxlV2l0aERGR1N0YXRlIHsKKyAgICAgICAgICAgIENvbXBpbGVXaXRoREZHRmFsc2Us
CisgICAgICAgICAgICBDb21waWxlV2l0aERGR1RydWUsCisgICAgICAgICAgICBDb21waWxlV2l0
aERGR1Vuc2V0CisgICAgICAgIH07CisKKyAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVX
aXRoREZHSW50ZXJuYWwoKSA9IDA7CisgICAgICAgIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKQor
ICAgICAgICB7CisgICAgICAgICAgICBib29sIHJlc3VsdCA9IGNhbkNvbXBpbGVXaXRoREZHSW50
ZXJuYWwoKTsKKyAgICAgICAgICAgIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0ZSA9IHJlc3VsdCA/
IENvbXBpbGVXaXRoREZHVHJ1ZSA6IENvbXBpbGVXaXRoREZHRmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIENvbXBpbGVXaXRoREZHU3RhdGUgY2Fu
Q29tcGlsZVdpdGhERkdTdGF0ZSgpIHsgcmV0dXJuIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0ZTsg
fQorCiAgICAgICAgIGJvb2wgaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQogICAgICAgICB7CiAg
ICAgICAgICAgICBBU1NFUlQoZ2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsK
QEAgLTExODcsNiArMTIwMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBmcmllbmQgdm9p
ZCBXVEY6OmRlbGV0ZU93bmVkUHRyPFJhcmVEYXRhPihSYXJlRGF0YSopOwogI2VuZGlmCiAgICAg
ICAgIE93blB0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKKyAgICAgICAgQ29tcGlsZVdpdGhERkdT
dGF0ZSBtX2NhbkNvbXBpbGVXaXRoREZHU3RhdGU7CiAgICAgfTsKIAogICAgIC8vIFByb2dyYW0g
Y29kZSBpcyBub3QgbWFya2VkIGJ5IGFueSBmdW5jdGlvbiwgc28gd2UgbWFrZSB0aGUgZ2xvYmFs
IG9iamVjdApAQCAtMTIyNiw3ICsxMjQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZp
cnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5v
ZGUqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKCk7CiAgICAgICAgIHZpcnR1YWwg
Q29kZUJsb2NrKiByZXBsYWNlbWVudCgpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGls
ZVdpdGhERkcoKTsKKyAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHSW50ZXJu
YWwoKTsKICNlbmRpZgogICAgIH07CiAKQEAgLTEyNjAsNyArMTI3Niw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0
ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpOwog
ICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKLSAgICAgICAgdmlydHVh
bCBib29sIGNhbkNvbXBpbGVXaXRoREZHKCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21w
aWxlV2l0aERGR0ludGVybmFsKCk7CiAjZW5kaWYKIAogICAgIHByaXZhdGU6CkBAIC0xMjk3LDcg
KzEzMTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29t
cGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgamV0dGlzb24oKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2Vt
ZW50KCk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOworICAgICAg
ICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpOwogI2VuZGlmCiAgICAg
fTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3IuY3BwCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgogCiAjaWYgRU5BQkxFKEVYRUNV
VEFCTEVfQUxMT0NBVE9SX0RFTUFORCkKKyNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5j
bHVkZSA8d3RmL01ldGFBbGxvY2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvUGFnZVJlc2VydmF0aW9u
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZNVGFncy5oPgpAQCAtOTMsNiArOTQsNyBAQCB2b2lkIEV4ZWN1
dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxvCiB7CiAgICAgQVNTRVJUKCFhbGxvY2F0b3Ip
OwogICAgIGFsbG9jYXRvciA9IG5ldyBEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yKCk7CisgICAg
Q29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9yKGFsbG9jYXRvcik7CiB9CiAKIEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OkV4ZWN1dGFibGVBbGxvY2F0b3IoSlNHbG9iYWxEYXRhJikKQEAgLTExMiw5
ICsxMTQsNyBAQCBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVtb3J5UHJlCiAKIFBh
c3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxs
b2NhdGUoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCkK
IHsKLSAgICBVTlVTRURfUEFSQU0ob3duZXJVSUQpOwotCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVN
ZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOwor
ICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3ItPmFs
bG9jYXRlKHNpemVJbkJ5dGVzLCBvd25lclVJRCk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAg
IENSQVNIKCk7CiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4
ZWRWTVBvb2wuY3BwCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDggKzI5LDggQEAKIAogI2lmIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9GSVhFRCkK
IAorI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlIDxlcnJuby5oPgotCiAjaW5j
bHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDx3dGYvTWV0
YUFsbG9jYXRvci5oPgpAQCAtOTYsNiArOTYsNyBAQCB2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6
OmluaXRpYWxpemVBbGxvCiB7CiAgICAgQVNTRVJUKCFhbGxvY2F0b3IpOwogICAgIGFsbG9jYXRv
ciA9IG5ldyBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKTsKKyAgICBDb2RlUHJvZmls
aW5nOjpub3RpZnlBbGxvY2F0b3IoYWxsb2NhdG9yKTsKIH0KIAogRXhlY3V0YWJsZUFsbG9jYXRv
cjo6RXhlY3V0YWJsZUFsbG9jYXRvcihKU0dsb2JhbERhdGEmKQpAQCAtMTE2LDEyICsxMTcsMTAg
QEAgYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZQogCiBQYXNzUmVmUHRy
PEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJ
RCkKIHsKLSAgICBVTlVTRURfUEFSQU0ob3duZXJVSUQpOwotCi0gICAgUmVmUHRyPEV4ZWN1dGFi
bGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMp
OworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3It
PmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBvd25lclVJRCk7CiAgICAgaWYgKCFyZXN1bHQpIHsKICAg
ICAgICAgcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoZ2xvYmFsRGF0YSk7Ci0gICAgICAgIHJlc3Vs
dCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOworICAgICAgICByZXN1bHQgPSBh
bGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBvd25lclVJRCk7CiAgICAgICAgIGlmICgh
cmVzdWx0KQogICAgICAgICAgICAgQ1JBU0goKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcg
QEAKICNpbmNsdWRlICJBcmd1bWVudHMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNs
dWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAi
REZHT1NSRW50cnkuaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlv
bkhlbHBlcnMuaCIKQEAgLTk2OCw3ICs5NjksNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBKSVRUaHVu
a3M6OnRyeUNhY2hlR2V0CiAgICAgSklUOjpjb21waWxlR2V0QnlJZENoYWluKGNhbGxGcmFtZS0+
c2NvcGVDaGFpbigpLT5nbG9iYWxEYXRhLCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgc3R1YkluZm8s
IHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBwcm9wZXJ0eU5hbWUsIHNsb3QsIG9m
ZnNldCwgcmV0dXJuQWRkcmVzcyk7CiB9CiAKLSNpZiAhZGVmaW5lZChOREVCVUcpICYmICFFTkFC
TEUoQ09ERV9QUk9GSUxJTkcpCisjaWYgIWRlZmluZWQoTkRFQlVHKQogCiBleHRlcm4gIkMiIHsK
IApAQCAtOTg2LDcgKzk4Nyw4IEBAIHN0cnVjdCBTdGFja0hhY2sgewogICAgICAgICA6IHN0YWNr
RnJhbWUoc3RhY2tGcmFtZSkKICAgICAgICAgLCBzYXZlZFJldHVybkFkZHJlc3MoKnN0YWNrRnJh
bWUucmV0dXJuQWRkcmVzc1Nsb3QoKSkKICAgICB7Ci0gICAgICAgICpzdGFja0ZyYW1lLnJldHVy
bkFkZHJlc3NTbG90KCkgPSBSZXR1cm5BZGRyZXNzUHRyKEZ1bmN0aW9uUHRyKGpzY0dlbmVyYXRl
ZE5hdGl2ZUNvZGUpKTsKKyAgICAgICAgaWYgKCFDb2RlUHJvZmlsaW5nOjplbmFibGVkKCkpCisg
ICAgICAgICAgICAqc3RhY2tGcmFtZS5yZXR1cm5BZGRyZXNzU2xvdCgpID0gUmV0dXJuQWRkcmVz
c1B0cihGdW5jdGlvblB0cihqc2NHZW5lcmF0ZWROYXRpdmVDb2RlKSk7CiAgICAgfQogCiAgICAg
QUxXQVlTX0lOTElORSB+U3RhY2tIYWNrKCkgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDYgKzI0LDcgQEAKICNpbmNsdWRlICJDb21wbGV0aW9uLmgiCiAKICNpbmNsdWRlICJDYWxsRnJh
bWUuaCIKKyNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmpl
Y3QuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpAQCAt
NTUsNiArNTYsOCBAQCBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDCiAg
ICAgSlNMb2NrIGxvY2soZXhlYyk7CiAgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5pZGVu
dGlmaWVyVGFibGUgPT0gd3RmVGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSk7
CiAKKyAgICBDb2RlUHJvZmlsaW5nIHByb2ZpbGUoc291cmNlKTsKKwogICAgIFByb2dyYW1FeGVj
dXRhYmxlKiBwcm9ncmFtID0gUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZShleGVjLCBzb3VyY2Up
OwogICAgIGlmICghcHJvZ3JhbSkgewogICAgICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29kZVBy
b2ZpbGUuaCIKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVQcm9maWxp
bmcuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiUHJvZmlsZVRyZWVOb2Rl
LmgiCisjaW5jbHVkZSAiVmVjdG9yLmgiCisjaW5jbHVkZSAiV1RGU3RyaW5nLmgiCisjaW5jbHVk
ZSA8Y3h4YWJpLmg+CisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRlIDxleGVjaW5mby5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworLy8gTWFwIGZyb20gQ29kZVR5cGUgZW51bSB0byBhIGNvcnJl
c3BvbmRpbmcgbmFtZS4KK2NvbnN0IGNoYXIqIENvZGVQcm9maWxlOjpzX2NvZGVUeXBlTmFtZXNb
Q29kZVByb2ZpbGU6Ok51bWJlck9mQ29kZVR5cGVzXSA9IHsKKyAgICAiW1tFbmdpbmVDb2RlXV0i
LAorICAgICJbW0dsb2JhbFRodW5rXV0iLAorICAgICJbW1JlZ0V4cENvZGVdXSIsCisgICAgIltb
REZHSklUXV0iLAorICAgICJbW0Jhc2VsaW5lT25seV1dIiwKKyAgICAiW1tCYXNlbGluZVByb2Zp
bGVdXSIsCisgICAgIltbQmFzZWxpbmVPU1JdXSIsCisgICAgIltbRW5naW5lRnJhbWVdXSIKK307
CisKKy8vIEhlbHBlciBmdW5jdGlvbiwgZmluZCB0aGUgc3ltYm9sIG5hbWUgZm9yIGEgcGMgaW4g
SlNDLgorc3RhdGljIGNvbnN0IGNoYXIqIHN5bWJvbE5hbWUodm9pZCogYWRkcmVzcykKK3sKKyAg
ICBEbF9pbmZvIGluZm87CisgICAgaWYgKCFkbGFkZHIoYWRkcmVzcywgJmluZm8pIHx8ICFpbmZv
LmRsaV9zbmFtZSkKKyAgICAgICAgcmV0dXJuICI8dW5rbm93bj4iOworCisgICAgY29uc3QgY2hh
ciogbWFuZ2xlZE5hbWUgPSBpbmZvLmRsaV9zbmFtZTsKKyAgICBjb25zdCBjaGFyKiBjeGFEZW1h
bmdsZWQgPSBhYmk6Ol9fY3hhX2RlbWFuZ2xlKG1hbmdsZWROYW1lLCAwLCAwLCAwKTsKKyAgICBy
ZXR1cm4gY3hhRGVtYW5nbGVkID8gY3hhRGVtYW5nbGVkIDogbWFuZ2xlZE5hbWU7Cit9CisKKy8v
IEhlbHBlciBmdW5jdGlvbiwgdHJ1bmNhdGUgdHJhY2VzIHRvIHBydW5lIHRoZSBvdXRwdXQgJiBt
YWtlIHZlcnkgdmVyYm9zZSBtb2RlIGEgbGl0dGxlIG1vcmUgcmVhZGFibGUuCitzdGF0aWMgYm9v
bCB0cnVuY2F0ZVRyYWNlKGNvbnN0IGNoYXIqIHN5bWJvbE5hbWUpCit7CisgICAgcmV0dXJuICFz
dHJjbXAoc3ltYm9sTmFtZSwgIkpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkiKQor
ICAgICAgICB8fCAhc3RyY21wKHN5bWJvbE5hbWUsICJKU0M6OlBhcnNlcjxKU0M6OkxleGVyPHVu
c2lnbmVkIGNoYXI+ID46OnBhcnNlSW5uZXIoKSIpCisgICAgICAgIHx8ICFzdHJjbXAoc3ltYm9s
TmFtZSwgIldURjo6ZmFzdE1hbGxvYyh1bnNpZ25lZCBsb25nKSIpCisgICAgICAgIHx8ICFzdHJj
bXAoc3ltYm9sTmFtZSwgIldURjo6Y2FsY3VsYXRlVVRDT2Zmc2V0KCkiKQorICAgICAgICB8fCAh
c3RyY21wKHN5bWJvbE5hbWUsICJKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJs
b2NrKCkiKTsKKyAgICAgICAgCit9CisKKy8vIEVhY2ggdHJhY2UgY29uc2lzdHMgb2YgYSBzZXF1
ZW5jZSBvZiB6ZXJvIG9yIG1vcmUgJ0VuZ2luZUZyYW1lJyBlbnRyaWVzLAorLy8gZm9sbG93ZWQg
YnkgYSBzYW1wbGUgaW4gSklUIGNvZGUsIG9yIG9uZSBvciBtb3JlICdFbmdpbmVGcmFtZScgZW50
cmllcywKKy8vIGZvbGxvd2VkIGJ5IGEgJ0VuZ2luZUNvZGUnIHRlcm1pbmF0b3IuCit2b2lkIENv
ZGVQcm9maWxlOjpzYW1wbGUodm9pZCogcGMsIHZvaWQqKiBmcmFtZVBvaW50ZXIpCit7CisgICAg
Ly8gRGlzYWxsb3cgdHJhY2VzIGNvbnRhaW5pbmcgb25seSBhICdFbmdpbmVDb2RlJyB0ZXJtaW5h
dG9yLCB3aXRob3V0IGFueSAnRW5naW5lRnJhbWUnIGZyYW1lcy4KKyAgICBpZiAoIWZyYW1lUG9p
bnRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgd2hpbGUgKGZyYW1lUG9pbnRlcikgeworICAg
ICAgICBDb2RlVHlwZSB0eXBlOworICAgICAgICB2b2lkKiBvd25lclVJRCA9IENvZGVQcm9maWxp
bmc6OmdldE93bmVyVUlERm9yUEMocGMpOworCisgICAgICAgIC8vIERldGVybWluZSBpZiB0aGlz
IHNhbXBsZSBmZWxsIGluIEpJVCBjb2RlLCBhbmQgaWYgc28sIGZyb20gd2hpY2ggSklUICYgd2h5
LgorICAgICAgICBpZiAoIW93bmVyVUlEKQorICAgICAgICAgICAgdHlwZSA9IEVuZ2luZUZyYW1l
OworICAgICAgICBlbHNlIGlmIChvd25lclVJRCA9PSBHTE9CQUxfVEhVTktfSUQpCisgICAgICAg
ICAgICB0eXBlID0gR2xvYmFsVGh1bms7CisgICAgICAgIGVsc2UgaWYgKG93bmVyVUlEID09IFJF
R0VYUF9DT0RFX0lEKQorICAgICAgICAgICAgdHlwZSA9IFJlZ0V4cENvZGU7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxDb2Rl
QmxvY2sqPihvd25lclVJRCk7CisgICAgICAgICAgICBpZiAoY29kZUJsb2NrLT5nZXRKSVRUeXBl
KCkgPT0gSklUQ29kZTo6REZHSklUKQorICAgICAgICAgICAgICAgIHR5cGUgPSBERkdKSVQ7Cisg
ICAgICAgICAgICBlbHNlIGlmIChjb2RlQmxvY2stPmNhbkNvbXBpbGVXaXRoREZHU3RhdGUoKSA9
PSBDb2RlQmxvY2s6OkNvbXBpbGVXaXRoREZHRmFsc2UpCisgICAgICAgICAgICAgICAgdHlwZSA9
IEJhc2VsaW5lT25seTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNvZGVCbG9jay0+cmVwbGFjZW1l
bnQoKSkKKyAgICAgICAgICAgICAgICB0eXBlID0gQmFzZWxpbmVPU1I7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgdHlwZSA9IEJhc2VsaW5lUHJvZmlsZTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIEEgc2FtcGxlIGluIEpJVCBjb2RlIHRlcm1pbmF0ZXMgdGhlIHRyYWNlLgor
ICAgICAgICBtX3NhbXBsZXMuYXBwZW5kKENvZGVSZWNvcmQocGMsIHR5cGUpKTsKKyAgICAgICAg
aWYgKHR5cGUgIT0gRW5naW5lRnJhbWUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
Ly8gV2FsayB1cCB0aGUgc3RhY2suCisjaWYgUExBVEZPUk0oTUFDKSAmJiBDUFUoWDg2XzY0KQor
ICAgICAgICBwYyA9IGZyYW1lUG9pbnRlclsxXTsKKyAgICAgICAgZnJhbWVQb2ludGVyID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKio+KCpmcmFtZVBvaW50ZXIpOworI2Vsc2UKKyAgICAgICAgLy8g
VGhpcyBwbGF0Zm9ybSBpcyBub3QgeWV0IHN1cHBvcnRlZCEKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgd2Ugd2Fs
a2VkIHRoZSBlbnRpcmUgc3RhY2sgd2l0aG91dCBmaW5kaW5nIGFueSBmcmFtZXMgb2YgSklUIGNv
ZGUuCisgICAgbV9zYW1wbGVzLmFwcGVuZChDb2RlUmVjb3JkKDAsIEVuZ2luZUNvZGUpKTsKK30K
Kwordm9pZCBDb2RlUHJvZmlsZTo6cmVwb3J0KCkKK3sKKyAgICBmcHJpbnRmKHN0ZG91dCwgIjxD
b2RlUHJvZmlsaW5nICVzOiVkPlxuIiwgbV9maWxlLmRhdGEoKSwgbV9saW5lTm8pOworCisgICAg
Ly8gSG93IG1hbnkgZnJhbWVzIG9mIEMtY29kZSB0byBwcmludCAtIDAsIGlmIG5vdCB2ZXJib3Nl
LCAxIGlmIHZlcmJvc2UsIHVwIHRvIDEwMjQgaWYgdmVyeSB2ZXJib3NlLgorICAgIHVuc2lnbmVk
IHJlY3Vyc2lvbkxpbWl0ID0gQ29kZVByb2ZpbGluZzo6YmVWZXJ5VmVyYm9zZSgpID8gMTAyNCA6
IENvZGVQcm9maWxpbmc6OmJlVmVyYm9zZSgpOworCisgICAgUHJvZmlsZVRyZWVOb2RlIHByb2Zp
bGU7CisKKyAgICAvLyBXYWxrIHRocm91Z2ggdGhlIHNhbXBsZSBidWZmZXIuCisgICAgc2l6ZV90
IHRyYWNlID0gMDsKKyAgICB3aGlsZSAodHJhY2UgPCBtX3NhbXBsZXMuc2l6ZSgpKSB7CisKKyAg
ICAgICAgLy8gQWxsIHRyYWNlcyBhcmUgemVybyBvciBtb3JlICdFbmdpbmVGcmFtZSdzLCBmb2xs
b3dlZCBieSBhIG5vbi0nRW5naW5lRnJhbWUnLgorICAgICAgICAvLyBTY2FuIHRvIGZpbmQgdGhl
IGxhc3Qgc2FtcGxlIGluIHRoZSB0cmFjZS4KKyAgICAgICAgc2l6ZV90IGxhc3RJblRyYWNlID0g
dHJhY2U7CisgICAgICAgIHdoaWxlIChtX3NhbXBsZXNbbGFzdEluVHJhY2VdLnR5cGUgPT0gRW5n
aW5lRnJhbWUpCisgICAgICAgICAgICArK2xhc3RJblRyYWNlOworCisgICAgICAgIC8vIFdlIHVz
ZSB0aGUgbGFzdCBzYW1wbGUgdHlwZSB0byBsb29rIHVwIGEgbmFtZSAodXNlZCBhcyBhIGJ1Y2tl
dCBpbiB0aGUgcHJvZmlsZXIpLgorICAgICAgICBQcm9maWxlVHJlZU5vZGUqIGNhbGxiYWNrcyA9
IHByb2ZpbGUuc2FtcGxlQ2hpbGQoc19jb2RlVHlwZU5hbWVzW21fc2FtcGxlc1tsYXN0SW5UcmFj
ZV0udHlwZV0pOworCisgICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgc2FtcGxlcyBpbiBDLWNv
ZGUsIGFkZCB1cCB0byByZWN1cnNpb25MaW1pdCBvZiB0aGVtIGludG8gdGhlIHByb2ZpbGUgdHJl
ZS4KKyAgICAgICAgc2l6ZV90IGxhc3RFbmdpbmVGcmFtZSA9IGxhc3RJblRyYWNlOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGNvdW50ID0gMDsgbGFzdEVuZ2luZUZyYW1lID4gdHJhY2UgJiYgY291
bnQgPCByZWN1cnNpb25MaW1pdDsgKytjb3VudCkgeworICAgICAgICAgICAgLS1sYXN0RW5naW5l
RnJhbWU7CisgICAgICAgICAgICBBU1NFUlQobV9zYW1wbGVzW2xhc3RFbmdpbmVGcmFtZV0udHlw
ZSA9PSBFbmdpbmVGcmFtZSk7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gc3ltYm9s
TmFtZShtX3NhbXBsZXNbbGFzdEVuZ2luZUZyYW1lXS5wYyk7CisgICAgICAgICAgICBjYWxsYmFj
a3MgPSBjYWxsYmFja3MtPnNhbXBsZUNoaWxkKG5hbWUpOworICAgICAgICAgICAgaWYgKHRydW5j
YXRlVHJhY2UobmFtZSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBNb3ZlIG9uIHRvIHRoZSBuZXh0IHRyYWNlLgorICAgICAgICB0cmFjZSA9IGxhc3RJ
blRyYWNlICsgMTsKKyAgICAgICAgQVNTRVJUKHRyYWNlIDw9IG1fc2FtcGxlcy5zaXplKCkpOwor
ICAgIH0KKworICAgIC8vIE91dHB1dCB0aGUgcHJvZmlsZSB0cmVlLgorICAgIGZwcmludGYoc3Rk
b3V0LCAiVG90YWwgc2FtcGxlczogJWxsZFxuIiwgcHJvZmlsZS5jaGlsZENvdW50KCkpOworICAg
IHByb2ZpbGUuZHVtcCgpOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwIDsgaSA8IG1fY2hp
bGRyZW4uc2l6ZSgpOyArK2kpCisgICAgICAgIG1fY2hpbGRyZW5baV0tPnJlcG9ydCgpOworCisg
ICAgZnByaW50ZihzdGRvdXQsICI8L0NvZGVQcm9maWxpbmcgJXM6JWQ+XG4iLCBtX2ZpbGUuZGF0
YSgpLCBtX2xpbmVObyk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9Db2RlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9Db2RlUHJvZmlsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL0NvZGVQcm9maWxlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDb2RlUHJvZmls
ZV9oCisjZGVmaW5lIENvZGVQcm9maWxlX2gKKworI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIKKyNp
bmNsdWRlICJUaWVyZWRNTWFwQXJyYXkuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlUHJvZmlsZSB7CitwdWJsaWM6CisgICAg
Q29kZVByb2ZpbGUoY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlUHJvZmlsZSogcGFyZW50
KQorICAgICAgICA6IG1fZmlsZShzb3VyY2UucHJvdmlkZXIoKS0+dXJsKCkudXRmOCgpKQorICAg
ICAgICAsIG1fbGluZU5vKHNvdXJjZS5maXJzdExpbmUoKSkKKyAgICAgICAgLCBtX3BhcmVudChw
YXJlbnQpCisgICAgeworICAgICAgICBpZiAocGFyZW50KQorICAgICAgICAgICAgcGFyZW50LT5h
ZGRDaGlsZCh0aGlzKTsKKyAgICB9CisKKyAgICB2b2lkIHNhbXBsZSh2b2lkKiBwYywgdm9pZCoq
IGZyYW1lUG9pbnRlcik7CisgICAgdm9pZCByZXBvcnQoKTsKKworICAgIENvZGVQcm9maWxlKiBw
YXJlbnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcGFyZW50OworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGFkZENoaWxkKENvZGVQcm9maWxlKiBjaGlsZCkKKyAgICB7CisgICAgICAgIG1fY2hp
bGRyZW4uYXBwZW5kKGFkb3B0UHRyKGNoaWxkKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGVu
dW0gQ29kZVR5cGUgeworICAgICAgICBFbmdpbmVDb2RlLAorICAgICAgICBHbG9iYWxUaHVuaywK
KyAgICAgICAgUmVnRXhwQ29kZSwKKyAgICAgICAgREZHSklULAorICAgICAgICBCYXNlbGluZU9u
bHksCisgICAgICAgIEJhc2VsaW5lUHJvZmlsZSwKKyAgICAgICAgQmFzZWxpbmVPU1IsCisgICAg
ICAgIEVuZ2luZUZyYW1lLAorICAgICAgICBOdW1iZXJPZkNvZGVUeXBlcworICAgIH07CisgICAg
c3RydWN0IENvZGVSZWNvcmQgeworICAgICAgICBDb2RlUmVjb3JkKHZvaWQqIHBjLCBDb2RlVHlw
ZSB0eXBlKQorICAgICAgICAgICAgOiBwYyhwYykKKyAgICAgICAgICAgICwgdHlwZSh0eXBlKQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCogcGM7CisgICAgICAgIENvZGVUeXBl
IHR5cGU7CisgICAgfTsKKworICAgIENTdHJpbmcgbV9maWxlOworICAgIHVuc2lnbmVkIG1fbGlu
ZU5vOworICAgIENvZGVQcm9maWxlKiBtX3BhcmVudDsKKyAgICBWZWN0b3I8IE93blB0cjxDb2Rl
UHJvZmlsZT4gPiBtX2NoaWxkcmVuOworICAgIFRpZXJlZE1NYXBBcnJheTxDb2RlUmVjb3JkPiBt
X3NhbXBsZXM7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogc19jb2RlVHlwZU5hbWVzW051bWJl
ck9mQ29kZVR5cGVzXTsKK307CisKK30KKworI2VuZGlmIC8vIENvZGVQcm9maWxlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNv
ZGVQcm9maWxpbmcuaCIKKworI2luY2x1ZGUgIkNvZGVQcm9maWxlLmgiCisjaW5jbHVkZSAiTWV0
YUFsbG9jYXRvci5oIgorI2luY2x1ZGUgInNpZ25hbC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
dm9sYXRpbGUgQ29kZVByb2ZpbGUqIENvZGVQcm9maWxpbmc6OnNfcHJvZmlsZVN0YWNrID0gMDsK
K0NvZGVQcm9maWxpbmc6Ok1vZGUgQ29kZVByb2ZpbGluZzo6c19tb2RlID0gQ29kZVByb2ZpbGlu
Zzo6RGlzYWJsZWQ7CitXVEY6Ok1ldGFBbGxvY2F0b3JUcmFja2VyKiBDb2RlUHJvZmlsaW5nOjpz
X3RyYWNrZXIgPSAwOworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gc3RhcnQgJiBzdG9wIHRoZSB0
aW1lci4KKy8vIFByZXNlbnRseSB3ZSdyZSB1c2luZyB0aGUgd2FsbC1jbG9jayB0aW1lciwgc2lu
Y2UgdGhpcyBzZWVtcyB0byBnaXZlIHRoZSBiZXN0IHJlc3VsdHMuCitzdGF0aWMgdm9pZCBzZXRQ
cm9maWxlVGltZXIodW5zaWduZWQgdXNlYykKK3sKKyAgICBpdGltZXJ2YWwgdGltZXI7CisgICAg
dGltZXIuaXRfdmFsdWUudHZfc2VjID0gMDsKKyAgICB0aW1lci5pdF92YWx1ZS50dl91c2VjID0g
dXNlYzsKKyAgICB0aW1lci5pdF9pbnRlcnZhbC50dl9zZWMgPSAwOworICAgIHRpbWVyLml0X2lu
dGVydmFsLnR2X3VzZWMgPSB1c2VjOworICAgIHNldGl0aW1lcihJVElNRVJfUkVBTCwgJnRpbWVy
LCAwKTsKK30KKworLy8gQ2FsbGJhY2sgdHJpZ2dlcmVkIHdoZW4gdGhlIHRpbWVyIGlzIGZpcmVk
Lgordm9pZCBDb2RlUHJvZmlsaW5nOjpwcm9maWxpbmdUaW1lcihpbnQsIHNpZ2luZm9fdCosIHZv
aWQqIHVhcCkKK3sKKyNpZiBQTEFURk9STShNQUMpICYmIENQVShYODZfNjQpCisgICAgbWNvbnRl
eHRfdCBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250ZXh0
OworICAgIENvZGVQcm9maWxlKiBwcm9maWxlU3RhY2sgPSBjb25zdF9jYXN0PENvZGVQcm9maWxl
Kj4oc19wcm9maWxlU3RhY2spOworICAgIGlmIChwcm9maWxlU3RhY2spCisgICAgICAgIHByb2Zp
bGVTdGFjay0+c2FtcGxlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNvbnRleHQtPl9fc3MuX19y
aXApLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oY29udGV4dC0+X19zcy5fX3JicCkpOworI2Vu
ZGlmCit9CisKK3ZvaWQgQ29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9yKFdURjo6TWV0YUFs
bG9jYXRvciogYWxsb2NhdG9yKQoreworICAgIC8vIENoZWNrIGZvciBKU0NfQ09ERV9QUk9GSUxJ
TkcuCisgICAgY29uc3QgY2hhciogY29kZVByb2ZpbGluZ01vZGUgPSBnZXRlbnYoIkpTQ19DT0RF
X1BST0ZJTElORyIpOworICAgIGlmICghY29kZVByb2ZpbGluZ01vZGUpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIENoZWNrIGZvciBhIHZhbGlkIG1vZGUsIGN1cnJlbnRseSAiMSIsICIyIiwg
b3IgIjMiLgorICAgIGlmICghY29kZVByb2ZpbGluZ01vZGVbMF0gfHwgY29kZVByb2ZpbGluZ01v
ZGVbMV0pCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKCpjb2RlUHJvZmlsaW5nTW9kZSkg
eworICAgIGNhc2UgJzEnOgorICAgICAgICBzX21vZGUgPSBFbmFibGVkOworICAgICAgICBicmVh
azsKKyAgICBjYXNlICcyJzoKKyAgICAgICAgc19tb2RlID0gVmVyYm9zZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSAnMyc6CisgICAgICAgIHNfbW9kZSA9IFZlcnlWZXJib3NlOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNT
RVJUKGVuYWJsZWQoKSk7CisgICAgQVNTRVJUKCFzX3RyYWNrZXIpOworICAgIHNfdHJhY2tlciA9
IG5ldyBXVEY6Ok1ldGFBbGxvY2F0b3JUcmFja2VyKCk7CisgICAgYWxsb2NhdG9yLT50cmFja0Fs
bG9jYXRpb25zKHNfdHJhY2tlcik7Cit9CisKK3ZvaWQqIENvZGVQcm9maWxpbmc6OmdldE93bmVy
VUlERm9yUEModm9pZCogYWRkcmVzcykKK3sKKyAgICBpZiAoIXNfdHJhY2tlcikKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBzX3RyYWNr
ZXItPmZpbmQoYWRkcmVzcyk7CisgICAgaWYgKCFoYW5kbGUpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBoYW5kbGUtPm93bmVyVUlEKCk7Cit9CisKK3ZvaWQgQ29kZVByb2ZpbGluZzo6
YmVnaW4oY29uc3QgU291cmNlQ29kZSYgc291cmNlKQoreworICAgIC8vIFB1c2ggYSBuZXcgQ29k
ZVByb2ZpbGUgb250byB0aGUgc3RhY2sgZm9yIGVhY2ggc2NyaXB0IGVuY291bnRlcmVkLgorICAg
IENvZGVQcm9maWxlKiBwcm9maWxlU3RhY2sgPSBjb25zdF9jYXN0PENvZGVQcm9maWxlKj4oc19w
cm9maWxlU3RhY2spOworICAgIGJvb2wgYWxyZWFkeVByb2ZpbGluZyA9IHByb2ZpbGVTdGFjazsK
KyAgICBzX3Byb2ZpbGVTdGFjayA9IHByb2ZpbGVTdGFjayA9IG5ldyBDb2RlUHJvZmlsZShzb3Vy
Y2UsIHByb2ZpbGVTdGFjayk7CisKKyAgICAvLyBJcyB0aGUgcHJvZmlsZXIgYWxyZWFkeSBydW5u
aW5nIC0gaWYgc28sIHRoZSB0aW1lciB3aWxsIGFscmVhZHkgYmUgc2V0IHVwLgorICAgIGlmIChh
bHJlYWR5UHJvZmlsaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBSZWdzaXRlciBhIHNp
Z25hbCBoYW5kbGVyICYgaXRpbWVyLgorICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworICAg
IGFjdGlvbi5zYV9zaWdhY3Rpb24gPSByZWludGVycHJldF9jYXN0PHZvaWQgKCopKGludCwgc3Ry
dWN0IF9fc2lnaW5mbyAqLCB2b2lkICopPihwcm9maWxpbmdUaW1lcik7CisgICAgc2lnZmlsbHNl
dCgmYWN0aW9uLnNhX21hc2spOworICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87Cisg
ICAgc2lnYWN0aW9uKFNJR0FMUk0sICZhY3Rpb24sIDApOworICAgIHNldFByb2ZpbGVUaW1lcigx
MDApOworfQorCit2b2lkIENvZGVQcm9maWxpbmc6OmVuZCgpCit7CisgICAgLy8gUG9wIHRoZSBj
dXJyZW50IHByb2ZpbGVyIG9mZiB0aGUgc3RhY2suCisgICAgQ29kZVByb2ZpbGUqIGN1cnJlbnQg
PSBjb25zdF9jYXN0PENvZGVQcm9maWxlKj4oc19wcm9maWxlU3RhY2spOworICAgIEFTU0VSVChj
dXJyZW50KTsKKyAgICBzX3Byb2ZpbGVTdGFjayA9IGN1cnJlbnQtPnBhcmVudCgpOworCisgICAg
Ly8gSXMgdGhpcyB0aGUgb3V0ZXJtb3N0IHNjcmlwdCBiZWluZyBwcm9maWxlZD8gLSBpZiBub3Qs
IGp1c3QgcmV0dXJuLgorICAgIC8vIFdlIHBlcmZvcm0gYWxsIG91dHB1dCBvZiBwcm9maWxlcyBy
ZWN1cnNpdmVseSBmcm9tIHRoZSBvdXRlcm1vc3Qgc2NyaXB0LAorICAgIC8vIHRvIG1pbmltaXpl
IHByb2ZpbGluZyBvdmVyaGVhZCBmcm9tIHNrZXdpbmcgcmVzdWx0cy4KKyAgICBpZiAoc19wcm9m
aWxlU3RhY2spCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFN0b3AgcHJvZmlsaW5nCisgICAg
c2V0UHJvZmlsZVRpbWVyKDApOworCisgICAgY3VycmVudC0+cmVwb3J0KCk7CisgICAgZGVsZXRl
IGN1cnJlbnQ7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2Rl
UHJvZmlsaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0Nv
ZGVQcm9maWxpbmcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9Db2RlUHJvZmlsaW5nLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDb2RlUHJvZmls
aW5nX2gKKyNkZWZpbmUgQ29kZVByb2ZpbGluZ19oCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKwor
bmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIE1ldGFBbGxvY2F0b3I7CitjbGFzcyBNZXRhQWxsb2Nh
dG9yVHJhY2tlcjsKKworfQorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZVByb2ZpbGU7
CitjbGFzcyBTb3VyY2VDb2RlOworCitjbGFzcyBDb2RlUHJvZmlsaW5nIHsKKyAgICBlbnVtIE1v
ZGUgeworICAgICAgICBEaXNhYmxlZCwKKyAgICAgICAgRW5hYmxlZCwKKyAgICAgICAgVmVyYm9z
ZSwKKyAgICAgICAgVmVyeVZlcmJvc2UKKyAgICB9OworCitwdWJsaWM6CisgICAgQ29kZVByb2Zp
bGluZyhjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCisgICAgICAgIDogbV9hY3RpdmUoZW5hYmxl
ZCgpKQorICAgIHsKKyAgICAgICAgaWYgKG1fYWN0aXZlKQorICAgICAgICAgICAgYmVnaW4oc291
cmNlKTsKKyAgICB9CisKKyAgICB+Q29kZVByb2ZpbGluZygpCisgICAgeworICAgICAgICBpZiAo
bV9hY3RpdmUpCisgICAgICAgICAgICBlbmQoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBl
bmFibGVkKCkgeyByZXR1cm4gc19tb2RlICE9IERpc2FibGVkOyB9CisgICAgc3RhdGljIGJvb2wg
YmVWZXJib3NlKCkgeyByZXR1cm4gc19tb2RlID49IFZlcmJvc2U7IH0KKyAgICBzdGF0aWMgYm9v
bCBiZVZlcnlWZXJib3NlKCkgeyByZXR1cm4gc19tb2RlID49IFZlcnlWZXJib3NlOyB9CisKKyAg
ICBzdGF0aWMgdm9pZCBub3RpZnlBbGxvY2F0b3IoV1RGOjpNZXRhQWxsb2NhdG9yKik7CisgICAg
c3RhdGljIHZvaWQqIGdldE93bmVyVUlERm9yUEModm9pZCopOworCitwcml2YXRlOgorICAgIHZv
aWQgYmVnaW4oY29uc3QgU291cmNlQ29kZSYpOworICAgIHZvaWQgZW5kKCk7CisKKyAgICBib29s
IG1fYWN0aXZlOworCisgICAgc3RhdGljIHZvaWQgcHJvZmlsaW5nVGltZXIoaW50LCBzaWdpbmZv
X3QqLCB2b2lkKik7CisKKyAgICBzdGF0aWMgTW9kZSBzX21vZGU7CisgICAgc3RhdGljIFdURjo6
TWV0YUFsbG9jYXRvclRyYWNrZXIqIHNfdHJhY2tlcjsKKyAgICBzdGF0aWMgdm9sYXRpbGUgQ29k
ZVByb2ZpbGUqIHNfcHJvZmlsZVN0YWNrOworfTsKKworfQorCisjZW5kaWYgLy8gQ29kZVByb2Zp
bGluZ19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRy
ZWVOb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJv
ZmlsZVRyZWVOb2RlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUHJvZmlsZVRyZWVO
b2RlX2gKKyNkZWZpbmUgUHJvZmlsZVRyZWVOb2RlX2gKKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIFByb2ZpbGVUcmVlTm9kZSB7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUHJvZmls
ZVRyZWVOb2RlPiBNYXA7CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8U3RyaW5nLCBQcm9maWxlVHJl
ZU5vZGU+IE1hcEVudHJ5OworCitwdWJsaWM6CisgICAgUHJvZmlsZVRyZWVOb2RlKCkKKyAgICAg
ICAgOiBtX2NvdW50KDApCisgICAgICAgICwgbV9jaGlsZHJlbigwKQorICAgIHsKKyAgICB9CisK
KyAgICB+UHJvZmlsZVRyZWVOb2RlKCkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtX2NoaWxkcmVu
OworICAgIH0KKworICAgIFByb2ZpbGVUcmVlTm9kZSogc2FtcGxlQ2hpbGQoY29uc3QgY2hhciog
bmFtZSkKKyAgICB7CisgICAgICAgIGlmICghbV9jaGlsZHJlbikKKyAgICAgICAgICAgIG1fY2hp
bGRyZW4gPSBuZXcgTWFwKCk7CisgICAgCisgICAgICAgIFByb2ZpbGVUcmVlTm9kZSBuZXdFbnRy
eTsKKyAgICAgICAgcGFpcjxNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX2NoaWxkcmVu
LT5hZGQoU3RyaW5nKG5hbWUpLCBuZXdFbnRyeSk7CisgICAgICAgIFByb2ZpbGVUcmVlTm9kZSog
Y2hpbGRJbk1hcCA9ICZyZXN1bHQuZmlyc3QtPnNlY29uZDsKKyAgICAgICAgKytjaGlsZEluTWFw
LT5tX2NvdW50OworICAgICAgICByZXR1cm4gY2hpbGRJbk1hcDsKKyAgICB9CisKKyAgICB2b2lk
IGR1bXAoKQorICAgIHsKKyAgICAgICAgZHVtcEludGVybmFsKDApOworICAgIH0KKworICAgIHVp
bnQ2NF90IGNvdW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvdW50OworICAgIH0KKwor
ICAgIHVpbnQ2NF90IGNoaWxkQ291bnQoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NoaWxkcmVu
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHVpbnQ2NF90IGNoaWxkQ291bnQgPSAw
OworICAgICAgICBmb3IgKE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLT5iZWdpbigpOyBp
dCAhPSBtX2NoaWxkcmVuLT5lbmQoKTsgKytpdCkKKyAgICAgICAgICAgIGNoaWxkQ291bnQgKz0g
aXQtPnNlY29uZC5jb3VudCgpOworICAgICAgICByZXR1cm4gY2hpbGRDb3VudDsKKyAgICB9Cisg
ICAgCitwcml2YXRlOgorICAgIHZvaWQgZHVtcEludGVybmFsKHVuc2lnbmVkIGluZGVudCkKKyAg
ICB7CisgICAgICAgIGlmICghbV9jaGlsZHJlbikKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAvLyBDb3B5IHBvaW50ZXJzIHRvIGFsbCBjaGlsZHJlbiBpbnRvIGEgdmVjdG9yLCBhbmQg
c29ydCB0aGUgdmVjdG9yIGJ5IHNhbXBsZSBjb3VudC4KKyAgICAgICAgVmVjdG9yPE1hcEVudHJ5
Kj4gZW50cmllczsKKyAgICAgICAgZm9yIChNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi0+
YmVnaW4oKTsgaXQgIT0gbV9jaGlsZHJlbi0+ZW5kKCk7ICsraXQpCisgICAgICAgICAgICBlbnRy
aWVzLmFwcGVuZCgmKml0KTsKKyAgICAgICAgcXNvcnQoZW50cmllcy5iZWdpbigpLCBlbnRyaWVz
LnNpemUoKSwgc2l6ZW9mKE1hcEVudHJ5KiksIGNvbXBhcmVFbnRyaWVzKTsKKworICAgICAgICAv
LyBJdGVyYXRlIG92ZXIgdGhlIGNoaWxkcmVuIGluIHNhbXBsZS1mcmVxdWVuY3kgb3JkZXIuCisg
ICAgICAgIGZvciAoc2l6ZV90IGUgPSAwOyBlIDwgZW50cmllcy5zaXplKCk7ICsrZSkgeworICAg
ICAgICAgICAgTWFwRW50cnkqIGVudHJ5ID0gZW50cmllc1tlXTsKKworICAgICAgICAgICAgLy8g
UHJpbnQgdGhlIG51bWJlciBvZiBzYW1wbGVzLCB0aGUgbmFtZSBvZiB0aGlzIG5vZGUsIGFuZCB0
aGUgbnVtYmVyIG9mIHNhbXBsZXMgdGhhdCBhcmUgc3RhY2stdG9wCisgICAgICAgICAgICAvLyBp
biB0aGlzIG5vZGUgKHNhbXBsZXMgZGlyZWN0bHkgd2l0aGluIHRoaXMgbm9kZSwgZXhjbHVkaW5n
IHNhbXBsZXMgaW4gY2hpbGRyZW4uCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgaW5kZW50OyArK2kpCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRvdXQsICIgICAgIik7
CisgICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIiUgOGxsZDogJXMgKCVsbGQgc3RhY2sgdG9w
KVxuIiwKKyAgICAgICAgICAgICAgICBlbnRyeS0+c2Vjb25kLmNvdW50KCksCisgICAgICAgICAg
ICAgICAgZW50cnktPmZpcnN0LnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICAgICAgZW50cnkt
PnNlY29uZC5jb3VudCgpIC0gZW50cnktPnNlY29uZC5jaGlsZENvdW50KCkpOworCisgICAgICAg
ICAgICAvLyBSZWN1cnNpdmVseSBkdW1wIHRoZSBjaGlsZCBub2Rlcy4KKyAgICAgICAgICAgIGVu
dHJ5LT5zZWNvbmQuZHVtcEludGVybmFsKGluZGVudCArIDEpOworICAgICAgICB9CisgICAgfQor
CisgICAgc3RhdGljIGludCBjb21wYXJlRW50cmllcyhjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lk
KiBiKQorICAgIHsKKyAgICAgICAgdWludDY0X3QgZGEgPSAoKnN0YXRpY19jYXN0PE1hcEVudHJ5
KiBjb25zdCAqPihhKSktPnNlY29uZC5jb3VudCgpOworICAgICAgICB1aW50NjRfdCBkYiA9ICgq
c3RhdGljX2Nhc3Q8TWFwRW50cnkqIGNvbnN0ICo+KGIpKS0+c2Vjb25kLmNvdW50KCk7CisgICAg
ICAgIHJldHVybiAoZGEgPCBkYikgLSAoZGEgPiBkYik7CisgICAgfQorCisgICAgdWludDY0X3Qg
bV9jb3VudDsKKyAgICBNYXAqIG1fY2hpbGRyZW47Cit9OworCit9CisKKyNlbmRpZiAvLyBQcm9m
aWxlVHJlZU5vZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVGllcmVk
TU1hcEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Rp
ZXJlZE1NYXBBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL1RpZXJlZE1NYXBBcnJheS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFRpZXJl
ZE1NYXBBcnJheV9oCisjZGVmaW5lIFRpZXJlZE1NYXBBcnJheV9oCisKKyNpbmNsdWRlICJPU0Fs
bG9jYXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRz
IGEgc2ltcGxlIGFycmF5IGNsYXNzIHRoYXQgY2FuIGJlIGdyb3duIGJ5IGFwcGVuZGluZyBpdGVt
cyB0byB0aGUgZW5kLgorLy8gVGhpcyBjbGFzcyBpcyBpbXBsZW1lbnRlZCBwdXJlbHkgaW4gdGVy
bXMgb2Ygc3lzdGVtIGFsbG9jYXRpb25zLCB3aXRoIG5vIG1hbGxvYy9mcmVlLCBzbyB0aGF0Cisv
LyBpdCBjYW4gc2FmZWx5IGJlIHVzZWQgZnJvbSBhIHNlY29uZGFyeSB0aHJlYWQgd2hpbHN0IHRo
ZSBtYWluIHRocmFkIGlzIHBhdXNlZCAocG90ZW50aWFsbHkKKy8vIGhvbGRpbmcgdGhlIGZhc3Qg
bWFsbG9jIGhlYXAgbG9jaykuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgVGllcmVkTU1h
cEFycmF5IHsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGVudHJpZXNQZXJCbG9jayA9IDQwOTY7
CisKK3B1YmxpYzoKKyAgICBUaWVyZWRNTWFwQXJyYXkoKQorICAgICAgICA6IG1fZGlyZWN0b3J5
Q291bnQoNDA5NikKKyAgICAgICAgLCBtX2RpcmVjdG9yeShzdGF0aWNfY2FzdDxUKio+KE9TQWxs
b2NhdG9yOjpyZXNlcnZlQW5kQ29tbWl0KG1fZGlyZWN0b3J5Q291bnQgKiBzaXplb2YoVCopKSkp
CisgICAgICAgICwgbV9zaXplKDApCisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBibG9jayA9
IDA7IGJsb2NrIDwgbV9kaXJlY3RvcnlDb3VudDsgKytibG9jaykKKyAgICAgICAgICAgIG1fZGly
ZWN0b3J5W2Jsb2NrXSA9IDA7CisgICAgfQorCisgICAgflRpZXJlZE1NYXBBcnJheSgpCisgICAg
eworICAgICAgICBzaXplX3QgdXNlZENvdW50ID0gKG1fc2l6ZSArIChlbnRyaWVzUGVyQmxvY2sg
LSAxKSkgLyBlbnRyaWVzUGVyQmxvY2s7CisgICAgICAgIEFTU0VSVCh1c2VkQ291bnQgPT0gbV9k
aXJlY3RvcnlDb3VudCB8fCAhbV9kaXJlY3RvcnlbdXNlZENvdW50XSk7CisKKyAgICAgICAgZm9y
IChzaXplX3QgYmxvY2sgPSAwOyBibG9jayA8IHVzZWRDb3VudDsgKytibG9jaykgeworICAgICAg
ICAgICAgQVNTRVJUKG1fZGlyZWN0b3J5W2Jsb2NrXSk7CisgICAgICAgICAgICBPU0FsbG9jYXRv
cjo6ZGVjb21taXRBbmRSZWxlYXNlKG1fZGlyZWN0b3J5W2Jsb2NrXSwgZW50cmllc1BlckJsb2Nr
ICogc2l6ZW9mKFQpKTsKKyAgICAgICAgfQorCisgICAgICAgIE9TQWxsb2NhdG9yOjpkZWNvbW1p
dEFuZFJlbGVhc2UobV9kaXJlY3RvcnksIG1fZGlyZWN0b3J5Q291bnQgKiBzaXplb2YoVCopKTsK
KyAgICB9CisKKyAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChpbmRleCA8IG1fc2l6ZSk7CisgICAgICAgIHNpemVfdCBibG9jayA9IGluZGV4IC8g
ZW50cmllc1BlckJsb2NrOworICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gaW5kZXggJSBlbnRyaWVz
UGVyQmxvY2s7CisKKyAgICAgICAgQVNTRVJUKG1fZGlyZWN0b3J5W2Jsb2NrXSk7CisgICAgICAg
IHJldHVybiBtX2RpcmVjdG9yeVtibG9ja11bb2Zmc2V0XTsKKyAgICB9CisKKyAgICB2b2lkIGFw
cGVuZChjb25zdCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIC8vIENoZWNrIGlmIHRoZSBhcnJh
eSBpcyBjb21wbGV0ZWx5IGZ1bGwsIGlmIHNvIGNyZWF0ZSBtb3JlIGNhcGFjaXR5IGluIHRoZSBk
aXJlY3RvcnkuCisgICAgICAgIGlmIChtX3NpemUgPT0gbV9kaXJlY3RvcnlDb3VudCAqIGVudHJp
ZXNQZXJCbG9jaykgeworICAgICAgICAgICAgLy8gUmVhbGxvY2F0ZSB0aGUgZGlyZWN0b3J5Lgor
ICAgICAgICAgICAgc2l6ZV90IG9sZERpcmVjdG9yeVNpemUgPSBtX2RpcmVjdG9yeUNvdW50ICog
c2l6ZW9mKFQqKTsKKyAgICAgICAgICAgIHNpemVfdCBuZXdEaXJlY3RvcnlTaXplID0gb2xkRGly
ZWN0b3J5U2l6ZSAqIDI7CisgICAgICAgICAgICBpZiAobmV3RGlyZWN0b3J5U2l6ZSA8IG9sZERp
cmVjdG9yeVNpemUpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIG1fZGly
ZWN0b3J5ID0gT1NBbGxvY2F0b3I6OnJlYWxsb2NhdGVDb21taXR0ZWQobV9kaXJlY3RvcnksIG9s
ZERpcmVjdG9yeVNpemUsIG5ld0RpcmVjdG9yeVNpemUpOworCisgICAgICAgICAgICAvLyAKKyAg
ICAgICAgICAgIHNpemVfdCBuZXdEaXJlY3RvcnlDb3VudCA9IG1fZGlyZWN0b3J5Q291bnQgKiAy
OworICAgICAgICAgICAgZm9yIChzaXplX3QgYmxvY2sgPSBtX2RpcmVjdG9yeUNvdW50OyBibG9j
ayA8IG5ld0RpcmVjdG9yeUNvdW50OyArK2Jsb2NrKQorICAgICAgICAgICAgICAgIG1fZGlyZWN0
b3J5W2Jsb2NrXSA9IDA7CisgICAgICAgICAgICBtX2RpcmVjdG9yeUNvdW50ID0gbmV3RGlyZWN0
b3J5Q291bnQ7CisgICAgICAgIH0KKworICAgICAgICBzaXplX3QgaW5kZXggPSBtX3NpemU7Cisg
ICAgICAgIHNpemVfdCBibG9jayA9IGluZGV4IC8gZW50cmllc1BlckJsb2NrOworICAgICAgICBz
aXplX3Qgb2Zmc2V0ID0gaW5kZXggJSBlbnRyaWVzUGVyQmxvY2s7CisKKyAgICAgICAgaWYgKCFv
ZmZzZXQpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9kaXJlY3RvcnlbYmxvY2tdKTsKKyAgICAg
ICAgICAgIG1fZGlyZWN0b3J5W2Jsb2NrXSA9IHN0YXRpY19jYXN0PFQqPihPU0FsbG9jYXRvcjo6
cmVzZXJ2ZUFuZENvbW1pdChlbnRyaWVzUGVyQmxvY2sgKiBzaXplb2YoVCkpKTsKKyAgICAgICAg
fQorCisgICAgICAgIEFTU0VSVChtX2RpcmVjdG9yeVtibG9ja10pOworICAgICAgICArK21fc2l6
ZTsKKyAgICAgICAgbV9kaXJlY3RvcnlbYmxvY2tdW29mZnNldF0gPSB2YWx1ZTsKKyAgICB9CisK
KyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCitwcml2YXRlOgor
ICAgIHNpemVfdCBtX2RpcmVjdG9yeUNvdW50OworICAgIFQqKiBtX2RpcmVjdG9yeTsKKyAgICBz
aXplX3QgbV9zaXplOworfTsKKworfQorCisjZW5kaWYgLy8gVGllcmVkTU1hcEFycmF5X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuY3BwCShyZXZp
c2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMCArNTUsMTEgQEAgQUxXQVlTX0lOTElORSB2b2lk
IE1ldGFBbGxvY2F0b3I6OnJlbGVhcwogICAgICAgICBtX3RyYWNrZXItPnJlbGVhc2UoaGFuZGxl
KTsKIH0KIAotTWV0YUFsbG9jYXRvckhhbmRsZTo6TWV0YUFsbG9jYXRvckhhbmRsZShNZXRhQWxs
b2NhdG9yKiBhbGxvY2F0b3IsIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCitNZXRh
QWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0b3IqIGFsbG9j
YXRvciwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQpCiAg
ICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCiAgICAgLCBtX3N0YXJ0KHN0YXJ0KQogICAgICwg
bV9zaXplSW5CeXRlcyhzaXplSW5CeXRlcykKKyAgICAsIG1fb3duZXJVSUQob3duZXJVSUQpCiB7
CiAgICAgQVNTRVJUKGFsbG9jYXRvcik7CiAgICAgQVNTRVJUKHN0YXJ0KTsKQEAgLTEyOSw3ICsx
MzAsNyBAQCBNZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9yKHNpemVfdCBhbGxvCiAgICAgQVNT
RVJUKHN0YXRpY19jYXN0PHNpemVfdD4oMSkgPDwgbV9sb2dBbGxvY2F0aW9uR3JhbnVsZSA9PSBt
X2FsbG9jYXRpb25HcmFudWxlKTsKIH0KIAotUGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxl
PiBNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMpCitQYXNzUmVmUHRy
PE1ldGFBbGxvY2F0b3JIYW5kbGU+IE1ldGFBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXpl
SW5CeXRlcywgdm9pZCogb3duZXJVSUQpCiB7CiAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZt
X2xvY2spOwogCkBAIC0xNjcsNyArMTY4LDcgQEAgUGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFu
ZGxlPiBNZXRhQWxsbwogICAgIG1fbnVtQWxsb2NhdGlvbnMrKzsKICNlbmRpZgogCi0gICAgTWV0
YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gbmV3IE1ldGFBbGxvY2F0b3JIYW5kbGUodGhpcywg
c3RhcnQsIHNpemVJbkJ5dGVzKTsKKyAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBu
ZXcgTWV0YUFsbG9jYXRvckhhbmRsZSh0aGlzLCBzdGFydCwgc2l6ZUluQnl0ZXMsIG93bmVyVUlE
KTsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGEgdmVyaWZpZXIgc2NoZW1lIHRoYXQgZ3Jva3Mg
TWV0YUFsbG9jYXRvckhhbmRsZXMKICAgICBoYW5kbGUtPmRlcHJlY2F0ZWRUdXJuT2ZmVmVyaWZp
ZXIoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmgJ
KHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9j
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKICAgICAKICAg
ICB2aXJ0dWFsIH5NZXRhQWxsb2NhdG9yKCk7CiAgICAgCi0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IFBhc3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5
dGVzKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFu
ZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKTsKIAogICAg
IHZvaWQgdHJhY2tBbGxvY2F0aW9ucyhNZXRhQWxsb2NhdG9yVHJhY2tlciogdHJhY2tlcikKICAg
ICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3JI
YW5kbGUuaAkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9N
ZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgY2xh
c3MgTWV0YUFsbG9jYXRvcjsKIAogY2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZSA6IHB1YmxpYyBS
ZWZDb3VudGVkPE1ldGFBbGxvY2F0b3JIYW5kbGU+LCBwdWJsaWMgUmVkQmxhY2tUcmVlPE1ldGFB
bGxvY2F0b3JIYW5kbGUsIHZvaWQqPjo6Tm9kZSB7CiBwcml2YXRlOgotICAgIE1ldGFBbGxvY2F0
b3JIYW5kbGUoTWV0YUFsbG9jYXRvciosIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMp
OworICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciosIHZvaWQqIHN0YXJ0LCBz
aXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKTsKICAgICAKIHB1YmxpYzoKICAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgfk1ldGFBbGxvY2F0b3JIYW5kbGUoKTsKQEAgLTcyLDcgKzcyLDEy
IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fYWxsb2NhdG9yKTsKICAgICAgICAgcmV0dXJu
IG1fYWxsb2NhdG9yOwogICAgIH0KLSAgICAKKworICAgIHZvaWQqIG93bmVyVUlEKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX293bmVyVUlEOworICAgIH0KKwogICAgIHZvaWQqIGtleSgpCiAg
ICAgewogICAgICAgICByZXR1cm4gbV9zdGFydDsKQEAgLTg0LDYgKzg5LDcgQEAgcHJpdmF0ZToK
ICAgICBNZXRhQWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsKICAgICB2b2lkKiBtX3N0YXJ0OwogICAg
IHNpemVfdCBtX3NpemVJbkJ5dGVzOworICAgIHZvaWQqIG1fb3duZXJVSUQ7CiB9OwogCiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL09TQWxsb2NhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9PU0FsbG9jYXRvci5oCShyZXZpc2lvbiAxMDYx
NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL09TQWxsb2NhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgT1NBbGxvY2F0b3JfaAogI2RlZmluZSBP
U0FsbG9jYXRvcl9oCiAKKyNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL1VudXNl
ZFBhcmFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZNVGFncy5oPgogI2luY2x1ZGUgPHd0Zi9WTVRhZ3Mu
aD4KQEAgLTY1LDYgKzY2LDEyIEBAIHB1YmxpYzoKICAgICAvLyBzcGVjaWZpZWQuCiAgICAgc3Rh
dGljIHZvaWQqIHJlc2VydmVBbmRDb21taXQoc2l6ZV90IHJlc2VydmVTaXplLCBzaXplX3QgY29t
bWl0U2l6ZSwgVXNhZ2UgPSBVbmtub3duVXNhZ2UsIGJvb2wgd3JpdGFibGUgPSB0cnVlLCBib29s
IGV4ZWN1dGFibGUgPSBmYWxzZSk7CiAgICAgc3RhdGljIHZvaWQgZGVjb21taXRBbmRSZWxlYXNl
KHZvaWQqIHJlbGVhc2VCYXNlLCBzaXplX3QgcmVsZWFzZVNpemUsIHZvaWQqIGRlY29tbWl0QmFz
ZSwgc2l6ZV90IGRlY29tbWl0U2l6ZSk7CisKKyAgICAvLyBSZWFsbG9jYXRlIGFuIGV4aXN0aW5n
LCBjb21taXR0ZWQgYWxsb2NhdGlvbi4KKyAgICAvLyBUaGUgcHJpb3IgYWxsb2NhdGlvbiBtdXN0
IGJlIGZ1bGx5IGNvbWl0dGVkLCBhbmQgdGhlIG5ldyBzaXplIHdpbGwgYWxzbyBiZSBmdWxseSBj
b21taXR0ZWQuCisgICAgLy8gVGhpcyBpbnRlcmZhY2UgaXMgcHJvdmlkZWQgc2luY2UgaXQgbWF5
IGJlIHBvc3NpYmxlIHRvIG9wdGltaXplIHRoaXMgb3BlcmF0aW9uIG9uIHNvbWUgcGxhdGZvcm1z
LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIFQqIHJlYWxsb2NhdGVDb21t
aXR0ZWQoVCosIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSwgVXNhZ2UgPSBVbmtub3du
VXNhZ2UsIGJvb2wgd3JpdGFibGUgPSB0cnVlLCBib29sIGV4ZWN1dGFibGUgPSBmYWxzZSk7CiB9
OwogCiBpbmxpbmUgdm9pZCogT1NBbGxvY2F0b3I6OnJlc2VydmVBbmRDb21taXQoc2l6ZV90IHJl
c2VydmVTaXplLCBzaXplX3QgY29tbWl0U2l6ZSwgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUs
IGJvb2wgZXhlY3V0YWJsZSkKQEAgLTkzLDYgKzEwMCwxNSBAQCBpbmxpbmUgdm9pZCBPU0FsbG9j
YXRvcjo6ZGVjb21taXRBbmRSZWxlCiAgICAgZGVjb21taXRBbmRSZWxlYXNlKGJhc2UsIHNpemUs
IGJhc2UsIHNpemUpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIFQqIE9TQWxs
b2NhdG9yOjpyZWFsbG9jYXRlQ29tbWl0dGVkKFQqIG9sZEJhc2UsIHNpemVfdCBvbGRTaXplLCBz
aXplX3QgbmV3U2l6ZSwgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJs
ZSkKK3sKKyAgICB2b2lkKiBuZXdCYXNlID0gcmVzZXJ2ZUFuZENvbW1pdChuZXdTaXplLCB1c2Fn
ZSwgd3JpdGFibGUsIGV4ZWN1dGFibGUpOworICAgIG1lbWNweShuZXdCYXNlLCBvbGRCYXNlLCBz
dGQ6Om1pbihvbGRTaXplLCBuZXdTaXplKSk7CisgICAgZGVjb21taXRBbmRSZWxlYXNlKG9sZEJh
c2UsIG9sZFNpemUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4obmV3QmFzZSk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6Ok9TQWxsb2NhdG9yOwo=
</data>
<flag name="commit-queue"
          id="125654"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124411</attachid>
            <date>2012-01-27 18:04:48 -0800</date>
            <delta_ts>2012-01-27 18:27:01 -0800</delta_ts>
            <desc>More build fixes (patch already reviewed by oliver)</desc>
            <filename>76855.9.patch</filename>
            <type>text/plain</type>
            <size>58732</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA2MTUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDEyLTAxLTI3ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBJbXBsZW1lbnQgYSBKSVQtY29kZSBhd2FyZSBzYW1wbGluZyBwcm9maWxlciBm
b3IgSlNDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
Njg1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgorCisgICAgICAgIFRvIGVu
YWJsZSB0aGUgcHJvZmlsZXIsIHNldCB0aGUgSlNDX0NPREVfUFJPRklMSU5HIGVudmlyb25tZW50
IHZhcmlhYmxlIHRvCisgICAgICAgIDEgKG5vIHRyYWNpbmcgdGhlIEMgc3RhY2spLCAyICh0cmFj
ZSBvbmUgbGV2ZWwgb2YgQyBjb2RlKSBvciAzIChyZWN1cnNpdmVseQorICAgICAgICB0cmFjZSBh
bGwgc2FtcGxlcykuCisKKyAgICAgICAgVGhlIHByb2ZpbGVyIHJlcXVpcmVzIC1mb21pdC1mcmFt
ZS1wb2ludGVyIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgYnVpbGQgZmxhZ3MuCisKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICAgICAtIFJlbW92ZWQgYW4gZXhwb3J0Lgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICAgICAtIEFkZGVkIG5ldyBmaWxlcworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgICAgICAtIEZvciBiYXNlbGluZSBjb2RlYmxvY2tzLCBjYWNoZSB0aGUgcmVz
dWx0IG9mIGNhbkNvbXBpbGVXaXRoREZHLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5o
OgorICAgICAgICAgICAgLSBGb3IgYmFzZWxpbmUgY29kZWJsb2NrcywgY2FjaGUgdGhlIHJlc3Vs
dCBvZiBjYW5Db21waWxlV2l0aERGRy4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxv
Y2F0b3IpOgorICAgICAgICAgICAgLSBOb3RpZnkgdGhlIHByb2ZpbGVyIHdoZW4gdGhlIGFsbG9j
YXRvciBpcyBjcmVhdGVkLgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxv
Y2F0ZSk6CisgICAgICAgICAgICAtIEluZm9ybSB0aGUgYWxsb2NhdGVkIG9mIHRoZSBvd25lclVJ
RC4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcDoKKyAg
ICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG9jYXRvcik6Cisg
ICAgICAgICAgICAtIE5vdGlmeSB0aGUgcHJvZmlsZXIgd2hlbiB0aGUgYWxsb2NhdG9yIGlzIGNy
ZWF0ZWQuCisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAg
ICAgICAgICAgIC0gSW5mb3JtIHRoZSBhbGxvY2F0ZWQgb2YgdGhlIG93bmVyVUlELgorICAgICAg
ICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgICAgICAtIElmIHByb2ZpbGluZywgZG9uJ3Qg
bWFzayB0aGUgcmV0dXJuIGFkZHJlc3MgaW4gSklUIGNvZGUuCisgICAgICAgICAgICAgIChXZSBk
byBzbyB0byBwcm92aWRlIG5pY2VyIGJhY2t0cmFjZXMgaW4gZGVidWcgYnVpbGRzKS4KKyAgICAg
ICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpldmFsdWF0ZSk6Cisg
ICAgICAgICAgICAtIE5vdGlmeSB0aGUgcHJvZmlsZXIgb2Ygc2NyaXB0IGV2YWx1YXRpb25zLgor
ICAgICAgICAqIHRvb2xzOiBBZGRlZC4KKyAgICAgICAgKiB0b29scy9Db2RlUHJvZmlsZS5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpzeW1ib2xOYW1lKToKKyAgICAgICAgICAgIC0gSGVscGVy
IGZ1bmN0aW9uIHRvIGdldCB0aGUgbmFtZSBvZiBhIHN5bWJvbCBpbiB0aGUgZnJhbWV3b3JrLgor
ICAgICAgICAoSlNDOjp0cnVuY2F0ZVRyYWNlKToKKyAgICAgICAgICAgIC0gSGVscGVyIHRvIHRy
dW5jYXRlIHRyYWNlcyBpbnRvIG1ldGhvZHMga25vdyB0byBoYXZlIHVuaW5mb3JtYXRpdmVseSBk
ZWVwIHN0YWNrcy4KKyAgICAgICAgKEpTQzo6Q29kZVByb2ZpbGU6OnNhbXBsZSk6CisgICAgICAg
ICAgICAtIFJlY29yZCBhIHN0YWNrIHRyYWNlIGNsYXNzaWZ5aW5nIHNhbXBsZXMuCisgICAgICAg
IChKU0M6OkNvZGVQcm9maWxlOjpyZXBvcnQpOgorICAgICAgICAgICAgLSB7UHJpbnQgcHJvZmls
ZXIgb3V0cHV0LgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxlLmg6IEFkZGVkLgorICAgICAg
ICAgICAgLSBuZXcgY2xhc3MsIGNhcHR1cmVzIGEgc2V0IG9mIHNhbXBsZXMgYXNzb2NpYXRlZCB3
aXRoIGFuIGV2YWx1YXRlZCBzY3JpcHQsCisgICAgICAgICAgICAgIGFuZCBuZXN0ZWQgdG8gcmVj
b3JkIHNhbXBsZXMgZnJvbSBzdWJzY3JpcHRzLgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxp
bmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q29kZVByb2ZpbGluZzo6cHJvZmlsaW5nVGlt
ZXIpOgorICAgICAgICAgICAgLSBjYWxsYmFjayBmaXJlZCB0aGVuIGEgdGltZXIgZXZlbnQgb2Nj
dXJzLgorICAgICAgICAoSlNDOjpDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IpOgorICAg
ICAgICAgICAgLSBjYWxsZWQgd2hlbiB0aGUgZXhlY3V0YWJsZSBhbGxvY2F0b3IgaXMgY29uc3Ry
dWN0ZWQuCisgICAgICAgIChKU0M6OkNvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEMpOgor
ICAgICAgICAgICAgLSBoZWxwZXIgdG8gbG9va3VwIHRoZSBjb2RlYmxvY2sgZnJvbSBhbiBhZGRy
ZXNzIGluIEpJVCBjb2RlCisgICAgICAgIChKU0M6OkNvZGVQcm9maWxpbmc6OmJlZ2luKToKKyAg
ICAgICAgICAgIC0gZW50ZXIgYSBwcm9maWxpbmcgc2NvcGUuCisgICAgICAgIChKU0M6OkNvZGVQ
cm9maWxpbmc6OmVuZCk6CisgICAgICAgICAgICAtIGV4aXQgYSBwcm9maWxpbmcgc2NvcGUuCisg
ICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGluZy5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0gbmV3
IGNsYXNzLCBpbnN0YW50aWFsZWQgZnJvbSBDb21wbGV0aW9uIHRvIGRlZmluZSBhIHByb2ZpbGlu
ZyBzY29wZS4KKyAgICAgICAgKiB0b29scy9Qcm9maWxlVHJlZU5vZGUuaDogQWRkZWQuCisgICAg
ICAgICAgICAtIG5ldyBjbGFzcywgdXNlZCB0byBjb25zdHJ1Y3QgYSB0cmVlIG9mIHNhbXBsZXMu
CisgICAgICAgICogdG9vbHMvVGllcmVkTU1hcEFycmF5Lmg6IEFkZGVkLgorICAgICAgICAgICAg
LSBuZXcgY2xhc3MsIGEgbWFsbG9jLWZyZWUgdmVjdG9yIChjYW4gYmUgdXNlZCB3aGlsZSB0aGUg
bWFpbiB0aHJlYWQgaXMgc3VzcGVuZGVkLAorICAgICAgICAgICAgICBwb3NzaWJseSBob2xkaW5n
IHRoZSBtYWxsb2MgaGVhcCBsb2NrKS4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6
CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5kbGUp
OgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgICAgICAt
IEFsbG93IGFsbG9jYXRpb24gaGFuZGxlcyB0byB0cmFjayBpbmZvcm1hdGlvbiBhYm91dCB0aGVp
ciBvd25lci4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5oOgorICAgICAgICAoTWV0YUFs
bG9jYXRvcik6CisgICAgICAgICAgICAtIEFsbG93IGFsbG9jYXRpb24gaGFuZGxlcyB0byB0cmFj
ayBpbmZvcm1hdGlvbiBhYm91dCB0aGVpciBvd25lci4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9j
YXRvckhhbmRsZS5oOgorICAgICAgICAoTWV0YUFsbG9jYXRvckhhbmRsZSk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Om93bmVyVUlEKToKKyAgICAgICAgICAgIC0gQWxsb3cg
YWxsb2NhdGlvbiBoYW5kbGVzIHRvIHRyYWNrIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyIG93bmVy
LgorICAgICAgICAqIHd0Zi9PU0FsbG9jYXRvci5oOgorICAgICAgICAoV1RGOjpPU0FsbG9jYXRv
cjo6cmVhbGxvY2F0ZUNvbW1pdHRlZCk6CisgICAgICAgICAgICAtIHJlYWxsb2NhdGUgYW4gZXhp
c3RpbmcsIGNvbW1pdHRlZCBtZW1vcnkgYWxsb2NhdGlvbi4KKwogMjAxMi0wMS0yNyAgTU9SSVRB
IEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbSlNDXSBTb21lIEpTX0VY
UE9SVERBVEEgbWF5IG5vdCBiZSBuZWNlc3NhcnkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw2ICsyMDAsOSBAQCBTRVQoSmF2
YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHJ1bnRpbWUvVGltZW91dENoZWNrZXIuY3BwCiAgICAg
cnVudGltZS9VU3RyaW5nLmNwcAogCisgICAgdG9vbHMvQ29kZVByb2ZpbGUuY3BwCisgICAgdG9v
bHMvQ29kZVByb2ZpbGluZy5jcHAKKwogICAgIHlhcnIvWWFyclBhdHRlcm4uY3BwCiAgICAgeWFy
ci9ZYXJySW50ZXJwcmV0ZXIuY3BwCiAgICAgeWFyci9ZYXJySklULmNwcApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEwNjE1MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkp
CkBAIC01MjUsNiArNTI1LDEyIEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9XZWFrUmFuZG9tLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dyaXRlQmFycmllci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVBy
b2ZpbGUuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuaCBc
CisJU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5oIFwKKwlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9UaWVyZWRNTWFwQXJyYXkuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9B
bGlnbm1lbnQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BbHdheXNJbmxpbmUuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BcnJheUJ1ZmZlci5jcHAgXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCShyZXZpc2lvbiAxMDYxNTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkp
CkBAIC00MTUsNyArNDE1LDYgQEAgX19aTjNXVEYxMnJhbmRvbU51bWJlckV2CiBfX1pOM1dURjEz
TWV0YUFsbG9jYXRvcjE3YWRkRnJlc2hGcmVlU3BhY2VFUHZtCiBfX1pOM1dURjEzTWV0YUFsbG9j
YXRvcjE3ZnJlZUZyZWVTcGFjZU5vZGVFUE5TMF8xM0ZyZWVTcGFjZU5vZGVFCiBfX1pOM1dURjEz
TWV0YUFsbG9jYXRvcjE4ZGVidWdGcmVlU3BhY2VTaXplRXYKLV9fWk4zV1RGMTNNZXRhQWxsb2Nh
dG9yOGFsbG9jYXRlRW0KIF9fWk4zV1RGMTNNZXRhQWxsb2NhdG9yQzJFbQogX19aTjNXVEYxM1N0
cmluZ0J1aWxkZXIxMXNocmlua1RvRml0RXYKIF9fWk4zV1RGMTNTdHJpbmdCdWlsZGVyMTVyZXNl
cnZlQ2FwYWNpdHlFagpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
cHJpCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBAIElOQ0xVREVQQVRIICs9
IFwKICAgICAkJFNPVVJDRV9ESVIvcGFyc2VyIFwKICAgICAkJFNPVVJDRV9ESVIvcHJvZmlsZXIg
XAogICAgICQkU09VUkNFX0RJUi9ydW50aW1lIFwKKyAgICAkJFNPVVJDRV9ESVIvdG9vbHMgXAog
ICAgICQkU09VUkNFX0RJUi95YXJyIFwKICAgICAkJFNPVVJDRV9ESVIvQVBJIFwKICAgICAkJFNP
VVJDRV9ESVIvRm9yd2FyZGluZ0hlYWRlcnMgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5w
cmkJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJp
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNiArMjA5LDggQEAgU09VUkNFUyArPSBcCiAgICAgcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwIFwKICAgICBydW50aW1lL1RpbWVvdXRDaGVja2VyLmNwcCBcCiAg
ICAgcnVudGltZS9VU3RyaW5nLmNwcCBcCisgICAgdG9vbHMvQ29kZVByb2ZpbGUuY3BwIFwKKyAg
ICB0b29scy9Db2RlUHJvZmlsaW5nLmNwcCBcCiAgICAgeWFyci9ZYXJySklULmNwcCBcCiAKICpz
aDQqIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQ0Nyw2ICsxNDQ3LDM0IEBACiAJCQk8L0ZpbGU+
CiAJCTwvRmlsdGVyPgogCQk8RmlsdGVyCisJCQlOYW1lPSJ0b29scyIKKwkJCT4KKwkJCTxGaWxl
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx0b29sc1xDb2RlUHJvZmlsZS5jcHAiCisJCQkJPgor
CQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHRvb2xzXENvZGVQ
cm9maWxlLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXHRvb2xzXENvZGVQcm9maWxpbmcuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxG
aWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx0b29sc1xDb2RlUHJvZmlsaW5nLmgiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHRvb2xzXFBy
b2ZpbGVUcmVlTm9kZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlx0b29sc1xUaWVyZWRNTWFwQXJyYXkuaCIKKwkJCQk+CisJCQk8L0ZpbGU+
CisJCTwvRmlsdGVyPgorCQk8RmlsdGVyCiAJCQlOYW1lPSJieXRlY29kZSIKIAkJCT4KIAkJCTxG
aWxlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlQ29tbW9uLnZzcHJvcHMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZUNvbW1vbi52c3Byb3BzCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlQ29tbW9uLnZzcHJvcHMJKHdvcmtpbmcgY29weSkKQEAgLTYsNyArNiw3IEBA
CiAJPgogCTxUb29sCiAJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCUFkZGl0aW9uYWxJbmNs
dWRlRGlyZWN0b3JpZXM9IiZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmpcSmF2YVNj
cmlwdENvcmVcRGVyaXZlZFNvdXJjZXNcJnF1b3Q7Oy4uLy4uLzsuLi8uLi9BUEkvOy4uLy4uL3Bh
cnNlci87Li4vLi4vYnl0ZWNvbXBpbGVyLzsuLi8uLi9kZmcvOy4uLy4uL2ppdC87Li4vLi4vcnVu
dGltZS87Li4vLi4vYnl0ZWNvZGUvOy4uLy4uL2ludGVycHJldGVyLzsuLi8uLi93dGYvOy4uLy4u
L3Byb2ZpbGVyOy4uLy4uL2Fzc2VtYmxlci87Li4vLi4vZGVidWdnZXIvOy4uLy4uL2hlYXAvOyZx
dW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGli
cmFyaWVzRGlyKVxpbmNsdWRlXHByaXZhdGUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVp
bGREaXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1
ZGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGlu
Y2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxw
dGhyZWFkcyZxdW90OyIKKwkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJnF1b3Q7JChD
b25maWd1cmF0aW9uQnVpbGREaXIpXG9ialxKYXZhU2NyaXB0Q29yZVxEZXJpdmVkU291cmNlc1wm
cXVvdDs7Li4vLi4vOy4uLy4uL0FQSS87Li4vLi4vcGFyc2VyLzsuLi8uLi9ieXRlY29tcGlsZXIv
Oy4uLy4uL2RmZy87Li4vLi4vaml0LzsuLi8uLi9ydW50aW1lLzsuLi8uLi90b29scy87Li4vLi4v
Ynl0ZWNvZGUvOy4uLy4uL2ludGVycHJldGVyLzsuLi8uLi93dGYvOy4uLy4uL3Byb2ZpbGVyOy4u
Ly4uL2Fzc2VtYmxlci87Li4vLi4vZGVidWdnZXIvOy4uLy4uL2hlYXAvOyZxdW90OyQoV2ViS2l0
TGlicmFyaWVzRGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxp
bmNsdWRlXHByaXZhdGUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1
ZGUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVcSmF2YVNjcmlw
dENvcmUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVccHJpdmF0
ZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxwdGhyZWFkcyZxdW90
OyIKIAkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9fU1REX0MiCiAJCUZvcmNlZEluY2x1ZGVG
aWxlcz0iSUNVVmVyc2lvbi5oIgogCS8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM4Miw2ICsz
ODIsOCBAQAogCQk4NkFFNjRBQTEzNUU1RTFDMDA5NjMwMTIgLyogU0g0QXNzZW1ibGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkFFNjRBNzEzNUU1
RTFDMDA5NjMwMTIgLyogU0g0QXNzZW1ibGVyLmggKi87IH07CiAJCTg2QUU2QzREMTM2QTExRTQw
MDk2MzAxMiAvKiBERkdGUFJJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NkFFNkM0QjEzNkExMUU0MDA5NjMwMTIgLyogREZHRlBSSW5mby5oICov
OyB9OwogCQk4NkFFNkM0RTEzNkExMUU0MDA5NjMwMTIgLyogREZHR1BSSW5mby5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZBRTZDNEMxMzZBMTFFNDAw
OTYzMDEyIC8qIERGR0dQUkluZm8uaCAqLzsgfTsKKwkJODZCNTgyNjcxNEQyNzk2QzAwQTlDMzA2
IC8qIENvZGVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg2QjU4MjJFMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgKi87
IH07CisJCTg2QjU4MjY5MTREMjc5NzAwMEE5QzMwNiAvKiBDb2RlUHJvZmlsaW5nLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MDNDRUYyMTRDNzU0
NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmNwcCAqLzsgfTsKIAkJODZCOTlBRTMxMTdFNTc4
MTAwREY1QTkwIC8qIFN0cmluZ0J1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODZCOTlBRTExMTdFNTc4MTAwREY1QTkwIC8qIFN0cmluZ0J1ZmZl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2
QkIwOUMwMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QkIwOUJFMTM4RTM4MUIwMDU2NzAyRiAv
KiBERkdSZXBhdGNoLmNwcCAqLzsgfTsKIAkJODZCQjA5QzExMzhFMzgxQjAwNTY3MDJGIC8qIERG
R1JlcGF0Y2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg2QkIwOUJGMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmggKi87IH07CkBAIC0xMDQy
LDcgKzEwNDQsNyBAQAogCQkxQTA4Mjc3ODE0MjE2OEQ3MDA5MENDQUMgLyogQmluYXJ5U2VtYXBo
b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpbmFyeVNlbWFwaG9yZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUE5RTU1MDE0OTgwOTM1MDAwMDFBOEEg
LyogRnVuY3Rpb25hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdW5jdGlv
bmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDOTA1MTQyMEJBOUU4QTcwMDgx
RTlEMCAvKiBWZXJzaW9uLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9
IFZlcnNpb24ueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFDOTA1MTQz
MEJBOUU4QTcwMDgxRTlEMCAvKiBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQueGNjb25maWc7IG5hbWUgPSBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZzsgcGF0aCA9IC4uL0Nv
bmZpZ3VyYXRpb25zL0phdmFTY3JpcHRDb3JlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxQzkwNTE0MzBCQTlFOEE3MDA4MUU5RDAgLyogSmF2YVNjcmlwdENvcmUueGNj
b25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gSmF2YVNjcmlwdENvcmUueGNj
b25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDOTA1MTQ0MEJBOUU4QTcwMDgx
RTlEMCAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBw
YXRoID0gRGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQzkwNTE0NTBCQTlFOEE3MDA4MUU5RDAgLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQueGNjb25maWc7IHBhdGggPSBCYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQ0FBOEI0QTBEMzJDMzlBMDA0MUJDRkYgLyogSmF2YVNjcmlwdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKYXZhU2NyaXB0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMTM4LDYgKzExNDAsOCBAQAogCQk4NjAxNjFFMDBGM0E4M0MxMDBGODQ3
MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTWFjcm9Bc3NlbWJsZXJYODYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYw
MTYxRTEwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDE2MUUyMEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fz
c2VtYmxlclg4NkNvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NjAz
Q0VGMjE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGluZy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlUHJvZmlsaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJODYwM0NFRjMxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVByb2ZpbGluZy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjA0RjRGMjE0M0E2QzQ0MDBCMjk1RjUgLyogQ2hh
bmdlTG9nICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IENoYW5nZUxvZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYw
NEY1MDMxNDNDRTFDMTAwQjI5NUY1IC8qIEpTR2xvYmFsVGhpcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbFRoaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODYyNkJFQ0UxMTkyOEUzOTAwNzgyRkFCIC8qIFN0cmluZ1N0YXRpY3MuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3RyaW5nU3RhdGljcy5jcHA7IHBhdGgg
PSB0ZXh0L1N0cmluZ1N0YXRpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTE4NSw2ICsxMTg5LDEwIEBACiAJCTg2QUU2NEE3MTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3Nl
bWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU0g0QXNzZW1ibGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QUU2QzRCMTM2QTExRTQwMDk2MzAxMiAv
KiBERkdGUFJJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ZQUklu
Zm8uaDsgcGF0aCA9IGRmZy9ERkdGUFJJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg2QUU2QzRDMTM2QTExRTQwMDk2MzAxMiAvKiBERkdHUFJJbmZvLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0dQUkluZm8uaDsgcGF0aCA9IGRmZy9ERkdHUFJJbmZv
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2QjU4MjJDMTREMjJGNUYwMEE5QzMw
NiAvKiBQcm9maWxlVHJlZU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UHJvZmlsZVRyZWVOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2QjU4MjJF
MTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb2RlUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTg2QjU4MjJGMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk4NkI1ODI2QTE0RDM1RDUxMDBBOUMzMDYgLyogVGllcmVkTU1hcEFycmF5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpZXJlZE1NYXBBcnJheS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkI5OUFFMTExN0U1NzgxMDBERjVBOTAgLyog
U3RyaW5nQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0cmluZ0J1
ZmZlci5oOyBwYXRoID0gdGV4dC9TdHJpbmdCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODZCQjA5QkUxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUmVwYXRjaC5jcHA7IHBhdGggPSBk
ZmcvREZHUmVwYXRjaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QkIwOUJG
MTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR1JlcGF0Y2guaDsgcGF0aCA9IGRmZy9ERkdSZXBhdGNoLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjgwLDYgKzE2ODgsNyBAQAogCQkJCTk1QUI4MzFBMERB
NDJDNjkwMEJDODNGMyAvKiBwcm9maWxlciAqLywKIAkJCQk3RUY2RTBCQjBFQjdBMUVDMDA3OUFG
QUYgLyogcnVudGltZSAqLywKIAkJCQkxNDEyMTEwMDBBNDg3NzI2MDA0ODAyNTUgLyogdGVzdHMg
Ki8sCisJCQkJODYwM0NFRjAxNEM3NTNFRjAwQUU1OUUzIC8qIHRvb2xzICovLAogCQkJCTY1MTYy
RUYxMDhFNkEyMUMwMDc1NTZDRCAvKiB3dGYgKi8sCiAJCQkJODZFQUM0OEMwRjkzRThCOTAwOEVD
OTQ4IC8qIHlhcnIgKi8sCiAJCQkJMUM5MDUxM0UwQkE5RTg4MzAwODFFOUQwIC8qIENvbmZpZ3Vy
YXRpb25zICovLApAQCAtMTgyNiw3ICsxODM1LDYgQEAKIAkJCQk4NjVGNDA4NzEwRTdENTYzMDA5
NDczNjEgLyogQVBJU2hpbXMuaCAqLywKIAkJCQkxQ0FBOEI0QTBEMzJDMzlBMDA0MUJDRkYgLyog
SmF2YVNjcmlwdC5oICovLAogCQkJCTFDQUE4QjRCMEQzMkMzOUEwMDQxQkNGRiAvKiBKYXZhU2Ny
aXB0Q29yZS5oICovLAotCQkJCTFDOTA1MTQzMEJBOUU4QTcwMDgxRTlEMCAvKiBKYXZhU2NyaXB0
Q29yZS54Y2NvbmZpZyAqLywKIAkJCQlCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUgLyogSlNBUElW
YWx1ZVdyYXBwZXIuY3BwICovLAogCQkJCUJDMDg5NEQ2MEZBRkJBMkQwMDAwMTg2NSAvKiBKU0FQ
SVZhbHVlV3JhcHBlci5oICovLAogCQkJCTE0MjEzNTlBMEE2NzdGNEYwMEE4MTk1RSAvKiBKU0Jh
c2UuY3BwICovLApAQCAtMTkxNiw2ICsxOTI0LDcgQEAKIAkJCQkxQzkwNTE0NDBCQTlFOEE3MDA4
MUU5RDAgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovLAogCQkJCTQ0OTA5N0VFMEY4RjgxQjUw
MDc2QTMyNyAvKiBGZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyAqLywKIAkJCQk1REFGRDZDQjE0NkI2
ODYzMDBGQkVGQjQgLyogSlNDLnhjY29uZmlnICovLAorCQkJCTFDOTA1MTQzMEJBOUU4QTcwMDgx
RTlEMCAvKiBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZyAqLywKIAkJCQlCQzAyMUJGMjEzNjkwMEMz
MDBGQzU0NjcgLyogVGVzdEFQSS54Y2NvbmZpZyAqLywKIAkJCQk1REFGRDZDQzE0NkI2OEI5MDBG
QkVGQjQgLyogVGVzdFJlZ0V4cC54Y2NvbmZpZyAqLywKIAkJCQkxQzkwNTE0MjBCQTlFOEE3MDA4
MUU5RDAgLyogVmVyc2lvbi54Y2NvbmZpZyAqLywKQEAgLTIzNjUsNiArMjM3NCwxOSBAQAogCQkJ
cGF0aCA9IHJ1bnRpbWU7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk4NjAz
Q0VGMDE0Qzc1M0VGMDBBRTU5RTMgLyogdG9vbHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCTg2QjU4MjJFMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJv
ZmlsZS5jcHAgKi8sCisJCQkJODZCNTgyMkYxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxl
LmggKi8sCisJCQkJODYwM0NFRjIxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcuY3Bw
ICovLAorCQkJCTg2MDNDRUYzMTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmggKi8s
CisJCQkJODZCNTgyMkMxNEQyMkY1RjAwQTlDMzA2IC8qIFByb2ZpbGVUcmVlTm9kZS5oICovLAor
CQkJCTg2QjU4MjZBMTREMzVENTEwMEE5QzMwNiAvKiBUaWVyZWRNTWFwQXJyYXkuaCAqLywKKwkJ
CSk7CisJCQlwYXRoID0gdG9vbHM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9Owog
CQk4NjU2NTczRTExNUJFMzUyMDAyOTFGNDAgLyogdGV4dCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0zNjQwLDYgKzM2NjIsOCBAQAogCQkJCTBGOTMzMkEx
MTRDQTdERDEwMDg1RjNDNiAvKiBNZXRob2RDYWxsTGlua1N0YXR1cy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjkzMzJBMzE0Q0E3REQ3MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjU1RjBGNDE0RDEwNjM5MDBBQzc2NDkgLyogQWJzdHJhY3RQQy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk4NkI1ODI2NzE0RDI3OTZDMDBBOUMzMDYgLyogQ29kZVBy
b2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODZCNTgyNjkxNEQyNzk3MDAwQTlDMzA2IC8q
IENvZGVQcm9maWxpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTA2MTUwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0NTYsNiArMTQ1Niw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9j
a1RhZywKICAgICAsIG1fc3BlY3VsYXRpdmVGYWlsQ291bnRlcigwKQogICAgICwgbV9vcHRpbWl6
YXRpb25EZWxheUNvdW50ZXIoMCkKICAgICAsIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIo
MCkKKyAgICAsIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0ZShDb21waWxlV2l0aERGR1Vuc2V0KQog
ewogICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKICAgICBvcHRp
bWl6ZUFmdGVyV2FybVVwKCk7CkBAIC0yMTY0LDE3ICsyMTY1LDE3IEBAIEpTT2JqZWN0KiBGdW5j
dGlvbkNvZGVCbG9jazo6Y29tcGlsZU9wdGkKICAgICByZXR1cm4gZXJyb3I7CiB9CiAKLWJvb2wg
UHJvZ3JhbUNvZGVCbG9jazo6Y2FuQ29tcGlsZVdpdGhERkcoKQorYm9vbCBQcm9ncmFtQ29kZUJs
b2NrOjpjYW5Db21waWxlV2l0aERGR0ludGVybmFsKCkKIHsKICAgICByZXR1cm4gREZHOjpjYW5D
b21waWxlUHJvZ3JhbSh0aGlzKTsKIH0KIAotYm9vbCBFdmFsQ29kZUJsb2NrOjpjYW5Db21waWxl
V2l0aERGRygpCitib29sIEV2YWxDb2RlQmxvY2s6OmNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwo
KQogewogICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVFdmFsKHRoaXMpOwogfQogCi1ib29sIEZ1
bmN0aW9uQ29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERGRygpCitib29sIEZ1bmN0aW9uQ29kZUJs
b2NrOjpjYW5Db21waWxlV2l0aERGR0ludGVybmFsKCkKIHsKICAgICBpZiAobV9pc0NvbnN0cnVj
dG9yKQogICAgICAgICByZXR1cm4gREZHOjpjYW5Db21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3Qo
dGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4OCw3ICszODgsMjIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRl
KiwgU2NvcGVDaGFpbk5vZGUqKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigp
ID0gMDsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCkgPSAwOwotICAg
ICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKSA9IDA7CisKKyAgICAgICAgZW51
bSBDb21waWxlV2l0aERGR1N0YXRlIHsKKyAgICAgICAgICAgIENvbXBpbGVXaXRoREZHRmFsc2Us
CisgICAgICAgICAgICBDb21waWxlV2l0aERGR1RydWUsCisgICAgICAgICAgICBDb21waWxlV2l0
aERGR1Vuc2V0CisgICAgICAgIH07CisKKyAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVX
aXRoREZHSW50ZXJuYWwoKSA9IDA7CisgICAgICAgIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKQor
ICAgICAgICB7CisgICAgICAgICAgICBib29sIHJlc3VsdCA9IGNhbkNvbXBpbGVXaXRoREZHSW50
ZXJuYWwoKTsKKyAgICAgICAgICAgIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0ZSA9IHJlc3VsdCA/
IENvbXBpbGVXaXRoREZHVHJ1ZSA6IENvbXBpbGVXaXRoREZHRmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIENvbXBpbGVXaXRoREZHU3RhdGUgY2Fu
Q29tcGlsZVdpdGhERkdTdGF0ZSgpIHsgcmV0dXJuIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0ZTsg
fQorCiAgICAgICAgIGJvb2wgaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQogICAgICAgICB7CiAg
ICAgICAgICAgICBBU1NFUlQoZ2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsK
QEAgLTExODcsNiArMTIwMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBmcmllbmQgdm9p
ZCBXVEY6OmRlbGV0ZU93bmVkUHRyPFJhcmVEYXRhPihSYXJlRGF0YSopOwogI2VuZGlmCiAgICAg
ICAgIE93blB0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKKyAgICAgICAgQ29tcGlsZVdpdGhERkdT
dGF0ZSBtX2NhbkNvbXBpbGVXaXRoREZHU3RhdGU7CiAgICAgfTsKIAogICAgIC8vIFByb2dyYW0g
Y29kZSBpcyBub3QgbWFya2VkIGJ5IGFueSBmdW5jdGlvbiwgc28gd2UgbWFrZSB0aGUgZ2xvYmFs
IG9iamVjdApAQCAtMTIyNiw3ICsxMjQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZp
cnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5v
ZGUqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKCk7CiAgICAgICAgIHZpcnR1YWwg
Q29kZUJsb2NrKiByZXBsYWNlbWVudCgpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGls
ZVdpdGhERkcoKTsKKyAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHSW50ZXJu
YWwoKTsKICNlbmRpZgogICAgIH07CiAKQEAgLTEyNjAsNyArMTI3Niw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0
ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpOwog
ICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKLSAgICAgICAgdmlydHVh
bCBib29sIGNhbkNvbXBpbGVXaXRoREZHKCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21w
aWxlV2l0aERGR0ludGVybmFsKCk7CiAjZW5kaWYKIAogICAgIHByaXZhdGU6CkBAIC0xMjk3LDcg
KzEzMTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29t
cGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgamV0dGlzb24oKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2Vt
ZW50KCk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOworICAgICAg
ICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpOwogI2VuZGlmCiAgICAg
fTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3IuY3BwCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgogCiAjaWYgRU5BQkxFKEVYRUNV
VEFCTEVfQUxMT0NBVE9SX0RFTUFORCkKKyNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5j
bHVkZSA8d3RmL01ldGFBbGxvY2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvUGFnZVJlc2VydmF0aW9u
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZNVGFncy5oPgpAQCAtOTMsNiArOTQsNyBAQCB2b2lkIEV4ZWN1
dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxvCiB7CiAgICAgQVNTRVJUKCFhbGxvY2F0b3Ip
OwogICAgIGFsbG9jYXRvciA9IG5ldyBEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yKCk7CisgICAg
Q29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9yKGFsbG9jYXRvcik7CiB9CiAKIEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OkV4ZWN1dGFibGVBbGxvY2F0b3IoSlNHbG9iYWxEYXRhJikKQEAgLTExMiw5
ICsxMTQsNyBAQCBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVtb3J5UHJlCiAKIFBh
c3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxs
b2NhdGUoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCkK
IHsKLSAgICBVTlVTRURfUEFSQU0ob3duZXJVSUQpOwotCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVN
ZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOwor
ICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3ItPmFs
bG9jYXRlKHNpemVJbkJ5dGVzLCBvd25lclVJRCk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAg
IENSQVNIKCk7CiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4
ZWRWTVBvb2wuY3BwCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDggKzI5LDggQEAKIAogI2lmIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9GSVhFRCkK
IAorI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlIDxlcnJuby5oPgotCiAjaW5j
bHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDx3dGYvTWV0
YUFsbG9jYXRvci5oPgpAQCAtOTYsNiArOTYsNyBAQCB2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6
OmluaXRpYWxpemVBbGxvCiB7CiAgICAgQVNTRVJUKCFhbGxvY2F0b3IpOwogICAgIGFsbG9jYXRv
ciA9IG5ldyBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKTsKKyAgICBDb2RlUHJvZmls
aW5nOjpub3RpZnlBbGxvY2F0b3IoYWxsb2NhdG9yKTsKIH0KIAogRXhlY3V0YWJsZUFsbG9jYXRv
cjo6RXhlY3V0YWJsZUFsbG9jYXRvcihKU0dsb2JhbERhdGEmKQpAQCAtMTE2LDEyICsxMTcsMTAg
QEAgYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZQogCiBQYXNzUmVmUHRy
PEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJ
RCkKIHsKLSAgICBVTlVTRURfUEFSQU0ob3duZXJVSUQpOwotCi0gICAgUmVmUHRyPEV4ZWN1dGFi
bGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMp
OworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3It
PmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBvd25lclVJRCk7CiAgICAgaWYgKCFyZXN1bHQpIHsKICAg
ICAgICAgcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoZ2xvYmFsRGF0YSk7Ci0gICAgICAgIHJlc3Vs
dCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOworICAgICAgICByZXN1bHQgPSBh
bGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBvd25lclVJRCk7CiAgICAgICAgIGlmICgh
cmVzdWx0KQogICAgICAgICAgICAgQ1JBU0goKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcg
QEAKICNpbmNsdWRlICJBcmd1bWVudHMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNs
dWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAi
REZHT1NSRW50cnkuaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlv
bkhlbHBlcnMuaCIKQEAgLTk2OCw3ICs5NjksNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBKSVRUaHVu
a3M6OnRyeUNhY2hlR2V0CiAgICAgSklUOjpjb21waWxlR2V0QnlJZENoYWluKGNhbGxGcmFtZS0+
c2NvcGVDaGFpbigpLT5nbG9iYWxEYXRhLCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgc3R1YkluZm8s
IHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBwcm9wZXJ0eU5hbWUsIHNsb3QsIG9m
ZnNldCwgcmV0dXJuQWRkcmVzcyk7CiB9CiAKLSNpZiAhZGVmaW5lZChOREVCVUcpICYmICFFTkFC
TEUoQ09ERV9QUk9GSUxJTkcpCisjaWYgIWRlZmluZWQoTkRFQlVHKQogCiBleHRlcm4gIkMiIHsK
IApAQCAtOTg2LDcgKzk4Nyw4IEBAIHN0cnVjdCBTdGFja0hhY2sgewogICAgICAgICA6IHN0YWNr
RnJhbWUoc3RhY2tGcmFtZSkKICAgICAgICAgLCBzYXZlZFJldHVybkFkZHJlc3MoKnN0YWNrRnJh
bWUucmV0dXJuQWRkcmVzc1Nsb3QoKSkKICAgICB7Ci0gICAgICAgICpzdGFja0ZyYW1lLnJldHVy
bkFkZHJlc3NTbG90KCkgPSBSZXR1cm5BZGRyZXNzUHRyKEZ1bmN0aW9uUHRyKGpzY0dlbmVyYXRl
ZE5hdGl2ZUNvZGUpKTsKKyAgICAgICAgaWYgKCFDb2RlUHJvZmlsaW5nOjplbmFibGVkKCkpCisg
ICAgICAgICAgICAqc3RhY2tGcmFtZS5yZXR1cm5BZGRyZXNzU2xvdCgpID0gUmV0dXJuQWRkcmVz
c1B0cihGdW5jdGlvblB0cihqc2NHZW5lcmF0ZWROYXRpdmVDb2RlKSk7CiAgICAgfQogCiAgICAg
QUxXQVlTX0lOTElORSB+U3RhY2tIYWNrKCkgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDYgKzI0LDcgQEAKICNpbmNsdWRlICJDb21wbGV0aW9uLmgiCiAKICNpbmNsdWRlICJDYWxsRnJh
bWUuaCIKKyNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmpl
Y3QuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpAQCAt
NTUsNiArNTYsOCBAQCBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDCiAg
ICAgSlNMb2NrIGxvY2soZXhlYyk7CiAgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5pZGVu
dGlmaWVyVGFibGUgPT0gd3RmVGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSk7
CiAKKyAgICBDb2RlUHJvZmlsaW5nIHByb2ZpbGUoc291cmNlKTsKKwogICAgIFByb2dyYW1FeGVj
dXRhYmxlKiBwcm9ncmFtID0gUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZShleGVjLCBzb3VyY2Up
OwogICAgIGlmICghcHJvZ3JhbSkgewogICAgICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29kZVBy
b2ZpbGUuaCIKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVQcm9maWxp
bmcuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiUHJvZmlsZVRyZWVOb2Rl
LmgiCisjaW5jbHVkZSAiVmVjdG9yLmgiCisjaW5jbHVkZSA8Y3h4YWJpLmg+CisjaW5jbHVkZSA8
ZGxmY24uaD4KKyNpbmNsdWRlIDxleGVjaW5mby5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gTWFwIGZyb20gQ29kZVR5cGUgZW51bSB0
byBhIGNvcnJlc3BvbmRpbmcgbmFtZS4KK2NvbnN0IGNoYXIqIENvZGVQcm9maWxlOjpzX2NvZGVU
eXBlTmFtZXNbQ29kZVByb2ZpbGU6Ok51bWJlck9mQ29kZVR5cGVzXSA9IHsKKyAgICAiW1tFbmdp
bmVDb2RlXV0iLAorICAgICJbW0dsb2JhbFRodW5rXV0iLAorICAgICJbW1JlZ0V4cENvZGVdXSIs
CisgICAgIltbREZHSklUXV0iLAorICAgICJbW0Jhc2VsaW5lT25seV1dIiwKKyAgICAiW1tCYXNl
bGluZVByb2ZpbGVdXSIsCisgICAgIltbQmFzZWxpbmVPU1JdXSIsCisgICAgIltbRW5naW5lRnJh
bWVdXSIKK307CisKKy8vIEhlbHBlciBmdW5jdGlvbiwgZmluZCB0aGUgc3ltYm9sIG5hbWUgZm9y
IGEgcGMgaW4gSlNDLgorc3RhdGljIGNvbnN0IGNoYXIqIHN5bWJvbE5hbWUodm9pZCogYWRkcmVz
cykKK3sKKyAgICBEbF9pbmZvIGluZm87CisgICAgaWYgKCFkbGFkZHIoYWRkcmVzcywgJmluZm8p
IHx8ICFpbmZvLmRsaV9zbmFtZSkKKyAgICAgICAgcmV0dXJuICI8dW5rbm93bj4iOworCisgICAg
Y29uc3QgY2hhciogbWFuZ2xlZE5hbWUgPSBpbmZvLmRsaV9zbmFtZTsKKyAgICBjb25zdCBjaGFy
KiBjeGFEZW1hbmdsZWQgPSBhYmk6Ol9fY3hhX2RlbWFuZ2xlKG1hbmdsZWROYW1lLCAwLCAwLCAw
KTsKKyAgICByZXR1cm4gY3hhRGVtYW5nbGVkID8gY3hhRGVtYW5nbGVkIDogbWFuZ2xlZE5hbWU7
Cit9CisKKy8vIEhlbHBlciBmdW5jdGlvbiwgdHJ1bmNhdGUgdHJhY2VzIHRvIHBydW5lIHRoZSBv
dXRwdXQgJiBtYWtlIHZlcnkgdmVyYm9zZSBtb2RlIGEgbGl0dGxlIG1vcmUgcmVhZGFibGUuCitz
dGF0aWMgYm9vbCB0cnVuY2F0ZVRyYWNlKGNvbnN0IGNoYXIqIHN5bWJvbE5hbWUpCit7CisgICAg
cmV0dXJuICFzdHJjbXAoc3ltYm9sTmFtZSwgIkpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVy
YXRlKCkiKQorICAgICAgICB8fCAhc3RyY21wKHN5bWJvbE5hbWUsICJKU0M6OlBhcnNlcjxKU0M6
OkxleGVyPHVuc2lnbmVkIGNoYXI+ID46OnBhcnNlSW5uZXIoKSIpCisgICAgICAgIHx8ICFzdHJj
bXAoc3ltYm9sTmFtZSwgIldURjo6ZmFzdE1hbGxvYyh1bnNpZ25lZCBsb25nKSIpCisgICAgICAg
IHx8ICFzdHJjbXAoc3ltYm9sTmFtZSwgIldURjo6Y2FsY3VsYXRlVVRDT2Zmc2V0KCkiKQorICAg
ICAgICB8fCAhc3RyY21wKHN5bWJvbE5hbWUsICJKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQ29kZUJsb2NrKCkiKTsKKyAgICAgICAgCit9CisKKy8vIEVhY2ggdHJhY2UgY29uc2lzdHMg
b2YgYSBzZXF1ZW5jZSBvZiB6ZXJvIG9yIG1vcmUgJ0VuZ2luZUZyYW1lJyBlbnRyaWVzLAorLy8g
Zm9sbG93ZWQgYnkgYSBzYW1wbGUgaW4gSklUIGNvZGUsIG9yIG9uZSBvciBtb3JlICdFbmdpbmVG
cmFtZScgZW50cmllcywKKy8vIGZvbGxvd2VkIGJ5IGEgJ0VuZ2luZUNvZGUnIHRlcm1pbmF0b3Iu
Cit2b2lkIENvZGVQcm9maWxlOjpzYW1wbGUodm9pZCogcGMsIHZvaWQqKiBmcmFtZVBvaW50ZXIp
Cit7CisgICAgLy8gRGlzYWxsb3cgdHJhY2VzIGNvbnRhaW5pbmcgb25seSBhICdFbmdpbmVDb2Rl
JyB0ZXJtaW5hdG9yLCB3aXRob3V0IGFueSAnRW5naW5lRnJhbWUnIGZyYW1lcy4KKyAgICBpZiAo
IWZyYW1lUG9pbnRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgd2hpbGUgKGZyYW1lUG9pbnRl
cikgeworICAgICAgICBDb2RlVHlwZSB0eXBlOworICAgICAgICB2b2lkKiBvd25lclVJRCA9IENv
ZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEMocGMpOworCisgICAgICAgIC8vIERldGVybWlu
ZSBpZiB0aGlzIHNhbXBsZSBmZWxsIGluIEpJVCBjb2RlLCBhbmQgaWYgc28sIGZyb20gd2hpY2gg
SklUICYgd2h5LgorICAgICAgICBpZiAoIW93bmVyVUlEKQorICAgICAgICAgICAgdHlwZSA9IEVu
Z2luZUZyYW1lOworICAgICAgICBlbHNlIGlmIChvd25lclVJRCA9PSBHTE9CQUxfVEhVTktfSUQp
CisgICAgICAgICAgICB0eXBlID0gR2xvYmFsVGh1bms7CisgICAgICAgIGVsc2UgaWYgKG93bmVy
VUlEID09IFJFR0VYUF9DT0RFX0lEKQorICAgICAgICAgICAgdHlwZSA9IFJlZ0V4cENvZGU7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNf
Y2FzdDxDb2RlQmxvY2sqPihvd25lclVJRCk7CisgICAgICAgICAgICBpZiAoY29kZUJsb2NrLT5n
ZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKQorICAgICAgICAgICAgICAgIHR5cGUgPSBE
RkdKSVQ7CisgICAgICAgICAgICBlbHNlIGlmIChjb2RlQmxvY2stPmNhbkNvbXBpbGVXaXRoREZH
U3RhdGUoKSA9PSBDb2RlQmxvY2s6OkNvbXBpbGVXaXRoREZHRmFsc2UpCisgICAgICAgICAgICAg
ICAgdHlwZSA9IEJhc2VsaW5lT25seTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNvZGVCbG9jay0+
cmVwbGFjZW1lbnQoKSkKKyAgICAgICAgICAgICAgICB0eXBlID0gQmFzZWxpbmVPU1I7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdHlwZSA9IEJhc2VsaW5lUHJvZmlsZTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIEEgc2FtcGxlIGluIEpJVCBjb2RlIHRlcm1pbmF0ZXMgdGhl
IHRyYWNlLgorICAgICAgICBtX3NhbXBsZXMuYXBwZW5kKENvZGVSZWNvcmQocGMsIHR5cGUpKTsK
KyAgICAgICAgaWYgKHR5cGUgIT0gRW5naW5lRnJhbWUpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgLy8gV2FsayB1cCB0aGUgc3RhY2suCisjaWYgUExBVEZPUk0oTUFDKSAmJiBDUFUo
WDg2XzY0KQorICAgICAgICBwYyA9IGZyYW1lUG9pbnRlclsxXTsKKyAgICAgICAgZnJhbWVQb2lu
dGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCpmcmFtZVBvaW50ZXIpOworI2Vsc2UKKyAg
ICAgICAgLy8gVGhpcyBwbGF0Zm9ybSBpcyBub3QgeWV0IHN1cHBvcnRlZCEKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBnZXQgaGVy
ZSwgd2Ugd2Fsa2VkIHRoZSBlbnRpcmUgc3RhY2sgd2l0aG91dCBmaW5kaW5nIGFueSBmcmFtZXMg
b2YgSklUIGNvZGUuCisgICAgbV9zYW1wbGVzLmFwcGVuZChDb2RlUmVjb3JkKDAsIEVuZ2luZUNv
ZGUpKTsKK30KKwordm9pZCBDb2RlUHJvZmlsZTo6cmVwb3J0KCkKK3sKKyAgICBmcHJpbnRmKHN0
ZG91dCwgIjxDb2RlUHJvZmlsaW5nICVzOiVkPlxuIiwgbV9maWxlLmRhdGEoKSwgbV9saW5lTm8p
OworCisgICAgLy8gSG93IG1hbnkgZnJhbWVzIG9mIEMtY29kZSB0byBwcmludCAtIDAsIGlmIG5v
dCB2ZXJib3NlLCAxIGlmIHZlcmJvc2UsIHVwIHRvIDEwMjQgaWYgdmVyeSB2ZXJib3NlLgorICAg
IHVuc2lnbmVkIHJlY3Vyc2lvbkxpbWl0ID0gQ29kZVByb2ZpbGluZzo6YmVWZXJ5VmVyYm9zZSgp
ID8gMTAyNCA6IENvZGVQcm9maWxpbmc6OmJlVmVyYm9zZSgpOworCisgICAgUHJvZmlsZVRyZWVO
b2RlIHByb2ZpbGU7CisKKyAgICAvLyBXYWxrIHRocm91Z2ggdGhlIHNhbXBsZSBidWZmZXIuCisg
ICAgc2l6ZV90IHRyYWNlID0gMDsKKyAgICB3aGlsZSAodHJhY2UgPCBtX3NhbXBsZXMuc2l6ZSgp
KSB7CisKKyAgICAgICAgLy8gQWxsIHRyYWNlcyBhcmUgemVybyBvciBtb3JlICdFbmdpbmVGcmFt
ZSdzLCBmb2xsb3dlZCBieSBhIG5vbi0nRW5naW5lRnJhbWUnLgorICAgICAgICAvLyBTY2FuIHRv
IGZpbmQgdGhlIGxhc3Qgc2FtcGxlIGluIHRoZSB0cmFjZS4KKyAgICAgICAgc2l6ZV90IGxhc3RJ
blRyYWNlID0gdHJhY2U7CisgICAgICAgIHdoaWxlIChtX3NhbXBsZXNbbGFzdEluVHJhY2VdLnR5
cGUgPT0gRW5naW5lRnJhbWUpCisgICAgICAgICAgICArK2xhc3RJblRyYWNlOworCisgICAgICAg
IC8vIFdlIHVzZSB0aGUgbGFzdCBzYW1wbGUgdHlwZSB0byBsb29rIHVwIGEgbmFtZSAodXNlZCBh
cyBhIGJ1Y2tldCBpbiB0aGUgcHJvZmlsZXIpLgorICAgICAgICBQcm9maWxlVHJlZU5vZGUqIGNh
bGxiYWNrcyA9IHByb2ZpbGUuc2FtcGxlQ2hpbGQoc19jb2RlVHlwZU5hbWVzW21fc2FtcGxlc1ts
YXN0SW5UcmFjZV0udHlwZV0pOworCisgICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgc2FtcGxl
cyBpbiBDLWNvZGUsIGFkZCB1cCB0byByZWN1cnNpb25MaW1pdCBvZiB0aGVtIGludG8gdGhlIHBy
b2ZpbGUgdHJlZS4KKyAgICAgICAgc2l6ZV90IGxhc3RFbmdpbmVGcmFtZSA9IGxhc3RJblRyYWNl
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGNvdW50ID0gMDsgbGFzdEVuZ2luZUZyYW1lID4gdHJh
Y2UgJiYgY291bnQgPCByZWN1cnNpb25MaW1pdDsgKytjb3VudCkgeworICAgICAgICAgICAgLS1s
YXN0RW5naW5lRnJhbWU7CisgICAgICAgICAgICBBU1NFUlQobV9zYW1wbGVzW2xhc3RFbmdpbmVG
cmFtZV0udHlwZSA9PSBFbmdpbmVGcmFtZSk7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1l
ID0gc3ltYm9sTmFtZShtX3NhbXBsZXNbbGFzdEVuZ2luZUZyYW1lXS5wYyk7CisgICAgICAgICAg
ICBjYWxsYmFja3MgPSBjYWxsYmFja3MtPnNhbXBsZUNoaWxkKG5hbWUpOworICAgICAgICAgICAg
aWYgKHRydW5jYXRlVHJhY2UobmFtZSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICAvLyBNb3ZlIG9uIHRvIHRoZSBuZXh0IHRyYWNlLgorICAgICAgICB0cmFj
ZSA9IGxhc3RJblRyYWNlICsgMTsKKyAgICAgICAgQVNTRVJUKHRyYWNlIDw9IG1fc2FtcGxlcy5z
aXplKCkpOworICAgIH0KKworICAgIC8vIE91dHB1dCB0aGUgcHJvZmlsZSB0cmVlLgorICAgIGZw
cmludGYoc3Rkb3V0LCAiVG90YWwgc2FtcGxlczogJWxsZFxuIiwgc3RhdGljX2Nhc3Q8bG9uZyBs
b25nPihwcm9maWxlLmNoaWxkQ291bnQoKSkpOworICAgIHByb2ZpbGUuZHVtcCgpOworICAgIAor
ICAgIGZvciAoc2l6ZV90IGkgPSAwIDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpCisgICAg
ICAgIG1fY2hpbGRyZW5baV0tPnJlcG9ydCgpOworCisgICAgZnByaW50ZihzdGRvdXQsICI8L0Nv
ZGVQcm9maWxpbmcgJXM6JWQ+XG4iLCBtX2ZpbGUuZGF0YSgpLCBtX2xpbmVObyk7Cit9CisKK30K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxlLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBDb2RlUHJvZmlsZV9oCisjZGVmaW5lIENvZGVQcm9maWxl
X2gKKworI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJUaWVyZWRNTWFwQXJyYXku
aCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBDb2RlUHJvZmlsZSB7CitwdWJsaWM6CisgICAgQ29kZVByb2ZpbGUoY29uc3QgU291cmNl
Q29kZSYgc291cmNlLCBDb2RlUHJvZmlsZSogcGFyZW50KQorICAgICAgICA6IG1fZmlsZShzb3Vy
Y2UucHJvdmlkZXIoKS0+dXJsKCkudXRmOCgpKQorICAgICAgICAsIG1fbGluZU5vKHNvdXJjZS5m
aXJzdExpbmUoKSkKKyAgICAgICAgLCBtX3BhcmVudChwYXJlbnQpCisgICAgeworICAgICAgICBp
ZiAocGFyZW50KQorICAgICAgICAgICAgcGFyZW50LT5hZGRDaGlsZCh0aGlzKTsKKyAgICB9CisK
KyAgICB2b2lkIHNhbXBsZSh2b2lkKiBwYywgdm9pZCoqIGZyYW1lUG9pbnRlcik7CisgICAgdm9p
ZCByZXBvcnQoKTsKKworICAgIENvZGVQcm9maWxlKiBwYXJlbnQoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fcGFyZW50OworICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZENoaWxkKENvZGVQcm9m
aWxlKiBjaGlsZCkKKyAgICB7CisgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKGFkb3B0UHRyKGNo
aWxkKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGVudW0gQ29kZVR5cGUgeworICAgICAgICBF
bmdpbmVDb2RlLAorICAgICAgICBHbG9iYWxUaHVuaywKKyAgICAgICAgUmVnRXhwQ29kZSwKKyAg
ICAgICAgREZHSklULAorICAgICAgICBCYXNlbGluZU9ubHksCisgICAgICAgIEJhc2VsaW5lUHJv
ZmlsZSwKKyAgICAgICAgQmFzZWxpbmVPU1IsCisgICAgICAgIEVuZ2luZUZyYW1lLAorICAgICAg
ICBOdW1iZXJPZkNvZGVUeXBlcworICAgIH07CisgICAgc3RydWN0IENvZGVSZWNvcmQgeworICAg
ICAgICBDb2RlUmVjb3JkKHZvaWQqIHBjLCBDb2RlVHlwZSB0eXBlKQorICAgICAgICAgICAgOiBw
YyhwYykKKyAgICAgICAgICAgICwgdHlwZSh0eXBlKQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICAgICAgdm9pZCogcGM7CisgICAgICAgIENvZGVUeXBlIHR5cGU7CisgICAgfTsKKworICAgIENT
dHJpbmcgbV9maWxlOworICAgIHVuc2lnbmVkIG1fbGluZU5vOworICAgIENvZGVQcm9maWxlKiBt
X3BhcmVudDsKKyAgICBWZWN0b3I8IE93blB0cjxDb2RlUHJvZmlsZT4gPiBtX2NoaWxkcmVuOwor
ICAgIFRpZXJlZE1NYXBBcnJheTxDb2RlUmVjb3JkPiBtX3NhbXBsZXM7CisKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogc19jb2RlVHlwZU5hbWVzW051bWJlck9mQ29kZVR5cGVzXTsKK307CisKK30K
KworI2VuZGlmIC8vIENvZGVQcm9maWxlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKKworI2luY2x1
ZGUgIkNvZGVQcm9maWxlLmgiCisjaW5jbHVkZSAiTWV0YUFsbG9jYXRvci5oIgorI2luY2x1ZGUg
InNpZ25hbC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9sYXRpbGUgQ29kZVByb2ZpbGUqIENv
ZGVQcm9maWxpbmc6OnNfcHJvZmlsZVN0YWNrID0gMDsKK0NvZGVQcm9maWxpbmc6Ok1vZGUgQ29k
ZVByb2ZpbGluZzo6c19tb2RlID0gQ29kZVByb2ZpbGluZzo6RGlzYWJsZWQ7CitXVEY6Ok1ldGFB
bGxvY2F0b3JUcmFja2VyKiBDb2RlUHJvZmlsaW5nOjpzX3RyYWNrZXIgPSAwOworCisvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gc3RhcnQgJiBzdG9wIHRoZSB0aW1lci4KKy8vIFByZXNlbnRseSB3ZSdy
ZSB1c2luZyB0aGUgd2FsbC1jbG9jayB0aW1lciwgc2luY2UgdGhpcyBzZWVtcyB0byBnaXZlIHRo
ZSBiZXN0IHJlc3VsdHMuCitzdGF0aWMgdm9pZCBzZXRQcm9maWxlVGltZXIodW5zaWduZWQgdXNl
YykKK3sKKyNpZiBQTEFURk9STShNQUMpICYmIENQVShYODZfNjQpCisgICAgaXRpbWVydmFsIHRp
bWVyOworICAgIHRpbWVyLml0X3ZhbHVlLnR2X3NlYyA9IDA7CisgICAgdGltZXIuaXRfdmFsdWUu
dHZfdXNlYyA9IHVzZWM7CisgICAgdGltZXIuaXRfaW50ZXJ2YWwudHZfc2VjID0gMDsKKyAgICB0
aW1lci5pdF9pbnRlcnZhbC50dl91c2VjID0gdXNlYzsKKyAgICBzZXRpdGltZXIoSVRJTUVSX1JF
QUwsICZ0aW1lciwgMCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh1c2VjKTsKKyAgICAvLyBU
aGlzIHBsYXRmb3JtIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIQorICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworI2VuZGlmCit9CisKKyNpZiBQTEFURk9STShNQUMpICYmIENQVShYODZfNjQpCitzdGF0
aWMgdm9pZCBwcm9maWxpbmdUaW1lcihpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVhcCkKK3sKKyAg
ICBtY29udGV4dF90IGNvbnRleHQgPSBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKS0+dWNf
bWNvbnRleHQ7CisgICAgQ29kZVByb2ZpbGluZzo6c2FtcGxlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KGNvbnRleHQtPl9fc3MuX19yaXApLAorICAgICAgICAgICAgICAgICAgICAgICAgICByZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4oY29udGV4dC0+X19zcy5fX3JicCkpOworfQorI2VuZGlmCisK
Ky8vIENhbGxiYWNrIHRyaWdnZXJlZCB3aGVuIHRoZSB0aW1lciBpcyBmaXJlZC4KK3ZvaWQgQ29k
ZVByb2ZpbGluZzo6c2FtcGxlKHZvaWQqIHBjLCB2b2lkKiogZnJhbWVQb2ludGVyKQoreworICAg
IENvZGVQcm9maWxlKiBwcm9maWxlU3RhY2sgPSBjb25zdF9jYXN0PENvZGVQcm9maWxlKj4oc19w
cm9maWxlU3RhY2spOworICAgIGlmIChwcm9maWxlU3RhY2spCisgICAgICAgIHByb2ZpbGVTdGFj
ay0+c2FtcGxlKHBjLCBmcmFtZVBvaW50ZXIpOworfQorCit2b2lkIENvZGVQcm9maWxpbmc6Om5v
dGlmeUFsbG9jYXRvcihXVEY6Ok1ldGFBbGxvY2F0b3IqIGFsbG9jYXRvcikKK3sKKyAgICAvLyBD
aGVjayBmb3IgSlNDX0NPREVfUFJPRklMSU5HLgorICAgIGNvbnN0IGNoYXIqIGNvZGVQcm9maWxp
bmdNb2RlID0gZ2V0ZW52KCJKU0NfQ09ERV9QUk9GSUxJTkciKTsKKyAgICBpZiAoIWNvZGVQcm9m
aWxpbmdNb2RlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDaGVjayBmb3IgYSB2YWxpZCBt
b2RlLCBjdXJyZW50bHkgIjEiLCAiMiIsIG9yICIzIi4KKyAgICBpZiAoIWNvZGVQcm9maWxpbmdN
b2RlWzBdIHx8IGNvZGVQcm9maWxpbmdNb2RlWzFdKQorICAgICAgICByZXR1cm47CisgICAgc3dp
dGNoICgqY29kZVByb2ZpbGluZ01vZGUpIHsKKyAgICBjYXNlICcxJzoKKyAgICAgICAgc19tb2Rl
ID0gRW5hYmxlZDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnMic6CisgICAgICAgIHNfbW9k
ZSA9IFZlcmJvc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJzMnOgorICAgICAgICBzX21v
ZGUgPSBWZXJ5VmVyYm9zZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChlbmFibGVkKCkpOworICAgIEFTU0VSVCghc190
cmFja2VyKTsKKyAgICBzX3RyYWNrZXIgPSBuZXcgV1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tlcigp
OworICAgIGFsbG9jYXRvci0+dHJhY2tBbGxvY2F0aW9ucyhzX3RyYWNrZXIpOworfQorCit2b2lk
KiBDb2RlUHJvZmlsaW5nOjpnZXRPd25lclVJREZvclBDKHZvaWQqIGFkZHJlc3MpCit7CisgICAg
aWYgKCFzX3RyYWNrZXIpCisgICAgICAgIHJldHVybiAwOworICAgIFdURjo6TWV0YUFsbG9jYXRv
ckhhbmRsZSogaGFuZGxlID0gc190cmFja2VyLT5maW5kKGFkZHJlc3MpOworICAgIGlmICghaGFu
ZGxlKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaGFuZGxlLT5vd25lclVJRCgpOwor
fQorCit2b2lkIENvZGVQcm9maWxpbmc6OmJlZ2luKGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkK
K3sKKyAgICAvLyBQdXNoIGEgbmV3IENvZGVQcm9maWxlIG9udG8gdGhlIHN0YWNrIGZvciBlYWNo
IHNjcmlwdCBlbmNvdW50ZXJlZC4KKyAgICBDb2RlUHJvZmlsZSogcHJvZmlsZVN0YWNrID0gY29u
c3RfY2FzdDxDb2RlUHJvZmlsZSo+KHNfcHJvZmlsZVN0YWNrKTsKKyAgICBib29sIGFscmVhZHlQ
cm9maWxpbmcgPSBwcm9maWxlU3RhY2s7CisgICAgc19wcm9maWxlU3RhY2sgPSBwcm9maWxlU3Rh
Y2sgPSBuZXcgQ29kZVByb2ZpbGUoc291cmNlLCBwcm9maWxlU3RhY2spOworCisgICAgLy8gSXMg
dGhlIHByb2ZpbGVyIGFscmVhZHkgcnVubmluZyAtIGlmIHNvLCB0aGUgdGltZXIgd2lsbCBhbHJl
YWR5IGJlIHNldCB1cC4KKyAgICBpZiAoYWxyZWFkeVByb2ZpbGluZykKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gUmVnc2l0ZXIgYSBzaWduYWwgaGFuZGxlciAmIGl0aW1lci4KKyNpZiBQTEFU
Rk9STShNQUMpICYmIENQVShYODZfNjQpCisgICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247Cisg
ICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCAoKikoaW50LCBz
dHJ1Y3QgX19zaWdpbmZvICosIHZvaWQgKik+KHByb2ZpbGluZ1RpbWVyKTsKKyAgICBzaWdmaWxs
c2V0KCZhY3Rpb24uc2FfbWFzayk7CisgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsK
KyAgICBzaWdhY3Rpb24oU0lHQUxSTSwgJmFjdGlvbiwgMCk7CisjZW5kaWYKKyAgICBzZXRQcm9m
aWxlVGltZXIoMTAwKTsKK30KKwordm9pZCBDb2RlUHJvZmlsaW5nOjplbmQoKQoreworICAgIC8v
IFBvcCB0aGUgY3VycmVudCBwcm9maWxlciBvZmYgdGhlIHN0YWNrLgorICAgIENvZGVQcm9maWxl
KiBjdXJyZW50ID0gY29uc3RfY2FzdDxDb2RlUHJvZmlsZSo+KHNfcHJvZmlsZVN0YWNrKTsKKyAg
ICBBU1NFUlQoY3VycmVudCk7CisgICAgc19wcm9maWxlU3RhY2sgPSBjdXJyZW50LT5wYXJlbnQo
KTsKKworICAgIC8vIElzIHRoaXMgdGhlIG91dGVybW9zdCBzY3JpcHQgYmVpbmcgcHJvZmlsZWQ/
IC0gaWYgbm90LCBqdXN0IHJldHVybi4KKyAgICAvLyBXZSBwZXJmb3JtIGFsbCBvdXRwdXQgb2Yg
cHJvZmlsZXMgcmVjdXJzaXZlbHkgZnJvbSB0aGUgb3V0ZXJtb3N0IHNjcmlwdCwKKyAgICAvLyB0
byBtaW5pbWl6ZSBwcm9maWxpbmcgb3ZlcmhlYWQgZnJvbSBza2V3aW5nIHJlc3VsdHMuCisgICAg
aWYgKHNfcHJvZmlsZVN0YWNrKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBTdG9wIHByb2Zp
bGluZworICAgIHNldFByb2ZpbGVUaW1lcigwKTsKKworICAgIGN1cnJlbnQtPnJlcG9ydCgpOwor
ICAgIGRlbGV0ZSBjdXJyZW50OworfQorCit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvQ29kZVByb2ZpbGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9Db2RlUHJvZmlsaW5nLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
Q29kZVByb2ZpbGluZ19oCisjZGVmaW5lIENvZGVQcm9maWxpbmdfaAorCituYW1lc3BhY2UgV1RG
IHsKKworY2xhc3MgTWV0YUFsbG9jYXRvcjsKK2NsYXNzIE1ldGFBbGxvY2F0b3JUcmFja2VyOwor
Cit9CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlUHJvZmlsZTsKK2NsYXNzIFNvdXJj
ZUNvZGU7CisKK2NsYXNzIENvZGVQcm9maWxpbmcgeworICAgIGVudW0gTW9kZSB7CisgICAgICAg
IERpc2FibGVkLAorICAgICAgICBFbmFibGVkLAorICAgICAgICBWZXJib3NlLAorICAgICAgICBW
ZXJ5VmVyYm9zZQorICAgIH07CisKK3B1YmxpYzoKKyAgICBDb2RlUHJvZmlsaW5nKGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZSkKKyAgICAgICAgOiBtX2FjdGl2ZShlbmFibGVkKCkpCisgICAgewor
ICAgICAgICBpZiAobV9hY3RpdmUpCisgICAgICAgICAgICBiZWdpbihzb3VyY2UpOworICAgIH0K
KworICAgIH5Db2RlUHJvZmlsaW5nKCkKKyAgICB7CisgICAgICAgIGlmIChtX2FjdGl2ZSkKKyAg
ICAgICAgICAgIGVuZCgpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGVuYWJsZWQoKSB7IHJl
dHVybiBzX21vZGUgIT0gRGlzYWJsZWQ7IH0KKyAgICBzdGF0aWMgYm9vbCBiZVZlcmJvc2UoKSB7
IHJldHVybiBzX21vZGUgPj0gVmVyYm9zZTsgfQorICAgIHN0YXRpYyBib29sIGJlVmVyeVZlcmJv
c2UoKSB7IHJldHVybiBzX21vZGUgPj0gVmVyeVZlcmJvc2U7IH0KKworICAgIHN0YXRpYyB2b2lk
IG5vdGlmeUFsbG9jYXRvcihXVEY6Ok1ldGFBbGxvY2F0b3IqKTsKKyAgICBzdGF0aWMgdm9pZCog
Z2V0T3duZXJVSURGb3JQQyh2b2lkKik7CisgICAgc3RhdGljIHZvaWQgc2FtcGxlKHZvaWQqIHBj
LCB2b2lkKiogZnJhbWVQb2ludGVyKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGJlZ2luKGNvbnN0
IFNvdXJjZUNvZGUmKTsKKyAgICB2b2lkIGVuZCgpOworCisgICAgYm9vbCBtX2FjdGl2ZTsKKwor
ICAgIHN0YXRpYyBNb2RlIHNfbW9kZTsKKyAgICBzdGF0aWMgV1RGOjpNZXRhQWxsb2NhdG9yVHJh
Y2tlciogc190cmFja2VyOworICAgIHN0YXRpYyB2b2xhdGlsZSBDb2RlUHJvZmlsZSogc19wcm9m
aWxlU3RhY2s7Cit9OworCit9CisKKyNlbmRpZiAvLyBDb2RlUHJvZmlsaW5nX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2ZpbGVUcmVlTm9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQcm9maWxlVHJlZU5vZGVfaAorI2RlZmluZSBQ
cm9maWxlVHJlZU5vZGVfaAorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgUHJvZmlsZVRyZWVO
b2RlIHsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBQcm9maWxlVHJlZU5vZGU+IE1hcDsK
KyAgICB0eXBlZGVmIHN0ZDo6cGFpcjxTdHJpbmcsIFByb2ZpbGVUcmVlTm9kZT4gTWFwRW50cnk7
CisKK3B1YmxpYzoKKyAgICBQcm9maWxlVHJlZU5vZGUoKQorICAgICAgICA6IG1fY291bnQoMCkK
KyAgICAgICAgLCBtX2NoaWxkcmVuKDApCisgICAgeworICAgIH0KKworICAgIH5Qcm9maWxlVHJl
ZU5vZGUoKQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1fY2hpbGRyZW47CisgICAgfQorCisgICAg
UHJvZmlsZVRyZWVOb2RlKiBzYW1wbGVDaGlsZChjb25zdCBjaGFyKiBuYW1lKQorICAgIHsKKyAg
ICAgICAgaWYgKCFtX2NoaWxkcmVuKQorICAgICAgICAgICAgbV9jaGlsZHJlbiA9IG5ldyBNYXAo
KTsKKyAgICAKKyAgICAgICAgUHJvZmlsZVRyZWVOb2RlIG5ld0VudHJ5OworICAgICAgICBwYWly
PE1hcDo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fY2hpbGRyZW4tPmFkZChTdHJpbmcobmFt
ZSksIG5ld0VudHJ5KTsKKyAgICAgICAgUHJvZmlsZVRyZWVOb2RlKiBjaGlsZEluTWFwID0gJnJl
c3VsdC5maXJzdC0+c2Vjb25kOworICAgICAgICArK2NoaWxkSW5NYXAtPm1fY291bnQ7CisgICAg
ICAgIHJldHVybiBjaGlsZEluTWFwOworICAgIH0KKworICAgIHZvaWQgZHVtcCgpCisgICAgewor
ICAgICAgICBkdW1wSW50ZXJuYWwoMCk7CisgICAgfQorCisgICAgdWludDY0X3QgY291bnQoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY291bnQ7CisgICAgfQorCisgICAgdWludDY0X3QgY2hp
bGRDb3VudCgpCisgICAgeworICAgICAgICBpZiAoIW1fY2hpbGRyZW4pCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgdWludDY0X3QgY2hpbGRDb3VudCA9IDA7CisgICAgICAgIGZvciAo
TWFwOjppdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4tPmJlZ2luKCk7IGl0ICE9IG1fY2hpbGRyZW4t
PmVuZCgpOyArK2l0KQorICAgICAgICAgICAgY2hpbGRDb3VudCArPSBpdC0+c2Vjb25kLmNvdW50
KCk7CisgICAgICAgIHJldHVybiBjaGlsZENvdW50OworICAgIH0KKyAgICAKK3ByaXZhdGU6Cisg
ICAgdm9pZCBkdW1wSW50ZXJuYWwodW5zaWduZWQgaW5kZW50KQorICAgIHsKKyAgICAgICAgaWYg
KCFtX2NoaWxkcmVuKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIENvcHkgcG9p
bnRlcnMgdG8gYWxsIGNoaWxkcmVuIGludG8gYSB2ZWN0b3IsIGFuZCBzb3J0IHRoZSB2ZWN0b3Ig
Ynkgc2FtcGxlIGNvdW50LgorICAgICAgICBWZWN0b3I8TWFwRW50cnkqPiBlbnRyaWVzOworICAg
ICAgICBmb3IgKE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLT5iZWdpbigpOyBpdCAhPSBt
X2NoaWxkcmVuLT5lbmQoKTsgKytpdCkKKyAgICAgICAgICAgIGVudHJpZXMuYXBwZW5kKCYqaXQp
OworICAgICAgICBxc29ydChlbnRyaWVzLmJlZ2luKCksIGVudHJpZXMuc2l6ZSgpLCBzaXplb2Yo
TWFwRW50cnkqKSwgY29tcGFyZUVudHJpZXMpOworCisgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciB0
aGUgY2hpbGRyZW4gaW4gc2FtcGxlLWZyZXF1ZW5jeSBvcmRlci4KKyAgICAgICAgZm9yIChzaXpl
X3QgZSA9IDA7IGUgPCBlbnRyaWVzLnNpemUoKTsgKytlKSB7CisgICAgICAgICAgICBNYXBFbnRy
eSogZW50cnkgPSBlbnRyaWVzW2VdOworCisgICAgICAgICAgICAvLyBQcmludCB0aGUgbnVtYmVy
IG9mIHNhbXBsZXMsIHRoZSBuYW1lIG9mIHRoaXMgbm9kZSwgYW5kIHRoZSBudW1iZXIgb2Ygc2Ft
cGxlcyB0aGF0IGFyZSBzdGFjay10b3AKKyAgICAgICAgICAgIC8vIGluIHRoaXMgbm9kZSAoc2Ft
cGxlcyBkaXJlY3RseSB3aXRoaW4gdGhpcyBub2RlLCBleGNsdWRpbmcgc2FtcGxlcyBpbiBjaGls
ZHJlbi4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmRlbnQ7ICsraSkK
KyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIiAgICAiKTsKKyAgICAgICAgICAgIGZw
cmludGYoc3Rkb3V0LCAiJSA4bGxkOiAlcyAoJWxsZCBzdGFjayB0b3ApXG4iLAorICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oZW50cnktPnNlY29uZC5jb3VudCgpKSwKKyAg
ICAgICAgICAgICAgICBlbnRyeS0+Zmlyc3QudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGVudHJ5LT5zZWNvbmQuY291bnQoKSAtIGVudHJ5LT5z
ZWNvbmQuY2hpbGRDb3VudCgpKSk7CisKKyAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGR1bXAg
dGhlIGNoaWxkIG5vZGVzLgorICAgICAgICAgICAgZW50cnktPnNlY29uZC5kdW1wSW50ZXJuYWwo
aW5kZW50ICsgMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGNvbXBhcmVF
bnRyaWVzKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCisgICAgeworICAgICAgICB1aW50
NjRfdCBkYSA9ICgqc3RhdGljX2Nhc3Q8TWFwRW50cnkqIGNvbnN0ICo+KGEpKS0+c2Vjb25kLmNv
dW50KCk7CisgICAgICAgIHVpbnQ2NF90IGRiID0gKCpzdGF0aWNfY2FzdDxNYXBFbnRyeSogY29u
c3QgKj4oYikpLT5zZWNvbmQuY291bnQoKTsKKyAgICAgICAgcmV0dXJuIChkYSA8IGRiKSAtIChk
YSA+IGRiKTsKKyAgICB9CisKKyAgICB1aW50NjRfdCBtX2NvdW50OworICAgIE1hcCogbV9jaGls
ZHJlbjsKK307CisKK30KKworI2VuZGlmIC8vIFByb2ZpbGVUcmVlTm9kZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9UaWVyZWRNTWFwQXJyYXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVGllcmVkTU1hcEFycmF5LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVGllcmVkTU1hcEFycmF5LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVGllcmVkTU1hcEFycmF5X2gKKyNkZWZpbmUgVGll
cmVkTU1hcEFycmF5X2gKKworI2luY2x1ZGUgIk9TQWxsb2NhdG9yLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCisvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSBzaW1wbGUgYXJyYXkgY2xhc3MgdGhh
dCBjYW4gYmUgZ3Jvd24gYnkgYXBwZW5kaW5nIGl0ZW1zIHRvIHRoZSBlbmQuCisvLyBUaGlzIGNs
YXNzIGlzIGltcGxlbWVudGVkIHB1cmVseSBpbiB0ZXJtcyBvZiBzeXN0ZW0gYWxsb2NhdGlvbnMs
IHdpdGggbm8gbWFsbG9jL2ZyZWUsIHNvIHRoYXQKKy8vIGl0IGNhbiBzYWZlbHkgYmUgdXNlZCBm
cm9tIGEgc2Vjb25kYXJ5IHRocmVhZCB3aGlsc3QgdGhlIG1haW4gdGhyYWQgaXMgcGF1c2VkIChw
b3RlbnRpYWxseQorLy8gaG9sZGluZyB0aGUgZmFzdCBtYWxsb2MgaGVhcCBsb2NrKS4KK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBUaWVyZWRNTWFwQXJyYXkgeworICAgIHN0YXRpYyBjb25z
dCBzaXplX3QgZW50cmllc1BlckJsb2NrID0gNDA5NjsKKworcHVibGljOgorICAgIFRpZXJlZE1N
YXBBcnJheSgpCisgICAgICAgIDogbV9kaXJlY3RvcnlDb3VudCg0MDk2KQorICAgICAgICAsIG1f
ZGlyZWN0b3J5KHN0YXRpY19jYXN0PFQqKj4oT1NBbGxvY2F0b3I6OnJlc2VydmVBbmRDb21taXQo
bV9kaXJlY3RvcnlDb3VudCAqIHNpemVvZihUKikpKSkKKyAgICAgICAgLCBtX3NpemUoMCkKKyAg
ICB7CisgICAgICAgIGZvciAoc2l6ZV90IGJsb2NrID0gMDsgYmxvY2sgPCBtX2RpcmVjdG9yeUNv
dW50OyArK2Jsb2NrKQorICAgICAgICAgICAgbV9kaXJlY3RvcnlbYmxvY2tdID0gMDsKKyAgICB9
CisKKyAgICB+VGllcmVkTU1hcEFycmF5KCkKKyAgICB7CisgICAgICAgIHNpemVfdCB1c2VkQ291
bnQgPSAobV9zaXplICsgKGVudHJpZXNQZXJCbG9jayAtIDEpKSAvIGVudHJpZXNQZXJCbG9jazsK
KyAgICAgICAgQVNTRVJUKHVzZWRDb3VudCA9PSBtX2RpcmVjdG9yeUNvdW50IHx8ICFtX2RpcmVj
dG9yeVt1c2VkQ291bnRdKTsKKworICAgICAgICBmb3IgKHNpemVfdCBibG9jayA9IDA7IGJsb2Nr
IDwgdXNlZENvdW50OyArK2Jsb2NrKSB7CisgICAgICAgICAgICBBU1NFUlQobV9kaXJlY3Rvcnlb
YmxvY2tdKTsKKyAgICAgICAgICAgIE9TQWxsb2NhdG9yOjpkZWNvbW1pdEFuZFJlbGVhc2UobV9k
aXJlY3RvcnlbYmxvY2tdLCBlbnRyaWVzUGVyQmxvY2sgKiBzaXplb2YoVCkpOworICAgICAgICB9
CisKKyAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZShtX2RpcmVjdG9yeSwg
bV9kaXJlY3RvcnlDb3VudCAqIHNpemVvZihUKikpOworICAgIH0KKworICAgIFQmIG9wZXJhdG9y
W10oc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgbV9zaXplKTsK
KyAgICAgICAgc2l6ZV90IGJsb2NrID0gaW5kZXggLyBlbnRyaWVzUGVyQmxvY2s7CisgICAgICAg
IHNpemVfdCBvZmZzZXQgPSBpbmRleCAlIGVudHJpZXNQZXJCbG9jazsKKworICAgICAgICBBU1NF
UlQobV9kaXJlY3RvcnlbYmxvY2tdKTsKKyAgICAgICAgcmV0dXJuIG1fZGlyZWN0b3J5W2Jsb2Nr
XVtvZmZzZXRdOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kKGNvbnN0IFQmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGFycmF5IGlzIGNvbXBsZXRlbHkgZnVsbCwgaWYg
c28gY3JlYXRlIG1vcmUgY2FwYWNpdHkgaW4gdGhlIGRpcmVjdG9yeS4KKyAgICAgICAgaWYgKG1f
c2l6ZSA9PSBtX2RpcmVjdG9yeUNvdW50ICogZW50cmllc1BlckJsb2NrKSB7CisgICAgICAgICAg
ICAvLyBSZWFsbG9jYXRlIHRoZSBkaXJlY3RvcnkuCisgICAgICAgICAgICBzaXplX3Qgb2xkRGly
ZWN0b3J5U2l6ZSA9IG1fZGlyZWN0b3J5Q291bnQgKiBzaXplb2YoVCopOworICAgICAgICAgICAg
c2l6ZV90IG5ld0RpcmVjdG9yeVNpemUgPSBvbGREaXJlY3RvcnlTaXplICogMjsKKyAgICAgICAg
ICAgIGlmIChuZXdEaXJlY3RvcnlTaXplIDwgb2xkRGlyZWN0b3J5U2l6ZSkKKyAgICAgICAgICAg
ICAgICBDUkFTSCgpOworICAgICAgICAgICAgbV9kaXJlY3RvcnkgPSBPU0FsbG9jYXRvcjo6cmVh
bGxvY2F0ZUNvbW1pdHRlZChtX2RpcmVjdG9yeSwgb2xkRGlyZWN0b3J5U2l6ZSwgbmV3RGlyZWN0
b3J5U2l6ZSk7CisKKyAgICAgICAgICAgIC8vIAorICAgICAgICAgICAgc2l6ZV90IG5ld0RpcmVj
dG9yeUNvdW50ID0gbV9kaXJlY3RvcnlDb3VudCAqIDI7CisgICAgICAgICAgICBmb3IgKHNpemVf
dCBibG9jayA9IG1fZGlyZWN0b3J5Q291bnQ7IGJsb2NrIDwgbmV3RGlyZWN0b3J5Q291bnQ7ICsr
YmxvY2spCisgICAgICAgICAgICAgICAgbV9kaXJlY3RvcnlbYmxvY2tdID0gMDsKKyAgICAgICAg
ICAgIG1fZGlyZWN0b3J5Q291bnQgPSBuZXdEaXJlY3RvcnlDb3VudDsKKyAgICAgICAgfQorCisg
ICAgICAgIHNpemVfdCBpbmRleCA9IG1fc2l6ZTsKKyAgICAgICAgc2l6ZV90IGJsb2NrID0gaW5k
ZXggLyBlbnRyaWVzUGVyQmxvY2s7CisgICAgICAgIHNpemVfdCBvZmZzZXQgPSBpbmRleCAlIGVu
dHJpZXNQZXJCbG9jazsKKworICAgICAgICBpZiAoIW9mZnNldCkgeworICAgICAgICAgICAgQVNT
RVJUKCFtX2RpcmVjdG9yeVtibG9ja10pOworICAgICAgICAgICAgbV9kaXJlY3RvcnlbYmxvY2td
ID0gc3RhdGljX2Nhc3Q8VCo+KE9TQWxsb2NhdG9yOjpyZXNlcnZlQW5kQ29tbWl0KGVudHJpZXNQ
ZXJCbG9jayAqIHNpemVvZihUKSkpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKG1fZGly
ZWN0b3J5W2Jsb2NrXSk7CisgICAgICAgICsrbV9zaXplOworICAgICAgICBtX2RpcmVjdG9yeVti
bG9ja11bb2Zmc2V0XSA9IHZhbHVlOworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplOyB9CisKK3ByaXZhdGU6CisgICAgc2l6ZV90IG1fZGlyZWN0b3J5Q291
bnQ7CisgICAgVCoqIG1fZGlyZWN0b3J5OworICAgIHNpemVfdCBtX3NpemU7Cit9OworCit9CisK
KyNlbmRpZiAvLyBUaWVyZWRNTWFwQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL01ldGFBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvTWV0YUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1
LDEwICs1NSwxMSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgTWV0YUFsbG9jYXRvcjo6cmVsZWFzCiAg
ICAgICAgIG1fdHJhY2tlci0+cmVsZWFzZShoYW5kbGUpOwogfQogCi1NZXRhQWxsb2NhdG9ySGFu
ZGxlOjpNZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0b3IqIGFsbG9jYXRvciwgdm9pZCog
c3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKK01ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxv
Y2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciogYWxsb2NhdG9yLCB2b2lkKiBzdGFydCwgc2l6ZV90
IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCkKICAgICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRv
cikKICAgICAsIG1fc3RhcnQoc3RhcnQpCiAgICAgLCBtX3NpemVJbkJ5dGVzKHNpemVJbkJ5dGVz
KQorICAgICwgbV9vd25lclVJRChvd25lclVJRCkKIHsKICAgICBBU1NFUlQoYWxsb2NhdG9yKTsK
ICAgICBBU1NFUlQoc3RhcnQpOwpAQCAtMTI5LDcgKzEzMCw3IEBAIE1ldGFBbGxvY2F0b3I6Ok1l
dGFBbGxvY2F0b3Ioc2l6ZV90IGFsbG8KICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90Pigx
KSA8PCBtX2xvZ0FsbG9jYXRpb25HcmFudWxlID09IG1fYWxsb2NhdGlvbkdyYW51bGUpOwogfQog
Ci1QYXNzUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IE1ldGFBbGxvY2F0b3I6OmFsbG9jYXRl
KHNpemVfdCBzaXplSW5CeXRlcykKK1Bhc3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0
YUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCkK
IHsKICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CiAKQEAgLTE2Nyw3ICsxNjgs
NyBAQCBQYXNzUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IE1ldGFBbGxvCiAgICAgbV9udW1B
bGxvY2F0aW9ucysrOwogI2VuZGlmCiAKLSAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUg
PSBuZXcgTWV0YUFsbG9jYXRvckhhbmRsZSh0aGlzLCBzdGFydCwgc2l6ZUluQnl0ZXMpOworICAg
IE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IG5ldyBNZXRhQWxsb2NhdG9ySGFuZGxlKHRo
aXMsIHN0YXJ0LCBzaXplSW5CeXRlcywgb3duZXJVSUQpOwogICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgYSB2ZXJpZmllciBzY2hlbWUgdGhhdCBncm9rcyBNZXRhQWxsb2NhdG9ySGFuZGxlcwogICAg
IGhhbmRsZS0+ZGVwcmVjYXRlZFR1cm5PZmZWZXJpZmllcigpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuaAkocmV2aXNpb24gMTA2MTUwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY3LDcgKzY3LDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgfk1ldGFBbGxvY2F0b3Io
KTsKICAgICAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9y
SGFuZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBQYXNzUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXpl
SW5CeXRlcywgdm9pZCogb3duZXJVSUQpOwogCiAgICAgdm9pZCB0cmFja0FsbG9jYXRpb25zKE1l
dGFBbGxvY2F0b3JUcmFja2VyKiB0cmFja2VyKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCShyZXZpc2lvbiAxMDYxNTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBjbGFzcyBNZXRhQWxsb2NhdG9yOwogCiBjbGFz
cyBNZXRhQWxsb2NhdG9ySGFuZGxlIDogcHVibGljIFJlZkNvdW50ZWQ8TWV0YUFsbG9jYXRvckhh
bmRsZT4sIHB1YmxpYyBSZWRCbGFja1RyZWU8TWV0YUFsbG9jYXRvckhhbmRsZSwgdm9pZCo+OjpO
b2RlIHsKIHByaXZhdGU6Ci0gICAgTWV0YUFsbG9jYXRvckhhbmRsZShNZXRhQWxsb2NhdG9yKiwg
dm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcyk7CisgICAgTWV0YUFsbG9jYXRvckhhbmRs
ZShNZXRhQWxsb2NhdG9yKiwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCog
b3duZXJVSUQpOwogICAgIAogcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+TWV0YUFs
bG9jYXRvckhhbmRsZSgpOwpAQCAtNzIsNyArNzIsMTIgQEAgcHVibGljOgogICAgICAgICBBU1NF
UlQobV9hbGxvY2F0b3IpOwogICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3I7CiAgICAgfQotICAg
IAorCisgICAgdm9pZCogb3duZXJVSUQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3duZXJV
SUQ7CisgICAgfQorCiAgICAgdm9pZCoga2V5KCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX3N0
YXJ0OwpAQCAtODQsNiArODksNyBAQCBwcml2YXRlOgogICAgIE1ldGFBbGxvY2F0b3IqIG1fYWxs
b2NhdG9yOwogICAgIHZvaWQqIG1fc3RhcnQ7CiAgICAgc2l6ZV90IG1fc2l6ZUluQnl0ZXM7Cisg
ICAgdm9pZCogbV9vd25lclVJRDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvT1NBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL09TQWxsb2NhdG9yLmgJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvT1NBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAog
I2lmbmRlZiBPU0FsbG9jYXRvcl9oCiAjZGVmaW5lIE9TQWxsb2NhdG9yX2gKIAorI2luY2x1ZGUg
PGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KICNpbmNsdWRlIDx3dGYv
Vk1UYWdzLmg+CiAjaW5jbHVkZSA8d3RmL1ZNVGFncy5oPgpAQCAtNjUsNiArNjYsMTIgQEAgcHVi
bGljOgogICAgIC8vIHNwZWNpZmllZC4KICAgICBzdGF0aWMgdm9pZCogcmVzZXJ2ZUFuZENvbW1p
dChzaXplX3QgcmVzZXJ2ZVNpemUsIHNpemVfdCBjb21taXRTaXplLCBVc2FnZSA9IFVua25vd25V
c2FnZSwgYm9vbCB3cml0YWJsZSA9IHRydWUsIGJvb2wgZXhlY3V0YWJsZSA9IGZhbHNlKTsKICAg
ICBzdGF0aWMgdm9pZCBkZWNvbW1pdEFuZFJlbGVhc2Uodm9pZCogcmVsZWFzZUJhc2UsIHNpemVf
dCByZWxlYXNlU2l6ZSwgdm9pZCogZGVjb21taXRCYXNlLCBzaXplX3QgZGVjb21taXRTaXplKTsK
KworICAgIC8vIFJlYWxsb2NhdGUgYW4gZXhpc3RpbmcsIGNvbW1pdHRlZCBhbGxvY2F0aW9uLgor
ICAgIC8vIFRoZSBwcmlvciBhbGxvY2F0aW9uIG11c3QgYmUgZnVsbHkgY29taXR0ZWQsIGFuZCB0
aGUgbmV3IHNpemUgd2lsbCBhbHNvIGJlIGZ1bGx5IGNvbW1pdHRlZC4KKyAgICAvLyBUaGlzIGlu
dGVyZmFjZSBpcyBwcm92aWRlZCBzaW5jZSBpdCBtYXkgYmUgcG9zc2libGUgdG8gb3B0aW1pemUg
dGhpcyBvcGVyYXRpb24gb24gc29tZSBwbGF0Zm9ybXMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICBzdGF0aWMgVCogcmVhbGxvY2F0ZUNvbW1pdHRlZChUKiwgc2l6ZV90IG9sZFNpemUs
IHNpemVfdCBuZXdTaXplLCBVc2FnZSA9IFVua25vd25Vc2FnZSwgYm9vbCB3cml0YWJsZSA9IHRy
dWUsIGJvb2wgZXhlY3V0YWJsZSA9IGZhbHNlKTsKIH07CiAKIGlubGluZSB2b2lkKiBPU0FsbG9j
YXRvcjo6cmVzZXJ2ZUFuZENvbW1pdChzaXplX3QgcmVzZXJ2ZVNpemUsIHNpemVfdCBjb21taXRT
aXplLCBVc2FnZSB1c2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQpAQCAtOTMs
NiArMTAwLDE1IEBAIGlubGluZSB2b2lkIE9TQWxsb2NhdG9yOjpkZWNvbW1pdEFuZFJlbGUKICAg
ICBkZWNvbW1pdEFuZFJlbGVhc2UoYmFzZSwgc2l6ZSwgYmFzZSwgc2l6ZSk7CiB9CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgVCogT1NBbGxvY2F0b3I6OnJlYWxsb2NhdGVDb21taXR0
ZWQoVCogb2xkQmFzZSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplLCBVc2FnZSB1c2Fn
ZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQoreworICAgIHZvaWQqIG5ld0Jhc2Ug
PSByZXNlcnZlQW5kQ29tbWl0KG5ld1NpemUsIHVzYWdlLCB3cml0YWJsZSwgZXhlY3V0YWJsZSk7
CisgICAgbWVtY3B5KG5ld0Jhc2UsIG9sZEJhc2UsIHN0ZDo6bWluKG9sZFNpemUsIG5ld1NpemUp
KTsKKyAgICBkZWNvbW1pdEFuZFJlbGVhc2Uob2xkQmFzZSwgb2xkU2l6ZSk7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFQqPihuZXdCYXNlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVz
aW5nIFdURjo6T1NBbGxvY2F0b3I7Cg==
</data>
<flag name="commit-queue"
          id="125663"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124418</attachid>
            <date>2012-01-27 18:27:01 -0800</date>
            <delta_ts>2012-01-27 18:34:33 -0800</delta_ts>
            <desc>More build fixes (patch already reviewed by oliver)</desc>
            <filename>76855.A.patch</filename>
            <type>text/plain</type>
            <size>59322</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA2MTUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDEyLTAxLTI3ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBJbXBsZW1lbnQgYSBKSVQtY29kZSBhd2FyZSBzYW1wbGluZyBwcm9maWxlciBm
b3IgSlNDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
Njg1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgorCisgICAgICAgIFRvIGVu
YWJsZSB0aGUgcHJvZmlsZXIsIHNldCB0aGUgSlNDX0NPREVfUFJPRklMSU5HIGVudmlyb25tZW50
IHZhcmlhYmxlIHRvCisgICAgICAgIDEgKG5vIHRyYWNpbmcgdGhlIEMgc3RhY2spLCAyICh0cmFj
ZSBvbmUgbGV2ZWwgb2YgQyBjb2RlKSBvciAzIChyZWN1cnNpdmVseQorICAgICAgICB0cmFjZSBh
bGwgc2FtcGxlcykuCisKKyAgICAgICAgVGhlIHByb2ZpbGVyIHJlcXVpcmVzIC1mb21pdC1mcmFt
ZS1wb2ludGVyIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgYnVpbGQgZmxhZ3MuCisKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICAgICAtIFJlbW92ZWQgYW4gZXhwb3J0Lgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICAgICAtIEFkZGVkIG5ldyBmaWxlcworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgICAgICAtIEZvciBiYXNlbGluZSBjb2RlYmxvY2tzLCBjYWNoZSB0aGUgcmVz
dWx0IG9mIGNhbkNvbXBpbGVXaXRoREZHLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5o
OgorICAgICAgICAgICAgLSBGb3IgYmFzZWxpbmUgY29kZWJsb2NrcywgY2FjaGUgdGhlIHJlc3Vs
dCBvZiBjYW5Db21waWxlV2l0aERGRy4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxv
Y2F0b3IpOgorICAgICAgICAgICAgLSBOb3RpZnkgdGhlIHByb2ZpbGVyIHdoZW4gdGhlIGFsbG9j
YXRvciBpcyBjcmVhdGVkLgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxv
Y2F0ZSk6CisgICAgICAgICAgICAtIEluZm9ybSB0aGUgYWxsb2NhdGVkIG9mIHRoZSBvd25lclVJ
RC4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcDoKKyAg
ICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG9jYXRvcik6Cisg
ICAgICAgICAgICAtIE5vdGlmeSB0aGUgcHJvZmlsZXIgd2hlbiB0aGUgYWxsb2NhdG9yIGlzIGNy
ZWF0ZWQuCisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAg
ICAgICAgICAgIC0gSW5mb3JtIHRoZSBhbGxvY2F0ZWQgb2YgdGhlIG93bmVyVUlELgorICAgICAg
ICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgICAgICAtIElmIHByb2ZpbGluZywgZG9uJ3Qg
bWFzayB0aGUgcmV0dXJuIGFkZHJlc3MgaW4gSklUIGNvZGUuCisgICAgICAgICAgICAgIChXZSBk
byBzbyB0byBwcm92aWRlIG5pY2VyIGJhY2t0cmFjZXMgaW4gZGVidWcgYnVpbGRzKS4KKyAgICAg
ICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpldmFsdWF0ZSk6Cisg
ICAgICAgICAgICAtIE5vdGlmeSB0aGUgcHJvZmlsZXIgb2Ygc2NyaXB0IGV2YWx1YXRpb25zLgor
ICAgICAgICAqIHRvb2xzOiBBZGRlZC4KKyAgICAgICAgKiB0b29scy9Db2RlUHJvZmlsZS5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpzeW1ib2xOYW1lKToKKyAgICAgICAgICAgIC0gSGVscGVy
IGZ1bmN0aW9uIHRvIGdldCB0aGUgbmFtZSBvZiBhIHN5bWJvbCBpbiB0aGUgZnJhbWV3b3JrLgor
ICAgICAgICAoSlNDOjp0cnVuY2F0ZVRyYWNlKToKKyAgICAgICAgICAgIC0gSGVscGVyIHRvIHRy
dW5jYXRlIHRyYWNlcyBpbnRvIG1ldGhvZHMga25vdyB0byBoYXZlIHVuaW5mb3JtYXRpdmVseSBk
ZWVwIHN0YWNrcy4KKyAgICAgICAgKEpTQzo6Q29kZVByb2ZpbGU6OnNhbXBsZSk6CisgICAgICAg
ICAgICAtIFJlY29yZCBhIHN0YWNrIHRyYWNlIGNsYXNzaWZ5aW5nIHNhbXBsZXMuCisgICAgICAg
IChKU0M6OkNvZGVQcm9maWxlOjpyZXBvcnQpOgorICAgICAgICAgICAgLSB7UHJpbnQgcHJvZmls
ZXIgb3V0cHV0LgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxlLmg6IEFkZGVkLgorICAgICAg
ICAgICAgLSBuZXcgY2xhc3MsIGNhcHR1cmVzIGEgc2V0IG9mIHNhbXBsZXMgYXNzb2NpYXRlZCB3
aXRoIGFuIGV2YWx1YXRlZCBzY3JpcHQsCisgICAgICAgICAgICAgIGFuZCBuZXN0ZWQgdG8gcmVj
b3JkIHNhbXBsZXMgZnJvbSBzdWJzY3JpcHRzLgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxp
bmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q29kZVByb2ZpbGluZzo6cHJvZmlsaW5nVGlt
ZXIpOgorICAgICAgICAgICAgLSBjYWxsYmFjayBmaXJlZCB0aGVuIGEgdGltZXIgZXZlbnQgb2Nj
dXJzLgorICAgICAgICAoSlNDOjpDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IpOgorICAg
ICAgICAgICAgLSBjYWxsZWQgd2hlbiB0aGUgZXhlY3V0YWJsZSBhbGxvY2F0b3IgaXMgY29uc3Ry
dWN0ZWQuCisgICAgICAgIChKU0M6OkNvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEMpOgor
ICAgICAgICAgICAgLSBoZWxwZXIgdG8gbG9va3VwIHRoZSBjb2RlYmxvY2sgZnJvbSBhbiBhZGRy
ZXNzIGluIEpJVCBjb2RlCisgICAgICAgIChKU0M6OkNvZGVQcm9maWxpbmc6OmJlZ2luKToKKyAg
ICAgICAgICAgIC0gZW50ZXIgYSBwcm9maWxpbmcgc2NvcGUuCisgICAgICAgIChKU0M6OkNvZGVQ
cm9maWxpbmc6OmVuZCk6CisgICAgICAgICAgICAtIGV4aXQgYSBwcm9maWxpbmcgc2NvcGUuCisg
ICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGluZy5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0gbmV3
IGNsYXNzLCBpbnN0YW50aWFsZWQgZnJvbSBDb21wbGV0aW9uIHRvIGRlZmluZSBhIHByb2ZpbGlu
ZyBzY29wZS4KKyAgICAgICAgKiB0b29scy9Qcm9maWxlVHJlZU5vZGUuaDogQWRkZWQuCisgICAg
ICAgICAgICAtIG5ldyBjbGFzcywgdXNlZCB0byBjb25zdHJ1Y3QgYSB0cmVlIG9mIHNhbXBsZXMu
CisgICAgICAgICogdG9vbHMvVGllcmVkTU1hcEFycmF5Lmg6IEFkZGVkLgorICAgICAgICAgICAg
LSBuZXcgY2xhc3MsIGEgbWFsbG9jLWZyZWUgdmVjdG9yIChjYW4gYmUgdXNlZCB3aGlsZSB0aGUg
bWFpbiB0aHJlYWQgaXMgc3VzcGVuZGVkLAorICAgICAgICAgICAgICBwb3NzaWJseSBob2xkaW5n
IHRoZSBtYWxsb2MgaGVhcCBsb2NrKS4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6
CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5kbGUp
OgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgICAgICAt
IEFsbG93IGFsbG9jYXRpb24gaGFuZGxlcyB0byB0cmFjayBpbmZvcm1hdGlvbiBhYm91dCB0aGVp
ciBvd25lci4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5oOgorICAgICAgICAoTWV0YUFs
bG9jYXRvcik6CisgICAgICAgICAgICAtIEFsbG93IGFsbG9jYXRpb24gaGFuZGxlcyB0byB0cmFj
ayBpbmZvcm1hdGlvbiBhYm91dCB0aGVpciBvd25lci4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9j
YXRvckhhbmRsZS5oOgorICAgICAgICAoTWV0YUFsbG9jYXRvckhhbmRsZSk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Om93bmVyVUlEKToKKyAgICAgICAgICAgIC0gQWxsb3cg
YWxsb2NhdGlvbiBoYW5kbGVzIHRvIHRyYWNrIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyIG93bmVy
LgorICAgICAgICAqIHd0Zi9PU0FsbG9jYXRvci5oOgorICAgICAgICAoV1RGOjpPU0FsbG9jYXRv
cjo6cmVhbGxvY2F0ZUNvbW1pdHRlZCk6CisgICAgICAgICAgICAtIHJlYWxsb2NhdGUgYW4gZXhp
c3RpbmcsIGNvbW1pdHRlZCBtZW1vcnkgYWxsb2NhdGlvbi4KKwogMjAxMi0wMS0yNyAgTU9SSVRB
IEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbSlNDXSBTb21lIEpTX0VY
UE9SVERBVEEgbWF5IG5vdCBiZSBuZWNlc3NhcnkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw2ICsyMDAsOSBAQCBTRVQoSmF2
YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHJ1bnRpbWUvVGltZW91dENoZWNrZXIuY3BwCiAgICAg
cnVudGltZS9VU3RyaW5nLmNwcAogCisgICAgdG9vbHMvQ29kZVByb2ZpbGUuY3BwCisgICAgdG9v
bHMvQ29kZVByb2ZpbGluZy5jcHAKKwogICAgIHlhcnIvWWFyclBhdHRlcm4uY3BwCiAgICAgeWFy
ci9ZYXJySW50ZXJwcmV0ZXIuY3BwCiAgICAgeWFyci9ZYXJySklULmNwcApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw3
IEBAIGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzICs9IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cHJvZmlsZXIgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lIFwK
KwktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMgXAogCS1JJChzcmNkaXIp
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZ29i
amVjdCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQko
cmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTUyNSw2ICs1MjUsMTIgQEAgamF2YXNjcmlwdGNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtSYW5kb20uaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmggXAorCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9Db2RlUHJvZmlsZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVBy
b2ZpbGluZy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5n
LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1RpZXJlZE1NYXBBcnJheS5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL0FsaWdubWVudC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL0Fsd2F5c0lubGluZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0FycmF5QnVm
ZmVyLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJ
KHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTQxNSw3ICs0MTUsNiBAQCBfX1pOM1dURjEycmFuZG9t
TnVtYmVyRXYKIF9fWk4zV1RGMTNNZXRhQWxsb2NhdG9yMTdhZGRGcmVzaEZyZWVTcGFjZUVQdm0K
IF9fWk4zV1RGMTNNZXRhQWxsb2NhdG9yMTdmcmVlRnJlZVNwYWNlTm9kZUVQTlMwXzEzRnJlZVNw
YWNlTm9kZUUKIF9fWk4zV1RGMTNNZXRhQWxsb2NhdG9yMThkZWJ1Z0ZyZWVTcGFjZVNpemVFdgot
X19aTjNXVEYxM01ldGFBbGxvY2F0b3I4YWxsb2NhdGVFbQogX19aTjNXVEYxM01ldGFBbGxvY2F0
b3JDMkVtCiBfX1pOM1dURjEzU3RyaW5nQnVpbGRlcjExc2hyaW5rVG9GaXRFdgogX19aTjNXVEYx
M1N0cmluZ0J1aWxkZXIxNXJlc2VydmVDYXBhY2l0eUVqCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5wcmkJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIz
LDcgQEAgSU5DTFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJUi9wYXJzZXIgXAogICAgICQk
U09VUkNFX0RJUi9wcm9maWxlciBcCiAgICAgJCRTT1VSQ0VfRElSL3J1bnRpbWUgXAorICAgICQk
U09VUkNFX0RJUi90b29scyBcCiAgICAgJCRTT1VSQ0VfRElSL3lhcnIgXAogICAgICQkU09VUkNF
X0RJUi9BUEkgXAogICAgICQkU09VUkNFX0RJUi9Gb3J3YXJkaW5nSGVhZGVycyBcCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw2ICsyMDksOCBAQCBT
T1VSQ0VTICs9IFwKICAgICBydW50aW1lL1N0cnVjdHVyZS5jcHAgXAogICAgIHJ1bnRpbWUvVGlt
ZW91dENoZWNrZXIuY3BwIFwKICAgICBydW50aW1lL1VTdHJpbmcuY3BwIFwKKyAgICB0b29scy9D
b2RlUHJvZmlsZS5jcHAgXAorICAgIHRvb2xzL0NvZGVQcm9maWxpbmcuY3BwIFwKICAgICB5YXJy
L1lhcnJKSVQuY3BwIFwKIAogKnNoNCogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDEwNjE1MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ3LDYgKzE0
NDcsMzQgQEAKIAkJCTwvRmlsZT4KIAkJPC9GaWx0ZXI+CiAJCTxGaWx0ZXIKKwkJCU5hbWU9InRv
b2xzIgorCQkJPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHRvb2xzXENvZGVQ
cm9maWxlLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5cdG9vbHNcQ29kZVByb2ZpbGUuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cdG9vbHNcQ29kZVByb2ZpbGluZy5jcHAiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHRvb2xzXENv
ZGVQcm9maWxpbmcuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5cLi5cdG9vbHNcUHJvZmlsZVRyZWVOb2RlLmgiCisJCQkJPgorCQkJPC9GaWxlPgor
CQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHRvb2xzXFRpZXJlZE1NYXBBcnJheS5o
IgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJPC9GaWx0ZXI+CisJCTxGaWx0ZXIKIAkJCU5hbWU9ImJ5
dGVjb2RlIgogCQkJPgogCQkJPEZpbGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVDb21tb24udnNw
cm9wcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlQ29tbW9uLnZzcHJvcHMJKHJldmlz
aW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVDb21tb24udnNwcm9wcwkod29ya2luZyBj
b3B5KQpAQCAtNiw3ICs2LDcgQEAKIAk+CiAJPFRvb2wKIAkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKLQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJnF1b3Q7JChDb25maWd1cmF0aW9u
QnVpbGREaXIpXG9ialxKYXZhU2NyaXB0Q29yZVxEZXJpdmVkU291cmNlc1wmcXVvdDs7Li4vLi4v
Oy4uLy4uL0FQSS87Li4vLi4vcGFyc2VyLzsuLi8uLi9ieXRlY29tcGlsZXIvOy4uLy4uL2RmZy87
Li4vLi4vaml0LzsuLi8uLi9ydW50aW1lLzsuLi8uLi9ieXRlY29kZS87Li4vLi4vaW50ZXJwcmV0
ZXIvOy4uLy4uL3d0Zi87Li4vLi4vcHJvZmlsZXI7Li4vLi4vYXNzZW1ibGVyLzsuLi8uLi9kZWJ1
Z2dlci87Li4vLi4vaGVhcC87JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGUmcXVv
dDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVv
dDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcaW5jbHVkZSZxdW90OzsmcXVvdDskKENvbmZpZ3Vy
YXRpb25CdWlsZERpcilcaW5jbHVkZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVvdDskKENvbmZp
Z3VyYXRpb25CdWlsZERpcilcaW5jbHVkZVxwcml2YXRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGli
cmFyaWVzRGlyKVxpbmNsdWRlXHB0aHJlYWRzJnF1b3Q7IgorCQlBZGRpdGlvbmFsSW5jbHVkZURp
cmVjdG9yaWVzPSImcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqXEphdmFTY3JpcHRD
b3JlXERlcml2ZWRTb3VyY2VzXCZxdW90OzsuLi8uLi87Li4vLi4vQVBJLzsuLi8uLi9wYXJzZXIv
Oy4uLy4uL2J5dGVjb21waWxlci87Li4vLi4vZGZnLzsuLi8uLi9qaXQvOy4uLy4uL3J1bnRpbWUv
Oy4uLy4uL3Rvb2xzLzsuLi8uLi9ieXRlY29kZS87Li4vLi4vaW50ZXJwcmV0ZXIvOy4uLy4uL3d0
Zi87Li4vLi4vcHJvZmlsZXI7Li4vLi4vYXNzZW1ibGVyLzsuLi8uLi9kZWJ1Z2dlci87Li4vLi4v
aGVhcC87JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChX
ZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKENvbmZpZ3Vy
YXRpb25CdWlsZERpcilcaW5jbHVkZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERp
cilcaW5jbHVkZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWls
ZERpcilcaW5jbHVkZVxwcml2YXRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxp
bmNsdWRlXHB0aHJlYWRzJnF1b3Q7IgogCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX19TVERf
QyIKIAkJRm9yY2VkSW5jbHVkZUZpbGVzPSJJQ1VWZXJzaW9uLmgiCiAJLz4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMzgyLDYgKzM4Miw4IEBACiAJCTg2QUU2NEFBMTM1RTVFMUMwMDk2MzAxMiAv
KiBTSDRBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2QUU2NEE3MTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCAqLzsgfTsK
IAkJODZBRTZDNEQxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0ZQUkluZm8uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QUU2QzRCMTM2QTExRTQwMDk2MzAx
MiAvKiBERkdGUFJJbmZvLmggKi87IH07CiAJCTg2QUU2QzRFMTM2QTExRTQwMDk2MzAxMiAvKiBE
RkdHUFJJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NkFFNkM0QzEzNkExMUU0MDA5NjMwMTIgLyogREZHR1BSSW5mby5oICovOyB9OworCQk4NkI1
ODI2NzE0RDI3OTZDMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZCNTgyMkUxNEQyMzczQjAwQTlDMzA2IC8q
IENvZGVQcm9maWxlLmNwcCAqLzsgfTsKKwkJODZCNTgyNjkxNEQyNzk3MDAwQTlDMzA2IC8qIENv
ZGVQcm9maWxpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODYwM0NFRjIxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcuY3BwICovOyB9
OwogCQk4NkI5OUFFMzExN0U1NzgxMDBERjVBOTAgLyogU3RyaW5nQnVmZmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkI5OUFFMTExN0U1NzgxMDBE
RjVBOTAgLyogU3RyaW5nQnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJODZCQjA5QzAxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2gu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZCQjA5
QkUxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwICovOyB9OwogCQk4NkJCMDlDMTEz
OEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODZCQjA5QkYxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0
Y2guaCAqLzsgfTsKQEAgLTEwNDIsNyArMTA0NCw3IEBACiAJCTFBMDgyNzc4MTQyMTY4RDcwMDkw
Q0NBQyAvKiBCaW5hcnlTZW1hcGhvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQmluYXJ5U2VtYXBob3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTlF
NTUwMTQ5ODA5MzUwMDAwMUE4QSAvKiBGdW5jdGlvbmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZ1bmN0aW9uYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUM5MDUxNDIwQkE5RThBNzAwODFFOUQwIC8qIFZlcnNpb24ueGNjb25maWcgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0LnhjY29uZmlnOyBwYXRoID0gVmVyc2lvbi54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMUM5MDUxNDMwQkE5RThBNzAwODFFOUQwIC8qIEphdmFTY3JpcHRDb3JlLnhj
Y29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgbmFtZSA9IEphdmFTY3JpcHRDb3JlLnhj
Y29uZmlnOyBwYXRoID0gLi4vQ29uZmlndXJhdGlvbnMvSmF2YVNjcmlwdENvcmUueGNjb25maWc7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDOTA1MTQzMEJBOUU4QTcwMDgxRTlEMCAv
KiBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGgg
PSBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUM5MDUxNDQwQkE5RThBNzAwODFFOUQwIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBEZWJ1Z1JlbGVhc2UueGNjb25maWc7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDOTA1MTQ1MEJBOUU4QTcwMDgxRTlEMCAvKiBCYXNlLnhj
Y29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEJhc2UueGNjb25maWc7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQUE4QjRBMEQzMkMzOUEwMDQxQkNGRiAvKiBK
YXZhU2NyaXB0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEphdmFTY3JpcHQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMzgsNiArMTE0MCw4IEBACiAJCTg2
MDE2MUUwMEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlclg4Ni5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4NjAxNjFFMTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJs
ZXJYODZfNjQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJs
ZXJYODZfNjQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYwMTYxRTIwRjNBODND
MTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTg2MDNDRUYyMTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5n
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVQcm9maWxpbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NjAzQ0VGMzE0Qzc1NDY0MDBBRTU5
RTMgLyogQ29kZVByb2ZpbGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b2RlUHJvZmlsaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDRGNEYyMTQz
QTZDNDQwMEIyOTVGNSAvKiBDaGFuZ2VMb2cgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ2hhbmdlTG9nOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4NjA0RjUwMzE0M0NFMUMxMDBCMjk1RjUgLyogSlNHbG9iYWxUaGlz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2xvYmFsVGhpcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjI2QkVDRTExOTI4RTM5MDA3ODJGQUIgLyogU3Ry
aW5nU3RhdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTdHJp
bmdTdGF0aWNzLmNwcDsgcGF0aCA9IHRleHQvU3RyaW5nU3RhdGljcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMTg1LDYgKzExODksMTAgQEAKIAkJODZBRTY0QTcxMzVFNUUx
QzAwOTYzMDEyIC8qIFNINEFzc2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTSDRBc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZBRTZD
NEIxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0ZQUkluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHRlBSSW5mby5oOyBwYXRoID0gZGZnL0RGR0ZQUkluZm8uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZBRTZDNEMxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0dQ
UkluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHR1BSSW5mby5oOyBw
YXRoID0gZGZnL0RGR0dQUkluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZC
NTgyMkMxNEQyMkY1RjAwQTlDMzA2IC8qIFByb2ZpbGVUcmVlTm9kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQcm9maWxlVHJlZU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJODZCNTgyMkUxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVQcm9maWxlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZCNTgyMkYxNEQyMzczQjAwQTlDMzA2IC8qIENv
ZGVQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVQcm9maWxl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2QjU4MjZBMTREMzVENTEwMEE5QzMw
NiAvKiBUaWVyZWRNTWFwQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VGllcmVkTU1hcEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2Qjk5QUUx
MTE3RTU3ODEwMERGNUE5MCAvKiBTdHJpbmdCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gU3RyaW5nQnVmZmVyLmg7IHBhdGggPSB0ZXh0L1N0cmluZ0J1ZmZlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkJCMDlCRTEzOEUzODFCMDA1NjcwMkYgLyog
REZHUmVwYXRjaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdS
ZXBhdGNoLmNwcDsgcGF0aCA9IGRmZy9ERkdSZXBhdGNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODZCQjA5QkYxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUmVwYXRjaC5oOyBwYXRoID0gZGZnL0RG
R1JlcGF0Y2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2ODAsNiArMTY4OCw3
IEBACiAJCQkJOTVBQjgzMUEwREE0MkM2OTAwQkM4M0YzIC8qIHByb2ZpbGVyICovLAogCQkJCTdF
RjZFMEJCMEVCN0ExRUMwMDc5QUZBRiAvKiBydW50aW1lICovLAogCQkJCTE0MTIxMTAwMEE0ODc3
MjYwMDQ4MDI1NSAvKiB0ZXN0cyAqLywKKwkJCQk4NjAzQ0VGMDE0Qzc1M0VGMDBBRTU5RTMgLyog
dG9vbHMgKi8sCiAJCQkJNjUxNjJFRjEwOEU2QTIxQzAwNzU1NkNEIC8qIHd0ZiAqLywKIAkJCQk4
NkVBQzQ4QzBGOTNFOEI5MDA4RUM5NDggLyogeWFyciAqLywKIAkJCQkxQzkwNTEzRTBCQTlFODgz
MDA4MUU5RDAgLyogQ29uZmlndXJhdGlvbnMgKi8sCkBAIC0xODI2LDcgKzE4MzUsNiBAQAogCQkJ
CTg2NUY0MDg3MTBFN0Q1NjMwMDk0NzM2MSAvKiBBUElTaGltcy5oICovLAogCQkJCTFDQUE4QjRB
MEQzMkMzOUEwMDQxQkNGRiAvKiBKYXZhU2NyaXB0LmggKi8sCiAJCQkJMUNBQThCNEIwRDMyQzM5
QTAwNDFCQ0ZGIC8qIEphdmFTY3JpcHRDb3JlLmggKi8sCi0JCQkJMUM5MDUxNDMwQkE5RThBNzAw
ODFFOUQwIC8qIEphdmFTY3JpcHRDb3JlLnhjY29uZmlnICovLAogCQkJCUJDMDg5NEQ1MEZBRkJB
MkQwMDAwMTg2NSAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgKi8sCiAJCQkJQkMwODk0RDYwRkFG
QkEyRDAwMDAxODY1IC8qIEpTQVBJVmFsdWVXcmFwcGVyLmggKi8sCiAJCQkJMTQyMTM1OUEwQTY3
N0Y0RjAwQTgxOTVFIC8qIEpTQmFzZS5jcHAgKi8sCkBAIC0xOTE2LDYgKzE5MjQsNyBAQAogCQkJ
CTFDOTA1MTQ0MEJBOUU4QTcwMDgxRTlEMCAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8sCiAJ
CQkJNDQ5MDk3RUUwRjhGODFCNTAwNzZBMzI3IC8qIEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnICov
LAogCQkJCTVEQUZENkNCMTQ2QjY4NjMwMEZCRUZCNCAvKiBKU0MueGNjb25maWcgKi8sCisJCQkJ
MUM5MDUxNDMwQkE5RThBNzAwODFFOUQwIC8qIEphdmFTY3JpcHRDb3JlLnhjY29uZmlnICovLAog
CQkJCUJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUZXN0QVBJLnhjY29uZmlnICovLAogCQkJ
CTVEQUZENkNDMTQ2QjY4QjkwMEZCRUZCNCAvKiBUZXN0UmVnRXhwLnhjY29uZmlnICovLAogCQkJ
CTFDOTA1MTQyMEJBOUU4QTcwMDgxRTlEMCAvKiBWZXJzaW9uLnhjY29uZmlnICovLApAQCAtMjM2
NSw2ICsyMzc0LDE5IEBACiAJCQlwYXRoID0gcnVudGltZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CiAJCX07CisJCTg2MDNDRUYwMTRDNzUzRUYwMEFFNTlFMyAvKiB0b29scyAqLyA9IHsK
KwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJODZCNTgyMkUxNEQyMzcz
QjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAqLywKKwkJCQk4NkI1ODIyRjE0RDIzNzNCMDBB
OUMzMDYgLyogQ29kZVByb2ZpbGUuaCAqLywKKwkJCQk4NjAzQ0VGMjE0Qzc1NDY0MDBBRTU5RTMg
LyogQ29kZVByb2ZpbGluZy5jcHAgKi8sCisJCQkJODYwM0NFRjMxNEM3NTQ2NDAwQUU1OUUzIC8q
IENvZGVQcm9maWxpbmcuaCAqLywKKwkJCQk4NkI1ODIyQzE0RDIyRjVGMDBBOUMzMDYgLyogUHJv
ZmlsZVRyZWVOb2RlLmggKi8sCisJCQkJODZCNTgyNkExNEQzNUQ1MTAwQTlDMzA2IC8qIFRpZXJl
ZE1NYXBBcnJheS5oICovLAorCQkJKTsKKwkJCXBhdGggPSB0b29sczsKKwkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CisJCX07CiAJCTg2NTY1NzNFMTE1QkUzNTIwMDI5MUY0MCAvKiB0ZXh0ICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTM2NDAsNiArMzY2
Miw4IEBACiAJCQkJMEY5MzMyQTExNENBN0REMTAwODVGM0M2IC8qIE1ldGhvZENhbGxMaW5rU3Rh
dHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTMzMkEzMTRDQTdERDcwMDg1RjNDNiAvKiBQ
dXRCeUlkU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTVGMEY0MTREMTA2MzkwMEFD
NzY0OSAvKiBBYnN0cmFjdFBDLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg2QjU4MjY3MTREMjc5
NkMwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4NkI1ODI2
OTE0RDI3OTcwMDBBOUMzMDYgLyogQ29kZVByb2ZpbGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZp
c2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1Niw2ICsxNDU2LDcgQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAgICwgbV9zcGVjdWxhdGl2ZUZhaWxDb3VudGVy
KDApCiAgICAgLCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcigwKQogICAgICwgbV9yZW9wdGlt
aXphdGlvblJldHJ5Q291bnRlcigwKQorICAgICwgbV9jYW5Db21waWxlV2l0aERGR1N0YXRlKENv
bXBpbGVXaXRoREZHVW5zZXQpCiB7CiAgICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJh
bWV0ZXJzKCkpOwogICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKQEAgLTIxNjQsMTcgKzIxNjUs
MTcgQEAgSlNPYmplY3QqIEZ1bmN0aW9uQ29kZUJsb2NrOjpjb21waWxlT3B0aQogICAgIHJldHVy
biBlcnJvcjsKIH0KIAotYm9vbCBQcm9ncmFtQ29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERGRygp
Citib29sIFByb2dyYW1Db2RlQmxvY2s6OmNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKQogewog
ICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVQcm9ncmFtKHRoaXMpOwogfQogCi1ib29sIEV2YWxD
b2RlQmxvY2s6OmNhbkNvbXBpbGVXaXRoREZHKCkKK2Jvb2wgRXZhbENvZGVCbG9jazo6Y2FuQ29t
cGlsZVdpdGhERkdJbnRlcm5hbCgpCiB7CiAgICAgcmV0dXJuIERGRzo6Y2FuQ29tcGlsZUV2YWwo
dGhpcyk7CiB9CiAKLWJvb2wgRnVuY3Rpb25Db2RlQmxvY2s6OmNhbkNvbXBpbGVXaXRoREZHKCkK
K2Jvb2wgRnVuY3Rpb25Db2RlQmxvY2s6OmNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKQogewog
ICAgIGlmIChtX2lzQ29uc3RydWN0b3IpCiAgICAgICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVG
dW5jdGlvbkZvckNvbnN0cnVjdCh0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzg4LDcgKzM4
OCwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGls
ZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopID0gMDsKICAgICAgICAgdmly
dHVhbCB2b2lkIGpldHRpc29uKCkgPSAwOwogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVw
bGFjZW1lbnQoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygp
ID0gMDsKKworICAgICAgICBlbnVtIENvbXBpbGVXaXRoREZHU3RhdGUgeworICAgICAgICAgICAg
Q29tcGlsZVdpdGhERkdGYWxzZSwKKyAgICAgICAgICAgIENvbXBpbGVXaXRoREZHVHJ1ZSwKKyAg
ICAgICAgICAgIENvbXBpbGVXaXRoREZHVW5zZXQKKyAgICAgICAgfTsKKworICAgICAgICB2aXJ0
dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpID0gMDsKKyAgICAgICAgYm9vbCBj
YW5Db21waWxlV2l0aERGRygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0g
Y2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpOworICAgICAgICAgICAgbV9jYW5Db21waWxlV2l0
aERGR1N0YXRlID0gcmVzdWx0ID8gQ29tcGlsZVdpdGhERkdUcnVlIDogQ29tcGlsZVdpdGhERkdG
YWxzZTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgQ29t
cGlsZVdpdGhERkdTdGF0ZSBjYW5Db21waWxlV2l0aERGR1N0YXRlKCkgeyByZXR1cm4gbV9jYW5D
b21waWxlV2l0aERGR1N0YXRlOyB9CisKICAgICAgICAgYm9vbCBoYXNPcHRpbWl6ZWRSZXBsYWNl
bWVudCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgPT0gSklU
Q29kZTo6QmFzZWxpbmVKSVQpOwpAQCAtMTE4Nyw2ICsxMjAyLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGZyaWVuZCB2b2lkIFdURjo6ZGVsZXRlT3duZWRQdHI8UmFyZURhdGE+KFJhcmVE
YXRhKik7CiAjZW5kaWYKICAgICAgICAgT3duUHRyPFJhcmVEYXRhPiBtX3JhcmVEYXRhOworICAg
ICAgICBDb21waWxlV2l0aERGR1N0YXRlIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0ZTsKICAgICB9
OwogCiAgICAgLy8gUHJvZ3JhbSBjb2RlIGlzIG5vdCBtYXJrZWQgYnkgYW55IGZ1bmN0aW9uLCBz
byB3ZSBtYWtlIHRoZSBnbG9iYWwgb2JqZWN0CkBAIC0xMjI2LDcgKzEyNDIsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVj
U3RhdGUqLCBTY29wZUNoYWluTm9kZSopOwogICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24o
KTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7Ci0gICAgICAgIHZp
cnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2Fu
Q29tcGlsZVdpdGhERkdJbnRlcm5hbCgpOwogI2VuZGlmCiAgICAgfTsKIApAQCAtMTI2MCw3ICsx
Mjc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBp
bGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKICAgICAgICAgdmlydHVh
bCB2b2lkIGpldHRpc29uKCk7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVu
dCgpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKTsKKyAgICAgICAg
dmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKTsKICNlbmRpZgogCiAgICAg
cHJpdmF0ZToKQEAgLTEyOTcsNyArMTMxMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5O
b2RlKik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpOwogICAgICAgICB2aXJ0dWFs
IENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKLSAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBp
bGVXaXRoREZHKCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGR0ludGVy
bmFsKCk7CiAjZW5kaWYKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgi
CiAKICNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfREVNQU5EKQorI2luY2x1ZGUgIkNv
ZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgogI2luY2x1ZGUg
PHd0Zi9QYWdlUmVzZXJ2YXRpb24uaD4KICNpbmNsdWRlIDx3dGYvVk1UYWdzLmg+CkBAIC05Myw2
ICs5NCw3IEBAIHZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG8KIHsKICAg
ICBBU1NFUlQoIWFsbG9jYXRvcik7CiAgICAgYWxsb2NhdG9yID0gbmV3IERlbWFuZEV4ZWN1dGFi
bGVBbGxvY2F0b3IoKTsKKyAgICBDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IoYWxsb2Nh
dG9yKTsKIH0KIAogRXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcihKU0ds
b2JhbERhdGEmKQpAQCAtMTEyLDkgKzExNCw3IEBAIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6
dW5kZXJNZW1vcnlQcmUKIAogUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVj
dXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgc2l6ZUluQnl0
ZXMsIHZvaWQqIG93bmVyVUlEKQogewotICAgIFVOVVNFRF9QQVJBTShvd25lclVJRCk7Ci0KLSAg
ICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxv
Y2F0ZShzaXplSW5CeXRlcyk7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJl
c3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsKICAgICBp
ZiAoIXJlc3VsdCkKICAgICAgICAgQ1JBU0goKTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2Uo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZp
eGVkVk1Qb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksOCBAQAogCiAjaWYgRU5BQkxFKEVYRUNVVEFC
TEVfQUxMT0NBVE9SX0ZJWEVEKQogCisjaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgogI2luY2x1
ZGUgPGVycm5vLmg+Ci0KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgogI2luY2x1ZGUgPHVuaXN0ZC5o
PgogI2luY2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+CkBAIC05Niw2ICs5Niw3IEBAIHZvaWQg
RXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG8KIHsKICAgICBBU1NFUlQoIWFsbG9j
YXRvcik7CiAgICAgYWxsb2NhdG9yID0gbmV3IEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRv
cigpOworICAgIENvZGVQcm9maWxpbmc6Om5vdGlmeUFsbG9jYXRvcihhbGxvY2F0b3IpOwogfQog
CiBFeGVjdXRhYmxlQWxsb2NhdG9yOjpFeGVjdXRhYmxlQWxsb2NhdG9yKEpTR2xvYmFsRGF0YSYp
CkBAIC0xMTYsMTIgKzExNywxMCBAQCBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVt
b3J5UHJlCiAKIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFs
bG9jYXRvcjo6YWxsb2NhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgc2l6ZUlu
Qnl0ZXMsIHZvaWQqIG93bmVyVUlEKQogewotICAgIFVOVVNFRF9QQVJBTShvd25lclVJRCk7Ci0K
LSAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yLT5h
bGxvY2F0ZShzaXplSW5CeXRlcyk7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+
IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsKICAg
ICBpZiAoIXJlc3VsdCkgewogICAgICAgICByZWxlYXNlRXhlY3V0YWJsZU1lbW9yeShnbG9iYWxE
YXRhKTsKLSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcyk7
CisgICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVy
VUlEKTsKICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICBDUkFTSCgpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMDYx
NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgogI2luY2x1ZGUg
IkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVQcm9m
aWxpbmcuaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgi
CiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgpAQCAtOTY4LDcgKzk2OSw3IEBAIE5FVkVS
X0lOTElORSB2b2lkIEpJVFRodW5rczo6dHJ5Q2FjaGVHZXQKICAgICBKSVQ6OmNvbXBpbGVHZXRC
eUlkQ2hhaW4oY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbERhdGEsIGNhbGxGcmFtZSwg
Y29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHBy
b3BlcnR5TmFtZSwgc2xvdCwgb2Zmc2V0LCByZXR1cm5BZGRyZXNzKTsKIH0KIAotI2lmICFkZWZp
bmVkKE5ERUJVRykgJiYgIUVOQUJMRShDT0RFX1BST0ZJTElORykKKyNpZiAhZGVmaW5lZChOREVC
VUcpCiAKIGV4dGVybiAiQyIgewogCkBAIC05ODYsNyArOTg3LDggQEAgc3RydWN0IFN0YWNrSGFj
ayB7CiAgICAgICAgIDogc3RhY2tGcmFtZShzdGFja0ZyYW1lKQogICAgICAgICAsIHNhdmVkUmV0
dXJuQWRkcmVzcygqc3RhY2tGcmFtZS5yZXR1cm5BZGRyZXNzU2xvdCgpKQogICAgIHsKLSAgICAg
ICAgKnN0YWNrRnJhbWUucmV0dXJuQWRkcmVzc1Nsb3QoKSA9IFJldHVybkFkZHJlc3NQdHIoRnVu
Y3Rpb25QdHIoanNjR2VuZXJhdGVkTmF0aXZlQ29kZSkpOworICAgICAgICBpZiAoIUNvZGVQcm9m
aWxpbmc6OmVuYWJsZWQoKSkKKyAgICAgICAgICAgICpzdGFja0ZyYW1lLnJldHVybkFkZHJlc3NT
bG90KCkgPSBSZXR1cm5BZGRyZXNzUHRyKEZ1bmN0aW9uUHRyKGpzY0dlbmVyYXRlZE5hdGl2ZUNv
ZGUpKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIH5TdGFja0hhY2soKSAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiAx
MDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIK
IAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKICNp
bmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUg
IkludGVycHJldGVyLmgiCkBAIC01NSw2ICs1Niw4IEBAIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0
YXRlKiBleGVjLCBTY29wZUMKICAgICBKU0xvY2sgbG9jayhleGVjKTsKICAgICBBU1NFUlQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVu
dElkZW50aWZpZXJUYWJsZSgpKTsKIAorICAgIENvZGVQcm9maWxpbmcgcHJvZmlsZShzb3VyY2Up
OworCiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHByb2dyYW0gPSBQcm9ncmFtRXhlY3V0YWJsZTo6
Y3JlYXRlKGV4ZWMsIHNvdXJjZSk7CiAgICAgaWYgKCFwcm9ncmFtKSB7CiAgICAgICAgIGlmIChy
ZXR1cm5lZEV4Y2VwdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2Rl
UHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0Nv
ZGVQcm9maWxlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9Db2RlUHJvZmlsZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJDb2RlUHJvZmlsZS5oIgorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisj
aW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNs
dWRlICJQcm9maWxlVHJlZU5vZGUuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKKyNpbmNsdWRlIDxj
eHhhYmkuaD4KKyNpbmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgPGV4ZWNpbmZvLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBNYXAg
ZnJvbSBDb2RlVHlwZSBlbnVtIHRvIGEgY29ycmVzcG9uZGluZyBuYW1lLgorY29uc3QgY2hhciog
Q29kZVByb2ZpbGU6OnNfY29kZVR5cGVOYW1lc1tDb2RlUHJvZmlsZTo6TnVtYmVyT2ZDb2RlVHlw
ZXNdID0geworICAgICJbW0VuZ2luZUNvZGVdXSIsCisgICAgIltbR2xvYmFsVGh1bmtdXSIsCisg
ICAgIltbUmVnRXhwQ29kZV1dIiwKKyAgICAiW1tERkdKSVRdXSIsCisgICAgIltbQmFzZWxpbmVP
bmx5XV0iLAorICAgICJbW0Jhc2VsaW5lUHJvZmlsZV1dIiwKKyAgICAiW1tCYXNlbGluZU9TUl1d
IiwKKyAgICAiW1tFbmdpbmVGcmFtZV1dIgorfTsKKworLy8gSGVscGVyIGZ1bmN0aW9uLCBmaW5k
IHRoZSBzeW1ib2wgbmFtZSBmb3IgYSBwYyBpbiBKU0MuCitzdGF0aWMgY29uc3QgY2hhciogc3lt
Ym9sTmFtZSh2b2lkKiBhZGRyZXNzKQoreworICAgIERsX2luZm8gaW5mbzsKKyAgICBpZiAoIWRs
YWRkcihhZGRyZXNzLCAmaW5mbykgfHwgIWluZm8uZGxpX3NuYW1lKQorICAgICAgICByZXR1cm4g
Ijx1bmtub3duPiI7CisKKyAgICBjb25zdCBjaGFyKiBtYW5nbGVkTmFtZSA9IGluZm8uZGxpX3Nu
YW1lOworICAgIGNvbnN0IGNoYXIqIGN4YURlbWFuZ2xlZCA9IGFiaTo6X19jeGFfZGVtYW5nbGUo
bWFuZ2xlZE5hbWUsIDAsIDAsIDApOworICAgIHJldHVybiBjeGFEZW1hbmdsZWQgPyBjeGFEZW1h
bmdsZWQgOiBtYW5nbGVkTmFtZTsKK30KKworLy8gSGVscGVyIGZ1bmN0aW9uLCB0cnVuY2F0ZSB0
cmFjZXMgdG8gcHJ1bmUgdGhlIG91dHB1dCAmIG1ha2UgdmVyeSB2ZXJib3NlIG1vZGUgYSBsaXR0
bGUgbW9yZSByZWFkYWJsZS4KK3N0YXRpYyBib29sIHRydW5jYXRlVHJhY2UoY29uc3QgY2hhciog
c3ltYm9sTmFtZSkKK3sKKyAgICByZXR1cm4gIXN0cmNtcChzeW1ib2xOYW1lLCAiSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKSIpCisgICAgICAgIHx8ICFzdHJjbXAoc3ltYm9sTmFt
ZSwgIkpTQzo6UGFyc2VyPEpTQzo6TGV4ZXI8dW5zaWduZWQgY2hhcj4gPjo6cGFyc2VJbm5lcigp
IikKKyAgICAgICAgfHwgIXN0cmNtcChzeW1ib2xOYW1lLCAiV1RGOjpmYXN0TWFsbG9jKHVuc2ln
bmVkIGxvbmcpIikKKyAgICAgICAgfHwgIXN0cmNtcChzeW1ib2xOYW1lLCAiV1RGOjpjYWxjdWxh
dGVVVENPZmZzZXQoKSIpCisgICAgICAgIHx8ICFzdHJjbXAoc3ltYm9sTmFtZSwgIkpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKSIpOworICAgICAgICAKK30KKworLy8g
RWFjaCB0cmFjZSBjb25zaXN0cyBvZiBhIHNlcXVlbmNlIG9mIHplcm8gb3IgbW9yZSAnRW5naW5l
RnJhbWUnIGVudHJpZXMsCisvLyBmb2xsb3dlZCBieSBhIHNhbXBsZSBpbiBKSVQgY29kZSwgb3Ig
b25lIG9yIG1vcmUgJ0VuZ2luZUZyYW1lJyBlbnRyaWVzLAorLy8gZm9sbG93ZWQgYnkgYSAnRW5n
aW5lQ29kZScgdGVybWluYXRvci4KK3ZvaWQgQ29kZVByb2ZpbGU6OnNhbXBsZSh2b2lkKiBwYywg
dm9pZCoqIGZyYW1lUG9pbnRlcikKK3sKKyAgICAvLyBEaXNhbGxvdyB0cmFjZXMgY29udGFpbmlu
ZyBvbmx5IGEgJ0VuZ2luZUNvZGUnIHRlcm1pbmF0b3IsIHdpdGhvdXQgYW55ICdFbmdpbmVGcmFt
ZScgZnJhbWVzLgorICAgIGlmICghZnJhbWVQb2ludGVyKQorICAgICAgICByZXR1cm47CisKKyAg
ICB3aGlsZSAoZnJhbWVQb2ludGVyKSB7CisgICAgICAgIENvZGVUeXBlIHR5cGU7CisgICAgICAg
IHZvaWQqIG93bmVyVUlEID0gQ29kZVByb2ZpbGluZzo6Z2V0T3duZXJVSURGb3JQQyhwYyk7CisK
KyAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIHRoaXMgc2FtcGxlIGZlbGwgaW4gSklUIGNvZGUsIGFu
ZCBpZiBzbywgZnJvbSB3aGljaCBKSVQgJiB3aHkuCisgICAgICAgIGlmICghb3duZXJVSUQpCisg
ICAgICAgICAgICB0eXBlID0gRW5naW5lRnJhbWU7CisgICAgICAgIGVsc2UgaWYgKG93bmVyVUlE
ID09IEdMT0JBTF9USFVOS19JRCkKKyAgICAgICAgICAgIHR5cGUgPSBHbG9iYWxUaHVuazsKKyAg
ICAgICAgZWxzZSBpZiAob3duZXJVSUQgPT0gUkVHRVhQX0NPREVfSUQpCisgICAgICAgICAgICB0
eXBlID0gUmVnRXhwQ29kZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG93bmVyVUlEKTsKKyAgICAgICAg
ICAgIGlmIChjb2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpCisgICAg
ICAgICAgICAgICAgdHlwZSA9IERGR0pJVDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNvZGVCbG9j
ay0+Y2FuQ29tcGlsZVdpdGhERkdTdGF0ZSgpID09IENvZGVCbG9jazo6Q29tcGlsZVdpdGhERkdG
YWxzZSkKKyAgICAgICAgICAgICAgICB0eXBlID0gQmFzZWxpbmVPbmx5OworICAgICAgICAgICAg
ZWxzZSBpZiAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpKQorICAgICAgICAgICAgICAgIHR5cGUg
PSBCYXNlbGluZU9TUjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0eXBlID0g
QmFzZWxpbmVQcm9maWxlOworICAgICAgICB9CisKKyAgICAgICAgLy8gQSBzYW1wbGUgaW4gSklU
IGNvZGUgdGVybWluYXRlcyB0aGUgdHJhY2UuCisgICAgICAgIG1fc2FtcGxlcy5hcHBlbmQoQ29k
ZVJlY29yZChwYywgdHlwZSkpOworICAgICAgICBpZiAodHlwZSAhPSBFbmdpbmVGcmFtZSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBXYWxrIHVwIHRoZSBzdGFjay4KKyNpZiBQ
TEFURk9STShNQUMpICYmIENQVShYODZfNjQpCisgICAgICAgIHBjID0gZnJhbWVQb2ludGVyWzFd
OworICAgICAgICBmcmFtZVBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqKj4oKmZyYW1l
UG9pbnRlcik7CisjZWxzZQorICAgICAgICAvLyBUaGlzIHBsYXRmb3JtIGlzIG5vdCB5ZXQgc3Vw
cG9ydGVkIQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorICAgIH0KKwor
ICAgIC8vIElmIHdlIGdldCBoZXJlLCB3ZSB3YWxrZWQgdGhlIGVudGlyZSBzdGFjayB3aXRob3V0
IGZpbmRpbmcgYW55IGZyYW1lcyBvZiBKSVQgY29kZS4KKyAgICBtX3NhbXBsZXMuYXBwZW5kKENv
ZGVSZWNvcmQoMCwgRW5naW5lQ29kZSkpOworfQorCit2b2lkIENvZGVQcm9maWxlOjpyZXBvcnQo
KQoreworICAgIGZwcmludGYoc3Rkb3V0LCAiPENvZGVQcm9maWxpbmcgJXM6JWQ+XG4iLCBtX2Zp
bGUuZGF0YSgpLCBtX2xpbmVObyk7CisKKyAgICAvLyBIb3cgbWFueSBmcmFtZXMgb2YgQy1jb2Rl
IHRvIHByaW50IC0gMCwgaWYgbm90IHZlcmJvc2UsIDEgaWYgdmVyYm9zZSwgdXAgdG8gMTAyNCBp
ZiB2ZXJ5IHZlcmJvc2UuCisgICAgdW5zaWduZWQgcmVjdXJzaW9uTGltaXQgPSBDb2RlUHJvZmls
aW5nOjpiZVZlcnlWZXJib3NlKCkgPyAxMDI0IDogQ29kZVByb2ZpbGluZzo6YmVWZXJib3NlKCk7
CisKKyAgICBQcm9maWxlVHJlZU5vZGUgcHJvZmlsZTsKKworICAgIC8vIFdhbGsgdGhyb3VnaCB0
aGUgc2FtcGxlIGJ1ZmZlci4KKyAgICBzaXplX3QgdHJhY2UgPSAwOworICAgIHdoaWxlICh0cmFj
ZSA8IG1fc2FtcGxlcy5zaXplKCkpIHsKKworICAgICAgICAvLyBBbGwgdHJhY2VzIGFyZSB6ZXJv
IG9yIG1vcmUgJ0VuZ2luZUZyYW1lJ3MsIGZvbGxvd2VkIGJ5IGEgbm9uLSdFbmdpbmVGcmFtZScu
CisgICAgICAgIC8vIFNjYW4gdG8gZmluZCB0aGUgbGFzdCBzYW1wbGUgaW4gdGhlIHRyYWNlLgor
ICAgICAgICBzaXplX3QgbGFzdEluVHJhY2UgPSB0cmFjZTsKKyAgICAgICAgd2hpbGUgKG1fc2Ft
cGxlc1tsYXN0SW5UcmFjZV0udHlwZSA9PSBFbmdpbmVGcmFtZSkKKyAgICAgICAgICAgICsrbGFz
dEluVHJhY2U7CisKKyAgICAgICAgLy8gV2UgdXNlIHRoZSBsYXN0IHNhbXBsZSB0eXBlIHRvIGxv
b2sgdXAgYSBuYW1lICh1c2VkIGFzIGEgYnVja2V0IGluIHRoZSBwcm9maWxlcikuCisgICAgICAg
IFByb2ZpbGVUcmVlTm9kZSogY2FsbGJhY2tzID0gcHJvZmlsZS5zYW1wbGVDaGlsZChzX2NvZGVU
eXBlTmFtZXNbbV9zYW1wbGVzW2xhc3RJblRyYWNlXS50eXBlXSk7CisKKyAgICAgICAgLy8gSWYg
dGhlcmUgYXJlIGFueSBzYW1wbGVzIGluIEMtY29kZSwgYWRkIHVwIHRvIHJlY3Vyc2lvbkxpbWl0
IG9mIHRoZW0gaW50byB0aGUgcHJvZmlsZSB0cmVlLgorICAgICAgICBzaXplX3QgbGFzdEVuZ2lu
ZUZyYW1lID0gbGFzdEluVHJhY2U7CisgICAgICAgIGZvciAodW5zaWduZWQgY291bnQgPSAwOyBs
YXN0RW5naW5lRnJhbWUgPiB0cmFjZSAmJiBjb3VudCA8IHJlY3Vyc2lvbkxpbWl0OyArK2NvdW50
KSB7CisgICAgICAgICAgICAtLWxhc3RFbmdpbmVGcmFtZTsKKyAgICAgICAgICAgIEFTU0VSVCht
X3NhbXBsZXNbbGFzdEVuZ2luZUZyYW1lXS50eXBlID09IEVuZ2luZUZyYW1lKTsKKyAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBzeW1ib2xOYW1lKG1fc2FtcGxlc1tsYXN0RW5naW5lRnJh
bWVdLnBjKTsKKyAgICAgICAgICAgIGNhbGxiYWNrcyA9IGNhbGxiYWNrcy0+c2FtcGxlQ2hpbGQo
bmFtZSk7CisgICAgICAgICAgICBpZiAodHJ1bmNhdGVUcmFjZShuYW1lKSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE1vdmUgb24gdG8gdGhlIG5leHQg
dHJhY2UuCisgICAgICAgIHRyYWNlID0gbGFzdEluVHJhY2UgKyAxOworICAgICAgICBBU1NFUlQo
dHJhY2UgPD0gbV9zYW1wbGVzLnNpemUoKSk7CisgICAgfQorCisgICAgLy8gT3V0cHV0IHRoZSBw
cm9maWxlIHRyZWUuCisgICAgZnByaW50ZihzdGRvdXQsICJUb3RhbCBzYW1wbGVzOiAlbGxkXG4i
LCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHByb2ZpbGUuY2hpbGRDb3VudCgpKSk7CisgICAgcHJv
ZmlsZS5kdW1wKCk7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDAgOyBpIDwgbV9jaGlsZHJl
bi5zaXplKCk7ICsraSkKKyAgICAgICAgbV9jaGlsZHJlbltpXS0+cmVwb3J0KCk7CisKKyAgICBm
cHJpbnRmKHN0ZG91dCwgIjwvQ29kZVByb2ZpbGluZyAlczolZD5cbiIsIG1fZmlsZS5kYXRhKCks
IG1fbGluZU5vKTsKK30KKworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0Nv
ZGVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0Nv
ZGVQcm9maWxlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
Q29kZVByb2ZpbGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENvZGVQcm9maWxlX2gK
KyNkZWZpbmUgQ29kZVByb2ZpbGVfaAorCisjaW5jbHVkZSAiU291cmNlQ29kZS5oIgorI2luY2x1
ZGUgIlRpZXJlZE1NYXBBcnJheS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVQcm9maWxlIHsKK3B1YmxpYzoKKyAgICBDb2Rl
UHJvZmlsZShjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVQcm9maWxlKiBwYXJlbnQpCisg
ICAgICAgIDogbV9maWxlKHNvdXJjZS5wcm92aWRlcigpLT51cmwoKS51dGY4KCkpCisgICAgICAg
ICwgbV9saW5lTm8oc291cmNlLmZpcnN0TGluZSgpKQorICAgICAgICAsIG1fcGFyZW50KHBhcmVu
dCkKKyAgICB7CisgICAgICAgIGlmIChwYXJlbnQpCisgICAgICAgICAgICBwYXJlbnQtPmFkZENo
aWxkKHRoaXMpOworICAgIH0KKworICAgIHZvaWQgc2FtcGxlKHZvaWQqIHBjLCB2b2lkKiogZnJh
bWVQb2ludGVyKTsKKyAgICB2b2lkIHJlcG9ydCgpOworCisgICAgQ29kZVByb2ZpbGUqIHBhcmVu
dCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9wYXJlbnQ7CisgICAgfQorICAgIAorICAgIHZv
aWQgYWRkQ2hpbGQoQ29kZVByb2ZpbGUqIGNoaWxkKQorICAgIHsKKyAgICAgICAgbV9jaGlsZHJl
bi5hcHBlbmQoYWRvcHRQdHIoY2hpbGQpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZW51bSBD
b2RlVHlwZSB7CisgICAgICAgIEVuZ2luZUNvZGUsCisgICAgICAgIEdsb2JhbFRodW5rLAorICAg
ICAgICBSZWdFeHBDb2RlLAorICAgICAgICBERkdKSVQsCisgICAgICAgIEJhc2VsaW5lT25seSwK
KyAgICAgICAgQmFzZWxpbmVQcm9maWxlLAorICAgICAgICBCYXNlbGluZU9TUiwKKyAgICAgICAg
RW5naW5lRnJhbWUsCisgICAgICAgIE51bWJlck9mQ29kZVR5cGVzCisgICAgfTsKKyAgICBzdHJ1
Y3QgQ29kZVJlY29yZCB7CisgICAgICAgIENvZGVSZWNvcmQodm9pZCogcGMsIENvZGVUeXBlIHR5
cGUpCisgICAgICAgICAgICA6IHBjKHBjKQorICAgICAgICAgICAgLCB0eXBlKHR5cGUpCisgICAg
ICAgIHsKKyAgICAgICAgfQorICAgICAgICB2b2lkKiBwYzsKKyAgICAgICAgQ29kZVR5cGUgdHlw
ZTsKKyAgICB9OworCisgICAgQ1N0cmluZyBtX2ZpbGU7CisgICAgdW5zaWduZWQgbV9saW5lTm87
CisgICAgQ29kZVByb2ZpbGUqIG1fcGFyZW50OworICAgIFZlY3RvcjwgT3duUHRyPENvZGVQcm9m
aWxlPiA+IG1fY2hpbGRyZW47CisgICAgVGllcmVkTU1hcEFycmF5PENvZGVSZWNvcmQ+IG1fc2Ft
cGxlczsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzX2NvZGVUeXBlTmFtZXNbTnVtYmVyT2ZD
b2RlVHlwZXNdOworfTsKKworfQorCisjZW5kaWYgLy8gQ29kZVByb2ZpbGVfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29kZVBy
b2ZpbGluZy5oIgorCisjaW5jbHVkZSAiQ29kZVByb2ZpbGUuaCIKKyNpbmNsdWRlICJNZXRhQWxs
b2NhdG9yLmgiCisjaW5jbHVkZSAic2lnbmFsLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2xh
dGlsZSBDb2RlUHJvZmlsZSogQ29kZVByb2ZpbGluZzo6c19wcm9maWxlU3RhY2sgPSAwOworQ29k
ZVByb2ZpbGluZzo6TW9kZSBDb2RlUHJvZmlsaW5nOjpzX21vZGUgPSBDb2RlUHJvZmlsaW5nOjpE
aXNhYmxlZDsKK1dURjo6TWV0YUFsbG9jYXRvclRyYWNrZXIqIENvZGVQcm9maWxpbmc6OnNfdHJh
Y2tlciA9IDA7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBzdGFydCAmIHN0b3AgdGhlIHRpbWVy
LgorLy8gUHJlc2VudGx5IHdlJ3JlIHVzaW5nIHRoZSB3YWxsLWNsb2NrIHRpbWVyLCBzaW5jZSB0
aGlzIHNlZW1zIHRvIGdpdmUgdGhlIGJlc3QgcmVzdWx0cy4KK3N0YXRpYyB2b2lkIHNldFByb2Zp
bGVUaW1lcih1bnNpZ25lZCB1c2VjKQoreworI2lmIFBMQVRGT1JNKE1BQykgJiYgQ1BVKFg4Nl82
NCkKKyAgICBpdGltZXJ2YWwgdGltZXI7CisgICAgdGltZXIuaXRfdmFsdWUudHZfc2VjID0gMDsK
KyAgICB0aW1lci5pdF92YWx1ZS50dl91c2VjID0gdXNlYzsKKyAgICB0aW1lci5pdF9pbnRlcnZh
bC50dl9zZWMgPSAwOworICAgIHRpbWVyLml0X2ludGVydmFsLnR2X3VzZWMgPSB1c2VjOworICAg
IHNldGl0aW1lcihJVElNRVJfUkVBTCwgJnRpbWVyLCAwKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHVzZWMpOworICAgIC8vIFRoaXMgcGxhdGZvcm0gaXMgbm90IHlldCBzdXBwb3J0ZWQhCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKworI2lmIFBMQVRGT1JNKE1BQykg
JiYgQ1BVKFg4Nl82NCkKK3N0YXRpYyB2b2lkIHByb2ZpbGluZ1RpbWVyKGludCwgc2lnaW5mb190
Kiwgdm9pZCogdWFwKQoreworICAgIG1jb250ZXh0X3QgY29udGV4dCA9IHN0YXRpY19jYXN0PHVj
b250ZXh0X3QqPih1YXApLT51Y19tY29udGV4dDsKKyAgICBDb2RlUHJvZmlsaW5nOjpzYW1wbGUo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY29udGV4dC0+X19zcy5fX3JpcCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihjb250ZXh0LT5fX3NzLl9f
cmJwKSk7Cit9CisjZW5kaWYKKworLy8gQ2FsbGJhY2sgdHJpZ2dlcmVkIHdoZW4gdGhlIHRpbWVy
IGlzIGZpcmVkLgordm9pZCBDb2RlUHJvZmlsaW5nOjpzYW1wbGUodm9pZCogcGMsIHZvaWQqKiBm
cmFtZVBvaW50ZXIpCit7CisgICAgQ29kZVByb2ZpbGUqIHByb2ZpbGVTdGFjayA9IGNvbnN0X2Nh
c3Q8Q29kZVByb2ZpbGUqPihzX3Byb2ZpbGVTdGFjayk7CisgICAgaWYgKHByb2ZpbGVTdGFjaykK
KyAgICAgICAgcHJvZmlsZVN0YWNrLT5zYW1wbGUocGMsIGZyYW1lUG9pbnRlcik7Cit9CisKK3Zv
aWQgQ29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9yKFdURjo6TWV0YUFsbG9jYXRvciogYWxs
b2NhdG9yKQoreworICAgIC8vIENoZWNrIGZvciBKU0NfQ09ERV9QUk9GSUxJTkcuCisgICAgY29u
c3QgY2hhciogY29kZVByb2ZpbGluZ01vZGUgPSBnZXRlbnYoIkpTQ19DT0RFX1BST0ZJTElORyIp
OworICAgIGlmICghY29kZVByb2ZpbGluZ01vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IENoZWNrIGZvciBhIHZhbGlkIG1vZGUsIGN1cnJlbnRseSAiMSIsICIyIiwgb3IgIjMiLgorICAg
IGlmICghY29kZVByb2ZpbGluZ01vZGVbMF0gfHwgY29kZVByb2ZpbGluZ01vZGVbMV0pCisgICAg
ICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKCpjb2RlUHJvZmlsaW5nTW9kZSkgeworICAgIGNhc2Ug
JzEnOgorICAgICAgICBzX21vZGUgPSBFbmFibGVkOworICAgICAgICBicmVhazsKKyAgICBjYXNl
ICcyJzoKKyAgICAgICAgc19tb2RlID0gVmVyYm9zZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSAnMyc6CisgICAgICAgIHNfbW9kZSA9IFZlcnlWZXJib3NlOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGVuYWJsZWQo
KSk7CisgICAgQVNTRVJUKCFzX3RyYWNrZXIpOworICAgIHNfdHJhY2tlciA9IG5ldyBXVEY6Ok1l
dGFBbGxvY2F0b3JUcmFja2VyKCk7CisgICAgYWxsb2NhdG9yLT50cmFja0FsbG9jYXRpb25zKHNf
dHJhY2tlcik7Cit9CisKK3ZvaWQqIENvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEModm9p
ZCogYWRkcmVzcykKK3sKKyAgICBpZiAoIXNfdHJhY2tlcikKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBzX3RyYWNrZXItPmZpbmQoYWRk
cmVzcyk7CisgICAgaWYgKCFoYW5kbGUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBo
YW5kbGUtPm93bmVyVUlEKCk7Cit9CisKK3ZvaWQgQ29kZVByb2ZpbGluZzo6YmVnaW4oY29uc3Qg
U291cmNlQ29kZSYgc291cmNlKQoreworICAgIC8vIFB1c2ggYSBuZXcgQ29kZVByb2ZpbGUgb250
byB0aGUgc3RhY2sgZm9yIGVhY2ggc2NyaXB0IGVuY291bnRlcmVkLgorICAgIENvZGVQcm9maWxl
KiBwcm9maWxlU3RhY2sgPSBjb25zdF9jYXN0PENvZGVQcm9maWxlKj4oc19wcm9maWxlU3RhY2sp
OworICAgIGJvb2wgYWxyZWFkeVByb2ZpbGluZyA9IHByb2ZpbGVTdGFjazsKKyAgICBzX3Byb2Zp
bGVTdGFjayA9IHByb2ZpbGVTdGFjayA9IG5ldyBDb2RlUHJvZmlsZShzb3VyY2UsIHByb2ZpbGVT
dGFjayk7CisKKyAgICAvLyBJcyB0aGUgcHJvZmlsZXIgYWxyZWFkeSBydW5uaW5nIC0gaWYgc28s
IHRoZSB0aW1lciB3aWxsIGFscmVhZHkgYmUgc2V0IHVwLgorICAgIGlmIChhbHJlYWR5UHJvZmls
aW5nKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBSZWdzaXRlciBhIHNpZ25hbCBoYW5kbGVy
ICYgaXRpbWVyLgorI2lmIFBMQVRGT1JNKE1BQykgJiYgQ1BVKFg4Nl82NCkKKyAgICBzdHJ1Y3Qg
c2lnYWN0aW9uIGFjdGlvbjsKKyAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkICgqKShpbnQsIHN0cnVjdCBfX3NpZ2luZm8gKiwgdm9pZCAqKT4ocHJvZmlsaW5n
VGltZXIpOworICAgIHNpZ2ZpbGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAgICBhY3Rpb24uc2Ff
ZmxhZ3MgPSBTQV9TSUdJTkZPOworICAgIHNpZ2FjdGlvbihTSUdBTFJNLCAmYWN0aW9uLCAwKTsK
KyNlbmRpZgorICAgIHNldFByb2ZpbGVUaW1lcigxMDApOworfQorCit2b2lkIENvZGVQcm9maWxp
bmc6OmVuZCgpCit7CisgICAgLy8gUG9wIHRoZSBjdXJyZW50IHByb2ZpbGVyIG9mZiB0aGUgc3Rh
Y2suCisgICAgQ29kZVByb2ZpbGUqIGN1cnJlbnQgPSBjb25zdF9jYXN0PENvZGVQcm9maWxlKj4o
c19wcm9maWxlU3RhY2spOworICAgIEFTU0VSVChjdXJyZW50KTsKKyAgICBzX3Byb2ZpbGVTdGFj
ayA9IGN1cnJlbnQtPnBhcmVudCgpOworCisgICAgLy8gSXMgdGhpcyB0aGUgb3V0ZXJtb3N0IHNj
cmlwdCBiZWluZyBwcm9maWxlZD8gLSBpZiBub3QsIGp1c3QgcmV0dXJuLgorICAgIC8vIFdlIHBl
cmZvcm0gYWxsIG91dHB1dCBvZiBwcm9maWxlcyByZWN1cnNpdmVseSBmcm9tIHRoZSBvdXRlcm1v
c3Qgc2NyaXB0LAorICAgIC8vIHRvIG1pbmltaXplIHByb2ZpbGluZyBvdmVyaGVhZCBmcm9tIHNr
ZXdpbmcgcmVzdWx0cy4KKyAgICBpZiAoc19wcm9maWxlU3RhY2spCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIFN0b3AgcHJvZmlsaW5nCisgICAgc2V0UHJvZmlsZVRpbWVyKDApOworCisgICAg
Y3VycmVudC0+cmVwb3J0KCk7CisgICAgZGVsZXRlIGN1cnJlbnQ7Cit9CisKK30KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBDb2RlUHJvZmlsaW5nX2gKKyNkZWZpbmUgQ29kZVByb2ZpbGlu
Z19oCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBNZXRhQWxsb2NhdG9yOworY2xhc3MgTWV0
YUFsbG9jYXRvclRyYWNrZXI7CisKK30KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVQ
cm9maWxlOworY2xhc3MgU291cmNlQ29kZTsKKworY2xhc3MgQ29kZVByb2ZpbGluZyB7CisgICAg
ZW51bSBNb2RlIHsKKyAgICAgICAgRGlzYWJsZWQsCisgICAgICAgIEVuYWJsZWQsCisgICAgICAg
IFZlcmJvc2UsCisgICAgICAgIFZlcnlWZXJib3NlCisgICAgfTsKKworcHVibGljOgorICAgIENv
ZGVQcm9maWxpbmcoY29uc3QgU291cmNlQ29kZSYgc291cmNlKQorICAgICAgICA6IG1fYWN0aXZl
KGVuYWJsZWQoKSkKKyAgICB7CisgICAgICAgIGlmIChtX2FjdGl2ZSkKKyAgICAgICAgICAgIGJl
Z2luKHNvdXJjZSk7CisgICAgfQorCisgICAgfkNvZGVQcm9maWxpbmcoKQorICAgIHsKKyAgICAg
ICAgaWYgKG1fYWN0aXZlKQorICAgICAgICAgICAgZW5kKCk7CisgICAgfQorCisgICAgc3RhdGlj
IGJvb2wgZW5hYmxlZCgpIHsgcmV0dXJuIHNfbW9kZSAhPSBEaXNhYmxlZDsgfQorICAgIHN0YXRp
YyBib29sIGJlVmVyYm9zZSgpIHsgcmV0dXJuIHNfbW9kZSA+PSBWZXJib3NlOyB9CisgICAgc3Rh
dGljIGJvb2wgYmVWZXJ5VmVyYm9zZSgpIHsgcmV0dXJuIHNfbW9kZSA+PSBWZXJ5VmVyYm9zZTsg
fQorCisgICAgc3RhdGljIHZvaWQgbm90aWZ5QWxsb2NhdG9yKFdURjo6TWV0YUFsbG9jYXRvciop
OworICAgIHN0YXRpYyB2b2lkKiBnZXRPd25lclVJREZvclBDKHZvaWQqKTsKKyAgICBzdGF0aWMg
dm9pZCBzYW1wbGUodm9pZCogcGMsIHZvaWQqKiBmcmFtZVBvaW50ZXIpOworCitwcml2YXRlOgor
ICAgIHZvaWQgYmVnaW4oY29uc3QgU291cmNlQ29kZSYpOworICAgIHZvaWQgZW5kKCk7CisKKyAg
ICBib29sIG1fYWN0aXZlOworCisgICAgc3RhdGljIE1vZGUgc19tb2RlOworICAgIHN0YXRpYyBX
VEY6Ok1ldGFBbGxvY2F0b3JUcmFja2VyKiBzX3RyYWNrZXI7CisgICAgc3RhdGljIHZvbGF0aWxl
IENvZGVQcm9maWxlKiBzX3Byb2ZpbGVTdGFjazsKK307CisKK30KKworI2VuZGlmIC8vIENvZGVQ
cm9maWxpbmdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRy
ZWVOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Byb2Zp
bGVUcmVlTm9kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L1Byb2ZpbGVUcmVlTm9kZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFByb2ZpbGVU
cmVlTm9kZV9oCisjZGVmaW5lIFByb2ZpbGVUcmVlTm9kZV9oCisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBQcm9maWxlVHJlZU5vZGUgeworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFBy
b2ZpbGVUcmVlTm9kZT4gTWFwOworICAgIHR5cGVkZWYgc3RkOjpwYWlyPFN0cmluZywgUHJvZmls
ZVRyZWVOb2RlPiBNYXBFbnRyeTsKKworcHVibGljOgorICAgIFByb2ZpbGVUcmVlTm9kZSgpCisg
ICAgICAgIDogbV9jb3VudCgwKQorICAgICAgICAsIG1fY2hpbGRyZW4oMCkKKyAgICB7CisgICAg
fQorCisgICAgflByb2ZpbGVUcmVlTm9kZSgpCisgICAgeworICAgICAgICBkZWxldGUgbV9jaGls
ZHJlbjsKKyAgICB9CisKKyAgICBQcm9maWxlVHJlZU5vZGUqIHNhbXBsZUNoaWxkKGNvbnN0IGNo
YXIqIG5hbWUpCisgICAgeworICAgICAgICBpZiAoIW1fY2hpbGRyZW4pCisgICAgICAgICAgICBt
X2NoaWxkcmVuID0gbmV3IE1hcCgpOworICAgIAorICAgICAgICBQcm9maWxlVHJlZU5vZGUgbmV3
RW50cnk7CisgICAgICAgIHBhaXI8TWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9jaGls
ZHJlbi0+YWRkKFN0cmluZyhuYW1lKSwgbmV3RW50cnkpOworICAgICAgICBQcm9maWxlVHJlZU5v
ZGUqIGNoaWxkSW5NYXAgPSAmcmVzdWx0LmZpcnN0LT5zZWNvbmQ7CisgICAgICAgICsrY2hpbGRJ
bk1hcC0+bV9jb3VudDsKKyAgICAgICAgcmV0dXJuIGNoaWxkSW5NYXA7CisgICAgfQorCisgICAg
dm9pZCBkdW1wKCkKKyAgICB7CisgICAgICAgIGR1bXBJbnRlcm5hbCgwKTsKKyAgICB9CisKKyAg
ICB1aW50NjRfdCBjb3VudCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9jb3VudDsKKyAgICB9
CisKKyAgICB1aW50NjRfdCBjaGlsZENvdW50KCkKKyAgICB7CisgICAgICAgIGlmICghbV9jaGls
ZHJlbikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB1aW50NjRfdCBjaGlsZENvdW50
ID0gMDsKKyAgICAgICAgZm9yIChNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi0+YmVnaW4o
KTsgaXQgIT0gbV9jaGlsZHJlbi0+ZW5kKCk7ICsraXQpCisgICAgICAgICAgICBjaGlsZENvdW50
ICs9IGl0LT5zZWNvbmQuY291bnQoKTsKKyAgICAgICAgcmV0dXJuIGNoaWxkQ291bnQ7CisgICAg
fQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIGR1bXBJbnRlcm5hbCh1bnNpZ25lZCBpbmRlbnQp
CisgICAgeworICAgICAgICBpZiAoIW1fY2hpbGRyZW4pCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgLy8gQ29weSBwb2ludGVycyB0byBhbGwgY2hpbGRyZW4gaW50byBhIHZlY3Rvciwg
YW5kIHNvcnQgdGhlIHZlY3RvciBieSBzYW1wbGUgY291bnQuCisgICAgICAgIFZlY3RvcjxNYXBF
bnRyeSo+IGVudHJpZXM7CisgICAgICAgIGZvciAoTWFwOjppdGVyYXRvciBpdCA9IG1fY2hpbGRy
ZW4tPmJlZ2luKCk7IGl0ICE9IG1fY2hpbGRyZW4tPmVuZCgpOyArK2l0KQorICAgICAgICAgICAg
ZW50cmllcy5hcHBlbmQoJippdCk7CisgICAgICAgIHFzb3J0KGVudHJpZXMuYmVnaW4oKSwgZW50
cmllcy5zaXplKCksIHNpemVvZihNYXBFbnRyeSopLCBjb21wYXJlRW50cmllcyk7CisKKyAgICAg
ICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBjaGlsZHJlbiBpbiBzYW1wbGUtZnJlcXVlbmN5IG9yZGVy
LgorICAgICAgICBmb3IgKHNpemVfdCBlID0gMDsgZSA8IGVudHJpZXMuc2l6ZSgpOyArK2UpIHsK
KyAgICAgICAgICAgIE1hcEVudHJ5KiBlbnRyeSA9IGVudHJpZXNbZV07CisKKyAgICAgICAgICAg
IC8vIFByaW50IHRoZSBudW1iZXIgb2Ygc2FtcGxlcywgdGhlIG5hbWUgb2YgdGhpcyBub2RlLCBh
bmQgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRoYXQgYXJlIHN0YWNrLXRvcAorICAgICAgICAgICAg
Ly8gaW4gdGhpcyBub2RlIChzYW1wbGVzIGRpcmVjdGx5IHdpdGhpbiB0aGlzIG5vZGUsIGV4Y2x1
ZGluZyBzYW1wbGVzIGluIGNoaWxkcmVuLgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGluZGVudDsgKytpKQorICAgICAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiICAg
ICIpOworICAgICAgICAgICAgZnByaW50ZihzdGRvdXQsICIlIDhsbGQ6ICVzICglbGxkIHN0YWNr
IHRvcClcbiIsCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihlbnRyeS0+
c2Vjb25kLmNvdW50KCkpLAorICAgICAgICAgICAgICAgIGVudHJ5LT5maXJzdC51dGY4KCkuZGF0
YSgpLAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oZW50cnktPnNlY29u
ZC5jb3VudCgpIC0gZW50cnktPnNlY29uZC5jaGlsZENvdW50KCkpKTsKKworICAgICAgICAgICAg
Ly8gUmVjdXJzaXZlbHkgZHVtcCB0aGUgY2hpbGQgbm9kZXMuCisgICAgICAgICAgICBlbnRyeS0+
c2Vjb25kLmR1bXBJbnRlcm5hbChpbmRlbnQgKyAxKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHN0YXRpYyBpbnQgY29tcGFyZUVudHJpZXMoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikK
KyAgICB7CisgICAgICAgIHVpbnQ2NF90IGRhID0gKCpzdGF0aWNfY2FzdDxNYXBFbnRyeSogY29u
c3QgKj4oYSkpLT5zZWNvbmQuY291bnQoKTsKKyAgICAgICAgdWludDY0X3QgZGIgPSAoKnN0YXRp
Y19jYXN0PE1hcEVudHJ5KiBjb25zdCAqPihiKSktPnNlY29uZC5jb3VudCgpOworICAgICAgICBy
ZXR1cm4gKGRhIDwgZGIpIC0gKGRhID4gZGIpOworICAgIH0KKworICAgIHVpbnQ2NF90IG1fY291
bnQ7CisgICAgTWFwKiBtX2NoaWxkcmVuOworfTsKKworfQorCisjZW5kaWYgLy8gUHJvZmlsZVRy
ZWVOb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1RpZXJlZE1NYXBB
cnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9UaWVyZWRN
TWFwQXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9U
aWVyZWRNTWFwQXJyYXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUaWVyZWRNTWFw
QXJyYXlfaAorI2RlZmluZSBUaWVyZWRNTWFwQXJyYXlfaAorCisjaW5jbHVkZSAiT1NBbGxvY2F0
b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIHNp
bXBsZSBhcnJheSBjbGFzcyB0aGF0IGNhbiBiZSBncm93biBieSBhcHBlbmRpbmcgaXRlbXMgdG8g
dGhlIGVuZC4KKy8vIFRoaXMgY2xhc3MgaXMgaW1wbGVtZW50ZWQgcHVyZWx5IGluIHRlcm1zIG9m
IHN5c3RlbSBhbGxvY2F0aW9ucywgd2l0aCBubyBtYWxsb2MvZnJlZSwgc28gdGhhdAorLy8gaXQg
Y2FuIHNhZmVseSBiZSB1c2VkIGZyb20gYSBzZWNvbmRhcnkgdGhyZWFkIHdoaWxzdCB0aGUgbWFp
biB0aHJhZCBpcyBwYXVzZWQgKHBvdGVudGlhbGx5CisvLyBob2xkaW5nIHRoZSBmYXN0IG1hbGxv
YyBoZWFwIGxvY2spLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIFRpZXJlZE1NYXBBcnJh
eSB7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBlbnRyaWVzUGVyQmxvY2sgPSA0MDk2OworCitw
dWJsaWM6CisgICAgVGllcmVkTU1hcEFycmF5KCkKKyAgICAgICAgOiBtX2RpcmVjdG9yeUNvdW50
KDQwOTYpCisgICAgICAgICwgbV9kaXJlY3Rvcnkoc3RhdGljX2Nhc3Q8VCoqPihPU0FsbG9jYXRv
cjo6cmVzZXJ2ZUFuZENvbW1pdChtX2RpcmVjdG9yeUNvdW50ICogc2l6ZW9mKFQqKSkpKQorICAg
ICAgICAsIG1fc2l6ZSgwKQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgYmxvY2sgPSAwOyBi
bG9jayA8IG1fZGlyZWN0b3J5Q291bnQ7ICsrYmxvY2spCisgICAgICAgICAgICBtX2RpcmVjdG9y
eVtibG9ja10gPSAwOworICAgIH0KKworICAgIH5UaWVyZWRNTWFwQXJyYXkoKQorICAgIHsKKyAg
ICAgICAgc2l6ZV90IHVzZWRDb3VudCA9IChtX3NpemUgKyAoZW50cmllc1BlckJsb2NrIC0gMSkp
IC8gZW50cmllc1BlckJsb2NrOworICAgICAgICBBU1NFUlQodXNlZENvdW50ID09IG1fZGlyZWN0
b3J5Q291bnQgfHwgIW1fZGlyZWN0b3J5W3VzZWRDb3VudF0pOworCisgICAgICAgIGZvciAoc2l6
ZV90IGJsb2NrID0gMDsgYmxvY2sgPCB1c2VkQ291bnQ7ICsrYmxvY2spIHsKKyAgICAgICAgICAg
IEFTU0VSVChtX2RpcmVjdG9yeVtibG9ja10pOworICAgICAgICAgICAgT1NBbGxvY2F0b3I6OmRl
Y29tbWl0QW5kUmVsZWFzZShtX2RpcmVjdG9yeVtibG9ja10sIGVudHJpZXNQZXJCbG9jayAqIHNp
emVvZihUKSk7CisgICAgICAgIH0KKworICAgICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRS
ZWxlYXNlKG1fZGlyZWN0b3J5LCBtX2RpcmVjdG9yeUNvdW50ICogc2l6ZW9mKFQqKSk7CisgICAg
fQorCisgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBBU1NF
UlQoaW5kZXggPCBtX3NpemUpOworICAgICAgICBzaXplX3QgYmxvY2sgPSBpbmRleCAvIGVudHJp
ZXNQZXJCbG9jazsKKyAgICAgICAgc2l6ZV90IG9mZnNldCA9IGluZGV4ICUgZW50cmllc1BlckJs
b2NrOworCisgICAgICAgIEFTU0VSVChtX2RpcmVjdG9yeVtibG9ja10pOworICAgICAgICByZXR1
cm4gbV9kaXJlY3RvcnlbYmxvY2tdW29mZnNldF07CisgICAgfQorCisgICAgdm9pZCBhcHBlbmQo
Y29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICAvLyBDaGVjayBpZiB0aGUgYXJyYXkgaXMg
Y29tcGxldGVseSBmdWxsLCBpZiBzbyBjcmVhdGUgbW9yZSBjYXBhY2l0eSBpbiB0aGUgZGlyZWN0
b3J5LgorICAgICAgICBpZiAobV9zaXplID09IG1fZGlyZWN0b3J5Q291bnQgKiBlbnRyaWVzUGVy
QmxvY2spIHsKKyAgICAgICAgICAgIC8vIFJlYWxsb2NhdGUgdGhlIGRpcmVjdG9yeS4KKyAgICAg
ICAgICAgIHNpemVfdCBvbGREaXJlY3RvcnlTaXplID0gbV9kaXJlY3RvcnlDb3VudCAqIHNpemVv
ZihUKik7CisgICAgICAgICAgICBzaXplX3QgbmV3RGlyZWN0b3J5U2l6ZSA9IG9sZERpcmVjdG9y
eVNpemUgKiAyOworICAgICAgICAgICAgaWYgKG5ld0RpcmVjdG9yeVNpemUgPCBvbGREaXJlY3Rv
cnlTaXplKQorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBtX2RpcmVjdG9y
eSA9IE9TQWxsb2NhdG9yOjpyZWFsbG9jYXRlQ29tbWl0dGVkKG1fZGlyZWN0b3J5LCBvbGREaXJl
Y3RvcnlTaXplLCBuZXdEaXJlY3RvcnlTaXplKTsKKworICAgICAgICAgICAgLy8gCisgICAgICAg
ICAgICBzaXplX3QgbmV3RGlyZWN0b3J5Q291bnQgPSBtX2RpcmVjdG9yeUNvdW50ICogMjsKKyAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGJsb2NrID0gbV9kaXJlY3RvcnlDb3VudDsgYmxvY2sgPCBu
ZXdEaXJlY3RvcnlDb3VudDsgKytibG9jaykKKyAgICAgICAgICAgICAgICBtX2RpcmVjdG9yeVti
bG9ja10gPSAwOworICAgICAgICAgICAgbV9kaXJlY3RvcnlDb3VudCA9IG5ld0RpcmVjdG9yeUNv
dW50OworICAgICAgICB9CisKKyAgICAgICAgc2l6ZV90IGluZGV4ID0gbV9zaXplOworICAgICAg
ICBzaXplX3QgYmxvY2sgPSBpbmRleCAvIGVudHJpZXNQZXJCbG9jazsKKyAgICAgICAgc2l6ZV90
IG9mZnNldCA9IGluZGV4ICUgZW50cmllc1BlckJsb2NrOworCisgICAgICAgIGlmICghb2Zmc2V0
KSB7CisgICAgICAgICAgICBBU1NFUlQoIW1fZGlyZWN0b3J5W2Jsb2NrXSk7CisgICAgICAgICAg
ICBtX2RpcmVjdG9yeVtibG9ja10gPSBzdGF0aWNfY2FzdDxUKj4oT1NBbGxvY2F0b3I6OnJlc2Vy
dmVBbmRDb21taXQoZW50cmllc1BlckJsb2NrICogc2l6ZW9mKFQpKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBBU1NFUlQobV9kaXJlY3RvcnlbYmxvY2tdKTsKKyAgICAgICAgKyttX3NpemU7Cisg
ICAgICAgIG1fZGlyZWN0b3J5W2Jsb2NrXVtvZmZzZXRdID0gdmFsdWU7CisgICAgfQorCisgICAg
c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworcHJpdmF0ZToKKyAgICBz
aXplX3QgbV9kaXJlY3RvcnlDb3VudDsKKyAgICBUKiogbV9kaXJlY3Rvcnk7CisgICAgc2l6ZV90
IG1fc2l6ZTsKK307CisKK30KKworI2VuZGlmIC8vIFRpZXJlZE1NYXBBcnJheV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAkocmV2aXNpb24g
MTA2MTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTUsMTAgKzU1LDExIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBNZXRh
QWxsb2NhdG9yOjpyZWxlYXMKICAgICAgICAgbV90cmFja2VyLT5yZWxlYXNlKGhhbmRsZSk7CiB9
CiAKLU1ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRv
ciogYWxsb2NhdG9yLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQorTWV0YUFsbG9j
YXRvckhhbmRsZTo6TWV0YUFsbG9jYXRvckhhbmRsZShNZXRhQWxsb2NhdG9yKiBhbGxvY2F0b3Is
IHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKQogICAgIDog
bV9hbGxvY2F0b3IoYWxsb2NhdG9yKQogICAgICwgbV9zdGFydChzdGFydCkKICAgICAsIG1fc2l6
ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCisgICAgLCBtX293bmVyVUlEKG93bmVyVUlEKQogewogICAg
IEFTU0VSVChhbGxvY2F0b3IpOwogICAgIEFTU0VSVChzdGFydCk7CkBAIC0xMjksNyArMTMwLDcg
QEAgTWV0YUFsbG9jYXRvcjo6TWV0YUFsbG9jYXRvcihzaXplX3QgYWxsbwogICAgIEFTU0VSVChz
dGF0aWNfY2FzdDxzaXplX3Q+KDEpIDw8IG1fbG9nQWxsb2NhdGlvbkdyYW51bGUgPT0gbV9hbGxv
Y2F0aW9uR3JhbnVsZSk7CiB9CiAKLVBhc3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0
YUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzKQorUGFzc1JlZlB0cjxNZXRh
QWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0
ZXMsIHZvaWQqIG93bmVyVUlEKQogewogICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2Nr
KTsKIApAQCAtMTY3LDcgKzE2OCw3IEBAIFBhc3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4g
TWV0YUFsbG8KICAgICBtX251bUFsbG9jYXRpb25zKys7CiAjZW5kaWYKIAotICAgIE1ldGFBbGxv
Y2F0b3JIYW5kbGUqIGhhbmRsZSA9IG5ldyBNZXRhQWxsb2NhdG9ySGFuZGxlKHRoaXMsIHN0YXJ0
LCBzaXplSW5CeXRlcyk7CisgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gbmV3IE1l
dGFBbGxvY2F0b3JIYW5kbGUodGhpcywgc3RhcnQsIHNpemVJbkJ5dGVzLCBvd25lclVJRCk7CiAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCBhIHZlcmlmaWVyIHNjaGVtZSB0aGF0IGdyb2tzIE1ldGFB
bGxvY2F0b3JIYW5kbGVzCiAgICAgaGFuZGxlLT5kZXByZWNhdGVkVHVybk9mZlZlcmlmaWVyKCk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5oCShyZXZp
c2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmly
dHVhbCB+TWV0YUFsbG9jYXRvcigpOwogICAgIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSBQYXNz
UmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcyk7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFBhc3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4g
YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCk7CiAKICAgICB2b2lk
IHRyYWNrQWxsb2NhdGlvbnMoTWV0YUFsbG9jYXRvclRyYWNrZXIqIHRyYWNrZXIpCiAgICAgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxl
LmgJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFs
bG9jYXRvckhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIE1l
dGFBbGxvY2F0b3I7CiAKIGNsYXNzIE1ldGFBbGxvY2F0b3JIYW5kbGUgOiBwdWJsaWMgUmVmQ291
bnRlZDxNZXRhQWxsb2NhdG9ySGFuZGxlPiwgcHVibGljIFJlZEJsYWNrVHJlZTxNZXRhQWxsb2Nh
dG9ySGFuZGxlLCB2b2lkKj46Ok5vZGUgewogcHJpdmF0ZToKLSAgICBNZXRhQWxsb2NhdG9ySGFu
ZGxlKE1ldGFBbGxvY2F0b3IqLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKTsKKyAg
ICBNZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0b3IqLCB2b2lkKiBzdGFydCwgc2l6ZV90
IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCk7CiAgICAgCiBwdWJsaWM6CiAgICAgV1RGX0VY
UE9SVF9QUklWQVRFIH5NZXRhQWxsb2NhdG9ySGFuZGxlKCk7CkBAIC03Miw3ICs3MiwxMiBAQCBw
dWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2FsbG9jYXRvcik7CiAgICAgICAgIHJldHVybiBtX2Fs
bG9jYXRvcjsKICAgICB9Ci0gICAgCisKKyAgICB2b2lkKiBvd25lclVJRCgpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9vd25lclVJRDsKKyAgICB9CisKICAgICB2b2lkKiBrZXkoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIG1fc3RhcnQ7CkBAIC04NCw2ICs4OSw3IEBAIHByaXZhdGU6CiAgICAg
TWV0YUFsbG9jYXRvciogbV9hbGxvY2F0b3I7CiAgICAgdm9pZCogbV9zdGFydDsKICAgICBzaXpl
X3QgbV9zaXplSW5CeXRlczsKKyAgICB2b2lkKiBtX293bmVyVUlEOwogfTsKIAogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9PU0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvT1NBbGxvY2F0b3IuaAkocmV2aXNpb24gMTA2MTUwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9PU0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIE9TQWxsb2NhdG9yX2gKICNkZWZpbmUgT1NBbGxv
Y2F0b3JfaAogCisjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJh
bS5oPgogI2luY2x1ZGUgPHd0Zi9WTVRhZ3MuaD4KICNpbmNsdWRlIDx3dGYvVk1UYWdzLmg+CkBA
IC02NSw2ICs2NiwxMiBAQCBwdWJsaWM6CiAgICAgLy8gc3BlY2lmaWVkLgogICAgIHN0YXRpYyB2
b2lkKiByZXNlcnZlQW5kQ29tbWl0KHNpemVfdCByZXNlcnZlU2l6ZSwgc2l6ZV90IGNvbW1pdFNp
emUsIFVzYWdlID0gVW5rbm93blVzYWdlLCBib29sIHdyaXRhYmxlID0gdHJ1ZSwgYm9vbCBleGVj
dXRhYmxlID0gZmFsc2UpOwogICAgIHN0YXRpYyB2b2lkIGRlY29tbWl0QW5kUmVsZWFzZSh2b2lk
KiByZWxlYXNlQmFzZSwgc2l6ZV90IHJlbGVhc2VTaXplLCB2b2lkKiBkZWNvbW1pdEJhc2UsIHNp
emVfdCBkZWNvbW1pdFNpemUpOworCisgICAgLy8gUmVhbGxvY2F0ZSBhbiBleGlzdGluZywgY29t
bWl0dGVkIGFsbG9jYXRpb24uCisgICAgLy8gVGhlIHByaW9yIGFsbG9jYXRpb24gbXVzdCBiZSBm
dWxseSBjb21pdHRlZCwgYW5kIHRoZSBuZXcgc2l6ZSB3aWxsIGFsc28gYmUgZnVsbHkgY29tbWl0
dGVkLgorICAgIC8vIFRoaXMgaW50ZXJmYWNlIGlzIHByb3ZpZGVkIHNpbmNlIGl0IG1heSBiZSBw
b3NzaWJsZSB0byBvcHRpbWl6ZSB0aGlzIG9wZXJhdGlvbiBvbiBzb21lIHBsYXRmb3Jtcy4KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBUKiByZWFsbG9jYXRlQ29tbWl0dGVk
KFQqLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUsIFVzYWdlID0gVW5rbm93blVzYWdl
LCBib29sIHdyaXRhYmxlID0gdHJ1ZSwgYm9vbCBleGVjdXRhYmxlID0gZmFsc2UpOwogfTsKIAog
aW5saW5lIHZvaWQqIE9TQWxsb2NhdG9yOjpyZXNlcnZlQW5kQ29tbWl0KHNpemVfdCByZXNlcnZl
U2l6ZSwgc2l6ZV90IGNvbW1pdFNpemUsIFVzYWdlIHVzYWdlLCBib29sIHdyaXRhYmxlLCBib29s
IGV4ZWN1dGFibGUpCkBAIC05Myw2ICsxMDAsMTUgQEAgaW5saW5lIHZvaWQgT1NBbGxvY2F0b3I6
OmRlY29tbWl0QW5kUmVsZQogICAgIGRlY29tbWl0QW5kUmVsZWFzZShiYXNlLCBzaXplLCBiYXNl
LCBzaXplKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSBUKiBPU0FsbG9jYXRv
cjo6cmVhbGxvY2F0ZUNvbW1pdHRlZChUKiBvbGRCYXNlLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90
IG5ld1NpemUsIFVzYWdlIHVzYWdlLCBib29sIHdyaXRhYmxlLCBib29sIGV4ZWN1dGFibGUpCit7
CisgICAgdm9pZCogbmV3QmFzZSA9IHJlc2VydmVBbmRDb21taXQobmV3U2l6ZSwgdXNhZ2UsIHdy
aXRhYmxlLCBleGVjdXRhYmxlKTsKKyAgICBtZW1jcHkobmV3QmFzZSwgb2xkQmFzZSwgc3RkOjpt
aW4ob2xkU2l6ZSwgbmV3U2l6ZSkpOworICAgIGRlY29tbWl0QW5kUmVsZWFzZShvbGRCYXNlLCBv
bGRTaXplKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG5ld0Jhc2UpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpPU0FsbG9jYXRvcjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124421</attachid>
            <date>2012-01-27 18:34:33 -0800</date>
            <delta_ts>2012-01-27 19:00:21 -0800</delta_ts>
            <desc>More build fixes (patch already reviewed by oliver)</desc>
            <filename>76855.B.patch</filename>
            <type>text/plain</type>
            <size>59351</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA2MTUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDEyLTAxLTI3ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBJbXBsZW1lbnQgYSBKSVQtY29kZSBhd2FyZSBzYW1wbGluZyBwcm9maWxlciBm
b3IgSlNDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
Njg1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgorCisgICAgICAgIFRvIGVu
YWJsZSB0aGUgcHJvZmlsZXIsIHNldCB0aGUgSlNDX0NPREVfUFJPRklMSU5HIGVudmlyb25tZW50
IHZhcmlhYmxlIHRvCisgICAgICAgIDEgKG5vIHRyYWNpbmcgdGhlIEMgc3RhY2spLCAyICh0cmFj
ZSBvbmUgbGV2ZWwgb2YgQyBjb2RlKSBvciAzIChyZWN1cnNpdmVseQorICAgICAgICB0cmFjZSBh
bGwgc2FtcGxlcykuCisKKyAgICAgICAgVGhlIHByb2ZpbGVyIHJlcXVpcmVzIC1mb21pdC1mcmFt
ZS1wb2ludGVyIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgYnVpbGQgZmxhZ3MuCisKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICAgICAtIFJlbW92ZWQgYW4gZXhwb3J0Lgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICAgICAtIEFkZGVkIG5ldyBmaWxlcworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgICAgICAtIEZvciBiYXNlbGluZSBjb2RlYmxvY2tzLCBjYWNoZSB0aGUgcmVz
dWx0IG9mIGNhbkNvbXBpbGVXaXRoREZHLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5o
OgorICAgICAgICAgICAgLSBGb3IgYmFzZWxpbmUgY29kZWJsb2NrcywgY2FjaGUgdGhlIHJlc3Vs
dCBvZiBjYW5Db21waWxlV2l0aERGRy4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxv
Y2F0b3IpOgorICAgICAgICAgICAgLSBOb3RpZnkgdGhlIHByb2ZpbGVyIHdoZW4gdGhlIGFsbG9j
YXRvciBpcyBjcmVhdGVkLgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxv
Y2F0ZSk6CisgICAgICAgICAgICAtIEluZm9ybSB0aGUgYWxsb2NhdGVkIG9mIHRoZSBvd25lclVJ
RC4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcDoKKyAg
ICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG9jYXRvcik6Cisg
ICAgICAgICAgICAtIE5vdGlmeSB0aGUgcHJvZmlsZXIgd2hlbiB0aGUgYWxsb2NhdG9yIGlzIGNy
ZWF0ZWQuCisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAg
ICAgICAgICAgIC0gSW5mb3JtIHRoZSBhbGxvY2F0ZWQgb2YgdGhlIG93bmVyVUlELgorICAgICAg
ICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgICAgICAtIElmIHByb2ZpbGluZywgZG9uJ3Qg
bWFzayB0aGUgcmV0dXJuIGFkZHJlc3MgaW4gSklUIGNvZGUuCisgICAgICAgICAgICAgIChXZSBk
byBzbyB0byBwcm92aWRlIG5pY2VyIGJhY2t0cmFjZXMgaW4gZGVidWcgYnVpbGRzKS4KKyAgICAg
ICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpldmFsdWF0ZSk6Cisg
ICAgICAgICAgICAtIE5vdGlmeSB0aGUgcHJvZmlsZXIgb2Ygc2NyaXB0IGV2YWx1YXRpb25zLgor
ICAgICAgICAqIHRvb2xzOiBBZGRlZC4KKyAgICAgICAgKiB0b29scy9Db2RlUHJvZmlsZS5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpzeW1ib2xOYW1lKToKKyAgICAgICAgICAgIC0gSGVscGVy
IGZ1bmN0aW9uIHRvIGdldCB0aGUgbmFtZSBvZiBhIHN5bWJvbCBpbiB0aGUgZnJhbWV3b3JrLgor
ICAgICAgICAoSlNDOjp0cnVuY2F0ZVRyYWNlKToKKyAgICAgICAgICAgIC0gSGVscGVyIHRvIHRy
dW5jYXRlIHRyYWNlcyBpbnRvIG1ldGhvZHMga25vdyB0byBoYXZlIHVuaW5mb3JtYXRpdmVseSBk
ZWVwIHN0YWNrcy4KKyAgICAgICAgKEpTQzo6Q29kZVByb2ZpbGU6OnNhbXBsZSk6CisgICAgICAg
ICAgICAtIFJlY29yZCBhIHN0YWNrIHRyYWNlIGNsYXNzaWZ5aW5nIHNhbXBsZXMuCisgICAgICAg
IChKU0M6OkNvZGVQcm9maWxlOjpyZXBvcnQpOgorICAgICAgICAgICAgLSB7UHJpbnQgcHJvZmls
ZXIgb3V0cHV0LgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxlLmg6IEFkZGVkLgorICAgICAg
ICAgICAgLSBuZXcgY2xhc3MsIGNhcHR1cmVzIGEgc2V0IG9mIHNhbXBsZXMgYXNzb2NpYXRlZCB3
aXRoIGFuIGV2YWx1YXRlZCBzY3JpcHQsCisgICAgICAgICAgICAgIGFuZCBuZXN0ZWQgdG8gcmVj
b3JkIHNhbXBsZXMgZnJvbSBzdWJzY3JpcHRzLgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxp
bmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q29kZVByb2ZpbGluZzo6cHJvZmlsaW5nVGlt
ZXIpOgorICAgICAgICAgICAgLSBjYWxsYmFjayBmaXJlZCB0aGVuIGEgdGltZXIgZXZlbnQgb2Nj
dXJzLgorICAgICAgICAoSlNDOjpDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IpOgorICAg
ICAgICAgICAgLSBjYWxsZWQgd2hlbiB0aGUgZXhlY3V0YWJsZSBhbGxvY2F0b3IgaXMgY29uc3Ry
dWN0ZWQuCisgICAgICAgIChKU0M6OkNvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEMpOgor
ICAgICAgICAgICAgLSBoZWxwZXIgdG8gbG9va3VwIHRoZSBjb2RlYmxvY2sgZnJvbSBhbiBhZGRy
ZXNzIGluIEpJVCBjb2RlCisgICAgICAgIChKU0M6OkNvZGVQcm9maWxpbmc6OmJlZ2luKToKKyAg
ICAgICAgICAgIC0gZW50ZXIgYSBwcm9maWxpbmcgc2NvcGUuCisgICAgICAgIChKU0M6OkNvZGVQ
cm9maWxpbmc6OmVuZCk6CisgICAgICAgICAgICAtIGV4aXQgYSBwcm9maWxpbmcgc2NvcGUuCisg
ICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGluZy5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0gbmV3
IGNsYXNzLCBpbnN0YW50aWFsZWQgZnJvbSBDb21wbGV0aW9uIHRvIGRlZmluZSBhIHByb2ZpbGlu
ZyBzY29wZS4KKyAgICAgICAgKiB0b29scy9Qcm9maWxlVHJlZU5vZGUuaDogQWRkZWQuCisgICAg
ICAgICAgICAtIG5ldyBjbGFzcywgdXNlZCB0byBjb25zdHJ1Y3QgYSB0cmVlIG9mIHNhbXBsZXMu
CisgICAgICAgICogdG9vbHMvVGllcmVkTU1hcEFycmF5Lmg6IEFkZGVkLgorICAgICAgICAgICAg
LSBuZXcgY2xhc3MsIGEgbWFsbG9jLWZyZWUgdmVjdG9yIChjYW4gYmUgdXNlZCB3aGlsZSB0aGUg
bWFpbiB0aHJlYWQgaXMgc3VzcGVuZGVkLAorICAgICAgICAgICAgICBwb3NzaWJseSBob2xkaW5n
IHRoZSBtYWxsb2MgaGVhcCBsb2NrKS4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6
CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5kbGUp
OgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgICAgICAt
IEFsbG93IGFsbG9jYXRpb24gaGFuZGxlcyB0byB0cmFjayBpbmZvcm1hdGlvbiBhYm91dCB0aGVp
ciBvd25lci4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5oOgorICAgICAgICAoTWV0YUFs
bG9jYXRvcik6CisgICAgICAgICAgICAtIEFsbG93IGFsbG9jYXRpb24gaGFuZGxlcyB0byB0cmFj
ayBpbmZvcm1hdGlvbiBhYm91dCB0aGVpciBvd25lci4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9j
YXRvckhhbmRsZS5oOgorICAgICAgICAoTWV0YUFsbG9jYXRvckhhbmRsZSk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Om93bmVyVUlEKToKKyAgICAgICAgICAgIC0gQWxsb3cg
YWxsb2NhdGlvbiBoYW5kbGVzIHRvIHRyYWNrIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyIG93bmVy
LgorICAgICAgICAqIHd0Zi9PU0FsbG9jYXRvci5oOgorICAgICAgICAoV1RGOjpPU0FsbG9jYXRv
cjo6cmVhbGxvY2F0ZUNvbW1pdHRlZCk6CisgICAgICAgICAgICAtIHJlYWxsb2NhdGUgYW4gZXhp
c3RpbmcsIGNvbW1pdHRlZCBtZW1vcnkgYWxsb2NhdGlvbi4KKwogMjAxMi0wMS0yNyAgTU9SSVRB
IEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbSlNDXSBTb21lIEpTX0VY
UE9SVERBVEEgbWF5IG5vdCBiZSBuZWNlc3NhcnkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw2ICsyMDAsOSBAQCBTRVQoSmF2
YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHJ1bnRpbWUvVGltZW91dENoZWNrZXIuY3BwCiAgICAg
cnVudGltZS9VU3RyaW5nLmNwcAogCisgICAgdG9vbHMvQ29kZVByb2ZpbGUuY3BwCisgICAgdG9v
bHMvQ29kZVByb2ZpbGluZy5jcHAKKwogICAgIHlhcnIvWWFyclBhdHRlcm4uY3BwCiAgICAgeWFy
ci9ZYXJySW50ZXJwcmV0ZXIuY3BwCiAgICAgeWFyci9ZYXJySklULmNwcApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw3
IEBAIGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzICs9IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cHJvZmlsZXIgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lIFwK
KwktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMgXAogCS1JJChzcmNkaXIp
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZ29i
amVjdCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQko
cmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTUyNSw2ICs1MjUsMTIgQEAgamF2YXNjcmlwdGNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtSYW5kb20uaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmggXAorCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9Db2RlUHJvZmlsZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVBy
b2ZpbGluZy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5n
LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1RpZXJlZE1NYXBBcnJheS5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL0FsaWdubWVudC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL0Fsd2F5c0lubGluZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0FycmF5QnVm
ZmVyLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJ
KHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTQxNSw3ICs0MTUsNiBAQCBfX1pOM1dURjEycmFuZG9t
TnVtYmVyRXYKIF9fWk4zV1RGMTNNZXRhQWxsb2NhdG9yMTdhZGRGcmVzaEZyZWVTcGFjZUVQdm0K
IF9fWk4zV1RGMTNNZXRhQWxsb2NhdG9yMTdmcmVlRnJlZVNwYWNlTm9kZUVQTlMwXzEzRnJlZVNw
YWNlTm9kZUUKIF9fWk4zV1RGMTNNZXRhQWxsb2NhdG9yMThkZWJ1Z0ZyZWVTcGFjZVNpemVFdgot
X19aTjNXVEYxM01ldGFBbGxvY2F0b3I4YWxsb2NhdGVFbQogX19aTjNXVEYxM01ldGFBbGxvY2F0
b3JDMkVtCiBfX1pOM1dURjEzU3RyaW5nQnVpbGRlcjExc2hyaW5rVG9GaXRFdgogX19aTjNXVEYx
M1N0cmluZ0J1aWxkZXIxNXJlc2VydmVDYXBhY2l0eUVqCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5wcmkJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIz
LDcgQEAgSU5DTFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJUi9wYXJzZXIgXAogICAgICQk
U09VUkNFX0RJUi9wcm9maWxlciBcCiAgICAgJCRTT1VSQ0VfRElSL3J1bnRpbWUgXAorICAgICQk
U09VUkNFX0RJUi90b29scyBcCiAgICAgJCRTT1VSQ0VfRElSL3lhcnIgXAogICAgICQkU09VUkNF
X0RJUi9BUEkgXAogICAgICQkU09VUkNFX0RJUi9Gb3J3YXJkaW5nSGVhZGVycyBcCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw2ICsyMDksOCBAQCBT
T1VSQ0VTICs9IFwKICAgICBydW50aW1lL1N0cnVjdHVyZS5jcHAgXAogICAgIHJ1bnRpbWUvVGlt
ZW91dENoZWNrZXIuY3BwIFwKICAgICBydW50aW1lL1VTdHJpbmcuY3BwIFwKKyAgICB0b29scy9D
b2RlUHJvZmlsZS5jcHAgXAorICAgIHRvb2xzL0NvZGVQcm9maWxpbmcuY3BwIFwKICAgICB5YXJy
L1lhcnJKSVQuY3BwIFwKIAogKnNoNCogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDEwNjE1MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ3LDYgKzE0
NDcsMzQgQEAKIAkJCTwvRmlsZT4KIAkJPC9GaWx0ZXI+CiAJCTxGaWx0ZXIKKwkJCU5hbWU9InRv
b2xzIgorCQkJPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHRvb2xzXENvZGVQ
cm9maWxlLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5cdG9vbHNcQ29kZVByb2ZpbGUuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cdG9vbHNcQ29kZVByb2ZpbGluZy5jcHAiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHRvb2xzXENv
ZGVQcm9maWxpbmcuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5cLi5cdG9vbHNcUHJvZmlsZVRyZWVOb2RlLmgiCisJCQkJPgorCQkJPC9GaWxlPgor
CQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHRvb2xzXFRpZXJlZE1NYXBBcnJheS5o
IgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJPC9GaWx0ZXI+CisJCTxGaWx0ZXIKIAkJCU5hbWU9ImJ5
dGVjb2RlIgogCQkJPgogCQkJPEZpbGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVDb21tb24udnNw
cm9wcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlQ29tbW9uLnZzcHJvcHMJKHJldmlz
aW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVDb21tb24udnNwcm9wcwkod29ya2luZyBj
b3B5KQpAQCAtNiw3ICs2LDcgQEAKIAk+CiAJPFRvb2wKIAkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKLQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJnF1b3Q7JChDb25maWd1cmF0aW9u
QnVpbGREaXIpXG9ialxKYXZhU2NyaXB0Q29yZVxEZXJpdmVkU291cmNlc1wmcXVvdDs7Li4vLi4v
Oy4uLy4uL0FQSS87Li4vLi4vcGFyc2VyLzsuLi8uLi9ieXRlY29tcGlsZXIvOy4uLy4uL2RmZy87
Li4vLi4vaml0LzsuLi8uLi9ydW50aW1lLzsuLi8uLi9ieXRlY29kZS87Li4vLi4vaW50ZXJwcmV0
ZXIvOy4uLy4uL3d0Zi87Li4vLi4vcHJvZmlsZXI7Li4vLi4vYXNzZW1ibGVyLzsuLi8uLi9kZWJ1
Z2dlci87Li4vLi4vaGVhcC87JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGUmcXVv
dDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVv
dDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcaW5jbHVkZSZxdW90OzsmcXVvdDskKENvbmZpZ3Vy
YXRpb25CdWlsZERpcilcaW5jbHVkZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVvdDskKENvbmZp
Z3VyYXRpb25CdWlsZERpcilcaW5jbHVkZVxwcml2YXRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGli
cmFyaWVzRGlyKVxpbmNsdWRlXHB0aHJlYWRzJnF1b3Q7IgorCQlBZGRpdGlvbmFsSW5jbHVkZURp
cmVjdG9yaWVzPSImcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqXEphdmFTY3JpcHRD
b3JlXERlcml2ZWRTb3VyY2VzXCZxdW90OzsuLi8uLi87Li4vLi4vQVBJLzsuLi8uLi9wYXJzZXIv
Oy4uLy4uL2J5dGVjb21waWxlci87Li4vLi4vZGZnLzsuLi8uLi9qaXQvOy4uLy4uL3J1bnRpbWUv
Oy4uLy4uL3Rvb2xzLzsuLi8uLi9ieXRlY29kZS87Li4vLi4vaW50ZXJwcmV0ZXIvOy4uLy4uL3d0
Zi87Li4vLi4vcHJvZmlsZXI7Li4vLi4vYXNzZW1ibGVyLzsuLi8uLi9kZWJ1Z2dlci87Li4vLi4v
aGVhcC87JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChX
ZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKENvbmZpZ3Vy
YXRpb25CdWlsZERpcilcaW5jbHVkZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERp
cilcaW5jbHVkZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWls
ZERpcilcaW5jbHVkZVxwcml2YXRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxp
bmNsdWRlXHB0aHJlYWRzJnF1b3Q7IgogCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX19TVERf
QyIKIAkJRm9yY2VkSW5jbHVkZUZpbGVzPSJJQ1VWZXJzaW9uLmgiCiAJLz4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMzgyLDYgKzM4Miw4IEBACiAJCTg2QUU2NEFBMTM1RTVFMUMwMDk2MzAxMiAv
KiBTSDRBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2QUU2NEE3MTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCAqLzsgfTsK
IAkJODZBRTZDNEQxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0ZQUkluZm8uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QUU2QzRCMTM2QTExRTQwMDk2MzAx
MiAvKiBERkdGUFJJbmZvLmggKi87IH07CiAJCTg2QUU2QzRFMTM2QTExRTQwMDk2MzAxMiAvKiBE
RkdHUFJJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NkFFNkM0QzEzNkExMUU0MDA5NjMwMTIgLyogREZHR1BSSW5mby5oICovOyB9OworCQk4NkI1
ODI2NzE0RDI3OTZDMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZCNTgyMkUxNEQyMzczQjAwQTlDMzA2IC8q
IENvZGVQcm9maWxlLmNwcCAqLzsgfTsKKwkJODZCNTgyNjkxNEQyNzk3MDAwQTlDMzA2IC8qIENv
ZGVQcm9maWxpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODYwM0NFRjIxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcuY3BwICovOyB9
OwogCQk4NkI5OUFFMzExN0U1NzgxMDBERjVBOTAgLyogU3RyaW5nQnVmZmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkI5OUFFMTExN0U1NzgxMDBE
RjVBOTAgLyogU3RyaW5nQnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJODZCQjA5QzAxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2gu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZCQjA5
QkUxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwICovOyB9OwogCQk4NkJCMDlDMTEz
OEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODZCQjA5QkYxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0
Y2guaCAqLzsgfTsKQEAgLTEwNDIsNyArMTA0NCw3IEBACiAJCTFBMDgyNzc4MTQyMTY4RDcwMDkw
Q0NBQyAvKiBCaW5hcnlTZW1hcGhvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQmluYXJ5U2VtYXBob3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTlF
NTUwMTQ5ODA5MzUwMDAwMUE4QSAvKiBGdW5jdGlvbmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZ1bmN0aW9uYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUM5MDUxNDIwQkE5RThBNzAwODFFOUQwIC8qIFZlcnNpb24ueGNjb25maWcgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0LnhjY29uZmlnOyBwYXRoID0gVmVyc2lvbi54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMUM5MDUxNDMwQkE5RThBNzAwODFFOUQwIC8qIEphdmFTY3JpcHRDb3JlLnhj
Y29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgbmFtZSA9IEphdmFTY3JpcHRDb3JlLnhj
Y29uZmlnOyBwYXRoID0gLi4vQ29uZmlndXJhdGlvbnMvSmF2YVNjcmlwdENvcmUueGNjb25maWc7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDOTA1MTQzMEJBOUU4QTcwMDgxRTlEMCAv
KiBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGgg
PSBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUM5MDUxNDQwQkE5RThBNzAwODFFOUQwIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBEZWJ1Z1JlbGVhc2UueGNjb25maWc7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDOTA1MTQ1MEJBOUU4QTcwMDgxRTlEMCAvKiBCYXNlLnhj
Y29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEJhc2UueGNjb25maWc7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQUE4QjRBMEQzMkMzOUEwMDQxQkNGRiAvKiBK
YXZhU2NyaXB0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEphdmFTY3JpcHQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMzgsNiArMTE0MCw4IEBACiAJCTg2
MDE2MUUwMEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlclg4Ni5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4NjAxNjFFMTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJs
ZXJYODZfNjQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJs
ZXJYODZfNjQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYwMTYxRTIwRjNBODND
MTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTg2MDNDRUYyMTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5n
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVQcm9maWxpbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NjAzQ0VGMzE0Qzc1NDY0MDBBRTU5
RTMgLyogQ29kZVByb2ZpbGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b2RlUHJvZmlsaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDRGNEYyMTQz
QTZDNDQwMEIyOTVGNSAvKiBDaGFuZ2VMb2cgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ2hhbmdlTG9nOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4NjA0RjUwMzE0M0NFMUMxMDBCMjk1RjUgLyogSlNHbG9iYWxUaGlz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2xvYmFsVGhpcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjI2QkVDRTExOTI4RTM5MDA3ODJGQUIgLyogU3Ry
aW5nU3RhdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTdHJp
bmdTdGF0aWNzLmNwcDsgcGF0aCA9IHRleHQvU3RyaW5nU3RhdGljcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMTg1LDYgKzExODksMTAgQEAKIAkJODZBRTY0QTcxMzVFNUUx
QzAwOTYzMDEyIC8qIFNINEFzc2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTSDRBc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZBRTZD
NEIxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0ZQUkluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHRlBSSW5mby5oOyBwYXRoID0gZGZnL0RGR0ZQUkluZm8uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZBRTZDNEMxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0dQ
UkluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHR1BSSW5mby5oOyBw
YXRoID0gZGZnL0RGR0dQUkluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZC
NTgyMkMxNEQyMkY1RjAwQTlDMzA2IC8qIFByb2ZpbGVUcmVlTm9kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQcm9maWxlVHJlZU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJODZCNTgyMkUxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVQcm9maWxlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZCNTgyMkYxNEQyMzczQjAwQTlDMzA2IC8qIENv
ZGVQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVQcm9maWxl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2QjU4MjZBMTREMzVENTEwMEE5QzMw
NiAvKiBUaWVyZWRNTWFwQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VGllcmVkTU1hcEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2Qjk5QUUx
MTE3RTU3ODEwMERGNUE5MCAvKiBTdHJpbmdCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gU3RyaW5nQnVmZmVyLmg7IHBhdGggPSB0ZXh0L1N0cmluZ0J1ZmZlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkJCMDlCRTEzOEUzODFCMDA1NjcwMkYgLyog
REZHUmVwYXRjaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdS
ZXBhdGNoLmNwcDsgcGF0aCA9IGRmZy9ERkdSZXBhdGNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODZCQjA5QkYxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUmVwYXRjaC5oOyBwYXRoID0gZGZnL0RG
R1JlcGF0Y2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2ODAsNiArMTY4OCw3
IEBACiAJCQkJOTVBQjgzMUEwREE0MkM2OTAwQkM4M0YzIC8qIHByb2ZpbGVyICovLAogCQkJCTdF
RjZFMEJCMEVCN0ExRUMwMDc5QUZBRiAvKiBydW50aW1lICovLAogCQkJCTE0MTIxMTAwMEE0ODc3
MjYwMDQ4MDI1NSAvKiB0ZXN0cyAqLywKKwkJCQk4NjAzQ0VGMDE0Qzc1M0VGMDBBRTU5RTMgLyog
dG9vbHMgKi8sCiAJCQkJNjUxNjJFRjEwOEU2QTIxQzAwNzU1NkNEIC8qIHd0ZiAqLywKIAkJCQk4
NkVBQzQ4QzBGOTNFOEI5MDA4RUM5NDggLyogeWFyciAqLywKIAkJCQkxQzkwNTEzRTBCQTlFODgz
MDA4MUU5RDAgLyogQ29uZmlndXJhdGlvbnMgKi8sCkBAIC0xODI2LDcgKzE4MzUsNiBAQAogCQkJ
CTg2NUY0MDg3MTBFN0Q1NjMwMDk0NzM2MSAvKiBBUElTaGltcy5oICovLAogCQkJCTFDQUE4QjRB
MEQzMkMzOUEwMDQxQkNGRiAvKiBKYXZhU2NyaXB0LmggKi8sCiAJCQkJMUNBQThCNEIwRDMyQzM5
QTAwNDFCQ0ZGIC8qIEphdmFTY3JpcHRDb3JlLmggKi8sCi0JCQkJMUM5MDUxNDMwQkE5RThBNzAw
ODFFOUQwIC8qIEphdmFTY3JpcHRDb3JlLnhjY29uZmlnICovLAogCQkJCUJDMDg5NEQ1MEZBRkJB
MkQwMDAwMTg2NSAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgKi8sCiAJCQkJQkMwODk0RDYwRkFG
QkEyRDAwMDAxODY1IC8qIEpTQVBJVmFsdWVXcmFwcGVyLmggKi8sCiAJCQkJMTQyMTM1OUEwQTY3
N0Y0RjAwQTgxOTVFIC8qIEpTQmFzZS5jcHAgKi8sCkBAIC0xOTE2LDYgKzE5MjQsNyBAQAogCQkJ
CTFDOTA1MTQ0MEJBOUU4QTcwMDgxRTlEMCAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8sCiAJ
CQkJNDQ5MDk3RUUwRjhGODFCNTAwNzZBMzI3IC8qIEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnICov
LAogCQkJCTVEQUZENkNCMTQ2QjY4NjMwMEZCRUZCNCAvKiBKU0MueGNjb25maWcgKi8sCisJCQkJ
MUM5MDUxNDMwQkE5RThBNzAwODFFOUQwIC8qIEphdmFTY3JpcHRDb3JlLnhjY29uZmlnICovLAog
CQkJCUJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUZXN0QVBJLnhjY29uZmlnICovLAogCQkJ
CTVEQUZENkNDMTQ2QjY4QjkwMEZCRUZCNCAvKiBUZXN0UmVnRXhwLnhjY29uZmlnICovLAogCQkJ
CTFDOTA1MTQyMEJBOUU4QTcwMDgxRTlEMCAvKiBWZXJzaW9uLnhjY29uZmlnICovLApAQCAtMjM2
NSw2ICsyMzc0LDE5IEBACiAJCQlwYXRoID0gcnVudGltZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CiAJCX07CisJCTg2MDNDRUYwMTRDNzUzRUYwMEFFNTlFMyAvKiB0b29scyAqLyA9IHsK
KwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJODZCNTgyMkUxNEQyMzcz
QjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAqLywKKwkJCQk4NkI1ODIyRjE0RDIzNzNCMDBB
OUMzMDYgLyogQ29kZVByb2ZpbGUuaCAqLywKKwkJCQk4NjAzQ0VGMjE0Qzc1NDY0MDBBRTU5RTMg
LyogQ29kZVByb2ZpbGluZy5jcHAgKi8sCisJCQkJODYwM0NFRjMxNEM3NTQ2NDAwQUU1OUUzIC8q
IENvZGVQcm9maWxpbmcuaCAqLywKKwkJCQk4NkI1ODIyQzE0RDIyRjVGMDBBOUMzMDYgLyogUHJv
ZmlsZVRyZWVOb2RlLmggKi8sCisJCQkJODZCNTgyNkExNEQzNUQ1MTAwQTlDMzA2IC8qIFRpZXJl
ZE1NYXBBcnJheS5oICovLAorCQkJKTsKKwkJCXBhdGggPSB0b29sczsKKwkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CisJCX07CiAJCTg2NTY1NzNFMTE1QkUzNTIwMDI5MUY0MCAvKiB0ZXh0ICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTM2NDAsNiArMzY2
Miw4IEBACiAJCQkJMEY5MzMyQTExNENBN0REMTAwODVGM0M2IC8qIE1ldGhvZENhbGxMaW5rU3Rh
dHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTMzMkEzMTRDQTdERDcwMDg1RjNDNiAvKiBQ
dXRCeUlkU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTVGMEY0MTREMTA2MzkwMEFD
NzY0OSAvKiBBYnN0cmFjdFBDLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg2QjU4MjY3MTREMjc5
NkMwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4NkI1ODI2
OTE0RDI3OTcwMDBBOUMzMDYgLyogQ29kZVByb2ZpbGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZp
c2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1Niw2ICsxNDU2LDcgQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAgICwgbV9zcGVjdWxhdGl2ZUZhaWxDb3VudGVy
KDApCiAgICAgLCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcigwKQogICAgICwgbV9yZW9wdGlt
aXphdGlvblJldHJ5Q291bnRlcigwKQorICAgICwgbV9jYW5Db21waWxlV2l0aERGR1N0YXRlKENv
bXBpbGVXaXRoREZHVW5zZXQpCiB7CiAgICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJh
bWV0ZXJzKCkpOwogICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKQEAgLTIxNjQsMTcgKzIxNjUs
MTcgQEAgSlNPYmplY3QqIEZ1bmN0aW9uQ29kZUJsb2NrOjpjb21waWxlT3B0aQogICAgIHJldHVy
biBlcnJvcjsKIH0KIAotYm9vbCBQcm9ncmFtQ29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERGRygp
Citib29sIFByb2dyYW1Db2RlQmxvY2s6OmNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKQogewog
ICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVQcm9ncmFtKHRoaXMpOwogfQogCi1ib29sIEV2YWxD
b2RlQmxvY2s6OmNhbkNvbXBpbGVXaXRoREZHKCkKK2Jvb2wgRXZhbENvZGVCbG9jazo6Y2FuQ29t
cGlsZVdpdGhERkdJbnRlcm5hbCgpCiB7CiAgICAgcmV0dXJuIERGRzo6Y2FuQ29tcGlsZUV2YWwo
dGhpcyk7CiB9CiAKLWJvb2wgRnVuY3Rpb25Db2RlQmxvY2s6OmNhbkNvbXBpbGVXaXRoREZHKCkK
K2Jvb2wgRnVuY3Rpb25Db2RlQmxvY2s6OmNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKQogewog
ICAgIGlmIChtX2lzQ29uc3RydWN0b3IpCiAgICAgICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVG
dW5jdGlvbkZvckNvbnN0cnVjdCh0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzg4LDcgKzM4
OCwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGls
ZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopID0gMDsKICAgICAgICAgdmly
dHVhbCB2b2lkIGpldHRpc29uKCkgPSAwOwogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVw
bGFjZW1lbnQoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygp
ID0gMDsKKworICAgICAgICBlbnVtIENvbXBpbGVXaXRoREZHU3RhdGUgeworICAgICAgICAgICAg
Q29tcGlsZVdpdGhERkdGYWxzZSwKKyAgICAgICAgICAgIENvbXBpbGVXaXRoREZHVHJ1ZSwKKyAg
ICAgICAgICAgIENvbXBpbGVXaXRoREZHVW5zZXQKKyAgICAgICAgfTsKKworICAgICAgICB2aXJ0
dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpID0gMDsKKyAgICAgICAgYm9vbCBj
YW5Db21waWxlV2l0aERGRygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0g
Y2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpOworICAgICAgICAgICAgbV9jYW5Db21waWxlV2l0
aERGR1N0YXRlID0gcmVzdWx0ID8gQ29tcGlsZVdpdGhERkdUcnVlIDogQ29tcGlsZVdpdGhERkdG
YWxzZTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgQ29t
cGlsZVdpdGhERkdTdGF0ZSBjYW5Db21waWxlV2l0aERGR1N0YXRlKCkgeyByZXR1cm4gbV9jYW5D
b21waWxlV2l0aERGR1N0YXRlOyB9CisKICAgICAgICAgYm9vbCBoYXNPcHRpbWl6ZWRSZXBsYWNl
bWVudCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgPT0gSklU
Q29kZTo6QmFzZWxpbmVKSVQpOwpAQCAtMTE4Nyw2ICsxMjAyLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGZyaWVuZCB2b2lkIFdURjo6ZGVsZXRlT3duZWRQdHI8UmFyZURhdGE+KFJhcmVE
YXRhKik7CiAjZW5kaWYKICAgICAgICAgT3duUHRyPFJhcmVEYXRhPiBtX3JhcmVEYXRhOworICAg
ICAgICBDb21waWxlV2l0aERGR1N0YXRlIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0ZTsKICAgICB9
OwogCiAgICAgLy8gUHJvZ3JhbSBjb2RlIGlzIG5vdCBtYXJrZWQgYnkgYW55IGZ1bmN0aW9uLCBz
byB3ZSBtYWtlIHRoZSBnbG9iYWwgb2JqZWN0CkBAIC0xMjI2LDcgKzEyNDIsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVj
U3RhdGUqLCBTY29wZUNoYWluTm9kZSopOwogICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24o
KTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7Ci0gICAgICAgIHZp
cnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2Fu
Q29tcGlsZVdpdGhERkdJbnRlcm5hbCgpOwogI2VuZGlmCiAgICAgfTsKIApAQCAtMTI2MCw3ICsx
Mjc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBp
bGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKICAgICAgICAgdmlydHVh
bCB2b2lkIGpldHRpc29uKCk7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVu
dCgpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKTsKKyAgICAgICAg
dmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKTsKICNlbmRpZgogCiAgICAg
cHJpdmF0ZToKQEAgLTEyOTcsNyArMTMxMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5O
b2RlKik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpOwogICAgICAgICB2aXJ0dWFs
IENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKLSAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBp
bGVXaXRoREZHKCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGR0ludGVy
bmFsKCk7CiAjZW5kaWYKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgi
CiAKICNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfREVNQU5EKQorI2luY2x1ZGUgIkNv
ZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgogI2luY2x1ZGUg
PHd0Zi9QYWdlUmVzZXJ2YXRpb24uaD4KICNpbmNsdWRlIDx3dGYvVk1UYWdzLmg+CkBAIC05Myw2
ICs5NCw3IEBAIHZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG8KIHsKICAg
ICBBU1NFUlQoIWFsbG9jYXRvcik7CiAgICAgYWxsb2NhdG9yID0gbmV3IERlbWFuZEV4ZWN1dGFi
bGVBbGxvY2F0b3IoKTsKKyAgICBDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IoYWxsb2Nh
dG9yKTsKIH0KIAogRXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcihKU0ds
b2JhbERhdGEmKQpAQCAtMTEyLDkgKzExNCw3IEBAIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6
dW5kZXJNZW1vcnlQcmUKIAogUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVj
dXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgc2l6ZUluQnl0
ZXMsIHZvaWQqIG93bmVyVUlEKQogewotICAgIFVOVVNFRF9QQVJBTShvd25lclVJRCk7Ci0KLSAg
ICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxv
Y2F0ZShzaXplSW5CeXRlcyk7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJl
c3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsKICAgICBp
ZiAoIXJlc3VsdCkKICAgICAgICAgQ1JBU0goKTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2Uo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZp
eGVkVk1Qb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksOCBAQAogCiAjaWYgRU5BQkxFKEVYRUNVVEFC
TEVfQUxMT0NBVE9SX0ZJWEVEKQogCisjaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgogI2luY2x1
ZGUgPGVycm5vLmg+Ci0KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgogI2luY2x1ZGUgPHVuaXN0ZC5o
PgogI2luY2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+CkBAIC05Niw2ICs5Niw3IEBAIHZvaWQg
RXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG8KIHsKICAgICBBU1NFUlQoIWFsbG9j
YXRvcik7CiAgICAgYWxsb2NhdG9yID0gbmV3IEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRv
cigpOworICAgIENvZGVQcm9maWxpbmc6Om5vdGlmeUFsbG9jYXRvcihhbGxvY2F0b3IpOwogfQog
CiBFeGVjdXRhYmxlQWxsb2NhdG9yOjpFeGVjdXRhYmxlQWxsb2NhdG9yKEpTR2xvYmFsRGF0YSYp
CkBAIC0xMTYsMTIgKzExNywxMCBAQCBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVt
b3J5UHJlCiAKIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFs
bG9jYXRvcjo6YWxsb2NhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgc2l6ZUlu
Qnl0ZXMsIHZvaWQqIG93bmVyVUlEKQogewotICAgIFVOVVNFRF9QQVJBTShvd25lclVJRCk7Ci0K
LSAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yLT5h
bGxvY2F0ZShzaXplSW5CeXRlcyk7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+
IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsKICAg
ICBpZiAoIXJlc3VsdCkgewogICAgICAgICByZWxlYXNlRXhlY3V0YWJsZU1lbW9yeShnbG9iYWxE
YXRhKTsKLSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcyk7
CisgICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVy
VUlEKTsKICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICBDUkFTSCgpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMDYx
NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgogI2luY2x1ZGUg
IkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVQcm9m
aWxpbmcuaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgi
CiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgpAQCAtOTY4LDcgKzk2OSw3IEBAIE5FVkVS
X0lOTElORSB2b2lkIEpJVFRodW5rczo6dHJ5Q2FjaGVHZXQKICAgICBKSVQ6OmNvbXBpbGVHZXRC
eUlkQ2hhaW4oY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbERhdGEsIGNhbGxGcmFtZSwg
Y29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHBy
b3BlcnR5TmFtZSwgc2xvdCwgb2Zmc2V0LCByZXR1cm5BZGRyZXNzKTsKIH0KIAotI2lmICFkZWZp
bmVkKE5ERUJVRykgJiYgIUVOQUJMRShDT0RFX1BST0ZJTElORykKKyNpZiAhZGVmaW5lZChOREVC
VUcpCiAKIGV4dGVybiAiQyIgewogCkBAIC05ODYsNyArOTg3LDggQEAgc3RydWN0IFN0YWNrSGFj
ayB7CiAgICAgICAgIDogc3RhY2tGcmFtZShzdGFja0ZyYW1lKQogICAgICAgICAsIHNhdmVkUmV0
dXJuQWRkcmVzcygqc3RhY2tGcmFtZS5yZXR1cm5BZGRyZXNzU2xvdCgpKQogICAgIHsKLSAgICAg
ICAgKnN0YWNrRnJhbWUucmV0dXJuQWRkcmVzc1Nsb3QoKSA9IFJldHVybkFkZHJlc3NQdHIoRnVu
Y3Rpb25QdHIoanNjR2VuZXJhdGVkTmF0aXZlQ29kZSkpOworICAgICAgICBpZiAoIUNvZGVQcm9m
aWxpbmc6OmVuYWJsZWQoKSkKKyAgICAgICAgICAgICpzdGFja0ZyYW1lLnJldHVybkFkZHJlc3NT
bG90KCkgPSBSZXR1cm5BZGRyZXNzUHRyKEZ1bmN0aW9uUHRyKGpzY0dlbmVyYXRlZE5hdGl2ZUNv
ZGUpKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIH5TdGFja0hhY2soKSAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiAx
MDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIK
IAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKICNp
bmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUg
IkludGVycHJldGVyLmgiCkBAIC01NSw2ICs1Niw4IEBAIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0
YXRlKiBleGVjLCBTY29wZUMKICAgICBKU0xvY2sgbG9jayhleGVjKTsKICAgICBBU1NFUlQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVu
dElkZW50aWZpZXJUYWJsZSgpKTsKIAorICAgIENvZGVQcm9maWxpbmcgcHJvZmlsZShzb3VyY2Up
OworCiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHByb2dyYW0gPSBQcm9ncmFtRXhlY3V0YWJsZTo6
Y3JlYXRlKGV4ZWMsIHNvdXJjZSk7CiAgICAgaWYgKCFwcm9ncmFtKSB7CiAgICAgICAgIGlmIChy
ZXR1cm5lZEV4Y2VwdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2Rl
UHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0Nv
ZGVQcm9maWxlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9Db2RlUHJvZmlsZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTc4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJDb2RlUHJvZmlsZS5oIgorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisj
aW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNs
dWRlICJQcm9maWxlVHJlZU5vZGUuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDxjeHhh
YmkuaD4KKyNpbmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgPGV4ZWNpbmZvLmg+CisjZW5kaWYK
KworbmFtZXNwYWNlIEpTQyB7CisKKy8vIE1hcCBmcm9tIENvZGVUeXBlIGVudW0gdG8gYSBjb3Jy
ZXNwb25kaW5nIG5hbWUuCitjb25zdCBjaGFyKiBDb2RlUHJvZmlsZTo6c19jb2RlVHlwZU5hbWVz
W0NvZGVQcm9maWxlOjpOdW1iZXJPZkNvZGVUeXBlc10gPSB7CisgICAgIltbRW5naW5lQ29kZV1d
IiwKKyAgICAiW1tHbG9iYWxUaHVua11dIiwKKyAgICAiW1tSZWdFeHBDb2RlXV0iLAorICAgICJb
W0RGR0pJVF1dIiwKKyAgICAiW1tCYXNlbGluZU9ubHldXSIsCisgICAgIltbQmFzZWxpbmVQcm9m
aWxlXV0iLAorICAgICJbW0Jhc2VsaW5lT1NSXV0iLAorICAgICJbW0VuZ2luZUZyYW1lXV0iCit9
OworCisvLyBIZWxwZXIgZnVuY3Rpb24sIGZpbmQgdGhlIHN5bWJvbCBuYW1lIGZvciBhIHBjIGlu
IEpTQy4KK3N0YXRpYyBjb25zdCBjaGFyKiBzeW1ib2xOYW1lKHZvaWQqIGFkZHJlc3MpCit7Cisg
ICAgRGxfaW5mbyBpbmZvOworICAgIGlmICghZGxhZGRyKGFkZHJlc3MsICZpbmZvKSB8fCAhaW5m
by5kbGlfc25hbWUpCisgICAgICAgIHJldHVybiAiPHVua25vd24+IjsKKworICAgIGNvbnN0IGNo
YXIqIG1hbmdsZWROYW1lID0gaW5mby5kbGlfc25hbWU7CisgICAgY29uc3QgY2hhciogY3hhRGVt
YW5nbGVkID0gYWJpOjpfX2N4YV9kZW1hbmdsZShtYW5nbGVkTmFtZSwgMCwgMCwgMCk7CisgICAg
cmV0dXJuIGN4YURlbWFuZ2xlZCA/IGN4YURlbWFuZ2xlZCA6IG1hbmdsZWROYW1lOworfQorCisv
LyBIZWxwZXIgZnVuY3Rpb24sIHRydW5jYXRlIHRyYWNlcyB0byBwcnVuZSB0aGUgb3V0cHV0ICYg
bWFrZSB2ZXJ5IHZlcmJvc2UgbW9kZSBhIGxpdHRsZSBtb3JlIHJlYWRhYmxlLgorc3RhdGljIGJv
b2wgdHJ1bmNhdGVUcmFjZShjb25zdCBjaGFyKiBzeW1ib2xOYW1lKQoreworICAgIHJldHVybiAh
c3RyY21wKHN5bWJvbE5hbWUsICJKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgpIikK
KyAgICAgICAgfHwgIXN0cmNtcChzeW1ib2xOYW1lLCAiSlNDOjpQYXJzZXI8SlNDOjpMZXhlcjx1
bnNpZ25lZCBjaGFyPiA+OjpwYXJzZUlubmVyKCkiKQorICAgICAgICB8fCAhc3RyY21wKHN5bWJv
bE5hbWUsICJXVEY6OmZhc3RNYWxsb2ModW5zaWduZWQgbG9uZykiKQorICAgICAgICB8fCAhc3Ry
Y21wKHN5bWJvbE5hbWUsICJXVEY6OmNhbGN1bGF0ZVVUQ09mZnNldCgpIikKKyAgICAgICAgfHwg
IXN0cmNtcChzeW1ib2xOYW1lLCAiSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVC
bG9jaygpIik7CisgICAgICAgIAorfQorCisvLyBFYWNoIHRyYWNlIGNvbnNpc3RzIG9mIGEgc2Vx
dWVuY2Ugb2YgemVybyBvciBtb3JlICdFbmdpbmVGcmFtZScgZW50cmllcywKKy8vIGZvbGxvd2Vk
IGJ5IGEgc2FtcGxlIGluIEpJVCBjb2RlLCBvciBvbmUgb3IgbW9yZSAnRW5naW5lRnJhbWUnIGVu
dHJpZXMsCisvLyBmb2xsb3dlZCBieSBhICdFbmdpbmVDb2RlJyB0ZXJtaW5hdG9yLgordm9pZCBD
b2RlUHJvZmlsZTo6c2FtcGxlKHZvaWQqIHBjLCB2b2lkKiogZnJhbWVQb2ludGVyKQoreworICAg
IC8vIERpc2FsbG93IHRyYWNlcyBjb250YWluaW5nIG9ubHkgYSAnRW5naW5lQ29kZScgdGVybWlu
YXRvciwgd2l0aG91dCBhbnkgJ0VuZ2luZUZyYW1lJyBmcmFtZXMuCisgICAgaWYgKCFmcmFtZVBv
aW50ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIHdoaWxlIChmcmFtZVBvaW50ZXIpIHsKKyAg
ICAgICAgQ29kZVR5cGUgdHlwZTsKKyAgICAgICAgdm9pZCogb3duZXJVSUQgPSBDb2RlUHJvZmls
aW5nOjpnZXRPd25lclVJREZvclBDKHBjKTsKKworICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhp
cyBzYW1wbGUgZmVsbCBpbiBKSVQgY29kZSwgYW5kIGlmIHNvLCBmcm9tIHdoaWNoIEpJVCAmIHdo
eS4KKyAgICAgICAgaWYgKCFvd25lclVJRCkKKyAgICAgICAgICAgIHR5cGUgPSBFbmdpbmVGcmFt
ZTsKKyAgICAgICAgZWxzZSBpZiAob3duZXJVSUQgPT0gR0xPQkFMX1RIVU5LX0lEKQorICAgICAg
ICAgICAgdHlwZSA9IEdsb2JhbFRodW5rOworICAgICAgICBlbHNlIGlmIChvd25lclVJRCA9PSBS
RUdFWFBfQ09ERV9JRCkKKyAgICAgICAgICAgIHR5cGUgPSBSZWdFeHBDb2RlOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8Q29k
ZUJsb2NrKj4ob3duZXJVSUQpOworICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+Z2V0SklUVHlw
ZSgpID09IEpJVENvZGU6OkRGR0pJVCkKKyAgICAgICAgICAgICAgICB0eXBlID0gREZHSklUOwor
ICAgICAgICAgICAgZWxzZSBpZiAoY29kZUJsb2NrLT5jYW5Db21waWxlV2l0aERGR1N0YXRlKCkg
PT0gQ29kZUJsb2NrOjpDb21waWxlV2l0aERGR0ZhbHNlKQorICAgICAgICAgICAgICAgIHR5cGUg
PSBCYXNlbGluZU9ubHk7CisgICAgICAgICAgICBlbHNlIGlmIChjb2RlQmxvY2stPnJlcGxhY2Vt
ZW50KCkpCisgICAgICAgICAgICAgICAgdHlwZSA9IEJhc2VsaW5lT1NSOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHR5cGUgPSBCYXNlbGluZVByb2ZpbGU7CisgICAgICAgIH0K
KworICAgICAgICAvLyBBIHNhbXBsZSBpbiBKSVQgY29kZSB0ZXJtaW5hdGVzIHRoZSB0cmFjZS4K
KyAgICAgICAgbV9zYW1wbGVzLmFwcGVuZChDb2RlUmVjb3JkKHBjLCB0eXBlKSk7CisgICAgICAg
IGlmICh0eXBlICE9IEVuZ2luZUZyYW1lKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IC8vIFdhbGsgdXAgdGhlIHN0YWNrLgorI2lmIFBMQVRGT1JNKE1BQykgJiYgQ1BVKFg4Nl82NCkK
KyAgICAgICAgcGMgPSBmcmFtZVBvaW50ZXJbMV07CisgICAgICAgIGZyYW1lUG9pbnRlciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigqZnJhbWVQb2ludGVyKTsKKyNlbHNlCisgICAgICAgIC8v
IFRoaXMgcGxhdGZvcm0gaXMgbm90IHlldCBzdXBwb3J0ZWQhCisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworI2VuZGlmCisgICAgfQorCisgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHdlIHdh
bGtlZCB0aGUgZW50aXJlIHN0YWNrIHdpdGhvdXQgZmluZGluZyBhbnkgZnJhbWVzIG9mIEpJVCBj
b2RlLgorICAgIG1fc2FtcGxlcy5hcHBlbmQoQ29kZVJlY29yZCgwLCBFbmdpbmVDb2RlKSk7Cit9
CisKK3ZvaWQgQ29kZVByb2ZpbGU6OnJlcG9ydCgpCit7CisgICAgZnByaW50ZihzdGRvdXQsICI8
Q29kZVByb2ZpbGluZyAlczolZD5cbiIsIG1fZmlsZS5kYXRhKCksIG1fbGluZU5vKTsKKworICAg
IC8vIEhvdyBtYW55IGZyYW1lcyBvZiBDLWNvZGUgdG8gcHJpbnQgLSAwLCBpZiBub3QgdmVyYm9z
ZSwgMSBpZiB2ZXJib3NlLCB1cCB0byAxMDI0IGlmIHZlcnkgdmVyYm9zZS4KKyAgICB1bnNpZ25l
ZCByZWN1cnNpb25MaW1pdCA9IENvZGVQcm9maWxpbmc6OmJlVmVyeVZlcmJvc2UoKSA/IDEwMjQg
OiBDb2RlUHJvZmlsaW5nOjpiZVZlcmJvc2UoKTsKKworICAgIFByb2ZpbGVUcmVlTm9kZSBwcm9m
aWxlOworCisgICAgLy8gV2FsayB0aHJvdWdoIHRoZSBzYW1wbGUgYnVmZmVyLgorICAgIHNpemVf
dCB0cmFjZSA9IDA7CisgICAgd2hpbGUgKHRyYWNlIDwgbV9zYW1wbGVzLnNpemUoKSkgeworCisg
ICAgICAgIC8vIEFsbCB0cmFjZXMgYXJlIHplcm8gb3IgbW9yZSAnRW5naW5lRnJhbWUncywgZm9s
bG93ZWQgYnkgYSBub24tJ0VuZ2luZUZyYW1lJy4KKyAgICAgICAgLy8gU2NhbiB0byBmaW5kIHRo
ZSBsYXN0IHNhbXBsZSBpbiB0aGUgdHJhY2UuCisgICAgICAgIHNpemVfdCBsYXN0SW5UcmFjZSA9
IHRyYWNlOworICAgICAgICB3aGlsZSAobV9zYW1wbGVzW2xhc3RJblRyYWNlXS50eXBlID09IEVu
Z2luZUZyYW1lKQorICAgICAgICAgICAgKytsYXN0SW5UcmFjZTsKKworICAgICAgICAvLyBXZSB1
c2UgdGhlIGxhc3Qgc2FtcGxlIHR5cGUgdG8gbG9vayB1cCBhIG5hbWUgKHVzZWQgYXMgYSBidWNr
ZXQgaW4gdGhlIHByb2ZpbGVyKS4KKyAgICAgICAgUHJvZmlsZVRyZWVOb2RlKiBjYWxsYmFja3Mg
PSBwcm9maWxlLnNhbXBsZUNoaWxkKHNfY29kZVR5cGVOYW1lc1ttX3NhbXBsZXNbbGFzdEluVHJh
Y2VdLnR5cGVdKTsKKworICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IHNhbXBsZXMgaW4gQy1j
b2RlLCBhZGQgdXAgdG8gcmVjdXJzaW9uTGltaXQgb2YgdGhlbSBpbnRvIHRoZSBwcm9maWxlIHRy
ZWUuCisgICAgICAgIHNpemVfdCBsYXN0RW5naW5lRnJhbWUgPSBsYXN0SW5UcmFjZTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBjb3VudCA9IDA7IGxhc3RFbmdpbmVGcmFtZSA+IHRyYWNlICYmIGNv
dW50IDwgcmVjdXJzaW9uTGltaXQ7ICsrY291bnQpIHsKKyAgICAgICAgICAgIC0tbGFzdEVuZ2lu
ZUZyYW1lOworICAgICAgICAgICAgQVNTRVJUKG1fc2FtcGxlc1tsYXN0RW5naW5lRnJhbWVdLnR5
cGUgPT0gRW5naW5lRnJhbWUpOworICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IHN5bWJv
bE5hbWUobV9zYW1wbGVzW2xhc3RFbmdpbmVGcmFtZV0ucGMpOworICAgICAgICAgICAgY2FsbGJh
Y2tzID0gY2FsbGJhY2tzLT5zYW1wbGVDaGlsZChuYW1lKTsKKyAgICAgICAgICAgIGlmICh0cnVu
Y2F0ZVRyYWNlKG5hbWUpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gTW92ZSBvbiB0byB0aGUgbmV4dCB0cmFjZS4KKyAgICAgICAgdHJhY2UgPSBsYXN0
SW5UcmFjZSArIDE7CisgICAgICAgIEFTU0VSVCh0cmFjZSA8PSBtX3NhbXBsZXMuc2l6ZSgpKTsK
KyAgICB9CisKKyAgICAvLyBPdXRwdXQgdGhlIHByb2ZpbGUgdHJlZS4KKyAgICBmcHJpbnRmKHN0
ZG91dCwgIlRvdGFsIHNhbXBsZXM6ICVsbGRcbiIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4ocHJv
ZmlsZS5jaGlsZENvdW50KCkpKTsKKyAgICBwcm9maWxlLmR1bXAoKTsKKyAgICAKKyAgICBmb3Ig
KHNpemVfdCBpID0gMCA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICBtX2No
aWxkcmVuW2ldLT5yZXBvcnQoKTsKKworICAgIGZwcmludGYoc3Rkb3V0LCAiPC9Db2RlUHJvZmls
aW5nICVzOiVkPlxuIiwgbV9maWxlLmRhdGEoKSwgbV9saW5lTm8pOworfQorCit9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQ29kZVByb2ZpbGVfaAorI2RlZmluZSBDb2RlUHJvZmlsZV9oCisKKyNp
bmNsdWRlICJTb3VyY2VDb2RlLmgiCisjaW5jbHVkZSAiVGllcmVkTU1hcEFycmF5LmgiCisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29k
ZVByb2ZpbGUgeworcHVibGljOgorICAgIENvZGVQcm9maWxlKGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZSwgQ29kZVByb2ZpbGUqIHBhcmVudCkKKyAgICAgICAgOiBtX2ZpbGUoc291cmNlLnByb3Zp
ZGVyKCktPnVybCgpLnV0ZjgoKSkKKyAgICAgICAgLCBtX2xpbmVObyhzb3VyY2UuZmlyc3RMaW5l
KCkpCisgICAgICAgICwgbV9wYXJlbnQocGFyZW50KQorICAgIHsKKyAgICAgICAgaWYgKHBhcmVu
dCkKKyAgICAgICAgICAgIHBhcmVudC0+YWRkQ2hpbGQodGhpcyk7CisgICAgfQorCisgICAgdm9p
ZCBzYW1wbGUodm9pZCogcGMsIHZvaWQqKiBmcmFtZVBvaW50ZXIpOworICAgIHZvaWQgcmVwb3J0
KCk7CisKKyAgICBDb2RlUHJvZmlsZSogcGFyZW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3BhcmVudDsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRDaGlsZChDb2RlUHJvZmlsZSogY2hp
bGQpCisgICAgeworICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChhZG9wdFB0cihjaGlsZCkpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBlbnVtIENvZGVUeXBlIHsKKyAgICAgICAgRW5naW5lQ29k
ZSwKKyAgICAgICAgR2xvYmFsVGh1bmssCisgICAgICAgIFJlZ0V4cENvZGUsCisgICAgICAgIERG
R0pJVCwKKyAgICAgICAgQmFzZWxpbmVPbmx5LAorICAgICAgICBCYXNlbGluZVByb2ZpbGUsCisg
ICAgICAgIEJhc2VsaW5lT1NSLAorICAgICAgICBFbmdpbmVGcmFtZSwKKyAgICAgICAgTnVtYmVy
T2ZDb2RlVHlwZXMKKyAgICB9OworICAgIHN0cnVjdCBDb2RlUmVjb3JkIHsKKyAgICAgICAgQ29k
ZVJlY29yZCh2b2lkKiBwYywgQ29kZVR5cGUgdHlwZSkKKyAgICAgICAgICAgIDogcGMocGMpCisg
ICAgICAgICAgICAsIHR5cGUodHlwZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIHZv
aWQqIHBjOworICAgICAgICBDb2RlVHlwZSB0eXBlOworICAgIH07CisKKyAgICBDU3RyaW5nIG1f
ZmlsZTsKKyAgICB1bnNpZ25lZCBtX2xpbmVObzsKKyAgICBDb2RlUHJvZmlsZSogbV9wYXJlbnQ7
CisgICAgVmVjdG9yPCBPd25QdHI8Q29kZVByb2ZpbGU+ID4gbV9jaGlsZHJlbjsKKyAgICBUaWVy
ZWRNTWFwQXJyYXk8Q29kZVJlY29yZD4gbV9zYW1wbGVzOworCisgICAgc3RhdGljIGNvbnN0IGNo
YXIqIHNfY29kZVR5cGVOYW1lc1tOdW1iZXJPZkNvZGVUeXBlc107Cit9OworCit9CisKKyNlbmRp
ZiAvLyBDb2RlUHJvZmlsZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9D
b2RlUHJvZmlsaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9v
bHMvQ29kZVByb2ZpbGluZy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdG9vbHMvQ29kZVByb2ZpbGluZy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCisKKyNpbmNsdWRlICJDb2Rl
UHJvZmlsZS5oIgorI2luY2x1ZGUgIk1ldGFBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJzaWduYWwu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvbGF0aWxlIENvZGVQcm9maWxlKiBDb2RlUHJvZmls
aW5nOjpzX3Byb2ZpbGVTdGFjayA9IDA7CitDb2RlUHJvZmlsaW5nOjpNb2RlIENvZGVQcm9maWxp
bmc6OnNfbW9kZSA9IENvZGVQcm9maWxpbmc6OkRpc2FibGVkOworV1RGOjpNZXRhQWxsb2NhdG9y
VHJhY2tlciogQ29kZVByb2ZpbGluZzo6c190cmFja2VyID0gMDsKKworLy8gSGVscGVyIGZ1bmN0
aW9uIHRvIHN0YXJ0ICYgc3RvcCB0aGUgdGltZXIuCisvLyBQcmVzZW50bHkgd2UncmUgdXNpbmcg
dGhlIHdhbGwtY2xvY2sgdGltZXIsIHNpbmNlIHRoaXMgc2VlbXMgdG8gZ2l2ZSB0aGUgYmVzdCBy
ZXN1bHRzLgorc3RhdGljIHZvaWQgc2V0UHJvZmlsZVRpbWVyKHVuc2lnbmVkIHVzZWMpCit7Cisj
aWYgUExBVEZPUk0oTUFDKSAmJiBDUFUoWDg2XzY0KQorICAgIGl0aW1lcnZhbCB0aW1lcjsKKyAg
ICB0aW1lci5pdF92YWx1ZS50dl9zZWMgPSAwOworICAgIHRpbWVyLml0X3ZhbHVlLnR2X3VzZWMg
PSB1c2VjOworICAgIHRpbWVyLml0X2ludGVydmFsLnR2X3NlYyA9IDA7CisgICAgdGltZXIuaXRf
aW50ZXJ2YWwudHZfdXNlYyA9IHVzZWM7CisgICAgc2V0aXRpbWVyKElUSU1FUl9SRUFMLCAmdGlt
ZXIsIDApOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odXNlYyk7CisgICAgLy8gVGhpcyBwbGF0
Zm9ybSBpcyBub3QgeWV0IHN1cHBvcnRlZCEKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNl
bmRpZgorfQorCisjaWYgUExBVEZPUk0oTUFDKSAmJiBDUFUoWDg2XzY0KQorc3RhdGljIHZvaWQg
cHJvZmlsaW5nVGltZXIoaW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1YXApCit7CisgICAgbWNvbnRl
eHRfdCBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250ZXh0
OworICAgIENvZGVQcm9maWxpbmc6OnNhbXBsZShyZWludGVycHJldF9jYXN0PHZvaWQqPihjb250
ZXh0LT5fX3NzLl9fcmlwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKio+KGNvbnRleHQtPl9fc3MuX19yYnApKTsKK30KKyNlbmRpZgorCisvLyBDYWxs
YmFjayB0cmlnZ2VyZWQgd2hlbiB0aGUgdGltZXIgaXMgZmlyZWQuCit2b2lkIENvZGVQcm9maWxp
bmc6OnNhbXBsZSh2b2lkKiBwYywgdm9pZCoqIGZyYW1lUG9pbnRlcikKK3sKKyAgICBDb2RlUHJv
ZmlsZSogcHJvZmlsZVN0YWNrID0gY29uc3RfY2FzdDxDb2RlUHJvZmlsZSo+KHNfcHJvZmlsZVN0
YWNrKTsKKyAgICBpZiAocHJvZmlsZVN0YWNrKQorICAgICAgICBwcm9maWxlU3RhY2stPnNhbXBs
ZShwYywgZnJhbWVQb2ludGVyKTsKK30KKwordm9pZCBDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxv
Y2F0b3IoV1RGOjpNZXRhQWxsb2NhdG9yKiBhbGxvY2F0b3IpCit7CisgICAgLy8gQ2hlY2sgZm9y
IEpTQ19DT0RFX1BST0ZJTElORy4KKyAgICBjb25zdCBjaGFyKiBjb2RlUHJvZmlsaW5nTW9kZSA9
IGdldGVudigiSlNDX0NPREVfUFJPRklMSU5HIik7CisgICAgaWYgKCFjb2RlUHJvZmlsaW5nTW9k
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQ2hlY2sgZm9yIGEgdmFsaWQgbW9kZSwgY3Vy
cmVudGx5ICIxIiwgIjIiLCBvciAiMyIuCisgICAgaWYgKCFjb2RlUHJvZmlsaW5nTW9kZVswXSB8
fCBjb2RlUHJvZmlsaW5nTW9kZVsxXSkKKyAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAoKmNv
ZGVQcm9maWxpbmdNb2RlKSB7CisgICAgY2FzZSAnMSc6CisgICAgICAgIHNfbW9kZSA9IEVuYWJs
ZWQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJzInOgorICAgICAgICBzX21vZGUgPSBWZXJi
b3NlOworICAgICAgICBicmVhazsKKyAgICBjYXNlICczJzoKKyAgICAgICAgc19tb2RlID0gVmVy
eVZlcmJvc2U7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBBU1NFUlQoZW5hYmxlZCgpKTsKKyAgICBBU1NFUlQoIXNfdHJhY2tlcik7
CisgICAgc190cmFja2VyID0gbmV3IFdURjo6TWV0YUFsbG9jYXRvclRyYWNrZXIoKTsKKyAgICBh
bGxvY2F0b3ItPnRyYWNrQWxsb2NhdGlvbnMoc190cmFja2VyKTsKK30KKwordm9pZCogQ29kZVBy
b2ZpbGluZzo6Z2V0T3duZXJVSURGb3JQQyh2b2lkKiBhZGRyZXNzKQoreworICAgIGlmICghc190
cmFja2VyKQorICAgICAgICByZXR1cm4gMDsKKyAgICBXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGUq
IGhhbmRsZSA9IHNfdHJhY2tlci0+ZmluZChhZGRyZXNzKTsKKyAgICBpZiAoIWhhbmRsZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGhhbmRsZS0+b3duZXJVSUQoKTsKK30KKwordm9p
ZCBDb2RlUHJvZmlsaW5nOjpiZWdpbihjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCit7CisgICAg
Ly8gUHVzaCBhIG5ldyBDb2RlUHJvZmlsZSBvbnRvIHRoZSBzdGFjayBmb3IgZWFjaCBzY3JpcHQg
ZW5jb3VudGVyZWQuCisgICAgQ29kZVByb2ZpbGUqIHByb2ZpbGVTdGFjayA9IGNvbnN0X2Nhc3Q8
Q29kZVByb2ZpbGUqPihzX3Byb2ZpbGVTdGFjayk7CisgICAgYm9vbCBhbHJlYWR5UHJvZmlsaW5n
ID0gcHJvZmlsZVN0YWNrOworICAgIHNfcHJvZmlsZVN0YWNrID0gcHJvZmlsZVN0YWNrID0gbmV3
IENvZGVQcm9maWxlKHNvdXJjZSwgcHJvZmlsZVN0YWNrKTsKKworICAgIC8vIElzIHRoZSBwcm9m
aWxlciBhbHJlYWR5IHJ1bm5pbmcgLSBpZiBzbywgdGhlIHRpbWVyIHdpbGwgYWxyZWFkeSBiZSBz
ZXQgdXAuCisgICAgaWYgKGFscmVhZHlQcm9maWxpbmcpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIFJlZ3NpdGVyIGEgc2lnbmFsIGhhbmRsZXIgJiBpdGltZXIuCisjaWYgUExBVEZPUk0oTUFD
KSAmJiBDUFUoWDg2XzY0KQorICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworICAgIGFjdGlv
bi5zYV9zaWdhY3Rpb24gPSByZWludGVycHJldF9jYXN0PHZvaWQgKCopKGludCwgc3RydWN0IF9f
c2lnaW5mbyAqLCB2b2lkICopPihwcm9maWxpbmdUaW1lcik7CisgICAgc2lnZmlsbHNldCgmYWN0
aW9uLnNhX21hc2spOworICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87CisgICAgc2ln
YWN0aW9uKFNJR0FMUk0sICZhY3Rpb24sIDApOworI2VuZGlmCisgICAgc2V0UHJvZmlsZVRpbWVy
KDEwMCk7Cit9CisKK3ZvaWQgQ29kZVByb2ZpbGluZzo6ZW5kKCkKK3sKKyAgICAvLyBQb3AgdGhl
IGN1cnJlbnQgcHJvZmlsZXIgb2ZmIHRoZSBzdGFjay4KKyAgICBDb2RlUHJvZmlsZSogY3VycmVu
dCA9IGNvbnN0X2Nhc3Q8Q29kZVByb2ZpbGUqPihzX3Byb2ZpbGVTdGFjayk7CisgICAgQVNTRVJU
KGN1cnJlbnQpOworICAgIHNfcHJvZmlsZVN0YWNrID0gY3VycmVudC0+cGFyZW50KCk7CisKKyAg
ICAvLyBJcyB0aGlzIHRoZSBvdXRlcm1vc3Qgc2NyaXB0IGJlaW5nIHByb2ZpbGVkPyAtIGlmIG5v
dCwganVzdCByZXR1cm4uCisgICAgLy8gV2UgcGVyZm9ybSBhbGwgb3V0cHV0IG9mIHByb2ZpbGVz
IHJlY3Vyc2l2ZWx5IGZyb20gdGhlIG91dGVybW9zdCBzY3JpcHQsCisgICAgLy8gdG8gbWluaW1p
emUgcHJvZmlsaW5nIG92ZXJoZWFkIGZyb20gc2tld2luZyByZXN1bHRzLgorICAgIGlmIChzX3By
b2ZpbGVTdGFjaykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gU3RvcCBwcm9maWxpbmcKKyAg
ICBzZXRQcm9maWxlVGltZXIoMCk7CisKKyAgICBjdXJyZW50LT5yZXBvcnQoKTsKKyAgICBkZWxl
dGUgY3VycmVudDsKK30KKworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0Nv
ZGVQcm9maWxpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
Q29kZVByb2ZpbGluZy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL0NvZGVQcm9maWxpbmcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENvZGVQcm9m
aWxpbmdfaAorI2RlZmluZSBDb2RlUHJvZmlsaW5nX2gKKworbmFtZXNwYWNlIFdURiB7CisKK2Ns
YXNzIE1ldGFBbGxvY2F0b3I7CitjbGFzcyBNZXRhQWxsb2NhdG9yVHJhY2tlcjsKKworfQorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZVByb2ZpbGU7CitjbGFzcyBTb3VyY2VDb2RlOwor
CitjbGFzcyBDb2RlUHJvZmlsaW5nIHsKKyAgICBlbnVtIE1vZGUgeworICAgICAgICBEaXNhYmxl
ZCwKKyAgICAgICAgRW5hYmxlZCwKKyAgICAgICAgVmVyYm9zZSwKKyAgICAgICAgVmVyeVZlcmJv
c2UKKyAgICB9OworCitwdWJsaWM6CisgICAgQ29kZVByb2ZpbGluZyhjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UpCisgICAgICAgIDogbV9hY3RpdmUoZW5hYmxlZCgpKQorICAgIHsKKyAgICAgICAg
aWYgKG1fYWN0aXZlKQorICAgICAgICAgICAgYmVnaW4oc291cmNlKTsKKyAgICB9CisKKyAgICB+
Q29kZVByb2ZpbGluZygpCisgICAgeworICAgICAgICBpZiAobV9hY3RpdmUpCisgICAgICAgICAg
ICBlbmQoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBlbmFibGVkKCkgeyByZXR1cm4gc19t
b2RlICE9IERpc2FibGVkOyB9CisgICAgc3RhdGljIGJvb2wgYmVWZXJib3NlKCkgeyByZXR1cm4g
c19tb2RlID49IFZlcmJvc2U7IH0KKyAgICBzdGF0aWMgYm9vbCBiZVZlcnlWZXJib3NlKCkgeyBy
ZXR1cm4gc19tb2RlID49IFZlcnlWZXJib3NlOyB9CisKKyAgICBzdGF0aWMgdm9pZCBub3RpZnlB
bGxvY2F0b3IoV1RGOjpNZXRhQWxsb2NhdG9yKik7CisgICAgc3RhdGljIHZvaWQqIGdldE93bmVy
VUlERm9yUEModm9pZCopOworICAgIHN0YXRpYyB2b2lkIHNhbXBsZSh2b2lkKiBwYywgdm9pZCoq
IGZyYW1lUG9pbnRlcik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBiZWdpbihjb25zdCBTb3VyY2VD
b2RlJik7CisgICAgdm9pZCBlbmQoKTsKKworICAgIGJvb2wgbV9hY3RpdmU7CisKKyAgICBzdGF0
aWMgTW9kZSBzX21vZGU7CisgICAgc3RhdGljIFdURjo6TWV0YUFsbG9jYXRvclRyYWNrZXIqIHNf
dHJhY2tlcjsKKyAgICBzdGF0aWMgdm9sYXRpbGUgQ29kZVByb2ZpbGUqIHNfcHJvZmlsZVN0YWNr
OworfTsKKworfQorCisjZW5kaWYgLy8gQ29kZVByb2ZpbGluZ19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgUHJvZmlsZVRyZWVOb2RlX2gKKyNkZWZpbmUgUHJvZmlsZVRy
ZWVOb2RlX2gKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFByb2ZpbGVUcmVlTm9kZSB7Cisg
ICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUHJvZmlsZVRyZWVOb2RlPiBNYXA7CisgICAgdHlw
ZWRlZiBzdGQ6OnBhaXI8U3RyaW5nLCBQcm9maWxlVHJlZU5vZGU+IE1hcEVudHJ5OworCitwdWJs
aWM6CisgICAgUHJvZmlsZVRyZWVOb2RlKCkKKyAgICAgICAgOiBtX2NvdW50KDApCisgICAgICAg
ICwgbV9jaGlsZHJlbigwKQorICAgIHsKKyAgICB9CisKKyAgICB+UHJvZmlsZVRyZWVOb2RlKCkK
KyAgICB7CisgICAgICAgIGRlbGV0ZSBtX2NoaWxkcmVuOworICAgIH0KKworICAgIFByb2ZpbGVU
cmVlTm9kZSogc2FtcGxlQ2hpbGQoY29uc3QgY2hhciogbmFtZSkKKyAgICB7CisgICAgICAgIGlm
ICghbV9jaGlsZHJlbikKKyAgICAgICAgICAgIG1fY2hpbGRyZW4gPSBuZXcgTWFwKCk7CisgICAg
CisgICAgICAgIFByb2ZpbGVUcmVlTm9kZSBuZXdFbnRyeTsKKyAgICAgICAgcGFpcjxNYXA6Oml0
ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX2NoaWxkcmVuLT5hZGQoU3RyaW5nKG5hbWUpLCBuZXdF
bnRyeSk7CisgICAgICAgIFByb2ZpbGVUcmVlTm9kZSogY2hpbGRJbk1hcCA9ICZyZXN1bHQuZmly
c3QtPnNlY29uZDsKKyAgICAgICAgKytjaGlsZEluTWFwLT5tX2NvdW50OworICAgICAgICByZXR1
cm4gY2hpbGRJbk1hcDsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoKQorICAgIHsKKyAgICAgICAg
ZHVtcEludGVybmFsKDApOworICAgIH0KKworICAgIHVpbnQ2NF90IGNvdW50KCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2NvdW50OworICAgIH0KKworICAgIHVpbnQ2NF90IGNoaWxkQ291bnQo
KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NoaWxkcmVuKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIHVpbnQ2NF90IGNoaWxkQ291bnQgPSAwOworICAgICAgICBmb3IgKE1hcDo6aXRl
cmF0b3IgaXQgPSBtX2NoaWxkcmVuLT5iZWdpbigpOyBpdCAhPSBtX2NoaWxkcmVuLT5lbmQoKTsg
KytpdCkKKyAgICAgICAgICAgIGNoaWxkQ291bnQgKz0gaXQtPnNlY29uZC5jb3VudCgpOworICAg
ICAgICByZXR1cm4gY2hpbGRDb3VudDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQg
ZHVtcEludGVybmFsKHVuc2lnbmVkIGluZGVudCkKKyAgICB7CisgICAgICAgIGlmICghbV9jaGls
ZHJlbikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBDb3B5IHBvaW50ZXJzIHRv
IGFsbCBjaGlsZHJlbiBpbnRvIGEgdmVjdG9yLCBhbmQgc29ydCB0aGUgdmVjdG9yIGJ5IHNhbXBs
ZSBjb3VudC4KKyAgICAgICAgVmVjdG9yPE1hcEVudHJ5Kj4gZW50cmllczsKKyAgICAgICAgZm9y
IChNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi0+YmVnaW4oKTsgaXQgIT0gbV9jaGlsZHJl
bi0+ZW5kKCk7ICsraXQpCisgICAgICAgICAgICBlbnRyaWVzLmFwcGVuZCgmKml0KTsKKyAgICAg
ICAgcXNvcnQoZW50cmllcy5iZWdpbigpLCBlbnRyaWVzLnNpemUoKSwgc2l6ZW9mKE1hcEVudHJ5
KiksIGNvbXBhcmVFbnRyaWVzKTsKKworICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGNoaWxk
cmVuIGluIHNhbXBsZS1mcmVxdWVuY3kgb3JkZXIuCisgICAgICAgIGZvciAoc2l6ZV90IGUgPSAw
OyBlIDwgZW50cmllcy5zaXplKCk7ICsrZSkgeworICAgICAgICAgICAgTWFwRW50cnkqIGVudHJ5
ID0gZW50cmllc1tlXTsKKworICAgICAgICAgICAgLy8gUHJpbnQgdGhlIG51bWJlciBvZiBzYW1w
bGVzLCB0aGUgbmFtZSBvZiB0aGlzIG5vZGUsIGFuZCB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdGhh
dCBhcmUgc3RhY2stdG9wCisgICAgICAgICAgICAvLyBpbiB0aGlzIG5vZGUgKHNhbXBsZXMgZGly
ZWN0bHkgd2l0aGluIHRoaXMgbm9kZSwgZXhjbHVkaW5nIHNhbXBsZXMgaW4gY2hpbGRyZW4uCisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5kZW50OyArK2kpCisgICAgICAg
ICAgICAgICAgZnByaW50ZihzdGRvdXQsICIgICAgIik7CisgICAgICAgICAgICBmcHJpbnRmKHN0
ZG91dCwgIiUgOGxsZDogJXMgKCVsbGQgc3RhY2sgdG9wKVxuIiwKKyAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxsb25nIGxvbmc+KGVudHJ5LT5zZWNvbmQuY291bnQoKSksCisgICAgICAgICAg
ICAgICAgZW50cnktPmZpcnN0LnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8bG9uZyBsb25nPihlbnRyeS0+c2Vjb25kLmNvdW50KCkgLSBlbnRyeS0+c2Vjb25kLmNo
aWxkQ291bnQoKSkpOworCisgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBkdW1wIHRoZSBjaGls
ZCBub2Rlcy4KKyAgICAgICAgICAgIGVudHJ5LT5zZWNvbmQuZHVtcEludGVybmFsKGluZGVudCAr
IDEpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGludCBjb21wYXJlRW50cmllcyhj
b25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQorICAgIHsKKyAgICAgICAgdWludDY0X3QgZGEg
PSAoKnN0YXRpY19jYXN0PE1hcEVudHJ5KiBjb25zdCAqPihhKSktPnNlY29uZC5jb3VudCgpOwor
ICAgICAgICB1aW50NjRfdCBkYiA9ICgqc3RhdGljX2Nhc3Q8TWFwRW50cnkqIGNvbnN0ICo+KGIp
KS0+c2Vjb25kLmNvdW50KCk7CisgICAgICAgIHJldHVybiAoZGEgPCBkYikgLSAoZGEgPiBkYik7
CisgICAgfQorCisgICAgdWludDY0X3QgbV9jb3VudDsKKyAgICBNYXAqIG1fY2hpbGRyZW47Cit9
OworCit9CisKKyNlbmRpZiAvLyBQcm9maWxlVHJlZU5vZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvVGllcmVkTU1hcEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rvb2xzL1RpZXJlZE1NYXBBcnJheS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1RpZXJlZE1NYXBBcnJheS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFRpZXJlZE1NYXBBcnJheV9oCisjZGVmaW5lIFRpZXJlZE1NYXBB
cnJheV9oCisKKyNpbmNsdWRlICJPU0FsbG9jYXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Ly8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgc2ltcGxlIGFycmF5IGNsYXNzIHRoYXQgY2FuIGJl
IGdyb3duIGJ5IGFwcGVuZGluZyBpdGVtcyB0byB0aGUgZW5kLgorLy8gVGhpcyBjbGFzcyBpcyBp
bXBsZW1lbnRlZCBwdXJlbHkgaW4gdGVybXMgb2Ygc3lzdGVtIGFsbG9jYXRpb25zLCB3aXRoIG5v
IG1hbGxvYy9mcmVlLCBzbyB0aGF0CisvLyBpdCBjYW4gc2FmZWx5IGJlIHVzZWQgZnJvbSBhIHNl
Y29uZGFyeSB0aHJlYWQgd2hpbHN0IHRoZSBtYWluIHRocmFkIGlzIHBhdXNlZCAocG90ZW50aWFs
bHkKKy8vIGhvbGRpbmcgdGhlIGZhc3QgbWFsbG9jIGhlYXAgbG9jaykuCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorY2xhc3MgVGllcmVkTU1hcEFycmF5IHsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGVudHJpZXNQZXJCbG9jayA9IDQwOTY7CisKK3B1YmxpYzoKKyAgICBUaWVyZWRNTWFwQXJyYXko
KQorICAgICAgICA6IG1fZGlyZWN0b3J5Q291bnQoNDA5NikKKyAgICAgICAgLCBtX2RpcmVjdG9y
eShzdGF0aWNfY2FzdDxUKio+KE9TQWxsb2NhdG9yOjpyZXNlcnZlQW5kQ29tbWl0KG1fZGlyZWN0
b3J5Q291bnQgKiBzaXplb2YoVCopKSkpCisgICAgICAgICwgbV9zaXplKDApCisgICAgeworICAg
ICAgICBmb3IgKHNpemVfdCBibG9jayA9IDA7IGJsb2NrIDwgbV9kaXJlY3RvcnlDb3VudDsgKyti
bG9jaykKKyAgICAgICAgICAgIG1fZGlyZWN0b3J5W2Jsb2NrXSA9IDA7CisgICAgfQorCisgICAg
flRpZXJlZE1NYXBBcnJheSgpCisgICAgeworICAgICAgICBzaXplX3QgdXNlZENvdW50ID0gKG1f
c2l6ZSArIChlbnRyaWVzUGVyQmxvY2sgLSAxKSkgLyBlbnRyaWVzUGVyQmxvY2s7CisgICAgICAg
IEFTU0VSVCh1c2VkQ291bnQgPT0gbV9kaXJlY3RvcnlDb3VudCB8fCAhbV9kaXJlY3RvcnlbdXNl
ZENvdW50XSk7CisKKyAgICAgICAgZm9yIChzaXplX3QgYmxvY2sgPSAwOyBibG9jayA8IHVzZWRD
b3VudDsgKytibG9jaykgeworICAgICAgICAgICAgQVNTRVJUKG1fZGlyZWN0b3J5W2Jsb2NrXSk7
CisgICAgICAgICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKG1fZGlyZWN0b3J5
W2Jsb2NrXSwgZW50cmllc1BlckJsb2NrICogc2l6ZW9mKFQpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIE9TQWxsb2NhdG9yOjpkZWNvbW1pdEFuZFJlbGVhc2UobV9kaXJlY3RvcnksIG1fZGlyZWN0
b3J5Q291bnQgKiBzaXplb2YoVCopKTsKKyAgICB9CisKKyAgICBUJiBvcGVyYXRvcltdKHNpemVf
dCBpbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpbmRleCA8IG1fc2l6ZSk7CisgICAgICAg
IHNpemVfdCBibG9jayA9IGluZGV4IC8gZW50cmllc1BlckJsb2NrOworICAgICAgICBzaXplX3Qg
b2Zmc2V0ID0gaW5kZXggJSBlbnRyaWVzUGVyQmxvY2s7CisKKyAgICAgICAgQVNTRVJUKG1fZGly
ZWN0b3J5W2Jsb2NrXSk7CisgICAgICAgIHJldHVybiBtX2RpcmVjdG9yeVtibG9ja11bb2Zmc2V0
XTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZChjb25zdCBUJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIC8vIENoZWNrIGlmIHRoZSBhcnJheSBpcyBjb21wbGV0ZWx5IGZ1bGwsIGlmIHNvIGNyZWF0
ZSBtb3JlIGNhcGFjaXR5IGluIHRoZSBkaXJlY3RvcnkuCisgICAgICAgIGlmIChtX3NpemUgPT0g
bV9kaXJlY3RvcnlDb3VudCAqIGVudHJpZXNQZXJCbG9jaykgeworICAgICAgICAgICAgLy8gUmVh
bGxvY2F0ZSB0aGUgZGlyZWN0b3J5LgorICAgICAgICAgICAgc2l6ZV90IG9sZERpcmVjdG9yeVNp
emUgPSBtX2RpcmVjdG9yeUNvdW50ICogc2l6ZW9mKFQqKTsKKyAgICAgICAgICAgIHNpemVfdCBu
ZXdEaXJlY3RvcnlTaXplID0gb2xkRGlyZWN0b3J5U2l6ZSAqIDI7CisgICAgICAgICAgICBpZiAo
bmV3RGlyZWN0b3J5U2l6ZSA8IG9sZERpcmVjdG9yeVNpemUpCisgICAgICAgICAgICAgICAgQ1JB
U0goKTsKKyAgICAgICAgICAgIG1fZGlyZWN0b3J5ID0gT1NBbGxvY2F0b3I6OnJlYWxsb2NhdGVD
b21taXR0ZWQobV9kaXJlY3RvcnksIG9sZERpcmVjdG9yeVNpemUsIG5ld0RpcmVjdG9yeVNpemUp
OworCisgICAgICAgICAgICAvLyAKKyAgICAgICAgICAgIHNpemVfdCBuZXdEaXJlY3RvcnlDb3Vu
dCA9IG1fZGlyZWN0b3J5Q291bnQgKiAyOworICAgICAgICAgICAgZm9yIChzaXplX3QgYmxvY2sg
PSBtX2RpcmVjdG9yeUNvdW50OyBibG9jayA8IG5ld0RpcmVjdG9yeUNvdW50OyArK2Jsb2NrKQor
ICAgICAgICAgICAgICAgIG1fZGlyZWN0b3J5W2Jsb2NrXSA9IDA7CisgICAgICAgICAgICBtX2Rp
cmVjdG9yeUNvdW50ID0gbmV3RGlyZWN0b3J5Q291bnQ7CisgICAgICAgIH0KKworICAgICAgICBz
aXplX3QgaW5kZXggPSBtX3NpemU7CisgICAgICAgIHNpemVfdCBibG9jayA9IGluZGV4IC8gZW50
cmllc1BlckJsb2NrOworICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gaW5kZXggJSBlbnRyaWVzUGVy
QmxvY2s7CisKKyAgICAgICAgaWYgKCFvZmZzZXQpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9k
aXJlY3RvcnlbYmxvY2tdKTsKKyAgICAgICAgICAgIG1fZGlyZWN0b3J5W2Jsb2NrXSA9IHN0YXRp
Y19jYXN0PFQqPihPU0FsbG9jYXRvcjo6cmVzZXJ2ZUFuZENvbW1pdChlbnRyaWVzUGVyQmxvY2sg
KiBzaXplb2YoVCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChtX2RpcmVjdG9yeVti
bG9ja10pOworICAgICAgICArK21fc2l6ZTsKKyAgICAgICAgbV9kaXJlY3RvcnlbYmxvY2tdW29m
ZnNldF0gPSB2YWx1ZTsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZTsgfQorCitwcml2YXRlOgorICAgIHNpemVfdCBtX2RpcmVjdG9yeUNvdW50OworICAg
IFQqKiBtX2RpcmVjdG9yeTsKKyAgICBzaXplX3QgbV9zaXplOworfTsKKworfQorCisjZW5kaWYg
Ly8gVGllcmVkTU1hcEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9N
ZXRhQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L01ldGFBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL01ldGFBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMCArNTUs
MTEgQEAgQUxXQVlTX0lOTElORSB2b2lkIE1ldGFBbGxvY2F0b3I6OnJlbGVhcwogICAgICAgICBt
X3RyYWNrZXItPnJlbGVhc2UoaGFuZGxlKTsKIH0KIAotTWV0YUFsbG9jYXRvckhhbmRsZTo6TWV0
YUFsbG9jYXRvckhhbmRsZShNZXRhQWxsb2NhdG9yKiBhbGxvY2F0b3IsIHZvaWQqIHN0YXJ0LCBz
aXplX3Qgc2l6ZUluQnl0ZXMpCitNZXRhQWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9ySGFu
ZGxlKE1ldGFBbGxvY2F0b3IqIGFsbG9jYXRvciwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5C
eXRlcywgdm9pZCogb3duZXJVSUQpCiAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCiAgICAg
LCBtX3N0YXJ0KHN0YXJ0KQogICAgICwgbV9zaXplSW5CeXRlcyhzaXplSW5CeXRlcykKKyAgICAs
IG1fb3duZXJVSUQob3duZXJVSUQpCiB7CiAgICAgQVNTRVJUKGFsbG9jYXRvcik7CiAgICAgQVNT
RVJUKHN0YXJ0KTsKQEAgLTEyOSw3ICsxMzAsNyBAQCBNZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2Nh
dG9yKHNpemVfdCBhbGxvCiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4oMSkgPDwgbV9s
b2dBbGxvY2F0aW9uR3JhbnVsZSA9PSBtX2FsbG9jYXRpb25HcmFudWxlKTsKIH0KIAotUGFzc1Jl
ZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3Qg
c2l6ZUluQnl0ZXMpCitQYXNzUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IE1ldGFBbGxvY2F0
b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQpCiB7CiAgICAg
U3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwogCkBAIC0xNjcsNyArMTY4LDcgQEAgUGFz
c1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsbwogICAgIG1fbnVtQWxsb2NhdGlv
bnMrKzsKICNlbmRpZgogCi0gICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gbmV3IE1l
dGFBbGxvY2F0b3JIYW5kbGUodGhpcywgc3RhcnQsIHNpemVJbkJ5dGVzKTsKKyAgICBNZXRhQWxs
b2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBuZXcgTWV0YUFsbG9jYXRvckhhbmRsZSh0aGlzLCBzdGFy
dCwgc2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGEgdmVy
aWZpZXIgc2NoZW1lIHRoYXQgZ3Jva3MgTWV0YUFsbG9jYXRvckhhbmRsZXMKICAgICBoYW5kbGUt
PmRlcHJlY2F0ZWRUdXJuT2ZmVmVyaWZpZXIoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2
Nyw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIH5NZXRhQWxsb2NhdG9yKCk7CiAgICAg
Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFBhc3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4g
YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgUGFz
c1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMs
IHZvaWQqIG93bmVyVUlEKTsKIAogICAgIHZvaWQgdHJhY2tBbGxvY2F0aW9ucyhNZXRhQWxsb2Nh
dG9yVHJhY2tlciogdHJhY2tlcikKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkocmV2aXNpb24gMTA2MTUwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgTWV0YUFsbG9jYXRvcjsKIAogY2xhc3MgTWV0YUFs
bG9jYXRvckhhbmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkPE1ldGFBbGxvY2F0b3JIYW5kbGU+LCBw
dWJsaWMgUmVkQmxhY2tUcmVlPE1ldGFBbGxvY2F0b3JIYW5kbGUsIHZvaWQqPjo6Tm9kZSB7CiBw
cml2YXRlOgotICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciosIHZvaWQqIHN0
YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFs
bG9jYXRvciosIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlE
KTsKICAgICAKIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfk1ldGFBbGxvY2F0b3JI
YW5kbGUoKTsKQEAgLTcyLDcgKzcyLDEyIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fYWxs
b2NhdG9yKTsKICAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yOwogICAgIH0KLSAgICAKKworICAg
IHZvaWQqIG93bmVyVUlEKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX293bmVyVUlEOworICAg
IH0KKwogICAgIHZvaWQqIGtleSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9zdGFydDsKQEAg
LTg0LDYgKzg5LDcgQEAgcHJpdmF0ZToKICAgICBNZXRhQWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsK
ICAgICB2b2lkKiBtX3N0YXJ0OwogICAgIHNpemVfdCBtX3NpemVJbkJ5dGVzOworICAgIHZvaWQq
IG1fb3duZXJVSUQ7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL09T
QWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9PU0Fs
bG9jYXRvci5oCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L09TQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYg
T1NBbGxvY2F0b3JfaAogI2RlZmluZSBPU0FsbG9jYXRvcl9oCiAKKyNpbmNsdWRlIDxhbGdvcml0
aG0+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZNVGFncy5o
PgogI2luY2x1ZGUgPHd0Zi9WTVRhZ3MuaD4KQEAgLTY1LDYgKzY2LDEyIEBAIHB1YmxpYzoKICAg
ICAvLyBzcGVjaWZpZWQuCiAgICAgc3RhdGljIHZvaWQqIHJlc2VydmVBbmRDb21taXQoc2l6ZV90
IHJlc2VydmVTaXplLCBzaXplX3QgY29tbWl0U2l6ZSwgVXNhZ2UgPSBVbmtub3duVXNhZ2UsIGJv
b2wgd3JpdGFibGUgPSB0cnVlLCBib29sIGV4ZWN1dGFibGUgPSBmYWxzZSk7CiAgICAgc3RhdGlj
IHZvaWQgZGVjb21taXRBbmRSZWxlYXNlKHZvaWQqIHJlbGVhc2VCYXNlLCBzaXplX3QgcmVsZWFz
ZVNpemUsIHZvaWQqIGRlY29tbWl0QmFzZSwgc2l6ZV90IGRlY29tbWl0U2l6ZSk7CisKKyAgICAv
LyBSZWFsbG9jYXRlIGFuIGV4aXN0aW5nLCBjb21taXR0ZWQgYWxsb2NhdGlvbi4KKyAgICAvLyBU
aGUgcHJpb3IgYWxsb2NhdGlvbiBtdXN0IGJlIGZ1bGx5IGNvbWl0dGVkLCBhbmQgdGhlIG5ldyBz
aXplIHdpbGwgYWxzbyBiZSBmdWxseSBjb21taXR0ZWQuCisgICAgLy8gVGhpcyBpbnRlcmZhY2Ug
aXMgcHJvdmlkZWQgc2luY2UgaXQgbWF5IGJlIHBvc3NpYmxlIHRvIG9wdGltaXplIHRoaXMgb3Bl
cmF0aW9uIG9uIHNvbWUgcGxhdGZvcm1zLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAg
c3RhdGljIFQqIHJlYWxsb2NhdGVDb21taXR0ZWQoVCosIHNpemVfdCBvbGRTaXplLCBzaXplX3Qg
bmV3U2l6ZSwgVXNhZ2UgPSBVbmtub3duVXNhZ2UsIGJvb2wgd3JpdGFibGUgPSB0cnVlLCBib29s
IGV4ZWN1dGFibGUgPSBmYWxzZSk7CiB9OwogCiBpbmxpbmUgdm9pZCogT1NBbGxvY2F0b3I6OnJl
c2VydmVBbmRDb21taXQoc2l6ZV90IHJlc2VydmVTaXplLCBzaXplX3QgY29tbWl0U2l6ZSwgVXNh
Z2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSkKQEAgLTkzLDYgKzEwMCwx
NSBAQCBpbmxpbmUgdm9pZCBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlCiAgICAgZGVjb21t
aXRBbmRSZWxlYXNlKGJhc2UsIHNpemUsIGJhc2UsIHNpemUpOwogfQogCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgoraW5saW5lIFQqIE9TQWxsb2NhdG9yOjpyZWFsbG9jYXRlQ29tbWl0dGVkKFQqIG9s
ZEJhc2UsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSwgVXNhZ2UgdXNhZ2UsIGJvb2wg
d3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSkKK3sKKyAgICB2b2lkKiBuZXdCYXNlID0gcmVzZXJ2
ZUFuZENvbW1pdChuZXdTaXplLCB1c2FnZSwgd3JpdGFibGUsIGV4ZWN1dGFibGUpOworICAgIG1l
bWNweShuZXdCYXNlLCBvbGRCYXNlLCBzdGQ6Om1pbihvbGRTaXplLCBuZXdTaXplKSk7CisgICAg
ZGVjb21taXRBbmRSZWxlYXNlKG9sZEJhc2UsIG9sZFNpemUpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxUKj4obmV3QmFzZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6
Ok9TQWxsb2NhdG9yOwo=
</data>
<flag name="commit-queue"
          id="125672"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124423</attachid>
            <date>2012-01-27 19:00:21 -0800</date>
            <delta_ts>2012-01-27 23:01:52 -0800</delta_ts>
            <desc>More build fixes (patch already reviewed by oliver)</desc>
            <filename>76855.C.patch</filename>
            <type>text/plain</type>
            <size>59438</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA2MTUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDEyLTAxLTI3ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBJbXBsZW1lbnQgYSBKSVQtY29kZSBhd2FyZSBzYW1wbGluZyBwcm9maWxlciBm
b3IgSlNDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
Njg1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgorCisgICAgICAgIFRvIGVu
YWJsZSB0aGUgcHJvZmlsZXIsIHNldCB0aGUgSlNDX0NPREVfUFJPRklMSU5HIGVudmlyb25tZW50
IHZhcmlhYmxlIHRvCisgICAgICAgIDEgKG5vIHRyYWNpbmcgdGhlIEMgc3RhY2spLCAyICh0cmFj
ZSBvbmUgbGV2ZWwgb2YgQyBjb2RlKSBvciAzIChyZWN1cnNpdmVseQorICAgICAgICB0cmFjZSBh
bGwgc2FtcGxlcykuCisKKyAgICAgICAgVGhlIHByb2ZpbGVyIHJlcXVpcmVzIC1mb21pdC1mcmFt
ZS1wb2ludGVyIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgYnVpbGQgZmxhZ3MuCisKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICAgICAtIFJlbW92ZWQgYW4gZXhwb3J0Lgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICAgICAtIEFkZGVkIG5ldyBmaWxlcworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgICAgICAtIEZvciBiYXNlbGluZSBjb2RlYmxvY2tzLCBjYWNoZSB0aGUgcmVz
dWx0IG9mIGNhbkNvbXBpbGVXaXRoREZHLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5o
OgorICAgICAgICAgICAgLSBGb3IgYmFzZWxpbmUgY29kZWJsb2NrcywgY2FjaGUgdGhlIHJlc3Vs
dCBvZiBjYW5Db21waWxlV2l0aERGRy4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxv
Y2F0b3IpOgorICAgICAgICAgICAgLSBOb3RpZnkgdGhlIHByb2ZpbGVyIHdoZW4gdGhlIGFsbG9j
YXRvciBpcyBjcmVhdGVkLgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxv
Y2F0ZSk6CisgICAgICAgICAgICAtIEluZm9ybSB0aGUgYWxsb2NhdGVkIG9mIHRoZSBvd25lclVJ
RC4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcDoKKyAg
ICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG9jYXRvcik6Cisg
ICAgICAgICAgICAtIE5vdGlmeSB0aGUgcHJvZmlsZXIgd2hlbiB0aGUgYWxsb2NhdG9yIGlzIGNy
ZWF0ZWQuCisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAg
ICAgICAgICAgIC0gSW5mb3JtIHRoZSBhbGxvY2F0ZWQgb2YgdGhlIG93bmVyVUlELgorICAgICAg
ICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgICAgICAtIElmIHByb2ZpbGluZywgZG9uJ3Qg
bWFzayB0aGUgcmV0dXJuIGFkZHJlc3MgaW4gSklUIGNvZGUuCisgICAgICAgICAgICAgIChXZSBk
byBzbyB0byBwcm92aWRlIG5pY2VyIGJhY2t0cmFjZXMgaW4gZGVidWcgYnVpbGRzKS4KKyAgICAg
ICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpldmFsdWF0ZSk6Cisg
ICAgICAgICAgICAtIE5vdGlmeSB0aGUgcHJvZmlsZXIgb2Ygc2NyaXB0IGV2YWx1YXRpb25zLgor
ICAgICAgICAqIHRvb2xzOiBBZGRlZC4KKyAgICAgICAgKiB0b29scy9Db2RlUHJvZmlsZS5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpzeW1ib2xOYW1lKToKKyAgICAgICAgICAgIC0gSGVscGVy
IGZ1bmN0aW9uIHRvIGdldCB0aGUgbmFtZSBvZiBhIHN5bWJvbCBpbiB0aGUgZnJhbWV3b3JrLgor
ICAgICAgICAoSlNDOjp0cnVuY2F0ZVRyYWNlKToKKyAgICAgICAgICAgIC0gSGVscGVyIHRvIHRy
dW5jYXRlIHRyYWNlcyBpbnRvIG1ldGhvZHMga25vdyB0byBoYXZlIHVuaW5mb3JtYXRpdmVseSBk
ZWVwIHN0YWNrcy4KKyAgICAgICAgKEpTQzo6Q29kZVByb2ZpbGU6OnNhbXBsZSk6CisgICAgICAg
ICAgICAtIFJlY29yZCBhIHN0YWNrIHRyYWNlIGNsYXNzaWZ5aW5nIHNhbXBsZXMuCisgICAgICAg
IChKU0M6OkNvZGVQcm9maWxlOjpyZXBvcnQpOgorICAgICAgICAgICAgLSB7UHJpbnQgcHJvZmls
ZXIgb3V0cHV0LgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxlLmg6IEFkZGVkLgorICAgICAg
ICAgICAgLSBuZXcgY2xhc3MsIGNhcHR1cmVzIGEgc2V0IG9mIHNhbXBsZXMgYXNzb2NpYXRlZCB3
aXRoIGFuIGV2YWx1YXRlZCBzY3JpcHQsCisgICAgICAgICAgICAgIGFuZCBuZXN0ZWQgdG8gcmVj
b3JkIHNhbXBsZXMgZnJvbSBzdWJzY3JpcHRzLgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxp
bmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q29kZVByb2ZpbGluZzo6cHJvZmlsaW5nVGlt
ZXIpOgorICAgICAgICAgICAgLSBjYWxsYmFjayBmaXJlZCB0aGVuIGEgdGltZXIgZXZlbnQgb2Nj
dXJzLgorICAgICAgICAoSlNDOjpDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IpOgorICAg
ICAgICAgICAgLSBjYWxsZWQgd2hlbiB0aGUgZXhlY3V0YWJsZSBhbGxvY2F0b3IgaXMgY29uc3Ry
dWN0ZWQuCisgICAgICAgIChKU0M6OkNvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEMpOgor
ICAgICAgICAgICAgLSBoZWxwZXIgdG8gbG9va3VwIHRoZSBjb2RlYmxvY2sgZnJvbSBhbiBhZGRy
ZXNzIGluIEpJVCBjb2RlCisgICAgICAgIChKU0M6OkNvZGVQcm9maWxpbmc6OmJlZ2luKToKKyAg
ICAgICAgICAgIC0gZW50ZXIgYSBwcm9maWxpbmcgc2NvcGUuCisgICAgICAgIChKU0M6OkNvZGVQ
cm9maWxpbmc6OmVuZCk6CisgICAgICAgICAgICAtIGV4aXQgYSBwcm9maWxpbmcgc2NvcGUuCisg
ICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGluZy5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0gbmV3
IGNsYXNzLCBpbnN0YW50aWFsZWQgZnJvbSBDb21wbGV0aW9uIHRvIGRlZmluZSBhIHByb2ZpbGlu
ZyBzY29wZS4KKyAgICAgICAgKiB0b29scy9Qcm9maWxlVHJlZU5vZGUuaDogQWRkZWQuCisgICAg
ICAgICAgICAtIG5ldyBjbGFzcywgdXNlZCB0byBjb25zdHJ1Y3QgYSB0cmVlIG9mIHNhbXBsZXMu
CisgICAgICAgICogdG9vbHMvVGllcmVkTU1hcEFycmF5Lmg6IEFkZGVkLgorICAgICAgICAgICAg
LSBuZXcgY2xhc3MsIGEgbWFsbG9jLWZyZWUgdmVjdG9yIChjYW4gYmUgdXNlZCB3aGlsZSB0aGUg
bWFpbiB0aHJlYWQgaXMgc3VzcGVuZGVkLAorICAgICAgICAgICAgICBwb3NzaWJseSBob2xkaW5n
IHRoZSBtYWxsb2MgaGVhcCBsb2NrKS4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6
CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5kbGUp
OgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgICAgICAt
IEFsbG93IGFsbG9jYXRpb24gaGFuZGxlcyB0byB0cmFjayBpbmZvcm1hdGlvbiBhYm91dCB0aGVp
ciBvd25lci4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5oOgorICAgICAgICAoTWV0YUFs
bG9jYXRvcik6CisgICAgICAgICAgICAtIEFsbG93IGFsbG9jYXRpb24gaGFuZGxlcyB0byB0cmFj
ayBpbmZvcm1hdGlvbiBhYm91dCB0aGVpciBvd25lci4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9j
YXRvckhhbmRsZS5oOgorICAgICAgICAoTWV0YUFsbG9jYXRvckhhbmRsZSk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Om93bmVyVUlEKToKKyAgICAgICAgICAgIC0gQWxsb3cg
YWxsb2NhdGlvbiBoYW5kbGVzIHRvIHRyYWNrIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyIG93bmVy
LgorICAgICAgICAqIHd0Zi9PU0FsbG9jYXRvci5oOgorICAgICAgICAoV1RGOjpPU0FsbG9jYXRv
cjo6cmVhbGxvY2F0ZUNvbW1pdHRlZCk6CisgICAgICAgICAgICAtIHJlYWxsb2NhdGUgYW4gZXhp
c3RpbmcsIGNvbW1pdHRlZCBtZW1vcnkgYWxsb2NhdGlvbi4KKwogMjAxMi0wMS0yNyAgTU9SSVRB
IEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbSlNDXSBTb21lIEpTX0VY
UE9SVERBVEEgbWF5IG5vdCBiZSBuZWNlc3NhcnkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw2ICsyMDAsOSBAQCBTRVQoSmF2
YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHJ1bnRpbWUvVGltZW91dENoZWNrZXIuY3BwCiAgICAg
cnVudGltZS9VU3RyaW5nLmNwcAogCisgICAgdG9vbHMvQ29kZVByb2ZpbGUuY3BwCisgICAgdG9v
bHMvQ29kZVByb2ZpbGluZy5jcHAKKwogICAgIHlhcnIvWWFyclBhdHRlcm4uY3BwCiAgICAgeWFy
ci9ZYXJySW50ZXJwcmV0ZXIuY3BwCiAgICAgeWFyci9ZYXJySklULmNwcApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw3
IEBAIGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzICs9IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cHJvZmlsZXIgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lIFwK
KwktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMgXAogCS1JJChzcmNkaXIp
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZ29i
amVjdCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQko
cmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTUyNSw2ICs1MjUsMTIgQEAgamF2YXNjcmlwdGNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtSYW5kb20uaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmggXAorCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9Db2RlUHJvZmlsZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVBy
b2ZpbGluZy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5n
LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1RpZXJlZE1NYXBBcnJheS5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL0FsaWdubWVudC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL0Fsd2F5c0lubGluZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0FycmF5QnVm
ZmVyLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJ
KHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTQxNSw3ICs0MTUsNiBAQCBfX1pOM1dURjEycmFuZG9t
TnVtYmVyRXYKIF9fWk4zV1RGMTNNZXRhQWxsb2NhdG9yMTdhZGRGcmVzaEZyZWVTcGFjZUVQdm0K
IF9fWk4zV1RGMTNNZXRhQWxsb2NhdG9yMTdmcmVlRnJlZVNwYWNlTm9kZUVQTlMwXzEzRnJlZVNw
YWNlTm9kZUUKIF9fWk4zV1RGMTNNZXRhQWxsb2NhdG9yMThkZWJ1Z0ZyZWVTcGFjZVNpemVFdgot
X19aTjNXVEYxM01ldGFBbGxvY2F0b3I4YWxsb2NhdGVFbQogX19aTjNXVEYxM01ldGFBbGxvY2F0
b3JDMkVtCiBfX1pOM1dURjEzU3RyaW5nQnVpbGRlcjExc2hyaW5rVG9GaXRFdgogX19aTjNXVEYx
M1N0cmluZ0J1aWxkZXIxNXJlc2VydmVDYXBhY2l0eUVqCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5wcmkJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIz
LDcgQEAgSU5DTFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJUi9wYXJzZXIgXAogICAgICQk
U09VUkNFX0RJUi9wcm9maWxlciBcCiAgICAgJCRTT1VSQ0VfRElSL3J1bnRpbWUgXAorICAgICQk
U09VUkNFX0RJUi90b29scyBcCiAgICAgJCRTT1VSQ0VfRElSL3lhcnIgXAogICAgICQkU09VUkNF
X0RJUi9BUEkgXAogICAgICQkU09VUkNFX0RJUi9Gb3J3YXJkaW5nSGVhZGVycyBcCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw2ICsyMDksOCBAQCBT
T1VSQ0VTICs9IFwKICAgICBydW50aW1lL1N0cnVjdHVyZS5jcHAgXAogICAgIHJ1bnRpbWUvVGlt
ZW91dENoZWNrZXIuY3BwIFwKICAgICBydW50aW1lL1VTdHJpbmcuY3BwIFwKKyAgICB0b29scy9D
b2RlUHJvZmlsZS5jcHAgXAorICAgIHRvb2xzL0NvZGVQcm9maWxpbmcuY3BwIFwKICAgICB5YXJy
L1lhcnJKSVQuY3BwIFwKIAogKnNoNCogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDEwNjE1MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ3LDYgKzE0
NDcsMzQgQEAKIAkJCTwvRmlsZT4KIAkJPC9GaWx0ZXI+CiAJCTxGaWx0ZXIKKwkJCU5hbWU9InRv
b2xzIgorCQkJPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHRvb2xzXENvZGVQ
cm9maWxlLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5cdG9vbHNcQ29kZVByb2ZpbGUuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cdG9vbHNcQ29kZVByb2ZpbGluZy5jcHAiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHRvb2xzXENv
ZGVQcm9maWxpbmcuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5cLi5cdG9vbHNcUHJvZmlsZVRyZWVOb2RlLmgiCisJCQkJPgorCQkJPC9GaWxlPgor
CQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHRvb2xzXFRpZXJlZE1NYXBBcnJheS5o
IgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJPC9GaWx0ZXI+CisJCTxGaWx0ZXIKIAkJCU5hbWU9ImJ5
dGVjb2RlIgogCQkJPgogCQkJPEZpbGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVDb21tb24udnNw
cm9wcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlQ29tbW9uLnZzcHJvcHMJKHJldmlz
aW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVDb21tb24udnNwcm9wcwkod29ya2luZyBj
b3B5KQpAQCAtNiw3ICs2LDcgQEAKIAk+CiAJPFRvb2wKIAkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKLQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJnF1b3Q7JChDb25maWd1cmF0aW9u
QnVpbGREaXIpXG9ialxKYXZhU2NyaXB0Q29yZVxEZXJpdmVkU291cmNlc1wmcXVvdDs7Li4vLi4v
Oy4uLy4uL0FQSS87Li4vLi4vcGFyc2VyLzsuLi8uLi9ieXRlY29tcGlsZXIvOy4uLy4uL2RmZy87
Li4vLi4vaml0LzsuLi8uLi9ydW50aW1lLzsuLi8uLi9ieXRlY29kZS87Li4vLi4vaW50ZXJwcmV0
ZXIvOy4uLy4uL3d0Zi87Li4vLi4vcHJvZmlsZXI7Li4vLi4vYXNzZW1ibGVyLzsuLi8uLi9kZWJ1
Z2dlci87Li4vLi4vaGVhcC87JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGUmcXVv
dDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVv
dDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcaW5jbHVkZSZxdW90OzsmcXVvdDskKENvbmZpZ3Vy
YXRpb25CdWlsZERpcilcaW5jbHVkZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVvdDskKENvbmZp
Z3VyYXRpb25CdWlsZERpcilcaW5jbHVkZVxwcml2YXRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGli
cmFyaWVzRGlyKVxpbmNsdWRlXHB0aHJlYWRzJnF1b3Q7IgorCQlBZGRpdGlvbmFsSW5jbHVkZURp
cmVjdG9yaWVzPSImcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqXEphdmFTY3JpcHRD
b3JlXERlcml2ZWRTb3VyY2VzXCZxdW90OzsuLi8uLi87Li4vLi4vQVBJLzsuLi8uLi9wYXJzZXIv
Oy4uLy4uL2J5dGVjb21waWxlci87Li4vLi4vZGZnLzsuLi8uLi9qaXQvOy4uLy4uL3J1bnRpbWUv
Oy4uLy4uL3Rvb2xzLzsuLi8uLi9ieXRlY29kZS87Li4vLi4vaW50ZXJwcmV0ZXIvOy4uLy4uL3d0
Zi87Li4vLi4vcHJvZmlsZXI7Li4vLi4vYXNzZW1ibGVyLzsuLi8uLi9kZWJ1Z2dlci87Li4vLi4v
aGVhcC87JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChX
ZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKENvbmZpZ3Vy
YXRpb25CdWlsZERpcilcaW5jbHVkZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERp
cilcaW5jbHVkZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWls
ZERpcilcaW5jbHVkZVxwcml2YXRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxp
bmNsdWRlXHB0aHJlYWRzJnF1b3Q7IgogCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX19TVERf
QyIKIAkJRm9yY2VkSW5jbHVkZUZpbGVzPSJJQ1VWZXJzaW9uLmgiCiAJLz4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMzgyLDYgKzM4Miw4IEBACiAJCTg2QUU2NEFBMTM1RTVFMUMwMDk2MzAxMiAv
KiBTSDRBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2QUU2NEE3MTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCAqLzsgfTsK
IAkJODZBRTZDNEQxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0ZQUkluZm8uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QUU2QzRCMTM2QTExRTQwMDk2MzAx
MiAvKiBERkdGUFJJbmZvLmggKi87IH07CiAJCTg2QUU2QzRFMTM2QTExRTQwMDk2MzAxMiAvKiBE
RkdHUFJJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NkFFNkM0QzEzNkExMUU0MDA5NjMwMTIgLyogREZHR1BSSW5mby5oICovOyB9OworCQk4NkI1
ODI2NzE0RDI3OTZDMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZCNTgyMkUxNEQyMzczQjAwQTlDMzA2IC8q
IENvZGVQcm9maWxlLmNwcCAqLzsgfTsKKwkJODZCNTgyNjkxNEQyNzk3MDAwQTlDMzA2IC8qIENv
ZGVQcm9maWxpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODYwM0NFRjIxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcuY3BwICovOyB9
OwogCQk4NkI5OUFFMzExN0U1NzgxMDBERjVBOTAgLyogU3RyaW5nQnVmZmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkI5OUFFMTExN0U1NzgxMDBE
RjVBOTAgLyogU3RyaW5nQnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJODZCQjA5QzAxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2gu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZCQjA5
QkUxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwICovOyB9OwogCQk4NkJCMDlDMTEz
OEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODZCQjA5QkYxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0
Y2guaCAqLzsgfTsKQEAgLTEwNDIsNyArMTA0NCw3IEBACiAJCTFBMDgyNzc4MTQyMTY4RDcwMDkw
Q0NBQyAvKiBCaW5hcnlTZW1hcGhvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQmluYXJ5U2VtYXBob3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTlF
NTUwMTQ5ODA5MzUwMDAwMUE4QSAvKiBGdW5jdGlvbmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZ1bmN0aW9uYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUM5MDUxNDIwQkE5RThBNzAwODFFOUQwIC8qIFZlcnNpb24ueGNjb25maWcgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0LnhjY29uZmlnOyBwYXRoID0gVmVyc2lvbi54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMUM5MDUxNDMwQkE5RThBNzAwODFFOUQwIC8qIEphdmFTY3JpcHRDb3JlLnhj
Y29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgbmFtZSA9IEphdmFTY3JpcHRDb3JlLnhj
Y29uZmlnOyBwYXRoID0gLi4vQ29uZmlndXJhdGlvbnMvSmF2YVNjcmlwdENvcmUueGNjb25maWc7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDOTA1MTQzMEJBOUU4QTcwMDgxRTlEMCAv
KiBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGgg
PSBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUM5MDUxNDQwQkE5RThBNzAwODFFOUQwIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBEZWJ1Z1JlbGVhc2UueGNjb25maWc7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDOTA1MTQ1MEJBOUU4QTcwMDgxRTlEMCAvKiBCYXNlLnhj
Y29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEJhc2UueGNjb25maWc7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQUE4QjRBMEQzMkMzOUEwMDQxQkNGRiAvKiBK
YXZhU2NyaXB0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEphdmFTY3JpcHQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMzgsNiArMTE0MCw4IEBACiAJCTg2
MDE2MUUwMEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlclg4Ni5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4NjAxNjFFMTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJs
ZXJYODZfNjQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJs
ZXJYODZfNjQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYwMTYxRTIwRjNBODND
MTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTg2MDNDRUYyMTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5n
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVQcm9maWxpbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NjAzQ0VGMzE0Qzc1NDY0MDBBRTU5
RTMgLyogQ29kZVByb2ZpbGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b2RlUHJvZmlsaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDRGNEYyMTQz
QTZDNDQwMEIyOTVGNSAvKiBDaGFuZ2VMb2cgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ2hhbmdlTG9nOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4NjA0RjUwMzE0M0NFMUMxMDBCMjk1RjUgLyogSlNHbG9iYWxUaGlz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2xvYmFsVGhpcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjI2QkVDRTExOTI4RTM5MDA3ODJGQUIgLyogU3Ry
aW5nU3RhdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTdHJp
bmdTdGF0aWNzLmNwcDsgcGF0aCA9IHRleHQvU3RyaW5nU3RhdGljcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMTg1LDYgKzExODksMTAgQEAKIAkJODZBRTY0QTcxMzVFNUUx
QzAwOTYzMDEyIC8qIFNINEFzc2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTSDRBc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZBRTZD
NEIxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0ZQUkluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHRlBSSW5mby5oOyBwYXRoID0gZGZnL0RGR0ZQUkluZm8uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZBRTZDNEMxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0dQ
UkluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHR1BSSW5mby5oOyBw
YXRoID0gZGZnL0RGR0dQUkluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZC
NTgyMkMxNEQyMkY1RjAwQTlDMzA2IC8qIFByb2ZpbGVUcmVlTm9kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQcm9maWxlVHJlZU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJODZCNTgyMkUxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVQcm9maWxlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZCNTgyMkYxNEQyMzczQjAwQTlDMzA2IC8qIENv
ZGVQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVQcm9maWxl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2QjU4MjZBMTREMzVENTEwMEE5QzMw
NiAvKiBUaWVyZWRNTWFwQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VGllcmVkTU1hcEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2Qjk5QUUx
MTE3RTU3ODEwMERGNUE5MCAvKiBTdHJpbmdCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gU3RyaW5nQnVmZmVyLmg7IHBhdGggPSB0ZXh0L1N0cmluZ0J1ZmZlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkJCMDlCRTEzOEUzODFCMDA1NjcwMkYgLyog
REZHUmVwYXRjaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdS
ZXBhdGNoLmNwcDsgcGF0aCA9IGRmZy9ERkdSZXBhdGNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODZCQjA5QkYxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUmVwYXRjaC5oOyBwYXRoID0gZGZnL0RG
R1JlcGF0Y2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2ODAsNiArMTY4OCw3
IEBACiAJCQkJOTVBQjgzMUEwREE0MkM2OTAwQkM4M0YzIC8qIHByb2ZpbGVyICovLAogCQkJCTdF
RjZFMEJCMEVCN0ExRUMwMDc5QUZBRiAvKiBydW50aW1lICovLAogCQkJCTE0MTIxMTAwMEE0ODc3
MjYwMDQ4MDI1NSAvKiB0ZXN0cyAqLywKKwkJCQk4NjAzQ0VGMDE0Qzc1M0VGMDBBRTU5RTMgLyog
dG9vbHMgKi8sCiAJCQkJNjUxNjJFRjEwOEU2QTIxQzAwNzU1NkNEIC8qIHd0ZiAqLywKIAkJCQk4
NkVBQzQ4QzBGOTNFOEI5MDA4RUM5NDggLyogeWFyciAqLywKIAkJCQkxQzkwNTEzRTBCQTlFODgz
MDA4MUU5RDAgLyogQ29uZmlndXJhdGlvbnMgKi8sCkBAIC0xODI2LDcgKzE4MzUsNiBAQAogCQkJ
CTg2NUY0MDg3MTBFN0Q1NjMwMDk0NzM2MSAvKiBBUElTaGltcy5oICovLAogCQkJCTFDQUE4QjRB
MEQzMkMzOUEwMDQxQkNGRiAvKiBKYXZhU2NyaXB0LmggKi8sCiAJCQkJMUNBQThCNEIwRDMyQzM5
QTAwNDFCQ0ZGIC8qIEphdmFTY3JpcHRDb3JlLmggKi8sCi0JCQkJMUM5MDUxNDMwQkE5RThBNzAw
ODFFOUQwIC8qIEphdmFTY3JpcHRDb3JlLnhjY29uZmlnICovLAogCQkJCUJDMDg5NEQ1MEZBRkJB
MkQwMDAwMTg2NSAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgKi8sCiAJCQkJQkMwODk0RDYwRkFG
QkEyRDAwMDAxODY1IC8qIEpTQVBJVmFsdWVXcmFwcGVyLmggKi8sCiAJCQkJMTQyMTM1OUEwQTY3
N0Y0RjAwQTgxOTVFIC8qIEpTQmFzZS5jcHAgKi8sCkBAIC0xOTE2LDYgKzE5MjQsNyBAQAogCQkJ
CTFDOTA1MTQ0MEJBOUU4QTcwMDgxRTlEMCAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8sCiAJ
CQkJNDQ5MDk3RUUwRjhGODFCNTAwNzZBMzI3IC8qIEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnICov
LAogCQkJCTVEQUZENkNCMTQ2QjY4NjMwMEZCRUZCNCAvKiBKU0MueGNjb25maWcgKi8sCisJCQkJ
MUM5MDUxNDMwQkE5RThBNzAwODFFOUQwIC8qIEphdmFTY3JpcHRDb3JlLnhjY29uZmlnICovLAog
CQkJCUJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUZXN0QVBJLnhjY29uZmlnICovLAogCQkJ
CTVEQUZENkNDMTQ2QjY4QjkwMEZCRUZCNCAvKiBUZXN0UmVnRXhwLnhjY29uZmlnICovLAogCQkJ
CTFDOTA1MTQyMEJBOUU4QTcwMDgxRTlEMCAvKiBWZXJzaW9uLnhjY29uZmlnICovLApAQCAtMjM2
NSw2ICsyMzc0LDE5IEBACiAJCQlwYXRoID0gcnVudGltZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CiAJCX07CisJCTg2MDNDRUYwMTRDNzUzRUYwMEFFNTlFMyAvKiB0b29scyAqLyA9IHsK
KwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJODZCNTgyMkUxNEQyMzcz
QjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAqLywKKwkJCQk4NkI1ODIyRjE0RDIzNzNCMDBB
OUMzMDYgLyogQ29kZVByb2ZpbGUuaCAqLywKKwkJCQk4NjAzQ0VGMjE0Qzc1NDY0MDBBRTU5RTMg
LyogQ29kZVByb2ZpbGluZy5jcHAgKi8sCisJCQkJODYwM0NFRjMxNEM3NTQ2NDAwQUU1OUUzIC8q
IENvZGVQcm9maWxpbmcuaCAqLywKKwkJCQk4NkI1ODIyQzE0RDIyRjVGMDBBOUMzMDYgLyogUHJv
ZmlsZVRyZWVOb2RlLmggKi8sCisJCQkJODZCNTgyNkExNEQzNUQ1MTAwQTlDMzA2IC8qIFRpZXJl
ZE1NYXBBcnJheS5oICovLAorCQkJKTsKKwkJCXBhdGggPSB0b29sczsKKwkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CisJCX07CiAJCTg2NTY1NzNFMTE1QkUzNTIwMDI5MUY0MCAvKiB0ZXh0ICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTM2NDAsNiArMzY2
Miw4IEBACiAJCQkJMEY5MzMyQTExNENBN0REMTAwODVGM0M2IC8qIE1ldGhvZENhbGxMaW5rU3Rh
dHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTMzMkEzMTRDQTdERDcwMDg1RjNDNiAvKiBQ
dXRCeUlkU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTVGMEY0MTREMTA2MzkwMEFD
NzY0OSAvKiBBYnN0cmFjdFBDLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg2QjU4MjY3MTREMjc5
NkMwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4NkI1ODI2
OTE0RDI3OTcwMDBBOUMzMDYgLyogQ29kZVByb2ZpbGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZp
c2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1Niw2ICsxNDU2LDcgQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAgICwgbV9zcGVjdWxhdGl2ZUZhaWxDb3VudGVy
KDApCiAgICAgLCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcigwKQogICAgICwgbV9yZW9wdGlt
aXphdGlvblJldHJ5Q291bnRlcigwKQorICAgICwgbV9jYW5Db21waWxlV2l0aERGR1N0YXRlKENv
bXBpbGVXaXRoREZHVW5zZXQpCiB7CiAgICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJh
bWV0ZXJzKCkpOwogICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKQEAgLTIxNjQsMTcgKzIxNjUs
MTcgQEAgSlNPYmplY3QqIEZ1bmN0aW9uQ29kZUJsb2NrOjpjb21waWxlT3B0aQogICAgIHJldHVy
biBlcnJvcjsKIH0KIAotYm9vbCBQcm9ncmFtQ29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERGRygp
Citib29sIFByb2dyYW1Db2RlQmxvY2s6OmNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKQogewog
ICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVQcm9ncmFtKHRoaXMpOwogfQogCi1ib29sIEV2YWxD
b2RlQmxvY2s6OmNhbkNvbXBpbGVXaXRoREZHKCkKK2Jvb2wgRXZhbENvZGVCbG9jazo6Y2FuQ29t
cGlsZVdpdGhERkdJbnRlcm5hbCgpCiB7CiAgICAgcmV0dXJuIERGRzo6Y2FuQ29tcGlsZUV2YWwo
dGhpcyk7CiB9CiAKLWJvb2wgRnVuY3Rpb25Db2RlQmxvY2s6OmNhbkNvbXBpbGVXaXRoREZHKCkK
K2Jvb2wgRnVuY3Rpb25Db2RlQmxvY2s6OmNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKQogewog
ICAgIGlmIChtX2lzQ29uc3RydWN0b3IpCiAgICAgICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVG
dW5jdGlvbkZvckNvbnN0cnVjdCh0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzg4LDcgKzM4
OCwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGls
ZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopID0gMDsKICAgICAgICAgdmly
dHVhbCB2b2lkIGpldHRpc29uKCkgPSAwOwogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVw
bGFjZW1lbnQoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygp
ID0gMDsKKworICAgICAgICBlbnVtIENvbXBpbGVXaXRoREZHU3RhdGUgeworICAgICAgICAgICAg
Q29tcGlsZVdpdGhERkdGYWxzZSwKKyAgICAgICAgICAgIENvbXBpbGVXaXRoREZHVHJ1ZSwKKyAg
ICAgICAgICAgIENvbXBpbGVXaXRoREZHVW5zZXQKKyAgICAgICAgfTsKKworICAgICAgICB2aXJ0
dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpID0gMDsKKyAgICAgICAgYm9vbCBj
YW5Db21waWxlV2l0aERGRygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0g
Y2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpOworICAgICAgICAgICAgbV9jYW5Db21waWxlV2l0
aERGR1N0YXRlID0gcmVzdWx0ID8gQ29tcGlsZVdpdGhERkdUcnVlIDogQ29tcGlsZVdpdGhERkdG
YWxzZTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgQ29t
cGlsZVdpdGhERkdTdGF0ZSBjYW5Db21waWxlV2l0aERGR1N0YXRlKCkgeyByZXR1cm4gbV9jYW5D
b21waWxlV2l0aERGR1N0YXRlOyB9CisKICAgICAgICAgYm9vbCBoYXNPcHRpbWl6ZWRSZXBsYWNl
bWVudCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgPT0gSklU
Q29kZTo6QmFzZWxpbmVKSVQpOwpAQCAtMTE4Nyw2ICsxMjAyLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGZyaWVuZCB2b2lkIFdURjo6ZGVsZXRlT3duZWRQdHI8UmFyZURhdGE+KFJhcmVE
YXRhKik7CiAjZW5kaWYKICAgICAgICAgT3duUHRyPFJhcmVEYXRhPiBtX3JhcmVEYXRhOworICAg
ICAgICBDb21waWxlV2l0aERGR1N0YXRlIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0ZTsKICAgICB9
OwogCiAgICAgLy8gUHJvZ3JhbSBjb2RlIGlzIG5vdCBtYXJrZWQgYnkgYW55IGZ1bmN0aW9uLCBz
byB3ZSBtYWtlIHRoZSBnbG9iYWwgb2JqZWN0CkBAIC0xMjI2LDcgKzEyNDIsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVj
U3RhdGUqLCBTY29wZUNoYWluTm9kZSopOwogICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24o
KTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7Ci0gICAgICAgIHZp
cnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2Fu
Q29tcGlsZVdpdGhERkdJbnRlcm5hbCgpOwogI2VuZGlmCiAgICAgfTsKIApAQCAtMTI2MCw3ICsx
Mjc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBp
bGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKICAgICAgICAgdmlydHVh
bCB2b2lkIGpldHRpc29uKCk7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVu
dCgpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKTsKKyAgICAgICAg
dmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKTsKICNlbmRpZgogCiAgICAg
cHJpdmF0ZToKQEAgLTEyOTcsNyArMTMxMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5O
b2RlKik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpOwogICAgICAgICB2aXJ0dWFs
IENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKLSAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBp
bGVXaXRoREZHKCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGR0ludGVy
bmFsKCk7CiAjZW5kaWYKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgi
CiAKICNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfREVNQU5EKQorI2luY2x1ZGUgIkNv
ZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgogI2luY2x1ZGUg
PHd0Zi9QYWdlUmVzZXJ2YXRpb24uaD4KICNpbmNsdWRlIDx3dGYvVk1UYWdzLmg+CkBAIC05Myw2
ICs5NCw3IEBAIHZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG8KIHsKICAg
ICBBU1NFUlQoIWFsbG9jYXRvcik7CiAgICAgYWxsb2NhdG9yID0gbmV3IERlbWFuZEV4ZWN1dGFi
bGVBbGxvY2F0b3IoKTsKKyAgICBDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IoYWxsb2Nh
dG9yKTsKIH0KIAogRXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcihKU0ds
b2JhbERhdGEmKQpAQCAtMTEyLDkgKzExNCw3IEBAIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6
dW5kZXJNZW1vcnlQcmUKIAogUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVj
dXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgc2l6ZUluQnl0
ZXMsIHZvaWQqIG93bmVyVUlEKQogewotICAgIFVOVVNFRF9QQVJBTShvd25lclVJRCk7Ci0KLSAg
ICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxv
Y2F0ZShzaXplSW5CeXRlcyk7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJl
c3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsKICAgICBp
ZiAoIXJlc3VsdCkKICAgICAgICAgQ1JBU0goKTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2Uo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZp
eGVkVk1Qb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksOCBAQAogCiAjaWYgRU5BQkxFKEVYRUNVVEFC
TEVfQUxMT0NBVE9SX0ZJWEVEKQogCisjaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgogI2luY2x1
ZGUgPGVycm5vLmg+Ci0KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgogI2luY2x1ZGUgPHVuaXN0ZC5o
PgogI2luY2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+CkBAIC05Niw2ICs5Niw3IEBAIHZvaWQg
RXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG8KIHsKICAgICBBU1NFUlQoIWFsbG9j
YXRvcik7CiAgICAgYWxsb2NhdG9yID0gbmV3IEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRv
cigpOworICAgIENvZGVQcm9maWxpbmc6Om5vdGlmeUFsbG9jYXRvcihhbGxvY2F0b3IpOwogfQog
CiBFeGVjdXRhYmxlQWxsb2NhdG9yOjpFeGVjdXRhYmxlQWxsb2NhdG9yKEpTR2xvYmFsRGF0YSYp
CkBAIC0xMTYsMTIgKzExNywxMCBAQCBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVt
b3J5UHJlCiAKIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFs
bG9jYXRvcjo6YWxsb2NhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgc2l6ZUlu
Qnl0ZXMsIHZvaWQqIG93bmVyVUlEKQogewotICAgIFVOVVNFRF9QQVJBTShvd25lclVJRCk7Ci0K
LSAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yLT5h
bGxvY2F0ZShzaXplSW5CeXRlcyk7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+
IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsKICAg
ICBpZiAoIXJlc3VsdCkgewogICAgICAgICByZWxlYXNlRXhlY3V0YWJsZU1lbW9yeShnbG9iYWxE
YXRhKTsKLSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcyk7
CisgICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVy
VUlEKTsKICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICBDUkFTSCgpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMDYx
NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgogI2luY2x1ZGUg
IkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVQcm9m
aWxpbmcuaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgi
CiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgpAQCAtOTY4LDcgKzk2OSw3IEBAIE5FVkVS
X0lOTElORSB2b2lkIEpJVFRodW5rczo6dHJ5Q2FjaGVHZXQKICAgICBKSVQ6OmNvbXBpbGVHZXRC
eUlkQ2hhaW4oY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbERhdGEsIGNhbGxGcmFtZSwg
Y29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHBy
b3BlcnR5TmFtZSwgc2xvdCwgb2Zmc2V0LCByZXR1cm5BZGRyZXNzKTsKIH0KIAotI2lmICFkZWZp
bmVkKE5ERUJVRykgJiYgIUVOQUJMRShDT0RFX1BST0ZJTElORykKKyNpZiAhZGVmaW5lZChOREVC
VUcpCiAKIGV4dGVybiAiQyIgewogCkBAIC05ODYsNyArOTg3LDggQEAgc3RydWN0IFN0YWNrSGFj
ayB7CiAgICAgICAgIDogc3RhY2tGcmFtZShzdGFja0ZyYW1lKQogICAgICAgICAsIHNhdmVkUmV0
dXJuQWRkcmVzcygqc3RhY2tGcmFtZS5yZXR1cm5BZGRyZXNzU2xvdCgpKQogICAgIHsKLSAgICAg
ICAgKnN0YWNrRnJhbWUucmV0dXJuQWRkcmVzc1Nsb3QoKSA9IFJldHVybkFkZHJlc3NQdHIoRnVu
Y3Rpb25QdHIoanNjR2VuZXJhdGVkTmF0aXZlQ29kZSkpOworICAgICAgICBpZiAoIUNvZGVQcm9m
aWxpbmc6OmVuYWJsZWQoKSkKKyAgICAgICAgICAgICpzdGFja0ZyYW1lLnJldHVybkFkZHJlc3NT
bG90KCkgPSBSZXR1cm5BZGRyZXNzUHRyKEZ1bmN0aW9uUHRyKGpzY0dlbmVyYXRlZE5hdGl2ZUNv
ZGUpKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIH5TdGFja0hhY2soKSAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiAx
MDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIK
IAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKICNp
bmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUg
IkludGVycHJldGVyLmgiCkBAIC01NSw2ICs1Niw4IEBAIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0
YXRlKiBleGVjLCBTY29wZUMKICAgICBKU0xvY2sgbG9jayhleGVjKTsKICAgICBBU1NFUlQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVu
dElkZW50aWZpZXJUYWJsZSgpKTsKIAorICAgIENvZGVQcm9maWxpbmcgcHJvZmlsZShzb3VyY2Up
OworCiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHByb2dyYW0gPSBQcm9ncmFtRXhlY3V0YWJsZTo6
Y3JlYXRlKGV4ZWMsIHNvdXJjZSk7CiAgICAgaWYgKCFwcm9ncmFtKSB7CiAgICAgICAgIGlmIChy
ZXR1cm5lZEV4Y2VwdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2Rl
UHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0Nv
ZGVQcm9maWxlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9Db2RlUHJvZmlsZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTgzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJDb2RlUHJvZmlsZS5oIgorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisj
aW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNs
dWRlICJQcm9maWxlVHJlZU5vZGUuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDxjeHhh
YmkuaD4KKyNpbmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgPGV4ZWNpbmZvLmg+CisjZW5kaWYK
KworbmFtZXNwYWNlIEpTQyB7CisKKy8vIE1hcCBmcm9tIENvZGVUeXBlIGVudW0gdG8gYSBjb3Jy
ZXNwb25kaW5nIG5hbWUuCitjb25zdCBjaGFyKiBDb2RlUHJvZmlsZTo6c19jb2RlVHlwZU5hbWVz
W0NvZGVQcm9maWxlOjpOdW1iZXJPZkNvZGVUeXBlc10gPSB7CisgICAgIltbRW5naW5lQ29kZV1d
IiwKKyAgICAiW1tHbG9iYWxUaHVua11dIiwKKyAgICAiW1tSZWdFeHBDb2RlXV0iLAorICAgICJb
W0RGR0pJVF1dIiwKKyAgICAiW1tCYXNlbGluZU9ubHldXSIsCisgICAgIltbQmFzZWxpbmVQcm9m
aWxlXV0iLAorICAgICJbW0Jhc2VsaW5lT1NSXV0iLAorICAgICJbW0VuZ2luZUZyYW1lXV0iCit9
OworCisvLyBIZWxwZXIgZnVuY3Rpb24sIGZpbmQgdGhlIHN5bWJvbCBuYW1lIGZvciBhIHBjIGlu
IEpTQy4KK3N0YXRpYyBjb25zdCBjaGFyKiBzeW1ib2xOYW1lKHZvaWQqIGFkZHJlc3MpCit7Cisj
aWYgUExBVEZPUk0oTUFDKQorICAgIERsX2luZm8gaW5mbzsKKyAgICBpZiAoIWRsYWRkcihhZGRy
ZXNzLCAmaW5mbykgfHwgIWluZm8uZGxpX3NuYW1lKQorICAgICAgICByZXR1cm4gIjx1bmtub3du
PiI7CisKKyAgICBjb25zdCBjaGFyKiBtYW5nbGVkTmFtZSA9IGluZm8uZGxpX3NuYW1lOworICAg
IGNvbnN0IGNoYXIqIGN4YURlbWFuZ2xlZCA9IGFiaTo6X19jeGFfZGVtYW5nbGUobWFuZ2xlZE5h
bWUsIDAsIDAsIDApOworICAgIHJldHVybiBjeGFEZW1hbmdsZWQgPyBjeGFEZW1hbmdsZWQgOiBt
YW5nbGVkTmFtZTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGFkZHJlc3MpOworICAgIHJldHVy
biAiPHVua25vd24+IjsKKyNlbmRpZgorfQorCisvLyBIZWxwZXIgZnVuY3Rpb24sIHRydW5jYXRl
IHRyYWNlcyB0byBwcnVuZSB0aGUgb3V0cHV0ICYgbWFrZSB2ZXJ5IHZlcmJvc2UgbW9kZSBhIGxp
dHRsZSBtb3JlIHJlYWRhYmxlLgorc3RhdGljIGJvb2wgdHJ1bmNhdGVUcmFjZShjb25zdCBjaGFy
KiBzeW1ib2xOYW1lKQoreworICAgIHJldHVybiAhc3RyY21wKHN5bWJvbE5hbWUsICJKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgpIikKKyAgICAgICAgfHwgIXN0cmNtcChzeW1ib2xO
YW1lLCAiSlNDOjpQYXJzZXI8SlNDOjpMZXhlcjx1bnNpZ25lZCBjaGFyPiA+OjpwYXJzZUlubmVy
KCkiKQorICAgICAgICB8fCAhc3RyY21wKHN5bWJvbE5hbWUsICJXVEY6OmZhc3RNYWxsb2ModW5z
aWduZWQgbG9uZykiKQorICAgICAgICB8fCAhc3RyY21wKHN5bWJvbE5hbWUsICJXVEY6OmNhbGN1
bGF0ZVVUQ09mZnNldCgpIikKKyAgICAgICAgfHwgIXN0cmNtcChzeW1ib2xOYW1lLCAiSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpIik7CisgICAgICAgIAorfQorCisv
LyBFYWNoIHRyYWNlIGNvbnNpc3RzIG9mIGEgc2VxdWVuY2Ugb2YgemVybyBvciBtb3JlICdFbmdp
bmVGcmFtZScgZW50cmllcywKKy8vIGZvbGxvd2VkIGJ5IGEgc2FtcGxlIGluIEpJVCBjb2RlLCBv
ciBvbmUgb3IgbW9yZSAnRW5naW5lRnJhbWUnIGVudHJpZXMsCisvLyBmb2xsb3dlZCBieSBhICdF
bmdpbmVDb2RlJyB0ZXJtaW5hdG9yLgordm9pZCBDb2RlUHJvZmlsZTo6c2FtcGxlKHZvaWQqIHBj
LCB2b2lkKiogZnJhbWVQb2ludGVyKQoreworICAgIC8vIERpc2FsbG93IHRyYWNlcyBjb250YWlu
aW5nIG9ubHkgYSAnRW5naW5lQ29kZScgdGVybWluYXRvciwgd2l0aG91dCBhbnkgJ0VuZ2luZUZy
YW1lJyBmcmFtZXMuCisgICAgaWYgKCFmcmFtZVBvaW50ZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHdoaWxlIChmcmFtZVBvaW50ZXIpIHsKKyAgICAgICAgQ29kZVR5cGUgdHlwZTsKKyAgICAg
ICAgdm9pZCogb3duZXJVSUQgPSBDb2RlUHJvZmlsaW5nOjpnZXRPd25lclVJREZvclBDKHBjKTsK
KworICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhpcyBzYW1wbGUgZmVsbCBpbiBKSVQgY29kZSwg
YW5kIGlmIHNvLCBmcm9tIHdoaWNoIEpJVCAmIHdoeS4KKyAgICAgICAgaWYgKCFvd25lclVJRCkK
KyAgICAgICAgICAgIHR5cGUgPSBFbmdpbmVGcmFtZTsKKyAgICAgICAgZWxzZSBpZiAob3duZXJV
SUQgPT0gR0xPQkFMX1RIVU5LX0lEKQorICAgICAgICAgICAgdHlwZSA9IEdsb2JhbFRodW5rOwor
ICAgICAgICBlbHNlIGlmIChvd25lclVJRCA9PSBSRUdFWFBfQ09ERV9JRCkKKyAgICAgICAgICAg
IHR5cGUgPSBSZWdFeHBDb2RlOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4ob3duZXJVSUQpOworICAgICAg
ICAgICAgaWYgKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkKKyAg
ICAgICAgICAgICAgICB0eXBlID0gREZHSklUOworICAgICAgICAgICAgZWxzZSBpZiAoY29kZUJs
b2NrLT5jYW5Db21waWxlV2l0aERGR1N0YXRlKCkgPT0gQ29kZUJsb2NrOjpDb21waWxlV2l0aERG
R0ZhbHNlKQorICAgICAgICAgICAgICAgIHR5cGUgPSBCYXNlbGluZU9ubHk7CisgICAgICAgICAg
ICBlbHNlIGlmIChjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkpCisgICAgICAgICAgICAgICAgdHlw
ZSA9IEJhc2VsaW5lT1NSOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHR5cGUg
PSBCYXNlbGluZVByb2ZpbGU7CisgICAgICAgIH0KKworICAgICAgICAvLyBBIHNhbXBsZSBpbiBK
SVQgY29kZSB0ZXJtaW5hdGVzIHRoZSB0cmFjZS4KKyAgICAgICAgbV9zYW1wbGVzLmFwcGVuZChD
b2RlUmVjb3JkKHBjLCB0eXBlKSk7CisgICAgICAgIGlmICh0eXBlICE9IEVuZ2luZUZyYW1lKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIFdhbGsgdXAgdGhlIHN0YWNrLgorI2lm
IFBMQVRGT1JNKE1BQykgJiYgQ1BVKFg4Nl82NCkKKyAgICAgICAgcGMgPSBmcmFtZVBvaW50ZXJb
MV07CisgICAgICAgIGZyYW1lUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigqZnJh
bWVQb2ludGVyKTsKKyNlbHNlCisgICAgICAgIC8vIFRoaXMgcGxhdGZvcm0gaXMgbm90IHlldCBz
dXBwb3J0ZWQhCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgfQor
CisgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHdlIHdhbGtlZCB0aGUgZW50aXJlIHN0YWNrIHdpdGhv
dXQgZmluZGluZyBhbnkgZnJhbWVzIG9mIEpJVCBjb2RlLgorICAgIG1fc2FtcGxlcy5hcHBlbmQo
Q29kZVJlY29yZCgwLCBFbmdpbmVDb2RlKSk7Cit9CisKK3ZvaWQgQ29kZVByb2ZpbGU6OnJlcG9y
dCgpCit7CisgICAgZnByaW50ZihzdGRvdXQsICI8Q29kZVByb2ZpbGluZyAlczolZD5cbiIsIG1f
ZmlsZS5kYXRhKCksIG1fbGluZU5vKTsKKworICAgIC8vIEhvdyBtYW55IGZyYW1lcyBvZiBDLWNv
ZGUgdG8gcHJpbnQgLSAwLCBpZiBub3QgdmVyYm9zZSwgMSBpZiB2ZXJib3NlLCB1cCB0byAxMDI0
IGlmIHZlcnkgdmVyYm9zZS4KKyAgICB1bnNpZ25lZCByZWN1cnNpb25MaW1pdCA9IENvZGVQcm9m
aWxpbmc6OmJlVmVyeVZlcmJvc2UoKSA/IDEwMjQgOiBDb2RlUHJvZmlsaW5nOjpiZVZlcmJvc2Uo
KTsKKworICAgIFByb2ZpbGVUcmVlTm9kZSBwcm9maWxlOworCisgICAgLy8gV2FsayB0aHJvdWdo
IHRoZSBzYW1wbGUgYnVmZmVyLgorICAgIHNpemVfdCB0cmFjZSA9IDA7CisgICAgd2hpbGUgKHRy
YWNlIDwgbV9zYW1wbGVzLnNpemUoKSkgeworCisgICAgICAgIC8vIEFsbCB0cmFjZXMgYXJlIHpl
cm8gb3IgbW9yZSAnRW5naW5lRnJhbWUncywgZm9sbG93ZWQgYnkgYSBub24tJ0VuZ2luZUZyYW1l
Jy4KKyAgICAgICAgLy8gU2NhbiB0byBmaW5kIHRoZSBsYXN0IHNhbXBsZSBpbiB0aGUgdHJhY2Uu
CisgICAgICAgIHNpemVfdCBsYXN0SW5UcmFjZSA9IHRyYWNlOworICAgICAgICB3aGlsZSAobV9z
YW1wbGVzW2xhc3RJblRyYWNlXS50eXBlID09IEVuZ2luZUZyYW1lKQorICAgICAgICAgICAgKyts
YXN0SW5UcmFjZTsKKworICAgICAgICAvLyBXZSB1c2UgdGhlIGxhc3Qgc2FtcGxlIHR5cGUgdG8g
bG9vayB1cCBhIG5hbWUgKHVzZWQgYXMgYSBidWNrZXQgaW4gdGhlIHByb2ZpbGVyKS4KKyAgICAg
ICAgUHJvZmlsZVRyZWVOb2RlKiBjYWxsYmFja3MgPSBwcm9maWxlLnNhbXBsZUNoaWxkKHNfY29k
ZVR5cGVOYW1lc1ttX3NhbXBsZXNbbGFzdEluVHJhY2VdLnR5cGVdKTsKKworICAgICAgICAvLyBJ
ZiB0aGVyZSBhcmUgYW55IHNhbXBsZXMgaW4gQy1jb2RlLCBhZGQgdXAgdG8gcmVjdXJzaW9uTGlt
aXQgb2YgdGhlbSBpbnRvIHRoZSBwcm9maWxlIHRyZWUuCisgICAgICAgIHNpemVfdCBsYXN0RW5n
aW5lRnJhbWUgPSBsYXN0SW5UcmFjZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBjb3VudCA9IDA7
IGxhc3RFbmdpbmVGcmFtZSA+IHRyYWNlICYmIGNvdW50IDwgcmVjdXJzaW9uTGltaXQ7ICsrY291
bnQpIHsKKyAgICAgICAgICAgIC0tbGFzdEVuZ2luZUZyYW1lOworICAgICAgICAgICAgQVNTRVJU
KG1fc2FtcGxlc1tsYXN0RW5naW5lRnJhbWVdLnR5cGUgPT0gRW5naW5lRnJhbWUpOworICAgICAg
ICAgICAgY29uc3QgY2hhciogbmFtZSA9IHN5bWJvbE5hbWUobV9zYW1wbGVzW2xhc3RFbmdpbmVG
cmFtZV0ucGMpOworICAgICAgICAgICAgY2FsbGJhY2tzID0gY2FsbGJhY2tzLT5zYW1wbGVDaGls
ZChuYW1lKTsKKyAgICAgICAgICAgIGlmICh0cnVuY2F0ZVRyYWNlKG5hbWUpKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gTW92ZSBvbiB0byB0aGUgbmV4
dCB0cmFjZS4KKyAgICAgICAgdHJhY2UgPSBsYXN0SW5UcmFjZSArIDE7CisgICAgICAgIEFTU0VS
VCh0cmFjZSA8PSBtX3NhbXBsZXMuc2l6ZSgpKTsKKyAgICB9CisKKyAgICAvLyBPdXRwdXQgdGhl
IHByb2ZpbGUgdHJlZS4KKyAgICBmcHJpbnRmKHN0ZG91dCwgIlRvdGFsIHNhbXBsZXM6ICVsbGRc
biIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4ocHJvZmlsZS5jaGlsZENvdW50KCkpKTsKKyAgICBw
cm9maWxlLmR1bXAoKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMCA7IGkgPCBtX2NoaWxk
cmVuLnNpemUoKTsgKytpKQorICAgICAgICBtX2NoaWxkcmVuW2ldLT5yZXBvcnQoKTsKKworICAg
IGZwcmludGYoc3Rkb3V0LCAiPC9Db2RlUHJvZmlsaW5nICVzOiVkPlxuIiwgbV9maWxlLmRhdGEo
KSwgbV9saW5lTm8pOworfQorCit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
Q29kZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
Q29kZVByb2ZpbGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9Db2RlUHJvZmlsZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ29kZVByb2ZpbGVf
aAorI2RlZmluZSBDb2RlUHJvZmlsZV9oCisKKyNpbmNsdWRlICJTb3VyY2VDb2RlLmgiCisjaW5j
bHVkZSAiVGllcmVkTU1hcEFycmF5LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZVByb2ZpbGUgeworcHVibGljOgorICAgIENv
ZGVQcm9maWxlKGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZVByb2ZpbGUqIHBhcmVudCkK
KyAgICAgICAgOiBtX2ZpbGUoc291cmNlLnByb3ZpZGVyKCktPnVybCgpLnV0ZjgoKSkKKyAgICAg
ICAgLCBtX2xpbmVObyhzb3VyY2UuZmlyc3RMaW5lKCkpCisgICAgICAgICwgbV9wYXJlbnQocGFy
ZW50KQorICAgIHsKKyAgICAgICAgaWYgKHBhcmVudCkKKyAgICAgICAgICAgIHBhcmVudC0+YWRk
Q2hpbGQodGhpcyk7CisgICAgfQorCisgICAgdm9pZCBzYW1wbGUodm9pZCogcGMsIHZvaWQqKiBm
cmFtZVBvaW50ZXIpOworICAgIHZvaWQgcmVwb3J0KCk7CisKKyAgICBDb2RlUHJvZmlsZSogcGFy
ZW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BhcmVudDsKKyAgICB9CisgICAgCisgICAg
dm9pZCBhZGRDaGlsZChDb2RlUHJvZmlsZSogY2hpbGQpCisgICAgeworICAgICAgICBtX2NoaWxk
cmVuLmFwcGVuZChhZG9wdFB0cihjaGlsZCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBlbnVt
IENvZGVUeXBlIHsKKyAgICAgICAgRW5naW5lQ29kZSwKKyAgICAgICAgR2xvYmFsVGh1bmssCisg
ICAgICAgIFJlZ0V4cENvZGUsCisgICAgICAgIERGR0pJVCwKKyAgICAgICAgQmFzZWxpbmVPbmx5
LAorICAgICAgICBCYXNlbGluZVByb2ZpbGUsCisgICAgICAgIEJhc2VsaW5lT1NSLAorICAgICAg
ICBFbmdpbmVGcmFtZSwKKyAgICAgICAgTnVtYmVyT2ZDb2RlVHlwZXMKKyAgICB9OworICAgIHN0
cnVjdCBDb2RlUmVjb3JkIHsKKyAgICAgICAgQ29kZVJlY29yZCh2b2lkKiBwYywgQ29kZVR5cGUg
dHlwZSkKKyAgICAgICAgICAgIDogcGMocGMpCisgICAgICAgICAgICAsIHR5cGUodHlwZSkKKyAg
ICAgICAgeworICAgICAgICB9CisgICAgICAgIHZvaWQqIHBjOworICAgICAgICBDb2RlVHlwZSB0
eXBlOworICAgIH07CisKKyAgICBDU3RyaW5nIG1fZmlsZTsKKyAgICB1bnNpZ25lZCBtX2xpbmVO
bzsKKyAgICBDb2RlUHJvZmlsZSogbV9wYXJlbnQ7CisgICAgVmVjdG9yPCBPd25QdHI8Q29kZVBy
b2ZpbGU+ID4gbV9jaGlsZHJlbjsKKyAgICBUaWVyZWRNTWFwQXJyYXk8Q29kZVJlY29yZD4gbV9z
YW1wbGVzOworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNfY29kZVR5cGVOYW1lc1tOdW1iZXJP
ZkNvZGVUeXBlc107Cit9OworCit9CisKKyNlbmRpZiAvLyBDb2RlUHJvZmlsZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb2Rl
UHJvZmlsaW5nLmgiCisKKyNpbmNsdWRlICJDb2RlUHJvZmlsZS5oIgorI2luY2x1ZGUgIk1ldGFB
bGxvY2F0b3IuaCIKKyNpbmNsdWRlICJzaWduYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3Zv
bGF0aWxlIENvZGVQcm9maWxlKiBDb2RlUHJvZmlsaW5nOjpzX3Byb2ZpbGVTdGFjayA9IDA7CitD
b2RlUHJvZmlsaW5nOjpNb2RlIENvZGVQcm9maWxpbmc6OnNfbW9kZSA9IENvZGVQcm9maWxpbmc6
OkRpc2FibGVkOworV1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tlciogQ29kZVByb2ZpbGluZzo6c190
cmFja2VyID0gMDsKKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHN0YXJ0ICYgc3RvcCB0aGUgdGlt
ZXIuCisvLyBQcmVzZW50bHkgd2UncmUgdXNpbmcgdGhlIHdhbGwtY2xvY2sgdGltZXIsIHNpbmNl
IHRoaXMgc2VlbXMgdG8gZ2l2ZSB0aGUgYmVzdCByZXN1bHRzLgorc3RhdGljIHZvaWQgc2V0UHJv
ZmlsZVRpbWVyKHVuc2lnbmVkIHVzZWMpCit7CisjaWYgUExBVEZPUk0oTUFDKSAmJiBDUFUoWDg2
XzY0KQorICAgIGl0aW1lcnZhbCB0aW1lcjsKKyAgICB0aW1lci5pdF92YWx1ZS50dl9zZWMgPSAw
OworICAgIHRpbWVyLml0X3ZhbHVlLnR2X3VzZWMgPSB1c2VjOworICAgIHRpbWVyLml0X2ludGVy
dmFsLnR2X3NlYyA9IDA7CisgICAgdGltZXIuaXRfaW50ZXJ2YWwudHZfdXNlYyA9IHVzZWM7Cisg
ICAgc2V0aXRpbWVyKElUSU1FUl9SRUFMLCAmdGltZXIsIDApOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0odXNlYyk7CisgICAgLy8gVGhpcyBwbGF0Zm9ybSBpcyBub3QgeWV0IHN1cHBvcnRlZCEK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQorCisjaWYgUExBVEZPUk0oTUFD
KSAmJiBDUFUoWDg2XzY0KQorc3RhdGljIHZvaWQgcHJvZmlsaW5nVGltZXIoaW50LCBzaWdpbmZv
X3QqLCB2b2lkKiB1YXApCit7CisgICAgbWNvbnRleHRfdCBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8
dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250ZXh0OworICAgIENvZGVQcm9maWxpbmc6OnNhbXBs
ZShyZWludGVycHJldF9jYXN0PHZvaWQqPihjb250ZXh0LT5fX3NzLl9fcmlwKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KGNvbnRleHQtPl9fc3Mu
X19yYnApKTsKK30KKyNlbmRpZgorCisvLyBDYWxsYmFjayB0cmlnZ2VyZWQgd2hlbiB0aGUgdGlt
ZXIgaXMgZmlyZWQuCit2b2lkIENvZGVQcm9maWxpbmc6OnNhbXBsZSh2b2lkKiBwYywgdm9pZCoq
IGZyYW1lUG9pbnRlcikKK3sKKyAgICBDb2RlUHJvZmlsZSogcHJvZmlsZVN0YWNrID0gY29uc3Rf
Y2FzdDxDb2RlUHJvZmlsZSo+KHNfcHJvZmlsZVN0YWNrKTsKKyAgICBpZiAocHJvZmlsZVN0YWNr
KQorICAgICAgICBwcm9maWxlU3RhY2stPnNhbXBsZShwYywgZnJhbWVQb2ludGVyKTsKK30KKwor
dm9pZCBDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IoV1RGOjpNZXRhQWxsb2NhdG9yKiBh
bGxvY2F0b3IpCit7CisgICAgLy8gQ2hlY2sgZm9yIEpTQ19DT0RFX1BST0ZJTElORy4KKyAgICBj
b25zdCBjaGFyKiBjb2RlUHJvZmlsaW5nTW9kZSA9IGdldGVudigiSlNDX0NPREVfUFJPRklMSU5H
Iik7CisgICAgaWYgKCFjb2RlUHJvZmlsaW5nTW9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gQ2hlY2sgZm9yIGEgdmFsaWQgbW9kZSwgY3VycmVudGx5ICIxIiwgIjIiLCBvciAiMyIuCisg
ICAgaWYgKCFjb2RlUHJvZmlsaW5nTW9kZVswXSB8fCBjb2RlUHJvZmlsaW5nTW9kZVsxXSkKKyAg
ICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAoKmNvZGVQcm9maWxpbmdNb2RlKSB7CisgICAgY2Fz
ZSAnMSc6CisgICAgICAgIHNfbW9kZSA9IEVuYWJsZWQ7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgJzInOgorICAgICAgICBzX21vZGUgPSBWZXJib3NlOworICAgICAgICBicmVhazsKKyAgICBj
YXNlICczJzoKKyAgICAgICAgc19tb2RlID0gVmVyeVZlcmJvc2U7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoZW5hYmxl
ZCgpKTsKKyAgICBBU1NFUlQoIXNfdHJhY2tlcik7CisgICAgc190cmFja2VyID0gbmV3IFdURjo6
TWV0YUFsbG9jYXRvclRyYWNrZXIoKTsKKyAgICBhbGxvY2F0b3ItPnRyYWNrQWxsb2NhdGlvbnMo
c190cmFja2VyKTsKK30KKwordm9pZCogQ29kZVByb2ZpbGluZzo6Z2V0T3duZXJVSURGb3JQQyh2
b2lkKiBhZGRyZXNzKQoreworICAgIGlmICghc190cmFja2VyKQorICAgICAgICByZXR1cm4gMDsK
KyAgICBXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IHNfdHJhY2tlci0+ZmluZChh
ZGRyZXNzKTsKKyAgICBpZiAoIWhhbmRsZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IGhhbmRsZS0+b3duZXJVSUQoKTsKK30KKwordm9pZCBDb2RlUHJvZmlsaW5nOjpiZWdpbihjb25z
dCBTb3VyY2VDb2RlJiBzb3VyY2UpCit7CisgICAgLy8gUHVzaCBhIG5ldyBDb2RlUHJvZmlsZSBv
bnRvIHRoZSBzdGFjayBmb3IgZWFjaCBzY3JpcHQgZW5jb3VudGVyZWQuCisgICAgQ29kZVByb2Zp
bGUqIHByb2ZpbGVTdGFjayA9IGNvbnN0X2Nhc3Q8Q29kZVByb2ZpbGUqPihzX3Byb2ZpbGVTdGFj
ayk7CisgICAgYm9vbCBhbHJlYWR5UHJvZmlsaW5nID0gcHJvZmlsZVN0YWNrOworICAgIHNfcHJv
ZmlsZVN0YWNrID0gcHJvZmlsZVN0YWNrID0gbmV3IENvZGVQcm9maWxlKHNvdXJjZSwgcHJvZmls
ZVN0YWNrKTsKKworICAgIC8vIElzIHRoZSBwcm9maWxlciBhbHJlYWR5IHJ1bm5pbmcgLSBpZiBz
bywgdGhlIHRpbWVyIHdpbGwgYWxyZWFkeSBiZSBzZXQgdXAuCisgICAgaWYgKGFscmVhZHlQcm9m
aWxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFJlZ3NpdGVyIGEgc2lnbmFsIGhhbmRs
ZXIgJiBpdGltZXIuCisjaWYgUExBVEZPUk0oTUFDKSAmJiBDUFUoWDg2XzY0KQorICAgIHN0cnVj
dCBzaWdhY3Rpb24gYWN0aW9uOworICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSByZWludGVycHJl
dF9jYXN0PHZvaWQgKCopKGludCwgc3RydWN0IF9fc2lnaW5mbyAqLCB2b2lkICopPihwcm9maWxp
bmdUaW1lcik7CisgICAgc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOworICAgIGFjdGlvbi5z
YV9mbGFncyA9IFNBX1NJR0lORk87CisgICAgc2lnYWN0aW9uKFNJR0FMUk0sICZhY3Rpb24sIDAp
OworI2VuZGlmCisgICAgc2V0UHJvZmlsZVRpbWVyKDEwMCk7Cit9CisKK3ZvaWQgQ29kZVByb2Zp
bGluZzo6ZW5kKCkKK3sKKyAgICAvLyBQb3AgdGhlIGN1cnJlbnQgcHJvZmlsZXIgb2ZmIHRoZSBz
dGFjay4KKyAgICBDb2RlUHJvZmlsZSogY3VycmVudCA9IGNvbnN0X2Nhc3Q8Q29kZVByb2ZpbGUq
PihzX3Byb2ZpbGVTdGFjayk7CisgICAgQVNTRVJUKGN1cnJlbnQpOworICAgIHNfcHJvZmlsZVN0
YWNrID0gY3VycmVudC0+cGFyZW50KCk7CisKKyAgICAvLyBJcyB0aGlzIHRoZSBvdXRlcm1vc3Qg
c2NyaXB0IGJlaW5nIHByb2ZpbGVkPyAtIGlmIG5vdCwganVzdCByZXR1cm4uCisgICAgLy8gV2Ug
cGVyZm9ybSBhbGwgb3V0cHV0IG9mIHByb2ZpbGVzIHJlY3Vyc2l2ZWx5IGZyb20gdGhlIG91dGVy
bW9zdCBzY3JpcHQsCisgICAgLy8gdG8gbWluaW1pemUgcHJvZmlsaW5nIG92ZXJoZWFkIGZyb20g
c2tld2luZyByZXN1bHRzLgorICAgIGlmIChzX3Byb2ZpbGVTdGFjaykKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gU3RvcCBwcm9maWxpbmcKKyAgICBzZXRQcm9maWxlVGltZXIoMCk7CisKKyAg
ICBjdXJyZW50LT5yZXBvcnQoKTsKKyAgICBkZWxldGUgY3VycmVudDsKK30KKworfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIENvZGVQcm9maWxpbmdfaAorI2RlZmluZSBDb2RlUHJvZmls
aW5nX2gKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIE1ldGFBbGxvY2F0b3I7CitjbGFzcyBN
ZXRhQWxsb2NhdG9yVHJhY2tlcjsKKworfQorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29k
ZVByb2ZpbGU7CitjbGFzcyBTb3VyY2VDb2RlOworCitjbGFzcyBDb2RlUHJvZmlsaW5nIHsKKyAg
ICBlbnVtIE1vZGUgeworICAgICAgICBEaXNhYmxlZCwKKyAgICAgICAgRW5hYmxlZCwKKyAgICAg
ICAgVmVyYm9zZSwKKyAgICAgICAgVmVyeVZlcmJvc2UKKyAgICB9OworCitwdWJsaWM6CisgICAg
Q29kZVByb2ZpbGluZyhjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCisgICAgICAgIDogbV9hY3Rp
dmUoZW5hYmxlZCgpKQorICAgIHsKKyAgICAgICAgaWYgKG1fYWN0aXZlKQorICAgICAgICAgICAg
YmVnaW4oc291cmNlKTsKKyAgICB9CisKKyAgICB+Q29kZVByb2ZpbGluZygpCisgICAgeworICAg
ICAgICBpZiAobV9hY3RpdmUpCisgICAgICAgICAgICBlbmQoKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgYm9vbCBlbmFibGVkKCkgeyByZXR1cm4gc19tb2RlICE9IERpc2FibGVkOyB9CisgICAgc3Rh
dGljIGJvb2wgYmVWZXJib3NlKCkgeyByZXR1cm4gc19tb2RlID49IFZlcmJvc2U7IH0KKyAgICBz
dGF0aWMgYm9vbCBiZVZlcnlWZXJib3NlKCkgeyByZXR1cm4gc19tb2RlID49IFZlcnlWZXJib3Nl
OyB9CisKKyAgICBzdGF0aWMgdm9pZCBub3RpZnlBbGxvY2F0b3IoV1RGOjpNZXRhQWxsb2NhdG9y
Kik7CisgICAgc3RhdGljIHZvaWQqIGdldE93bmVyVUlERm9yUEModm9pZCopOworICAgIHN0YXRp
YyB2b2lkIHNhbXBsZSh2b2lkKiBwYywgdm9pZCoqIGZyYW1lUG9pbnRlcik7CisKK3ByaXZhdGU6
CisgICAgdm9pZCBiZWdpbihjb25zdCBTb3VyY2VDb2RlJik7CisgICAgdm9pZCBlbmQoKTsKKwor
ICAgIGJvb2wgbV9hY3RpdmU7CisKKyAgICBzdGF0aWMgTW9kZSBzX21vZGU7CisgICAgc3RhdGlj
IFdURjo6TWV0YUFsbG9jYXRvclRyYWNrZXIqIHNfdHJhY2tlcjsKKyAgICBzdGF0aWMgdm9sYXRp
bGUgQ29kZVByb2ZpbGUqIHNfcHJvZmlsZVN0YWNrOworfTsKKworfQorCisjZW5kaWYgLy8gQ29k
ZVByb2ZpbGluZ19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxl
VHJlZU5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJv
ZmlsZVRyZWVOb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9v
bHMvUHJvZmlsZVRyZWVOb2RlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUHJvZmls
ZVRyZWVOb2RlX2gKKyNkZWZpbmUgUHJvZmlsZVRyZWVOb2RlX2gKKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIFByb2ZpbGVUcmVlTm9kZSB7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
UHJvZmlsZVRyZWVOb2RlPiBNYXA7CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8U3RyaW5nLCBQcm9m
aWxlVHJlZU5vZGU+IE1hcEVudHJ5OworCitwdWJsaWM6CisgICAgUHJvZmlsZVRyZWVOb2RlKCkK
KyAgICAgICAgOiBtX2NvdW50KDApCisgICAgICAgICwgbV9jaGlsZHJlbigwKQorICAgIHsKKyAg
ICB9CisKKyAgICB+UHJvZmlsZVRyZWVOb2RlKCkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtX2No
aWxkcmVuOworICAgIH0KKworICAgIFByb2ZpbGVUcmVlTm9kZSogc2FtcGxlQ2hpbGQoY29uc3Qg
Y2hhciogbmFtZSkKKyAgICB7CisgICAgICAgIGlmICghbV9jaGlsZHJlbikKKyAgICAgICAgICAg
IG1fY2hpbGRyZW4gPSBuZXcgTWFwKCk7CisgICAgCisgICAgICAgIFByb2ZpbGVUcmVlTm9kZSBu
ZXdFbnRyeTsKKyAgICAgICAgcGFpcjxNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX2No
aWxkcmVuLT5hZGQoU3RyaW5nKG5hbWUpLCBuZXdFbnRyeSk7CisgICAgICAgIFByb2ZpbGVUcmVl
Tm9kZSogY2hpbGRJbk1hcCA9ICZyZXN1bHQuZmlyc3QtPnNlY29uZDsKKyAgICAgICAgKytjaGls
ZEluTWFwLT5tX2NvdW50OworICAgICAgICByZXR1cm4gY2hpbGRJbk1hcDsKKyAgICB9CisKKyAg
ICB2b2lkIGR1bXAoKQorICAgIHsKKyAgICAgICAgZHVtcEludGVybmFsKDApOworICAgIH0KKwor
ICAgIHVpbnQ2NF90IGNvdW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvdW50OworICAg
IH0KKworICAgIHVpbnQ2NF90IGNoaWxkQ291bnQoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2No
aWxkcmVuKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHVpbnQ2NF90IGNoaWxkQ291
bnQgPSAwOworICAgICAgICBmb3IgKE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLT5iZWdp
bigpOyBpdCAhPSBtX2NoaWxkcmVuLT5lbmQoKTsgKytpdCkKKyAgICAgICAgICAgIGNoaWxkQ291
bnQgKz0gaXQtPnNlY29uZC5jb3VudCgpOworICAgICAgICByZXR1cm4gY2hpbGRDb3VudDsKKyAg
ICB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgZHVtcEludGVybmFsKHVuc2lnbmVkIGluZGVu
dCkKKyAgICB7CisgICAgICAgIGlmICghbV9jaGlsZHJlbikKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAvLyBDb3B5IHBvaW50ZXJzIHRvIGFsbCBjaGlsZHJlbiBpbnRvIGEgdmVjdG9y
LCBhbmQgc29ydCB0aGUgdmVjdG9yIGJ5IHNhbXBsZSBjb3VudC4KKyAgICAgICAgVmVjdG9yPE1h
cEVudHJ5Kj4gZW50cmllczsKKyAgICAgICAgZm9yIChNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jaGls
ZHJlbi0+YmVnaW4oKTsgaXQgIT0gbV9jaGlsZHJlbi0+ZW5kKCk7ICsraXQpCisgICAgICAgICAg
ICBlbnRyaWVzLmFwcGVuZCgmKml0KTsKKyAgICAgICAgcXNvcnQoZW50cmllcy5iZWdpbigpLCBl
bnRyaWVzLnNpemUoKSwgc2l6ZW9mKE1hcEVudHJ5KiksIGNvbXBhcmVFbnRyaWVzKTsKKworICAg
ICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGNoaWxkcmVuIGluIHNhbXBsZS1mcmVxdWVuY3kgb3Jk
ZXIuCisgICAgICAgIGZvciAoc2l6ZV90IGUgPSAwOyBlIDwgZW50cmllcy5zaXplKCk7ICsrZSkg
eworICAgICAgICAgICAgTWFwRW50cnkqIGVudHJ5ID0gZW50cmllc1tlXTsKKworICAgICAgICAg
ICAgLy8gUHJpbnQgdGhlIG51bWJlciBvZiBzYW1wbGVzLCB0aGUgbmFtZSBvZiB0aGlzIG5vZGUs
IGFuZCB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdGhhdCBhcmUgc3RhY2stdG9wCisgICAgICAgICAg
ICAvLyBpbiB0aGlzIG5vZGUgKHNhbXBsZXMgZGlyZWN0bHkgd2l0aGluIHRoaXMgbm9kZSwgZXhj
bHVkaW5nIHNhbXBsZXMgaW4gY2hpbGRyZW4uCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgaW5kZW50OyArK2kpCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRvdXQsICIg
ICAgIik7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIiUgOGxsZDogJXMgKCVsbGQgc3Rh
Y2sgdG9wKVxuIiwKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGVudHJ5
LT5zZWNvbmQuY291bnQoKSksCisgICAgICAgICAgICAgICAgZW50cnktPmZpcnN0LnV0ZjgoKS5k
YXRhKCksCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihlbnRyeS0+c2Vj
b25kLmNvdW50KCkgLSBlbnRyeS0+c2Vjb25kLmNoaWxkQ291bnQoKSkpOworCisgICAgICAgICAg
ICAvLyBSZWN1cnNpdmVseSBkdW1wIHRoZSBjaGlsZCBub2Rlcy4KKyAgICAgICAgICAgIGVudHJ5
LT5zZWNvbmQuZHVtcEludGVybmFsKGluZGVudCArIDEpOworICAgICAgICB9CisgICAgfQorCisg
ICAgc3RhdGljIGludCBjb21wYXJlRW50cmllcyhjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBi
KQorICAgIHsKKyAgICAgICAgdWludDY0X3QgZGEgPSAoKnN0YXRpY19jYXN0PE1hcEVudHJ5KiBj
b25zdCAqPihhKSktPnNlY29uZC5jb3VudCgpOworICAgICAgICB1aW50NjRfdCBkYiA9ICgqc3Rh
dGljX2Nhc3Q8TWFwRW50cnkqIGNvbnN0ICo+KGIpKS0+c2Vjb25kLmNvdW50KCk7CisgICAgICAg
IHJldHVybiAoZGEgPCBkYikgLSAoZGEgPiBkYik7CisgICAgfQorCisgICAgdWludDY0X3QgbV9j
b3VudDsKKyAgICBNYXAqIG1fY2hpbGRyZW47Cit9OworCit9CisKKyNlbmRpZiAvLyBQcm9maWxl
VHJlZU5vZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVGllcmVkTU1h
cEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1RpZXJl
ZE1NYXBBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L1RpZXJlZE1NYXBBcnJheS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFRpZXJlZE1N
YXBBcnJheV9oCisjZGVmaW5lIFRpZXJlZE1NYXBBcnJheV9oCisKKyNpbmNsdWRlICJPU0FsbG9j
YXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEg
c2ltcGxlIGFycmF5IGNsYXNzIHRoYXQgY2FuIGJlIGdyb3duIGJ5IGFwcGVuZGluZyBpdGVtcyB0
byB0aGUgZW5kLgorLy8gVGhpcyBjbGFzcyBpcyBpbXBsZW1lbnRlZCBwdXJlbHkgaW4gdGVybXMg
b2Ygc3lzdGVtIGFsbG9jYXRpb25zLCB3aXRoIG5vIG1hbGxvYy9mcmVlLCBzbyB0aGF0CisvLyBp
dCBjYW4gc2FmZWx5IGJlIHVzZWQgZnJvbSBhIHNlY29uZGFyeSB0aHJlYWQgd2hpbHN0IHRoZSBt
YWluIHRocmFkIGlzIHBhdXNlZCAocG90ZW50aWFsbHkKKy8vIGhvbGRpbmcgdGhlIGZhc3QgbWFs
bG9jIGhlYXAgbG9jaykuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgVGllcmVkTU1hcEFy
cmF5IHsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGVudHJpZXNQZXJCbG9jayA9IDQwOTY7CisK
K3B1YmxpYzoKKyAgICBUaWVyZWRNTWFwQXJyYXkoKQorICAgICAgICA6IG1fZGlyZWN0b3J5Q291
bnQoNDA5NikKKyAgICAgICAgLCBtX2RpcmVjdG9yeShzdGF0aWNfY2FzdDxUKio+KE9TQWxsb2Nh
dG9yOjpyZXNlcnZlQW5kQ29tbWl0KG1fZGlyZWN0b3J5Q291bnQgKiBzaXplb2YoVCopKSkpCisg
ICAgICAgICwgbV9zaXplKDApCisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBibG9jayA9IDA7
IGJsb2NrIDwgbV9kaXJlY3RvcnlDb3VudDsgKytibG9jaykKKyAgICAgICAgICAgIG1fZGlyZWN0
b3J5W2Jsb2NrXSA9IDA7CisgICAgfQorCisgICAgflRpZXJlZE1NYXBBcnJheSgpCisgICAgewor
ICAgICAgICBzaXplX3QgdXNlZENvdW50ID0gKG1fc2l6ZSArIChlbnRyaWVzUGVyQmxvY2sgLSAx
KSkgLyBlbnRyaWVzUGVyQmxvY2s7CisgICAgICAgIEFTU0VSVCh1c2VkQ291bnQgPT0gbV9kaXJl
Y3RvcnlDb3VudCB8fCAhbV9kaXJlY3RvcnlbdXNlZENvdW50XSk7CisKKyAgICAgICAgZm9yIChz
aXplX3QgYmxvY2sgPSAwOyBibG9jayA8IHVzZWRDb3VudDsgKytibG9jaykgeworICAgICAgICAg
ICAgQVNTRVJUKG1fZGlyZWN0b3J5W2Jsb2NrXSk7CisgICAgICAgICAgICBPU0FsbG9jYXRvcjo6
ZGVjb21taXRBbmRSZWxlYXNlKG1fZGlyZWN0b3J5W2Jsb2NrXSwgZW50cmllc1BlckJsb2NrICog
c2l6ZW9mKFQpKTsKKyAgICAgICAgfQorCisgICAgICAgIE9TQWxsb2NhdG9yOjpkZWNvbW1pdEFu
ZFJlbGVhc2UobV9kaXJlY3RvcnksIG1fZGlyZWN0b3J5Q291bnQgKiBzaXplb2YoVCopKTsKKyAg
ICB9CisKKyAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChpbmRleCA8IG1fc2l6ZSk7CisgICAgICAgIHNpemVfdCBibG9jayA9IGluZGV4IC8gZW50
cmllc1BlckJsb2NrOworICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gaW5kZXggJSBlbnRyaWVzUGVy
QmxvY2s7CisKKyAgICAgICAgQVNTRVJUKG1fZGlyZWN0b3J5W2Jsb2NrXSk7CisgICAgICAgIHJl
dHVybiBtX2RpcmVjdG9yeVtibG9ja11bb2Zmc2V0XTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVu
ZChjb25zdCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIC8vIENoZWNrIGlmIHRoZSBhcnJheSBp
cyBjb21wbGV0ZWx5IGZ1bGwsIGlmIHNvIGNyZWF0ZSBtb3JlIGNhcGFjaXR5IGluIHRoZSBkaXJl
Y3RvcnkuCisgICAgICAgIGlmIChtX3NpemUgPT0gbV9kaXJlY3RvcnlDb3VudCAqIGVudHJpZXNQ
ZXJCbG9jaykgeworICAgICAgICAgICAgLy8gUmVhbGxvY2F0ZSB0aGUgZGlyZWN0b3J5LgorICAg
ICAgICAgICAgc2l6ZV90IG9sZERpcmVjdG9yeVNpemUgPSBtX2RpcmVjdG9yeUNvdW50ICogc2l6
ZW9mKFQqKTsKKyAgICAgICAgICAgIHNpemVfdCBuZXdEaXJlY3RvcnlTaXplID0gb2xkRGlyZWN0
b3J5U2l6ZSAqIDI7CisgICAgICAgICAgICBpZiAobmV3RGlyZWN0b3J5U2l6ZSA8IG9sZERpcmVj
dG9yeVNpemUpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIG1fZGlyZWN0
b3J5ID0gT1NBbGxvY2F0b3I6OnJlYWxsb2NhdGVDb21taXR0ZWQobV9kaXJlY3RvcnksIG9sZERp
cmVjdG9yeVNpemUsIG5ld0RpcmVjdG9yeVNpemUpOworCisgICAgICAgICAgICAvLyAKKyAgICAg
ICAgICAgIHNpemVfdCBuZXdEaXJlY3RvcnlDb3VudCA9IG1fZGlyZWN0b3J5Q291bnQgKiAyOwor
ICAgICAgICAgICAgZm9yIChzaXplX3QgYmxvY2sgPSBtX2RpcmVjdG9yeUNvdW50OyBibG9jayA8
IG5ld0RpcmVjdG9yeUNvdW50OyArK2Jsb2NrKQorICAgICAgICAgICAgICAgIG1fZGlyZWN0b3J5
W2Jsb2NrXSA9IDA7CisgICAgICAgICAgICBtX2RpcmVjdG9yeUNvdW50ID0gbmV3RGlyZWN0b3J5
Q291bnQ7CisgICAgICAgIH0KKworICAgICAgICBzaXplX3QgaW5kZXggPSBtX3NpemU7CisgICAg
ICAgIHNpemVfdCBibG9jayA9IGluZGV4IC8gZW50cmllc1BlckJsb2NrOworICAgICAgICBzaXpl
X3Qgb2Zmc2V0ID0gaW5kZXggJSBlbnRyaWVzUGVyQmxvY2s7CisKKyAgICAgICAgaWYgKCFvZmZz
ZXQpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9kaXJlY3RvcnlbYmxvY2tdKTsKKyAgICAgICAg
ICAgIG1fZGlyZWN0b3J5W2Jsb2NrXSA9IHN0YXRpY19jYXN0PFQqPihPU0FsbG9jYXRvcjo6cmVz
ZXJ2ZUFuZENvbW1pdChlbnRyaWVzUGVyQmxvY2sgKiBzaXplb2YoVCkpKTsKKyAgICAgICAgfQor
CisgICAgICAgIEFTU0VSVChtX2RpcmVjdG9yeVtibG9ja10pOworICAgICAgICArK21fc2l6ZTsK
KyAgICAgICAgbV9kaXJlY3RvcnlbYmxvY2tdW29mZnNldF0gPSB2YWx1ZTsKKyAgICB9CisKKyAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCitwcml2YXRlOgorICAg
IHNpemVfdCBtX2RpcmVjdG9yeUNvdW50OworICAgIFQqKiBtX2RpcmVjdG9yeTsKKyAgICBzaXpl
X3QgbV9zaXplOworfTsKKworfQorCisjZW5kaWYgLy8gVGllcmVkTU1hcEFycmF5X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuY3BwCShyZXZpc2lv
biAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMCArNTUsMTEgQEAgQUxXQVlTX0lOTElORSB2b2lkIE1l
dGFBbGxvY2F0b3I6OnJlbGVhcwogICAgICAgICBtX3RyYWNrZXItPnJlbGVhc2UoaGFuZGxlKTsK
IH0KIAotTWV0YUFsbG9jYXRvckhhbmRsZTo6TWV0YUFsbG9jYXRvckhhbmRsZShNZXRhQWxsb2Nh
dG9yKiBhbGxvY2F0b3IsIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCitNZXRhQWxs
b2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0b3IqIGFsbG9jYXRv
ciwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQpCiAgICAg
OiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCiAgICAgLCBtX3N0YXJ0KHN0YXJ0KQogICAgICwgbV9z
aXplSW5CeXRlcyhzaXplSW5CeXRlcykKKyAgICAsIG1fb3duZXJVSUQob3duZXJVSUQpCiB7CiAg
ICAgQVNTRVJUKGFsbG9jYXRvcik7CiAgICAgQVNTRVJUKHN0YXJ0KTsKQEAgLTEyOSw3ICsxMzAs
NyBAQCBNZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9yKHNpemVfdCBhbGxvCiAgICAgQVNTRVJU
KHN0YXRpY19jYXN0PHNpemVfdD4oMSkgPDwgbV9sb2dBbGxvY2F0aW9uR3JhbnVsZSA9PSBtX2Fs
bG9jYXRpb25HcmFudWxlKTsKIH0KIAotUGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBN
ZXRhQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMpCitQYXNzUmVmUHRyPE1l
dGFBbGxvY2F0b3JIYW5kbGU+IE1ldGFBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplSW5C
eXRlcywgdm9pZCogb3duZXJVSUQpCiB7CiAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2xv
Y2spOwogCkBAIC0xNjcsNyArMTY4LDcgQEAgUGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxl
PiBNZXRhQWxsbwogICAgIG1fbnVtQWxsb2NhdGlvbnMrKzsKICNlbmRpZgogCi0gICAgTWV0YUFs
bG9jYXRvckhhbmRsZSogaGFuZGxlID0gbmV3IE1ldGFBbGxvY2F0b3JIYW5kbGUodGhpcywgc3Rh
cnQsIHNpemVJbkJ5dGVzKTsKKyAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBuZXcg
TWV0YUFsbG9jYXRvckhhbmRsZSh0aGlzLCBzdGFydCwgc2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsK
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGEgdmVyaWZpZXIgc2NoZW1lIHRoYXQgZ3Jva3MgTWV0
YUFsbG9jYXRvckhhbmRsZXMKICAgICBoYW5kbGUtPmRlcHJlY2F0ZWRUdXJuT2ZmVmVyaWZpZXIo
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHJl
dmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2
aXJ0dWFsIH5NZXRhQWxsb2NhdG9yKCk7CiAgICAgCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFBh
c3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVz
KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxl
PiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKTsKIAogICAgIHZv
aWQgdHJhY2tBbGxvY2F0aW9ucyhNZXRhQWxsb2NhdG9yVHJhY2tlciogdHJhY2tlcikKICAgICB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3JIYW5k
bGUuaAkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRh
QWxsb2NhdG9ySGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3Mg
TWV0YUFsbG9jYXRvcjsKIAogY2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZSA6IHB1YmxpYyBSZWZD
b3VudGVkPE1ldGFBbGxvY2F0b3JIYW5kbGU+LCBwdWJsaWMgUmVkQmxhY2tUcmVlPE1ldGFBbGxv
Y2F0b3JIYW5kbGUsIHZvaWQqPjo6Tm9kZSB7CiBwcml2YXRlOgotICAgIE1ldGFBbGxvY2F0b3JI
YW5kbGUoTWV0YUFsbG9jYXRvciosIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpOwor
ICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciosIHZvaWQqIHN0YXJ0LCBzaXpl
X3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKTsKICAgICAKIHB1YmxpYzoKICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgfk1ldGFBbGxvY2F0b3JIYW5kbGUoKTsKQEAgLTcyLDcgKzcyLDEyIEBA
IHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fYWxsb2NhdG9yKTsKICAgICAgICAgcmV0dXJuIG1f
YWxsb2NhdG9yOwogICAgIH0KLSAgICAKKworICAgIHZvaWQqIG93bmVyVUlEKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX293bmVyVUlEOworICAgIH0KKwogICAgIHZvaWQqIGtleSgpCiAgICAg
ewogICAgICAgICByZXR1cm4gbV9zdGFydDsKQEAgLTg0LDYgKzg5LDcgQEAgcHJpdmF0ZToKICAg
ICBNZXRhQWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsKICAgICB2b2lkKiBtX3N0YXJ0OwogICAgIHNp
emVfdCBtX3NpemVJbkJ5dGVzOworICAgIHZvaWQqIG1fb3duZXJVSUQ7CiB9OwogCiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL09TQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9PU0FsbG9jYXRvci5oCShyZXZpc2lvbiAxMDYxNTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL09TQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgT1NBbGxvY2F0b3JfaAogI2RlZmluZSBPU0Fs
bG9jYXRvcl9oCiAKKyNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBh
cmFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZNVGFncy5oPgogI2luY2x1ZGUgPHd0Zi9WTVRhZ3MuaD4K
QEAgLTY1LDYgKzY2LDEyIEBAIHB1YmxpYzoKICAgICAvLyBzcGVjaWZpZWQuCiAgICAgc3RhdGlj
IHZvaWQqIHJlc2VydmVBbmRDb21taXQoc2l6ZV90IHJlc2VydmVTaXplLCBzaXplX3QgY29tbWl0
U2l6ZSwgVXNhZ2UgPSBVbmtub3duVXNhZ2UsIGJvb2wgd3JpdGFibGUgPSB0cnVlLCBib29sIGV4
ZWN1dGFibGUgPSBmYWxzZSk7CiAgICAgc3RhdGljIHZvaWQgZGVjb21taXRBbmRSZWxlYXNlKHZv
aWQqIHJlbGVhc2VCYXNlLCBzaXplX3QgcmVsZWFzZVNpemUsIHZvaWQqIGRlY29tbWl0QmFzZSwg
c2l6ZV90IGRlY29tbWl0U2l6ZSk7CisKKyAgICAvLyBSZWFsbG9jYXRlIGFuIGV4aXN0aW5nLCBj
b21taXR0ZWQgYWxsb2NhdGlvbi4KKyAgICAvLyBUaGUgcHJpb3IgYWxsb2NhdGlvbiBtdXN0IGJl
IGZ1bGx5IGNvbWl0dGVkLCBhbmQgdGhlIG5ldyBzaXplIHdpbGwgYWxzbyBiZSBmdWxseSBjb21t
aXR0ZWQuCisgICAgLy8gVGhpcyBpbnRlcmZhY2UgaXMgcHJvdmlkZWQgc2luY2UgaXQgbWF5IGJl
IHBvc3NpYmxlIHRvIG9wdGltaXplIHRoaXMgb3BlcmF0aW9uIG9uIHNvbWUgcGxhdGZvcm1zLgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIFQqIHJlYWxsb2NhdGVDb21taXR0
ZWQoVCosIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSwgVXNhZ2UgPSBVbmtub3duVXNh
Z2UsIGJvb2wgd3JpdGFibGUgPSB0cnVlLCBib29sIGV4ZWN1dGFibGUgPSBmYWxzZSk7CiB9Owog
CiBpbmxpbmUgdm9pZCogT1NBbGxvY2F0b3I6OnJlc2VydmVBbmRDb21taXQoc2l6ZV90IHJlc2Vy
dmVTaXplLCBzaXplX3QgY29tbWl0U2l6ZSwgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJv
b2wgZXhlY3V0YWJsZSkKQEAgLTkzLDYgKzEwMCwxNSBAQCBpbmxpbmUgdm9pZCBPU0FsbG9jYXRv
cjo6ZGVjb21taXRBbmRSZWxlCiAgICAgZGVjb21taXRBbmRSZWxlYXNlKGJhc2UsIHNpemUsIGJh
c2UsIHNpemUpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIFQqIE9TQWxsb2Nh
dG9yOjpyZWFsbG9jYXRlQ29tbWl0dGVkKFQqIG9sZEJhc2UsIHNpemVfdCBvbGRTaXplLCBzaXpl
X3QgbmV3U2l6ZSwgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSkK
K3sKKyAgICB2b2lkKiBuZXdCYXNlID0gcmVzZXJ2ZUFuZENvbW1pdChuZXdTaXplLCB1c2FnZSwg
d3JpdGFibGUsIGV4ZWN1dGFibGUpOworICAgIG1lbWNweShuZXdCYXNlLCBvbGRCYXNlLCBzdGQ6
Om1pbihvbGRTaXplLCBuZXdTaXplKSk7CisgICAgZGVjb21taXRBbmRSZWxlYXNlKG9sZEJhc2Us
IG9sZFNpemUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4obmV3QmFzZSk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6Ok9TQWxsb2NhdG9yOwo=
</data>
<flag name="commit-queue"
          id="125675"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124430</attachid>
            <date>2012-01-27 23:01:52 -0800</date>
            <delta_ts>2012-01-27 23:01:52 -0800</delta_ts>
            <desc>More build fixes (patch already reviewed by oliver)</desc>
            <filename>76855.D.patch</filename>
            <type>text/plain</type>
            <size>59753</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA2MTUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDEyLTAxLTI3ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBJbXBsZW1lbnQgYSBKSVQtY29kZSBhd2FyZSBzYW1wbGluZyBwcm9maWxlciBm
b3IgSlNDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
Njg1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgorCisgICAgICAgIFRvIGVu
YWJsZSB0aGUgcHJvZmlsZXIsIHNldCB0aGUgSlNDX0NPREVfUFJPRklMSU5HIGVudmlyb25tZW50
IHZhcmlhYmxlIHRvCisgICAgICAgIDEgKG5vIHRyYWNpbmcgdGhlIEMgc3RhY2spLCAyICh0cmFj
ZSBvbmUgbGV2ZWwgb2YgQyBjb2RlKSBvciAzIChyZWN1cnNpdmVseQorICAgICAgICB0cmFjZSBh
bGwgc2FtcGxlcykuCisKKyAgICAgICAgVGhlIHByb2ZpbGVyIHJlcXVpcmVzIC1mb21pdC1mcmFt
ZS1wb2ludGVyIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgYnVpbGQgZmxhZ3MuCisKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICAgICAtIFJlbW92ZWQgYW4gZXhwb3J0Lgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICAgICAtIEFkZGVkIG5ldyBmaWxlcworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgICAgICAtIEZvciBiYXNlbGluZSBjb2RlYmxvY2tzLCBjYWNoZSB0aGUgcmVz
dWx0IG9mIGNhbkNvbXBpbGVXaXRoREZHLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5o
OgorICAgICAgICAgICAgLSBGb3IgYmFzZWxpbmUgY29kZWJsb2NrcywgY2FjaGUgdGhlIHJlc3Vs
dCBvZiBjYW5Db21waWxlV2l0aERGRy4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxv
Y2F0b3IpOgorICAgICAgICAgICAgLSBOb3RpZnkgdGhlIHByb2ZpbGVyIHdoZW4gdGhlIGFsbG9j
YXRvciBpcyBjcmVhdGVkLgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxv
Y2F0ZSk6CisgICAgICAgICAgICAtIEluZm9ybSB0aGUgYWxsb2NhdGVkIG9mIHRoZSBvd25lclVJ
RC4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcDoKKyAg
ICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG9jYXRvcik6Cisg
ICAgICAgICAgICAtIE5vdGlmeSB0aGUgcHJvZmlsZXIgd2hlbiB0aGUgYWxsb2NhdG9yIGlzIGNy
ZWF0ZWQuCisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAg
ICAgICAgICAgIC0gSW5mb3JtIHRoZSBhbGxvY2F0ZWQgb2YgdGhlIG93bmVyVUlELgorICAgICAg
ICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgICAgICAtIElmIHByb2ZpbGluZywgZG9uJ3Qg
bWFzayB0aGUgcmV0dXJuIGFkZHJlc3MgaW4gSklUIGNvZGUuCisgICAgICAgICAgICAgIChXZSBk
byBzbyB0byBwcm92aWRlIG5pY2VyIGJhY2t0cmFjZXMgaW4gZGVidWcgYnVpbGRzKS4KKyAgICAg
ICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpldmFsdWF0ZSk6Cisg
ICAgICAgICAgICAtIE5vdGlmeSB0aGUgcHJvZmlsZXIgb2Ygc2NyaXB0IGV2YWx1YXRpb25zLgor
ICAgICAgICAqIHRvb2xzOiBBZGRlZC4KKyAgICAgICAgKiB0b29scy9Db2RlUHJvZmlsZS5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpzeW1ib2xOYW1lKToKKyAgICAgICAgICAgIC0gSGVscGVy
IGZ1bmN0aW9uIHRvIGdldCB0aGUgbmFtZSBvZiBhIHN5bWJvbCBpbiB0aGUgZnJhbWV3b3JrLgor
ICAgICAgICAoSlNDOjp0cnVuY2F0ZVRyYWNlKToKKyAgICAgICAgICAgIC0gSGVscGVyIHRvIHRy
dW5jYXRlIHRyYWNlcyBpbnRvIG1ldGhvZHMga25vdyB0byBoYXZlIHVuaW5mb3JtYXRpdmVseSBk
ZWVwIHN0YWNrcy4KKyAgICAgICAgKEpTQzo6Q29kZVByb2ZpbGU6OnNhbXBsZSk6CisgICAgICAg
ICAgICAtIFJlY29yZCBhIHN0YWNrIHRyYWNlIGNsYXNzaWZ5aW5nIHNhbXBsZXMuCisgICAgICAg
IChKU0M6OkNvZGVQcm9maWxlOjpyZXBvcnQpOgorICAgICAgICAgICAgLSB7UHJpbnQgcHJvZmls
ZXIgb3V0cHV0LgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxlLmg6IEFkZGVkLgorICAgICAg
ICAgICAgLSBuZXcgY2xhc3MsIGNhcHR1cmVzIGEgc2V0IG9mIHNhbXBsZXMgYXNzb2NpYXRlZCB3
aXRoIGFuIGV2YWx1YXRlZCBzY3JpcHQsCisgICAgICAgICAgICAgIGFuZCBuZXN0ZWQgdG8gcmVj
b3JkIHNhbXBsZXMgZnJvbSBzdWJzY3JpcHRzLgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxp
bmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q29kZVByb2ZpbGluZzo6cHJvZmlsaW5nVGlt
ZXIpOgorICAgICAgICAgICAgLSBjYWxsYmFjayBmaXJlZCB0aGVuIGEgdGltZXIgZXZlbnQgb2Nj
dXJzLgorICAgICAgICAoSlNDOjpDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IpOgorICAg
ICAgICAgICAgLSBjYWxsZWQgd2hlbiB0aGUgZXhlY3V0YWJsZSBhbGxvY2F0b3IgaXMgY29uc3Ry
dWN0ZWQuCisgICAgICAgIChKU0M6OkNvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEMpOgor
ICAgICAgICAgICAgLSBoZWxwZXIgdG8gbG9va3VwIHRoZSBjb2RlYmxvY2sgZnJvbSBhbiBhZGRy
ZXNzIGluIEpJVCBjb2RlCisgICAgICAgIChKU0M6OkNvZGVQcm9maWxpbmc6OmJlZ2luKToKKyAg
ICAgICAgICAgIC0gZW50ZXIgYSBwcm9maWxpbmcgc2NvcGUuCisgICAgICAgIChKU0M6OkNvZGVQ
cm9maWxpbmc6OmVuZCk6CisgICAgICAgICAgICAtIGV4aXQgYSBwcm9maWxpbmcgc2NvcGUuCisg
ICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGluZy5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0gbmV3
IGNsYXNzLCBpbnN0YW50aWFsZWQgZnJvbSBDb21wbGV0aW9uIHRvIGRlZmluZSBhIHByb2ZpbGlu
ZyBzY29wZS4KKyAgICAgICAgKiB0b29scy9Qcm9maWxlVHJlZU5vZGUuaDogQWRkZWQuCisgICAg
ICAgICAgICAtIG5ldyBjbGFzcywgdXNlZCB0byBjb25zdHJ1Y3QgYSB0cmVlIG9mIHNhbXBsZXMu
CisgICAgICAgICogdG9vbHMvVGllcmVkTU1hcEFycmF5Lmg6IEFkZGVkLgorICAgICAgICAgICAg
LSBuZXcgY2xhc3MsIGEgbWFsbG9jLWZyZWUgdmVjdG9yIChjYW4gYmUgdXNlZCB3aGlsZSB0aGUg
bWFpbiB0aHJlYWQgaXMgc3VzcGVuZGVkLAorICAgICAgICAgICAgICBwb3NzaWJseSBob2xkaW5n
IHRoZSBtYWxsb2MgaGVhcCBsb2NrKS4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6
CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5kbGUp
OgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgICAgICAt
IEFsbG93IGFsbG9jYXRpb24gaGFuZGxlcyB0byB0cmFjayBpbmZvcm1hdGlvbiBhYm91dCB0aGVp
ciBvd25lci4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5oOgorICAgICAgICAoTWV0YUFs
bG9jYXRvcik6CisgICAgICAgICAgICAtIEFsbG93IGFsbG9jYXRpb24gaGFuZGxlcyB0byB0cmFj
ayBpbmZvcm1hdGlvbiBhYm91dCB0aGVpciBvd25lci4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9j
YXRvckhhbmRsZS5oOgorICAgICAgICAoTWV0YUFsbG9jYXRvckhhbmRsZSk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Om93bmVyVUlEKToKKyAgICAgICAgICAgIC0gQWxsb3cg
YWxsb2NhdGlvbiBoYW5kbGVzIHRvIHRyYWNrIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyIG93bmVy
LgorICAgICAgICAqIHd0Zi9PU0FsbG9jYXRvci5oOgorICAgICAgICAoV1RGOjpPU0FsbG9jYXRv
cjo6cmVhbGxvY2F0ZUNvbW1pdHRlZCk6CisgICAgICAgICAgICAtIHJlYWxsb2NhdGUgYW4gZXhp
c3RpbmcsIGNvbW1pdHRlZCBtZW1vcnkgYWxsb2NhdGlvbi4KKwogMjAxMi0wMS0yNyAgTU9SSVRB
IEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbSlNDXSBTb21lIEpTX0VY
UE9SVERBVEEgbWF5IG5vdCBiZSBuZWNlc3NhcnkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE0LDYgKzE0LDcgQEAgU0VUKEphdmFT
Y3JpcHRDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9
L3BhcnNlciIKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L3Byb2ZpbGVyIgogICAgICIke0pB
VkFTQ1JJUFRDT1JFX0RJUn0vcnVudGltZSIKKyAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L3Rv
b2xzIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0veWFyciIKICAgICAiJHtKQVZBU0NSSVBU
Q09SRV9ESVJ9L3d0ZiIKICAgICAiJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElS
fSIKQEAgLTIwMCw2ICsyMDEsOSBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHJ1
bnRpbWUvVGltZW91dENoZWNrZXIuY3BwCiAgICAgcnVudGltZS9VU3RyaW5nLmNwcAogCisgICAg
dG9vbHMvQ29kZVByb2ZpbGUuY3BwCisgICAgdG9vbHMvQ29kZVByb2ZpbGluZy5jcHAKKwogICAg
IHlhcnIvWWFyclBhdHRlcm4uY3BwCiAgICAgeWFyci9ZYXJySW50ZXJwcmV0ZXIuY3BwCiAgICAg
eWFyci9ZYXJySklULmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQko
cmV2aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFt
CSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw3IEBAIGphdmFzY3JpcHRjb3JlX2NwcGZsYWdz
ICs9IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyIFwKIAktSSQo
c3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIgXAogCS1JJChzcmNkaXIpL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYg
XAogCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYgXAogCS1JJChzcmNkaXIp
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdCBcCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTA2MTUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTUy
NSw2ICs1MjUsMTIgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1dlYWtSYW5kb20uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3Jp
dGVCYXJyaWVyLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5j
cHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5oIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5jcHAgXAorCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L1RpZXJlZE1NYXBBcnJheS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0FsaWdubWVu
dC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Fsd2F5c0lubGluZS5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL0FycmF5QnVmZmVyLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTQx
NSw3ICs0MTUsNiBAQCBfX1pOM1dURjEycmFuZG9tTnVtYmVyRXYKIF9fWk4zV1RGMTNNZXRhQWxs
b2NhdG9yMTdhZGRGcmVzaEZyZWVTcGFjZUVQdm0KIF9fWk4zV1RGMTNNZXRhQWxsb2NhdG9yMTdm
cmVlRnJlZVNwYWNlTm9kZUVQTlMwXzEzRnJlZVNwYWNlTm9kZUUKIF9fWk4zV1RGMTNNZXRhQWxs
b2NhdG9yMThkZWJ1Z0ZyZWVTcGFjZVNpemVFdgotX19aTjNXVEYxM01ldGFBbGxvY2F0b3I4YWxs
b2NhdGVFbQogX19aTjNXVEYxM01ldGFBbGxvY2F0b3JDMkVtCiBfX1pOM1dURjEzU3RyaW5nQnVp
bGRlcjExc2hyaW5rVG9GaXRFdgogX19aTjNXVEYxM1N0cmluZ0J1aWxkZXIxNXJlc2VydmVDYXBh
Y2l0eUVqCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJpCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcmkJKHJl
dmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5w
cmkJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAgSU5DTFVERVBBVEggKz0gXAogICAg
ICQkU09VUkNFX0RJUi9wYXJzZXIgXAogICAgICQkU09VUkNFX0RJUi9wcm9maWxlciBcCiAgICAg
JCRTT1VSQ0VfRElSL3J1bnRpbWUgXAorICAgICQkU09VUkNFX0RJUi90b29scyBcCiAgICAgJCRT
T1VSQ0VfRElSL3lhcnIgXAogICAgICQkU09VUkNFX0RJUi9BUEkgXAogICAgICQkU09VUkNFX0RJ
Ui9Gb3J3YXJkaW5nSGVhZGVycyBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0
LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkocmV2
aXNpb24gMTA2MTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHdvcmtp
bmcgY29weSkKQEAgLTIwOSw2ICsyMDksOCBAQCBTT1VSQ0VTICs9IFwKICAgICBydW50aW1lL1N0
cnVjdHVyZS5jcHAgXAogICAgIHJ1bnRpbWUvVGltZW91dENoZWNrZXIuY3BwIFwKICAgICBydW50
aW1lL1VTdHJpbmcuY3BwIFwKKyAgICB0b29scy9Db2RlUHJvZmlsZS5jcHAgXAorICAgIHRvb2xz
L0NvZGVQcm9maWxpbmcuY3BwIFwKICAgICB5YXJyL1lhcnJKSVQuY3BwIFwKIAogKnNoNCogewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2oJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ3LDYgKzE0NDcsMzQgQEAKIAkJCTwvRmlsZT4KIAkJPC9G
aWx0ZXI+CiAJCTxGaWx0ZXIKKwkJCU5hbWU9InRvb2xzIgorCQkJPgorCQkJPEZpbGUKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXC4uXHRvb2xzXENvZGVQcm9maWxlLmNwcCIKKwkJCQk+CisJCQk8L0Zp
bGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cdG9vbHNcQ29kZVByb2ZpbGUu
aCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
dG9vbHNcQ29kZVByb2ZpbGluZy5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHRvb2xzXENvZGVQcm9maWxpbmcuaCIKKwkJCQk+CisJCQk8
L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cdG9vbHNcUHJvZmlsZVRy
ZWVOb2RlLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXHRvb2xzXFRpZXJlZE1NYXBBcnJheS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJPC9G
aWx0ZXI+CisJCTxGaWx0ZXIKIAkJCU5hbWU9ImJ5dGVjb2RlIgogCQkJPgogCQkJPEZpbGUKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmVDb21tb24udnNwcm9wcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlQ29tbW9uLnZzcHJvcHMJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmVDb21tb24udnNwcm9wcwkod29ya2luZyBjb3B5KQpAQCAtNiw3ICs2LDcgQEAKIAk+CiAJ
PFRvb2wKIAkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJQWRkaXRpb25hbEluY2x1ZGVEaXJl
Y3Rvcmllcz0iJnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9ialxKYXZhU2NyaXB0Q29y
ZVxEZXJpdmVkU291cmNlc1wmcXVvdDs7Li4vLi4vOy4uLy4uL0FQSS87Li4vLi4vcGFyc2VyLzsu
Li8uLi9ieXRlY29tcGlsZXIvOy4uLy4uL2RmZy87Li4vLi4vaml0LzsuLi8uLi9ydW50aW1lLzsu
Li8uLi9ieXRlY29kZS87Li4vLi4vaW50ZXJwcmV0ZXIvOy4uLy4uL3d0Zi87Li4vLi4vcHJvZmls
ZXI7Li4vLi4vYXNzZW1ibGVyLzsuLi8uLi9kZWJ1Z2dlci87Li4vLi4vaGVhcC87JnF1b3Q7JChX
ZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNE
aXIpXGluY2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilc
aW5jbHVkZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcaW5jbHVkZVxKYXZh
U2NyaXB0Q29yZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcaW5jbHVkZVxw
cml2YXRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHB0aHJlYWRz
JnF1b3Q7IgorCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSImcXVvdDskKENvbmZpZ3Vy
YXRpb25CdWlsZERpcilcb2JqXEphdmFTY3JpcHRDb3JlXERlcml2ZWRTb3VyY2VzXCZxdW90Ozsu
Li8uLi87Li4vLi4vQVBJLzsuLi8uLi9wYXJzZXIvOy4uLy4uL2J5dGVjb21waWxlci87Li4vLi4v
ZGZnLzsuLi8uLi9qaXQvOy4uLy4uL3J1bnRpbWUvOy4uLy4uL3Rvb2xzLzsuLi8uLi9ieXRlY29k
ZS87Li4vLi4vaW50ZXJwcmV0ZXIvOy4uLy4uL3d0Zi87Li4vLi4vcHJvZmlsZXI7Li4vLi4vYXNz
ZW1ibGVyLzsuLi8uLi9kZWJ1Z2dlci87Li4vLi4vaGVhcC87JnF1b3Q7JChXZWJLaXRMaWJyYXJp
ZXNEaXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVc
cHJpdmF0ZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcaW5jbHVkZSZxdW90
OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcaW5jbHVkZVxKYXZhU2NyaXB0Q29yZSZx
dW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcaW5jbHVkZVxwcml2YXRlJnF1b3Q7
OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHB0aHJlYWRzJnF1b3Q7IgogCQlQ
cmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX19TVERfQyIKIAkJRm9yY2VkSW5jbHVkZUZpbGVzPSJJ
Q1VWZXJzaW9uLmgiCiAJLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzgyLDYgKzM4Miw4IEBA
CiAJCTg2QUU2NEFBMTM1RTVFMUMwMDk2MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QUU2NEE3MTM1RTVFMUMwMDk2
MzAxMiAvKiBTSDRBc3NlbWJsZXIuaCAqLzsgfTsKIAkJODZBRTZDNEQxMzZBMTFFNDAwOTYzMDEy
IC8qIERGR0ZQUkluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2QUU2QzRCMTM2QTExRTQwMDk2MzAxMiAvKiBERkdGUFJJbmZvLmggKi87IH07CiAJ
CTg2QUU2QzRFMTM2QTExRTQwMDk2MzAxMiAvKiBERkdHUFJJbmZvLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkFFNkM0QzEzNkExMUU0MDA5NjMwMTIg
LyogREZHR1BSSW5mby5oICovOyB9OworCQk4NkI1ODI2NzE0RDI3OTZDMDBBOUMzMDYgLyogQ29k
ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODZCNTgyMkUxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAqLzsgfTsKKwkJ
ODZCNTgyNjkxNEQyNzk3MDAwQTlDMzA2IC8qIENvZGVQcm9maWxpbmcuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYwM0NFRjIxNEM3NTQ2NDAwQUU1
OUUzIC8qIENvZGVQcm9maWxpbmcuY3BwICovOyB9OwogCQk4NkI5OUFFMzExN0U1NzgxMDBERjVB
OTAgLyogU3RyaW5nQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NkI5OUFFMTExN0U1NzgxMDBERjVBOTAgLyogU3RyaW5nQnVmZmVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODZCQjA5QzAx
MzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZCQjA5QkUxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1Jl
cGF0Y2guY3BwICovOyB9OwogCQk4NkJCMDlDMTEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRj
aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZCQjA5
QkYxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guaCAqLzsgfTsKQEAgLTEwNDIsNyArMTA0
NCw3IEBACiAJCTFBMDgyNzc4MTQyMTY4RDcwMDkwQ0NBQyAvKiBCaW5hcnlTZW1hcGhvcmUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmluYXJ5U2VtYXBob3JlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTlFNTUwMTQ5ODA5MzUwMDAwMUE4QSAvKiBGdW5j
dGlvbmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uYWwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM5MDUxNDIwQkE5RThBNzAwODFFOUQwIC8q
IFZlcnNpb24ueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gVmVyc2lv
bi54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUM5MDUxNDMwQkE5RThB
NzAwODFFOUQwIC8qIEphdmFTY3JpcHRDb3JlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2Nv
bmZpZzsgbmFtZSA9IEphdmFTY3JpcHRDb3JlLnhjY29uZmlnOyBwYXRoID0gLi4vQ29uZmlndXJh
dGlvbnMvSmF2YVNjcmlwdENvcmUueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTFDOTA1MTQzMEJBOUU4QTcwMDgxRTlEMCAvKiBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBKYXZhU2NyaXB0Q29yZS54Y2NvbmZpZzsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM5MDUxNDQwQkE5RThBNzAwODFFOUQwIC8q
IERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBE
ZWJ1Z1JlbGVhc2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDOTA1
MTQ1MEJBOUU4QTcwMDgxRTlEMCAvKiBCYXNlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2Nv
bmZpZzsgcGF0aCA9IEJhc2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFDQUE4QjRBMEQzMkMzOUEwMDQxQkNGRiAvKiBKYXZhU2NyaXB0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEphdmFTY3JpcHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTExMzgsNiArMTE0MCw4IEBACiAJCTg2MDE2MUUwMEYzQTgzQzEwMEY4NDcxMCAvKiBN
YWNyb0Fzc2VtYmxlclg4Ni5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNy
b0Fzc2VtYmxlclg4Ni5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjAxNjFFMTBG
M0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODYwMTYxRTIwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2MDNDRUYyMTRD
NzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENvZGVQcm9maWxpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk4NjAzQ0VGMzE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGluZy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlUHJvZmlsaW5nLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTg2MDRGNEYyMTQzQTZDNDQwMEIyOTVGNSAvKiBDaGFuZ2VMb2cg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gQ2hhbmdlTG9nOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjA0RjUwMzE0
M0NFMUMxMDBCMjk1RjUgLyogSlNHbG9iYWxUaGlzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTR2xvYmFsVGhpcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
NjI2QkVDRTExOTI4RTM5MDA3ODJGQUIgLyogU3RyaW5nU3RhdGljcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTdHJpbmdTdGF0aWNzLmNwcDsgcGF0aCA9IHRleHQv
U3RyaW5nU3RhdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTg1LDYg
KzExODksMTAgQEAKIAkJODZBRTY0QTcxMzVFNUUxQzAwOTYzMDEyIC8qIFNINEFzc2VtYmxlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTSDRBc3NlbWJsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZBRTZDNEIxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0ZQ
UkluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRlBSSW5mby5oOyBw
YXRoID0gZGZnL0RGR0ZQUkluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZB
RTZDNEMxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0dQUkluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHR1BSSW5mby5oOyBwYXRoID0gZGZnL0RGR0dQUkluZm8uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZCNTgyMkMxNEQyMkY1RjAwQTlDMzA2IC8qIFBy
b2ZpbGVUcmVlTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9maWxl
VHJlZU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZCNTgyMkUxNEQyMzcz
QjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENvZGVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
ODZCNTgyMkYxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTg2QjU4MjZBMTREMzVENTEwMEE5QzMwNiAvKiBUaWVyZWRNTWFwQXJyYXkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGllcmVkTU1hcEFycmF5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2Qjk5QUUxMTE3RTU3ODEwMERGNUE5MCAvKiBTdHJpbmdC
dWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3RyaW5nQnVmZmVyLmg7
IHBhdGggPSB0ZXh0L1N0cmluZ0J1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NkJCMDlCRTEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdSZXBhdGNoLmNwcDsgcGF0aCA9IGRmZy9ERkdS
ZXBhdGNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZCQjA5QkYxMzhFMzgx
QjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHUmVwYXRjaC5oOyBwYXRoID0gZGZnL0RGR1JlcGF0Y2guaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE2ODAsNiArMTY4OCw3IEBACiAJCQkJOTVBQjgzMUEwREE0MkM2OTAw
QkM4M0YzIC8qIHByb2ZpbGVyICovLAogCQkJCTdFRjZFMEJCMEVCN0ExRUMwMDc5QUZBRiAvKiBy
dW50aW1lICovLAogCQkJCTE0MTIxMTAwMEE0ODc3MjYwMDQ4MDI1NSAvKiB0ZXN0cyAqLywKKwkJ
CQk4NjAzQ0VGMDE0Qzc1M0VGMDBBRTU5RTMgLyogdG9vbHMgKi8sCiAJCQkJNjUxNjJFRjEwOEU2
QTIxQzAwNzU1NkNEIC8qIHd0ZiAqLywKIAkJCQk4NkVBQzQ4QzBGOTNFOEI5MDA4RUM5NDggLyog
eWFyciAqLywKIAkJCQkxQzkwNTEzRTBCQTlFODgzMDA4MUU5RDAgLyogQ29uZmlndXJhdGlvbnMg
Ki8sCkBAIC0xODI2LDcgKzE4MzUsNiBAQAogCQkJCTg2NUY0MDg3MTBFN0Q1NjMwMDk0NzM2MSAv
KiBBUElTaGltcy5oICovLAogCQkJCTFDQUE4QjRBMEQzMkMzOUEwMDQxQkNGRiAvKiBKYXZhU2Ny
aXB0LmggKi8sCiAJCQkJMUNBQThCNEIwRDMyQzM5QTAwNDFCQ0ZGIC8qIEphdmFTY3JpcHRDb3Jl
LmggKi8sCi0JCQkJMUM5MDUxNDMwQkE5RThBNzAwODFFOUQwIC8qIEphdmFTY3JpcHRDb3JlLnhj
Y29uZmlnICovLAogCQkJCUJDMDg5NEQ1MEZBRkJBMkQwMDAwMTg2NSAvKiBKU0FQSVZhbHVlV3Jh
cHBlci5jcHAgKi8sCiAJCQkJQkMwODk0RDYwRkFGQkEyRDAwMDAxODY1IC8qIEpTQVBJVmFsdWVX
cmFwcGVyLmggKi8sCiAJCQkJMTQyMTM1OUEwQTY3N0Y0RjAwQTgxOTVFIC8qIEpTQmFzZS5jcHAg
Ki8sCkBAIC0xOTE2LDYgKzE5MjQsNyBAQAogCQkJCTFDOTA1MTQ0MEJBOUU4QTcwMDgxRTlEMCAv
KiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8sCiAJCQkJNDQ5MDk3RUUwRjhGODFCNTAwNzZBMzI3
IC8qIEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnICovLAogCQkJCTVEQUZENkNCMTQ2QjY4NjMwMEZC
RUZCNCAvKiBKU0MueGNjb25maWcgKi8sCisJCQkJMUM5MDUxNDMwQkE5RThBNzAwODFFOUQwIC8q
IEphdmFTY3JpcHRDb3JlLnhjY29uZmlnICovLAogCQkJCUJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2
NyAvKiBUZXN0QVBJLnhjY29uZmlnICovLAogCQkJCTVEQUZENkNDMTQ2QjY4QjkwMEZCRUZCNCAv
KiBUZXN0UmVnRXhwLnhjY29uZmlnICovLAogCQkJCTFDOTA1MTQyMEJBOUU4QTcwMDgxRTlEMCAv
KiBWZXJzaW9uLnhjY29uZmlnICovLApAQCAtMjM2NSw2ICsyMzc0LDE5IEBACiAJCQlwYXRoID0g
cnVudGltZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTg2MDNDRUYwMTRD
NzUzRUYwMEFFNTlFMyAvKiB0b29scyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hp
bGRyZW4gPSAoCisJCQkJODZCNTgyMkUxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNw
cCAqLywKKwkJCQk4NkI1ODIyRjE0RDIzNzNCMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuaCAqLywK
KwkJCQk4NjAzQ0VGMjE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGluZy5jcHAgKi8sCisJ
CQkJODYwM0NFRjMxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcuaCAqLywKKwkJCQk4
NkI1ODIyQzE0RDIyRjVGMDBBOUMzMDYgLyogUHJvZmlsZVRyZWVOb2RlLmggKi8sCisJCQkJODZC
NTgyNkExNEQzNUQ1MTAwQTlDMzA2IC8qIFRpZXJlZE1NYXBBcnJheS5oICovLAorCQkJKTsKKwkJ
CXBhdGggPSB0b29sczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTg2NTY1
NzNFMTE1QkUzNTIwMDI5MUY0MCAvKiB0ZXh0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKQEAgLTM2NDAsNiArMzY2Miw4IEBACiAJCQkJMEY5MzMyQTExNENBN0RE
MTAwODVGM0M2IC8qIE1ldGhvZENhbGxMaW5rU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGOTMzMkEzMTRDQTdERDcwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNTVGMEY0MTREMTA2MzkwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTg2QjU4MjY3MTREMjc5NkMwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk4NkI1ODI2OTE0RDI3OTcwMDBBOUMzMDYgLyogQ29kZVBy
b2ZpbGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1
Niw2ICsxNDU2LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAog
ICAgICwgbV9zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKDApCiAgICAgLCBtX29wdGltaXphdGlvbkRl
bGF5Q291bnRlcigwKQogICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigwKQorICAg
ICwgbV9jYW5Db21waWxlV2l0aERGR1N0YXRlKENvbXBpbGVXaXRoREZHVW5zZXQpCiB7CiAgICAg
c2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0ZXJzKCkpOwogICAgIG9wdGltaXplQWZ0
ZXJXYXJtVXAoKTsKQEAgLTIxNjQsMTcgKzIxNjUsMTcgQEAgSlNPYmplY3QqIEZ1bmN0aW9uQ29k
ZUJsb2NrOjpjb21waWxlT3B0aQogICAgIHJldHVybiBlcnJvcjsKIH0KIAotYm9vbCBQcm9ncmFt
Q29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERGRygpCitib29sIFByb2dyYW1Db2RlQmxvY2s6OmNh
bkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKQogewogICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVQ
cm9ncmFtKHRoaXMpOwogfQogCi1ib29sIEV2YWxDb2RlQmxvY2s6OmNhbkNvbXBpbGVXaXRoREZH
KCkKK2Jvb2wgRXZhbENvZGVCbG9jazo6Y2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpCiB7CiAg
ICAgcmV0dXJuIERGRzo6Y2FuQ29tcGlsZUV2YWwodGhpcyk7CiB9CiAKLWJvb2wgRnVuY3Rpb25D
b2RlQmxvY2s6OmNhbkNvbXBpbGVXaXRoREZHKCkKK2Jvb2wgRnVuY3Rpb25Db2RlQmxvY2s6OmNh
bkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKQogewogICAgIGlmIChtX2lzQ29uc3RydWN0b3IpCiAg
ICAgICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnVjdCh0aGlzKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlz
aW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMzg4LDcgKzM4OCwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29w
ZUNoYWluTm9kZSopID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKCkgPSAwOwog
ICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSA9IDA7Ci0gICAgICAgIHZp
cnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpID0gMDsKKworICAgICAgICBlbnVtIENvbXBp
bGVXaXRoREZHU3RhdGUgeworICAgICAgICAgICAgQ29tcGlsZVdpdGhERkdGYWxzZSwKKyAgICAg
ICAgICAgIENvbXBpbGVXaXRoREZHVHJ1ZSwKKyAgICAgICAgICAgIENvbXBpbGVXaXRoREZHVW5z
ZXQKKyAgICAgICAgfTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkdJ
bnRlcm5hbCgpID0gMDsKKyAgICAgICAgYm9vbCBjYW5Db21waWxlV2l0aERGRygpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gY2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgp
OworICAgICAgICAgICAgbV9jYW5Db21waWxlV2l0aERGR1N0YXRlID0gcmVzdWx0ID8gQ29tcGls
ZVdpdGhERkdUcnVlIDogQ29tcGlsZVdpdGhERkdGYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgQ29tcGlsZVdpdGhERkdTdGF0ZSBjYW5Db21waWxl
V2l0aERGR1N0YXRlKCkgeyByZXR1cm4gbV9jYW5Db21waWxlV2l0aERGR1N0YXRlOyB9CisKICAg
ICAgICAgYm9vbCBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwpAQCAtMTE4
Nyw2ICsxMjAyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCB2b2lkIFdURjo6
ZGVsZXRlT3duZWRQdHI8UmFyZURhdGE+KFJhcmVEYXRhKik7CiAjZW5kaWYKICAgICAgICAgT3du
UHRyPFJhcmVEYXRhPiBtX3JhcmVEYXRhOworICAgICAgICBDb21waWxlV2l0aERGR1N0YXRlIG1f
Y2FuQ29tcGlsZVdpdGhERkdTdGF0ZTsKICAgICB9OwogCiAgICAgLy8gUHJvZ3JhbSBjb2RlIGlz
IG5vdCBtYXJrZWQgYnkgYW55IGZ1bmN0aW9uLCBzbyB3ZSBtYWtlIHRoZSBnbG9iYWwgb2JqZWN0
CkBAIC0xMjI2LDcgKzEyNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBK
U09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxv
Y2sqIHJlcGxhY2VtZW50KCk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERG
RygpOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpOwog
I2VuZGlmCiAgICAgfTsKIApAQCAtMTI2MCw3ICsxMjc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2Nv
cGVDaGFpbk5vZGUqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKCk7CiAgICAgICAg
IHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOwotICAgICAgICB2aXJ0dWFsIGJvb2wg
Y2FuQ29tcGlsZVdpdGhERkcoKTsKKyAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRo
REZHSW50ZXJuYWwoKTsKICNlbmRpZgogCiAgICAgcHJpdmF0ZToKQEAgLTEyOTcsNyArMTMxMyw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0
aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBqZXR0aXNvbigpOwogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsK
LSAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHKCk7CisgICAgICAgIHZpcnR1
YWwgYm9vbCBjYW5Db21waWxlV2l0aERGR0ludGVybmFsKCk7CiAjZW5kaWYKICAgICB9OwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRv
ci5jcHAJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNp
bmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCiAKICNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9B
TExPQ0FUT1JfREVNQU5EKQorI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlIDx3
dGYvTWV0YUFsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlUmVzZXJ2YXRpb24uaD4KICNp
bmNsdWRlIDx3dGYvVk1UYWdzLmg+CkBAIC05Myw2ICs5NCw3IEBAIHZvaWQgRXhlY3V0YWJsZUFs
bG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG8KIHsKICAgICBBU1NFUlQoIWFsbG9jYXRvcik7CiAgICAg
YWxsb2NhdG9yID0gbmV3IERlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3IoKTsKKyAgICBDb2RlUHJv
ZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IoYWxsb2NhdG9yKTsKIH0KIAogRXhlY3V0YWJsZUFsbG9j
YXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcihKU0dsb2JhbERhdGEmKQpAQCAtMTEyLDkgKzExNCw3
IEBAIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6dW5kZXJNZW1vcnlQcmUKIAogUGFzc1JlZlB0
cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZShK
U0dsb2JhbERhdGEmLCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKQogewotICAg
IFVOVVNFRF9QQVJBTShvd25lclVJRCk7Ci0KLSAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhh
bmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcyk7CisgICAgUmVm
UHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUo
c2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgQ1JBU0go
KTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9v
bC5jcHAJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksOCAr
MjksOCBAQAogCiAjaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0ZJWEVEKQogCisjaW5j
bHVkZSAiQ29kZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgPGVycm5vLmg+Ci0KICNpbmNsdWRlIDxz
eXMvbW1hbi5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHd0Zi9NZXRhQWxsb2Nh
dG9yLmg+CkBAIC05Niw2ICs5Niw3IEBAIHZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlh
bGl6ZUFsbG8KIHsKICAgICBBU1NFUlQoIWFsbG9jYXRvcik7CiAgICAgYWxsb2NhdG9yID0gbmV3
IEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpOworICAgIENvZGVQcm9maWxpbmc6Om5v
dGlmeUFsbG9jYXRvcihhbGxvY2F0b3IpOwogfQogCiBFeGVjdXRhYmxlQWxsb2NhdG9yOjpFeGVj
dXRhYmxlQWxsb2NhdG9yKEpTR2xvYmFsRGF0YSYpCkBAIC0xMTYsMTIgKzExNywxMCBAQCBib29s
IEV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVtb3J5UHJlCiAKIFBhc3NSZWZQdHI8RXhlY3V0
YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKQogewot
ICAgIFVOVVNFRF9QQVJBTShvd25lclVJRCk7Ci0KLSAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9y
eUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcyk7CisgICAg
UmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2Nh
dGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsKICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICBy
ZWxlYXNlRXhlY3V0YWJsZU1lbW9yeShnbG9iYWxEYXRhKTsKLSAgICAgICAgcmVzdWx0ID0gYWxs
b2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcyk7CisgICAgICAgIHJlc3VsdCA9IGFsbG9jYXRv
ci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsKICAgICAgICAgaWYgKCFyZXN1bHQp
CiAgICAgICAgICAgICBDUkFTSCgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2lu
Y2x1ZGUgIkFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlICJERkdPU1JF
bnRyeS5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVy
cy5oIgpAQCAtOTY4LDcgKzk2OSw3IEBAIE5FVkVSX0lOTElORSB2b2lkIEpJVFRodW5rczo6dHJ5
Q2FjaGVHZXQKICAgICBKSVQ6OmNvbXBpbGVHZXRCeUlkQ2hhaW4oY2FsbEZyYW1lLT5zY29wZUNo
YWluKCktPmdsb2JhbERhdGEsIGNhbGxGcmFtZSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0
dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHByb3BlcnR5TmFtZSwgc2xvdCwgb2Zmc2V0LCBy
ZXR1cm5BZGRyZXNzKTsKIH0KIAotI2lmICFkZWZpbmVkKE5ERUJVRykgJiYgIUVOQUJMRShDT0RF
X1BST0ZJTElORykKKyNpZiAhZGVmaW5lZChOREVCVUcpCiAKIGV4dGVybiAiQyIgewogCkBAIC05
ODYsNyArOTg3LDggQEAgc3RydWN0IFN0YWNrSGFjayB7CiAgICAgICAgIDogc3RhY2tGcmFtZShz
dGFja0ZyYW1lKQogICAgICAgICAsIHNhdmVkUmV0dXJuQWRkcmVzcygqc3RhY2tGcmFtZS5yZXR1
cm5BZGRyZXNzU2xvdCgpKQogICAgIHsKLSAgICAgICAgKnN0YWNrRnJhbWUucmV0dXJuQWRkcmVz
c1Nsb3QoKSA9IFJldHVybkFkZHJlc3NQdHIoRnVuY3Rpb25QdHIoanNjR2VuZXJhdGVkTmF0aXZl
Q29kZSkpOworICAgICAgICBpZiAoIUNvZGVQcm9maWxpbmc6OmVuYWJsZWQoKSkKKyAgICAgICAg
ICAgICpzdGFja0ZyYW1lLnJldHVybkFkZHJlc3NTbG90KCkgPSBSZXR1cm5BZGRyZXNzUHRyKEZ1
bmN0aW9uUHRyKGpzY0dlbmVyYXRlZE5hdGl2ZUNvZGUpKTsKICAgICB9CiAKICAgICBBTFdBWVNf
SU5MSU5FIH5TdGFja0hhY2soKSAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbXBsZXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQs
NyBAQAogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKIAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgor
I2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgog
I2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCkBAIC01NSw2ICs1
Niw4IEBAIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBTY29wZUMKICAgICBKU0xv
Y2sgbG9jayhleGVjKTsKICAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmlkZW50aWZpZXJU
YWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpKTsKIAorICAg
IENvZGVQcm9maWxpbmcgcHJvZmlsZShzb3VyY2UpOworCiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUq
IHByb2dyYW0gPSBQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMsIHNvdXJjZSk7CiAgICAg
aWYgKCFwcm9ncmFtKSB7CiAgICAgICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb2RlUHJvZmlsZS5o
IgorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgor
I2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJQcm9maWxlVHJlZU5vZGUuaCIKKyNp
bmNsdWRlICJWZWN0b3IuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lm
IFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDxjeHhhYmkuaD4KKyNpbmNsdWRlIDxkbGZjbi5oPgor
I2luY2x1ZGUgPGV4ZWNpbmZvLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIE1h
cCBmcm9tIENvZGVUeXBlIGVudW0gdG8gYSBjb3JyZXNwb25kaW5nIG5hbWUuCitjb25zdCBjaGFy
KiBDb2RlUHJvZmlsZTo6c19jb2RlVHlwZU5hbWVzW0NvZGVQcm9maWxlOjpOdW1iZXJPZkNvZGVU
eXBlc10gPSB7CisgICAgIltbRW5naW5lQ29kZV1dIiwKKyAgICAiW1tHbG9iYWxUaHVua11dIiwK
KyAgICAiW1tSZWdFeHBDb2RlXV0iLAorICAgICJbW0RGR0pJVF1dIiwKKyAgICAiW1tCYXNlbGlu
ZU9ubHldXSIsCisgICAgIltbQmFzZWxpbmVQcm9maWxlXV0iLAorICAgICJbW0Jhc2VsaW5lT1NS
XV0iLAorICAgICJbW0VuZ2luZUZyYW1lXV0iCit9OworCisvLyBIZWxwZXIgZnVuY3Rpb24sIGZp
bmQgdGhlIHN5bWJvbCBuYW1lIGZvciBhIHBjIGluIEpTQy4KK3N0YXRpYyBjb25zdCBjaGFyKiBz
eW1ib2xOYW1lKHZvaWQqIGFkZHJlc3MpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIERsX2lu
Zm8gaW5mbzsKKyAgICBpZiAoIWRsYWRkcihhZGRyZXNzLCAmaW5mbykgfHwgIWluZm8uZGxpX3Nu
YW1lKQorICAgICAgICByZXR1cm4gIjx1bmtub3duPiI7CisKKyAgICBjb25zdCBjaGFyKiBtYW5n
bGVkTmFtZSA9IGluZm8uZGxpX3NuYW1lOworICAgIGNvbnN0IGNoYXIqIGN4YURlbWFuZ2xlZCA9
IGFiaTo6X19jeGFfZGVtYW5nbGUobWFuZ2xlZE5hbWUsIDAsIDAsIDApOworICAgIHJldHVybiBj
eGFEZW1hbmdsZWQgPyBjeGFEZW1hbmdsZWQgOiBtYW5nbGVkTmFtZTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGFkZHJlc3MpOworICAgIHJldHVybiAiPHVua25vd24+IjsKKyNlbmRpZgorfQor
CisvLyBIZWxwZXIgZnVuY3Rpb24sIHRydW5jYXRlIHRyYWNlcyB0byBwcnVuZSB0aGUgb3V0cHV0
ICYgbWFrZSB2ZXJ5IHZlcmJvc2UgbW9kZSBhIGxpdHRsZSBtb3JlIHJlYWRhYmxlLgorc3RhdGlj
IGJvb2wgdHJ1bmNhdGVUcmFjZShjb25zdCBjaGFyKiBzeW1ib2xOYW1lKQoreworICAgIHJldHVy
biAhc3RyY21wKHN5bWJvbE5hbWUsICJKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgp
IikKKyAgICAgICAgfHwgIXN0cmNtcChzeW1ib2xOYW1lLCAiSlNDOjpQYXJzZXI8SlNDOjpMZXhl
cjx1bnNpZ25lZCBjaGFyPiA+OjpwYXJzZUlubmVyKCkiKQorICAgICAgICB8fCAhc3RyY21wKHN5
bWJvbE5hbWUsICJXVEY6OmZhc3RNYWxsb2ModW5zaWduZWQgbG9uZykiKQorICAgICAgICB8fCAh
c3RyY21wKHN5bWJvbE5hbWUsICJXVEY6OmNhbGN1bGF0ZVVUQ09mZnNldCgpIikKKyAgICAgICAg
fHwgIXN0cmNtcChzeW1ib2xOYW1lLCAiSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNv
ZGVCbG9jaygpIik7CisgICAgICAgIAorfQorCisvLyBFYWNoIHRyYWNlIGNvbnNpc3RzIG9mIGEg
c2VxdWVuY2Ugb2YgemVybyBvciBtb3JlICdFbmdpbmVGcmFtZScgZW50cmllcywKKy8vIGZvbGxv
d2VkIGJ5IGEgc2FtcGxlIGluIEpJVCBjb2RlLCBvciBvbmUgb3IgbW9yZSAnRW5naW5lRnJhbWUn
IGVudHJpZXMsCisvLyBmb2xsb3dlZCBieSBhICdFbmdpbmVDb2RlJyB0ZXJtaW5hdG9yLgordm9p
ZCBDb2RlUHJvZmlsZTo6c2FtcGxlKHZvaWQqIHBjLCB2b2lkKiogZnJhbWVQb2ludGVyKQorewor
ICAgIC8vIERpc2FsbG93IHRyYWNlcyBjb250YWluaW5nIG9ubHkgYSAnRW5naW5lQ29kZScgdGVy
bWluYXRvciwgd2l0aG91dCBhbnkgJ0VuZ2luZUZyYW1lJyBmcmFtZXMuCisgICAgaWYgKCFmcmFt
ZVBvaW50ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIHdoaWxlIChmcmFtZVBvaW50ZXIpIHsK
KyAgICAgICAgQ29kZVR5cGUgdHlwZTsKKyAgICAgICAgdm9pZCogb3duZXJVSUQgPSBDb2RlUHJv
ZmlsaW5nOjpnZXRPd25lclVJREZvclBDKHBjKTsKKworICAgICAgICAvLyBEZXRlcm1pbmUgaWYg
dGhpcyBzYW1wbGUgZmVsbCBpbiBKSVQgY29kZSwgYW5kIGlmIHNvLCBmcm9tIHdoaWNoIEpJVCAm
IHdoeS4KKyAgICAgICAgaWYgKCFvd25lclVJRCkKKyAgICAgICAgICAgIHR5cGUgPSBFbmdpbmVG
cmFtZTsKKyAgICAgICAgZWxzZSBpZiAob3duZXJVSUQgPT0gR0xPQkFMX1RIVU5LX0lEKQorICAg
ICAgICAgICAgdHlwZSA9IEdsb2JhbFRodW5rOworICAgICAgICBlbHNlIGlmIChvd25lclVJRCA9
PSBSRUdFWFBfQ09ERV9JRCkKKyAgICAgICAgICAgIHR5cGUgPSBSZWdFeHBDb2RlOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8
Q29kZUJsb2NrKj4ob3duZXJVSUQpOworICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+Z2V0SklU
VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkKKyAgICAgICAgICAgICAgICB0eXBlID0gREZHSklU
OworICAgICAgICAgICAgZWxzZSBpZiAoY29kZUJsb2NrLT5jYW5Db21waWxlV2l0aERGR1N0YXRl
KCkgPT0gQ29kZUJsb2NrOjpDb21waWxlV2l0aERGR0ZhbHNlKQorICAgICAgICAgICAgICAgIHR5
cGUgPSBCYXNlbGluZU9ubHk7CisgICAgICAgICAgICBlbHNlIGlmIChjb2RlQmxvY2stPnJlcGxh
Y2VtZW50KCkpCisgICAgICAgICAgICAgICAgdHlwZSA9IEJhc2VsaW5lT1NSOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHR5cGUgPSBCYXNlbGluZVByb2ZpbGU7CisgICAgICAg
IH0KKworICAgICAgICAvLyBBIHNhbXBsZSBpbiBKSVQgY29kZSB0ZXJtaW5hdGVzIHRoZSB0cmFj
ZS4KKyAgICAgICAgbV9zYW1wbGVzLmFwcGVuZChDb2RlUmVjb3JkKHBjLCB0eXBlKSk7CisgICAg
ICAgIGlmICh0eXBlICE9IEVuZ2luZUZyYW1lKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIC8vIFdhbGsgdXAgdGhlIHN0YWNrLgorI2lmIFBMQVRGT1JNKE1BQykgJiYgQ1BVKFg4Nl82
NCkKKyAgICAgICAgcGMgPSBmcmFtZVBvaW50ZXJbMV07CisgICAgICAgIGZyYW1lUG9pbnRlciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigqZnJhbWVQb2ludGVyKTsKKyNlbHNlCisgICAgICAg
IC8vIFRoaXMgcGxhdGZvcm0gaXMgbm90IHlldCBzdXBwb3J0ZWQhCisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgfQorCisgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHdl
IHdhbGtlZCB0aGUgZW50aXJlIHN0YWNrIHdpdGhvdXQgZmluZGluZyBhbnkgZnJhbWVzIG9mIEpJ
VCBjb2RlLgorICAgIG1fc2FtcGxlcy5hcHBlbmQoQ29kZVJlY29yZCgwLCBFbmdpbmVDb2RlKSk7
Cit9CisKK3ZvaWQgQ29kZVByb2ZpbGU6OnJlcG9ydCgpCit7CisgICAgZnByaW50ZihzdGRvdXQs
ICI8Q29kZVByb2ZpbGluZyAlczolZD5cbiIsIG1fZmlsZS5kYXRhKCksIG1fbGluZU5vKTsKKwor
ICAgIC8vIEhvdyBtYW55IGZyYW1lcyBvZiBDLWNvZGUgdG8gcHJpbnQgLSAwLCBpZiBub3QgdmVy
Ym9zZSwgMSBpZiB2ZXJib3NlLCB1cCB0byAxMDI0IGlmIHZlcnkgdmVyYm9zZS4KKyAgICB1bnNp
Z25lZCByZWN1cnNpb25MaW1pdCA9IENvZGVQcm9maWxpbmc6OmJlVmVyeVZlcmJvc2UoKSA/IDEw
MjQgOiBDb2RlUHJvZmlsaW5nOjpiZVZlcmJvc2UoKTsKKworICAgIFByb2ZpbGVUcmVlTm9kZSBw
cm9maWxlOworCisgICAgLy8gV2FsayB0aHJvdWdoIHRoZSBzYW1wbGUgYnVmZmVyLgorICAgIHNp
emVfdCB0cmFjZSA9IDA7CisgICAgd2hpbGUgKHRyYWNlIDwgbV9zYW1wbGVzLnNpemUoKSkgewor
CisgICAgICAgIC8vIEFsbCB0cmFjZXMgYXJlIHplcm8gb3IgbW9yZSAnRW5naW5lRnJhbWUncywg
Zm9sbG93ZWQgYnkgYSBub24tJ0VuZ2luZUZyYW1lJy4KKyAgICAgICAgLy8gU2NhbiB0byBmaW5k
IHRoZSBsYXN0IHNhbXBsZSBpbiB0aGUgdHJhY2UuCisgICAgICAgIHNpemVfdCBsYXN0SW5UcmFj
ZSA9IHRyYWNlOworICAgICAgICB3aGlsZSAobV9zYW1wbGVzW2xhc3RJblRyYWNlXS50eXBlID09
IEVuZ2luZUZyYW1lKQorICAgICAgICAgICAgKytsYXN0SW5UcmFjZTsKKworICAgICAgICAvLyBX
ZSB1c2UgdGhlIGxhc3Qgc2FtcGxlIHR5cGUgdG8gbG9vayB1cCBhIG5hbWUgKHVzZWQgYXMgYSBi
dWNrZXQgaW4gdGhlIHByb2ZpbGVyKS4KKyAgICAgICAgUHJvZmlsZVRyZWVOb2RlKiBjYWxsYmFj
a3MgPSBwcm9maWxlLnNhbXBsZUNoaWxkKHNfY29kZVR5cGVOYW1lc1ttX3NhbXBsZXNbbGFzdElu
VHJhY2VdLnR5cGVdKTsKKworICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IHNhbXBsZXMgaW4g
Qy1jb2RlLCBhZGQgdXAgdG8gcmVjdXJzaW9uTGltaXQgb2YgdGhlbSBpbnRvIHRoZSBwcm9maWxl
IHRyZWUuCisgICAgICAgIHNpemVfdCBsYXN0RW5naW5lRnJhbWUgPSBsYXN0SW5UcmFjZTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBjb3VudCA9IDA7IGxhc3RFbmdpbmVGcmFtZSA+IHRyYWNlICYm
IGNvdW50IDwgcmVjdXJzaW9uTGltaXQ7ICsrY291bnQpIHsKKyAgICAgICAgICAgIC0tbGFzdEVu
Z2luZUZyYW1lOworICAgICAgICAgICAgQVNTRVJUKG1fc2FtcGxlc1tsYXN0RW5naW5lRnJhbWVd
LnR5cGUgPT0gRW5naW5lRnJhbWUpOworICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IHN5
bWJvbE5hbWUobV9zYW1wbGVzW2xhc3RFbmdpbmVGcmFtZV0ucGMpOworICAgICAgICAgICAgY2Fs
bGJhY2tzID0gY2FsbGJhY2tzLT5zYW1wbGVDaGlsZChuYW1lKTsKKyAgICAgICAgICAgIGlmICh0
cnVuY2F0ZVRyYWNlKG5hbWUpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgLy8gTW92ZSBvbiB0byB0aGUgbmV4dCB0cmFjZS4KKyAgICAgICAgdHJhY2UgPSBs
YXN0SW5UcmFjZSArIDE7CisgICAgICAgIEFTU0VSVCh0cmFjZSA8PSBtX3NhbXBsZXMuc2l6ZSgp
KTsKKyAgICB9CisKKyAgICAvLyBPdXRwdXQgdGhlIHByb2ZpbGUgdHJlZS4KKyAgICBmcHJpbnRm
KHN0ZG91dCwgIlRvdGFsIHNhbXBsZXM6ICVsbGRcbiIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4o
cHJvZmlsZS5jaGlsZENvdW50KCkpKTsKKyAgICBwcm9maWxlLmR1bXAoKTsKKyAgICAKKyAgICBm
b3IgKHNpemVfdCBpID0gMCA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICBt
X2NoaWxkcmVuW2ldLT5yZXBvcnQoKTsKKworICAgIGZwcmludGYoc3Rkb3V0LCAiPC9Db2RlUHJv
ZmlsaW5nICVzOiVkPlxuIiwgbV9maWxlLmRhdGEoKSwgbV9saW5lTm8pOworfQorCit9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQ29kZVByb2ZpbGVfaAorI2RlZmluZSBDb2RlUHJvZmlsZV9oCisK
KyNpbmNsdWRlICJTb3VyY2VDb2RlLmgiCisjaW5jbHVkZSAiVGllcmVkTU1hcEFycmF5LmgiCisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3Mg
Q29kZVByb2ZpbGUgeworcHVibGljOgorICAgIENvZGVQcm9maWxlKGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgQ29kZVByb2ZpbGUqIHBhcmVudCkKKyAgICAgICAgOiBtX2ZpbGUoc291cmNlLnBy
b3ZpZGVyKCktPnVybCgpLnV0ZjgoKSkKKyAgICAgICAgLCBtX2xpbmVObyhzb3VyY2UuZmlyc3RM
aW5lKCkpCisgICAgICAgICwgbV9wYXJlbnQocGFyZW50KQorICAgIHsKKyAgICAgICAgaWYgKHBh
cmVudCkKKyAgICAgICAgICAgIHBhcmVudC0+YWRkQ2hpbGQodGhpcyk7CisgICAgfQorCisgICAg
dm9pZCBzYW1wbGUodm9pZCogcGMsIHZvaWQqKiBmcmFtZVBvaW50ZXIpOworICAgIHZvaWQgcmVw
b3J0KCk7CisKKyAgICBDb2RlUHJvZmlsZSogcGFyZW50KCkKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3BhcmVudDsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRDaGlsZChDb2RlUHJvZmlsZSog
Y2hpbGQpCisgICAgeworICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChhZG9wdFB0cihjaGlsZCkp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBlbnVtIENvZGVUeXBlIHsKKyAgICAgICAgRW5naW5l
Q29kZSwKKyAgICAgICAgR2xvYmFsVGh1bmssCisgICAgICAgIFJlZ0V4cENvZGUsCisgICAgICAg
IERGR0pJVCwKKyAgICAgICAgQmFzZWxpbmVPbmx5LAorICAgICAgICBCYXNlbGluZVByb2ZpbGUs
CisgICAgICAgIEJhc2VsaW5lT1NSLAorICAgICAgICBFbmdpbmVGcmFtZSwKKyAgICAgICAgTnVt
YmVyT2ZDb2RlVHlwZXMKKyAgICB9OworICAgIHN0cnVjdCBDb2RlUmVjb3JkIHsKKyAgICAgICAg
Q29kZVJlY29yZCh2b2lkKiBwYywgQ29kZVR5cGUgdHlwZSkKKyAgICAgICAgICAgIDogcGMocGMp
CisgICAgICAgICAgICAsIHR5cGUodHlwZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAg
IHZvaWQqIHBjOworICAgICAgICBDb2RlVHlwZSB0eXBlOworICAgIH07CisKKyAgICBDU3RyaW5n
IG1fZmlsZTsKKyAgICB1bnNpZ25lZCBtX2xpbmVObzsKKyAgICBDb2RlUHJvZmlsZSogbV9wYXJl
bnQ7CisgICAgVmVjdG9yPCBPd25QdHI8Q29kZVByb2ZpbGU+ID4gbV9jaGlsZHJlbjsKKyAgICBU
aWVyZWRNTWFwQXJyYXk8Q29kZVJlY29yZD4gbV9zYW1wbGVzOworCisgICAgc3RhdGljIGNvbnN0
IGNoYXIqIHNfY29kZVR5cGVOYW1lc1tOdW1iZXJPZkNvZGVUeXBlc107Cit9OworCit9CisKKyNl
bmRpZiAvLyBDb2RlUHJvZmlsZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9Db2RlUHJvZmlsaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvQ29kZVByb2ZpbGluZy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCisKKyNpbmNsdWRlICJD
b2RlUHJvZmlsZS5oIgorI2luY2x1ZGUgIk1ldGFBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJzaWdu
YWwuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvbGF0aWxlIENvZGVQcm9maWxlKiBDb2RlUHJv
ZmlsaW5nOjpzX3Byb2ZpbGVTdGFjayA9IDA7CitDb2RlUHJvZmlsaW5nOjpNb2RlIENvZGVQcm9m
aWxpbmc6OnNfbW9kZSA9IENvZGVQcm9maWxpbmc6OkRpc2FibGVkOworV1RGOjpNZXRhQWxsb2Nh
dG9yVHJhY2tlciogQ29kZVByb2ZpbGluZzo6c190cmFja2VyID0gMDsKKworLy8gSGVscGVyIGZ1
bmN0aW9uIHRvIHN0YXJ0ICYgc3RvcCB0aGUgdGltZXIuCisvLyBQcmVzZW50bHkgd2UncmUgdXNp
bmcgdGhlIHdhbGwtY2xvY2sgdGltZXIsIHNpbmNlIHRoaXMgc2VlbXMgdG8gZ2l2ZSB0aGUgYmVz
dCByZXN1bHRzLgorc3RhdGljIHZvaWQgc2V0UHJvZmlsZVRpbWVyKHVuc2lnbmVkIHVzZWMpCit7
CisjaWYgUExBVEZPUk0oTUFDKSAmJiBDUFUoWDg2XzY0KQorICAgIGl0aW1lcnZhbCB0aW1lcjsK
KyAgICB0aW1lci5pdF92YWx1ZS50dl9zZWMgPSAwOworICAgIHRpbWVyLml0X3ZhbHVlLnR2X3Vz
ZWMgPSB1c2VjOworICAgIHRpbWVyLml0X2ludGVydmFsLnR2X3NlYyA9IDA7CisgICAgdGltZXIu
aXRfaW50ZXJ2YWwudHZfdXNlYyA9IHVzZWM7CisgICAgc2V0aXRpbWVyKElUSU1FUl9SRUFMLCAm
dGltZXIsIDApOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odXNlYyk7CisgICAgLy8gVGhpcyBw
bGF0Zm9ybSBpcyBub3QgeWV0IHN1cHBvcnRlZCEKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyNlbmRpZgorfQorCisjaWYgUExBVEZPUk0oTUFDKSAmJiBDUFUoWDg2XzY0KQorc3RhdGljIHZv
aWQgcHJvZmlsaW5nVGltZXIoaW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1YXApCit7CisgICAgbWNv
bnRleHRfdCBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250
ZXh0OworICAgIENvZGVQcm9maWxpbmc6OnNhbXBsZShyZWludGVycHJldF9jYXN0PHZvaWQqPihj
b250ZXh0LT5fX3NzLl9fcmlwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKio+KGNvbnRleHQtPl9fc3MuX19yYnApKTsKK30KKyNlbmRpZgorCisvLyBD
YWxsYmFjayB0cmlnZ2VyZWQgd2hlbiB0aGUgdGltZXIgaXMgZmlyZWQuCit2b2lkIENvZGVQcm9m
aWxpbmc6OnNhbXBsZSh2b2lkKiBwYywgdm9pZCoqIGZyYW1lUG9pbnRlcikKK3sKKyAgICBDb2Rl
UHJvZmlsZSogcHJvZmlsZVN0YWNrID0gY29uc3RfY2FzdDxDb2RlUHJvZmlsZSo+KHNfcHJvZmls
ZVN0YWNrKTsKKyAgICBpZiAocHJvZmlsZVN0YWNrKQorICAgICAgICBwcm9maWxlU3RhY2stPnNh
bXBsZShwYywgZnJhbWVQb2ludGVyKTsKK30KKwordm9pZCBDb2RlUHJvZmlsaW5nOjpub3RpZnlB
bGxvY2F0b3IoV1RGOjpNZXRhQWxsb2NhdG9yKiBhbGxvY2F0b3IpCit7CisgICAgLy8gQ2hlY2sg
Zm9yIEpTQ19DT0RFX1BST0ZJTElORy4KKyAgICBjb25zdCBjaGFyKiBjb2RlUHJvZmlsaW5nTW9k
ZSA9IGdldGVudigiSlNDX0NPREVfUFJPRklMSU5HIik7CisgICAgaWYgKCFjb2RlUHJvZmlsaW5n
TW9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQ2hlY2sgZm9yIGEgdmFsaWQgbW9kZSwg
Y3VycmVudGx5ICIxIiwgIjIiLCBvciAiMyIuCisgICAgaWYgKCFjb2RlUHJvZmlsaW5nTW9kZVsw
XSB8fCBjb2RlUHJvZmlsaW5nTW9kZVsxXSkKKyAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAo
KmNvZGVQcm9maWxpbmdNb2RlKSB7CisgICAgY2FzZSAnMSc6CisgICAgICAgIHNfbW9kZSA9IEVu
YWJsZWQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJzInOgorICAgICAgICBzX21vZGUgPSBW
ZXJib3NlOworICAgICAgICBicmVhazsKKyAgICBjYXNlICczJzoKKyAgICAgICAgc19tb2RlID0g
VmVyeVZlcmJvc2U7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBBU1NFUlQoZW5hYmxlZCgpKTsKKyAgICBBU1NFUlQoIXNfdHJhY2tl
cik7CisgICAgc190cmFja2VyID0gbmV3IFdURjo6TWV0YUFsbG9jYXRvclRyYWNrZXIoKTsKKyAg
ICBhbGxvY2F0b3ItPnRyYWNrQWxsb2NhdGlvbnMoc190cmFja2VyKTsKK30KKwordm9pZCogQ29k
ZVByb2ZpbGluZzo6Z2V0T3duZXJVSURGb3JQQyh2b2lkKiBhZGRyZXNzKQoreworICAgIGlmICgh
c190cmFja2VyKQorICAgICAgICByZXR1cm4gMDsKKyAgICBXVEY6Ok1ldGFBbGxvY2F0b3JIYW5k
bGUqIGhhbmRsZSA9IHNfdHJhY2tlci0+ZmluZChhZGRyZXNzKTsKKyAgICBpZiAoIWhhbmRsZSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGhhbmRsZS0+b3duZXJVSUQoKTsKK30KKwor
dm9pZCBDb2RlUHJvZmlsaW5nOjpiZWdpbihjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCit7Cisg
ICAgLy8gUHVzaCBhIG5ldyBDb2RlUHJvZmlsZSBvbnRvIHRoZSBzdGFjayBmb3IgZWFjaCBzY3Jp
cHQgZW5jb3VudGVyZWQuCisgICAgQ29kZVByb2ZpbGUqIHByb2ZpbGVTdGFjayA9IGNvbnN0X2Nh
c3Q8Q29kZVByb2ZpbGUqPihzX3Byb2ZpbGVTdGFjayk7CisgICAgYm9vbCBhbHJlYWR5UHJvZmls
aW5nID0gcHJvZmlsZVN0YWNrOworICAgIHNfcHJvZmlsZVN0YWNrID0gcHJvZmlsZVN0YWNrID0g
bmV3IENvZGVQcm9maWxlKHNvdXJjZSwgcHJvZmlsZVN0YWNrKTsKKworICAgIC8vIElzIHRoZSBw
cm9maWxlciBhbHJlYWR5IHJ1bm5pbmcgLSBpZiBzbywgdGhlIHRpbWVyIHdpbGwgYWxyZWFkeSBi
ZSBzZXQgdXAuCisgICAgaWYgKGFscmVhZHlQcm9maWxpbmcpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIFJlZ3NpdGVyIGEgc2lnbmFsIGhhbmRsZXIgJiBpdGltZXIuCisjaWYgUExBVEZPUk0o
TUFDKSAmJiBDUFUoWDg2XzY0KQorICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworICAgIGFj
dGlvbi5zYV9zaWdhY3Rpb24gPSByZWludGVycHJldF9jYXN0PHZvaWQgKCopKGludCwgc3RydWN0
IF9fc2lnaW5mbyAqLCB2b2lkICopPihwcm9maWxpbmdUaW1lcik7CisgICAgc2lnZmlsbHNldCgm
YWN0aW9uLnNhX21hc2spOworICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87CisgICAg
c2lnYWN0aW9uKFNJR0FMUk0sICZhY3Rpb24sIDApOworI2VuZGlmCisgICAgc2V0UHJvZmlsZVRp
bWVyKDEwMCk7Cit9CisKK3ZvaWQgQ29kZVByb2ZpbGluZzo6ZW5kKCkKK3sKKyAgICAvLyBQb3Ag
dGhlIGN1cnJlbnQgcHJvZmlsZXIgb2ZmIHRoZSBzdGFjay4KKyAgICBDb2RlUHJvZmlsZSogY3Vy
cmVudCA9IGNvbnN0X2Nhc3Q8Q29kZVByb2ZpbGUqPihzX3Byb2ZpbGVTdGFjayk7CisgICAgQVNT
RVJUKGN1cnJlbnQpOworICAgIHNfcHJvZmlsZVN0YWNrID0gY3VycmVudC0+cGFyZW50KCk7CisK
KyAgICAvLyBJcyB0aGlzIHRoZSBvdXRlcm1vc3Qgc2NyaXB0IGJlaW5nIHByb2ZpbGVkPyAtIGlm
IG5vdCwganVzdCByZXR1cm4uCisgICAgLy8gV2UgcGVyZm9ybSBhbGwgb3V0cHV0IG9mIHByb2Zp
bGVzIHJlY3Vyc2l2ZWx5IGZyb20gdGhlIG91dGVybW9zdCBzY3JpcHQsCisgICAgLy8gdG8gbWlu
aW1pemUgcHJvZmlsaW5nIG92ZXJoZWFkIGZyb20gc2tld2luZyByZXN1bHRzLgorICAgIGlmIChz
X3Byb2ZpbGVTdGFjaykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gU3RvcCBwcm9maWxpbmcK
KyAgICBzZXRQcm9maWxlVGltZXIoMCk7CisKKyAgICBjdXJyZW50LT5yZXBvcnQoKTsKKyAgICBk
ZWxldGUgY3VycmVudDsKK30KKworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L0NvZGVQcm9maWxpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9v
bHMvQ29kZVByb2ZpbGluZy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL0NvZGVQcm9maWxpbmcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENvZGVQ
cm9maWxpbmdfaAorI2RlZmluZSBDb2RlUHJvZmlsaW5nX2gKKworbmFtZXNwYWNlIFdURiB7CisK
K2NsYXNzIE1ldGFBbGxvY2F0b3I7CitjbGFzcyBNZXRhQWxsb2NhdG9yVHJhY2tlcjsKKworfQor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZVByb2ZpbGU7CitjbGFzcyBTb3VyY2VDb2Rl
OworCitjbGFzcyBDb2RlUHJvZmlsaW5nIHsKKyAgICBlbnVtIE1vZGUgeworICAgICAgICBEaXNh
YmxlZCwKKyAgICAgICAgRW5hYmxlZCwKKyAgICAgICAgVmVyYm9zZSwKKyAgICAgICAgVmVyeVZl
cmJvc2UKKyAgICB9OworCitwdWJsaWM6CisgICAgQ29kZVByb2ZpbGluZyhjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UpCisgICAgICAgIDogbV9hY3RpdmUoZW5hYmxlZCgpKQorICAgIHsKKyAgICAg
ICAgaWYgKG1fYWN0aXZlKQorICAgICAgICAgICAgYmVnaW4oc291cmNlKTsKKyAgICB9CisKKyAg
ICB+Q29kZVByb2ZpbGluZygpCisgICAgeworICAgICAgICBpZiAobV9hY3RpdmUpCisgICAgICAg
ICAgICBlbmQoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBlbmFibGVkKCkgeyByZXR1cm4g
c19tb2RlICE9IERpc2FibGVkOyB9CisgICAgc3RhdGljIGJvb2wgYmVWZXJib3NlKCkgeyByZXR1
cm4gc19tb2RlID49IFZlcmJvc2U7IH0KKyAgICBzdGF0aWMgYm9vbCBiZVZlcnlWZXJib3NlKCkg
eyByZXR1cm4gc19tb2RlID49IFZlcnlWZXJib3NlOyB9CisKKyAgICBzdGF0aWMgdm9pZCBub3Rp
ZnlBbGxvY2F0b3IoV1RGOjpNZXRhQWxsb2NhdG9yKik7CisgICAgc3RhdGljIHZvaWQqIGdldE93
bmVyVUlERm9yUEModm9pZCopOworICAgIHN0YXRpYyB2b2lkIHNhbXBsZSh2b2lkKiBwYywgdm9p
ZCoqIGZyYW1lUG9pbnRlcik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBiZWdpbihjb25zdCBTb3Vy
Y2VDb2RlJik7CisgICAgdm9pZCBlbmQoKTsKKworICAgIGJvb2wgbV9hY3RpdmU7CisKKyAgICBz
dGF0aWMgTW9kZSBzX21vZGU7CisgICAgc3RhdGljIFdURjo6TWV0YUFsbG9jYXRvclRyYWNrZXIq
IHNfdHJhY2tlcjsKKyAgICBzdGF0aWMgdm9sYXRpbGUgQ29kZVByb2ZpbGUqIHNfcHJvZmlsZVN0
YWNrOworfTsKKworfQorCisjZW5kaWYgLy8gQ29kZVByb2ZpbGluZ19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9Qcm9maWxlVHJlZU5vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvUHJvZmlsZVRyZWVOb2RlLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgUHJvZmlsZVRyZWVOb2RlX2gKKyNkZWZpbmUgUHJvZmls
ZVRyZWVOb2RlX2gKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFByb2ZpbGVUcmVlTm9kZSB7
CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUHJvZmlsZVRyZWVOb2RlPiBNYXA7CisgICAg
dHlwZWRlZiBzdGQ6OnBhaXI8U3RyaW5nLCBQcm9maWxlVHJlZU5vZGU+IE1hcEVudHJ5OworCitw
dWJsaWM6CisgICAgUHJvZmlsZVRyZWVOb2RlKCkKKyAgICAgICAgOiBtX2NvdW50KDApCisgICAg
ICAgICwgbV9jaGlsZHJlbigwKQorICAgIHsKKyAgICB9CisKKyAgICB+UHJvZmlsZVRyZWVOb2Rl
KCkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtX2NoaWxkcmVuOworICAgIH0KKworICAgIFByb2Zp
bGVUcmVlTm9kZSogc2FtcGxlQ2hpbGQoY29uc3QgY2hhciogbmFtZSkKKyAgICB7CisgICAgICAg
IGlmICghbV9jaGlsZHJlbikKKyAgICAgICAgICAgIG1fY2hpbGRyZW4gPSBuZXcgTWFwKCk7Cisg
ICAgCisgICAgICAgIFByb2ZpbGVUcmVlTm9kZSBuZXdFbnRyeTsKKyAgICAgICAgcGFpcjxNYXA6
Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX2NoaWxkcmVuLT5hZGQoU3RyaW5nKG5hbWUpLCBu
ZXdFbnRyeSk7CisgICAgICAgIFByb2ZpbGVUcmVlTm9kZSogY2hpbGRJbk1hcCA9ICZyZXN1bHQu
Zmlyc3QtPnNlY29uZDsKKyAgICAgICAgKytjaGlsZEluTWFwLT5tX2NvdW50OworICAgICAgICBy
ZXR1cm4gY2hpbGRJbk1hcDsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoKQorICAgIHsKKyAgICAg
ICAgZHVtcEludGVybmFsKDApOworICAgIH0KKworICAgIHVpbnQ2NF90IGNvdW50KCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2NvdW50OworICAgIH0KKworICAgIHVpbnQ2NF90IGNoaWxkQ291
bnQoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NoaWxkcmVuKQorICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIHVpbnQ2NF90IGNoaWxkQ291bnQgPSAwOworICAgICAgICBmb3IgKE1hcDo6
aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLT5iZWdpbigpOyBpdCAhPSBtX2NoaWxkcmVuLT5lbmQo
KTsgKytpdCkKKyAgICAgICAgICAgIGNoaWxkQ291bnQgKz0gaXQtPnNlY29uZC5jb3VudCgpOwor
ICAgICAgICByZXR1cm4gY2hpbGRDb3VudDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHZv
aWQgZHVtcEludGVybmFsKHVuc2lnbmVkIGluZGVudCkKKyAgICB7CisgICAgICAgIGlmICghbV9j
aGlsZHJlbikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBDb3B5IHBvaW50ZXJz
IHRvIGFsbCBjaGlsZHJlbiBpbnRvIGEgdmVjdG9yLCBhbmQgc29ydCB0aGUgdmVjdG9yIGJ5IHNh
bXBsZSBjb3VudC4KKyAgICAgICAgVmVjdG9yPE1hcEVudHJ5Kj4gZW50cmllczsKKyAgICAgICAg
Zm9yIChNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi0+YmVnaW4oKTsgaXQgIT0gbV9jaGls
ZHJlbi0+ZW5kKCk7ICsraXQpCisgICAgICAgICAgICBlbnRyaWVzLmFwcGVuZCgmKml0KTsKKyAg
ICAgICAgcXNvcnQoZW50cmllcy5iZWdpbigpLCBlbnRyaWVzLnNpemUoKSwgc2l6ZW9mKE1hcEVu
dHJ5KiksIGNvbXBhcmVFbnRyaWVzKTsKKworICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGNo
aWxkcmVuIGluIHNhbXBsZS1mcmVxdWVuY3kgb3JkZXIuCisgICAgICAgIGZvciAoc2l6ZV90IGUg
PSAwOyBlIDwgZW50cmllcy5zaXplKCk7ICsrZSkgeworICAgICAgICAgICAgTWFwRW50cnkqIGVu
dHJ5ID0gZW50cmllc1tlXTsKKworICAgICAgICAgICAgLy8gUHJpbnQgdGhlIG51bWJlciBvZiBz
YW1wbGVzLCB0aGUgbmFtZSBvZiB0aGlzIG5vZGUsIGFuZCB0aGUgbnVtYmVyIG9mIHNhbXBsZXMg
dGhhdCBhcmUgc3RhY2stdG9wCisgICAgICAgICAgICAvLyBpbiB0aGlzIG5vZGUgKHNhbXBsZXMg
ZGlyZWN0bHkgd2l0aGluIHRoaXMgbm9kZSwgZXhjbHVkaW5nIHNhbXBsZXMgaW4gY2hpbGRyZW4u
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5kZW50OyArK2kpCisgICAg
ICAgICAgICAgICAgZnByaW50ZihzdGRvdXQsICIgICAgIik7CisgICAgICAgICAgICBmcHJpbnRm
KHN0ZG91dCwgIiUgOGxsZDogJXMgKCVsbGQgc3RhY2sgdG9wKVxuIiwKKyAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGVudHJ5LT5zZWNvbmQuY291bnQoKSksCisgICAgICAg
ICAgICAgICAgZW50cnktPmZpcnN0LnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8bG9uZyBsb25nPihlbnRyeS0+c2Vjb25kLmNvdW50KCkgLSBlbnRyeS0+c2Vjb25k
LmNoaWxkQ291bnQoKSkpOworCisgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBkdW1wIHRoZSBj
aGlsZCBub2Rlcy4KKyAgICAgICAgICAgIGVudHJ5LT5zZWNvbmQuZHVtcEludGVybmFsKGluZGVu
dCArIDEpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGludCBjb21wYXJlRW50cmll
cyhjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQorICAgIHsKKyAgICAgICAgdWludDY0X3Qg
ZGEgPSAoKnN0YXRpY19jYXN0PE1hcEVudHJ5KiBjb25zdCAqPihhKSktPnNlY29uZC5jb3VudCgp
OworICAgICAgICB1aW50NjRfdCBkYiA9ICgqc3RhdGljX2Nhc3Q8TWFwRW50cnkqIGNvbnN0ICo+
KGIpKS0+c2Vjb25kLmNvdW50KCk7CisgICAgICAgIHJldHVybiAoZGEgPCBkYikgLSAoZGEgPiBk
Yik7CisgICAgfQorCisgICAgdWludDY0X3QgbV9jb3VudDsKKyAgICBNYXAqIG1fY2hpbGRyZW47
Cit9OworCit9CisKKyNlbmRpZiAvLyBQcm9maWxlVHJlZU5vZGVfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvVGllcmVkTU1hcEFycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1RpZXJlZE1NYXBBcnJheS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1RpZXJlZE1NYXBBcnJheS5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIFRpZXJlZE1NYXBBcnJheV9oCisjZGVmaW5lIFRpZXJlZE1N
YXBBcnJheV9oCisKKyNpbmNsdWRlICJPU0FsbG9jYXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgc2ltcGxlIGFycmF5IGNsYXNzIHRoYXQgY2Fu
IGJlIGdyb3duIGJ5IGFwcGVuZGluZyBpdGVtcyB0byB0aGUgZW5kLgorLy8gVGhpcyBjbGFzcyBp
cyBpbXBsZW1lbnRlZCBwdXJlbHkgaW4gdGVybXMgb2Ygc3lzdGVtIGFsbG9jYXRpb25zLCB3aXRo
IG5vIG1hbGxvYy9mcmVlLCBzbyB0aGF0CisvLyBpdCBjYW4gc2FmZWx5IGJlIHVzZWQgZnJvbSBh
IHNlY29uZGFyeSB0aHJlYWQgd2hpbHN0IHRoZSBtYWluIHRocmFkIGlzIHBhdXNlZCAocG90ZW50
aWFsbHkKKy8vIGhvbGRpbmcgdGhlIGZhc3QgbWFsbG9jIGhlYXAgbG9jaykuCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorY2xhc3MgVGllcmVkTU1hcEFycmF5IHsKKyAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IGVudHJpZXNQZXJCbG9jayA9IDQwOTY7CisKK3B1YmxpYzoKKyAgICBUaWVyZWRNTWFwQXJy
YXkoKQorICAgICAgICA6IG1fZGlyZWN0b3J5Q291bnQoNDA5NikKKyAgICAgICAgLCBtX2RpcmVj
dG9yeShzdGF0aWNfY2FzdDxUKio+KE9TQWxsb2NhdG9yOjpyZXNlcnZlQW5kQ29tbWl0KG1fZGly
ZWN0b3J5Q291bnQgKiBzaXplb2YoVCopKSkpCisgICAgICAgICwgbV9zaXplKDApCisgICAgewor
ICAgICAgICBmb3IgKHNpemVfdCBibG9jayA9IDA7IGJsb2NrIDwgbV9kaXJlY3RvcnlDb3VudDsg
KytibG9jaykKKyAgICAgICAgICAgIG1fZGlyZWN0b3J5W2Jsb2NrXSA9IDA7CisgICAgfQorCisg
ICAgflRpZXJlZE1NYXBBcnJheSgpCisgICAgeworICAgICAgICBzaXplX3QgdXNlZENvdW50ID0g
KG1fc2l6ZSArIChlbnRyaWVzUGVyQmxvY2sgLSAxKSkgLyBlbnRyaWVzUGVyQmxvY2s7CisgICAg
ICAgIEFTU0VSVCh1c2VkQ291bnQgPT0gbV9kaXJlY3RvcnlDb3VudCB8fCAhbV9kaXJlY3Rvcnlb
dXNlZENvdW50XSk7CisKKyAgICAgICAgZm9yIChzaXplX3QgYmxvY2sgPSAwOyBibG9jayA8IHVz
ZWRDb3VudDsgKytibG9jaykgeworICAgICAgICAgICAgQVNTRVJUKG1fZGlyZWN0b3J5W2Jsb2Nr
XSk7CisgICAgICAgICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKG1fZGlyZWN0
b3J5W2Jsb2NrXSwgZW50cmllc1BlckJsb2NrICogc2l6ZW9mKFQpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIE9TQWxsb2NhdG9yOjpkZWNvbW1pdEFuZFJlbGVhc2UobV9kaXJlY3RvcnksIG1fZGly
ZWN0b3J5Q291bnQgKiBzaXplb2YoVCopKTsKKyAgICB9CisKKyAgICBUJiBvcGVyYXRvcltdKHNp
emVfdCBpbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpbmRleCA8IG1fc2l6ZSk7CisgICAg
ICAgIHNpemVfdCBibG9jayA9IGluZGV4IC8gZW50cmllc1BlckJsb2NrOworICAgICAgICBzaXpl
X3Qgb2Zmc2V0ID0gaW5kZXggJSBlbnRyaWVzUGVyQmxvY2s7CisKKyAgICAgICAgQVNTRVJUKG1f
ZGlyZWN0b3J5W2Jsb2NrXSk7CisgICAgICAgIHJldHVybiBtX2RpcmVjdG9yeVtibG9ja11bb2Zm
c2V0XTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZChjb25zdCBUJiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIC8vIENoZWNrIGlmIHRoZSBhcnJheSBpcyBjb21wbGV0ZWx5IGZ1bGwsIGlmIHNvIGNy
ZWF0ZSBtb3JlIGNhcGFjaXR5IGluIHRoZSBkaXJlY3RvcnkuCisgICAgICAgIGlmIChtX3NpemUg
PT0gbV9kaXJlY3RvcnlDb3VudCAqIGVudHJpZXNQZXJCbG9jaykgeworICAgICAgICAgICAgLy8g
UmVhbGxvY2F0ZSB0aGUgZGlyZWN0b3J5LgorICAgICAgICAgICAgc2l6ZV90IG9sZERpcmVjdG9y
eVNpemUgPSBtX2RpcmVjdG9yeUNvdW50ICogc2l6ZW9mKFQqKTsKKyAgICAgICAgICAgIHNpemVf
dCBuZXdEaXJlY3RvcnlTaXplID0gb2xkRGlyZWN0b3J5U2l6ZSAqIDI7CisgICAgICAgICAgICBp
ZiAobmV3RGlyZWN0b3J5U2l6ZSA8IG9sZERpcmVjdG9yeVNpemUpCisgICAgICAgICAgICAgICAg
Q1JBU0goKTsKKyAgICAgICAgICAgIG1fZGlyZWN0b3J5ID0gT1NBbGxvY2F0b3I6OnJlYWxsb2Nh
dGVDb21taXR0ZWQobV9kaXJlY3RvcnksIG9sZERpcmVjdG9yeVNpemUsIG5ld0RpcmVjdG9yeVNp
emUpOworCisgICAgICAgICAgICAvLyAKKyAgICAgICAgICAgIHNpemVfdCBuZXdEaXJlY3RvcnlD
b3VudCA9IG1fZGlyZWN0b3J5Q291bnQgKiAyOworICAgICAgICAgICAgZm9yIChzaXplX3QgYmxv
Y2sgPSBtX2RpcmVjdG9yeUNvdW50OyBibG9jayA8IG5ld0RpcmVjdG9yeUNvdW50OyArK2Jsb2Nr
KQorICAgICAgICAgICAgICAgIG1fZGlyZWN0b3J5W2Jsb2NrXSA9IDA7CisgICAgICAgICAgICBt
X2RpcmVjdG9yeUNvdW50ID0gbmV3RGlyZWN0b3J5Q291bnQ7CisgICAgICAgIH0KKworICAgICAg
ICBzaXplX3QgaW5kZXggPSBtX3NpemU7CisgICAgICAgIHNpemVfdCBibG9jayA9IGluZGV4IC8g
ZW50cmllc1BlckJsb2NrOworICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gaW5kZXggJSBlbnRyaWVz
UGVyQmxvY2s7CisKKyAgICAgICAgaWYgKCFvZmZzZXQpIHsKKyAgICAgICAgICAgIEFTU0VSVCgh
bV9kaXJlY3RvcnlbYmxvY2tdKTsKKyAgICAgICAgICAgIG1fZGlyZWN0b3J5W2Jsb2NrXSA9IHN0
YXRpY19jYXN0PFQqPihPU0FsbG9jYXRvcjo6cmVzZXJ2ZUFuZENvbW1pdChlbnRyaWVzUGVyQmxv
Y2sgKiBzaXplb2YoVCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChtX2RpcmVjdG9y
eVtibG9ja10pOworICAgICAgICArK21fc2l6ZTsKKyAgICAgICAgbV9kaXJlY3RvcnlbYmxvY2td
W29mZnNldF0gPSB2YWx1ZTsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZTsgfQorCitwcml2YXRlOgorICAgIHNpemVfdCBtX2RpcmVjdG9yeUNvdW50Owor
ICAgIFQqKiBtX2RpcmVjdG9yeTsKKyAgICBzaXplX3QgbV9zaXplOworfTsKKworfQorCisjZW5k
aWYgLy8gVGllcmVkTU1hcEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9NZXRhQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL01ldGFBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMCAr
NTUsMTEgQEAgQUxXQVlTX0lOTElORSB2b2lkIE1ldGFBbGxvY2F0b3I6OnJlbGVhcwogICAgICAg
ICBtX3RyYWNrZXItPnJlbGVhc2UoaGFuZGxlKTsKIH0KIAotTWV0YUFsbG9jYXRvckhhbmRsZTo6
TWV0YUFsbG9jYXRvckhhbmRsZShNZXRhQWxsb2NhdG9yKiBhbGxvY2F0b3IsIHZvaWQqIHN0YXJ0
LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCitNZXRhQWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9y
SGFuZGxlKE1ldGFBbGxvY2F0b3IqIGFsbG9jYXRvciwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXpl
SW5CeXRlcywgdm9pZCogb3duZXJVSUQpCiAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCiAg
ICAgLCBtX3N0YXJ0KHN0YXJ0KQogICAgICwgbV9zaXplSW5CeXRlcyhzaXplSW5CeXRlcykKKyAg
ICAsIG1fb3duZXJVSUQob3duZXJVSUQpCiB7CiAgICAgQVNTRVJUKGFsbG9jYXRvcik7CiAgICAg
QVNTRVJUKHN0YXJ0KTsKQEAgLTEyOSw3ICsxMzAsNyBAQCBNZXRhQWxsb2NhdG9yOjpNZXRhQWxs
b2NhdG9yKHNpemVfdCBhbGxvCiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4oMSkgPDwg
bV9sb2dBbGxvY2F0aW9uR3JhbnVsZSA9PSBtX2FsbG9jYXRpb25HcmFudWxlKTsKIH0KIAotUGFz
c1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZShzaXpl
X3Qgc2l6ZUluQnl0ZXMpCitQYXNzUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IE1ldGFBbGxv
Y2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQpCiB7CiAg
ICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwogCkBAIC0xNjcsNyArMTY4LDcgQEAg
UGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsbwogICAgIG1fbnVtQWxsb2Nh
dGlvbnMrKzsKICNlbmRpZgogCi0gICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gbmV3
IE1ldGFBbGxvY2F0b3JIYW5kbGUodGhpcywgc3RhcnQsIHNpemVJbkJ5dGVzKTsKKyAgICBNZXRh
QWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBuZXcgTWV0YUFsbG9jYXRvckhhbmRsZSh0aGlzLCBz
dGFydCwgc2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGEg
dmVyaWZpZXIgc2NoZW1lIHRoYXQgZ3Jva3MgTWV0YUFsbG9jYXRvckhhbmRsZXMKICAgICBoYW5k
bGUtPmRlcHJlY2F0ZWRUdXJuT2ZmVmVyaWZpZXIoKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHJldmlzaW9uIDEwNjE1MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3
ICs2Nyw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIH5NZXRhQWxsb2NhdG9yKCk7CiAg
ICAgCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFBhc3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRs
ZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
UGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0
ZXMsIHZvaWQqIG93bmVyVUlEKTsKIAogICAgIHZvaWQgdHJhY2tBbGxvY2F0aW9ucyhNZXRhQWxs
b2NhdG9yVHJhY2tlciogdHJhY2tlcikKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkocmV2aXNpb24gMTA2MTUwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgTWV0YUFsbG9jYXRvcjsKIAogY2xhc3MgTWV0
YUFsbG9jYXRvckhhbmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkPE1ldGFBbGxvY2F0b3JIYW5kbGU+
LCBwdWJsaWMgUmVkQmxhY2tUcmVlPE1ldGFBbGxvY2F0b3JIYW5kbGUsIHZvaWQqPjo6Tm9kZSB7
CiBwcml2YXRlOgotICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciosIHZvaWQq
IHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0
YUFsbG9jYXRvciosIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVy
VUlEKTsKICAgICAKIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfk1ldGFBbGxvY2F0
b3JIYW5kbGUoKTsKQEAgLTcyLDcgKzcyLDEyIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1f
YWxsb2NhdG9yKTsKICAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yOwogICAgIH0KLSAgICAKKwor
ICAgIHZvaWQqIG93bmVyVUlEKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX293bmVyVUlEOwor
ICAgIH0KKwogICAgIHZvaWQqIGtleSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9zdGFydDsK
QEAgLTg0LDYgKzg5LDcgQEAgcHJpdmF0ZToKICAgICBNZXRhQWxsb2NhdG9yKiBtX2FsbG9jYXRv
cjsKICAgICB2b2lkKiBtX3N0YXJ0OwogICAgIHNpemVfdCBtX3NpemVJbkJ5dGVzOworICAgIHZv
aWQqIG1fb3duZXJVSUQ7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L09TQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9P
U0FsbG9jYXRvci5oCShyZXZpc2lvbiAxMDYxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL09TQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5k
ZWYgT1NBbGxvY2F0b3JfaAogI2RlZmluZSBPU0FsbG9jYXRvcl9oCiAKKyNpbmNsdWRlIDxhbGdv
cml0aG0+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZNVGFn
cy5oPgogI2luY2x1ZGUgPHd0Zi9WTVRhZ3MuaD4KQEAgLTY1LDYgKzY2LDEyIEBAIHB1YmxpYzoK
ICAgICAvLyBzcGVjaWZpZWQuCiAgICAgc3RhdGljIHZvaWQqIHJlc2VydmVBbmRDb21taXQoc2l6
ZV90IHJlc2VydmVTaXplLCBzaXplX3QgY29tbWl0U2l6ZSwgVXNhZ2UgPSBVbmtub3duVXNhZ2Us
IGJvb2wgd3JpdGFibGUgPSB0cnVlLCBib29sIGV4ZWN1dGFibGUgPSBmYWxzZSk7CiAgICAgc3Rh
dGljIHZvaWQgZGVjb21taXRBbmRSZWxlYXNlKHZvaWQqIHJlbGVhc2VCYXNlLCBzaXplX3QgcmVs
ZWFzZVNpemUsIHZvaWQqIGRlY29tbWl0QmFzZSwgc2l6ZV90IGRlY29tbWl0U2l6ZSk7CisKKyAg
ICAvLyBSZWFsbG9jYXRlIGFuIGV4aXN0aW5nLCBjb21taXR0ZWQgYWxsb2NhdGlvbi4KKyAgICAv
LyBUaGUgcHJpb3IgYWxsb2NhdGlvbiBtdXN0IGJlIGZ1bGx5IGNvbWl0dGVkLCBhbmQgdGhlIG5l
dyBzaXplIHdpbGwgYWxzbyBiZSBmdWxseSBjb21taXR0ZWQuCisgICAgLy8gVGhpcyBpbnRlcmZh
Y2UgaXMgcHJvdmlkZWQgc2luY2UgaXQgbWF5IGJlIHBvc3NpYmxlIHRvIG9wdGltaXplIHRoaXMg
b3BlcmF0aW9uIG9uIHNvbWUgcGxhdGZvcm1zLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cisg
ICAgc3RhdGljIFQqIHJlYWxsb2NhdGVDb21taXR0ZWQoVCosIHNpemVfdCBvbGRTaXplLCBzaXpl
X3QgbmV3U2l6ZSwgVXNhZ2UgPSBVbmtub3duVXNhZ2UsIGJvb2wgd3JpdGFibGUgPSB0cnVlLCBi
b29sIGV4ZWN1dGFibGUgPSBmYWxzZSk7CiB9OwogCiBpbmxpbmUgdm9pZCogT1NBbGxvY2F0b3I6
OnJlc2VydmVBbmRDb21taXQoc2l6ZV90IHJlc2VydmVTaXplLCBzaXplX3QgY29tbWl0U2l6ZSwg
VXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSkKQEAgLTkzLDYgKzEw
MCwxNSBAQCBpbmxpbmUgdm9pZCBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlCiAgICAgZGVj
b21taXRBbmRSZWxlYXNlKGJhc2UsIHNpemUsIGJhc2UsIHNpemUpOwogfQogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgoraW5saW5lIFQqIE9TQWxsb2NhdG9yOjpyZWFsbG9jYXRlQ29tbWl0dGVkKFQq
IG9sZEJhc2UsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSwgVXNhZ2UgdXNhZ2UsIGJv
b2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSkKK3sKKyAgICB2b2lkKiBuZXdCYXNlID0gcmVz
ZXJ2ZUFuZENvbW1pdChuZXdTaXplLCB1c2FnZSwgd3JpdGFibGUsIGV4ZWN1dGFibGUpOworICAg
IG1lbWNweShuZXdCYXNlLCBvbGRCYXNlLCBzdGQ6Om1pbihvbGRTaXplLCBuZXdTaXplKSk7Cisg
ICAgZGVjb21taXRBbmRSZWxlYXNlKG9sZEJhc2UsIG9sZFNpemUpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUKj4obmV3QmFzZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBX
VEY6Ok9TQWxsb2NhdG9yOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>